Files
zyt/server/public/admin/assets/appointment-BxPHzMp1.js
T
2026-08-13 09:41:55 +08:00

2 lines
11 KiB
JavaScript

import{o as Se,q as d,O as b,D as s,ac as Te,r as D,bh as Ve,P as R,v as i,b9 as we,b6 as Ye,s as y,T as w,bc as Ce,bf as Ee,L as k,bm as Me,F as x,G as N,bn as xe,b7 as Ne,bB as Be,K as Ie,u as Ae,by as Le,ae as O,bi as Re,B as Ue,M as p,ba as P,p as S,n as We}from"./.pnpm-CC7b2w5D.js";import{d as v,i as $e}from"./dayjs-o4qa-HO_.js";import{g as ze}from"./tcm-DvVI17Vq.js";import{m as qe,i as c,_ as Fe}from"./index-fgtLtwvK.js";import{a as G,r as He,g as Oe,o as Pe}from"./doctor-BSWO5yLr.js";import{K as Ge}from"./first_visit-Dggu85mh.js";const Qe={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=Se({__name:"appointment",props:{apiScene:{default:"default"}},emits:["success"],setup(Q,{expose:j,emit:K}){v.extend($e);const J=Q,Y=p(!1),T=p(!1),B=p(!1),I=p(!1),U=p([]),f=p([]),E=p(""),u=p(0),m=p([]),C=p([]),V=p(!1),_=P({id:0,name:"",gender:"",age:0}),a=P({appointmentMethod:"time",appointmentType:"video",patientId:0,date:"",appointmentTime:"",remark:"",channel_source:"",channel_source_detail:""}),X=new Set(["自媒体4H","自媒体3Q","自媒体3H","自媒体2H","自媒体2Q"]);function W(e){return X.has(String(e??"").trim())}const Z=S(()=>{const e=a.channel_source;if(e===""||e==null)return"";const t=C.value.find(n=>String(n.value)===String(e));return t?String(t.name??"").trim():""}),A=S(()=>W(Z.value)),ee=e=>{const t=C.value.find(o=>String(o.value)===String(e)),n=t?String(t.name??"").trim():"";W(n)||(a.channel_source_detail="")},te=S(()=>{if(!u.value||m.value.length===0)return[];const e=[],t=["日","一","二","三","四","五","六"],n=v().startOf("day");for(const o of m.value){const r=v(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=v().format("YYYY-MM-DD");if(!(a.date===e))return f.value;const n=v();return f.value.map(o=>{const r=v(`${a.date} ${o.time}`);return r.isBefore(n)||r.isSame(n,"minute")?{...o,available:!1}:o})}),ne=()=>v().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&&(!A.value||a.channel_source_detail.trim()!=="")),se=K,ie=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=[],m.value=[],E.value="",V.value=!1,await de(),await ce(),await ue(),await re()},re=async()=>{V.value=!1;const e=_.id;if(!e)return;const t=v().format("YYYY-MM-DD");try{const n=await G({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 G({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 qe({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)}),C.value=t.map(n=>({...n,value:(n==null?void 0:n.value)!=null&&n.value!==""?String(n.value):""}))}catch(e){console.error("加载渠道来源失败:",e),C.value=[]}},ce=async()=>{try{T.value=!0;const e=await ze();U.value=e||[]}catch(e){console.error("加载医生列表失败:",e),c.msgError("加载医生列表失败")}finally{T.value=!1}},me=()=>{u.value=0,a.date="",a.appointmentTime="",f.value=[]},pe=async()=>{a.appointmentTime="",a.date="",f.value=[],m.value=[],u.value&&await ve()},ve=async()=>{if(u.value)try{T.value=!0;const e=v().format("YYYY-MM-DD"),t=v().add(6,"day").format("YYYY-MM-DD"),n=await He({doctor_id:u.value,start_date:e,end_date:t,status:1});if(n!=null&&n.lists&&n.lists.length>0){if(m.value=[...new Set(n.lists.map(o=>o.date))],m.value.sort(),await We(),m.value.length>0){const o=v().format("YYYY-MM-DD");let r=m.value.includes(o)?o:m.value[0];V.value&&r===o&&(r=m.value.find(h=>h>o)??m.value.find(h=>h!==o)??r),z(r)}}else m.value=[],c.msgWarning("该医生暂无排班")}catch(e){console.error("加载医生排班失败:",e),c.msgError("加载医生排班失败"),m.value=[]}finally{T.value=!1}},z=e=>{a.date=e,a.appointmentTime="",u.value&&q()},q=async()=>{if(!(!u.value||!a.date))try{T.value=!0;const e=await Oe({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),c.msgError("加载时间段失败"),f.value=[]}finally{T.value=!1}},fe=e=>{if(!e.available){c.msgWarning("该时间段不可预约");return}a.appointmentTime=e.time},_e=async()=>{if(!(!u.value||!a.date))try{I.value=!0;const e=a.appointmentTime;if(a.appointmentTime="",await q(),e){const t=f.value.find(n=>n.time===e);t&&t.available&&(a.appointmentTime=e)}c.msgSuccess("刷新成功")}catch(e){console.error("刷新失败:",e),c.msgError("刷新失败,请重试")}finally{I.value=!1}},ge=async()=>{if(!u.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&&!a.channel_source_detail.trim()){c.msgWarning("请填写自媒体渠道补充信息");return}if($.value){c.msgWarning("该患者今日已有挂号(已预约或已过号),不能重复预约今天,请改选其他日期。");return}try{B.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 Ge(e):await Pe(e),c.msgSuccess("预约成功"),Y.value=!1,se("success")}catch(e){console.error("预约失败:",e),c.msgError("预约失败")}finally{B.value=!1}};return j({open:ie}),(e,t)=>{const n=Ve,o=Ye,r=Ee,g=Ce,h=xe,ye=Me,F=Ne,H=Be,M=Ie,he=we,be=Ue,De=Re;return d(),b(be,{modelValue:Y.value,"onUpdate:modelValue":t[8]||(t[8]=l=>Y.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=>Y.value=!1)},{default:s(()=>[...t[13]||(t[13]=[k("取消",-1)])]),_:1}),i(M,{type:"primary",onClick:ge,loading:B.value,disabled:!oe.value},{default:s(()=>[...t[14]||(t[14]=[k(" 确定 ",-1)])]),_:1},8,["loading","disabled"])])]),default:s(()=>[Te((d(),D("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"])):R("",!0),i(he,{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]=l=>a.appointmentMethod=l),onChange:me},{default:s(()=>[i(r,{value:"time"},{default:s(()=>[...t[9]||(t[9]=[k("选择时段预约有专医生",-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]=[k("视频问诊",-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(()=>[k(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),D(x,null,N(C.value,l=>(d(),b(h,{key:String(l.value),label:l.name,value:l.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]=l=>a.channel_source_detail=l),clearable:"",maxlength:"128","show-word-limit":"",placeholder:"请输入自媒体相关补充内容",class:"channel-source-select"},null,8,["modelValue"])]),_:1})):R("",!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),D(x,null,N(U.value,l=>(d(),b(r,{key:l.id,value:l.id,class:"doctor-radio"},{default:s(()=>[k(w(l.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"])])]),_:1}),i(o,{label:"预约时间:"},{default:s(()=>[u.value?u.value&&m.value.length===0?(d(),b(H,{key:1,description:"该医生暂无排班","image-size":80})):(d(),D("div",Ke,[y("div",Je,[(d(!0),D(x,null,N(te.value,l=>(d(),b(M,{key:l.date,type:a.date===l.date?"primary":"",onClick:ke=>z(l.date),class:"date-button"},{default:s(()=>[k(w(l.label),1)]),_:2},1032,["type","onClick"]))),128))]),a.date?(d(),D("div",Xe,[y("div",Ze,[t[12]||(t[12]=y("span",{class:"header-title"},"可预约时段",-1)),i(M,{text:"",type:"primary",size:"small",loading:I.value,onClick:_e},{icon:s(()=>[i(Ae(Le))]),default:s(()=>[t[11]||(t[11]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),y("div",et,[(d(!0),D(x,null,N(ae.value,l=>(d(),D("div",{key:l.time,class:O(["time-slot-item",{available:l.available,unavailable:!l.available,selected:a.appointmentTime===l.time}]),onClick:ke=>fe(l)},[y("div",at,w(l.time),1),y("div",{class:O(["slot-status",{"status-available":l.available}])},w(l.available?"可约":"已约"),3)],10,tt))),128))])])):R("",!0)])):(d(),b(H,{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"])])),[[De,T.value]])]),_:1},8,["modelValue"])}}}),ct=Fe(lt,[["__scopeId","data-v-12c71595"]]);export{ct as default};