| 1 |
- import{periodApi as X,scoreApi as K,dimensionApi as Y}from"./index-fQv2WpIJ.js";import{_ as Z,k as ee,o as n,c as i,a as s,t as o,d,w as C,g as se,h as k,F as V,i as r,q as U,s as le,f as p,r as h,y as _,j as oe,z as M}from"./index-BNtoQzpv.js";import{P as te}from"./PeriodBanner-o392V5aV.js";const ae={class:"page"},ne={class:"page-hero"},ie={class:"hero-info"},re={key:1,class:"empty-state"},de={class:"form-card"},ue={key:0,class:"kr-score-list"},ce={class:"ksr-label"},ve={class:"ksr-num"},me={class:"ksr-title"},pe={class:"ksr-progress"},fe={class:"ksr-inputs"},be={class:"ksr-eq"},ke={key:1,class:"no-okr-hint"},_e={class:"okr-subtotal"},ye={class:"form-card"},ge={class:"dim-head"},Se={class:"dim-num"},Ve={class:"dim-name"},he={class:"dim-max"},xe={class:"dim-score-hint"},we={class:"okr-subtotal"},Re={class:"form-card"},Ae={class:"bonus-row"},Ce={class:"result-preview"},Ue={class:"rp-formula"},Fe={class:"rp-score"},Ne={class:"rp-grade"},ze={class:"submit-row"},Ie={key:3,class:"dashboard"},Ke={key:0,class:"score-hero"},Me={class:"grade-letter"},Be={class:"score-main"},De={class:"score-number"},Oe={class:"score-label"},Ee={class:"score-meta"},Te={class:"score-breakdown"},qe={class:"break-item"},Ge={class:"break-value"},Je={class:"break-item"},Pe={class:"break-value"},$e={class:"break-item bonus"},je={class:"break-value"},He={class:"break-item penalty"},Le={class:"break-value"},Qe={key:1,class:"score-hero self-submitted"},We={class:"score-main"},Xe={class:"score-number"},Ye={key:2,class:"score-pending"},Ze={key:3,class:"confirm-bar"},es={key:4,class:"confirmed-bar"},ss={key:5,class:"compare-row"},ls={class:"compare-card self"},os={class:"compare-score"},ts={class:"compare-card final"},as={class:"compare-score"},ns={class:"two-col"},is={class:"col okr-col"},rs={class:"mini-o"},ds={class:"mini-val"},us={class:"col feedback-col"},cs={key:0,class:"fb-content"},vs={key:0,class:"fb-block"},ms={class:"fb-text"},ps={key:1,class:"fb-block"},fs={class:"fb-text"},bs={key:2,class:"fb-block"},ks={class:"fb-text"},_s={key:3,class:"fb-block"},ys={class:"fb-text"},gs={key:1,class:"fb-empty"},Ss={__name:"MyResultView",setup(Vs){const x=p([]),f=p(null),l=p({}),F=p(!1),N=p(!1),B=p([]),m=p([]),g=p([]),u=oe({bonus:0,penalty:0,remark:""}),y=_(()=>l.value.okrRecords||[]),$=_(()=>{var a;return((a=l.value.period)==null?void 0:a.status)==="ASSESSING"&&!l.value.selfScore}),j=_(()=>m.value.length?m.value.reduce((e,c)=>e+c.score,0)/m.value.length:0),w=_(()=>{var a;if(y.value.length&&((a=y.value[0].keyResults)!=null&&a.length)){const e=y.value[0].keyResults.length,c=m.value.reduce((b,z)=>b+z.score,0);return Math.round(c/e*60*10)/10}return 0}),R=_(()=>Math.round(g.value.reduce((a,e)=>a+(e.score||0),0)*10)/10),D=_(()=>Math.round((w.value+R.value+u.bonus-u.penalty)*10)/10),H=_(()=>{const a=D.value;return a>=90?"S":a>=75?"A":a>=60?"B":"C"});ee(async()=>{x.value=await X.list();const a=x.value.filter(e=>e.status!=="ARCHIVED");a.length&&(f.value=a[0].id,await A())});async function A(){var e;if(!f.value)return;l.value=await K.getMyResult(f.value),B.value=await Y.list(),g.value=B.value.map(c=>({id:c.id,name:c.name,maxScore:c.maxScore,score:0,description:""}));const a=l.value.okrRecords||[];a.length&&((e=a[0].keyResults)!=null&&e.length)?m.value=a[0].keyResults.map(c=>({title:c.title,score:.6})):m.value=[]}async function L(){if(g.value.some(a=>!a.description.trim())){M.warning("请为每个维度填写工作成果自述");return}N.value=!0;try{const a=g.value.map(e=>({dimensionId:e.id,name:e.name,maxScore:e.maxScore,score:e.score,description:e.description}));await K.submitSelf({periodId:f.value,okrScore:w.value,kpiScore:R.value,bonus:u.bonus,penalty:u.penalty,commentsJson:JSON.stringify({krScores:m.value,dimensions:a,remark:u.remark})}),M.success("自评已提交,等待上级终审"),await A()}finally{N.value=!1}}async function Q(){F.value=!0;try{await K.confirm({periodId:f.value}),M.success("绩效结果已确认,本轮流程结束"),await A()}finally{F.value=!1}}function W(a){return{S:"卓越产出 · 团队标杆",A:"超出预期 · 高质量完成",B:"符合预期 · 满足岗位要求",C:"未达预期 · 需整改辅导"}[a]||""}return(a,e)=>{var E,T,q,G,J,P;const c=h("el-button"),b=h("el-option"),z=h("el-select"),O=h("el-input"),I=h("el-input-number");return n(),i("div",ae,[s("div",ne,[s("div",ie,[e[5]||(e[5]=s("h2",null,"我的绩效",-1)),s("p",null,o(l.value.period?l.value.period.name+" · "+l.value.period.startDate+" ~ "+l.value.period.endDate:"数据驱动,结果可追溯"),1)]),d(c,{onClick:e[0]||(e[0]=t=>a.$router.push("/scores/history")),round:""},{default:C(()=>[...e[6]||(e[6]=[r("📦 历史记录",-1)])]),_:1})]),x.value.length?(n(),se(te,{key:0,periods:x.value,modelValue:f.value,"onUpdate:modelValue":[e[1]||(e[1]=t=>f.value=t),A]},null,8,["periods","modelValue"])):k("",!0),l.value.period?$.value?(n(),i(V,{key:2},[e[17]||(e[17]=s("div",{class:"form-banner"},"请完成绩效自评后提交,上级将在此基础进行终审",-1)),s("div",de,[e[7]||(e[7]=s("div",{class:"form-section-title"},[r("🎯 OKR 目标达成自评 "),s("span",{class:"fst-sub"},"逐条 KR 打分(0.0-1.0),满分 60")],-1)),y.value.length?(n(),i("div",ue,[(n(!0),i(V,null,U(y.value[0].keyResults,(t,v)=>(n(),i("div",{key:t.id,class:"kr-score-row"},[s("div",ce,[s("span",ve,"KR"+o(v+1),1),s("span",me,o(t.title),1),s("span",pe,o(t.currentValue)+"/"+o(t.targetValue)+" ("+o(t.status)+")",1)]),s("div",fe,[d(z,{modelValue:m.value[v].score,"onUpdate:modelValue":S=>m.value[v].score=S,size:"default",style:{width:"120px"}},{default:C(()=>[d(b,{label:"1.0 · 卓越",value:1}),d(b,{label:"0.8 · 良好",value:.8}),d(b,{label:"0.6 · 达标",value:.6}),d(b,{label:"0.3 · 少量推进",value:.3}),d(b,{label:"0.0 · 未做",value:0})]),_:1},8,["modelValue","onUpdate:modelValue"]),s("span",be,"= "+o((m.value[v].score*60/y.value[0].keyResults.length).toFixed(1))+" 分",1)])]))),128))])):(n(),i("div",ke,"暂无 OKR 记录")),s("div",_e,[r(" OKR 得分 = 平均 "+o(j.value.toFixed(2))+" × 60 = ",1),s("strong",null,o(w.value.toFixed(1))+" / 60",1)])]),s("div",ye,[e[9]||(e[9]=s("div",{class:"form-section-title"},[r("📊 工作成果自评 "),s("span",{class:"fst-sub"},"按维度自述 + 打分,满分 40")],-1)),(n(!0),i(V,null,U(g.value,(t,v)=>(n(),i("div",{key:v,class:"dim-row"},[s("div",ge,[s("span",Se,o(v+1),1),s("span",Ve,o(t.name),1),s("span",he,"满分 "+o(t.maxScore)+" 分",1)]),d(O,{modelValue:t.description,"onUpdate:modelValue":S=>t.description=S,type:"textarea",rows:2,placeholder:"简述"+t.name+"方面的工作成果",style:{"margin-bottom":"6px"}},null,8,["modelValue","onUpdate:modelValue","placeholder"]),d(I,{modelValue:t.score,"onUpdate:modelValue":S=>t.score=S,min:0,max:t.maxScore,precision:1,size:"small","controls-position":"right",style:{width:"130px"}},null,8,["modelValue","onUpdate:modelValue","max"]),s("span",xe,"/ "+o(t.maxScore)+" 分",1)]))),128)),s("div",we,[e[8]||(e[8]=r(" 工作成果得分 = ",-1)),s("strong",null,o(R.value.toFixed(1))+" / 40",1)])]),s("div",Re,[e[12]||(e[12]=s("div",{class:"form-section-title"},"⚡ 专项加减分",-1)),s("div",Ae,[e[10]||(e[10]=s("span",{class:"bonus-label"},"加分(上限5)",-1)),d(I,{modelValue:u.bonus,"onUpdate:modelValue":e[2]||(e[2]=t=>u.bonus=t),min:0,max:5,precision:1,size:"large","controls-position":"right"},null,8,["modelValue"]),e[11]||(e[11]=s("span",{class:"bonus-label"},"扣分",-1)),d(I,{modelValue:u.penalty,"onUpdate:modelValue":e[3]||(e[3]=t=>u.penalty=t),min:0,precision:1,size:"large","controls-position":"right"},null,8,["modelValue"])]),d(O,{modelValue:u.remark,"onUpdate:modelValue":e[4]||(e[4]=t=>u.remark=t),type:"textarea",rows:2,placeholder:"加减分说明",style:{"margin-top":"8px"}},null,8,["modelValue"])]),s("div",Ce,[s("div",Ue,"OKR("+o(w.value.toFixed(1))+")+ 工作成果("+o(R.value.toFixed(1))+")+ 加分("+o(u.bonus)+")− 扣分("+o(u.penalty)+")",1),s("div",Fe,[r(o(D.value)+" ",1),e[13]||(e[13]=s("small",null,"/ 100",-1))]),s("div",Ne,[e[14]||(e[14]=r("自评评级 ",-1)),s("strong",null,o(H.value),1)])]),s("div",ze,[d(c,{type:"primary",size:"large",onClick:L,loading:N.value,round:""},{default:C(()=>[...e[15]||(e[15]=[r(" 提交自评 ",-1)])]),_:1},8,["loading"]),e[16]||(e[16]=s("span",{class:"submit-hint"},"提交后由直属上级审核终评",-1))])],64)):(n(),i("div",Ie,[l.value.finalScore?(n(),i("div",Ke,[s("div",{class:le(["grade-ring","grade-"+l.value.finalScore.grade])},[s("span",Me,o(l.value.finalScore.grade),1)],2),s("div",Be,[s("div",De,[r(o(l.value.finalScore.total),1),e[18]||(e[18]=s("small",null," / 100",-1))]),s("div",Oe,o(W(l.value.finalScore.grade)),1),s("div",Ee,o((E=l.value.period)==null?void 0:E.name)+" · "+o((T=l.value.period)==null?void 0:T.startDate)+" ~ "+o((q=l.value.period)==null?void 0:q.endDate),1)]),s("div",Te,[s("div",qe,[e[20]||(e[20]=s("span",{class:"break-label"},"OKR 得分",-1)),s("span",Ge,[r(o(l.value.finalScore.okrScore),1),e[19]||(e[19]=s("small",null," × 0.6",-1))])]),s("div",Je,[e[22]||(e[22]=s("span",{class:"break-label"},"工作成果",-1)),s("span",Pe,[r(o(l.value.finalScore.kpiScore),1),e[21]||(e[21]=s("small",null," × 0.4",-1))])]),s("div",$e,[e[23]||(e[23]=s("span",{class:"break-label"},"专项加分",-1)),s("span",je,"+"+o(l.value.finalScore.bonus),1)]),s("div",He,[e[24]||(e[24]=s("span",{class:"break-label"},"专项扣分",-1)),s("span",Le,"-"+o(l.value.finalScore.penalty),1)])])])):l.value.selfScore?(n(),i("div",Qe,[e[27]||(e[27]=s("div",{class:"pending-icon"},"📤",-1)),s("div",We,[s("div",Xe,[r(o(l.value.selfScore.total),1),e[25]||(e[25]=s("small",null," / 100",-1))]),e[26]||(e[26]=s("div",{class:"score-label"},"自评已提交,等待上级终审",-1))])])):(n(),i("div",Ye,[...e[28]||(e[28]=[s("div",{class:"pending-icon"},"📋",-1),s("div",{class:"pending-text"},"绩效考核尚未完成",-1)])])),l.value.finalScore&&!l.value.finalScore.confirmedAt?(n(),i("div",Ze,[e[30]||(e[30]=s("div",{class:"confirm-info"},[s("span",{class:"confirm-icon"},"✅"),s("span",null,"你的绩效结果如上,请审阅无误后确认。确认后本轮考核流程结束。")],-1)),d(c,{type:"success",size:"large",onClick:Q,loading:F.value,round:""},{default:C(()=>[...e[29]||(e[29]=[r("确认绩效结果",-1)])]),_:1},8,["loading"])])):(G=l.value.finalScore)!=null&&G.confirmedAt?(n(),i("div",es,[s("span",null,"✅ 已确认 · "+o((J=l.value.finalScore.confirmedAt)==null?void 0:J.slice(0,16)),1)])):k("",!0),l.value.selfScore&&l.value.finalScore?(n(),i("div",ss,[s("div",ls,[e[32]||(e[32]=s("div",{class:"compare-label"},"自评",-1)),s("div",os,[r(o(l.value.selfScore.total),1),e[31]||(e[31]=s("small",null,"分",-1))])]),e[35]||(e[35]=s("div",{class:"compare-arrow"},"→",-1)),s("div",ts,[e[34]||(e[34]=s("div",{class:"compare-label"},"终审",-1)),s("div",as,[r(o(l.value.finalScore.total),1),e[33]||(e[33]=s("small",null,"分",-1))])])])):k("",!0),s("div",ns,[s("div",is,[e[36]||(e[36]=s("div",{class:"col-head"},"🎯 当期 OKR 记录",-1)),(n(!0),i(V,null,U(l.value.okrRecords||[],t=>(n(),i("div",{key:t.id,class:"mini-okr"},[s("div",rs,o(t.title),1),(n(!0),i(V,null,U(t.keyResults,v=>(n(),i("div",{key:v.id,class:"mini-kr"},[s("span",null,o(v.title),1),s("span",ds,o(v.currentValue)+"/"+o(v.targetValue),1)]))),128))]))),128))]),s("div",us,[e[41]||(e[41]=s("div",{class:"col-head"},"💬 面谈反馈",-1)),(P=l.value.feedback)!=null&&P.interviewNotes?(n(),i("div",cs,[l.value.feedback.highlights?(n(),i("div",vs,[e[37]||(e[37]=s("div",{class:"fb-label"},"亮点",-1)),s("div",ms,o(l.value.feedback.highlights),1)])):k("",!0),l.value.feedback.issues?(n(),i("div",ps,[e[38]||(e[38]=s("div",{class:"fb-label"},"待改进",-1)),s("div",fs,o(l.value.feedback.issues),1)])):k("",!0),l.value.feedback.improvements?(n(),i("div",bs,[e[39]||(e[39]=s("div",{class:"fb-label"},"改进建议",-1)),s("div",ks,o(l.value.feedback.improvements),1)])):k("",!0),l.value.feedback.interviewNotes?(n(),i("div",_s,[e[40]||(e[40]=s("div",{class:"fb-label"},"面谈纪要",-1)),s("div",ys,o(l.value.feedback.interviewNotes),1)])):k("",!0)])):(n(),i("div",gs,"暂无面谈记录"))])])])):(n(),i("div",re,"暂无绩效数据,请选择周期"))])}}},Rs=Z(Ss,[["__scopeId","data-v-aeccd1cd"]]);export{Rs as default};
|