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