| 1 |
- import{_ as ze,k as Pe,o as a,c as o,a as s,g as h,h as f,F as k,t as n,s as A,p as z,b as De,q as w,d as v,w as p,i as _,f as O,m as Ue,y as E,r as V,z as U,j as He}from"./index-B793OZVz.js";import{periodApi as Me,orgApi as je,kpiApi as Be,okrApi as I}from"./index-Cvo9SNcI.js";import{u as Le}from"./auth-DDq2lXlB.js";import{P as Ge}from"./PeriodBanner-CLVqtUu5.js";const $e={class:"page"},Fe={key:1,class:"empty-big"},qe={class:"banner-icon"},Je={class:"banner-text"},Xe={class:"rules-card"},We={class:"rules-title"},Qe={key:0,class:"position-ref"},Ye={class:"pr-title"},Ze={class:"pr-items"},es={key:0,class:"my-okr-section"},ss={class:"section-head"},ts={class:"section-title"},ls={key:0,class:"aligned-hint"},as={class:"kr-display-num"},is={class:"kr-display-text"},ns={class:"kr-display-meta"},os={class:"kr-target"},rs={key:1,class:"rejected-hint"},ds={key:0,class:"hint-card waiting"},us={class:"hint-content"},_s={class:"hint-desc"},cs={key:0,class:"section"},vs={class:"section-head"},ps={class:"section-title"},gs={class:"okr-grid"},ms={class:"okr-card-head"},fs={class:"o-title"},ks={class:"mini-kr-num"},ys={class:"mini-kr-text"},hs={class:"mini-val"},ws={key:1,class:"hint-card top-level"},Rs={class:"hint-icon"},Os={class:"action-row"},Vs={key:1,class:"section"},bs={class:"section-head"},Ks={class:"section-title"},Is={class:"okr-card card-APPROVED",style:{"margin-top":"12px"}},Ts={class:"kr-progress-head"},Ss={class:"kr-progress-num"},Es={class:"kr-progress-text"},Ns={class:"kr-progress-val"},Cs={class:"kr-progress-ctrl"},xs={class:"kr-status-tag"},As={key:0,class:"blocked-hint"},zs={key:2,class:"action-row"},Ps={key:3,class:"section"},Ds={class:"section-head"},Us={class:"section-badge review"},Hs={class:"okr-grid"},Ms={class:"okr-card-head"},js={class:"o-title"},Bs={key:0,class:"aligned-hint"},Ls={class:"review-kr-num"},Gs={class:"review-kr-text"},$s={class:"review-kr-val"},Fs={class:"review-actions"},qs={key:0,class:"dialog-kpi-ref"},Js={class:"dkr-title"},Xs={class:"dkr-tags"},Ws={key:1,class:"align-section"},Qs={class:"align-head"},Ys={class:"align-o-head"},Zs={class:"align-o-title"},et={class:"align-kr-list"},st=["onClick"],tt={class:"align-kr-left"},lt={key:0},at={class:"align-kr-num"},it={class:"align-kr-title"},nt={class:"align-kr-right"},ot={class:"align-kr-target"},rt={key:1,class:"align-check"},dt={class:"o-section"},ut={class:"parent-align-section"},_t={class:"kr-section"},ct={class:"kr-section-title"},vt={key:0,class:"kr-source-bar"},pt={class:"kr-source-text"},gt={class:"kr-form-head"},mt={class:"kr-form-num"},ft={class:"kr-form-right"},kt={class:"kr-form-extra"},yt={__name:"MyOkrView",setup(ht){const y=Le(),Z=Ue(),T=O([]),R=O([]),g=O(null),H=O([]),F=O(!1),q=O([]),S=O(null),K=O(null),P=O(!1),N=O(!1),J=O(!1),X=O([]);async function ye(){try{X.value=await I.getTree(K.value)}catch{X.value=[]}}const he={"CEO / 总经理":{oHint:"本周期推动公司____战略落地,实现业务增长",krs:["完成____营收目标,环比增长____%","核心业务线____交付满意度≥____","完成____关键岗位招聘,团队留存率≥____%"]},前端开发工程师:{oHint:"本周期提升前端工程化水平与用户体验",krs:["完成____核心模块/页面开发并全量上线","负责模块线上零严重Bug,Bug闭环≤24h","组件库覆盖率达____%,文档完整"]},后端开发工程师:{oHint:"本周期支撑业务系统稳定高效运行",krs:["完成____核心API开发并上线,文档齐全","负责模块线上零P0事故,接口响应≤____ms","数据库慢查询优化,查询耗时降低____%"]},全栈开发工程师:{oHint:"本周期完成____模块端到端交付与优化",krs:["完成____功能前后端联调并全量上线","系统整体可用性≥____%,无严重线上事故","完成____技术方案设计与落地,输出文档"]},移动端开发工程师:{oHint:"本周期保障App核心体验与版本交付",krs:["完成v____版本迭代开发并通过审核上架","Crash率<____%,启动耗时<____s","核心流程用户投诉环比降低____%"]},产品经理:{oHint:"本周期推动____产品方向落地,提升用户价值",krs:["完成____核心需求迭代,NPS≥____","输出____竞品分析报告与下周期规划","跨部门协作满意度≥____分"]},人力资源总监:{oHint:"本周期完善人才体系,支撑业务增长",krs:["核心岗位到岗率≥____%,招聘周期≤____天","员工满意度≥____分,离职率<____%","完成____场培训,覆盖率达____%"]},财务总监:{oHint:"本周期保障财务合规与资金安全",krs:["月度报表____号前完成,差异率<____%","预算执行偏差率<____%,成本节约____万元","完成____项税务/审计合规工作,零风险"]},区域经理:{oHint:"本周期推动区域市场占有率与营收增长",krs:["区域营收达成____万元,同比增长____%","新拓客户____家,老客户续约率≥____%","区域团队人效提升____%,人员零流失"]},运营总监:{oHint:"本周期驱动核心业务指标与用户增长",krs:["DAU/MAU ____万,环比增长____%","用户7日留存率≥____%,转化率≥____%","完成____场运营活动,ROI≥____"]},市场营销总监:{oHint:"本周期提升品牌影响力与获客效率",krs:["品牌曝光量____万,自然流量占比≥____%","线索获取成本<____元,转化率≥____%","产出____篇高质量内容,全网阅读≥____万"]},医疗合规总监:{oHint:"本周期保障医疗合规体系有效运行",krs:["完成____项法规落地,合规检查零问题","数据安全事件=0,隐私合规审计通过","完成全员合规培训____场,覆盖率100%"]}},W=E(()=>{var e;const t=((e=y.user)==null?void 0:e.position)||"";for(const[i,r]of Object.entries(he))if(t.includes(i)||i.includes(t))return r;return{oHint:"本周期支撑核心业务目标高质量达成",krs:["完成____核心任务并交付验收","负责模块零问题,闭环时效≤____","完成____落地,覆盖率达____%"]}}),c=He({title:"",krs:[{title:"",targetValue:100,weight:34,assignedTo:null},{title:"",targetValue:100,weight:33,assignedTo:null},{title:"",targetValue:100,weight:33,assignedTo:null}],alignedIds:[],parentObjectiveId:null}),Q=E(()=>c.krs.reduce((t,e)=>t+(e.weight||0),0)),ee=E(()=>T.value.filter(t=>t.status!=="ARCHIVED")),C=E(()=>T.value.find(t=>t.id===K.value)),L=E(()=>{var t;return((t=R.value[0])==null?void 0:t.userName)||"(上级)"});function G(t){return c.krs.some(e=>e._sourceKrId===t)}function we(t,e){var r;if(t.assignedTo===((r=y.user)==null?void 0:r.id))return;const i=c.krs.findIndex(m=>m._sourceKrId===t.id);i>=0?c.krs.splice(i,1):c.krs.push({title:"承接:"+t.title,targetValue:t.targetValue,weight:0,assignedTo:null,_sourceKrId:t.id,_sourceInfo:{userName:e.userName||L.value,krTitle:t.title}})}function Re(t){var i,r;const e=c.krs[t];if(e._sourceKrId)for(const m of R.value){const b=(i=m.keyResults)==null?void 0:i.find(M=>M.id===e._sourceKrId);if(b&&b.assignedTo===((r=y.user)==null?void 0:r.id))return}c.krs.splice(t,1)}const se=E(()=>{let t=0;for(const e of R.value)t+=(e.keyResults||[]).filter(i=>{var r;return i.assignedTo===((r=y.user)==null?void 0:r.id)}).length;return t});function te(){var t;for(const e of R.value)for(const i of e.keyResults||[])i.assignedTo===((t=y.user)==null?void 0:t.id)&&(c.krs.some(m=>m._sourceKrId===i.id)||c.krs.push({title:"承接:"+i.title,targetValue:i.targetValue,weight:0,assignedTo:null,_sourceKrId:i.id,_sourceInfo:{userName:e.userName||L.value,krTitle:i.title}}))}const Oe=E(()=>{var t;return{DRAFT:"",OKR_ALIGN:"",EXECUTING:"",ASSESSING:"",ARCHIVED:""}[(t=C.value)==null?void 0:t.status]||""}),Ve=E(()=>{var t;return{DRAFT:"本周期尚未发布。",OKR_ALIGN:"OKR 对齐阶段 — 自上而下:上级先制定,下级对齐后制定。1O+3KR,不可偏离上级方向。",EXECUTING:"执行阶段 — OKR 已锁定。请每周更新 KR 进度,标记阻塞时说明原因。",ASSESSING:'考评阶段 — 前往"我的绩效"完成自评,基于实际交付结果打分。',ARCHIVED:"本周期已归档。"}[(t=C.value)==null?void 0:t.status]||""});Pe(async()=>{var e;T.value=await Me.list();const t=Z.query.periodId?Number(Z.query.periodId):null;t&&T.value.some(i=>i.id===t)?Y(t):ee.value.length?Y(ee.value[0].id):T.value.length&&Y(T.value[0].id);try{q.value=await je.getMySubordinates()}catch{q.value=[]}if((e=y.user)!=null&&e.position)try{S.value=await Be.getTemplateByPosition(y.user.position)}catch{S.value=null}});function Y(t){K.value=t,$()}function le(t){try{return JSON.parse(t)||[]}catch{return[]}}async function $(){var e;if(!K.value)return;const t=K.value;try{R.value=await I.getSuperiorOkrs(t)}catch{R.value=[]}try{g.value=await I.getMyOkr(t)}catch{g.value=null}try{const i=await I.canSubmit(t);F.value=i.canSubmit}catch{F.value=!1}try{H.value=await I.getPendingReviews(t)}catch{H.value=[]}ye(),g.value&&((e=g.value.keyResults)==null||e.forEach(i=>{i._newValue=i.currentValue,i._newStatus=i.status}))}function be(){N.value=!1,ie(),te(),P.value=!0}function ae(){var t,e;if(N.value=!0,g.value){c.title=g.value.title;const i=((t=g.value.alignedObjectives)==null?void 0:t.map(m=>m.id))||[],r=new Set(i);if(R.value.length)for(const m of R.value)((e=m.keyResults)==null?void 0:e.some(M=>{var D;return M.assignedTo===((D=y.user)==null?void 0:D.id)}))&&r.add(m.id);c.alignedIds=[...r],c.krs=(g.value.keyResults||[]).map(m=>{var b;return{title:m.title||"",targetValue:m.targetValue||100,weight:m.weight||Math.floor(100/(((b=g.value.keyResults)==null?void 0:b.length)||3)),assignedTo:m.assignedTo||null,_sourceKrId:m.sourceKrId||null,_sourceInfo:m.sourceKrId?Ke(m.sourceKrId,m.sourceKrTitle,m.sourceKrUserName):null}})}te(),P.value=!0}function Ke(t,e,i){for(const r of R.value){const m=(r.keyResults||[]).find(b=>b.id===t);if(m)return{userName:r.userName,krTitle:m.title}}return e?{userName:i||"",krTitle:e}:null}async function Ie(){if(!c.title){U.warning("请填写目标 O");return}const t=c.krs.filter(i=>i.title);if(t.length<2){U.warning("至少填写2条KR");return}const e=c.krs.reduce((i,r)=>i+(r.weight||0),0);if(e!==100){U.warning("KR权重之和必须为100,当前为"+e);return}J.value=!0;try{const i={periodId:K.value,title:c.title,keyResults:t.map(r=>({title:r.title,targetValue:r.targetValue,weight:r.weight,assignedTo:r.assignedTo,sourceKrId:r._sourceKrId||null})),alignedObjectiveIds:c.alignedIds,parentObjectiveId:c.parentObjectiveId||null};N.value&&g.value?await I.update(g.value.id,i):await I.submit(i),U.success(N.value?"OKR 已更新":"OKR 已提交,等待上级审核"),P.value=!1,N.value=!1,ie(),$()}finally{J.value=!1}}function ie(){c.title="",c.krs=[{title:"",targetValue:100,weight:34,assignedTo:null},{title:"",targetValue:100,weight:33,assignedTo:null},{title:"",targetValue:100,weight:33,assignedTo:null}],c.alignedIds=[],c.parentObjectiveId=null}async function Te(t){await I.updateProgress(t.id,{newValue:t._newValue,status:t._newStatus,remark:""}),U.success("进度已更新"),$()}async function ne(t,e){await I.review(t,{approved:e,remark:""}),U.success(e?"已通过":"已驳回"),$()}function Se(t){return!t.targetValue||t.targetValue===0?0:Math.min(t.currentValue/t.targetValue*100,100)}function Ee(t){return{COMPLETED:"#27ae60",BLOCKED:"#e67e22",IN_PROGRESS:"#3ad4d8",NOT_STARTED:"#c0c4cc"}[t]||"#c0c4cc"}function Ne(t){return{NOT_STARTED:"未开始",IN_PROGRESS:"进行中",COMPLETED:"已完成",BLOCKED:"阻塞"}[t]||t}function oe(t,e){return t?t.length>e?t.slice(0,e)+"...":t:""}return(t,e)=>{var ue,_e,ce,ve,pe,ge,me;const i=V("el-tag"),r=V("el-button"),m=V("Aim"),b=V("el-icon"),M=V("el-progress"),D=V("el-input-number"),j=V("el-option"),re=V("el-select"),Ce=V("el-divider"),de=V("el-input"),xe=V("el-tree-select"),Ae=V("el-dialog");return a(),o("div",$e,[e[48]||(e[48]=s("div",{class:"page-hero"},[s("div",{class:"hero-info"},[s("h2",null,"我的 OKR"),s("p",null,"1O · 3KR · 强对齐 · 看结果")])],-1)),T.value.length?(a(),h(Ge,{key:0,periods:T.value,modelValue:K.value,"onUpdate:modelValue":e[0]||(e[0]=l=>K.value=l)},null,8,["periods","modelValue"])):f("",!0),K.value?(a(),o(k,{key:2},[s("div",{class:A(["state-banner","banner-"+((ue=C.value)==null?void 0:ue.status)])},[s("span",qe,n(Oe.value),1),s("span",Je,n(Ve.value),1)],2),s("div",Xe,[s("div",We,"📋 OKR 规则 · "+n(((_e=z(y).user)==null?void 0:_e.position)||"通用岗位"),1),e[8]||(e[8]=De('<div class="rules-grid" data-v-4b72dc8e><div class="rule-item" data-v-4b72dc8e><b data-v-4b72dc8e>O</b>:定性方向,15-30字,不含数字指标</div><div class="rule-item" data-v-4b72dc8e><b data-v-4b72dc8e>KR</b>:2~5条,可量化结果,权重之和=100</div><div class="rule-item" data-v-4b72dc8e><b data-v-4b72dc8e>对齐</b>:下级O必须承接上级O方向</div><div class="rule-item" data-v-4b72dc8e><b data-v-4b72dc8e>打分</b>:逐条KR 0-1分,看结果不看过程</div></div>',1)),S.value?(a(),o("div",Qe,[s("div",Ye,"📌 你的岗位指标参考("+n(S.value.name)+")",1),s("div",Ze,[(a(!0),o(k,null,w(le(S.value.itemsJson),(l,d)=>(a(),h(i,{key:d,size:"small",effect:"plain",type:"info",round:""},{default:p(()=>[_(n(l.name)+"(满分"+n(l.maxScore)+") ",1)]),_:2},1024))),128))]),e[7]||(e[7]=s("div",{class:"pr-hint"},"OKR 目标应与这些 KPI 指标方向一致",-1))])):f("",!0)]),((ce=C.value)==null?void 0:ce.status)==="OKR_ALIGN"?(a(),o(k,{key:0},[g.value?(a(),o("div",es,[s("div",ss,[e[10]||(e[10]=s("span",{class:"section-badge personal"},"我的 OKR",-1)),s("span",ts,n(g.value.title),1),v(i,{type:g.value.status==="APPROVED"?"success":g.value.status==="SUBMITTED"?"warning":"danger",size:"large",effect:"dark",round:""},{default:p(()=>[_(n(g.value.status==="APPROVED"?"已通过":g.value.status==="SUBMITTED"?"待审核":"已驳回"),1)]),_:1},8,["type"]),((ve=C.value)==null?void 0:ve.status)==="OKR_ALIGN"?(a(),h(r,{key:0,size:"small",type:"primary",plain:"",onClick:ae,round:""},{default:p(()=>[...e[9]||(e[9]=[_(" 编辑 OKR ",-1)])]),_:1})):f("",!0)]),(pe=g.value.alignedObjectives)!=null&&pe.length?(a(),o("div",ls,[e[11]||(e[11]=_(" 已对齐上级:",-1)),(a(!0),o(k,null,w(g.value.alignedObjectives,l=>(a(),h(i,{key:l.id,size:"small",effect:"plain"},{default:p(()=>[_(n(l.userName)+": "+n(oe(l.title,35)),1)]),_:2},1024))),128))])):f("",!0),s("div",{class:A(["okr-card","card-"+g.value.status])},[(a(!0),o(k,null,w(g.value.keyResults,(l,d)=>(a(),o("div",{key:l.id,class:"kr-display"},[s("div",as,"KR"+n(d+1),1),s("div",is,n(l.title),1),s("div",ns,[s("span",os,"目标 "+n(l.targetValue),1),l.sourceKrId?(a(),h(i,{key:0,size:"small",effect:"plain",type:"info",round:""},{default:p(()=>[...e[12]||(e[12]=[_("↗ 承接上级",-1)])]),_:1})):f("",!0),l.assignedToName?(a(),h(i,{key:1,size:"small",effect:"dark",type:"warning",round:""},{default:p(()=>[_("@"+n(l.assignedToName),1)]),_:2},1024)):f("",!0)])]))),128))],2),g.value.status==="REJECTED"?(a(),o("div",rs,[e[14]||(e[14]=_(" 你的 OKR 已被驳回,请修改后重新提交。 ",-1)),v(r,{type:"primary",size:"small",onClick:ae,round:"",style:{"margin-left":"12px"}},{default:p(()=>[...e[13]||(e[13]=[_("修改并重新提交",-1)])]),_:1})])):f("",!0)])):(a(),o(k,{key:1},[F.value?(a(),o(k,{key:1},[R.value.length?(a(),o("div",cs,[s("div",vs,[e[17]||(e[17]=s("span",{class:"section-badge superior"},"上级",-1)),s("span",ps,n(L.value)+" 的 OKR",1),e[18]||(e[18]=s("span",{class:"section-hint"},"你的 O 必须承接上级 O 的核心方向",-1))]),s("div",gs,[(a(!0),o(k,null,w(R.value,l=>(a(),o("div",{key:l.id,class:"okr-card superior-card"},[s("div",ms,[e[19]||(e[19]=s("span",{class:"o-tag superior"},"O",-1)),s("span",fs,n(l.title),1)]),(a(!0),o(k,null,w(l.keyResults,(d,u)=>{var x,B;return a(),o("div",{key:d.id,class:A(["mini-kr",{mine:d.assignedTo===((x=z(y).user)==null?void 0:x.id)}])},[s("span",ks,"KR"+n(u+1),1),s("span",ys,n(d.title),1),d.assignedTo===((B=z(y).user)==null?void 0:B.id)?(a(),h(i,{key:0,size:"small",type:"warning",effect:"dark",round:""},{default:p(()=>[...e[20]||(e[20]=[_("@我",-1)])]),_:1})):f("",!0),s("span",hs,n(d.targetValue),1)],2)}),128))]))),128))])])):(a(),o("div",ws,[s("div",Rs,[v(b,{size:28},{default:p(()=>[v(m)]),_:1})]),e[21]||(e[21]=s("div",{class:"hint-content"},[s("div",{class:"hint-title"},"你是最高层级,制定公司级 OKR"),s("div",{class:"hint-desc"},"你的目标将决定下属的 OKR 方向。1个O + 3条KR,团队成员将基于此对齐。")],-1))])),s("div",Os,[v(r,{type:"primary",size:"large",onClick:be,round:""},{default:p(()=>[...e[22]||(e[22]=[_("制定我的 OKR",-1)])]),_:1})])],64)):(a(),o("div",ds,[e[16]||(e[16]=s("div",{class:"hint-icon"},"⏳",-1)),s("div",us,[e[15]||(e[15]=s("div",{class:"hint-title"},"等待上级先制定 OKR",-1)),s("div",_s,n(L.value)+" 需要先完成 OKR 制定并通过审核,然后你才能对齐并提交自己的 OKR。",1)])]))],64))],64)):f("",!0),((ge=C.value)==null?void 0:ge.status)==="EXECUTING"&&g.value?(a(),o("div",Vs,[s("div",bs,[e[24]||(e[24]=s("span",{class:"section-badge personal"},"我的 OKR",-1)),s("span",Ks,n(g.value.title),1),v(i,{type:"success",size:"large",effect:"dark",round:""},{default:p(()=>[...e[23]||(e[23]=[_("已锁定",-1)])]),_:1})]),e[26]||(e[26]=s("div",{class:"rule-hint"},"OKR 已锁定,仅可更新进度和标记阻塞,不可修改目标与关键结果。",-1)),s("div",Is,[(a(!0),o(k,null,w(g.value.keyResults,(l,d)=>(a(),o("div",{key:l.id,class:"kr-progress-row"},[s("div",Ts,[s("span",Ss,"KR"+n(d+1),1),s("span",Es,n(l.title),1),s("span",Ns,n(l.currentValue)+"/"+n(l.targetValue),1)]),v(M,{percentage:Se(l),color:Ee(l.status),"stroke-width":8},null,8,["percentage","color"]),s("div",Cs,[s("span",xs,n(Ne(l.status)),1),v(D,{modelValue:l._newValue,"onUpdate:modelValue":u=>l._newValue=u,min:0,max:l.targetValue*2,size:"small","controls-position":"right",style:{width:"100px"}},null,8,["modelValue","onUpdate:modelValue","max"]),v(re,{modelValue:l._newStatus,"onUpdate:modelValue":u=>l._newStatus=u,size:"small",style:{width:"100px"}},{default:p(()=>[v(j,{label:"进行中",value:"IN_PROGRESS"}),v(j,{label:"已完成",value:"COMPLETED"}),v(j,{label:"阻塞",value:"BLOCKED"}),v(j,{label:"未开始",value:"NOT_STARTED"})]),_:1},8,["modelValue","onUpdate:modelValue"]),v(r,{size:"small",type:"primary",onClick:u=>Te(l),round:"",disabled:l.status==="COMPLETED"},{default:p(()=>[...e[25]||(e[25]=[_("更新",-1)])]),_:1},8,["onClick","disabled"])]),l.status==="BLOCKED"?(a(),o("div",As," 阻塞项,请说明原因与所需支持。上级已收到提醒。 ")):f("",!0)]))),128))])])):f("",!0),((me=C.value)==null?void 0:me.status)==="ASSESSING"?(a(),o("div",zs,[v(r,{type:"warning",size:"large",onClick:e[1]||(e[1]=l=>t.$router.push("/scores/my")),round:""},{default:p(()=>[...e[27]||(e[27]=[_("去完成绩效自评",-1)])]),_:1})])):f("",!0),H.value.length?(a(),o("div",Ps,[s("div",Ds,[s("span",Us,n(H.value.length),1),e[28]||(e[28]=s("span",{class:"section-title"},"待审核 OKR",-1)),e[29]||(e[29]=s("span",{class:"section-hint"},"请优先校验方向对齐度,其次校验 KR 合理性",-1))]),s("div",Hs,[(a(!0),o(k,null,w(H.value,l=>{var d;return a(),o("div",{key:l.id,class:"okr-card review-card"},[s("div",Ms,[e[30]||(e[30]=s("span",{class:"o-tag personal"},"O",-1)),s("span",js,n(l.title),1),v(i,{effect:"plain",type:"warning",round:""},{default:p(()=>[_(n(l.userName),1)]),_:2},1024)]),(d=l.alignedObjectives)!=null&&d.length?(a(),o("div",Bs,[e[31]||(e[31]=_(" 对齐:",-1)),(a(!0),o(k,null,w(l.alignedObjectives,u=>(a(),h(i,{key:u.id,size:"small",effect:"plain"},{default:p(()=>[_(n(u.userName)+": "+n(oe(u.title,25)),1)]),_:2},1024))),128))])):f("",!0),(a(!0),o(k,null,w(l.keyResults,(u,x)=>(a(),o("div",{key:u.id,class:"review-kr"},[s("span",Ls,"KR"+n(x+1),1),s("span",Gs,n(u.title),1),s("span",$s,n(u.targetValue),1),u.assignedToName?(a(),h(i,{key:0,size:"small",effect:"dark",type:"warning",round:""},{default:p(()=>[_("@"+n(u.assignedToName),1)]),_:2},1024)):f("",!0)]))),128)),s("div",Fs,[v(r,{size:"small",type:"success",onClick:u=>ne(l.id,!0),round:""},{default:p(()=>[...e[32]||(e[32]=[_("通过",-1)])]),_:1},8,["onClick"]),v(r,{size:"small",type:"danger",onClick:u=>ne(l.id,!1),round:""},{default:p(()=>[...e[33]||(e[33]=[_("驳回",-1)])]),_:1},8,["onClick"])])])}),128))])])):f("",!0)],64)):(a(),o("div",Fe,"暂无进行中的考核周期")),v(Ae,{modelValue:P.value,"onUpdate:modelValue":e[6]||(e[6]=l=>P.value=l),title:N.value?"编辑 OKR":"制定个人 OKR",width:"720px",top:"4vh","close-on-click-modal":!1},{footer:p(()=>[v(r,{onClick:e[5]||(e[5]=l=>P.value=!1)},{default:p(()=>[...e[45]||(e[45]=[_("取消",-1)])]),_:1}),v(r,{type:"primary",size:"large",onClick:Ie,loading:J.value,round:""},{default:p(()=>[_(n(N.value?"保存修改":"提交审核"),1)]),_:1},8,["loading"])]),default:p(()=>[e[46]||(e[46]=s("div",{class:"dialog-rules"},[s("div",{class:"dr-item"},[s("b",null,"1个O(目标)"),_(":定性方向,15-30字,不含数字指标,必须对齐上级方向")]),s("div",{class:"dr-item"},[_("📏 "),s("b",null,"2~5条KR"),_("(推荐3条):可量化结果,10-25字,必须有验收标准")]),s("div",{class:"dr-item"},[_("⚖️ "),s("b",null,"权重之和 = 100"),_(":每条KR分配权重,总和必须为100")])],-1)),S.value?(a(),o("div",qs,[s("div",Js,"📌 你的岗位指标参考("+n(S.value.name)+")",1),s("div",Xs,[(a(!0),o(k,null,w(le(S.value.itemsJson),(l,d)=>(a(),h(i,{key:d,size:"small",type:"info",effect:"plain",round:""},{default:p(()=>[_(n(l.name)+"("+n(l.maxScore)+"分) ",1)]),_:2},1024))),128))]),e[34]||(e[34]=s("div",{class:"dkr-hint"},"你的 OKR 目标应与上述岗位 KPI 方向保持一致",-1))])):f("",!0),R.value.length?(a(),o("div",Ws,[s("div",Qs,[e[35]||(e[35]=s("div",{class:"align-head-left"},[s("span",{class:"align-head-icon"},"↗"),s("span",{class:"align-head-title"},"对齐上级 OKR"),s("span",{class:"align-head-hint"},"· 勾选你要承接的关键结果,将自动创建引用条目")],-1)),se.value?(a(),h(i,{key:0,type:"warning",effect:"dark",round:"",size:"small"},{default:p(()=>[_(n(se.value)+" 项 @你 ",1)]),_:1})):f("",!0)]),(a(!0),o(k,null,w(R.value,l=>(a(),o("div",{key:l.id,class:"align-o-card"},[s("div",Ys,[e[36]||(e[36]=s("span",{class:"align-o-icon"},"O",-1)),s("span",Zs,n(l.title),1)]),s("div",et,[(a(!0),o(k,null,w(l.keyResults,(d,u)=>{var x,B,fe,ke;return a(),o("div",{key:d.id,class:A(["align-kr-row",{"is-mandatory":d.assignedTo===((x=z(y).user)==null?void 0:x.id),"is-selected":G(d.id)&&d.assignedTo!==((B=z(y).user)==null?void 0:B.id)}]),onClick:wt=>we(d,l)},[s("div",tt,[s("span",{class:A(["align-checkbox",{checked:G(d.id),locked:d.assignedTo===((fe=z(y).user)==null?void 0:fe.id)}])},[G(d.id)?(a(),o("span",lt,"✓")):f("",!0)],2),s("span",at,"KR"+n(u+1),1),s("span",it,n(d.title),1)]),s("div",nt,[s("span",ot,"目标 "+n(d.targetValue),1),d.assignedTo===((ke=z(y).user)==null?void 0:ke.id)?(a(),h(i,{key:0,type:"warning",effect:"dark",size:"small",round:""},{default:p(()=>[...e[37]||(e[37]=[_(" @你 ",-1)])]),_:1})):G(d.id)?(a(),o("span",rt,"✓")):f("",!0)])],10,st)}),128))])]))),128))])):f("",!0),v(Ce),s("div",dt,[e[38]||(e[38]=s("div",{class:"o-label"},[_("目标 O "),s("span",{class:"o-hint"},"(定性方向,15-30字,不含数字)")],-1)),v(de,{modelValue:c.title,"onUpdate:modelValue":e[2]||(e[2]=l=>c.title=l),type:"textarea",autosize:{minRows:1,maxRows:3},placeholder:W.value.oHint,size:"large",maxlength:"35","show-word-limit":""},null,8,["modelValue","placeholder"])]),s("div",ut,[e[39]||(e[39]=s("div",{class:"parent-align-label"},"对齐目标",-1)),v(xe,{modelValue:c.parentObjectiveId,"onUpdate:modelValue":e[3]||(e[3]=l=>c.parentObjectiveId=l),data:X.value,props:{children:"children",label:"title",value:"id"},placeholder:"选择对齐的上级目标(可选)",clearable:"","check-strictly":"",style:{width:"100%"}},null,8,["modelValue","data"])]),s("div",_t,[s("div",ct,[_(" 📏 关键结果 KR("+n(c.krs.length)+" 条) ",1),s("span",{class:A(["weight-sum",{"weight-ok":Q.value===100,"weight-bad":Q.value!==100}])}," 权重合计:"+n(Q.value)+" / 100 ",3)]),(a(!0),o(k,null,w(c.krs,(l,d)=>(a(),o("div",{key:d,class:A(["kr-form-card",{"has-source":l._sourceKrId}])},[l._sourceInfo?(a(),o("div",vt,[e[40]||(e[40]=s("span",{class:"kr-source-icon"},"↗",-1)),s("span",pt,"承接上级 "+n(l._sourceInfo.userName)+" 的 "+n(l._sourceInfo.krTitle),1)])):f("",!0),s("div",gt,[s("span",mt,"KR"+n(d+1),1),v(de,{modelValue:l.title,"onUpdate:modelValue":u=>l.title=u,type:"textarea",autosize:{minRows:1,maxRows:3},placeholder:W.value.krs[Math.min(d,W.value.krs.length-1)],size:"large",style:{flex:"1"},maxlength:"28","show-word-limit":""},null,8,["modelValue","onUpdate:modelValue","placeholder"]),s("div",ft,[e[41]||(e[41]=s("span",{class:"kr-form-label-sm"},"权重",-1)),v(D,{modelValue:l.weight,"onUpdate:modelValue":u=>l.weight=u,min:0,max:100,step:5,size:"large","controls-position":"right",style:{width:"90px"}},null,8,["modelValue","onUpdate:modelValue"]),e[42]||(e[42]=s("span",{class:"kr-form-label-sm"},"目标值",-1)),v(D,{modelValue:l.targetValue,"onUpdate:modelValue":u=>l.targetValue=u,min:0,max:999,placeholder:"目标","controls-position":"right",style:{width:"110px"}},null,8,["modelValue","onUpdate:modelValue"]),c.krs.length>2?(a(),h(r,{key:0,onClick:u=>Re(d),type:"danger",circle:"",icon:"Delete",size:"small"},null,8,["onClick"])):f("",!0)])]),s("div",kt,[e[43]||(e[43]=s("span",{class:"kr-form-label"},"@指派",-1)),v(re,{modelValue:l.assignedTo,"onUpdate:modelValue":u=>l.assignedTo=u,clearable:"",filterable:"",placeholder:"指派给下属(可选)",size:"small",style:{width:"180px"}},{default:p(()=>[(a(!0),o(k,null,w(q.value,u=>(a(),h(j,{key:u.id,label:u.realName,value:u.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","onUpdate:modelValue"])])],2))),128)),c.krs.length<5?(a(),h(r,{key:0,onClick:e[4]||(e[4]=l=>c.krs.push({title:"",targetValue:100,weight:0,assignedTo:null})),size:"small",round:"",style:{"margin-top":"8px"}},{default:p(()=>[...e[44]||(e[44]=[_(" + 添加 KR ",-1)])]),_:1})):f("",!0)]),e[47]||(e[47]=s("div",{class:"dialog-footer-hint"}," 提交后由直属上级审核。审核通过后锁定,周期内不可修改。 ",-1))]),_:1},8,["modelValue","title"])])}}},Kt=ze(yt,[["__scopeId","data-v-4b72dc8e"]]);export{Kt as default};
|