2 lines
10 KiB
JavaScript
2 lines
10 KiB
JavaScript
import{o as ee,p as c,ap as te,aq as se,q as r,r as v,s as e,T as t,v as d,D as _,u as p,cO as ne,w as oe,L as b,ae as y,F as A,G as E,P as B,O as z,bB as ae,ac as le,bi as ie,bk as ue,br as de,bj as ce,C as re,M as _e,ba as pe}from"./.pnpm-CC7b2w5D.js";import{_ as me}from"./index.vue_vue_type_script_setup_true_lang-DHXV5Zdc.js";import{d as M}from"./dayjs-o4qa-HO_.js";import{u as ve}from"./usePaging-Cer8s1LR.js";import{q as he}from"./first_visit-DgSLXdux.js";import{_ as ge}from"./index-SornbJeu.js";const fe={class:"progress-board"},we={class:"board-section overview-section"},be={class:"section-heading"},ye={class:"heading-copy"},ke={class:"heading-badge"},xe={class:"scope-chip"},De={class:"overview-grid"},qe={class:"overview-card"},$e={class:"overview-card"},Ce={class:"board-section schedule-section"},Ne={class:"section-heading"},Me={class:"heading-copy"},Pe={class:"heading-badge"},Se={class:"schedule-range"},Le={class:"schedule-grid"},Te=["aria-pressed","onClick"],Ve={class:"schedule-date"},Ye={class:"schedule-card-stats"},Ae={class:"schedule-card-action"},Ee={class:"schedule-drilldown"},Be={class:"drilldown-heading"},ze={key:0},Oe={key:0,class:"doctor-schedule-list"},Ie={class:"doctor-identity"},Re={class:"doctor-index"},je={class:"doctor-windows"},Fe={class:"doctor-metric"},Ue={class:"doctor-metric doctor-metric-booked"},Ge={class:"board-section queue-section"},We={class:"section-heading queue-heading"},He={class:"heading-copy"},Je={class:"queue-count"},Ke={class:"queue-number"},Qe={class:"patient-cell"},Xe={class:"appointment-clock"},Ze={key:0,class:"pagination-wrap"},et=ee({__name:"ProgressPanel",emits:["openDiagnosis"],setup(tt,{expose:O,emit:I}){const R=I,f=M().format("YYYY-MM-DD"),h=_e(f),P=pe({keyword:"",status:1,start_date:f,end_date:f}),{pager:l,getLists:x,resetPage:j}=ve({fetchFun:he,params:P,size:15,firstLoading:!0,latestOnly:!0}),w=c(()=>{var s,a,m,g,i,q,$,C,N,n,k,Y;return{totalVisits:Number(((a=(s=l.extend)==null?void 0:s.today_overview)==null?void 0:a.total_visits)||0),booked:Number(((g=(m=l.extend)==null?void 0:m.today_overview)==null?void 0:g.booked)||0),completed:Number(((q=(i=l.extend)==null?void 0:i.today_overview)==null?void 0:q.completed)||0),missed:Number(((C=($=l.extend)==null?void 0:$.today_overview)==null?void 0:C.missed)||0),emptySlots:Number(((n=(N=l.extend)==null?void 0:N.today_overview)==null?void 0:n.empty_slots)||0),doctorCount:Number(((Y=(k=l.extend)==null?void 0:k.today_overview)==null?void 0:Y.doctor_count)||0)}}),o=c(()=>{var s;return((s=l.extend)==null?void 0:s.schedule_mode)==="ownership"}),D=c(()=>{var a;const s=Array.isArray((a=l.extend)==null?void 0:a.week_schedule)?l.extend.week_schedule:[];return s.length?s:Array.from({length:7},(m,g)=>{const i=M().add(g,"day");return{date:i.format("YYYY-MM-DD"),date_text:i.format("MM-DD"),weekday:`周${"日一二三四五六"[i.day()]}`,total_slots:0,booked_slots:0,empty_slots:0,doctor_count:0,doctors:[],total_appointments:0,waiting_appointments:0,completed_appointments:0,missed_appointments:0}})}),u=c(()=>D.value.find(s=>s.date===h.value)||D.value[0]||{date:f,date_text:M().format("MM-DD"),weekday:`周${"日一二三四五六"[M().day()]}`,total_slots:0,booked_slots:0,empty_slots:0,doctor_count:0,doctors:[],total_appointments:0,waiting_appointments:0,completed_appointments:0,missed_appointments:0}),L=c(()=>{var s;return Array.isArray((s=u.value)==null?void 0:s.doctors)?u.value.doctors:[]}),T=c(()=>{const s=u.value;return`${s.date_text||""} ${s.weekday||""} `}),V=c(()=>h.value===f?"今日":T.value.trim()||h.value),F=c(()=>{var s,a;return((a=(s=l.extend)==null?void 0:s.scope)==null?void 0:a.label)||"按权限加载"}),U=c(()=>{const s=D.value;return s.length?`${s[0].date_text} 至 ${s[s.length-1].date_text}`:""});let S=null;function G(s){return x(s)}function W(s){s&&(h.value=s,P.start_date=s,P.end_date=s,j())}function H(s){const a=o.value?s.appointment_times:s.schedule_windows,m=Array.isArray(a)?a.filter(Boolean):[];return m.length?m.join("、"):o.value?"暂无预约时刻":"未设置具体时段"}function J(s){return String(s.appointment_time||"").slice(0,5)||"—"}function K(s){if(s.queue_status==="consulting")return"0(进行中)";if(s.queue_status==="next")return"0(待接诊)";const a=Math.max(0,Number(s.ahead_count||0));return a===0?"0 位":`${a} 位 · 约 ${Number(s.estimated_wait_minutes||a*15)} 分钟`}function Q(s){return s==="consulting"?"success":s==="next"?"warning":s==="completed"?"success":s==="missed"?"danger":"info"}function X({row:s}){return Number(s.is_self_patient)===1?"queue-row-self":""}function Z(s){R("openDiagnosis",s)}return O({refresh:G,loading:c(()=>l.loading)}),te(()=>{x(),S=setInterval(()=>x({silent:!0}),15e3)}),se(()=>{S&&clearInterval(S)}),(s,a)=>{const m=oe,g=ae,i=ue,q=de,$=ce,C=me,N=ie;return r(),v("div",fe,[e("section",we,[e("div",be,[e("div",ye,[a[1]||(a[1]=e("h2",null,"今日面诊概览",-1)),e("span",ke,t(o.value?"按本人归属":"与排班合并"),1)]),e("span",xe,[d(m,null,{default:_(()=>[d(p(ne))]),_:1}),b(t(F.value),1)])]),e("div",De,[e("article",qe,[e("span",null,t(o.value?"今日本人面诊":"今日面诊总号源"),1),e("strong",null,t(w.value.totalVisits),1),e("small",null,t(w.value.doctorCount)+" 位"+t(o.value?"接诊":"排班")+"医生",1)]),e("article",$e,[e("span",null,t(o.value?"待面诊":"已预约"),1),e("strong",null,t(w.value.booked),1),e("small",null,t(o.value?"本人归属患者的有效挂号":"按有效挂号占用号源"),1)]),e("article",{class:y(["overview-card",o.value?"overview-card-completed":"overview-card-empty"])},[e("span",null,t(o.value?"已完成":"空号"),1),e("strong",null,t(o.value?w.value.completed:w.value.emptySlots),1),e("small",null,t(o.value?`已过号 ${w.value.missed} 人`:"未被有效挂号占用"),1)],2)])]),e("section",Ce,[e("div",Ne,[e("div",Me,[e("h2",null,t(o.value?"近一周面诊安排":"近一周排班"),1),e("span",Pe,t(o.value?"本人患者":"今日起 7 天"),1)]),e("span",Se,t(U.value),1)]),e("div",Le,[(r(!0),v(A,null,E(D.value,n=>(r(),v("button",{key:n.date,type:"button",class:y(["schedule-card",{"is-today":n.date===p(f),"is-selected":n.date===h.value}]),"aria-pressed":n.date===h.value,onClick:k=>W(n.date)},[e("span",Ve,t(n.date_text)+" "+t(n.weekday),1),e("strong",null,t(o.value?n.total_appointments:n.total_slots),1),e("span",Ye,[e("span",null,t(o.value?"待诊":"已约")+" "+t(o.value?n.waiting_appointments:n.booked_slots),1),a[2]||(a[2]=e("i",null,"/",-1)),e("span",{class:y({"is-completed":o.value})},t(o.value?"完成":"空")+" "+t(o.value?n.completed_appointments:n.empty_slots),3)]),e("span",Ae,[e("span",null,t(n.doctor_count)+" 位医生",1),e("span",null,t(n.date===h.value?"正在查看":"查看明细")+" ›",1)])],10,Te))),128))]),e("div",Ee,[e("div",Be,[e("div",null,[e("h3",null,t(T.value)+t(o.value?"面诊安排":"排班明细"),1),e("p",null,"共 "+t(u.value.doctor_count)+" 位"+t(o.value?"接诊":"排班")+"医生,点击上方日期可切换",1)]),e("div",{class:y(["drilldown-summary",{"is-ownership":o.value}])},[e("span",null,[b(t(o.value?"面诊总数":"总号源")+" ",1),e("strong",null,t(o.value?u.value.total_appointments:u.value.total_slots),1)]),e("span",null,[b(t(o.value?"待面诊":"已预约")+" ",1),e("strong",null,t(o.value?u.value.waiting_appointments:u.value.booked_slots),1)]),e("span",null,[b(t(o.value?"已完成":"空号")+" ",1),e("strong",null,t(o.value?u.value.completed_appointments:u.value.empty_slots),1)]),o.value?(r(),v("span",ze,[a[3]||(a[3]=b("已过号 ",-1)),e("strong",null,t(u.value.missed_appointments),1)])):B("",!0)],2)]),L.value.length?(r(),v("div",Oe,[(r(!0),v(A,null,E(L.value,(n,k)=>(r(),v("article",{key:n.doctor_id,class:"doctor-schedule-row"},[e("div",Ie,[e("span",Re,t(k+1),1),e("div",null,[e("strong",null,t(n.doctor_name),1),e("small",null,t(o.value?"本人患者接诊医生":"医生排班"),1)])]),e("div",je,[e("span",null,t(o.value?"预约时刻":"排班时段"),1),e("strong",null,t(H(n)),1)]),e("div",Fe,[e("span",null,t(o.value?"面诊总数":"总号源"),1),e("strong",null,t(o.value?n.total_appointments:n.total_slots),1)]),e("div",Ue,[e("span",null,t(o.value?"待面诊":"已预约"),1),e("strong",null,t(o.value?n.waiting_appointments:n.booked_slots),1)]),e("div",{class:y(["doctor-metric",o.value?"doctor-metric-completed":"doctor-metric-empty"])},[e("span",null,t(o.value?"完成 / 过号":"空号"),1),e("strong",null,t(o.value?`${n.completed_appointments} / ${n.missed_appointments}`:n.empty_slots),1)],2)]))),128))])):(r(),z(g,{key:1,"image-size":56,description:o.value?"该日期暂无本人归属患者的有效挂号":"该日期暂无当前权限范围内的医生排班"},null,8,["description"]))])]),e("section",Ge,[e("div",We,[e("div",He,[e("h2",null,t(V.value)+"候诊列表",1),a[4]||(a[4]=e("span",{class:"heading-badge"},"按医生排队",-1)),e("span",Je,"共 "+t(p(l).count)+" 人",1)]),a[5]||(a[5]=e("span",{class:"refresh-time"},"每 15 秒自动刷新",-1))]),le((r(),z($,{data:p(l).lists,class:"queue-table","row-class-name":X,onRowDblclick:Z},{empty:_(()=>[d(g,{description:`当前权限范围内${V.value}暂无候诊患者`},null,8,["description"])]),default:_(()=>[d(i,{label:"排队",width:"92"},{default:_(({row:n})=>[e("span",Ke,t(n.queue_no||"—"),1)]),_:1}),d(i,{label:"患者","min-width":"170"},{default:_(({row:n})=>[e("div",Qe,[e("strong",null,t(n.patient_name||"未命名患者"),1),e("span",null,t(n.phone_masked||"无手机号"),1)])]),_:1}),d(i,{prop:"doctor_name",label:"医生","min-width":"130","show-overflow-tooltip":""}),d(i,{label:"预约时间","min-width":"135"},{default:_(({row:n})=>[e("span",Xe,t(J(n)),1)]),_:1}),d(i,{label:"前方等待","min-width":"180"},{default:_(({row:n})=>[e("span",{class:y(["waiting-text",`is-${n.queue_status||"waiting"}`])},t(K(n)),3)]),_:1}),d(i,{label:"状态","min-width":"110"},{default:_(({row:n})=>[d(q,{size:"small",round:"",effect:"light",type:Q(n.queue_status)},{default:_(()=>[b(t(n.queue_status_text||"等待中"),1)]),_:2},1032,["type"])]),_:1})]),_:1},8,["data"])),[[N,p(l).loading]]),p(l).count>p(l).size?(r(),v("div",Ze,[d(C,{modelValue:p(l),"onUpdate:modelValue":a[0]||(a[0]=n=>re(l)?l.value=n:null),onChange:p(x)},null,8,["modelValue","onChange"])])):B("",!0)])])}}}),ut=ge(et,[["__scopeId","data-v-c86e3fc9"]]);export{ut as default};
|