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