Files
tongjiweb/server/public/assets/TimesheetForm-BQgKIh90.js
T

2 lines
6.5 KiB
JavaScript

import{h as n,p as te,q as le,c as C,a as d,b as a,w as o,y as ae,k as w,C as oe,r as s,x as re,o as u,e as i,t as E,F as M,i as N,z as se,A as ne,E as T,f as ie,j as de}from"./index-B5IUyHJe.js";import{r as g}from"./index-OKS9XN2R.js";const ue={class:"content-card"},pe={class:"card-title"},ce={class:"filter-bar",style:{"margin-bottom":"0"}},me={style:{"margin-top":"16px"}},ye={__name:"TimesheetForm",setup(_e){const S=oe(),Y=new Date().toISOString().split("T")[0],b=n(S.query.date||Y),x=n([]),p=n(0),V=n([]),j=n(!1),c=n(!1),D=n(!1),m=n(null),U=n(null),t=ie({client_id:"",hours:1,remark:"",service_type:"售前",project_type:""}),A={client_id:[{required:!0,message:"请选择项目",trigger:"change"}],hours:[{required:!0,message:"请输入工时",trigger:"blur"}],project_type:[{required:!0,message:"请输入项目类型",trigger:"blur"}]},F=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 R(){const r=await g.getClients();V.value=r.data}const v=de(()=>{if(!t.client_id)return[];const r=V.value.find(e=>e.id===t.client_id);return(r==null?void 0:r.service_types)||[]});te(()=>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 H(){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}),T.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}),T.success("提交成功")),c.value=!1,k()}finally{D.value=!1}}}async function L(r){await ne.confirm("确定删除该工时记录吗?","确认",{type:"warning"}),await g.deleteTimesheet(r.id),T.success("删除成功"),k()}return le(()=>{k(),R()}),(r,e)=>{const h=s("el-date-picker"),z=s("el-tag"),f=s("el-button"),_=s("el-table-column"),G=s("el-table"),J=s("el-progress"),$=s("el-option"),q=s("el-select"),y=s("el-form-item"),B=s("el-radio"),K=s("el-radio-group"),P=s("el-input-number"),Q=s("el-input"),W=s("el-form"),X=s("el-dialog"),Z=re("loading");return u(),C("div",null,[e[15]||(e[15]=d("div",{class:"page-header"},[d("h1",null,"每日工时填报"),d("p",null,"选择日期,为参与的项目填写工时")],-1)),d("div",ue,[d("div",pe,[d("div",ce,[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":F,onChange:k},null,8,["modelValue"]),a(z,{type:"info",effect:"dark",round:"",size:"large",style:{"margin-left":"8px"}},{default:o(()=>[i(" 当日已填: "+E(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"])]),ae((u(),w(G,{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(E(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:ee=>O(l)},{default:o(()=>[...e[9]||(e[9]=[i("编辑",-1)])]),_:1},8,["onClick"]),a(f,{size:"small",type:"danger",onClick:ee=>L(l)},{default:o(()=>[...e[10]||(e[10]=[i("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[Z,j.value]]),d("div",me,[a(J,{percentage:p.value/8*100,color:p.value>8?"#ef4444":"#6366f1","stroke-width":10,format:()=>`${p.value}/8h`},null,8,["percentage","color","format"])])]),a(X,{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:H},{default:o(()=>[...e[14]||(e[14]=[i("保存",-1)])]),_:1},8,["loading"])]),default:o(()=>[a(W,{model:t,rules:A,ref_key:"formRef",ref:U,"label-width":"80px"},{default:o(()=>[m.value?se("",!0):(u(),w(y,{key:0,label:"项目",prop:"client_id"},{default:o(()=>[a(q,{modelValue:t.client_id,"onUpdate:modelValue":e[1]||(e[1]=l=>t.client_id=l),placeholder:"选择客户/项目",style:{width:"100%"},filterable:""},{default:o(()=>[(u(!0),C(M,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(K,{modelValue:t.service_type,"onUpdate:modelValue":e[2]||(e[2]=l=>t.service_type=l)},{default:o(()=>[a(B,{value:"售前"},{default:o(()=>[...e[11]||(e[11]=[i("售前",-1)])]),_:1}),a(B,{value:"售后"},{default:o(()=>[...e[12]||(e[12]=[i("售后",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),a(y,{label:"子项目",prop:"project_type"},{default:o(()=>[a(q,{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),C(M,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(P,{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(Q,{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{ye as default};