import{G as Ae,F as Ie,K as Re,L as Pe,Z as Ue,h as Fe,A as Be,i as Me,M as je,N as Ke,O as Ye,r as Qe,d as qe,P as Ge,Q as He,a8 as Je,a9 as We,W as Ze,e as Xe}from"./element-plus-DDINy080.js";import{_ as et}from"./index.vue_vue_type_script_setup_true_lang-9cmfzJ44.js";import{_ as tt}from"./index.vue_vue_type_script_setup_true_lang-BKs2us-x.js";import{w as st}from"./@vue/runtime-dom-DDAG46FW.js";import{i as G}from"./@element-plus/icons-vue-CbYn5zW9.js";import{a as lt}from"./vue-router-QlpZ4wdW.js";import{N as at,O as H,Q as nt,S as ot,T as J,U as W,V as Z,W as it,X as rt,Y as ut,Z as dt,_ as ct}from"./index-CucNzNKR.js";import{x as _t}from"./stats-Bz24MGMf.js";import{o as mt}from"./tcm-GunznPcd.js";import{u as pt}from"./usePaging-DofycyjW.js";import{f as X,b as ft,as as vt,ak as o,I as u,a as l,aN as a,F as k,ap as E,G as g,O as b,J as d,aP as A,H as v,A as bt}from"./@vue/runtime-core-C6bnekPw.js";import{y as p,a as yt,n as x,r as ht}from"./@vue/reactivity-DiY1c2vO.js";import{Q as n,o as $}from"./@vue/shared-mAAVTE9n.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./lodash-D3kF6u-c.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-Dyen3QYL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.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 gt={class:"revisit-due-page"},kt={class:"cell-main"},xt={class:"cell-sub"},Nt={class:"cell-main"},Tt={key:0,class:"cell-sub"},Et={key:1,class:"text-missing"},Vt={class:"cell-main"},Ct={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"},It={key:0},Rt={class:"log-summary-row"},Pt={class:"cell-sub"},Ut={key:0,class:"log-summary-row cell-sub"},Ft={key:0},Bt={key:1},Mt={key:2},jt={class:"log-event"},Kt={class:"log-event-title"},Yt={class:"log-event-operator"},Qt={class:"log-event-meta"},qt={key:0,class:"log-event-payload"},Gt=X({name:"statsRevisitDue"}),Ht=X({...Gt,setup(Jt){const ee=lt(),te=[...at,{label:"人工关闭",value:"closed"}],I=x([]),R=x([]),se={value:"id",label:"name",children:"children"},m=ht({assistant_id:"",dept_id:"",state:"",days_bucket:"",min_snooze:"",keyword:""}),L=x(void 0),{pager:N,getLists:P,resetPage:le}=pt({fetchFun:H,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()},V=s=>it(s),oe=({row:s})=>rt(V(s)),U=s=>s.assistant_name||(Number(s.assistant_id)>0?`#${s.assistant_id}`:"—"),F=s=>{const e=Number(s.current_slot??0);return e>0?`第 ${e} 诊`:"未成交"},B=s=>ut(V(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),C=x(!1),c=x(null),w=x([]),ce=bt(()=>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,C.value=!0,w.value=[];try{const e=await dt({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{C.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([mt(),_t()]);s.status==="fulfilled"&&(I.value=Array.isArray(s.value)?s.value:[]),e.status==="fulfilled"&&(R.value=xe(((i=e.value)==null?void 0:i.rows)??[]))};return ft(()=>{Ne(),P()}),(s,e)=>{const i=Pe,_=Re,r=Ie,y=Ue,Te=Fe,Ee=Be,z=Me,Ve=tt,Ce=Ae,K=je,f=Ye,Y=qe,Q=Qe,S=Ge,we=Ke,ze=et,Se=We,$e=Je,Le=Ze,De=Xe,Oe=vt("perms"),q=He;return o(),u("div",gt,[l(K,{class:"!border-none",shadow:"never"},{default:a(()=>[l(Ce,{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,E(I.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:R.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,E(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,E(p(nt),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(Ee,{modelValue:m.keyword,"onUpdate:modelValue":e[5]||(e[5]=t=>m.keyword=t),placeholder:"患者姓名",clearable:"",class:"w-[160px]",onKeyup:st(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(Ve,{class:"ml-2.5","fetch-fun":p(H),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(U(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(G))]),_:1})]),_:1})]),default:a(({row:t})=>[d("div",Nt,n(F(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",Et,"缺开药天数"))]),_:1}),l(f,{label:"预计复诊",width:"110"},{default:a(({row:t})=>[d("div",Vt,n(t.due_date||"—"),1),t.anchor_date?(o(),u("div",Ct," 起算 "+n(p(ot)(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(Z)(t.state),effect:p(W)(t.state),size:"small",class:$(p(J)(V(t)))},{default:a(()=>[b(n(B(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(G))]),_: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"])),[[q,p(N).loading]]),d("div",Lt,[l(ze,{modelValue:p(N),"onUpdate:modelValue":e[6]||(e[6]=t=>yt(N)?N.value=t:null),onChange:p(P)},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(U(c.value)),1),d("span",null,n(F(c.value)),1),c.value.due_date?(o(),u("span",It,"预计复诊 "+n(c.value.due_date),1)):v("",!0)]),d("div",Rt,[l(S,{type:p(Z)(c.value.state),effect:p(W)(c.value.state),size:"small",class:$(p(J)(V(c.value)))},{default:a(()=>[b(n(B(c.value)),1)]),_:1},8,["type","effect","class"]),d("span",Pt,n(ie(c.value)),1)]),re(c.value)?(o(),u("div",Ut,[c.value.first_shown_at_text?(o(),u("span",Ft," 首次弹出 "+n(c.value.first_shown_at_text),1)):v("",!0),c.value.last_snoozed_at_text?(o(),u("span",Bt," 最近延迟 "+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,E(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",qt,[(o(!0),u(k,null,E(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})):C.value?v("",!0):(o(),g(Le,{key:2,description:"暂无流水","image-size":80}))])),[[q,C.value]])]),_:1},8,["modelValue","title"])])}}}),Fs=ct(Ht,[["__scopeId","data-v-4029e606"]]);export{Fs as default};