| 1 |
- import{_ as us,k as ds,o as n,c as a,a as e,t as l,d as m,w as O,h as p,F as k,q as b,i as u,f as T,m as cs,y as v,r as S,j as ms,u as ps,g as vs,B as _s,z as W}from"./index-BNtoQzpv.js";import{scoreApi as X,dimensionApi as fs}from"./index-fQv2WpIJ.js";const ks={class:"page"},gs={class:"page-hero"},ys={class:"hero-info"},hs={key:0,class:"same-screen"},bs={class:"left-panel"},Ss={key:0,class:"panel-empty"},Rs={class:"orr-o-head"},xs={class:"orr-o-title"},Vs={key:0,class:"orr-o-meta"},ws={class:"orr-krs"},Os={class:"orr-kr-header"},Ts={class:"orr-kr-num"},Es={class:"orr-kr-title"},Ds={class:"orr-kr-metrics"},Ks={class:"orkm-item"},Ns={class:"orkm-value"},Cs={class:"orkm-item"},Ms={key:0,class:"orkm-item"},As={class:"orkm-value"},Is={key:0,class:"orr-kr-logs"},zs={class:"orkl-time"},Bs={class:"orkl-change"},Ls={class:"orkl-status"},Fs={key:0,class:"orkl-remark"},Us={key:1,class:"panel-empty"},Ps={class:"self-block"},Gs={class:"self-block-title"},Js={class:"sb-sub"},qs={key:0,class:"self-kr-list"},js={class:"ski-num"},Hs={class:"ski-title"},Qs={class:"ski-score"},Ws={class:"self-subtotal"},Xs={class:"self-block"},Ys={key:0,class:"self-dim-list"},Zs={class:"sdi-head"},$s={class:"sdi-name"},se={class:"sdi-score"},ee={key:0,class:"sdi-desc"},te={class:"self-subtotal"},le={class:"self-block"},oe={class:"self-bp"},ne={key:0},ae={class:"self-total-bar"},re={class:"stb-grade"},ie={class:"score-panel"},ue={class:"score-card"},de={class:"kr-score-list"},ce={class:"ksr-label"},me={class:"ksr-num"},pe={class:"ksr-title"},ve={key:0,class:"ksr-self-ref"},_e={class:"ksr-inputs"},fe={class:"ksr-eq"},ke={class:"okr-subtotal"},ge={class:"score-card"},ye={class:"dim-head"},he={class:"dim-num"},be={class:"dim-name"},Se={class:"dim-max"},Re={key:0,class:"dim-self-ref"},xe={key:0,class:"dim-self-desc"},Ve={class:"dim-score-unit"},we={class:"okr-subtotal"},Oe={class:"score-card"},Te={class:"sc-body"},Ee={class:"sc-inline"},De={class:"sc-inline"},Ke={class:"result-preview"},Ne={class:"rp-score"},Ce={class:"rp-grade"},Me={__name:"ScoringEditView",setup(Ae){const E=cs(),Y=ps(),c=T({}),C=T(!1),_=ms({bonus:0,penalty:0,remark:""}),g=T([]),L=T([]),D=T([]),y=v(()=>c.value.okrRecords||[]),Z=v(()=>g.value.length?g.value.reduce((s,r)=>s+r.score,0)/g.value.length:0),M=v(()=>{var s;const t=y.value;if(t.length&&((s=t[0].keyResults)!=null&&s.length)){const r=t[0].keyResults.length,x=g.value.reduce((f,w)=>f+w.score,0);return Math.round(x/r*60*10)/10}return 0}),A=v(()=>Math.round(D.value.reduce((t,s)=>t+(s.score||0),0)*10)/10),F=v(()=>Math.round((M.value+A.value+_.bonus-_.penalty)*10)/10),$=v(()=>{const t=F.value;return t>=90?"S":t>=75?"A":t>=60?"B":"C"}),I=v(()=>{var t;if(!((t=c.value.selfScore)!=null&&t.commentsJson))return null;try{return JSON.parse(c.value.selfScore.commentsJson)}catch{return null}}),R=v(()=>{var t;return((t=I.value)==null?void 0:t.krScores)||[]}),V=v(()=>{var t;return((t=I.value)==null?void 0:t.dimensions)||[]}),U=v(()=>{var t;return((t=I.value)==null?void 0:t.remark)||""}),ss=v(()=>{var r,x;if(!R.value.length)return 0;const t=((x=(r=y.value[0])==null?void 0:r.keyResults)==null?void 0:x.length)||R.value.length,s=R.value.reduce((f,w)=>f+(w.score||0),0);return Math.round(s/t*60*10)/10}),es=v(()=>Math.round(V.value.reduce((t,s)=>t+(s.score||0),0)*10)/10),ts=v(()=>{var s;const t=((s=c.value.selfScore)==null?void 0:s.total)||0;return t>=90?"S":t>=75?"A":t>=60?"B":"C"}),ls=v(()=>{var s,r;const t=y.value;return t.length&&((r=(s=t[0])==null?void 0:s.keyResults)!=null&&r.length),60});function P(t){var s;return((s=R.value[t])==null?void 0:s.score)??null}function z(t){const s=V.value.find(r=>r.name===t);return s?s.score:null}function G(t){const s=V.value.find(r=>r.name===t);return(s==null?void 0:s.description)||""}ds(async()=>{var s;c.value=await X.getPage(E.query.periodId,E.params.userId);const t=y.value;t.length&&((s=t[0].keyResults)!=null&&s.length)&&(g.value=t[0].keyResults.map(r=>({title:r.title,score:.6}))),L.value=await fs.list(),D.value=L.value.map(r=>({id:r.id,name:r.name,maxScore:r.maxScore,score:z(r.name)??Math.round(r.maxScore*.7*10)/10}))});async function os(){if(!_.remark){W.warning("请填写加减分备注");return}C.value=!0;try{const t=D.value.map(s=>({dimensionId:s.id,name:s.name,maxScore:s.maxScore,score:s.score}));await X.submitSuperior({periodId:E.query.periodId,userId:Number(E.params.userId),okrScore:M.value,kpiScore:A.value,bonus:_.bonus,penalty:_.penalty,commentsJson:JSON.stringify({krScores:g.value,dimensions:t,remark:_.remark})}),W.success("考评已提交"),Y.push("/scoring")}finally{C.value=!1}}function J(t){return!t.targetValue||t.targetValue===0?0:Math.min(t.currentValue/t.targetValue*100,100)}function q(t){return{COMPLETED:"#27ae60",BLOCKED:"#e67e22",IN_PROGRESS:"#3ad4d8",NOT_STARTED:"#c0c4cc"}[t]||"#c0c4cc"}function j(t){return{NOT_STARTED:"未开始",IN_PROGRESS:"进行中",COMPLETED:"已完成",BLOCKED:"阻塞"}[t]||t}function ns(t){return{COMPLETED:"success",BLOCKED:"danger",IN_PROGRESS:"",NOT_STARTED:"info"}[t]||"info"}function as(t){return t?t.slice(0,16).replace("T"," "):""}return(t,s)=>{var H,Q;const r=S("el-tag"),x=S("el-progress"),f=S("el-option"),w=S("el-select"),B=S("el-input-number"),rs=S("el-input"),is=S("el-button");return n(),a("div",ks,[e("div",gs,[e("div",ys,[s[3]||(s[3]=e("h2",null,"绩效考评",-1)),e("p",null,l((H=c.value.targetUser)==null?void 0:H.realName)+" · "+l((Q=c.value.period)==null?void 0:Q.name),1)]),m(r,{size:"large",effect:"dark",round:""},{default:O(()=>{var o,d;return[u(l((o=c.value.period)==null?void 0:o.startDate)+" ~ "+l((d=c.value.period)==null?void 0:d.endDate),1)]}),_:1})]),c.value.targetUser?(n(),a("div",hs,[e("div",bs,[s[18]||(s[18]=e("div",{class:"panel-head"},"当期 OKR 完整记录",-1)),y.value.length?p("",!0):(n(),a("div",Ss,"暂无 OKR 记录")),(n(!0),a(k,null,b(y.value,o=>{var d;return n(),a("div",{key:o.id,class:"okr-record-card"},[e("div",Rs,[s[5]||(s[5]=e("span",{class:"orr-o-badge"},"O",-1)),e("span",xs,l(o.title),1),o.reviewedAt?(n(),vs(r,{key:0,size:"small",type:"success",effect:"plain",round:""},{default:O(()=>[...s[4]||(s[4]=[u("已通过",-1)])]),_:1})):p("",!0)]),o.reviewedAt?(n(),a("div",Vs,l(o.reviewerName)+" 审核 · "+l((d=o.reviewedAt)==null?void 0:d.slice(0,10)),1)):p("",!0),e("div",ws,[(n(!0),a(k,null,b(o.keyResults,(i,K)=>{var N;return n(),a("div",{key:i.id,class:"orr-kr-card"},[e("div",Os,[e("span",Ts,"KR"+l(K+1),1),e("span",Es,l(i.title),1),m(r,{type:ns(i.status),size:"small",effect:"plain",round:""},{default:O(()=>[u(l(j(i.status)),1)]),_:2},1032,["type"])]),e("div",Ds,[e("div",Ks,[s[6]||(s[6]=e("span",{class:"orkm-label"},"进度",-1)),e("span",Ns,l(i.currentValue)+" / "+l(i.targetValue),1)]),e("div",Cs,[s[7]||(s[7]=e("span",{class:"orkm-label"},"完成率",-1)),e("span",{class:"orkm-value",style:_s({color:q(i.status)})},l(J(i).toFixed(0))+"%",5)]),i.weight?(n(),a("div",Ms,[s[8]||(s[8]=e("span",{class:"orkm-label"},"权重",-1)),e("span",As,l(i.weight),1)])):p("",!0)]),m(x,{percentage:J(i),color:q(i.status),"stroke-width":8},null,8,["percentage","color"]),(N=i.progressLogs)!=null&&N.length?(n(),a("div",Is,[s[9]||(s[9]=e("div",{class:"orkl-head"},"更新记录",-1)),(n(!0),a(k,null,b(i.progressLogs.slice(0,5),h=>(n(),a("div",{key:h.id,class:"orkl-line"},[e("span",zs,l(as(h.createdAt)),1),e("span",Bs,l(h.oldValue||0)+" → "+l(h.newValue),1),e("span",Ls,l(j(h.newStatus)),1),h.remark?(n(),a("span",Fs,l(h.remark),1)):p("",!0)]))),128))])):p("",!0)])}),128))])])}),128)),s[19]||(s[19]=e("div",{class:"panel-divider"},null,-1)),s[20]||(s[20]=e("div",{class:"panel-head"},"📝 员工自评",-1)),c.value.selfScore?(n(),a(k,{key:2},[e("div",Ps,[e("div",Gs,[s[10]||(s[10]=u("🎯 OKR 目标达成自评 ",-1)),e("span",Js,"(满分 "+l(ls.value)+")",1)]),R.value.length?(n(),a("div",qs,[(n(!0),a(k,null,b(R.value,(o,d)=>(n(),a("div",{key:d,class:"self-kr-item"},[e("span",js,"KR"+l(d+1),1),e("span",Hs,l(o.title),1),e("span",Qs,l(o.score),1)]))),128))])):p("",!0),e("div",Ws,[s[11]||(s[11]=u("OKR 自评 = ",-1)),e("strong",null,l(ss.value.toFixed(1))+" 分",1)])]),e("div",Xs,[s[13]||(s[13]=e("div",{class:"self-block-title"},[u("📊 工作成果自评 "),e("span",{class:"sb-sub"},"(满分 40)")],-1)),V.value.length?(n(),a("div",Ys,[(n(!0),a(k,null,b(V.value,o=>(n(),a("div",{key:o.name,class:"self-dim-item"},[e("div",Zs,[e("span",$s,l(o.name),1),e("span",se,l(o.score)+" / "+l(o.maxScore),1)]),o.description?(n(),a("div",ee,l(o.description),1)):p("",!0)]))),128))])):p("",!0),e("div",te,[s[12]||(s[12]=u("工作成果自评 = ",-1)),e("strong",null,l(es.value.toFixed(1))+" 分",1)])]),e("div",le,[s[16]||(s[16]=e("div",{class:"self-block-title"},"⚡ 加减分",-1)),e("div",oe,[e("span",null,[s[14]||(s[14]=u("加分 ",-1)),e("strong",null,"+"+l(c.value.selfScore.bonus),1)]),e("span",null,[s[15]||(s[15]=u("扣分 ",-1)),e("strong",null,"-"+l(c.value.selfScore.penalty),1)]),U.value?(n(),a("span",ne,"说明:"+l(U.value),1)):p("",!0)])]),e("div",ae,[s[17]||(s[17]=u(" 员工自评总分 ",-1)),e("strong",null,l(c.value.selfScore.total)+" / 100",1),e("span",re,"(自评 "+l(ts.value)+")",1)])],64)):(n(),a("div",Us,"员工尚未提交自评"))]),e("div",ie,[s[31]||(s[31]=e("div",{class:"panel-head"},"考评打分",-1)),e("div",ue,[s[21]||(s[21]=e("div",{class:"sc-header"},[u("🎯 OKR 目标达成 "),e("span",{class:"sc-sub"},"逐条 KR 打分,满分 60")],-1)),e("div",de,[(n(!0),a(k,null,b(g.value,(o,d)=>{var i,K;return n(),a("div",{key:d,class:"kr-score-row"},[e("div",ce,[e("span",me,"KR"+l(d+1),1),e("span",pe,l(o.title||"(未配置)"),1),P(d)!==null?(n(),a("span",ve,"自评 "+l(P(d)),1)):p("",!0)]),e("div",_e,[m(w,{modelValue:o.score,"onUpdate:modelValue":N=>o.score=N,size:"default",style:{width:"120px"}},{default:O(()=>[m(f,{label:"1.0 · 卓越",value:1}),m(f,{label:"0.8 · 良好",value:.8}),m(f,{label:"0.6 · 达标",value:.6}),m(f,{label:"0.3 · 少量推进",value:.3}),m(f,{label:"0.0 · 未做",value:0})]),_:1},8,["modelValue","onUpdate:modelValue"]),e("span",fe,"= "+l((o.score*60/(((K=(i=y.value[0])==null?void 0:i.keyResults)==null?void 0:K.length)||3)).toFixed(1))+" 分",1)])])}),128))]),e("div",ke,[u(" OKR 得分 = 平均 "+l(Z.value.toFixed(2))+" × 60 = ",1),e("strong",null,l(M.value.toFixed(1))+" / 60",1)])]),e("div",ge,[s[23]||(s[23]=e("div",{class:"sc-header"},[u("📊 工作成果评价 "),e("span",{class:"sc-sub"},"满分 40")],-1)),(n(!0),a(k,null,b(D.value,(o,d)=>(n(),a("div",{key:d,class:"dim-row"},[e("div",ye,[e("span",he,l(d+1),1),e("span",be,l(o.name),1),e("span",Se,"满分 "+l(o.maxScore)+" 分",1),z(o.name)!==null?(n(),a("span",Re,"自评 "+l(z(o.name)),1)):p("",!0)]),G(o.name)?(n(),a("div",xe,l(G(o.name)),1)):p("",!0),m(B,{modelValue:o.score,"onUpdate:modelValue":i=>o.score=i,min:0,max:o.maxScore,precision:1,size:"small","controls-position":"right",style:{width:"130px"}},null,8,["modelValue","onUpdate:modelValue","max"]),e("span",Ve,"/ "+l(o.maxScore)+" 分",1)]))),128)),e("div",we,[s[22]||(s[22]=u(" 工作成果得分 = ",-1)),e("strong",null,l(A.value.toFixed(1))+" / 40",1)])]),e("div",Oe,[s[26]||(s[26]=e("div",{class:"sc-header"},"⚡ 专项加减分",-1)),e("div",Te,[e("div",Ee,[s[24]||(s[24]=e("span",{class:"sc-label"},"加分(上限5)",-1)),m(B,{modelValue:_.bonus,"onUpdate:modelValue":s[0]||(s[0]=o=>_.bonus=o),min:0,max:5,precision:1,size:"large","controls-position":"right",style:{width:"120px"}},null,8,["modelValue"])]),e("div",De,[s[25]||(s[25]=e("span",{class:"sc-label"},"扣分(无下限)",-1)),m(B,{modelValue:_.penalty,"onUpdate:modelValue":s[1]||(s[1]=o=>_.penalty=o),min:0,precision:1,size:"large","controls-position":"right",style:{width:"120px"}},null,8,["modelValue"])]),m(rs,{modelValue:_.remark,"onUpdate:modelValue":s[2]||(s[2]=o=>_.remark=o),type:"textarea",rows:2,placeholder:"加减分说明(必填)",style:{"margin-top":"8px"}},null,8,["modelValue"])])]),e("div",Ke,[s[29]||(s[29]=e("div",{class:"rp-formula"},"OKR×0.6 + 工作成果×0.4 + 加分 − 扣分",-1)),e("div",Ne,[u(l(F.value)+" ",1),s[27]||(s[27]=e("small",null,"/ 100",-1))]),e("div",Ce,[s[28]||(s[28]=u("评级 ",-1)),e("strong",null,l($.value),1)])]),m(is,{type:"primary",size:"large",class:"submit-btn",onClick:os,loading:C.value,round:""},{default:O(()=>[...s[30]||(s[30]=[u(" 提交绩效考评 ",-1)])]),_:1},8,["loading"])])])):p("",!0)])}}},Be=us(Me,[["__scopeId","data-v-6c59b193"]]);export{Be as default};
|