2 lines
9.7 KiB
JavaScript
2 lines
9.7 KiB
JavaScript
import{D as ie,B as re,G as me,I as de,P as ue,Q as pe,T as ce,i as ve,C as fe,L as _e,e as ge}from"./element-plus-D9NzL5HE.js";import{R as ye}from"./@element-plus/icons-vue-BZWa1PtL.js";import{d as _,g as be}from"./dayjs-DG77mNTn.js";import{g as he}from"./tcm-9dTydv5E.js";import{l as ke,h as u,a as De}from"./index-D54sWaXv.js";import{f as Te,r as Ve,g as we,j as Ce}from"./doctor-B06wExqo.js";import{f as Ee,ak as m,G as k,aN as l,aP as Ye,I as y,a as n,J as g,O as b,F as E,ap as Y,H as Me,A as I,n as Se}from"./@vue/runtime-core-C0pg79pw.js";import{Q as D,o as R}from"./@vue/shared-mAAVTE9n.js";import{y as xe,o as v,r as U}from"./@vue/reactivity-BIbyPIZJ.js";import"./@vue/runtime-dom-iFk_KP8y.js";import"./lodash-D3kF6u-c.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"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-CYz6RFzi.js";import"./pinia-Ba_jX6-d.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-DIKi2bJB.js";import"./@vueuse/shared-D8934tfB.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-DYKKs4Al.js";import"./tslib-BDyQ-Jie.js";import"./zrender-CTTuYiLF.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-BVMzZUvF.js";const Ie={class:"text-gray-500"},$e={class:"doctor-list"},Be={key:2,class:"appointment-time-container"},ze={class:"date-selector"},Le={key:0,class:"time-slots-container"},Re={class:"time-slots-header"},Ue={class:"time-slots-grid"},We=["onClick"],Ne={class:"slot-time"},Pe={class:"drawer-footer"},Ae=Ee({__name:"appointment",emits:["success"],setup(Fe,{expose:W,emit:N}){_.extend(be);const T=v(!1),h=v(!1),M=v(!1),S=v(!1),$=v([]),c=v([]),V=v(""),i=v(0),p=v([]),x=v([]),f=U({id:0,name:"",gender:"",age:0}),a=U({appointmentMethod:"time",appointmentType:"video",patientId:0,date:"",appointmentTime:"",remark:"",channel_source:""}),P=I(()=>{if(!i.value||p.value.length===0)return[];const e=[],t=["日","一","二","三","四","五","六"],s=_().startOf("day");for(const r of p.value){const d=_(r);if(d.isBefore(s))continue;const w=`${d.format("MM月DD日")} (${t[d.day()]})`;e.push({date:r,label:w})}return e}),A=I(()=>{if(!a.date||c.value.length===0)return[];const e=_().format("YYYY-MM-DD");if(!(a.date===e))return c.value;const s=_();return c.value.map(r=>{const d=_(`${a.date} ${r.time}`);return d.isBefore(s)||d.isSame(s,"minute")?{...r,available:!1}:r})}),F=I(()=>i.value&&a.date&&a.appointmentTime&&!!a.channel_source),O=N,j=async e=>{T.value=!0,f.id=e.patient_id||e.id,f.name=e.patient_name||e.name,f.gender=e.gender_desc||e.gender,f.age=e.age||0,a.appointmentMethod="time",a.appointmentType="video",a.patientId=f.id,i.value=0,a.date="",a.appointmentTime="",a.remark="",a.channel_source="",c.value=[],p.value=[],V.value="",await q(),await Q(),await G()},G=async()=>{try{const e=await Te({patient_id:f.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?V.value=`${t.appointment_date} ${t.appointment_time}`:t.appointment_date&&(V.value=t.appointment_date)}}catch(e){console.error("加载就诊记录失败:",e)}},q=async()=>{try{const e=await ke({type:"channels"});x.value=((e==null?void 0:e.channels)||[]).filter(t=>t.status!==0)}catch(e){console.error("加载渠道来源失败:",e),x.value=[]}},Q=async()=>{try{h.value=!0;const e=await he();$.value=e||[]}catch(e){console.error("加载医生列表失败:",e),u.msgError("加载医生列表失败")}finally{h.value=!1}},H=()=>{i.value=0,a.date="",a.appointmentTime="",c.value=[]},J=async()=>{a.appointmentTime="",a.date="",c.value=[],p.value=[],i.value&&await K()},K=async()=>{if(i.value)try{h.value=!0;const e=_().format("YYYY-MM-DD"),t=_().add(6,"day").format("YYYY-MM-DD"),s=await Ve({doctor_id:i.value,start_date:e,end_date:t,status:1});if(s!=null&&s.lists&&s.lists.length>0){if(p.value=[...new Set(s.lists.map(r=>r.date))],p.value.sort(),await Se(),p.value.length>0){const r=_().format("YYYY-MM-DD"),d=p.value.includes(r)?r:p.value[0];B(d)}}else p.value=[],u.msgWarning("该医生暂无排班")}catch(e){console.error("加载医生排班失败:",e),u.msgError("加载医生排班失败"),p.value=[]}finally{h.value=!1}},B=e=>{a.date=e,a.appointmentTime="",i.value&&z()},z=async()=>{if(!(!i.value||!a.date))try{h.value=!0;const e=await we({doctor_id:i.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),u.msgError("加载时间段失败"),c.value=[]}finally{h.value=!1}},X=e=>{if(!e.available){u.msgWarning("该时间段不可预约");return}a.appointmentTime=e.time},Z=async()=>{if(!(!i.value||!a.date))try{S.value=!0;const e=a.appointmentTime;if(a.appointmentTime="",await z(),e){const t=c.value.find(s=>s.time===e);t&&t.available&&(a.appointmentTime=e)}u.msgSuccess("刷新成功")}catch(e){console.error("刷新失败:",e),u.msgError("刷新失败,请重试")}finally{S.value=!1}},ee=async()=>{if(!i.value){u.msgWarning("请选择医生");return}if(!a.date){u.msgWarning("请选择日期");return}if(!a.appointmentTime){u.msgWarning("请选择预约时间");return}if(!a.channel_source){u.msgWarning("请选择渠道来源");return}try{M.value=!0;const e={patient_id:f.id,doctor_id:i.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 Ce(e),u.msgSuccess("预约成功"),T.value=!1,O("success")}catch(e){console.error("预约失败:",e),u.msgError("预约失败")}finally{M.value=!1}};return W({open:j}),(e,t)=>{const s=re,r=de,d=me,w=pe,te=ue,L=ce,C=ve,ae=fe,oe=ie,le=ge,ne=_e;return m(),k(le,{modelValue:T.value,"onUpdate:modelValue":t[7]||(t[7]=o=>T.value=o),title:"预约问诊",direction:"rtl",size:"60%","close-on-click-modal":!1,"z-index":2e3},{footer:l(()=>[g("div",Pe,[n(C,{onClick:t[6]||(t[6]=o=>T.value=!1)},{default:l(()=>[...t[12]||(t[12]=[b("取消",-1)])]),_:1}),n(C,{type:"primary",onClick:ee,loading:M.value,disabled:!F.value},{default:l(()=>[...t[13]||(t[13]=[b(" 确定 ",-1)])]),_:1},8,["loading","disabled"])])]),default:l(()=>[Ye((m(),y("div",null,[n(oe,{model:a,"label-width":"100px",class:"appointment-form"},{default:l(()=>[n(s,{label:"上次就诊:"},{default:l(()=>[g("span",Ie,D(V.value||"无就诊记录"),1)]),_:1}),n(s,{label:"预约方式:"},{default:l(()=>[n(d,{modelValue:a.appointmentMethod,"onUpdate:modelValue":t[0]||(t[0]=o=>a.appointmentMethod=o),onChange:H},{default:l(()=>[n(r,{value:"time"},{default:l(()=>[...t[8]||(t[8]=[b("选择时段预约有专医生",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),n(s,{label:"预约类型:"},{default:l(()=>[n(d,{modelValue:a.appointmentType,"onUpdate:modelValue":t[1]||(t[1]=o=>a.appointmentType=o)},{default:l(()=>[n(r,{value:"video"},{default:l(()=>[...t[9]||(t[9]=[b("视频问诊",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),n(s,{label:"选择患者:"},{default:l(()=>[n(d,{modelValue:a.patientId,"onUpdate:modelValue":t[2]||(t[2]=o=>a.patientId=o)},{default:l(()=>[n(r,{value:f.id},{default:l(()=>[b(D(f.name),1)]),_:1},8,["value"])]),_:1},8,["modelValue"])]),_:1}),n(s,{label:"渠道来源:",required:""},{default:l(()=>[n(te,{modelValue:a.channel_source,"onUpdate:modelValue":t[3]||(t[3]=o=>a.channel_source=o),placeholder:"请选择渠道来源",class:"channel-source-select"},{default:l(()=>[(m(!0),y(E,null,Y(x.value,o=>(m(),k(w,{key:o.value,label:o.name,value:o.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),n(s,{label:"预约医生:"},{default:l(()=>[g("div",$e,[n(d,{modelValue:i.value,"onUpdate:modelValue":t[4]||(t[4]=o=>i.value=o),onChange:J},{default:l(()=>[(m(!0),y(E,null,Y($.value,o=>(m(),k(r,{key:o.id,value:o.id,class:"doctor-radio"},{default:l(()=>[b(D(o.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"])])]),_:1}),n(s,{label:"预约时间:"},{default:l(()=>[i.value?i.value&&p.value.length===0?(m(),k(L,{key:1,description:"该医生暂无排班","image-size":80})):(m(),y("div",Be,[g("div",ze,[(m(!0),y(E,null,Y(P.value,o=>(m(),k(C,{key:o.date,type:a.date===o.date?"primary":"",onClick:se=>B(o.date),class:"date-button"},{default:l(()=>[b(D(o.label),1)]),_:2},1032,["type","onClick"]))),128))]),a.date?(m(),y("div",Le,[g("div",Re,[t[11]||(t[11]=g("span",{class:"header-title"},"可预约时段",-1)),n(C,{text:"",type:"primary",size:"small",loading:S.value,onClick:Z},{icon:l(()=>[n(xe(ye))]),default:l(()=>[t[10]||(t[10]=b(" 刷新 ",-1))]),_:1},8,["loading"])]),g("div",Ue,[(m(!0),y(E,null,Y(A.value,o=>(m(),y("div",{key:o.time,class:R(["time-slot-item",{available:o.available,unavailable:!o.available,selected:a.appointmentTime===o.time}]),onClick:se=>X(o)},[g("div",Ne,D(o.time),1),g("div",{class:R(["slot-status",{"status-available":o.available}])},D(o.available?"可约":"已约"),3)],10,We))),128))])])):Me("",!0)])):(m(),k(L,{key:0,description:"请先选择医生","image-size":80}))]),_:1}),n(s,{label:"备注:"},{default:l(()=>[n(ae,{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"])])),[[ne,h.value]])]),_:1},8,["modelValue"])}}}),Mt=De(Ae,[["__scopeId","data-v-d7887556"]]);export{Mt as default};
|