PeriodListView-C6lJkC6c.js 14 KB

1
  1. import{periodApi as R}from"./index-C1NeD1gi.js";import{u as me}from"./auth-B53ss9y5.js";import{_ as fe,g as w,h as ye,o as n,c as d,a,l as N,m as I,w as i,n as v,t as l,b as o,F as b,p as A,x as m,r as f,e as r,q as J,E as Z,y as H}from"./index-BPukwgZW.js";const ge={class:"app-page period-workbench"},ke={class:"app-page-header page-hero"},be={key:0,class:"period-metrics metric-row"},De={class:"metric-card"},he={class:"metric-card"},Ce={class:"metric-card"},Ee={class:"metric-card"},Te={key:1,class:"empty-state"},Ie={key:0,class:"tab-bar"},Ae=["onClick"],Se={class:"tab-label"},Re={class:"tab-count"},we={key:1,class:"category"},Ne={class:"cat-head"},Ve={class:"cat-count"},Oe={key:0,class:"sub-group"},Le={class:"card-body"},Ke={class:"card-main"},Ge={class:"card-info"},ze={class:"card-name"},Ue={class:"card-date"},He={class:"card-actions"},Ye={class:"card-guide"},Me={key:1,class:"sub-group"},$e={class:"card-body"},xe={class:"card-main"},Be={class:"card-info"},Fe={class:"card-name"},Xe={class:"card-date"},We={class:"card-actions"},Pe={class:"card-guide"},qe={key:2,class:"sub-group"},Qe={class:"card-body"},je={class:"card-main"},Je={class:"card-info"},Ze={class:"card-name"},et={class:"card-date"},tt={key:0,class:"card-actions"},at={key:2,class:"category"},st={class:"cat-head"},lt={class:"cat-count"},nt={class:"card-body"},ot={class:"card-main"},it={class:"card-info"},dt={class:"card-name"},rt={class:"card-date"},ut={key:0,class:"card-actions"},ct={key:3,class:"category"},vt={class:"cat-head"},pt={class:"cat-count"},_t={class:"card-body"},mt={class:"card-main"},ft={class:"card-info"},yt={class:"card-name"},gt={class:"card-date"},kt={key:0,class:"batch-preview"},bt={class:"bp-num"},Dt={class:"bp-name"},ht={class:"bp-date"},Ct={__name:"PeriodListView",setup(Et){const C=me(),E=w([]),V=w(!1),D=w(!1),k=w(null),c=w({name:"",periodType:"MONTHLY",startDate:"",endDate:""}),ee={WEEKLY:7,BI_WEEKLY:14},x={MONTHLY:1,BI_MONTHLY:2,QUARTERLY:3};function B(s,e){const u=new Date(s);if(x[e]){const p=x[e],g=new Date(u);return g.setMonth(g.getMonth()+p),g.setDate(g.getDate()-1),g}const y=ee[e]||7;return new Date(u.getTime()+y*864e5)}const F=new Date().toISOString().split("T")[0],te=m(()=>(C.isAdmin,"active")),h=w(te.value),ae=m(()=>[{key:"all",label:"全部",count:E.value.length},{key:"active",label:"进行中",count:T.value.length},{key:"upcoming",label:"未开始",count:z.value.length},{key:"archived",label:"已结束",count:O.value.length}]),se=m(()=>h.value==="all"||h.value==="active"),le=m(()=>h.value==="all"||h.value==="upcoming"),ne=m(()=>h.value==="all"||h.value==="archived"),O=m(()=>E.value.filter(s=>s.status==="ARCHIVED")),T=m(()=>E.value.filter(s=>s.status!=="ARCHIVED"&&s.startDate<=F)),z=m(()=>E.value.filter(s=>s.status!=="ARCHIVED"&&s.startDate>F)),X=m(()=>T.value.filter(s=>s.status==="EXECUTING"||s.status==="ASSESSING")),oe=m(()=>T.value.filter(s=>s.status==="ASSESSING")),Y=m(()=>T.value.filter(s=>s.status==="OKR_ALIGN")),W=m(()=>T.value.filter(s=>s.status==="DRAFT")),P=m(()=>{if(!D.value)return[];const s=c.value.startDate;if(!s)return[];const e=new Date(s),u=[];let y=new Date(e);for(let p=0;p<6;p++){const g=B(y,c.value.periodType);u.push({startDate:y.toISOString().split("T")[0],endDate:g.toISOString().split("T")[0]}),y=new Date(g),y.setDate(y.getDate()+1)}return u});function M(){const s=c.value.startDate;if(s&&!D.value){const e=B(s,c.value.periodType);c.value.endDate=e.toISOString().split("T")[0]}}function $(s){return s?typeof s=="string"?s:s.toISOString().split("T")[0]:""}ye(()=>U());async function U(){E.value=await R.list()}async function ie(){if(D.value)await R.batchCreate({namePrefix:(c.value.name||"周期")+"",periodType:c.value.periodType,startDate:$(c.value.startDate)}),H.success("已批量创建 6 个连续周期");else{const s=c.value;await R.create({name:s.name,periodType:s.periodType,startDate:$(s.startDate),endDate:$(s.endDate)}),H.success("周期已创建")}V.value=!1,D.value=!1,c.value={name:"",periodType:"MONTHLY",startDate:"",endDate:""},U()}async function S(s,e){if(!k.value){k.value=s;try{const u=await R.checkReadiness(s,e);if(!u.ready){await Z.alert(u.blockers.map(y=>`· ${y}`).join("<br>"),"暂不能切换周期状态",{dangerouslyUseHTMLString:!0,confirmButtonText:"知道了",type:"warning"});return}await R.transition(s,e),H.success("周期状态已更新"),U()}catch{}finally{k.value=null}}}async function q(s){await Z.confirm("确定删除该周期吗?","提示",{type:"warning"}),await R.delete(s),H.success("已删除"),U()}function L(s){return{WEEKLY:"单周",BI_WEEKLY:"双周",MONTHLY:"单月",BI_MONTHLY:"双月",QUARTERLY:"季度"}[s]||s}function de(s){return{DRAFT:"待发布",OKR_ALIGN:"OKR 对齐中",EXECUTING:"执行中",ASSESSING:"考评中",ARCHIVED:"已归档"}[s]||s}function re(s){return{DRAFT:"info",OKR_ALIGN:"",EXECUTING:"success",ASSESSING:"warning",ARCHIVED:"info"}[s]||"info"}function Q(s){return{DRAFT:"管理员发布后团队成员即可提交 OKR。",OKR_ALIGN:"部门负责人发布部门 OKR → 员工提交个人 OKR 并对齐 → 上级审核。",EXECUTING:"OKR 已锁定,员工每周更新 KR 进度。",ASSESSING:"员工自评 → 上级打分 → 面谈沟通 → 归档。",ARCHIVED:"已归档,数据不可修改。"}[s.status]||""}return(s,e)=>{const u=f("el-button"),y=f("el-empty"),p=f("el-tag"),g=f("el-input"),K=f("el-form-item"),G=f("el-option"),ue=f("el-select"),j=f("el-date-picker"),ce=f("el-divider"),ve=f("el-checkbox"),pe=f("el-form"),_e=f("el-dialog");return n(),d("div",ge,[a("div",ke,[e[9]||(e[9]=a("div",{class:"hero-info"},[a("h2",{class:"app-page-title"},"考核周期"),a("p",{class:"app-page-subtitle"},"管理考核节奏,推动 OKR 对齐")],-1)),N(C).isAdmin?(n(),I(u,{key:0,type:"primary",size:"large",onClick:e[0]||(e[0]=t=>V.value=!0),round:""},{default:i(()=>[...e[8]||(e[8]=[r(" 创建新周期 ",-1)])]),_:1})):v("",!0)]),E.value.length?(n(),d("div",be,[a("div",De,[e[10]||(e[10]=a("span",{class:"metric-card__label"},"进行中",-1)),a("strong",null,l(T.value.length),1)]),a("div",he,[e[11]||(e[11]=a("span",{class:"metric-card__label"},"OKR 对齐",-1)),a("strong",null,l(Y.value.length),1)]),a("div",Ce,[e[12]||(e[12]=a("span",{class:"metric-card__label"},"考评中",-1)),a("strong",null,l(oe.value.length),1)]),a("div",Ee,[e[13]||(e[13]=a("span",{class:"metric-card__label"},"已归档",-1)),a("strong",null,l(O.value.length),1)])])):v("",!0),E.value.length===0?(n(),d("div",Te,[o(y,{description:"暂无考核周期"},{extra:i(()=>[...e[14]||(e[14]=[a("span",{class:"empty-hint"},"管理员创建周期后,团队即可开始 OKR 对齐",-1)])]),_:1})])):(n(),d(b,{key:2},[N(C).isAdmin?(n(),d("div",Ie,[(n(!0),d(b,null,A(ae.value,t=>(n(),d("div",{key:t.key,class:J(["tab-item",{active:h.value===t.key}]),onClick:_=>h.value=t.key},[a("span",Se,l(t.label),1),a("span",Re,l(t.count),1)],10,Ae))),128))])):v("",!0),se.value?(n(),d("div",we,[a("div",Ne,[e[15]||(e[15]=a("span",{class:"cat-badge active"},"进行中",-1)),a("span",Ve,l(T.value.length)+" 个周期",1)]),X.value.length?(n(),d("div",Oe,[e[21]||(e[21]=a("div",{class:"sub-label"},"执行 & 考评",-1)),(n(!0),d(b,null,A(X.value,t=>(n(),d("div",{key:t.id,class:J(["period-card","status-"+t.status])},[a("div",Le,[a("div",Ke,[a("div",Ge,[a("span",ze,l(t.name),1),o(p,{size:"small",type:re(t.status),effect:"dark",round:""},{default:i(()=>[r(l(de(t.status)),1)]),_:2},1032,["type"]),o(p,{size:"small",effect:"plain",type:"info",round:""},{default:i(()=>[r(l(L(t.periodType)),1)]),_:2},1024)]),a("div",Ue,l(t.startDate)+" ~ "+l(t.endDate),1)]),a("div",He,[N(C).isAdmin?(n(),d(b,{key:0},[t.status==="EXECUTING"?(n(),I(u,{key:0,type:"warning",size:"small",plain:"",loading:k.value===t.id,onClick:_=>S(t.id,"OKR_ALIGN"),round:""},{default:i(()=>[...e[16]||(e[16]=[r("回退",-1)])]),_:1},8,["loading","onClick"])):v("",!0),t.status==="EXECUTING"?(n(),I(u,{key:1,type:"primary",size:"small",loading:k.value===t.id,onClick:_=>S(t.id,"ASSESSING"),round:""},{default:i(()=>[...e[17]||(e[17]=[r("进入考评",-1)])]),_:1},8,["loading","onClick"])):v("",!0),t.status==="EXECUTING"?(n(),I(u,{key:2,type:"danger",size:"small",plain:"",loading:k.value===t.id,onClick:_=>S(t.id,"ARCHIVED"),round:""},{default:i(()=>[...e[18]||(e[18]=[r("直接归档",-1)])]),_:1},8,["loading","onClick"])):v("",!0),t.status==="ASSESSING"?(n(),I(u,{key:3,type:"warning",loading:k.value===t.id,onClick:_=>S(t.id,"ARCHIVED"),round:""},{default:i(()=>[...e[19]||(e[19]=[r("结束并归档",-1)])]),_:1},8,["loading","onClick"])):v("",!0)],64)):v("",!0),t.status==="ASSESSING"?(n(),I(u,{key:1,type:"warning",size:"small",onClick:_=>s.$router.push({path:"/scores/my",query:{periodId:t.id}}),round:""},{default:i(()=>[...e[20]||(e[20]=[r("去自评",-1)])]),_:1},8,["onClick"])):v("",!0)])]),a("div",Ye,l(Q(t)),1)],2))),128))])):v("",!0),Y.value.length?(n(),d("div",Me,[e[25]||(e[25]=a("div",{class:"sub-label"},"OKR 对齐中",-1)),(n(!0),d(b,null,A(Y.value,t=>(n(),d("div",{key:t.id,class:"period-card status-OKR_ALIGN"},[a("div",$e,[a("div",xe,[a("div",Be,[a("span",Fe,l(t.name),1),o(p,{type:"warning",size:"small",effect:"dark",round:""},{default:i(()=>[...e[22]||(e[22]=[r("OKR 对齐中",-1)])]),_:1}),o(p,{size:"small",effect:"plain",type:"info",round:""},{default:i(()=>[r(l(L(t.periodType)),1)]),_:2},1024)]),a("div",Xe,l(t.startDate)+" ~ "+l(t.endDate),1)]),a("div",We,[N(C).isAdmin?(n(),I(u,{key:0,type:"warning",size:"small",loading:k.value===t.id,onClick:_=>S(t.id,"EXECUTING"),round:""},{default:i(()=>[...e[23]||(e[23]=[r("锁定并开始执行",-1)])]),_:1},8,["loading","onClick"])):v("",!0),o(u,{type:"primary",size:"small",onClick:_=>s.$router.push({path:"/okr/my",query:{periodId:t.id}}),round:""},{default:i(()=>[...e[24]||(e[24]=[r("去填写 OKR",-1)])]),_:1},8,["onClick"])])]),a("div",Pe,l(Q(t)),1)]))),128))])):v("",!0),W.value.length?(n(),d("div",qe,[e[29]||(e[29]=a("div",{class:"sub-label"},"未发布",-1)),(n(!0),d(b,null,A(W.value,t=>(n(),d("div",{key:t.id,class:"period-card status-DRAFT"},[a("div",Qe,[a("div",je,[a("div",Je,[a("span",Ze,l(t.name),1),o(p,{type:"info",size:"small",effect:"dark",round:""},{default:i(()=>[...e[26]||(e[26]=[r("待发布",-1)])]),_:1}),o(p,{size:"small",effect:"plain",type:"info",round:""},{default:i(()=>[r(l(L(t.periodType)),1)]),_:2},1024)]),a("div",et,l(t.startDate)+" ~ "+l(t.endDate),1)]),N(C).isAdmin?(n(),d("div",tt,[o(u,{type:"primary",size:"small",loading:k.value===t.id,onClick:_=>S(t.id,"OKR_ALIGN"),round:""},{default:i(()=>[...e[27]||(e[27]=[r("发布 OKR 对齐",-1)])]),_:1},8,["loading","onClick"]),o(u,{type:"danger",size:"small",plain:"",onClick:_=>q(t.id),round:""},{default:i(()=>[...e[28]||(e[28]=[r("删除",-1)])]),_:1},8,["onClick"])])):v("",!0)])]))),128))])):v("",!0)])):v("",!0),le.value&&z.value.length?(n(),d("div",at,[a("div",st,[e[30]||(e[30]=a("span",{class:"cat-badge upcoming"},"未开始",-1)),a("span",lt,l(z.value.length)+" 个周期",1)]),(n(!0),d(b,null,A(z.value,t=>(n(),d("div",{key:t.id,class:"period-card status-DRAFT"},[a("div",nt,[a("div",ot,[a("div",it,[a("span",dt,l(t.name),1),o(p,{type:"info",size:"small",effect:"dark",round:""},{default:i(()=>[...e[31]||(e[31]=[r("未开始",-1)])]),_:1}),o(p,{size:"small",effect:"plain",type:"info",round:""},{default:i(()=>[r(l(L(t.periodType)),1)]),_:2},1024)]),a("div",rt,l(t.startDate)+" ~ "+l(t.endDate),1)]),N(C).isAdmin?(n(),d("div",ut,[o(u,{type:"danger",size:"small",plain:"",onClick:_=>q(t.id),round:""},{default:i(()=>[...e[32]||(e[32]=[r("删除",-1)])]),_:1},8,["onClick"])])):v("",!0)])]))),128))])):v("",!0),ne.value&&O.value.length?(n(),d("div",ct,[a("div",vt,[e[33]||(e[33]=a("span",{class:"cat-badge archived"},"已结束",-1)),a("span",pt,l(O.value.length)+" 个周期",1)]),(n(!0),d(b,null,A(O.value,t=>(n(),d("div",{key:t.id,class:"period-card status-ARCHIVED"},[a("div",_t,[a("div",mt,[a("div",ft,[a("span",yt,l(t.name),1),o(p,{type:"info",size:"small",effect:"plain",round:""},{default:i(()=>[...e[34]||(e[34]=[r("已归档",-1)])]),_:1}),o(p,{size:"small",effect:"plain",type:"info",round:""},{default:i(()=>[r(l(L(t.periodType)),1)]),_:2},1024)]),a("div",gt,l(t.startDate)+" ~ "+l(t.endDate),1)])])]))),128))])):v("",!0)],64)),o(_e,{modelValue:V.value,"onUpdate:modelValue":e[7]||(e[7]=t=>V.value=t),title:"创建考核周期",width:"520px"},{footer:i(()=>[o(u,{onClick:e[6]||(e[6]=t=>V.value=!1)},{default:i(()=>[...e[37]||(e[37]=[r("取消",-1)])]),_:1}),o(u,{type:"primary",onClick:ie},{default:i(()=>[r(l(D.value?"批量创建 6 个周期":"创建"),1)]),_:1})]),default:i(()=>[o(pe,{model:c.value,"label-width":"80px"},{default:i(()=>[o(K,{label:"名称前缀"},{default:i(()=>[o(g,{modelValue:c.value.name,"onUpdate:modelValue":e[1]||(e[1]=t=>c.value.name=t),placeholder:"如:2026、"},null,8,["modelValue"])]),_:1}),o(K,{label:"周期类型"},{default:i(()=>[o(ue,{modelValue:c.value.periodType,"onUpdate:modelValue":e[2]||(e[2]=t=>c.value.periodType=t),placeholder:"选择周期类型",onChange:M,style:{width:"100%"}},{default:i(()=>[o(G,{label:"单周(7天)",value:"WEEKLY"}),o(G,{label:"双周(14天)",value:"BI_WEEKLY"}),o(G,{label:"单月(自然月)",value:"MONTHLY"}),o(G,{label:"双月(2个自然月)",value:"BI_MONTHLY"}),o(G,{label:"季度(3个自然月)",value:"QUARTERLY"})]),_:1},8,["modelValue"])]),_:1}),o(K,{label:"开始日期"},{default:i(()=>[o(j,{modelValue:c.value.startDate,"onUpdate:modelValue":e[3]||(e[3]=t=>c.value.startDate=t),type:"date",placeholder:"选择日期",onChange:M,style:{width:"100%"}},null,8,["modelValue"])]),_:1}),o(K,{label:"结束日期"},{default:i(()=>[o(j,{modelValue:c.value.endDate,"onUpdate:modelValue":e[4]||(e[4]=t=>c.value.endDate=t),type:"date",placeholder:"自动计算或手动选择",style:{width:"100%"}},null,8,["modelValue"])]),_:1}),o(ce),o(K,{label:"批量创建"},{default:i(()=>[o(ve,{modelValue:D.value,"onUpdate:modelValue":e[5]||(e[5]=t=>D.value=t),onChange:M},{default:i(()=>[...e[35]||(e[35]=[r(" 批量创建 6 个连续周期 ",-1)])]),_:1},8,["modelValue"])]),_:1}),D.value&&P.value.length?(n(),d("div",kt,[e[36]||(e[36]=a("div",{class:"bp-title"},"预览(将创建以下 6 个周期)",-1)),(n(!0),d(b,null,A(P.value,(t,_)=>(n(),d("div",{key:_,class:"bp-item"},[a("span",bt,l(_+1),1),a("span",Dt,l(c.value.name||"周期")+l(_+1),1),a("span",ht,l(t.startDate)+" ~ "+l(t.endDate),1)]))),128))])):v("",!0)]),_:1},8,["model"])]),_:1},8,["modelValue"])])}}},St=fe(Ct,[["__scopeId","data-v-29fa4ccc"]]);export{St as default};