PeriodListView-Df2Fc1SZ.js 13 KB

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