Files
zyt/server/public/admin/assets/appointment-Al0d5Usq.js
T
2026-05-05 13:41:37 +08:00

2 lines
11 KiB
JavaScript

import{K as _e,D as ye,B as ge,G as be,I as ke,P as he,Q as De,R as Te,i as we,C as Ve,L as Ye,e as Me}from"./element-plus-B7Dx6hR2.js";import{K as Ce}from"./@element-plus/icons-vue-C25ce6PD.js";import{d as p,g as Ee}from"./dayjs-DG77mNTn.js";import{g as Se}from"./tcm-CPRxlmvb.js";import{m as xe,i as c,_ as Be}from"./index-Bx_nF8uU.js";import{c as N,r as Ie,g as $e,l as ze}from"./doctor-dmIVTvQP.js";import{f as We,ak as m,G as w,aN as l,aP as Ae,I as k,H as F,a as s,J as g,O as h,F as S,ap as x,A as V,n as Le}from"./@vue/runtime-core-tF_2qJHK.js";import{Q as Y,o as O}from"./@vue/shared-mAAVTE9n.js";import{y as Re,n as v,r as P}from"./@vue/reactivity-BmZ-20sQ.js";import"./@vue/runtime-dom-CEiKlVMn.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-BjeWxBI0.js";import"./pinia-CTWOnonq.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-Da2f2eD_.js";import"./@vueuse/shared-Bl-RnC0s.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-yVHyDRAS.js";import"./tslib-BDyQ-Jie.js";import"./zrender-C0YiHEZX.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-Bm7NQW9r.js";const Ue={class:"text-gray-500"},Ne={class:"doctor-list"},Fe={key:2,class:"appointment-time-container"},Oe={class:"date-selector"},Pe={key:0,class:"time-slots-container"},Ge={class:"time-slots-header"},je={class:"time-slots-grid"},qe=["onClick"],He={class:"slot-time"},Ke={class:"drawer-footer"},Qe=We({__name:"appointment",emits:["success"],setup(Je,{expose:G,emit:j}){p.extend(Ee);const M=v(!1),D=v(!1),B=v(!1),I=v(!1),W=v([]),f=v([]),C=v(""),d=v(0),u=v([]),$=v([]),T=v(!1),_=P({id:0,name:"",gender:"",age:0}),a=P({appointmentMethod:"time",appointmentType:"video",patientId:0,date:"",appointmentTime:"",remark:"",channel_source:""}),q=V(()=>{if(!d.value||u.value.length===0)return[];const e=[],t=["日","一","二","三","四","五","六"],i=p().startOf("day");for(const n of u.value){const r=p(n);if(r.isBefore(i))continue;const y=`${r.format("MM月DD日")} (${t[r.day()]})`;e.push({date:n,label:y})}return e}),H=V(()=>{if(!a.date||f.value.length===0)return[];const e=p().format("YYYY-MM-DD");if(!(a.date===e))return f.value;const i=p();return f.value.map(n=>{const r=p(`${a.date} ${n.time}`);return r.isBefore(i)||r.isSame(i,"minute")?{...n,available:!1}:n})}),K=()=>p().format("YYYY-MM-DD"),z=V(()=>a.date===K()),Q=V(()=>T.value?z.value?"该患者今日已有挂号(已预约或已过号),不能重复预约今天,请改选其他日期。":"该患者今日已有挂号记录;可为患者预约其他日期的时段。":""),A=V(()=>T.value&&z.value),J=V(()=>!A.value&&d.value&&a.date&&a.appointmentTime&&!!a.channel_source),X=j,Z=async e=>{M.value=!0,_.id=e.patient_id||e.id,_.name=e.patient_name||e.name,_.gender=e.gender_desc||e.gender,_.age=e.age||0,a.appointmentMethod="time",a.appointmentType="video",a.patientId=_.id,d.value=0,a.date="",a.appointmentTime="",a.remark="",a.channel_source="",f.value=[],u.value=[],C.value="",T.value=!1,await ae(),await oe(),await te(),await ee()},ee=async()=>{T.value=!1;const e=_.id;if(!e)return;const t=p().format("YYYY-MM-DD");try{const i=await N({patient_id:e,start_date:t,end_date:t,page_no:1,page_size:50}),r=((i==null?void 0:i.lists)||[]).find(y=>{const b=Number(y.status);return b===1||b===4});T.value=!!r}catch(i){console.error("检查今日挂号状态失败:",i)}},te=async()=>{try{const e=await N({patient_id:_.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?C.value=`${t.appointment_date} ${t.appointment_time}`:t.appointment_date&&(C.value=t.appointment_date)}}catch(e){console.error("加载就诊记录失败:",e)}},ae=async()=>{try{const e=await xe({type:"channels"});$.value=((e==null?void 0:e.channels)||[]).filter(t=>t.status!==0)}catch(e){console.error("加载渠道来源失败:",e),$.value=[]}},oe=async()=>{try{D.value=!0;const e=await Se();W.value=e||[]}catch(e){console.error("加载医生列表失败:",e),c.msgError("加载医生列表失败")}finally{D.value=!1}},le=()=>{d.value=0,a.date="",a.appointmentTime="",f.value=[]},ne=async()=>{a.appointmentTime="",a.date="",f.value=[],u.value=[],d.value&&await se()},se=async()=>{if(d.value)try{D.value=!0;const e=p().format("YYYY-MM-DD"),t=p().add(6,"day").format("YYYY-MM-DD"),i=await Ie({doctor_id:d.value,start_date:e,end_date:t,status:1});if(i!=null&&i.lists&&i.lists.length>0){if(u.value=[...new Set(i.lists.map(n=>n.date))],u.value.sort(),await Le(),u.value.length>0){const n=p().format("YYYY-MM-DD");let r=u.value.includes(n)?n:u.value[0];T.value&&r===n&&(r=u.value.find(b=>b>n)??u.value.find(b=>b!==n)??r),L(r)}}else u.value=[],c.msgWarning("该医生暂无排班")}catch(e){console.error("加载医生排班失败:",e),c.msgError("加载医生排班失败"),u.value=[]}finally{D.value=!1}},L=e=>{a.date=e,a.appointmentTime="",d.value&&R()},R=async()=>{if(!(!d.value||!a.date))try{D.value=!0;const e=await $e({doctor_id:d.value,appointment_date:a.date,period:"all"});console.log("时间段数据:",e),f.value=((e==null?void 0:e.slots)||[]).map(t=>({time:t.time,available:t.available,quota:t.available?1:0})),console.log("处理后的时间段:",f.value)}catch(e){console.error("加载时间段失败:",e),c.msgError("加载时间段失败"),f.value=[]}finally{D.value=!1}},ie=e=>{if(!e.available){c.msgWarning("该时间段不可预约");return}a.appointmentTime=e.time},re=async()=>{if(!(!d.value||!a.date))try{I.value=!0;const e=a.appointmentTime;if(a.appointmentTime="",await R(),e){const t=f.value.find(i=>i.time===e);t&&t.available&&(a.appointmentTime=e)}c.msgSuccess("刷新成功")}catch(e){console.error("刷新失败:",e),c.msgError("刷新失败,请重试")}finally{I.value=!1}},de=async()=>{if(!d.value){c.msgWarning("请选择医生");return}if(!a.date){c.msgWarning("请选择日期");return}if(!a.appointmentTime){c.msgWarning("请选择预约时间");return}if(!a.channel_source){c.msgWarning("请选择渠道来源");return}if(A.value){c.msgWarning("该患者今日已有挂号(已预约或已过号),不能重复预约今天,请改选其他日期。");return}try{B.value=!0;const e={patient_id:_.id,doctor_id:d.value,appointment_date:a.date,period:"all",appointment_time:a.appointmentTime,appointment_type:a.appointmentType,remark:a.remark,channel_source:a.channel_source};console.log("提交预约参数:",e),await ze(e),c.msgSuccess("预约成功"),M.value=!1,X("success")}catch(e){console.error("预约失败:",e),c.msgError("预约失败")}finally{B.value=!1}};return G({open:Z}),(e,t)=>{const i=_e,n=ge,r=ke,y=be,b=De,me=he,U=Te,E=we,ue=Ve,ce=ye,pe=Me,ve=Ye;return m(),w(pe,{modelValue:M.value,"onUpdate:modelValue":t[7]||(t[7]=o=>M.value=o),title:"预约问诊",direction:"rtl",size:"60%","close-on-click-modal":!1,"z-index":2e3},{footer:l(()=>[g("div",Ke,[s(E,{onClick:t[6]||(t[6]=o=>M.value=!1)},{default:l(()=>[...t[12]||(t[12]=[h("取消",-1)])]),_:1}),s(E,{type:"primary",onClick:de,loading:B.value,disabled:!J.value},{default:l(()=>[...t[13]||(t[13]=[h(" 确定 ",-1)])]),_:1},8,["loading","disabled"])])]),default:l(()=>[Ae((m(),k("div",null,[T.value?(m(),w(i,{key:0,type:z.value?"warning":"info",closable:!1,"show-icon":"",class:"today-block-alert",title:Q.value},null,8,["type","title"])):F("",!0),s(ce,{model:a,"label-width":"100px",class:"appointment-form"},{default:l(()=>[s(n,{label:"上次就诊:"},{default:l(()=>[g("span",Ue,Y(C.value||"无就诊记录"),1)]),_:1}),s(n,{label:"预约方式:"},{default:l(()=>[s(y,{modelValue:a.appointmentMethod,"onUpdate:modelValue":t[0]||(t[0]=o=>a.appointmentMethod=o),onChange:le},{default:l(()=>[s(r,{value:"time"},{default:l(()=>[...t[8]||(t[8]=[h("选择时段预约有专医生",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),s(n,{label:"预约类型:"},{default:l(()=>[s(y,{modelValue:a.appointmentType,"onUpdate:modelValue":t[1]||(t[1]=o=>a.appointmentType=o)},{default:l(()=>[s(r,{value:"video"},{default:l(()=>[...t[9]||(t[9]=[h("视频问诊",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),s(n,{label:"选择患者:"},{default:l(()=>[s(y,{modelValue:a.patientId,"onUpdate:modelValue":t[2]||(t[2]=o=>a.patientId=o)},{default:l(()=>[s(r,{value:_.id},{default:l(()=>[h(Y(_.name),1)]),_:1},8,["value"])]),_:1},8,["modelValue"])]),_:1}),s(n,{label:"渠道来源:",required:""},{default:l(()=>[s(me,{modelValue:a.channel_source,"onUpdate:modelValue":t[3]||(t[3]=o=>a.channel_source=o),placeholder:"请选择渠道来源",class:"channel-source-select"},{default:l(()=>[(m(!0),k(S,null,x($.value,o=>(m(),w(b,{key:o.value,label:o.name,value:o.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),s(n,{label:"预约医生:"},{default:l(()=>[g("div",Ne,[s(y,{modelValue:d.value,"onUpdate:modelValue":t[4]||(t[4]=o=>d.value=o),onChange:ne},{default:l(()=>[(m(!0),k(S,null,x(W.value,o=>(m(),w(r,{key:o.id,value:o.id,class:"doctor-radio"},{default:l(()=>[h(Y(o.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"])])]),_:1}),s(n,{label:"预约时间:"},{default:l(()=>[d.value?d.value&&u.value.length===0?(m(),w(U,{key:1,description:"该医生暂无排班","image-size":80})):(m(),k("div",Fe,[g("div",Oe,[(m(!0),k(S,null,x(q.value,o=>(m(),w(E,{key:o.date,type:a.date===o.date?"primary":"",onClick:fe=>L(o.date),class:"date-button"},{default:l(()=>[h(Y(o.label),1)]),_:2},1032,["type","onClick"]))),128))]),a.date?(m(),k("div",Pe,[g("div",Ge,[t[11]||(t[11]=g("span",{class:"header-title"},"可预约时段",-1)),s(E,{text:"",type:"primary",size:"small",loading:I.value,onClick:re},{icon:l(()=>[s(Re(Ce))]),default:l(()=>[t[10]||(t[10]=h(" 刷新 ",-1))]),_:1},8,["loading"])]),g("div",je,[(m(!0),k(S,null,x(H.value,o=>(m(),k("div",{key:o.time,class:O(["time-slot-item",{available:o.available,unavailable:!o.available,selected:a.appointmentTime===o.time}]),onClick:fe=>ie(o)},[g("div",He,Y(o.time),1),g("div",{class:O(["slot-status",{"status-available":o.available}])},Y(o.available?"可约":"已约"),3)],10,qe))),128))])])):F("",!0)])):(m(),w(U,{key:0,description:"请先选择医生","image-size":80}))]),_:1}),s(n,{label:"备注:"},{default:l(()=>[s(ue,{modelValue:a.remark,"onUpdate:modelValue":t[5]||(t[5]=o=>a.remark=o),type:"textarea",rows:2,placeholder:"请输入备注信息"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])),[[ve,D.value]])]),_:1},8,["modelValue"])}}}),At=Be(Qe,[["__scopeId","data-v-0ae1f57a"]]);export{At as default};