Files
zyt/server/public/admin/assets/paiban-CeOT9dF9.js
T
2026-07-16 09:43:07 +08:00

2 lines
5.5 KiB
JavaScript

import{D as J,B as P,G as U,I as q,W as H,i as O,J as Q}from"./element-plus-Bolc0EfP.js";import{d,g as K}from"./dayjs-DG77mNTn.js";import{g as X}from"./tcm-B2eDN42y.js";import{r as Z,g as ee}from"./doctor-CwO7n1kw.js";import{i as y,_ as te}from"./index-CzSP4TPL.js";import{f as ae,b as oe,d as se,ak as c,I as u,a as g,aN as m,J as p,F as T,ap as E,G as k,O as B,H as le,A as I,n as re}from"./@vue/runtime-core-C6bnekPw.js";import{Q as Y,o as R}from"./@vue/shared-mAAVTE9n.js";import{n as b,r as ie}from"./@vue/reactivity-DiY1c2vO.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.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-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.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-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const ne={class:"paiban-container"},ce={class:"doctor-list"},de={key:2,class:"paiban-time-container"},me={class:"date-selector"},ue={key:0,class:"time-slots-container"},pe={class:"time-slots-grid"},ve=["onClick"],fe={class:"slot-time"},_e=ae({__name:"paiban",setup(ye){d.extend(K);const v=b(!1),h=b([]),f=b([]),l=b(0),i=b([]);let D=null,w=!1;const o=ie({date:"",selectedTime:""}),V=I(()=>{if(!l.value||i.value.length===0)return[];const e=[],s=["日","一","二","三","四","五","六"],a=d().startOf("day");for(const r of i.value){const n=d(r);if(n.isBefore(a))continue;const _=`${n.format("MM月DD日")} (${s[n.day()]})`;e.push({date:r,label:_})}return e}),$=I(()=>{if(!o.date||f.value.length===0)return[];const e=d().format("YYYY-MM-DD");if(!(o.date===e))return f.value;const a=d();return f.value.map(r=>{const n=d(`${o.date} ${r.time}`);return n.isBefore(a)||n.isSame(a,"minute")?{...r,available:!1}:r})}),N=async()=>{try{v.value=!0;const e=await X();h.value=e||[],h.value.length>0&&!l.value&&(l.value=h.value[0].id,await C())}catch(e){console.error("加载医生列表失败:",e),y.msgError("加载医生列表失败")}finally{v.value=!1}},C=async()=>{o.selectedTime="",o.date="",f.value=[],i.value=[],l.value&&await A()},A=async()=>{if(l.value)try{v.value=!0;const e=d().format("YYYY-MM-DD"),s=d().add(6,"day").format("YYYY-MM-DD"),a=await Z({doctor_id:l.value,start_date:e,end_date:s,status:1});if(a!=null&&a.lists&&a.lists.length>0){if(i.value=[...new Set(a.lists.map(r=>r.date))],i.value.sort(),await re(),i.value.length>0){const r=d().format("YYYY-MM-DD"),n=i.value.includes(r)?r:i.value[0];M(n)}}else i.value=[],y.msgWarning("该医生暂无排班")}catch(e){console.error("加载医生排班失败:",e),y.msgError("加载医生排班失败"),i.value=[]}finally{v.value=!1}},M=e=>{o.date=e,o.selectedTime="",l.value&&S()},S=async(e=!1)=>{if(!(!l.value||!o.date)){if(w){console.log("正在加载中,跳过本次请求");return}try{w=!0,e||(v.value=!0);const s=await ee({doctor_id:l.value,appointment_date:o.date,period:"all"});f.value=((s==null?void 0:s.slots)||[]).map(a=>({time:a.time,available:a.available,quota:a.available?1:0}))}catch(s){console.error("加载时间段失败:",s),e||y.msgError("加载时间段失败"),f.value=[]}finally{w=!1,e||(v.value=!1)}}},F=e=>{if(!e.available){y.msgWarning("该时间段不可预约");return}o.selectedTime=e.time},L=()=>{x(),D=window.setInterval(()=>{l.value&&o.date&&S(!0)},5e3)},x=()=>{D&&(clearInterval(D),D=null)};return oe(()=>{N(),L()}),se(()=>{x()}),(e,s)=>{const a=q,r=U,n=P,_=H,W=O,z=J,G=Q;return c(),u("div",ne,[g(G,{shadow:"never"},{header:m(()=>[...s[1]||(s[1]=[p("div",{class:"card-header"},[p("span",null,"医生排班管理")],-1)])]),default:m(()=>[g(z,{model:o,"label-width":"100px",class:"paiban-form"},{default:m(()=>[g(n,{label:"选择医生:"},{default:m(()=>[p("div",ce,[g(r,{modelValue:l.value,"onUpdate:modelValue":s[0]||(s[0]=t=>l.value=t),onChange:C},{default:m(()=>[(c(!0),u(T,null,E(h.value,t=>(c(),k(a,{key:t.id,value:t.id,class:"doctor-radio"},{default:m(()=>[B(Y(t.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"])])]),_:1}),g(n,{label:"排班时间:"},{default:m(()=>[l.value?l.value&&i.value.length===0?(c(),k(_,{key:1,description:"该医生暂无排班","image-size":80})):(c(),u("div",de,[p("div",me,[(c(!0),u(T,null,E(V.value,t=>(c(),k(W,{key:t.date,type:o.date===t.date?"primary":"",onClick:j=>M(t.date),class:"date-button"},{default:m(()=>[B(Y(t.label),1)]),_:2},1032,["type","onClick"]))),128))]),o.date?(c(),u("div",ue,[p("div",pe,[(c(!0),u(T,null,E($.value,t=>(c(),u("div",{key:t.time,class:R(["time-slot-item",{available:t.available,unavailable:!t.available,selected:o.selectedTime===t.time}]),onClick:j=>F(t)},[p("div",fe,Y(t.time),1),p("div",{class:R(["slot-status",{"status-available":t.available}])},Y(t.available?"可约":"已约"),3)],10,ve))),128))])])):le("",!0)])):(c(),k(_,{key:0,description:"请先选择医生","image-size":80}))]),_:1})]),_:1},8,["model"])]),_:1})])}}}),ot=te(_e,[["__scopeId","data-v-79f98e7f"]]);export{ot as default};