MyOkrView-XsUa-Txk.js 26 KB

1
  1. import{_ as xe,k as Ae,o as a,c as o,a as s,g as h,h as f,F as k,t as n,s as z,p as P,b as ze,q as w,d as p,w as v,i as u,f as V,m as Pe,y as N,r as b,z as U,j as De}from"./index-BNtoQzpv.js";import{periodApi as Ue,orgApi as He,kpiApi as Me,okrApi as T}from"./index-fQv2WpIJ.js";import{u as je}from"./auth-Cqw5t0wr.js";import{P as Be}from"./PeriodBanner-o392V5aV.js";const Le={class:"page"},Ge={key:1,class:"empty-big"},$e={class:"banner-icon"},Fe={class:"banner-text"},qe={class:"rules-card"},Je={class:"rules-title"},Xe={key:0,class:"position-ref"},We={class:"pr-title"},Qe={class:"pr-items"},Ye={key:0,class:"my-okr-section"},Ze={class:"section-head"},es={class:"section-title"},ss={key:0,class:"aligned-hint"},ts={class:"kr-display-num"},ls={class:"kr-display-text"},as={class:"kr-display-meta"},is={class:"kr-target"},ns={key:1,class:"rejected-hint"},os={key:0,class:"hint-card waiting"},rs={class:"hint-content"},ds={class:"hint-desc"},us={key:0,class:"section"},_s={class:"section-head"},cs={class:"section-title"},vs={class:"okr-grid"},ps={class:"okr-card-head"},gs={class:"o-title"},ms={class:"mini-kr-num"},fs={class:"mini-kr-text"},ks={class:"mini-val"},ys={key:1,class:"hint-card top-level"},hs={class:"action-row"},ws={key:1,class:"section"},Rs={class:"section-head"},Os={class:"section-title"},Vs={class:"okr-card card-APPROVED",style:{"margin-top":"12px"}},bs={class:"kr-progress-head"},Ks={class:"kr-progress-num"},Is={class:"kr-progress-text"},Ts={class:"kr-progress-val"},Ss={class:"kr-progress-ctrl"},Es={class:"kr-status-tag"},Ns={key:0,class:"blocked-hint"},Cs={key:2,class:"action-row"},xs={key:3,class:"section"},As={class:"section-head"},zs={class:"section-badge review"},Ps={class:"okr-grid"},Ds={class:"okr-card-head"},Us={class:"o-title"},Hs={key:0,class:"aligned-hint"},Ms={class:"review-kr-num"},js={class:"review-kr-text"},Bs={class:"review-kr-val"},Ls={class:"review-actions"},Gs={key:0,class:"dialog-kpi-ref"},$s={class:"dkr-title"},Fs={class:"dkr-tags"},qs={key:1,class:"align-section"},Js={class:"align-head"},Xs={class:"align-o-head"},Ws={class:"align-o-title"},Qs={class:"align-kr-list"},Ys=["onClick"],Zs={class:"align-kr-left"},et={key:0},st={class:"align-kr-num"},tt={class:"align-kr-title"},lt={class:"align-kr-right"},at={class:"align-kr-target"},it={key:1,class:"align-check"},nt={class:"o-section"},ot={class:"parent-align-section"},rt={class:"kr-section"},dt={class:"kr-section-title"},ut={key:0,class:"kr-source-bar"},_t={class:"kr-source-text"},ct={class:"kr-form-head"},vt={class:"kr-form-num"},pt={class:"kr-form-right"},gt={class:"kr-form-extra"},mt={__name:"MyOkrView",setup(ft){const y=je(),Y=Pe(),S=V([]),R=V([]),g=V(null),H=V([]),$=V(!1),F=V([]),E=V(null),K=V(null),D=V(!1),C=V(!1),q=V(!1),J=V([]);async function fe(){try{J.value=await T.getTree(K.value)}catch{J.value=[]}}const ke={"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%"]}},X=N(()=>{var e;const t=((e=y.user)==null?void 0:e.position)||"";for(const[i,r]of Object.entries(ke))if(t.includes(i)||i.includes(t))return r;return{oHint:"本周期支撑核心业务目标高质量达成",krs:["完成____核心任务并交付验收","负责模块零问题,闭环时效≤____","完成____落地,覆盖率达____%"]}}),c=De({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}),W=N(()=>c.krs.reduce((t,e)=>t+(e.weight||0),0)),Z=N(()=>S.value.filter(t=>t.status!=="ARCHIVED")),x=N(()=>S.value.find(t=>t.id===K.value)),B=N(()=>{var t;return((t=R.value[0])==null?void 0:t.userName)||"(上级)"});function L(t){return c.krs.some(e=>e._sourceKrId===t)}function ye(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||B.value,krTitle:t.title}})}function he(t){var i,r;const e=c.krs[t];if(e._sourceKrId)for(const m of R.value){const O=(i=m.keyResults)==null?void 0:i.find(I=>I.id===e._sourceKrId);if(O&&O.assignedTo===((r=y.user)==null?void 0:r.id))return}c.krs.splice(t,1)}const ee=N(()=>{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 se(){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||B.value,krTitle:i.title}}))}const we=N(()=>{var t;return{DRAFT:"📝",OKR_ALIGN:"🎯",EXECUTING:"▶️",ASSESSING:"✍️",ARCHIVED:"📦"}[(t=x.value)==null?void 0:t.status]||""}),Re=N(()=>{var t;return{DRAFT:"本周期尚未发布。",OKR_ALIGN:"OKR 对齐阶段 — 自上而下:上级先制定,下级对齐后制定。1O+3KR,不可偏离上级方向。",EXECUTING:"执行阶段 — OKR 已锁定。请每周更新 KR 进度,标记阻塞时说明原因。",ASSESSING:'考评阶段 — 前往"我的绩效"完成自评,基于实际交付结果打分。',ARCHIVED:"本周期已归档。"}[(t=x.value)==null?void 0:t.status]||""});Ae(async()=>{var e;S.value=await Ue.list();const t=Y.query.periodId?Number(Y.query.periodId):null;t&&S.value.some(i=>i.id===t)?Q(t):Z.value.length?Q(Z.value[0].id):S.value.length&&Q(S.value[0].id);try{F.value=await He.getMySubordinates()}catch{F.value=[]}if((e=y.user)!=null&&e.position)try{E.value=await Me.getTemplateByPosition(y.user.position)}catch{E.value=null}});function Q(t){K.value=t,G()}function te(t){try{return JSON.parse(t)||[]}catch{return[]}}async function G(){var e;if(!K.value)return;const t=K.value;try{R.value=await T.getSuperiorOkrs(t)}catch{R.value=[]}try{g.value=await T.getMyOkr(t)}catch{g.value=null}try{const i=await T.canSubmit(t);$.value=i.canSubmit}catch{$.value=!1}try{H.value=await T.getPendingReviews(t)}catch{H.value=[]}fe(),g.value&&((e=g.value.keyResults)==null||e.forEach(i=>{i._newValue=i.currentValue,i._newStatus=i.status}))}function Oe(){C.value=!1,ae(),se(),D.value=!0}function le(){var t,e;if(C.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(I=>{var M;return I.assignedTo===((M=y.user)==null?void 0:M.id)}))&&r.add(m.id);c.alignedIds=[...r],c.krs=(g.value.keyResults||[]).map(m=>{var O;return{title:m.title||"",targetValue:m.targetValue||100,weight:m.weight||Math.floor(100/(((O=g.value.keyResults)==null?void 0:O.length)||3)),assignedTo:m.assignedTo||null,_sourceKrId:m.sourceKrId||null,_sourceInfo:m.sourceKrId?Ve(m.sourceKrId,m.sourceKrTitle,m.sourceKrUserName):null}})}se(),D.value=!0}function Ve(t,e,i){for(const r of R.value){const m=(r.keyResults||[]).find(O=>O.id===t);if(m)return{userName:r.userName,krTitle:m.title}}return e?{userName:i||"",krTitle:e}:null}async function be(){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}q.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};C.value&&g.value?await T.update(g.value.id,i):await T.submit(i),U.success(C.value?"OKR 已更新":"OKR 已提交,等待上级审核"),D.value=!1,C.value=!1,ae(),G()}finally{q.value=!1}}function ae(){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 Ke(t){await T.updateProgress(t.id,{newValue:t._newValue,status:t._newStatus,remark:""}),U.success("进度已更新"),G()}async function ie(t,e){await T.review(t,{approved:e,remark:""}),U.success(e?"已通过":"已驳回"),G()}function Ie(t){return!t.targetValue||t.targetValue===0?0:Math.min(t.currentValue/t.targetValue*100,100)}function Te(t){return{COMPLETED:"#27ae60",BLOCKED:"#e67e22",IN_PROGRESS:"#3ad4d8",NOT_STARTED:"#c0c4cc"}[t]||"#c0c4cc"}function Se(t){return{NOT_STARTED:"未开始",IN_PROGRESS:"进行中",COMPLETED:"已完成",BLOCKED:"阻塞"}[t]||t}function ne(t,e){return t?t.length>e?t.slice(0,e)+"...":t:""}return(t,e)=>{var re,de,ue,_e,ce,ve,pe;const i=b("el-tag"),r=b("el-button"),m=b("el-progress"),O=b("el-input-number"),I=b("el-option"),M=b("el-select"),Ee=b("el-divider"),oe=b("el-input"),Ne=b("el-tree-select"),Ce=b("el-dialog");return a(),o("div",Le,[e[48]||(e[48]=s("div",{class:"page-hero"},[s("div",{class:"hero-info"},[s("h2",null,"我的 OKR"),s("p",null,"1O · 3KR · 强对齐 · 看结果")])],-1)),S.value.length?(a(),h(Be,{key:0,periods:S.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:z(["state-banner","banner-"+((re=x.value)==null?void 0:re.status)])},[s("span",$e,n(we.value),1),s("span",Fe,n(Re.value),1)],2),s("div",qe,[s("div",Je,"📋 OKR 规则 · "+n(((de=P(y).user)==null?void 0:de.position)||"通用岗位"),1),e[8]||(e[8]=ze('<div class="rules-grid" data-v-bc5f178e><div class="rule-item" data-v-bc5f178e><b data-v-bc5f178e>O</b>:定性方向,15-30字,不含数字指标</div><div class="rule-item" data-v-bc5f178e><b data-v-bc5f178e>KR</b>:2~5条,可量化结果,权重之和=100</div><div class="rule-item" data-v-bc5f178e><b data-v-bc5f178e>对齐</b>:下级O必须承接上级O方向</div><div class="rule-item" data-v-bc5f178e><b data-v-bc5f178e>打分</b>:逐条KR 0-1分,看结果不看过程</div></div>',1)),E.value?(a(),o("div",Xe,[s("div",We,"📌 你的岗位指标参考("+n(E.value.name)+")",1),s("div",Qe,[(a(!0),o(k,null,w(te(E.value.itemsJson),(l,d)=>(a(),h(i,{key:d,size:"small",effect:"plain",type:"info",round:""},{default:v(()=>[u(n(l.name)+"(满分"+n(l.maxScore)+") ",1)]),_:2},1024))),128))]),e[7]||(e[7]=s("div",{class:"pr-hint"},"OKR 目标应与这些 KPI 指标方向一致",-1))])):f("",!0)]),((ue=x.value)==null?void 0:ue.status)==="OKR_ALIGN"?(a(),o(k,{key:0},[g.value?(a(),o("div",Ye,[s("div",Ze,[e[10]||(e[10]=s("span",{class:"section-badge personal"},"我的 OKR",-1)),s("span",es,n(g.value.title),1),p(i,{type:g.value.status==="APPROVED"?"success":g.value.status==="SUBMITTED"?"warning":"danger",size:"large",effect:"dark",round:""},{default:v(()=>[u(n(g.value.status==="APPROVED"?"已通过":g.value.status==="SUBMITTED"?"待审核":"已驳回"),1)]),_:1},8,["type"]),((_e=x.value)==null?void 0:_e.status)==="OKR_ALIGN"?(a(),h(r,{key:0,size:"small",type:"primary",plain:"",onClick:le,round:""},{default:v(()=>[...e[9]||(e[9]=[u(" 编辑 OKR ",-1)])]),_:1})):f("",!0)]),(ce=g.value.alignedObjectives)!=null&&ce.length?(a(),o("div",ss,[e[11]||(e[11]=u(" 已对齐上级:",-1)),(a(!0),o(k,null,w(g.value.alignedObjectives,l=>(a(),h(i,{key:l.id,size:"small",effect:"plain"},{default:v(()=>[u(n(l.userName)+": "+n(ne(l.title,35)),1)]),_:2},1024))),128))])):f("",!0),s("div",{class:z(["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",ts,"KR"+n(d+1),1),s("div",ls,n(l.title),1),s("div",as,[s("span",is,"目标 "+n(l.targetValue),1),l.sourceKrId?(a(),h(i,{key:0,size:"small",effect:"plain",type:"info",round:""},{default:v(()=>[...e[12]||(e[12]=[u("↗ 承接上级",-1)])]),_:1})):f("",!0),l.assignedToName?(a(),h(i,{key:1,size:"small",effect:"dark",type:"warning",round:""},{default:v(()=>[u("@"+n(l.assignedToName),1)]),_:2},1024)):f("",!0)])]))),128))],2),g.value.status==="REJECTED"?(a(),o("div",ns,[e[14]||(e[14]=u(" 你的 OKR 已被驳回,请修改后重新提交。 ",-1)),p(r,{type:"primary",size:"small",onClick:le,round:"",style:{"margin-left":"12px"}},{default:v(()=>[...e[13]||(e[13]=[u("修改并重新提交",-1)])]),_:1})])):f("",!0)])):(a(),o(k,{key:1},[$.value?(a(),o(k,{key:1},[R.value.length?(a(),o("div",us,[s("div",_s,[e[17]||(e[17]=s("span",{class:"section-badge superior"},"上级",-1)),s("span",cs,n(B.value)+" 的 OKR",1),e[18]||(e[18]=s("span",{class:"section-hint"},"你的 O 必须承接上级 O 的核心方向",-1))]),s("div",vs,[(a(!0),o(k,null,w(R.value,l=>(a(),o("div",{key:l.id,class:"okr-card superior-card"},[s("div",ps,[e[19]||(e[19]=s("span",{class:"o-tag superior"},"O",-1)),s("span",gs,n(l.title),1)]),(a(!0),o(k,null,w(l.keyResults,(d,_)=>{var A,j;return a(),o("div",{key:d.id,class:z(["mini-kr",{mine:d.assignedTo===((A=P(y).user)==null?void 0:A.id)}])},[s("span",ms,"KR"+n(_+1),1),s("span",fs,n(d.title),1),d.assignedTo===((j=P(y).user)==null?void 0:j.id)?(a(),h(i,{key:0,size:"small",type:"warning",effect:"dark",round:""},{default:v(()=>[...e[20]||(e[20]=[u("@我",-1)])]),_:1})):f("",!0),s("span",ks,n(d.targetValue),1)],2)}),128))]))),128))])])):(a(),o("div",ys,[...e[21]||(e[21]=[s("div",{class:"hint-icon"},"🚀",-1),s("div",{class:"hint-content"},[s("div",{class:"hint-title"},"你是最高层级,制定公司级 OKR"),s("div",{class:"hint-desc"},"你的目标将决定下属的 OKR 方向。1个O + 3条KR,团队成员将基于此对齐。")],-1)])])),s("div",hs,[p(r,{type:"primary",size:"large",onClick:Oe,round:""},{default:v(()=>[...e[22]||(e[22]=[u("制定我的 OKR",-1)])]),_:1})])],64)):(a(),o("div",os,[e[16]||(e[16]=s("div",{class:"hint-icon"},"⏳",-1)),s("div",rs,[e[15]||(e[15]=s("div",{class:"hint-title"},"等待上级先制定 OKR",-1)),s("div",ds,n(B.value)+" 需要先完成 OKR 制定并通过审核,然后你才能对齐并提交自己的 OKR。",1)])]))],64))],64)):f("",!0),((ve=x.value)==null?void 0:ve.status)==="EXECUTING"&&g.value?(a(),o("div",ws,[s("div",Rs,[e[24]||(e[24]=s("span",{class:"section-badge personal"},"我的 OKR",-1)),s("span",Os,n(g.value.title),1),p(i,{type:"success",size:"large",effect:"dark",round:""},{default:v(()=>[...e[23]||(e[23]=[u("🔒 已锁定",-1)])]),_:1})]),e[26]||(e[26]=s("div",{class:"rule-hint"},"⚠️ OKR 已锁定,仅可更新进度和标记阻塞,不可修改目标与关键结果。",-1)),s("div",Vs,[(a(!0),o(k,null,w(g.value.keyResults,(l,d)=>(a(),o("div",{key:l.id,class:"kr-progress-row"},[s("div",bs,[s("span",Ks,"KR"+n(d+1),1),s("span",Is,n(l.title),1),s("span",Ts,n(l.currentValue)+"/"+n(l.targetValue),1)]),p(m,{percentage:Ie(l),color:Te(l.status),"stroke-width":8},null,8,["percentage","color"]),s("div",Ss,[s("span",Es,n(Se(l.status)),1),p(O,{modelValue:l._newValue,"onUpdate:modelValue":_=>l._newValue=_,min:0,max:l.targetValue*2,size:"small","controls-position":"right",style:{width:"100px"}},null,8,["modelValue","onUpdate:modelValue","max"]),p(M,{modelValue:l._newStatus,"onUpdate:modelValue":_=>l._newStatus=_,size:"small",style:{width:"100px"}},{default:v(()=>[p(I,{label:"进行中",value:"IN_PROGRESS"}),p(I,{label:"已完成",value:"COMPLETED"}),p(I,{label:"阻塞",value:"BLOCKED"}),p(I,{label:"未开始",value:"NOT_STARTED"})]),_:1},8,["modelValue","onUpdate:modelValue"]),p(r,{size:"small",type:"primary",onClick:_=>Ke(l),round:"",disabled:l.status==="COMPLETED"},{default:v(()=>[...e[25]||(e[25]=[u("更新",-1)])]),_:1},8,["onClick","disabled"])]),l.status==="BLOCKED"?(a(),o("div",Ns," ⚠️ 阻塞项,请说明原因与所需支持。上级已收到提醒。 ")):f("",!0)]))),128))])])):f("",!0),((pe=x.value)==null?void 0:pe.status)==="ASSESSING"?(a(),o("div",Cs,[p(r,{type:"warning",size:"large",onClick:e[1]||(e[1]=l=>t.$router.push("/scores/my")),round:""},{default:v(()=>[...e[27]||(e[27]=[u("去完成绩效自评",-1)])]),_:1})])):f("",!0),H.value.length?(a(),o("div",xs,[s("div",As,[s("span",zs,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",Ps,[(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",Ds,[e[30]||(e[30]=s("span",{class:"o-tag personal"},"O",-1)),s("span",Us,n(l.title),1),p(i,{effect:"plain",type:"warning",round:""},{default:v(()=>[u(n(l.userName),1)]),_:2},1024)]),(d=l.alignedObjectives)!=null&&d.length?(a(),o("div",Hs,[e[31]||(e[31]=u(" 对齐:",-1)),(a(!0),o(k,null,w(l.alignedObjectives,_=>(a(),h(i,{key:_.id,size:"small",effect:"plain"},{default:v(()=>[u(n(_.userName)+": "+n(ne(_.title,25)),1)]),_:2},1024))),128))])):f("",!0),(a(!0),o(k,null,w(l.keyResults,(_,A)=>(a(),o("div",{key:_.id,class:"review-kr"},[s("span",Ms,"KR"+n(A+1),1),s("span",js,n(_.title),1),s("span",Bs,n(_.targetValue),1),_.assignedToName?(a(),h(i,{key:0,size:"small",effect:"dark",type:"warning",round:""},{default:v(()=>[u("@"+n(_.assignedToName),1)]),_:2},1024)):f("",!0)]))),128)),s("div",Ls,[p(r,{size:"small",type:"success",onClick:_=>ie(l.id,!0),round:""},{default:v(()=>[...e[32]||(e[32]=[u("✅ 通过",-1)])]),_:1},8,["onClick"]),p(r,{size:"small",type:"danger",onClick:_=>ie(l.id,!1),round:""},{default:v(()=>[...e[33]||(e[33]=[u("❌ 驳回",-1)])]),_:1},8,["onClick"])])])}),128))])])):f("",!0)],64)):(a(),o("div",Ge,"暂无进行中的考核周期")),p(Ce,{modelValue:D.value,"onUpdate:modelValue":e[6]||(e[6]=l=>D.value=l),title:C.value?"编辑 OKR":"制定个人 OKR",width:"720px",top:"4vh","close-on-click-modal":!1},{footer:v(()=>[p(r,{onClick:e[5]||(e[5]=l=>D.value=!1)},{default:v(()=>[...e[45]||(e[45]=[u("取消",-1)])]),_:1}),p(r,{type:"primary",size:"large",onClick:be,loading:q.value,round:""},{default:v(()=>[u(n(C.value?"保存修改":"提交审核"),1)]),_:1},8,["loading"])]),default:v(()=>[e[46]||(e[46]=s("div",{class:"dialog-rules"},[s("div",{class:"dr-item"},[u("🎯 "),s("b",null,"1个O(目标)"),u(":定性方向,15-30字,不含数字指标,必须对齐上级方向")]),s("div",{class:"dr-item"},[u("📏 "),s("b",null,"2~5条KR"),u("(推荐3条):可量化结果,10-25字,必须有验收标准")]),s("div",{class:"dr-item"},[u("⚖️ "),s("b",null,"权重之和 = 100"),u(":每条KR分配权重,总和必须为100")])],-1)),E.value?(a(),o("div",Gs,[s("div",$s,"📌 你的岗位指标参考("+n(E.value.name)+")",1),s("div",Fs,[(a(!0),o(k,null,w(te(E.value.itemsJson),(l,d)=>(a(),h(i,{key:d,size:"small",type:"info",effect:"plain",round:""},{default:v(()=>[u(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",qs,[s("div",Js,[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)),ee.value?(a(),h(i,{key:0,type:"warning",effect:"dark",round:"",size:"small"},{default:v(()=>[u(n(ee.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",Xs,[e[36]||(e[36]=s("span",{class:"align-o-icon"},"O",-1)),s("span",Ws,n(l.title),1)]),s("div",Qs,[(a(!0),o(k,null,w(l.keyResults,(d,_)=>{var A,j,ge,me;return a(),o("div",{key:d.id,class:z(["align-kr-row",{"is-mandatory":d.assignedTo===((A=P(y).user)==null?void 0:A.id),"is-selected":L(d.id)&&d.assignedTo!==((j=P(y).user)==null?void 0:j.id)}]),onClick:kt=>ye(d,l)},[s("div",Zs,[s("span",{class:z(["align-checkbox",{checked:L(d.id),locked:d.assignedTo===((ge=P(y).user)==null?void 0:ge.id)}])},[L(d.id)?(a(),o("span",et,"✓")):f("",!0)],2),s("span",st,"KR"+n(_+1),1),s("span",tt,n(d.title),1)]),s("div",lt,[s("span",at,"目标 "+n(d.targetValue),1),d.assignedTo===((me=P(y).user)==null?void 0:me.id)?(a(),h(i,{key:0,type:"warning",effect:"dark",size:"small",round:""},{default:v(()=>[...e[37]||(e[37]=[u(" @你 ",-1)])]),_:1})):L(d.id)?(a(),o("span",it,"✓")):f("",!0)])],10,Ys)}),128))])]))),128))])):f("",!0),p(Ee),s("div",nt,[e[38]||(e[38]=s("div",{class:"o-label"},[u("🎯 目标 O "),s("span",{class:"o-hint"},"(定性方向,15-30字,不含数字)")],-1)),p(oe,{modelValue:c.title,"onUpdate:modelValue":e[2]||(e[2]=l=>c.title=l),placeholder:X.value.oHint,size:"large",maxlength:"35","show-word-limit":""},null,8,["modelValue","placeholder"])]),s("div",ot,[e[39]||(e[39]=s("div",{class:"parent-align-label"},"对齐目标",-1)),p(Ne,{modelValue:c.parentObjectiveId,"onUpdate:modelValue":e[3]||(e[3]=l=>c.parentObjectiveId=l),data:J.value,props:{children:"children",label:"title",value:"id"},placeholder:"选择对齐的上级目标(可选)",clearable:"","check-strictly":"",style:{width:"100%"}},null,8,["modelValue","data"])]),s("div",rt,[s("div",dt,[u(" 📏 关键结果 KR("+n(c.krs.length)+" 条) ",1),s("span",{class:z(["weight-sum",{"weight-ok":W.value===100,"weight-bad":W.value!==100}])}," 权重合计:"+n(W.value)+" / 100 ",3)]),(a(!0),o(k,null,w(c.krs,(l,d)=>(a(),o("div",{key:d,class:z(["kr-form-card",{"has-source":l._sourceKrId}])},[l._sourceInfo?(a(),o("div",ut,[e[40]||(e[40]=s("span",{class:"kr-source-icon"},"↗",-1)),s("span",_t,"承接上级 "+n(l._sourceInfo.userName)+" 的 "+n(l._sourceInfo.krTitle),1)])):f("",!0),s("div",ct,[s("span",vt,"KR"+n(d+1),1),p(oe,{modelValue:l.title,"onUpdate:modelValue":_=>l.title=_,placeholder:X.value.krs[Math.min(d,X.value.krs.length-1)],size:"large",style:{flex:"1"},maxlength:"28","show-word-limit":""},null,8,["modelValue","onUpdate:modelValue","placeholder"]),s("div",pt,[e[41]||(e[41]=s("span",{class:"kr-form-label-sm"},"权重",-1)),p(O,{modelValue:l.weight,"onUpdate:modelValue":_=>l.weight=_,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)),p(O,{modelValue:l.targetValue,"onUpdate:modelValue":_=>l.targetValue=_,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:_=>he(d),type:"danger",circle:"",icon:"Delete",size:"small"},null,8,["onClick"])):f("",!0)])]),s("div",gt,[e[43]||(e[43]=s("span",{class:"kr-form-label"},"@指派",-1)),p(M,{modelValue:l.assignedTo,"onUpdate:modelValue":_=>l.assignedTo=_,clearable:"",filterable:"",placeholder:"指派给下属(可选)",size:"small",style:{width:"180px"}},{default:v(()=>[(a(!0),o(k,null,w(F.value,_=>(a(),h(I,{key:_.id,label:_.realName,value:_.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:v(()=>[...e[44]||(e[44]=[u(" + 添加 KR ",-1)])]),_:1})):f("",!0)]),e[47]||(e[47]=s("div",{class:"dialog-footer-hint"}," 💡 提交后由直属上级审核。审核通过后锁定,周期内不可修改。 ",-1))]),_:1},8,["modelValue","title"])])}}},Ot=xe(mt,[["__scopeId","data-v-bc5f178e"]]);export{Ot as default};