2 lines
11 KiB
JavaScript
2 lines
11 KiB
JavaScript
import{o as De,q as d,O as b,D as s,ac as ke,r as D,bh as Te,P as R,v as i,b9 as Se,b6 as Ve,s as y,T as w,bc as we,bf as Ye,L as k,bm as Ee,F as x,G as N,bn as Ce,b7 as Me,bB as xe,K as Ne,u as Be,by as Ie,ae as O,bi as Ae,B as Le,M as p,ba as G,p as T,n as Re}from"./.pnpm-BGZW0UGg.js";import{d as v,i as Ue}from"./dayjs-BnultS00.js";import{g as We}from"./tcm-DeT-_NhZ.js";import{m as $e,i as c,_ as ze}from"./index-CTzEhZ24.js";import{a as P,r as qe,g as Fe,o as He}from"./doctor-DYDmUQ5e.js";const Oe={class:"text-gray-500"},Ge={class:"doctor-list"},Pe={key:2,class:"appointment-time-container"},Qe={class:"date-selector"},je={key:0,class:"time-slots-container"},Ke={class:"time-slots-header"},Je={class:"time-slots-grid"},Xe=["onClick"],Ze={class:"slot-time"},et={class:"drawer-footer"},tt=De({__name:"appointment",emits:["success"],setup(at,{expose:Q,emit:j}){v.extend(Ue);const Y=p(!1),S=p(!1),B=p(!1),I=p(!1),U=p([]),f=p([]),C=p(""),u=p(0),m=p([]),E=p([]),V=p(!1),_=G({id:0,name:"",gender:"",age:0}),a=G({appointmentMethod:"time",appointmentType:"video",patientId:0,date:"",appointmentTime:"",remark:"",channel_source:"",channel_source_detail:""}),K=new Set(["自媒体4H","自媒体3Q","自媒体3H","自媒体2H","自媒体2Q"]);function W(e){return K.has(String(e??"").trim())}const J=T(()=>{const e=a.channel_source;if(e===""||e==null)return"";const t=E.value.find(l=>String(l.value)===String(e));return t?String(t.name??"").trim():""}),A=T(()=>W(J.value)),X=e=>{const t=E.value.find(o=>String(o.value)===String(e)),l=t?String(t.name??"").trim():"";W(l)||(a.channel_source_detail="")},Z=T(()=>{if(!u.value||m.value.length===0)return[];const e=[],t=["日","一","二","三","四","五","六"],l=v().startOf("day");for(const o of m.value){const r=v(o);if(r.isBefore(l))continue;const g=`${r.format("MM月DD日")} (${t[r.day()]})`;e.push({date:o,label:g})}return e}),ee=T(()=>{if(!a.date||f.value.length===0)return[];const e=v().format("YYYY-MM-DD");if(!(a.date===e))return f.value;const l=v();return f.value.map(o=>{const r=v(`${a.date} ${o.time}`);return r.isBefore(l)||r.isSame(l,"minute")?{...o,available:!1}:o})}),te=()=>v().format("YYYY-MM-DD"),L=T(()=>a.date===te()),ae=T(()=>V.value?L.value?"该患者今日已有挂号(已预约或已过号),不能重复预约今天,请改选其他日期。":"该患者今日已有挂号记录;可为患者预约其他日期的时段。":""),$=T(()=>V.value&&L.value),le=T(()=>!$.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=[],m.value=[],C.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=v().format("YYYY-MM-DD");try{const l=await P({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 P({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)}},re=async()=>{try{const e=await $e({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)}),E.value=t.map(l=>({...l,value:(l==null?void 0:l.value)!=null&&l.value!==""?String(l.value):""}))}catch(e){console.error("加载渠道来源失败:",e),E.value=[]}},ue=async()=>{try{S.value=!0;const e=await We();U.value=e||[]}catch(e){console.error("加载医生列表失败:",e),c.msgError("加载医生列表失败")}finally{S.value=!1}},de=()=>{u.value=0,a.date="",a.appointmentTime="",f.value=[]},ce=async()=>{a.appointmentTime="",a.date="",f.value=[],m.value=[],u.value&&await me()},me=async()=>{if(u.value)try{S.value=!0;const e=v().format("YYYY-MM-DD"),t=v().add(6,"day").format("YYYY-MM-DD"),l=await qe({doctor_id:u.value,start_date:e,end_date:t,status:1});if(l!=null&&l.lists&&l.lists.length>0){if(m.value=[...new Set(l.lists.map(o=>o.date))],m.value.sort(),await Re(),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{S.value=!1}},z=e=>{a.date=e,a.appointmentTime="",u.value&&q()},q=async()=>{if(!(!u.value||!a.date))try{S.value=!0;const e=await Fe({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{S.value=!1}},pe=e=>{if(!e.available){c.msgWarning("该时间段不可预约");return}a.appointmentTime=e.time},ve=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(l=>l.time===e);t&&t.available&&(a.appointmentTime=e)}c.msgSuccess("刷新成功")}catch(e){console.error("刷新失败:",e),c.msgError("刷新失败,请重试")}finally{I.value=!1}},fe=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),await He(e),c.msgSuccess("预约成功"),Y.value=!1,ne("success")}catch(e){console.error("预约失败:",e),c.msgError("预约失败")}finally{B.value=!1}};return Q({open:oe}),(e,t)=>{const l=Te,o=Ve,r=Ye,g=we,h=Ce,_e=Ee,F=Me,H=xe,M=Ne,ge=Se,ye=Le,he=Ae;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]=[k("取消",-1)])]),_:1}),i(M,{type:"primary",onClick:fe,loading:B.value,disabled:!le.value},{default:s(()=>[...t[14]||(t[14]=[k(" 确定 ",-1)])]),_:1},8,["loading","disabled"])])]),default:s(()=>[ke((d(),D("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",Oe,w(C.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]=[k("选择时段预约有专医生",-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]=[k("视频问诊",-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(()=>[k(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),D(x,null,N(E.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:ce},{default:s(()=>[(d(!0),D(x,null,N(U.value,n=>(d(),b(r,{key:n.id,value:n.id,class:"doctor-radio"},{default:s(()=>[k(w(n.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",Pe,[y("div",Qe,[(d(!0),D(x,null,N(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(()=>[k(w(n.label),1)]),_:2},1032,["type","onClick"]))),128))]),a.date?(d(),D("div",je,[y("div",Ke,[t[12]||(t[12]=y("span",{class:"header-title"},"可预约时段",-1)),i(M,{text:"",type:"primary",size:"small",loading:I.value,onClick:ve},{icon:s(()=>[i(Be(Ie))]),default:s(()=>[t[11]||(t[11]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),y("div",Je,[(d(!0),D(x,null,N(ee.value,n=>(d(),D("div",{key:n.time,class:O(["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:O(["slot-status",{"status-available":n.available}])},w(n.available?"可约":"已约"),3)],10,Xe))),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]=n=>a.remark=n),type:"textarea",rows:2,placeholder:"请输入备注信息"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])),[[he,S.value]])]),_:1},8,["modelValue"])}}}),rt=ze(tt,[["__scopeId","data-v-8ad36a51"]]);export{rt as default};
|