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

2 lines
12 KiB
JavaScript

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