Files
zyt/server/public/admin/assets/appointment-DGYrOVa6.js
T
2026-03-14 11:16:04 +08:00

2 lines
8.8 KiB
JavaScript

import{G as oe,D as le,C as ne,I as ie,a9 as se,i as re,F as me,L as de,e as pe}from"./element-plus-CW0okzRn.js";import{N as ue}from"./@element-plus/icons-vue-DBw-wZMr.js";import{d as f,g as ce}from"./dayjs-BOuxpn4j.js";import{l as ve}from"./tcm-GbnPtZVQ.js";import{c as fe,r as _e,g as ge,h as ye}from"./doctor-sw3VGOKk.js";import{f as p,d as be}from"./index-B-xN0T_Y.js";import{f as ke,ak as u,G as h,aN as l,aP as De,I as k,a as i,J as _,O as y,F as M,ap as x,H as Te,A as S,n as Ve}from"./@vue/runtime-core-D7eUgySO.js";import{Q as D,o as B}from"./@vue/shared-C75lBtbe.js";import{y as he,o as g,r as L}from"./@vue/reactivity-maRK_BBd.js";import"./@vue/runtime-dom-DVgibYoU.js";import"./nprogress-BpICrWuH.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"./vue-router-CJXI7XhX.js";import"./pinia-BhomUS5m.js";import"./axios-C80V62Fs.js";import"./lodash-Ct9_CZb9.js";import"./@vueuse/core-DCeljLnb.js";import"./@vueuse/shared-B444yVpD.js";import"./css-color-function-BVb6B1lA.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-ChYu0NfX.js";import"./clipboard-Bmfw2kIN.js";import"./echarts-DYKKs4Al.js";import"./tslib-BDyQ-Jie.js";import"./zrender-CTTuYiLF.js";import"./highlight.js-jaPyNblr.js";import"./@highlightjs/vue-plugin-ASXrwou_.js";const we={class:"text-gray-500"},Ce={class:"doctor-list"},Ye={key:2,class:"appointment-time-container"},Ee={class:"date-selector"},Me={key:0,class:"time-slots-container"},xe={class:"time-slots-header"},Se={class:"time-slots-grid"},Ie=["onClick"],$e={class:"slot-time"},ze={class:"drawer-footer"},Be=ke({__name:"appointment",emits:["success"],setup(Le,{expose:N,emit:R}){f.extend(ce);const T=g(!1),b=g(!1),Y=g(!1),E=g(!1),I=g([]),c=g([]),w=g(""),s=g(0),d=g([]),v=L({id:0,name:"",gender:"",age:0}),a=L({appointmentMethod:"time",appointmentType:"video",patientId:0,date:"",appointmentTime:"",remark:""}),U=S(()=>{if(!s.value||d.value.length===0)return[];const e=[],t=["日","一","二","三","四","五","六"],n=f().startOf("day");for(const r of d.value){const m=f(r);if(m.isBefore(n))continue;const V=`${m.format("MM月DD日")} (${t[m.day()]})`;e.push({date:r,label:V})}return e}),W=S(()=>{if(!a.date||c.value.length===0)return[];const e=f().format("YYYY-MM-DD");if(!(a.date===e))return c.value;const n=f();return c.value.map(r=>{const m=f(`${a.date} ${r.time}`);return m.isBefore(n)||m.isSame(n,"minute")?{...r,available:!1}:r})}),F=S(()=>s.value&&a.date&&a.appointmentTime),A=R,P=async e=>{T.value=!0,v.id=e.patient_id||e.id,v.name=e.patient_name||e.name,v.gender=e.gender_desc||e.gender,v.age=e.age||0,a.appointmentMethod="time",a.appointmentType="video",a.patientId=v.id,s.value=0,a.date="",a.appointmentTime="",a.remark="",c.value=[],d.value=[],w.value="",await j(),await G()},G=async()=>{try{const e=await fe({patient_id:v.id,status:3,page_no:1,page_size:1});if(e!=null&&e.lists&&e.lists.length>0){const t=e.lists[0];t.appointment_date&&t.appointment_time?w.value=`${t.appointment_date} ${t.appointment_time}`:t.appointment_date&&(w.value=t.appointment_date)}}catch(e){console.error("加载就诊记录失败:",e)}},j=async()=>{try{b.value=!0;const e=await ve();I.value=e||[]}catch(e){console.error("加载医生列表失败:",e),p.msgError("加载医生列表失败")}finally{b.value=!1}},q=()=>{s.value=0,a.date="",a.appointmentTime="",c.value=[]},H=async()=>{a.appointmentTime="",a.date="",c.value=[],d.value=[],s.value&&await J()},J=async()=>{if(s.value)try{b.value=!0;const e=f().format("YYYY-MM-DD"),t=f().add(6,"day").format("YYYY-MM-DD"),n=await _e({doctor_id:s.value,start_date:e,end_date:t,status:1});if(n!=null&&n.lists&&n.lists.length>0){if(d.value=[...new Set(n.lists.map(r=>r.date))],d.value.sort(),await Ve(),d.value.length>0){const r=f().format("YYYY-MM-DD"),m=d.value.includes(r)?r:d.value[0];$(m)}}else d.value=[],p.msgWarning("该医生暂无排班")}catch(e){console.error("加载医生排班失败:",e),p.msgError("加载医生排班失败"),d.value=[]}finally{b.value=!1}},$=e=>{a.date=e,a.appointmentTime="",s.value&&z()},z=async()=>{if(!(!s.value||!a.date))try{b.value=!0;const e=await ge({doctor_id:s.value,appointment_date:a.date,period:"all"});console.log("时间段数据:",e),c.value=((e==null?void 0:e.slots)||[]).map(t=>({time:t.time,available:t.available,quota:t.available?1:0})),console.log("处理后的时间段:",c.value)}catch(e){console.error("加载时间段失败:",e),p.msgError("加载时间段失败"),c.value=[]}finally{b.value=!1}},O=e=>{if(!e.available){p.msgWarning("该时间段不可预约");return}a.appointmentTime=e.time},Q=async()=>{if(!(!s.value||!a.date))try{E.value=!0;const e=a.appointmentTime;if(a.appointmentTime="",await z(),e){const t=c.value.find(n=>n.time===e);t&&t.available&&(a.appointmentTime=e)}p.msgSuccess("刷新成功")}catch(e){console.error("刷新失败:",e),p.msgError("刷新失败,请重试")}finally{E.value=!1}},K=async()=>{if(!s.value){p.msgWarning("请选择医生");return}if(!a.date){p.msgWarning("请选择日期");return}if(!a.appointmentTime){p.msgWarning("请选择预约时间");return}try{Y.value=!0;const e={patient_id:v.id,doctor_id:s.value,appointment_date:a.date,period:"all",appointment_time:a.appointmentTime,appointment_type:a.appointmentType,remark:a.remark};console.log("提交预约参数:",e),await ye(e),p.msgSuccess("预约成功"),T.value=!1,A("success")}catch(e){console.error("预约失败:",e),p.msgError("预约失败")}finally{Y.value=!1}};return N({open:P}),(e,t)=>{const n=le,r=ie,m=ne,V=se,C=re,X=me,Z=oe,ee=pe,te=de;return u(),h(ee,{modelValue:T.value,"onUpdate:modelValue":t[6]||(t[6]=o=>T.value=o),title:"预约问诊",direction:"rtl",size:"60%","close-on-click-modal":!1,"z-index":2e3},{footer:l(()=>[_("div",ze,[i(C,{onClick:t[5]||(t[5]=o=>T.value=!1)},{default:l(()=>[...t[11]||(t[11]=[y("取消",-1)])]),_:1}),i(C,{type:"primary",onClick:K,loading:Y.value,disabled:!F.value},{default:l(()=>[...t[12]||(t[12]=[y(" 确定 ",-1)])]),_:1},8,["loading","disabled"])])]),default:l(()=>[De((u(),k("div",null,[i(Z,{model:a,"label-width":"100px",class:"appointment-form"},{default:l(()=>[i(n,{label:"上次就诊:"},{default:l(()=>[_("span",we,D(w.value||"无就诊记录"),1)]),_:1}),i(n,{label:"预约方式:"},{default:l(()=>[i(m,{modelValue:a.appointmentMethod,"onUpdate:modelValue":t[0]||(t[0]=o=>a.appointmentMethod=o),onChange:q},{default:l(()=>[i(r,{value:"time"},{default:l(()=>[...t[7]||(t[7]=[y("选择时段预约有专医生",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),i(n,{label:"预约类型:"},{default:l(()=>[i(m,{modelValue:a.appointmentType,"onUpdate:modelValue":t[1]||(t[1]=o=>a.appointmentType=o)},{default:l(()=>[i(r,{value:"video"},{default:l(()=>[...t[8]||(t[8]=[y("视频问诊",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),i(n,{label:"选择患者:"},{default:l(()=>[i(m,{modelValue:a.patientId,"onUpdate:modelValue":t[2]||(t[2]=o=>a.patientId=o)},{default:l(()=>[i(r,{value:v.id},{default:l(()=>[y(D(v.name),1)]),_:1},8,["value"])]),_:1},8,["modelValue"])]),_:1}),i(n,{label:"预约医生:"},{default:l(()=>[_("div",Ce,[i(m,{modelValue:s.value,"onUpdate:modelValue":t[3]||(t[3]=o=>s.value=o),onChange:H},{default:l(()=>[(u(!0),k(M,null,x(I.value,o=>(u(),h(r,{key:o.id,value:o.id,class:"doctor-radio"},{default:l(()=>[y(D(o.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"])])]),_:1}),i(n,{label:"预约时间:"},{default:l(()=>[s.value?s.value&&d.value.length===0?(u(),h(V,{key:1,description:"该医生暂无排班","image-size":80})):(u(),k("div",Ye,[_("div",Ee,[(u(!0),k(M,null,x(U.value,o=>(u(),h(C,{key:o.date,type:a.date===o.date?"primary":"",onClick:ae=>$(o.date),class:"date-button"},{default:l(()=>[y(D(o.label),1)]),_:2},1032,["type","onClick"]))),128))]),a.date?(u(),k("div",Me,[_("div",xe,[t[10]||(t[10]=_("span",{class:"header-title"},"可预约时段",-1)),i(C,{text:"",type:"primary",size:"small",loading:E.value,onClick:Q},{icon:l(()=>[i(he(ue))]),default:l(()=>[t[9]||(t[9]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),_("div",Se,[(u(!0),k(M,null,x(W.value,o=>(u(),k("div",{key:o.time,class:B(["time-slot-item",{available:o.available,unavailable:!o.available,selected:a.appointmentTime===o.time}]),onClick:ae=>O(o)},[_("div",$e,D(o.time),1),_("div",{class:B(["slot-status",{"status-available":o.available}])},D(o.available?"可约":"已约"),3)],10,Ie))),128))])])):Te("",!0)])):(u(),h(V,{key:0,description:"请先选择医生","image-size":80}))]),_:1}),i(n,{label:"备注:"},{default:l(()=>[i(X,{modelValue:a.remark,"onUpdate:modelValue":t[4]||(t[4]=o=>a.remark=o),type:"textarea",rows:2,placeholder:"请输入备注信息"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])),[[te,b.value]])]),_:1},8,["modelValue"])}}}),kt=be(Be,[["__scopeId","data-v-f3384773"]]);export{kt as default};