Files
tongjiweb/server/public/assets/TimesheetForm-DD6c2YB4.js
2026-06-04 11:01:29 +08:00

2 lines
6.5 KiB
JavaScript

import{p as ee,q as te,c as T,a as d,b as a,w as o,y as le,k as w,h as s,r as n,x as ae,o as u,e as i,t as M,F as q,i as N,z as oe,A as re,E as C,f as ne,j as se}from"./index-Dn51426I.js";import{r as g}from"./index-BRvS5RTm.js";const ie={class:"content-card"},de={class:"card-title"},ue={class:"filter-bar",style:{"margin-bottom":"0"}},pe={style:{"margin-top":"16px"}},ve={__name:"TimesheetForm",setup(ce){const S=new Date().toISOString().split("T")[0],b=s(S),x=s([]),p=s(0),V=s([]),j=s(!1),c=s(!1),D=s(!1),m=s(null),U=s(null),t=ne({client_id:"",hours:1,remark:"",service_type:"售前",project_type:""}),Y={client_id:[{required:!0,message:"请选择项目",trigger:"change"}],hours:[{required:!0,message:"请输入工时",trigger:"blur"}],project_type:[{required:!0,message:"请输入项目类型",trigger:"blur"}]},A=r=>{const e=new Date;e.setHours(0,0,0,0);const h=new Date(e);return h.setDate(e.getDate()-40),r.getTime()<h.getTime()||r.getTime()>e.getTime()};async function k(){j.value=!0;try{const r=await g.getTimesheets({date:b.value});x.value=r.data.records,p.value=r.data.day_total}finally{j.value=!1}}async function F(){const r=await g.getClients();V.value=r.data}const v=se(()=>{if(!t.client_id)return[];const r=V.value.find(e=>e.id===t.client_id);return(r==null?void 0:r.service_types)||[]});ee(()=>t.client_id,()=>{v.value.includes(t.project_type)||(t.project_type=v.value[0]||"")});function I(){m.value=null,t.client_id="",t.hours=1,t.remark="",t.service_type="售前",t.project_type="",c.value=!0}function O(r){m.value=r.id,t.client_id=r.client_id,t.hours=r.hours,t.remark=r.remark||"",t.service_type=r.service_type||"售前",t.project_type=r.project_type||"",c.value=!0}async function R(){var e;if(await((e=U.value)==null?void 0:e.validate().catch(()=>!1))){D.value=!0;try{m.value?(await g.updateTimesheet(m.value,{hours:t.hours,remark:t.remark,service_type:t.service_type,project_type:t.project_type}),C.success("更新成功")):(await g.createTimesheet({client_id:t.client_id,work_date:b.value,hours:t.hours,remark:t.remark,service_type:t.service_type,project_type:t.project_type}),C.success("提交成功")),c.value=!1,k()}finally{D.value=!1}}}async function H(r){await re.confirm("确定删除该工时记录吗?","确认",{type:"warning"}),await g.deleteTimesheet(r.id),C.success("删除成功"),k()}return te(()=>{k(),F()}),(r,e)=>{const h=n("el-date-picker"),z=n("el-tag"),f=n("el-button"),_=n("el-table-column"),L=n("el-table"),G=n("el-progress"),$=n("el-option"),B=n("el-select"),y=n("el-form-item"),E=n("el-radio"),J=n("el-radio-group"),K=n("el-input-number"),P=n("el-input"),Q=n("el-form"),W=n("el-dialog"),X=ae("loading");return u(),T("div",null,[e[15]||(e[15]=d("div",{class:"page-header"},[d("h1",null,"每日工时填报"),d("p",null,"选择日期,为参与的项目填写工时")],-1)),d("div",ie,[d("div",de,[d("div",ue,[a(h,{modelValue:b.value,"onUpdate:modelValue":e[0]||(e[0]=l=>b.value=l),type:"date",placeholder:"选择日期","value-format":"YYYY-MM-DD",size:"default","disabled-date":A,onChange:k},null,8,["modelValue"]),a(z,{type:"info",effect:"dark",round:"",size:"large",style:{"margin-left":"8px"}},{default:o(()=>[i(" 当日已填: "+M(p.value)+" / 8 小时 ",1)]),_:1})]),a(f,{type:"primary",onClick:I,disabled:p.value>=8},{default:o(()=>[...e[8]||(e[8]=[i("+ 添加工时",-1)])]),_:1},8,["disabled"])]),le((u(),w(L,{data:x.value,stripe:""},{default:o(()=>[a(_,{prop:"client_name",label:"客户/项目","min-width":"150"}),a(_,{prop:"service_type",label:"售前/售后",width:"100"},{default:o(({row:l})=>[a(z,{type:l.service_type==="售后"?"warning":"success",size:"small"},{default:o(()=>[i(M(l.service_type||"售前"),1)]),_:2},1032,["type"])]),_:1}),a(_,{prop:"project_type",label:"子项目",width:"120"}),a(_,{prop:"hours",label:"工时(h)",width:"80"}),a(_,{prop:"remark",label:"备注","min-width":"120","show-overflow-tooltip":""}),a(_,{label:"操作",width:"140"},{default:o(({row:l})=>[a(f,{size:"small",onClick:Z=>O(l)},{default:o(()=>[...e[9]||(e[9]=[i("编辑",-1)])]),_:1},8,["onClick"]),a(f,{size:"small",type:"danger",onClick:Z=>H(l)},{default:o(()=>[...e[10]||(e[10]=[i("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[X,j.value]]),d("div",pe,[a(G,{percentage:p.value/8*100,color:p.value>8?"#ef4444":"#6366f1","stroke-width":10,format:()=>`${p.value}/8h`},null,8,["percentage","color","format"])])]),a(W,{modelValue:c.value,"onUpdate:modelValue":e[7]||(e[7]=l=>c.value=l),title:m.value?"编辑工时":"添加工时",width:"460px","destroy-on-close":""},{footer:o(()=>[a(f,{onClick:e[6]||(e[6]=l=>c.value=!1)},{default:o(()=>[...e[13]||(e[13]=[i("取消",-1)])]),_:1}),a(f,{type:"primary",loading:D.value,onClick:R},{default:o(()=>[...e[14]||(e[14]=[i("保存",-1)])]),_:1},8,["loading"])]),default:o(()=>[a(Q,{model:t,rules:Y,ref_key:"formRef",ref:U,"label-width":"80px"},{default:o(()=>[m.value?oe("",!0):(u(),w(y,{key:0,label:"项目",prop:"client_id"},{default:o(()=>[a(B,{modelValue:t.client_id,"onUpdate:modelValue":e[1]||(e[1]=l=>t.client_id=l),placeholder:"选择客户/项目",style:{width:"100%"},filterable:""},{default:o(()=>[(u(!0),T(q,null,N(V.value,l=>(u(),w($,{key:l.id,label:`${l.name} (${l.sales_name})`,value:l.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})),a(y,{label:"类型",prop:"service_type"},{default:o(()=>[a(J,{modelValue:t.service_type,"onUpdate:modelValue":e[2]||(e[2]=l=>t.service_type=l)},{default:o(()=>[a(E,{value:"售前"},{default:o(()=>[...e[11]||(e[11]=[i("售前",-1)])]),_:1}),a(E,{value:"售后"},{default:o(()=>[...e[12]||(e[12]=[i("售后",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),a(y,{label:"子项目",prop:"project_type"},{default:o(()=>[a(B,{modelValue:t.project_type,"onUpdate:modelValue":e[3]||(e[3]=l=>t.project_type=l),style:{width:"100%"},filterable:"",disabled:!v.value.length&&!t.project_type,placeholder:v.value.length?"请选择子项目":"该项目未配置子项目"},{default:o(()=>[(u(!0),T(q,null,N(v.value,l=>(u(),w($,{key:l,label:l,value:l},null,8,["label","value"]))),128))]),_:1},8,["modelValue","disabled","placeholder"])]),_:1}),a(y,{label:"工时",prop:"hours"},{default:o(()=>[a(K,{modelValue:t.hours,"onUpdate:modelValue":e[4]||(e[4]=l=>t.hours=l),min:.5,max:8,step:.5,precision:1,style:{width:"100%"}},null,8,["modelValue"])]),_:1}),a(y,{label:"备注"},{default:o(()=>[a(P,{modelValue:t.remark,"onUpdate:modelValue":e[5]||(e[5]=l=>t.remark=l),type:"textarea",rows:2,placeholder:"工作内容说明(选填)"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}};export{ve as default};