Files
xuetang/server/public/admin/assets/PaibanPanel-CCN23eW6.js
T
2026-09-08 11:40:15 +08:00

2 lines
6.3 KiB
JavaScript

import{L as O,D as Q,B as K,G as X,I as Z,W as ee,i as te,J as ae}from"./element-plus-Bm2jcHo4.js";import{M as oe}from"./@element-plus/icons-vue-8Um_rfcd.js";import{d,g as se}from"./dayjs-DG77mNTn.js";import{g as le}from"./tcm-B2NgAvC0.js";import{r as re,g as ie}from"./doctor-D9mHw0eS.js";import{i as f,_ as ne}from"./index-CJJeyIXM.js";import{f as ce,b as de,d as me,aP as ue,ak as n,I as p,a as _,aN as c,J as g,F as E,ap as C,G as w,O as M,H as fe,A as V,n as ve}from"./@vue/runtime-core-C6bnekPw.js";import{Q as Y,o as A}from"./@vue/shared-mAAVTE9n.js";import{y as pe,n as y,r as _e}from"./@vue/reactivity-DiY1c2vO.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.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 ge={class:"paiban-container"},ye={class:"card-header"},he={class:"doctor-list"},be={key:2,class:"paiban-time-container"},De={class:"date-selector"},ke={key:0,class:"time-slots-container"},we={class:"time-slots-grid"},Ye=["onClick"],Te={class:"slot-time"},Ee=ce({__name:"PaibanPanel",setup(Ce,{expose:L}){d.extend(se);const m=y(!1),T=y(!1),h=y([]),v=y([]),l=y(0),i=y([]);let b=null,D=!1;const o=_e({date:"",selectedTime:""}),$=V(()=>{if(!l.value||i.value.length===0)return[];const e=[],t=["日","一","二","三","四","五","六"],a=d().startOf("day");for(const r of i.value){const u=d(r);u.isBefore(a)||e.push({date:r,label:`${u.format("MM月DD日")} (${t[u.day()]})`})}return e}),N=V(()=>{if(!o.date||v.value.length===0)return[];const e=d().format("YYYY-MM-DD");if(o.date!==e)return v.value;const t=d();return v.value.map(a=>{const r=d(`${o.date} ${a.time}`);return r.isBefore(t)||r.isSame(t,"minute")?{...a,available:!1}:a})}),S=async()=>{try{m.value=!0;const e=await le();h.value=e||[],h.value.length>0&&!l.value&&(l.value=h.value[0].id,await x())}catch(e){console.error("加载医生列表失败:",e),f.msgError("加载医生列表失败")}finally{m.value=!1}},x=async()=>{o.selectedTime="",o.date="",v.value=[],i.value=[],l.value&&await W()},W=async()=>{if(l.value)try{m.value=!0;const e=d().format("YYYY-MM-DD"),t=d().add(6,"day").format("YYYY-MM-DD"),a=await re({doctor_id:l.value,start_date:e,end_date:t,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 ve(),i.value.length>0){const r=d().format("YYYY-MM-DD"),u=i.value.includes(r)?r:i.value[0];B(u)}}else i.value=[],f.msgWarning("该医生暂无排班")}catch(e){console.error("加载医生排班失败:",e),f.msgError("加载医生排班失败"),i.value=[]}finally{m.value=!1}},B=e=>{o.date=e,o.selectedTime="",l.value&&k()},k=async(e=!1)=>{if(!(!l.value||!o.date)){if(D){console.log("正在加载中,跳过本次请求");return}try{D=!0,e||(m.value=!0);const t=await ie({doctor_id:l.value,appointment_date:o.date,period:"all"});v.value=((t==null?void 0:t.slots)||[]).map(a=>({time:a.time,available:a.available,hasAppointment:!!(a.has_appointment??a.available===!1),quota:a.available?1:0}))}catch(t){console.error("加载时间段失败:",t),e||f.msgError("加载时间段失败"),v.value=[]}finally{D=!1,e||(m.value=!1)}}},z=e=>{if(!e.available){f.msgWarning("该时间段不可预约");return}o.selectedTime=e.time},F=async()=>{if(!(!l.value||!o.date)){if(D){f.msgWarning("正在刷新中,请稍候");return}try{T.value=!0;const e=o.selectedTime;if(o.selectedTime="",await k(),e){const t=v.value.find(a=>a.time===e);t&&t.available&&(o.selectedTime=e)}f.msgSuccess("刷新成功")}catch(e){console.error("刷新失败:",e),f.msgError("刷新失败,请重试")}finally{T.value=!1}}},G=()=>{R(),b=window.setInterval(()=>{l.value&&o.date&&k(!0)},5e3)},R=()=>{b&&(clearInterval(b),b=null)};async function j(){if(l.value&&o.date){await k();return}await S()}return L({refresh:j,loading:m}),de(()=>{S(),G()}),me(()=>{R()}),(e,t)=>{const a=te,r=Z,u=X,I=K,P=ee,J=Q,U=ae,q=O;return ue((n(),p("div",ge,[_(U,{shadow:"never"},{header:c(()=>[g("div",ye,[t[2]||(t[2]=g("span",null,"医生排班管理",-1)),_(a,{text:"",type:"primary",size:"small",loading:T.value,disabled:!l.value||!o.date,onClick:F},{icon:c(()=>[_(pe(oe))]),default:c(()=>[t[1]||(t[1]=M(" 刷新 ",-1))]),_:1},8,["loading","disabled"])])]),default:c(()=>[_(J,{model:o,"label-width":"100px",class:"paiban-form"},{default:c(()=>[_(I,{label:"选择医生:"},{default:c(()=>[g("div",he,[_(u,{modelValue:l.value,"onUpdate:modelValue":t[0]||(t[0]=s=>l.value=s),onChange:x},{default:c(()=>[(n(!0),p(E,null,C(h.value,s=>(n(),w(r,{key:s.id,value:s.id,class:"doctor-radio"},{default:c(()=>[M(Y(s.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"])])]),_:1}),_(I,{label:"排班时间:"},{default:c(()=>[l.value?l.value&&i.value.length===0?(n(),w(P,{key:1,description:"该医生暂无排班","image-size":80})):(n(),p("div",be,[g("div",De,[(n(!0),p(E,null,C($.value,s=>(n(),w(a,{key:s.date,type:o.date===s.date?"primary":"",class:"date-button",onClick:H=>B(s.date)},{default:c(()=>[M(Y(s.label),1)]),_:2},1032,["type","onClick"]))),128))]),o.date?(n(),p("div",ke,[g("div",we,[(n(!0),p(E,null,C(N.value,s=>(n(),p("div",{key:s.time,class:A(["time-slot-item",{available:s.available,unavailable:!s.available,selected:o.selectedTime===s.time}]),onClick:H=>z(s)},[g("div",Te,Y(s.time),1),g("div",{class:A(["slot-status",{"status-available":s.available}])},Y(s.available?"可约":s.hasAppointment?"已约":"空号"),3)],10,Ye))),128))])])):fe("",!0)])):(n(),w(P,{key:0,description:"请先选择医生","image-size":80}))]),_:1})]),_:1},8,["model"])]),_:1})])),[[q,m.value]])}}}),ft=ne(Ee,[["__scopeId","data-v-8368484f"]]);export{ft as default};