2 lines
4.4 KiB
JavaScript
2 lines
4.4 KiB
JavaScript
import{o as j,ap as G,aq as U,q as c,r as m,v as b,D as u,b9 as K,b6 as O,s as v,bc as H,F as w,G as E,O as k,bf as J,L as B,T as Y,bB as Q,K as X,ae as R,P as Z,bg as ee,M as y,ba as ae,p as V,n as te}from"./.pnpm-BGZW0UGg.js";import{d,i as se}from"./dayjs-BnultS00.js";import{g as oe}from"./tcm-o2aZele6.js";import{r as le,g as ne}from"./doctor-CF92xvl4.js";import{i as g,_ as re}from"./index-CeIwrh_6.js";const ie={class:"paiban-container"},ce={class:"doctor-list"},de={key:2,class:"paiban-time-container"},ue={class:"date-selector"},me={key:0,class:"time-slots-container"},ve={class:"time-slots-grid"},fe=["onClick"],_e={class:"slot-time"},pe=j({__name:"paiban",setup(be){d.extend(se);const f=y(!1),h=y([]),_=y([]),l=y(0),r=y([]);let D=null,T=!1;const s=ae({date:"",selectedTime:""}),$=V(()=>{if(!l.value||r.value.length===0)return[];const e=[],o=["日","一","二","三","四","五","六"],t=d().startOf("day");for(const n of r.value){const i=d(n);if(i.isBefore(t))continue;const p=`${i.format("MM月DD日")} (${o[i.day()]})`;e.push({date:n,label:p})}return e}),I=V(()=>{if(!s.date||_.value.length===0)return[];const e=d().format("YYYY-MM-DD");if(!(s.date===e))return _.value;const t=d();return _.value.map(n=>{const i=d(`${s.date} ${n.time}`);return i.isBefore(t)||i.isSame(t,"minute")?{...n,available:!1}:n})}),L=async()=>{try{f.value=!0;const e=await oe();h.value=e||[],h.value.length>0&&!l.value&&(l.value=h.value[0].id,await M())}catch(e){console.error("加载医生列表失败:",e),g.msgError("加载医生列表失败")}finally{f.value=!1}},M=async()=>{s.selectedTime="",s.date="",_.value=[],r.value=[],l.value&&await F()},F=async()=>{if(l.value)try{f.value=!0;const e=d().format("YYYY-MM-DD"),o=d().add(6,"day").format("YYYY-MM-DD"),t=await le({doctor_id:l.value,start_date:e,end_date:o,status:1});if(t!=null&&t.lists&&t.lists.length>0){if(r.value=[...new Set(t.lists.map(n=>n.date))],r.value.sort(),await te(),r.value.length>0){const n=d().format("YYYY-MM-DD"),i=r.value.includes(n)?n:r.value[0];C(i)}}else r.value=[],g.msgWarning("该医生暂无排班")}catch(e){console.error("加载医生排班失败:",e),g.msgError("加载医生排班失败"),r.value=[]}finally{f.value=!1}},C=e=>{s.date=e,s.selectedTime="",l.value&&S()},S=async(e=!1)=>{if(!(!l.value||!s.date)){if(T){console.log("正在加载中,跳过本次请求");return}try{T=!0,e||(f.value=!0);const o=await ne({doctor_id:l.value,appointment_date:s.date,period:"all"});_.value=((o==null?void 0:o.slots)||[]).map(t=>({time:t.time,available:t.available,quota:t.available?1:0}))}catch(o){console.error("加载时间段失败:",o),e||g.msgError("加载时间段失败"),_.value=[]}finally{T=!1,e||(f.value=!1)}}},N=e=>{if(!e.available){g.msgWarning("该时间段不可预约");return}s.selectedTime=e.time},q=()=>{x(),D=window.setInterval(()=>{l.value&&s.date&&S(!0)},5e3)},x=()=>{D&&(clearInterval(D),D=null)};return G(()=>{L(),q()}),U(()=>{x()}),(e,o)=>{const t=J,n=H,i=O,p=Q,z=X,A=K,P=ee;return c(),m("div",ie,[b(P,{shadow:"never"},{header:u(()=>[...o[1]||(o[1]=[v("div",{class:"card-header"},[v("span",null,"医生排班管理")],-1)])]),default:u(()=>[b(A,{model:s,"label-width":"100px",class:"paiban-form"},{default:u(()=>[b(i,{label:"选择医生:"},{default:u(()=>[v("div",ce,[b(n,{modelValue:l.value,"onUpdate:modelValue":o[0]||(o[0]=a=>l.value=a),onChange:M},{default:u(()=>[(c(!0),m(w,null,E(h.value,a=>(c(),k(t,{key:a.id,value:a.id,class:"doctor-radio"},{default:u(()=>[B(Y(a.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"])])]),_:1}),b(i,{label:"排班时间:"},{default:u(()=>[l.value?l.value&&r.value.length===0?(c(),k(p,{key:1,description:"该医生暂无排班","image-size":80})):(c(),m("div",de,[v("div",ue,[(c(!0),m(w,null,E($.value,a=>(c(),k(z,{key:a.date,type:s.date===a.date?"primary":"",onClick:W=>C(a.date),class:"date-button"},{default:u(()=>[B(Y(a.label),1)]),_:2},1032,["type","onClick"]))),128))]),s.date?(c(),m("div",me,[v("div",ve,[(c(!0),m(w,null,E(I.value,a=>(c(),m("div",{key:a.time,class:R(["time-slot-item",{available:a.available,unavailable:!a.available,selected:s.selectedTime===a.time}]),onClick:W=>N(a)},[v("div",_e,Y(a.time),1),v("div",{class:R(["slot-status",{"status-available":a.available}])},Y(a.available?"可约":"已约"),3)],10,fe))),128))])])):Z("",!0)])):(c(),k(p,{key:0,description:"请先选择医生","image-size":80}))]),_:1})]),_:1},8,["model"])]),_:1})])}}}),Ye=re(pe,[["__scopeId","data-v-e4651276"]]);export{Ye as default};
|