Files
zyt/server/public/admin/assets/roster-DFKPXJFf.js
T
2026-03-04 15:32:30 +08:00

2 lines
11 KiB
JavaScript

import{D as ne,B as ie,C as me,i as pe,L as fe,M as ve,K as ge,I as be,G as _e,H as ce,h as ke,Q as ye,O as Ve,P as xe,Y as De,_ as Ye,F as we}from"./element-plus-Caccz9g_.js";import{d as w,g as Ee}from"./dayjs-DwMCULLY.js";import{r as U,f as m,d as qe}from"./index-Ssy6AHhX.js";import{a as Ce}from"./admin-CpTVl606.js";import{d as G,r as g,b as L,f as Me,c as R,o as _,l as a,s as t,a as p,k as Ie,a5 as u,m as V,j as x,F as O,q as j,g as N}from"./@vue-DqCYILjk.js";import"./@element-plus-DUVk59Vi.js";import"./lodash-es-B-ecsAzo.js";import"./@popperjs-D_chPuIy.js";import"./async-validator-9PlIezaS.js";import"./@ctrl-r5W6hzzQ.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./nprogress-Cn18nAuv.js";import"./vue-router-B-0K5V-K.js";import"./pinia-mEEzQJvk.js";import"./axios-DIsA03vz.js";import"./lodash-y93ab0Xv.js";import"./@vueuse-DAQYQaJJ.js";import"./css-color-function-Oslqczna.js";import"./balanced-match-BdS7OldZ.js";import"./color-DYO1E7y4.js";import"./clone-Ddk2tjDh.js";import"./color-convert-DsNsD289.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-CdRib5DX.js";import"./clipboard-DbF4rXjn.js";import"./echarts-CXZcVnUo.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DO4NV0px.js";import"./highlight.js-CCvalMLC.js";import"./@highlightjs-Bvtfkhq1.js";function $e(y){return U.get({url:"/doctor.roster/lists",params:y})}function Re(y){return U.post({url:"/doctor.roster/save",params:y})}function Ne(y){return U.post({url:"/doctor.roster/batchSave",params:y})}const Ue={class:"doctor-roster p-4"},Se={class:"flex justify-between items-center"},We={class:"mb-4"},Be={class:"text-center mb-4 text-gray-600"},Fe={class:"space-y-1"},Pe=["onClick"],Te=["onClick"],Le=G({name:"doctorRoster"}),Oe=G({...Le,setup(y){w.extend(Ee);const S=g(""),f=g(w().startOf("isoWeek")),D=g(!1),M=g(!1),z=g([]),Y=g(!1),I=g(!1),o=g({doctorIds:[],dateRange:[],periods:["morning","afternoon"],weekdays:[1,2,3,4,5],status:1,quota:20,maxPatients:30,remark:""}),H=async()=>{try{const r=await Ce({page_no:1,page_size:1e3,role_id:1});z.value=(r==null?void 0:r.lists)||[],E.value=((r==null?void 0:r.lists)||[]).map(e=>({doctorId:e.id,doctorName:e.name||e.account,rosters:{}})),await c()}catch(r){console.error("加载医生列表失败:",r),m.msgError("加载医生列表失败")}},c=async()=>{M.value=!0;try{const r={start_date:f.value.format("YYYY-MM-DD"),end_date:f.value.add(6,"day").format("YYYY-MM-DD")},e=await $e(r),d=(e==null?void 0:e.lists)||[];E.value.forEach(n=>{n.rosters={},d.forEach(s=>{if(s.doctor_id===n.doctorId){const v=`${s.date}_${s.period}`;n.rosters[v]={id:s.id,status:s.status,quota:s.quota||0}}})})}catch(r){console.error("加载排班数据失败:",r),m.msgError("加载排班数据失败")}finally{M.value=!1}},K=L(()=>{const r=[],e=["周一","周二","周三","周四","周五","周六","周日"];for(let d=0;d<7;d++){const n=f.value.add(d,"day");r.push({date:n.format("YYYY-MM-DD"),label:`${e[d]} ${n.format("MM-DD")}`})}return r}),Q=L(()=>{const r=f.value.format("YYYY-MM-DD"),e=f.value.add(6,"day").format("YYYY-MM-DD");return`${r}${e}`}),E=g([]),i=g({id:null,doctorId:0,doctorName:"",date:"",period:"morning",status:1,quota:20}),W=(r,e,d)=>{const n=`${e}_${d}`,s=r.rosters[n];if(!s)return"未排班";const v={1:"出诊",2:"停诊",3:"休息"};return s.status===1?`${v[s.status]}(${s.quota})`:v[s.status]},B=(r,e,d)=>{const n=`${e}_${d}`,s=r.rosters[n]||{status:1,quota:20};i.value={id:s.id||null,doctorId:r.doctorId,doctorName:r.doctorName,date:e,period:d,status:s.status,quota:s.quota},D.value=!0},A=async()=>{try{await Re({id:i.value.id,doctor_id:i.value.doctorId,date:i.value.date,period:i.value.period,status:i.value.status,quota:i.value.status===1?i.value.quota:0}),m.msgSuccess("保存成功"),D.value=!1,await c()}catch(r){console.error("保存失败:",r),m.msgError("保存失败")}},J=()=>{c()},X=()=>{f.value=f.value.subtract(1,"week"),c()},Z=()=>{f.value=f.value.add(1,"week"),c()},h=()=>{f.value=w().startOf("isoWeek"),c()},ee=()=>{o.value={doctorIds:[],dateRange:[],periods:["morning","afternoon"],weekdays:[1,2,3,4,5],status:1,quota:20,maxPatients:30,remark:""},Y.value=!0},te=async()=>{if(o.value.doctorIds.length===0){m.msgWarning("请选择医生");return}if(!o.value.dateRange||o.value.dateRange.length!==2){m.msgWarning("请选择日期范围");return}if(o.value.periods.length===0){m.msgWarning("请选择时段");return}if(o.value.weekdays.length===0){m.msgWarning("请选择星期");return}I.value=!0;try{const r=[],e=w(o.value.dateRange[0]),d=w(o.value.dateRange[1]);let n=e;for(;n.isBefore(d)||n.isSame(d,"day");){const s=n.day();o.value.weekdays.includes(s)&&o.value.doctorIds.forEach(v=>{o.value.periods.forEach(q=>{r.push({doctor_id:v,date:n.format("YYYY-MM-DD"),period:q,status:o.value.status,quota:o.value.status===1?o.value.quota:0,max_patients:o.value.status===1?o.value.maxPatients:0,remark:o.value.remark})})}),n=n.add(1,"day")}if(r.length===0){m.msgWarning("没有符合条件的排班数据");return}await Ne({rosters:r}),m.msgSuccess(`批量保存成功!共处理 ${r.length} 条记录`),Y.value=!1,await c()}catch(r){console.error("批量保存失败:",r),m.msgError("批量保存失败")}finally{I.value=!1}};return Me(()=>{H()}),(r,e)=>{const d=pe,n=me,s=ie,v=ne,q=ve,ae=fe,le=be,k=ce,F=_e,$=ke,P=ye,oe=xe,se=Ve,re=De,b=we,T=Ye,ue=ge;return _(),R("div",Ue,[a(le,{shadow:"never"},{header:t(()=>[p("div",Se,[e[19]||(e[19]=p("span",{class:"text-lg font-medium"},"医生排班管理",-1)),p("div",null,[a(d,{type:"success",onClick:ee},{default:t(()=>e[15]||(e[15]=[u("批量排班")])),_:1}),a(d,{onClick:X},{default:t(()=>e[16]||(e[16]=[u("上一周")])),_:1}),a(d,{onClick:Z},{default:t(()=>e[17]||(e[17]=[u("下一周")])),_:1}),a(d,{type:"primary",onClick:h},{default:t(()=>e[18]||(e[18]=[u("本周")])),_:1})])])]),default:t(()=>[p("div",We,[a(v,{inline:""},{default:t(()=>[a(s,{label:"医生"},{default:t(()=>[a(n,{modelValue:S.value,"onUpdate:modelValue":e[0]||(e[0]=l=>S.value=l),placeholder:"请输入医生姓名",clearable:"",style:{width:"200px"}},null,8,["modelValue"])]),_:1}),a(s,null,{default:t(()=>[a(d,{type:"primary",onClick:J},{default:t(()=>e[20]||(e[20]=[u("查询")])),_:1})]),_:1})]),_:1})]),p("div",Be,V(Q.value),1),Ie((_(),x(ae,{data:E.value,border:""},{default:t(()=>[a(q,{prop:"doctorName",label:"医生",width:"120",fixed:""}),(_(!0),R(O,null,j(K.value,l=>(_(),x(q,{key:l.date,label:l.label,"min-width":"150"},{default:t(({row:C})=>[p("div",Fe,[p("div",{class:"text-xs p-1 bg-gray-100 rounded cursor-pointer hover:bg-gray-200",onClick:de=>B(C,l.date,"morning")}," 上午: "+V(W(C,l.date,"morning")),9,Pe),p("div",{class:"text-xs p-1 bg-gray-100 rounded cursor-pointer hover:bg-gray-200",onClick:de=>B(C,l.date,"afternoon")}," 下午: "+V(W(C,l.date,"afternoon")),9,Te)])]),_:2},1032,["label"]))),128))]),_:1},8,["data"])),[[ue,M.value]])]),_:1}),a(P,{modelValue:D.value,"onUpdate:modelValue":e[4]||(e[4]=l=>D.value=l),title:"编辑排班",width:"500px"},{footer:t(()=>[a(d,{onClick:e[3]||(e[3]=l=>D.value=!1)},{default:t(()=>e[24]||(e[24]=[u("取消")])),_:1}),a(d,{type:"primary",onClick:A},{default:t(()=>e[25]||(e[25]=[u("保存")])),_:1})]),default:t(()=>[a(v,{model:i.value,"label-width":"100px"},{default:t(()=>[a(s,{label:"医生"},{default:t(()=>[p("span",null,V(i.value.doctorName),1)]),_:1}),a(s,{label:"日期"},{default:t(()=>[p("span",null,V(i.value.date),1)]),_:1}),a(s,{label:"时段"},{default:t(()=>[p("span",null,V(i.value.period==="morning"?"上午":"下午"),1)]),_:1}),a(s,{label:"状态"},{default:t(()=>[a(F,{modelValue:i.value.status,"onUpdate:modelValue":e[1]||(e[1]=l=>i.value.status=l)},{default:t(()=>[a(k,{label:1},{default:t(()=>e[21]||(e[21]=[u("出诊")])),_:1}),a(k,{label:2},{default:t(()=>e[22]||(e[22]=[u("停诊")])),_:1}),a(k,{label:3},{default:t(()=>e[23]||(e[23]=[u("休息")])),_:1})]),_:1},8,["modelValue"])]),_:1}),i.value.status===1?(_(),x(s,{key:0,label:"号源数"},{default:t(()=>[a($,{modelValue:i.value.quota,"onUpdate:modelValue":e[2]||(e[2]=l=>i.value.quota=l),min:0,max:100},null,8,["modelValue"])]),_:1})):N("",!0)]),_:1},8,["model"])]),_:1},8,["modelValue"]),a(P,{modelValue:Y.value,"onUpdate:modelValue":e[14]||(e[14]=l=>Y.value=l),title:"批量排班",width:"700px"},{footer:t(()=>[a(d,{onClick:e[13]||(e[13]=l=>Y.value=!1)},{default:t(()=>e[39]||(e[39]=[u("取消")])),_:1}),a(d,{type:"primary",onClick:te,loading:I.value},{default:t(()=>e[40]||(e[40]=[u("确定")])),_:1},8,["loading"])]),default:t(()=>[a(v,{model:o.value,"label-width":"100px"},{default:t(()=>[a(s,{label:"选择医生",required:""},{default:t(()=>[a(se,{modelValue:o.value.doctorIds,"onUpdate:modelValue":e[5]||(e[5]=l=>o.value.doctorIds=l),multiple:"",placeholder:"请选择医生",class:"w-full"},{default:t(()=>[(_(!0),R(O,null,j(E.value,l=>(_(),x(oe,{key:l.doctorId,label:l.doctorName,value:l.doctorId},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),a(s,{label:"日期范围",required:""},{default:t(()=>[a(re,{modelValue:o.value.dateRange,"onUpdate:modelValue":e[6]||(e[6]=l=>o.value.dateRange=l),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期",format:"YYYY-MM-DD","value-format":"YYYY-MM-DD",class:"w-full"},null,8,["modelValue"])]),_:1}),a(s,{label:"选择时段",required:""},{default:t(()=>[a(T,{modelValue:o.value.periods,"onUpdate:modelValue":e[7]||(e[7]=l=>o.value.periods=l)},{default:t(()=>[a(b,{label:"morning"},{default:t(()=>e[26]||(e[26]=[u("上午")])),_:1}),a(b,{label:"afternoon"},{default:t(()=>e[27]||(e[27]=[u("下午")])),_:1})]),_:1},8,["modelValue"])]),_:1}),a(s,{label:"选择星期",required:""},{default:t(()=>[a(T,{modelValue:o.value.weekdays,"onUpdate:modelValue":e[8]||(e[8]=l=>o.value.weekdays=l)},{default:t(()=>[a(b,{label:1},{default:t(()=>e[28]||(e[28]=[u("周一")])),_:1}),a(b,{label:2},{default:t(()=>e[29]||(e[29]=[u("周二")])),_:1}),a(b,{label:3},{default:t(()=>e[30]||(e[30]=[u("周三")])),_:1}),a(b,{label:4},{default:t(()=>e[31]||(e[31]=[u("周四")])),_:1}),a(b,{label:5},{default:t(()=>e[32]||(e[32]=[u("周五")])),_:1}),a(b,{label:6},{default:t(()=>e[33]||(e[33]=[u("周六")])),_:1}),a(b,{label:0},{default:t(()=>e[34]||(e[34]=[u("周日")])),_:1})]),_:1},8,["modelValue"])]),_:1}),a(s,{label:"排班状态",required:""},{default:t(()=>[a(F,{modelValue:o.value.status,"onUpdate:modelValue":e[9]||(e[9]=l=>o.value.status=l)},{default:t(()=>[a(k,{label:1},{default:t(()=>e[35]||(e[35]=[u("出诊")])),_:1}),a(k,{label:2},{default:t(()=>e[36]||(e[36]=[u("停诊")])),_:1}),a(k,{label:3},{default:t(()=>e[37]||(e[37]=[u("休息")])),_:1}),a(k,{label:4},{default:t(()=>e[38]||(e[38]=[u("请假")])),_:1})]),_:1},8,["modelValue"])]),_:1}),o.value.status===1?(_(),x(s,{key:0,label:"号源数"},{default:t(()=>[a($,{modelValue:o.value.quota,"onUpdate:modelValue":e[10]||(e[10]=l=>o.value.quota=l),min:0,max:100},null,8,["modelValue"])]),_:1})):N("",!0),o.value.status===1?(_(),x(s,{key:1,label:"最大接诊数"},{default:t(()=>[a($,{modelValue:o.value.maxPatients,"onUpdate:modelValue":e[11]||(e[11]=l=>o.value.maxPatients=l),min:0,max:100},null,8,["modelValue"])]),_:1})):N("",!0),a(s,{label:"备注"},{default:t(()=>[a(n,{modelValue:o.value.remark,"onUpdate:modelValue":e[12]||(e[12]=l=>o.value.remark=l),type:"textarea",rows:2,placeholder:"请输入备注"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])])}}}),Vt=qe(Oe,[["__scopeId","data-v-5737112e"]]);export{Vt as default};