2 lines
12 KiB
JavaScript
2 lines
12 KiB
JavaScript
import{G as ue,D as de,F as ne,i as ie,M as me,N as pe,L as fe,J as ve,C as be,I as ge,h as _e,Y as ke,P as ye,Q as ce,X as Ve,a4 as xe,H as De}from"./element-plus-CFxTwCZ2.js";import{d as Y,g as Ye}from"./dayjs-DG77mNTn.js";import{f as m,d as we}from"./index-DPvLmXoI.js";import{a as Ee}from"./admin-DCiWMcfF.js";import{r as qe,a as Ce,b as Me}from"./doctor-0j0XOuMq.js";import{f as O,b as Ie,ak as _,I as $,a,aN as t,J as p,O as u,aP as $e,G as c,F,ap as T,H as N,A as L}from"./@vue/runtime-core-C0pg79pw.js";import{o as b}from"./@vue/reactivity-BIbyPIZJ.js";import{Q as V}from"./@vue/shared-mAAVTE9n.js";import"./@vue/runtime-dom-iFk_KP8y.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-cboVPb4D.js";import"./lodash-es-BADexyn7.js";import"./@popperjs/core-C5az9QE8.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-CYz6RFzi.js";import"./pinia-Ba_jX6-d.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-DIKi2bJB.js";import"./@vueuse/shared-D8934tfB.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-DYKKs4Al.js";import"./tslib-BDyQ-Jie.js";import"./zrender-CTTuYiLF.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-BVMzZUvF.js";const Ne={class:"doctor-roster p-4"},Re={class:"flex justify-between items-center"},Ue={class:"mb-4"},We={class:"text-center mb-4 text-gray-600"},Se={class:"space-y-1"},Be=["onClick"],Pe=["onClick"],Fe=O({name:"doctorRoster"}),Te=O({...Fe,setup(Le){Y.extend(Ye);const R=b(""),f=b(Y().startOf("isoWeek")),x=b(!1),C=b(!1),G=b([]),D=b(!1),M=b(!1),o=b({doctorIds:[],dateRange:[],periods:["morning","afternoon"],weekdays:[1,2,3,4,5],status:1,quota:20,maxPatients:30,remark:""}),j=async()=>{try{const r=await Ee({page_no:1,page_size:1e3,role_id:1});G.value=(r==null?void 0:r.lists)||[],w.value=((r==null?void 0:r.lists)||[]).map(e=>({doctorId:e.id,doctorName:e.name||e.account,rosters:{}})),await k()}catch(r){console.error("加载医生列表失败:",r),m.msgError("加载医生列表失败")}},k=async()=>{C.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 qe(r),d=(e==null?void 0:e.lists)||[];w.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{C.value=!1}},H=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}),J=L(()=>{const r=f.value.format("YYYY-MM-DD"),e=f.value.add(6,"day").format("YYYY-MM-DD");return`${r} 至 ${e}`}),w=b([]),i=b({id:null,doctorId:0,doctorName:"",date:"",period:"morning",status:1,quota:20}),U=(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]},W=(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},x.value=!0},Q=async()=>{try{await Ce({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("保存成功"),x.value=!1,await k()}catch(r){console.error("保存失败:",r),m.msgError("保存失败")}},z=()=>{k()},A=()=>{f.value=f.value.subtract(1,"week"),k()},X=()=>{f.value=f.value.add(1,"week"),k()},K=()=>{f.value=Y().startOf("isoWeek"),k()},Z=()=>{o.value={doctorIds:[],dateRange:[],periods:["morning","afternoon"],weekdays:[1,2,3,4,5],status:1,quota:20,maxPatients:30,remark:""},D.value=!0},h=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}M.value=!0;try{const r=[],e=Y(o.value.dateRange[0]),d=Y(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(E=>{r.push({doctor_id:v,date:n.format("YYYY-MM-DD"),period:E,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 Me({rosters:r}),m.msgSuccess(`批量保存成功!共处理 ${r.length} 条记录`),D.value=!1,await k()}catch(r){console.error("批量保存失败:",r),m.msgError("批量保存失败")}finally{M.value=!1}};return Ie(()=>{j()}),(r,e)=>{const d=ie,n=ne,s=de,v=ue,E=pe,ee=me,te=ve,y=ge,S=be,I=_e,B=ke,ae=ce,le=ye,oe=Ve,g=De,P=xe,se=fe;return _(),$("div",Ne,[a(te,{shadow:"never"},{header:t(()=>[p("div",Re,[e[19]||(e[19]=p("span",{class:"text-lg font-medium"},"医生排班管理",-1)),p("div",null,[a(d,{type:"success",onClick:Z},{default:t(()=>[...e[15]||(e[15]=[u("批量排班",-1)])]),_:1}),a(d,{onClick:A},{default:t(()=>[...e[16]||(e[16]=[u("上一周",-1)])]),_:1}),a(d,{onClick:X},{default:t(()=>[...e[17]||(e[17]=[u("下一周",-1)])]),_:1}),a(d,{type:"primary",onClick:K},{default:t(()=>[...e[18]||(e[18]=[u("本周",-1)])]),_:1})])])]),default:t(()=>[p("div",Ue,[a(v,{inline:""},{default:t(()=>[a(s,{label:"医生"},{default:t(()=>[a(n,{modelValue:R.value,"onUpdate:modelValue":e[0]||(e[0]=l=>R.value=l),placeholder:"请输入医生姓名",clearable:"",style:{width:"200px"}},null,8,["modelValue"])]),_:1}),a(s,null,{default:t(()=>[a(d,{type:"primary",onClick:z},{default:t(()=>[...e[20]||(e[20]=[u("查询",-1)])]),_:1})]),_:1})]),_:1})]),p("div",We,V(J.value),1),$e((_(),c(ee,{data:w.value,border:""},{default:t(()=>[a(E,{prop:"doctorName",label:"医生",width:"120",fixed:""}),(_(!0),$(F,null,T(H.value,l=>(_(),c(E,{key:l.date,label:l.label,"min-width":"150"},{default:t(({row:q})=>[p("div",Se,[p("div",{class:"text-xs p-1 bg-gray-100 rounded cursor-pointer hover:bg-gray-200",onClick:re=>W(q,l.date,"morning")}," 上午: "+V(U(q,l.date,"morning")),9,Be),p("div",{class:"text-xs p-1 bg-gray-100 rounded cursor-pointer hover:bg-gray-200",onClick:re=>W(q,l.date,"afternoon")}," 下午: "+V(U(q,l.date,"afternoon")),9,Pe)])]),_:2},1032,["label"]))),128))]),_:1},8,["data"])),[[se,C.value]])]),_:1}),a(B,{modelValue:x.value,"onUpdate:modelValue":e[4]||(e[4]=l=>x.value=l),title:"编辑排班",width:"500px"},{footer:t(()=>[a(d,{onClick:e[3]||(e[3]=l=>x.value=!1)},{default:t(()=>[...e[24]||(e[24]=[u("取消",-1)])]),_:1}),a(d,{type:"primary",onClick:Q},{default:t(()=>[...e[25]||(e[25]=[u("保存",-1)])]),_: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(S,{modelValue:i.value.status,"onUpdate:modelValue":e[1]||(e[1]=l=>i.value.status=l)},{default:t(()=>[a(y,{label:1},{default:t(()=>[...e[21]||(e[21]=[u("出诊",-1)])]),_:1}),a(y,{label:2},{default:t(()=>[...e[22]||(e[22]=[u("停诊",-1)])]),_:1}),a(y,{label:3},{default:t(()=>[...e[23]||(e[23]=[u("休息",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),i.value.status===1?(_(),c(s,{key:0,label:"号源数"},{default:t(()=>[a(I,{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(B,{modelValue:D.value,"onUpdate:modelValue":e[14]||(e[14]=l=>D.value=l),title:"批量排班",width:"700px"},{footer:t(()=>[a(d,{onClick:e[13]||(e[13]=l=>D.value=!1)},{default:t(()=>[...e[39]||(e[39]=[u("取消",-1)])]),_:1}),a(d,{type:"primary",onClick:h,loading:M.value},{default:t(()=>[...e[40]||(e[40]=[u("确定",-1)])]),_:1},8,["loading"])]),default:t(()=>[a(v,{model:o.value,"label-width":"100px"},{default:t(()=>[a(s,{label:"选择医生",required:""},{default:t(()=>[a(le,{modelValue:o.value.doctorIds,"onUpdate:modelValue":e[5]||(e[5]=l=>o.value.doctorIds=l),multiple:"",placeholder:"请选择医生",class:"w-full"},{default:t(()=>[(_(!0),$(F,null,T(w.value,l=>(_(),c(ae,{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(oe,{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(P,{modelValue:o.value.periods,"onUpdate:modelValue":e[7]||(e[7]=l=>o.value.periods=l)},{default:t(()=>[a(g,{label:"morning"},{default:t(()=>[...e[26]||(e[26]=[u("上午",-1)])]),_:1}),a(g,{label:"afternoon"},{default:t(()=>[...e[27]||(e[27]=[u("下午",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),a(s,{label:"选择星期",required:""},{default:t(()=>[a(P,{modelValue:o.value.weekdays,"onUpdate:modelValue":e[8]||(e[8]=l=>o.value.weekdays=l)},{default:t(()=>[a(g,{label:1},{default:t(()=>[...e[28]||(e[28]=[u("周一",-1)])]),_:1}),a(g,{label:2},{default:t(()=>[...e[29]||(e[29]=[u("周二",-1)])]),_:1}),a(g,{label:3},{default:t(()=>[...e[30]||(e[30]=[u("周三",-1)])]),_:1}),a(g,{label:4},{default:t(()=>[...e[31]||(e[31]=[u("周四",-1)])]),_:1}),a(g,{label:5},{default:t(()=>[...e[32]||(e[32]=[u("周五",-1)])]),_:1}),a(g,{label:6},{default:t(()=>[...e[33]||(e[33]=[u("周六",-1)])]),_:1}),a(g,{label:0},{default:t(()=>[...e[34]||(e[34]=[u("周日",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),a(s,{label:"排班状态",required:""},{default:t(()=>[a(S,{modelValue:o.value.status,"onUpdate:modelValue":e[9]||(e[9]=l=>o.value.status=l)},{default:t(()=>[a(y,{label:1},{default:t(()=>[...e[35]||(e[35]=[u("出诊",-1)])]),_:1}),a(y,{label:2},{default:t(()=>[...e[36]||(e[36]=[u("停诊",-1)])]),_:1}),a(y,{label:3},{default:t(()=>[...e[37]||(e[37]=[u("休息",-1)])]),_:1}),a(y,{label:4},{default:t(()=>[...e[38]||(e[38]=[u("请假",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),o.value.status===1?(_(),c(s,{key:0,label:"号源数"},{default:t(()=>[a(I,{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?(_(),c(s,{key:1,label:"最大接诊数"},{default:t(()=>[a(I,{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"])])}}}),qt=we(Te,[["__scopeId","data-v-5737112e"]]);export{qt as default};
|