Files
zyt/server/public/admin/assets/appointment-BzWjtwrI.js
T
2026-05-16 16:08:54 +08:00

2 lines
12 KiB
JavaScript

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