import{o as Z,W as Ae,ap as Re,bp as Ie,q as o,r as u,v as l,D as a,bd as Ue,bb as Pe,bh as Be,F as k,G as C,O as g,bi as Fe,bL as Me,u as p,J as je,aA as Ke,bc as Ye,K as qe,L as b,s as d,bj as Je,ac as A,bk as We,bl as Ge,T as n,P as v,a1 as He,w as Qe,ci as W,bm as Xe,ae as $,bn as Ze,C as et,c4 as tt,c5 as st,bC as lt,B as at,M as x,aC as nt,p as ot}from"./.pnpm-CyuAWpdG.js";import{_ as it}from"./index.vue_vue_type_script_setup_true_lang-DHxCVAKu.js";import{_ as rt}from"./index.vue_vue_type_script_setup_true_lang-CQzUr1BT.js";import{N as ut,O as G,Q as dt,S as ct,T as H,U as Q,V as X,W as _t,X as mt,Y as pt,Z as ft,_ as vt}from"./index-Bkarz3gO.js";import{C as bt}from"./stats-B9TgZYZ_.js";import{o as yt}from"./tcm-BSADvQNg.js";import{u as ht}from"./usePaging-CghUEVfD.js";import"./index-CS5Wg0xx.js";const gt={class:"revisit-due-page"},kt={class:"cell-main"},xt={class:"cell-sub"},Nt={class:"cell-main"},Tt={key:0,class:"cell-sub"},Ct={key:1,class:"text-missing"},Et={class:"cell-main"},Vt={key:0,class:"cell-sub"},wt={key:0,class:"cell-sub"},zt={key:0,class:"cell-sub"},St={key:1,class:"cell-sub"},$t={key:2},Lt={class:"flex justify-end mt-4"},Dt={class:"log-drawer-body"},Ot={key:0,class:"log-summary"},At={class:"log-summary-row"},Rt={key:0},It={class:"log-summary-row"},Ut={class:"cell-sub"},Pt={key:0,class:"log-summary-row cell-sub"},Bt={key:0},Ft={key:1},Mt={key:2},jt={class:"log-event"},Kt={class:"log-event-title"},Yt={class:"log-event-operator"},qt={class:"log-event-meta"},Jt={key:0,class:"log-event-payload"},Wt=Z({name:"statsRevisitDue"}),Gt=Z({...Wt,setup(Ht){const ee=Ae(),te=[...ut,{label:"人工关闭",value:"closed"}],R=x([]),I=x([]),se={value:"id",label:"name",children:"children"},m=nt({assistant_id:"",dept_id:"",state:"",days_bucket:"",min_snooze:"",keyword:""}),L=x(void 0),{pager:N,getLists:U,resetPage:le}=ht({fetchFun:G,params:m}),h=()=>le(),ae=s=>{m.min_snooze=s==null?"":Number(s),h()},ne=()=>{m.assistant_id="",m.dept_id="",m.state="",m.days_bucket="",m.min_snooze="",m.keyword="",L.value=void 0,h()},E=s=>_t(s),oe=({row:s})=>mt(E(s)),P=s=>s.assistant_name||(Number(s.assistant_id)>0?`#${s.assistant_id}`:"—"),B=s=>{const e=Number(s.current_slot??0);return e>0?`第 ${e} 诊`:"未成交"},F=s=>pt(E(s))||s.state_text||"—",ie=s=>{const e=Number(s.snooze_count??0),i=Number(s.contact_count??0),_=Number(s.missed_count??0);return`延迟 ${e} 次 · 已联系 ${i} 次 · 过号 ${_} 次`},re=s=>!!(s.first_shown_at_text||s.last_snoozed_at_text||s.computed_at_text),D=s=>{if(s==null||s==="")return null;const e=Number(s);return Number.isFinite(e)?e:null},M=s=>{const e=D(s.overdue_days),i=D(s.days_left);return(s.state==="overdue"||s.state==="missed")&&e!==null&&e>=0?{text:e===0?"今日到期":`${e} 天`,cls:Number(s.severe)===1?"is-severe":"is-overdue"}:e!==null&&e>0?{text:`${e} 天`,cls:"is-muted"}:i!==null&&i>=0?{text:`剩 ${i} 天`,cls:"is-muted"}:{text:"—",cls:""}},ue=s=>{const e=Number(s.escalation_level??0);return e>=3?"is-level-3":e===2?"is-level-2":e===1?"is-level-1":""},de=s=>{const e=String(s??"").trim();return e==="lost"?"患者流失":e==="other"?"其它":e||"人工关闭"},O=x(!1),V=x(!1),c=x(null),w=x([]),ce=ot(()=>c.value?`${c.value.patient_name||"患者"} · 复诊到期流水`:"复诊到期流水"),_e={1:"延迟",2:"已联系",3:"人工关闭",4:"自动关闭 · 已挂号",5:"自动关闭 · 已面诊",6:"周期重置(新订单)",7:"重新打开(挂号取消 / 过号)",8:"企微推送",9:"医助变更",10:"形态升级",11:"首次弹出"},me=s=>_e[Number(s)]??`事件 ${s}`,pe=s=>[1,2,3].includes(Number(s)),fe=s=>{switch(Number(s)){case 1:return"warning";case 2:case 6:return"primary";case 4:case 5:return"success";case 7:case 10:return"danger";default:return"info"}},ve=s=>s.operator_name?s.operator_name:Number(s.operator_id)>0?`#${s.operator_id}`:"系统",be=s=>{const e=D(s);return e===null?"":e>0?`超期 ${e} 天`:e===0?"到期当天":`未到期(剩 ${-e} 天)`},ye={next_remind_at:"下次提醒",next_remind_at_text:"下次提醒",promised_date:"承诺日",appointment_id:"挂号单",appointment_date:"预约日",order_id:"订单",source_order_id:"周期订单",remark:"备注",reason:"原因",from_assistant:"原医助",from_assistant_id:"原医助",to_assistant:"新医助",to_assistant_id:"新医助",interval:"间隔(秒)",level:"等级",channel:"渠道",message:"说明"},he=(s,e)=>{if(e==null||e==="")return"";if(typeof e=="object")return JSON.stringify(e);if(/_at$/.test(s)&&typeof e=="number"&&e>1e9){const i=new Date(e*1e3),_=y=>String(y).padStart(2,"0");return`${`${i.getFullYear()}-${_(i.getMonth()+1)}-${_(i.getDate())}`} ${_(i.getHours())}:${_(i.getMinutes())}`}return String(e)},j=s=>{const e=s.payload_arr;if(!e||typeof e!="object"||Array.isArray(e))return[];const i=[];for(const[_,r]of Object.entries(e)){if(`${_}_text`in e)continue;const y=he(_,r);y!==""&&i.push({key:_,label:ye[_]??_,value:y})}return i},ge=async s=>{c.value=s,O.value=!0,V.value=!0,w.value=[];try{const e=await ft({due_id:Number(s.id)}),i=Array.isArray(e)?e:(e==null?void 0:e.list)??(e==null?void 0:e.lists)??[];w.value=Array.isArray(i)?i:[]}finally{V.value=!1}},ke=s=>{const e=Number(s.diagnosis_id??0);e<=0||ee.push({path:"/tcm/diagnosis",query:{id:String(e)}})},xe=s=>{const e=new Map;for(const r of s)e.set(Number(r.id),{id:Number(r.id),pid:Number(r.pid),name:r.name,children:[]});const i=[];for(const r of s){const y=e.get(Number(r.id));Number(r.pid)>0&&e.has(Number(r.pid))?e.get(Number(r.pid)).children.push(y):i.push(y)}const _=r=>{var y;(y=r.children)!=null&&y.length?r.children.forEach(_):delete r.children};return i.forEach(_),i},Ne=async()=>{var i;const[s,e]=await Promise.allSettled([yt(),bt()]);s.status==="fulfilled"&&(R.value=Array.isArray(s.value)?s.value:[]),e.status==="fulfilled"&&(I.value=xe(((i=e.value)==null?void 0:i.rows)??[]))};return Re(()=>{Ne(),U()}),(s,e)=>{const i=Fe,_=Be,r=Pe,y=Me,Te=je,Ce=Ke,z=qe,Ee=rt,Ve=Ue,K=Je,f=Ge,Y=Qe,q=He,S=Xe,we=We,ze=it,Se=st,$e=tt,Le=lt,De=at,Oe=Ie("perms"),J=Ze;return o(),u("div",gt,[l(K,{class:"!border-none",shadow:"never"},{default:a(()=>[l(Ve,{inline:!0,class:"due-filter-form"},{default:a(()=>[l(r,{label:"医助"},{default:a(()=>[l(_,{modelValue:m.assistant_id,"onUpdate:modelValue":e[0]||(e[0]=t=>m.assistant_id=t),clearable:"",filterable:"",placeholder:"全部",class:"w-[160px]",onChange:h},{default:a(()=>[(o(!0),u(k,null,C(R.value,t=>(o(),g(i,{key:t.id,label:t.name,value:Number(t.id)},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),l(r,{label:"部门"},{default:a(()=>[l(y,{modelValue:m.dept_id,"onUpdate:modelValue":e[1]||(e[1]=t=>m.dept_id=t),data:I.value,placeholder:"全部(二中心)",clearable:"",filterable:"","check-strictly":"","node-key":"id","default-expand-all":!0,props:se,class:"w-[200px]",onChange:h},null,8,["modelValue","data"])]),_:1}),l(r,{label:"状态"},{default:a(()=>[l(_,{modelValue:m.state,"onUpdate:modelValue":e[2]||(e[2]=t=>m.state=t),clearable:"",placeholder:"全部",class:"w-[170px]",onChange:h},{default:a(()=>[(o(),u(k,null,C(te,t=>l(i,{key:t.value,label:t.label,value:t.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1}),l(r,{label:"开药天数"},{default:a(()=>[l(_,{modelValue:m.days_bucket,"onUpdate:modelValue":e[3]||(e[3]=t=>m.days_bucket=t),clearable:"",placeholder:"全部",class:"w-[120px]",onChange:h},{default:a(()=>[(o(!0),u(k,null,C(p(dt),t=>(o(),g(i,{key:t.value,label:t.label,value:t.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),l(r,{label:"延迟次数 ≥"},{default:a(()=>[l(Te,{modelValue:L.value,"onUpdate:modelValue":e[4]||(e[4]=t=>L.value=t),min:0,max:999,step:1,"step-strictly":"","controls-position":"right",placeholder:"不限",class:"!w-[120px]",onChange:ae},null,8,["modelValue"])]),_:1}),l(r,{label:"患者"},{default:a(()=>[l(Ce,{modelValue:m.keyword,"onUpdate:modelValue":e[5]||(e[5]=t=>m.keyword=t),placeholder:"患者姓名",clearable:"",class:"w-[160px]",onKeyup:Ye(h,["enter"]),onClear:h},null,8,["modelValue"])]),_:1}),l(r,null,{default:a(()=>[l(z,{type:"primary",onClick:h},{default:a(()=>[...e[8]||(e[8]=[b("查询",-1)])]),_:1}),l(z,{onClick:ne},{default:a(()=>[...e[9]||(e[9]=[b("重置",-1)])]),_:1}),l(Ee,{class:"ml-2.5","fetch-fun":p(G),params:m,"page-size":p(N).size,"export-hint":"导出范围与当前筛选一致(医助 / 部门 / 状态 / 开药天数 / 延迟次数 / 患者)"},null,8,["fetch-fun","params","page-size"])]),_:1})]),_:1}),e[10]||(e[10]=d("div",{class:"due-hint"}," 每位患者(诊单)一行,取最新有效业务订单为本轮周期:预计复诊日 = 用药起算日(签收 → 发货 → 下单)+ 开药天数; 到期仍无有效挂号 / 过号未面诊的行标红,持有医助登录后台会收到右下角弹窗。 「延迟次数」为医助在弹窗上点「延迟」的累计次数(越多说明越未跟进),「已联系」为填写患者承诺复诊日的次数, 「人工关闭」由医助填原因关闭、在此标记供主管复核。数据范围按角色数据权限收窄;状态按今天实时推导。 ",-1))]),_:1}),l(K,{class:"!border-none mt-3",shadow:"never"},{default:a(()=>[A((o(),g(we,{data:p(N).lists,size:"default",stripe:"","row-key":"id","row-class-name":oe},{default:a(()=>[l(f,{label:"患者","min-width":"120",fixed:"left"},{default:a(({row:t})=>[d("div",kt,n(t.patient_name||"—"),1),d("div",xt,"诊单 #"+n(t.diagnosis_id),1)]),_:1}),l(f,{label:"医助","min-width":"100"},{default:a(({row:t})=>[b(n(P(t)),1)]),_:1}),l(f,{label:"部门","min-width":"110","show-overflow-tooltip":""},{default:a(({row:t})=>[b(n(t.dept_name||"—"),1)]),_:1}),l(f,{label:"诊次",width:"110",align:"center"},{header:a(()=>[e[11]||(e[11]=d("span",null,"诊次",-1)),l(q,{placement:"top",effect:"dark",content:"患者当前已完成诊次 = 有效业务订单数 + 诊单诊次偏移,与复诊接诊率同口径;下一行为待复诊诊次"},{default:a(()=>[l(Y,{class:"col-hint"},{default:a(()=>[l(p(W))]),_:1})]),_:1})]),default:a(({row:t})=>[d("div",Nt,n(B(t)),1),Number(t.next_slot)>0?(o(),u("div",Tt," 待复诊第 "+n(t.next_slot)+" 诊 ",1)):v("",!0)]),_:1}),l(f,{label:"开药天数",width:"110",align:"center"},{default:a(({row:t})=>[Number(t.medication_days)>0?(o(),u(k,{key:0},[d("span",null,n(t.medication_days)+" 天",1),Number(t.rule_days)>0?(o(),g(S,{key:0,size:"small",type:"info",effect:"plain",class:"ml-1"},{default:a(()=>[b(n(t.rule_days)+" 档 ",1)]),_:2},1024)):v("",!0)],64)):(o(),u("span",Ct,"缺开药天数"))]),_:1}),l(f,{label:"预计复诊",width:"110"},{default:a(({row:t})=>[d("div",Et,n(t.due_date||"—"),1),t.anchor_date?(o(),u("div",Vt," 起算 "+n(p(ct)(t.anchor_date)),1)):v("",!0)]),_:1}),l(f,{label:"超期天数",width:"100",align:"center"},{default:a(({row:t})=>[d("span",{class:$(["overdue-cell",M(t).cls])},n(M(t).text),3)]),_:1}),l(f,{label:"状态","min-width":"150"},{default:a(({row:t})=>[l(S,{type:p(X)(t.state),effect:p(Q)(t.state),size:"small",class:$(p(H)(E(t)))},{default:a(()=>[b(n(F(t)),1)]),_:2},1032,["type","effect","class"]),Number(t.closed_state)===4?(o(),g(S,{key:0,size:"small",type:"info",effect:"plain",class:"ml-1"},{default:a(()=>[...e[12]||(e[12]=[b(" 人工关闭 ",-1)])]),_:1})):v("",!0)]),_:1}),l(f,{label:"延迟次数",width:"100",align:"center"},{header:a(()=>[e[13]||(e[13]=d("span",null,"延迟次数",-1)),l(q,{placement:"top",effect:"dark",content:"医助在到期弹窗上点「延迟」的累计次数;1~2 次 L1、3~4 次 L2、≥5 次 L3(居中强制模态)。换医助后清零"},{default:a(()=>[l(Y,{class:"col-hint"},{default:a(()=>[l(p(W))]),_:1})]),_:1})]),default:a(({row:t})=>[d("span",{class:$(["snooze-cell",ue(t)])},n(Number(t.snooze_count??0)),3),Number(t.escalation_level)>0?(o(),u("div",wt," 等级 L"+n(t.escalation_level),1)):v("",!0)]),_:1}),l(f,{label:"已联系",width:"80",align:"center"},{default:a(({row:t})=>[b(n(Number(t.contact_count??0)),1)]),_:1}),l(f,{label:"承诺日",width:"100"},{default:a(({row:t})=>[b(n(t.promised_date||"—"),1)]),_:1}),l(f,{label:"过号",width:"70",align:"center"},{default:a(({row:t})=>[b(n(Number(t.missed_count??0)),1)]),_:1}),l(f,{label:"关闭原因","min-width":"170","show-overflow-tooltip":""},{default:a(({row:t})=>[Number(t.closed_state)===4?(o(),u(k,{key:0},[d("span",null,n(de(t.handle_reason)),1),t.handle_remark?(o(),u("span",zt," :"+n(t.handle_remark),1)):v("",!0)],64)):Number(t.closed_state)>0?(o(),u("span",St,n(t.closed_state_text||"—"),1)):(o(),u("span",$t,"—"))]),_:1}),l(f,{label:"操作",width:"130",fixed:"right",align:"center"},{default:a(({row:t})=>[A((o(),g(z,{link:"",type:"primary",onClick:T=>ge(t)},{default:a(()=>[...e[14]||(e[14]=[b(" 流水 ",-1)])]),_:1},8,["onClick"])),[[Oe,["tcm.revisitDue/logs"]]]),l(z,{link:"",type:"primary",onClick:T=>ke(t)},{default:a(()=>[...e[15]||(e[15]=[b("去诊单",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[J,p(N).loading]]),d("div",Lt,[l(ze,{modelValue:p(N),"onUpdate:modelValue":e[6]||(e[6]=t=>et(N)?N.value=t:null),onChange:p(U)},null,8,["modelValue","onChange"])])]),_:1}),l(De,{modelValue:O.value,"onUpdate:modelValue":e[7]||(e[7]=t=>O.value=t),title:ce.value,direction:"rtl",size:"540px","destroy-on-close":""},{default:a(()=>[A((o(),u("div",Dt,[c.value?(o(),u("div",Ot,[d("div",At,[d("span",null,"医助:"+n(P(c.value)),1),d("span",null,n(B(c.value)),1),c.value.due_date?(o(),u("span",Rt,"预计复诊 "+n(c.value.due_date),1)):v("",!0)]),d("div",It,[l(S,{type:p(X)(c.value.state),effect:p(Q)(c.value.state),size:"small",class:$(p(H)(E(c.value)))},{default:a(()=>[b(n(F(c.value)),1)]),_:1},8,["type","effect","class"]),d("span",Ut,n(ie(c.value)),1)]),re(c.value)?(o(),u("div",Pt,[c.value.first_shown_at_text?(o(),u("span",Bt," 首次弹出 "+n(c.value.first_shown_at_text),1)):v("",!0),c.value.last_snoozed_at_text?(o(),u("span",Ft," 最近延迟 "+n(c.value.last_snoozed_at_text),1)):v("",!0),c.value.computed_at_text?(o(),u("span",Mt," 重算于 "+n(c.value.computed_at_text),1)):v("",!0)])):v("",!0)])):v("",!0),w.value.length?(o(),g($e,{key:1,class:"mt-3"},{default:a(()=>[(o(!0),u(k,null,C(w.value,t=>(o(),g(Se,{key:t.id,timestamp:t.create_time_text,placement:"top",type:fe(t.event),hollow:!pe(t.event)},{default:a(()=>[d("div",jt,[d("span",Kt,n(t.event_text||me(t.event)),1),d("span",Yt,n(ve(t)),1)]),d("div",qt,[d("span",null,"延迟 "+n(Number(t.snooze_count_after??0))+" 次",1),d("span",null,"等级 L"+n(Number(t.level_after??0)),1),d("span",null,n(be(t.overdue_days)),1)]),j(t).length?(o(),u("div",Jt,[(o(!0),u(k,null,C(j(t),T=>(o(),u("span",{key:T.key,class:"log-payload-chip"},n(T.label)+":"+n(T.value),1))),128))])):v("",!0)]),_:2},1032,["timestamp","type","hollow"]))),128))]),_:1})):V.value?v("",!0):(o(),g(Le,{key:2,description:"暂无流水","image-size":80}))])),[[J,V.value]])]),_:1},8,["modelValue","title"])])}}}),ns=vt(Gt,[["__scopeId","data-v-8639b29d"]]);export{ns as default};