6 lines
54 KiB
JavaScript
6 lines
54 KiB
JavaScript
import{P as ka,Q as Na,af as Da,W as Sa,L as za,a2 as La,i as Ca,d as $a,J as Pa,m as Ma,l as Aa,a3 as Oa,a4 as Fa,R as Ia,M as Ra,N as Ta,r as Ea,X as Va,e as Ba,V as Ya,E as Oe}from"./element-plus-B7Dx6hR2.js";import{M as Ha,x as Ua,i as U}from"./@element-plus/icons-vue-C25ce6PD.js";import{H as Y}from"./vue-echarts-NHykWhhX.js";import{d as Wa,y as ye,a as qa,b as Ga,c as Ja,e as Qa,f as Xa,g as Za}from"./stats-Adoyw8Nj.js";import{d as Ka}from"./finance-BBlO9LdU.js";import{n as en}from"./tcm-D94ptrL6.js";import{u as tn,_ as an}from"./index-C21Ng0-O.js";import{f as nn,b as ln,ak as i,I as c,J as a,a as s,aN as u,F as $,ap as H,G as j,aP as W,O as m,H as v,A as L}from"./@vue/runtime-core-tF_2qJHK.js";import{Q as d,o as Fe}from"./@vue/shared-mAAVTE9n.js";import{y as z,n as y}from"./@vue/reactivity-BmZ-20sQ.js";import"./@vue/runtime-dom-CEiKlVMn.js";import"./lodash-D3kF6u-c.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./resize-detector-G6vbKCU7.js";import"./echarts-yVHyDRAS.js";import"./tslib-BDyQ-Jie.js";import"./zrender-C0YiHEZX.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-BjeWxBI0.js";import"./pinia-CTWOnonq.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-Da2f2eD_.js";import"./@vueuse/shared-Bl-RnC0s.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"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-Bm7NQW9r.js";const on={class:"yeji-page"},sn={class:"filter-surface"},rn={class:"filter-row filter-row--top"},dn={class:"filter-field"},un={class:"channel-opt-row"},cn={class:"opt-name"},mn={class:"opt-count"},_n={class:"filter-field filter-field--wide"},pn={class:"filter-select filter-select--dept filter-dept-tree-wrap"},fn={class:"filter-field filter-field--date-top"},vn={class:"filter-actions"},yn={class:"filter-quick"},hn={class:"date-pills",role:"group","aria-label":"快捷日期"},gn=["onClick"],bn={class:"yeji-charts-stack"},wn={key:0,class:"yeji-chart-block"},xn={class:"yeji-chart-block__title"},jn={key:0,class:"yeji-chart-block__sub"},kn={class:"yeji-chart-panel"},Nn={class:"yeji-chart-panel"},Dn={class:"yeji-chart-panel"},Sn={class:"yeji-chart-panel"},zn={class:"yeji-chart-panel"},Ln={key:0,class:"yeji-chart-block"},Cn={class:"yeji-chart-block__title"},$n={class:"yeji-chart-panel"},Pn={class:"yeji-chart-panel"},Mn={class:"yeji-chart-block__title"},An={key:0,class:"yeji-chart-block__sub"},On={class:"yeji-chart-block__sub yeji-chart-block__sub--muted"},Fn={class:"yeji-chart-panel"},In={class:"doctor-daily-card__head"},Rn={class:"doctor-daily-card__title-block"},Tn={key:0,class:"doctor-daily-card__range"},En={class:"doctor-daily-card__tools"},Vn={key:1,class:"tp-wrap"},Bn={key:0,class:"tp-card"},Yn={class:"tp-card__title"},Hn={class:"tp-card__body"},Un={class:"tp-section__head"},Wn={class:"tp-section__name"},qn={class:"tp-section__target"},Gn={class:"tp-table"},Jn={class:"tp-val"},Qn={key:0},Xn={class:"tp-val"},Zn={key:1},Kn={class:"tp-val"},el={class:"tp-val tp-val--total"},tl={class:"tp-val"},al={class:"tables-wrap"},nl={key:0,class:"empty-tip"},ll={class:"yeji-table__header"},ol={class:"yeji-table__body"},sl={style:{"max-width":"320px","line-height":"1.7","font-size":"12px"}},rl={key:0,class:"col-completed"},il={key:1,class:"col-completed"},dl={style:{"max-width":"320px","line-height":"1.7","font-size":"12px"}},ul={key:2,class:"col-completed"},cl={style:{"max-width":"280px","line-height":"1.7","font-size":"12px"}},ml={style:{"max-width":"320px","line-height":"1.7","font-size":"12px"}},_l=["onClick"],pl={class:"col-dept"},fl=["onClick"],vl={key:0,class:"yeji-lead-cell--link"},yl={key:0,class:"col-completed"},hl={key:1,class:"col-completed"},gl={key:2,class:"col-completed"},bl={class:"total-row"},wl={key:0,class:"col-completed"},xl={key:1,class:"col-completed"},jl={key:2,class:"col-completed"},kl={class:"yeji-table__foot"},Nl={key:0},Dl={key:1},Sl={key:2,class:"leaderboards-wrap"},zl={class:"leaderboard-hint"},Ll={class:"muted"},Cl={class:"tables-wrap"},$l={key:0,class:"yeji-table leaderboard-table"},Pl={class:"yeji-table__header"},Ml={key:0,class:"leaderboard-sub"},Al={class:"yeji-table__body"},Ol=["onClick"],Fl={class:"col-rank"},Il={class:"col-abbr"},Rl={class:"col-name"},Tl={class:"col-consult"},El={class:"col-deal"},Vl={key:0,class:"empty-tip leaderboard-empty"},Bl={class:"yeji-order-drawer__header"},Yl={class:"yeji-order-drawer__heading"},Hl={class:"yeji-order-drawer__sub"},Ul={class:"yeji-order-drawer__shell"},Wl={class:"yeji-order-drawer__stats",role:"region","aria-label":"订单汇总"},ql={class:"yeji-order-drawer__stat-card"},Gl={class:"yeji-order-drawer__stat-value"},Jl={class:"yeji-order-drawer__stat-card"},Ql={class:"yeji-order-drawer__stat-value"},Xl={class:"yeji-order-drawer__stat-card yeji-order-drawer__stat-card--accent"},Zl={class:"yeji-order-drawer__stat-value yeji-order-drawer__stat-value--money"},Kl={key:0,class:"yeji-order-drawer__stat-card yeji-order-drawer__stat-card--muted"},eo={class:"yeji-order-drawer__stat-value"},to={class:"yeji-order-drawer__body"},ao={class:"yeji-order-amt"},no={class:"yeji-order-drawer__pager"},lo={class:"yeji-unassigned-dialog__head"},oo={class:"yeji-unassigned-dialog__sub"},so={key:0,class:"yeji-unassigned-dialog__note"},ro={class:"yeji-unassigned-dialog__body"},io={class:"yeji-unassigned-dialog__head"},uo={class:"yeji-unassigned-dialog__sub"},co={key:0,class:"yeji-unassigned-dialog__note"},mo={class:"yeji-unassigned-dialog__body"},_o={key:2,class:"yeji-leadlines-dialog__pager"},po="stats.doctorDailyStats/overview",fo=nn({__name:"yeji",setup(vo){const kt={value:"id",label:"name",children:"children"};function Nt(t){if(!t.length)return[];const e=new Map;for(const h of t)e.set(h.id,{...h,children:[]});const n=[];for(const h of t){const p=e.get(h.id),b=Number(h.pid);b>0&&e.has(b)?e.get(b).children.push(p):n.push(p)}const o=h=>{var p;(p=h.children)!=null&&p.length?h.children.forEach(o):delete h.children};n.forEach(o);const r=h=>{var p;h.sort((b,O)=>{const F=b.name.includes("中心")?-1:1,f=O.name.includes("中心")?-1:1;return F!==f?F-f:b.id-O.id});for(const b of h)(p=b.children)!=null&&p.length&&r(b.children)};return r(n),n}const q=y(!1),he=y([]),Ie=y(!1),Dt=L(()=>Nt(he.value)),M=y([]),Re=y([]),Te=y(!1),P=y(""),I=y(null),ae=y([]),k=y(null),J=y(!1),Ee=y(!1),ne=y(!1),tt=y(""),ce=y(""),le=y([]),Ve=y(!1),Q=y(!1),at=y(""),me=y(""),oe=y([]),_e=y(0),pe=y(1),ge=y(20),nt=y(null),lt=y("table"),St=tn(),se=L(()=>(St.perms||[]).some(e=>e==="*"||e===po)),ot=L(()=>{var t;return(((t=k.value)==null?void 0:t.leaderboards)??[]).filter(e=>e.rows.length>0)});function st(t){return t.rows.some(e=>e.dept_id>0&&(Number(e.lead_count)>0||Number(e.consult_count)>0||Number(e.deal_order_count)>0||Number(e.performance_amount)>0||Number(e.completed_performance_amount)>0))}const re=y(!1),R=y([]),ie=y({}),be=y(null),we=L(()=>{const t=be.value;return!(t!=null&&t.start)||!(t!=null&&t.end)?"":t.start===t.end?`区间 ${t.start}`:`区间 ${t.start} ~ ${t.end}`}),Be=L(()=>R.value.some(t=>Number(t.deal_amount??0)>0)),Ye=L(()=>R.value.some(t=>Number(t.system_prescription_count??0)>0||Number(t.manual_prescription_count??0)>0)),zt=L(()=>{if(se.value&&(Be.value||Ye.value||He.value||Ue.value||We.value))return!0;for(const t of ae.value)if(st(t))return!0;return ot.value.length>0}),He=L(()=>{const t=ie.value;return Number(t.appointment_completed??0)+Number(t.appointment_missed??0)+Number(t.appointment_cancelled??0)>0}),Lt=L(()=>{const t=ie.value,e=[{value:Number(t.appointment_completed??0),name:"挂号完成"},{value:Number(t.appointment_missed??0),name:"过号"},{value:Number(t.appointment_cancelled??0),name:"取消"}].filter(n=>n.value>0);return{color:["#0d9488","#d97706","#94a3b8"],tooltip:{trigger:"item",formatter:"{b}: {c} ({d}%)"},legend:{bottom:0,type:"scroll",textStyle:{fontSize:10}},series:[{name:"挂号",type:"pie",radius:["42%","68%"],center:["50%","46%"],avoidLabelOverlap:!0,itemStyle:{borderRadius:6,borderColor:"#fff",borderWidth:2},label:{formatter:`{b}
|
||
{c}`,fontSize:11},data:e}]}}),Ue=L(()=>R.value.filter(t=>Number(t.deal_order_count??0)>0&&Number(t.deal_amount??0)>0).length>=2),Ct=L(()=>{const t=R.value.filter(o=>Number(o.deal_order_count??0)>0&&Number(o.deal_amount??0)>0),e=Math.max(...t.map(o=>Number(o.deal_amount)),1),n=t.map(o=>{const r=Number(o.deal_amount);return{name:String(o.doctor_name||"—"),value:[Number(o.deal_order_count),r],symbolSize:12+Math.sqrt(r/e)*26}});return{color:["#2563eb"],tooltip:{trigger:"item",formatter:o=>{var h;const r=(h=o.data)==null?void 0:h.value;return Array.isArray(r)?`${o.data.name}<br/>接诊诊单:${r[0]}<br/>金额:${Number(r[1]).toLocaleString("zh-CN",{minimumFractionDigits:2,maximumFractionDigits:2})} 元`:""}},grid:{left:48,right:24,top:28,bottom:32,containLabel:!0},xAxis:{type:"value",name:"接诊诊单",nameLocation:"middle",nameGap:28,splitLine:{lineStyle:{type:"dashed",opacity:.55}}},yAxis:{type:"value",name:"成交金额",nameLocation:"middle",nameGap:40,splitLine:{lineStyle:{type:"dashed",opacity:.55}}},series:[{type:"scatter",data:n}]}}),We=L(()=>R.value.filter(e=>Number(e.deal_amount??0)+Number(e.deal_order_count??0)+Number(e.system_prescription_count??0)+Number(e.manual_prescription_count??0)>0).length>=2),$t=L(()=>{const t=[...R.value].filter(f=>Number(f.deal_amount??0)+Number(f.deal_order_count??0)+Number(f.system_prescription_count??0)+Number(f.manual_prescription_count??0)>0).sort((f,N)=>Number(N.deal_amount)-Number(f.deal_amount)).slice(0,5);if(t.length<2)return{radar:{indicator:[]},series:[{type:"radar",data:[]}]};const e=f=>{const N=String(f.doctor_name||"—");return N.length>7?`${N.slice(0,7)}…`:N},n=f=>Number(f.system_prescription_count??0)+Number(f.manual_prescription_count??0),o=f=>{const N=Number(f.avg_deal_amount);if(Number.isFinite(N)&&N>0)return N;const B=Number(f.deal_order_count);return B>0?Number(f.deal_amount)/B:0},r=Math.max(...t.map(f=>Number(f.deal_amount)),1e-9),h=Math.max(...t.map(f=>Number(f.deal_order_count)),1e-9),p=Math.max(...t.map(n),1e-9),b=Math.max(...t.map(f=>Number(f.appointment_completed??0)),1e-9),O=Math.max(...t.map(o),1e-9),F=t.map(f=>({name:e(f),value:[Number(f.deal_amount)/r*100,Number(f.deal_order_count)/h*100,n(f)/p*100,Number(f.appointment_completed??0)/b*100,o(f)/O*100]}));return{color:["#2563eb","#0d9488","#d97706","#7c3aed","#64748b"],tooltip:{trigger:"item"},legend:{bottom:0,type:"scroll",textStyle:{fontSize:10}},radar:{indicator:[{name:"成交金额",max:100},{name:"接诊诊单",max:100},{name:"开方量",max:100},{name:"挂号完成",max:100},{name:"客单价",max:100}],radius:"58%",center:["50%","48%"],splitNumber:4,axisName:{fontSize:10,color:"#64748b"}},series:[{type:"radar",data:F,emphasis:{lineStyle:{width:3}}}]}}),Pt=L(()=>{const t=[...R.value].filter(o=>Number(o.deal_amount??0)>0).sort((o,r)=>Number(r.deal_amount)-Number(o.deal_amount)).slice(0,20),e=t.map(o=>{const r=String(o.doctor_name||"—");return r.length>10?`${r.slice(0,10)}…`:r}),n=t.map(o=>Number(o.deal_amount??0));return{color:["#2563eb"],tooltip:{trigger:"axis",axisPointer:{type:"shadow"},valueFormatter:o=>`${o.toLocaleString("zh-CN",{minimumFractionDigits:2,maximumFractionDigits:2})} 元`},grid:{left:8,right:16,top:28,bottom:8,containLabel:!0},xAxis:{type:"value",axisLabel:{fontSize:11},splitLine:{lineStyle:{type:"dashed",opacity:.6}}},yAxis:{type:"category",data:[...e].reverse(),axisLabel:{fontSize:11}},series:[{name:"成交金额",type:"bar",data:[...n].reverse(),barMaxWidth:22,itemStyle:{borderRadius:[0,6,6,0]}}]}}),Mt=L(()=>{const t=[...R.value].filter(n=>Number(n.system_prescription_count??0)+Number(n.manual_prescription_count??0)>0).sort((n,o)=>Number(o.system_prescription_count??0)+Number(o.manual_prescription_count??0)-(Number(n.system_prescription_count??0)+Number(n.manual_prescription_count??0))).slice(0,14),e=t.map(n=>{const o=String(n.doctor_name||"—");return o.length>6?`${o.slice(0,6)}…`:o});return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"}},legend:{top:0,textStyle:{fontSize:11}},grid:{left:44,right:16,top:32,bottom:e.length>10?72:28},xAxis:{type:"category",data:e,axisLabel:{rotate:e.length>8?32:0,fontSize:10}},yAxis:{type:"value",splitLine:{lineStyle:{type:"dashed",opacity:.6}}},series:[{name:"系统开方",type:"bar",stack:"rx",barMaxWidth:18,data:t.map(n=>Number(n.system_prescription_count??0)),itemStyle:{color:"#2563eb"}},{name:"手动开方",type:"bar",stack:"rx",barMaxWidth:18,data:t.map(n=>Number(n.manual_prescription_count??0)),itemStyle:{color:"#d97706"}}]}});function At(){var e,n;const t={};if(P.value&&(t.channel_code=P.value),(e=I.value)!=null&&e[0]&&((n=I.value)!=null&&n[1]))t.start_date=I.value[0],t.end_date=I.value[1];else{const o=Ce(new Date);t.start_date=o,t.end_date=o}return t}function xe(t){return Number(t??0).toLocaleString("zh-CN",{minimumFractionDigits:2,maximumFractionDigits:2})}function Ot(t){const e=ie.value,n=[];return t.columns.forEach((o,r)=>{if(r===0){n[r]="合计";return}switch(o.property){case"system_prescription_count":n[r]=String(e.system_prescription_count??0);break;case"manual_prescription_count":n[r]=String(e.manual_prescription_count??0);break;case"deal_amount":n[r]=`¥ ${xe(e.deal_amount)}`;break;case"deal_order_count":n[r]=String(e.deal_order_count??0);break;case"avg_deal_amount":n[r]=e.avg_deal_amount!=null?`¥ ${xe(e.avg_deal_amount)}`:"—";break;case"appointment_completed":n[r]=String(e.appointment_completed??0);break;case"appointment_missed":n[r]=String(e.appointment_missed??0);break;case"appointment_cancelled":n[r]=String(e.appointment_cancelled??0);break;default:n[r]=""}}),n}async function rt(){re.value=!0;try{const t=await Wa(At());R.value=(t==null?void 0:t.rows)??[],ie.value=(t==null?void 0:t.total)??{},t!=null&&t.start_date&&(t!=null&&t.end_date)&&(be.value={start:t.start_date,end:t.end_date})}catch{R.value=[],ie.value={},be.value=null}finally{re.value=!1}}const je=y(!1),X=y(!1),qe=y(""),Ge=y(""),Z=y([]),ke=y(0),K=y(1),Ne=y(15),Je=y(null),De=y(null),Ft=L(()=>{const t=De.value;if(!t)return null;const e=t.stats_order_amount_performance??t.stats_order_amount_not_cancelled;if(e==null||e==="")return null;const n=Number(e);return Number.isFinite(n)?n:null}),it=L(()=>{const t=De.value;if(!t||t.stats_yeji_consult_count===void 0||t.stats_yeji_consult_count===null)return null;const e=Number(t.stats_yeji_consult_count);return Number.isFinite(e)?e:null}),It=L(()=>Z.value.reduce((t,e)=>t+Number(e.amount??0),0)),de=y(null),Se=y(!1);function Rt(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function Tt(t){const[e,n]=t.split("-").map(Number);return new Date(e,n,0).getDate()}async function Et(){var t,e,n,o;Se.value=!0,de.value=null;try{let r=function(_,D=0){const S=[];for(const C of _??[])S.push({node:C,depth:D}),S.push(...r(C.children??[],D+1));return S},h=function(_){const D=[],S=[_];for(;S.length;){const C=S.shift();for(const G of he.value)Number(G.pid)===C&&(D.push(G.id),S.push(G.id))}return D},p=function(_,D){const S=new Map;for(const C of(_==null?void 0:_.rows)??[])S.set(Number(C.dept_id),Number(C[D]??0));return S};const b=Rt(),O=await Ka({year_month:b}),F=(O==null?void 0:O.rows)??[];if(!F.length)return;const N=r(F).filter(_=>_.depth>=1&&Number(_.node.target_amount)>0).map(_=>_.node);if(!N.length)return;const B=new Set,$e=N.map(_=>{const D=Number(_.dept_id),S=h(D),C=S.length?S:[D];return C.forEach(G=>B.add(G)),{dept_id:D,dept_name:String(_.dept_name),target_amount:Number(_.target_amount),totalIds:C}});if(!B.size)return;const g=Re.value.flatMap(_=>_.channels),ee=(t=g.find(_=>_.channel_name.includes("自媒体1")))==null?void 0:t.channel_code,T=(e=g.find(_=>_.channel_name.includes("自媒体3")))==null?void 0:e.channel_code,Pe=(n=g.find(_=>_.channel_name.includes("自媒体4")))==null?void 0:n.channel_code,te=Array.from(B).join(","),[Me,fe,E,l]=await Promise.all([ye({dept_ids:te}),ee?ye({dept_ids:te,channel_code:ee}):Promise.resolve(null),T?ye({dept_ids:te,channel_code:T}):Promise.resolve(null),Pe?ye({dept_ids:te,channel_code:Pe}):Promise.resolve(null)]),w=_=>{var D;return((_==null?void 0:_.tables)??[]).find(S=>String(S.label).includes("月"))??((D=_==null?void 0:_.tables)==null?void 0:D[0])},x=_=>{var D,S;return((_==null?void 0:_.tables)??[]).find(C=>String(C.label).includes("昨"))??((S=_==null?void 0:_.tables)==null?void 0:S[((D=_==null?void 0:_.tables)==null?void 0:D.length)-1])},Ae=p(w(Me),"performance_amount"),fa=p(x(Me),"performance_amount"),bt=fe?p(w(fe),"completed_performance_amount"):null,wt=E?p(w(E),"completed_performance_amount"):null,xt=l?p(w(l),"completed_performance_amount"):null,ve=(_,D)=>D.reduce((S,C)=>S+(_.get(C)??0),0),Ke=new Date,va=Tt(b),ya=Ke.getDate(),ha=$e.map(_=>{const D=ve(Ae,_.totalIds),S=ve(fa,_.totalIds),C=bt?ve(bt,_.totalIds):null,G=wt?ve(wt,_.totalIds):null,jt=xt?ve(xt,_.totalIds):null,et=G!==null||jt!==null?(G??0)+(jt??0):null,xa=Math.round(_.target_amount*(ya/va)*100)/100,ja=_.target_amount>0?D/_.target_amount:null;return{dept_id:_.dept_id,dept_name:_.dept_name,target_amount:_.target_amount,total_amount:D,yesterday_amount:S,douyin_amount:C&&C>0?C:null,tuifen_amount:et&&et>0?et:null,target_progress:xa,completion_rate:ja}}),ga=((o=F[0])==null?void 0:o.dept_name)??"",ba=Ke.getMonth()+1,wa=Ke.getDate();de.value={title:`${ga}诊金-${ba}.${wa}`,sections:ha}}catch{}finally{Se.value=!1}}const Vt=L(()=>{var e;const t=(e=k.value)==null?void 0:e.leaderboards;return t?t.filter(n=>n.rows.length>0).length:0}),dt=[{text:"昨天",value:()=>{const t=new Date;return t.setDate(t.getDate()-1),[t,t]}},{text:"最近七天",value:()=>{const t=new Date,e=new Date;return e.setDate(e.getDate()-6),[e,t]}},{text:"本月",value:()=>{const t=new Date;return[new Date(t.getFullYear(),t.getMonth(),1),t]}},{text:"今日",value:()=>{const t=new Date;return[t,t]}},{text:"本周",value:()=>{const t=new Date,e=new Date,n=e.getDay()||7;return e.setDate(e.getDate()-(n-1)),[e,t]}},{text:"上月",value:()=>{const t=new Date,e=new Date(t.getFullYear(),t.getMonth()-1,1),n=new Date(t.getFullYear(),t.getMonth(),0);return[e,n]}}];function Bt(t){const e=t.value();I.value=[Ce(e[0]),Ce(e[1])],ue()}async function Yt(){Ie.value=!0;try{const t=await qa();he.value=(t||[]).sort((e,n)=>{const o=e.name.includes("中心")?-1:1,r=n.name.includes("中心")?-1:1;return o!==r?o-r:e.id-n.id})}catch{}finally{Ie.value=!1}}async function Ht(){Te.value=!0;try{const t=await Ga(),e=(t==null?void 0:t.groups)||[];Re.value=e}catch{}finally{Te.value=!1}}async function ut(t){J.value=!0;try{const e={start_date:t.start,end_date:t.end};M.value.length>0&&(e.dept_ids=M.value.join(",")),P.value&&(e.channel_code=P.value);const n=await Qa(e);k.value={start_date:n.start_date,end_date:n.end_date,channel_code:n.channel_code||"",channel_name:n.channel_name||"",channel_filter_note:n.channel_filter_note||"",range_note:n.range_note||"",leaderboards:n.leaderboards||[]}}catch{k.value=null}finally{J.value=!1}}async function ue(){q.value=!0,k.value=null;try{const t={};if(M.value.length>0&&(t.dept_ids=M.value.join(",")),P.value&&(t.channel_code=P.value),I.value&&I.value[0]&&I.value[1]){const[o,r]=I.value,h={...t,start_date:o,end_date:r},p=await Ja(h);ae.value=[{label:o===r?o:`${o} ~ ${r}`,start_date:p.start_date,end_date:p.end_date,channel_code:p.channel_code||"",channel_name:p.channel_name||"",channel_group:p.channel_group||"",channel_filter_note:p.channel_filter_note||"",rows:p.rows||[],total:p.total}],await ut({start:p.start_date,end:p.end_date});return}const e=await ye(t);ae.value=((e==null?void 0:e.tables)||[]).map(o=>({label:o.label,start_date:o.start_date,end_date:o.end_date,channel_code:o.channel_code||"",channel_name:o.channel_name||"",channel_group:o.channel_group||"",channel_filter_note:o.channel_filter_note||"",rows:o.rows||[],total:o.total}));const n=Ce(new Date);await ut({start:n,end:n})}catch(t){Oe.error((t==null?void 0:t.msg)||(t==null?void 0:t.message)||"加载失败")}finally{q.value=!1,se.value?rt():(R.value=[],ie.value={},be.value=null)}}function Ut(){M.value=[],I.value=null,P.value="",ue()}function Wt(t){return t<=0?!1:he.value.some(e=>Number(e.pid)===t)}function qt(t){return{1:"待双审通过",2:"待发货",3:"已完成",4:"已取消",5:"已发货",6:"已签收",7:"进行中",8:"暂不制药",9:"拒收",10:"退款",11:"保留药方",12:"制药缓发"}[Number(t)]??"—"}function ct(t){return t==null||!Number.isFinite(Number(t))?"—":Number(t).toLocaleString("zh-CN",{minimumFractionDigits:2,maximumFractionDigits:2})}function Gt(t){return(K.value-1)*Ne.value+t+1}function Jt(t){if(t==null||t==="")return"—";const e=Number(t);if(Number.isFinite(e)&&e>=1e9&&e<1e15){const o=e<1e12?e*1e3:e,r=new Date(o);if(!Number.isNaN(r.getTime())){const h=r.getFullYear(),p=String(r.getMonth()+1).padStart(2,"0"),b=String(r.getDate()).padStart(2,"0"),O=String(r.getHours()).padStart(2,"0"),F=String(r.getMinutes()).padStart(2,"0");return`${h}-${p}-${b} ${O}:${F}`}}const n=String(t);return n.length>=16?n.slice(0,16):n}async function ze(){const t=Je.value;if(t){X.value=!0;try{const e={page_no:K.value,page_size:Ne.value,start_time:`${t.start} 00:00:00`,end_time:`${t.end} 23:59:59`,exclude_fulfillment_cancelled:1,yeji_order_drawer:1};t.mode==="dept"?e.assistant_dept_id=t.deptId:e.assistant_id=t.assistantId;const n=await en(e);Z.value=Array.isArray(n==null?void 0:n.lists)?n.lists:[],ke.value=Number((n==null?void 0:n.count)??0),De.value=n!=null&&n.extend&&typeof n.extend=="object"?n.extend:null}catch(e){Oe.error((e==null?void 0:e.msg)||(e==null?void 0:e.message)||"加载业务订单失败"),Z.value=[],ke.value=0,De.value=null}finally{X.value=!1}}}function Qt(t,e){Je.value={mode:"dept",deptId:e.dept_id,deptName:e.dept_name,start:t.start_date,end:t.end_date},qe.value=`业务订单 · ${e.dept_name}`,Ge.value=`创建时间:${t.start_date} ~ ${t.end_date} · 诊单医助所属部门 · 不含履约已取消`,K.value=1,je.value=!0,ze()}function Xt(t,e,n){Je.value={mode:"assistant",assistantId:t.admin_id,assistantName:t.name,start:e,end:n},qe.value=`业务订单 · ${t.name}`,Ge.value=`创建时间:${e} ~ ${n} · 诊单医助 · 不含履约已取消`,K.value=1,je.value=!0,ze()}function Zt(t){K.value=t,ze()}function Kt(t){Ne.value=t,K.value=1,ze()}function Qe(t){return t.dept_id<=0&&t.dept_name==="未归属中心"}function mt(t){const e=[`区间:${t.start_date} ~ ${t.end_date}`];return P.value&&e.push(`渠道:${t.channel_name||P.value}`),M.value.length>0&&e.push(`已选展示部门 ${M.value.length} 个`),e.join(" · ")}async function ea(t){tt.value=mt(t),ce.value="",le.value=[],Ee.value=!0,ne.value=!0;try{const e={start_date:t.start_date,end_date:t.end_date};M.value.length>0&&(e.dept_ids=M.value.join(",")),P.value&&(e.channel_code=P.value);const n=await Xa(e);le.value=Array.isArray(n==null?void 0:n.rows)?n.rows:[],ce.value=typeof(n==null?void 0:n.note)=="string"?n.note:""}catch(e){Oe.error((e==null?void 0:e.msg)||(e==null?void 0:e.message)||"加载未归属拆解失败"),le.value=[],ce.value=""}finally{ne.value=!1}}function ta(t,e,n){n.dept_id<=0||Number(n.lead_count)<=0||(t.stopPropagation(),aa(e,n))}async function Xe(){const t=nt.value;if(!t)return;const{tb:e,row:n}=t;Q.value=!0;try{const o={start_date:e.start_date,end_date:e.end_date,dept_id:n.dept_id,page:pe.value,page_size:ge.value};M.value.length>0&&(o.dept_ids=M.value.join(",")),P.value&&(o.channel_code=P.value);const r=await Za(o);oe.value=Array.isArray(r==null?void 0:r.lists)?r.lists:[],_e.value=Number((r==null?void 0:r.count)??0),me.value=typeof(r==null?void 0:r.note)=="string"?r.note:""}catch(o){Oe.error((o==null?void 0:o.msg)||(o==null?void 0:o.message)||"加载进线明细失败"),oe.value=[],_e.value=0,me.value=""}finally{Q.value=!1}}async function aa(t,e){nt.value={tb:t,row:e},at.value=`${e.dept_name} · ${mt(t)}`,me.value="",oe.value=[],_e.value=0,pe.value=1,ge.value=20,Ve.value=!0,await Xe()}function na(t){pe.value=t,Xe()}function la(t){ge.value=t,pe.value=1,Xe()}function oa(t,e){if(Qe(e)){ea(t);return}if(!(e.dept_id<=0)){if(Wt(e.dept_id)){M.value=[e.dept_id],ue();return}Qt(t,e)}}function sa(t){if(!t||t.admin_id<=0||!k.value)return;const{start_date:e,end_date:n}=k.value;Xt(t,e,n)}function _t(t){const e=t.channel_name?` · ${t.channel_name}`:"";return`${t.label}${e}`}function ra(t){const e=t.rows.filter(p=>p.dept_id>0),n=e.map(p=>p.dept_name.length>10?`${p.dept_name.slice(0,10)}…`:p.dept_name),o=["#64748b","#38bdf8","#6366f1"],r=[{name:"进线",type:"bar",data:e.map(p=>p.lead_count),yAxisIndex:0,barMaxWidth:16},{name:"接诊",type:"bar",data:e.map(p=>p.consult_count),yAxisIndex:0,barMaxWidth:16},{name:"成交单",type:"bar",data:e.map(p=>p.deal_order_count),yAxisIndex:0,barMaxWidth:16},{name:"合计业绩",type:"bar",data:e.map(p=>p.performance_amount),yAxisIndex:1,barMaxWidth:14,itemStyle:{color:"#d97706"}}];t.channel_name&&r.push({name:`${t.channel_name}业绩`,type:"bar",data:e.map(p=>p.completed_performance_amount),yAxisIndex:1,barMaxWidth:14,itemStyle:{color:"#0d9488"}});const h=e.length>10;return{color:[...o,"#d97706","#0d9488"],tooltip:{trigger:"axis",axisPointer:{type:"cross"}},legend:{top:8,type:"scroll",textStyle:{fontSize:11}},grid:{left:52,right:52,top:48,bottom:h?56:28,containLabel:!1},dataZoom:h?[{type:"slider",bottom:4,start:0,end:Math.min(100,Math.ceil(12/Math.max(e.length,1)*100))}]:[],xAxis:{type:"category",data:n,axisLabel:{rotate:n.length>8?28:0,fontSize:10}},yAxis:[{type:"value",name:"数量",splitLine:{lineStyle:{type:"dashed",opacity:.55}}},{type:"value",name:"金额",splitLine:{show:!1}}],series:r}}function ia(t,e){const n=[...t.rows].sort((o,r)=>Number(r.fee_amount)-Number(o.fee_amount)).slice(0,15);return{color:["#2563eb"],tooltip:{trigger:"axis",axisPointer:{type:"shadow"},valueFormatter:o=>`${Number(o).toLocaleString("zh-CN")} 元`},grid:{left:8,right:20,top:12,bottom:8,containLabel:!0},xAxis:{type:"value",splitLine:{lineStyle:{type:"dashed",opacity:.6}}},yAxis:{type:"category",data:n.map(o=>o.name.length>8?`${o.name.slice(0,8)}…`:o.name).reverse(),axisLabel:{fontSize:11}},series:[{name:"诊金",type:"bar",data:n.map(o=>Number(o.fee_amount??0)).reverse(),barMaxWidth:20,itemStyle:{borderRadius:[0,6,6,0]}}]}}function pt(t){return t.rows.some(e=>Number(e.fee_amount)>0)}function da(t,e){const o=[...t.rows].filter(r=>Number(r.fee_amount)>0).sort((r,h)=>Number(h.fee_amount)-Number(r.fee_amount)).slice(0,10).map(r=>({name:r.name.length>6?`${r.name.slice(0,6)}…`:r.name,value:Number(r.fee_amount)}));return{color:["#2563eb","#0d9488","#d97706","#7c3aed","#64748b","#0891b2","#65a30d","#c026d3","#ea580c","#4f46e5"],tooltip:{trigger:"item",formatter:"{b}: {c} 元 ({d}%)"},legend:{type:"scroll",bottom:0,textStyle:{fontSize:9}},series:[{name:"诊金",type:"pie",radius:["38%","64%"],center:["50%","42%"],data:o,itemStyle:{borderRadius:5,borderColor:"#fff",borderWidth:2},label:{formatter:`{b}
|
||
{d}%`,fontSize:10}}]}}function ft(t){return Number(t.total.lead_count)+Number(t.total.consult_count)+Number(t.total.deal_order_count)>0}function ua(t){const e=Number(t.total.lead_count??0),n=Number(t.total.consult_count??0),o=Number(t.total.deal_order_count??0);return{tooltip:{trigger:"item",formatter:"{b}: {c}"},color:["#2563eb","#38bdf8","#0d9488"],series:[{type:"funnel",left:"8%",width:"84%",minSize:"12%",sort:"none",gap:6,label:{show:!0,position:"inside",formatter:`{b}
|
||
{c}`,fontSize:11},data:[{value:e,name:"进线"},{value:n,name:"接诊"},{value:o,name:"成交单"}]}]}}function vt(t){return t.rows.some(e=>e.dept_id>0&&Number(e.performance_amount)>0)}function ca(t){const e=t.rows.filter(r=>r.dept_id>0&&Number(r.performance_amount)>0).sort((r,h)=>Number(h.performance_amount)-Number(r.performance_amount));if(!e.length)return{series:[{type:"pie",data:[]}]};const o=e.slice(0,10).map(r=>({name:r.dept_name.length>8?`${r.dept_name.slice(0,8)}…`:r.dept_name,value:Number(r.performance_amount)}));if(e.length>10){const r=e.slice(10).reduce((h,p)=>h+Number(p.performance_amount),0);r>0&&o.push({name:"其它",value:r})}return{color:["#2563eb","#0d9488","#d97706","#7c3aed","#64748b","#0891b2","#65a30d","#c026d3","#ea580c","#4f46e5","#94a3b8"],tooltip:{trigger:"item",formatter:"{b}<br/>{c} 元({d}%)"},legend:{type:"scroll",bottom:0,textStyle:{fontSize:10}},series:[{type:"pie",radius:["36%","62%"],center:["50%","44%"],data:o,itemStyle:{borderRadius:5,borderColor:"#fff",borderWidth:2},label:{formatter:`{b}
|
||
{d}%`,fontSize:10}}]}}function Ze(t,e){return`${t.channel_name}${e}`}function A(t){return t==null||t===""?"0":Number(t).toLocaleString("en-US")}function V(t){return t==null||t===""?"0.0":Number(t).toLocaleString("en-US",{minimumFractionDigits:1,maximumFractionDigits:1})}function yt(t){if(t==null||t==="")return"0";const e=Number(t);return Number.isFinite(e)?Math.round(e).toLocaleString("zh-CN"):"0"}function Le(t){return t==null||t===""?"—":Number(t).toLocaleString("en-US",{minimumFractionDigits:1,maximumFractionDigits:1})}function ht(t){return t==null||t===""?"—":Number(t).toFixed(1)}function gt(t){if(t==null||t==="")return"";const e=Number(t);return e>=1?"roi-good":e>=.8?"roi-mid":"roi-bad"}function ma(t){return t===null?"—":(t*100).toFixed(2)+"%"}function _a(t){return t===null?"":t>=1?"tp-good":t>=.8?"tp-mid":"tp-bad"}function pa(t){return t>=1e4?(t/1e4).toFixed(1)+"万":String(t)}function Ce(t){const e=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0");return`${e}-${n}-${o}`}return ln(async()=>{await Promise.all([Yt(),Ht()]),ue(),Et()}),(t,e)=>{const n=Na,o=Da,r=ka,h=Sa,p=La,b=$a,O=Ca,F=Pa,f=Ia,N=Fa,B=Oa,$e=Aa,g=Ta,ee=Ra,T=Ea,Pe=Ma,te=Va,Me=Ba,fe=Ya,E=za;return i(),c("div",on,[e[83]||(e[83]=a("header",{class:"yeji-masthead"},[a("div",{class:"yeji-masthead__inner"},[a("h1",{class:"yeji-masthead__title"},"业绩看板"),a("p",{class:"yeji-masthead__desc"},"渠道 · 部门 · 日期维度的业绩分析")])],-1)),s(F,{class:"yeji-panel filter-card",shadow:"never"},{default:u(()=>[a("div",sn,[a("div",rn,[a("div",dn,[e[7]||(e[7]=a("span",{class:"lbl"},"渠道来源",-1)),s(r,{modelValue:P.value,"onUpdate:modelValue":e[0]||(e[0]=l=>P.value=l),filterable:"",placeholder:"渠道筛选",class:"filter-select filter-select--channel",loading:Te.value,onChange:ue},{default:u(()=>[s(n,{label:"全部",value:""}),(i(!0),c($,null,H(Re.value,l=>(i(),j(o,{key:l.group_name,label:l.group_name},{default:u(()=>[(i(!0),c($,null,H(l.channels,w=>(i(),j(n,{key:w.channel_code,label:w.channel_name,value:w.channel_code},{default:u(()=>[a("div",un,[a("span",cn,d(w.channel_name),1),a("span",mn,d(w.customer_count>0?w.customer_count:""),1)])]),_:2},1032,["label","value"]))),128))]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue","loading"])]),a("div",_n,[e[8]||(e[8]=a("span",{class:"lbl"},"展示部门",-1)),W((i(),c("div",pn,[s(h,{modelValue:M.value,"onUpdate:modelValue":e[1]||(e[1]=l=>M.value=l),data:Dt.value,multiple:"","collapse-tags":"","collapse-tags-tooltip":"",filterable:"","check-strictly":"","render-after-expand":!1,"default-expand-all":!0,placeholder:"默认:所有「中心」部门",class:"filter-dept-tree-select","node-key":"id",props:kt},null,8,["modelValue","data"])])),[[E,Ie.value]])]),a("div",fn,[e[9]||(e[9]=a("span",{class:"lbl"},"日期范围",-1)),s(p,{modelValue:I.value,"onUpdate:modelValue":e[2]||(e[2]=l=>I.value=l),type:"daterange","value-format":"YYYY-MM-DD","start-placeholder":"开始","end-placeholder":"结束",clearable:!0,shortcuts:dt,class:"filter-date-picker"},null,8,["modelValue"])]),a("div",vn,[s(O,{type:"primary",class:"filter-btn filter-btn--query",loading:q.value,onClick:ue},{default:u(()=>[s(b,{class:"filter-btn__icon"},{default:u(()=>[s(z(Ha))]),_:1}),e[10]||(e[10]=m(" 查询 ",-1))]),_:1},8,["loading"]),s(O,{class:"filter-btn filter-btn--reset",disabled:q.value,onClick:Ut},{default:u(()=>[s(b,{class:"filter-btn__icon"},{default:u(()=>[s(z(Ua))]),_:1}),e[11]||(e[11]=m(" 重置 ",-1))]),_:1},8,["disabled"])])]),a("div",yn,[e[12]||(e[12]=a("span",{class:"filter-quick__title"},"快捷日期",-1)),a("div",hn,[(i(),c($,null,H(dt,l=>a("button",{key:l.text,type:"button",class:"date-pill",onClick:w=>Bt(l)},d(l.text),9,gn)),64))])])])]),_:1}),s(F,{class:"yeji-panel yeji-main-tabs-card",shadow:"never"},{default:u(()=>[s(Pe,{modelValue:lt.value,"onUpdate:modelValue":e[3]||(e[3]=l=>lt.value=l),class:"yeji-view-tabs"},{default:u(()=>[s($e,{label:"统计图表",name:"charts",lazy:""},{default:u(()=>[W((i(),c("div",bn,[zt.value?(i(),c($,{key:0},[se.value&&(Be.value||Ye.value||He.value||Ue.value||We.value)?(i(),c("section",wn,[a("h3",xn,[e[13]||(e[13]=m(" 医生统计 ",-1)),we.value?(i(),c("span",jn,d(we.value),1)):v("",!0)]),s(B,{gutter:16},{default:u(()=>[s(N,{xs:24,lg:9},{default:u(()=>[a("div",kn,[e[14]||(e[14]=a("div",{class:"yeji-chart-panel__label"},"成交金额 TOP(条形)",-1)),Be.value?(i(),j(z(Y),{key:0,class:"yeji-echart",option:Pt.value,autoresize:""},null,8,["option"])):(i(),j(f,{key:1,description:"暂无成交金额数据","image-size":72}))])]),_:1}),s(N,{xs:24,lg:8},{default:u(()=>[a("div",Nn,[e[15]||(e[15]=a("div",{class:"yeji-chart-panel__label"},"开方构成(堆叠柱)",-1)),Ye.value?(i(),j(z(Y),{key:0,class:"yeji-echart yeji-echart--short",option:Mt.value,autoresize:""},null,8,["option"])):(i(),j(f,{key:1,description:"暂无开方数据","image-size":72}))])]),_:1}),s(N,{xs:24,lg:7},{default:u(()=>[a("div",Dn,[e[16]||(e[16]=a("div",{class:"yeji-chart-panel__label"},"挂号结果(环形 · 表尾合计)",-1)),He.value?(i(),j(z(Y),{key:0,class:"yeji-echart yeji-echart--short",option:Lt.value,autoresize:""},null,8,["option"])):(i(),j(f,{key:1,description:"暂无挂号汇总","image-size":72}))])]),_:1})]),_:1}),s(B,{gutter:16,class:"yeji-chart-subrow"},{default:u(()=>[s(N,{xs:24,lg:12},{default:u(()=>[a("div",Sn,[e[17]||(e[17]=a("div",{class:"yeji-chart-panel__label"},"接诊诊单 × 金额(散点)",-1)),Ue.value?(i(),j(z(Y),{key:0,class:"yeji-echart yeji-echart--compact",option:Ct.value,autoresize:""},null,8,["option"])):(i(),j(f,{key:1,description:"至少两名医生同时有接诊诊单与金额时可展示","image-size":72}))])]),_:1}),s(N,{xs:24,lg:12},{default:u(()=>[a("div",zn,[e[18]||(e[18]=a("div",{class:"yeji-chart-panel__label"},"TOP 医生雷达(相对最高值归一)",-1)),We.value?(i(),j(z(Y),{key:0,class:"yeji-echart yeji-echart--compact",option:$t.value,autoresize:""},null,8,["option"])):(i(),j(f,{key:1,description:"至少两名医生有数据时可展示","image-size":72}))])]),_:1})]),_:1})])):v("",!0),(i(!0),c($,null,H(ae.value,(l,w)=>(i(),c($,{key:"dept-chart-"+w},[st(l)?(i(),c("section",Ln,[a("h3",Cn,d(_t(l)),1),s(z(Y),{class:"yeji-echart yeji-echart--tall",option:ra(l),autoresize:""},null,8,["option"]),ft(l)||vt(l)?(i(),j(B,{key:0,gutter:16,class:"yeji-chart-subrow"},{default:u(()=>[ft(l)?(i(),j(N,{key:0,xs:24,md:12},{default:u(()=>[a("div",$n,[e[19]||(e[19]=a("div",{class:"yeji-chart-panel__label"}," 进线 → 接诊 → 成交(汇总漏斗) ",-1)),s(z(Y),{class:"yeji-echart yeji-echart--compact",option:ua(l),autoresize:""},null,8,["option"])])]),_:2},1024)):v("",!0),vt(l)?(i(),j(N,{key:1,xs:24,md:12},{default:u(()=>[a("div",Pn,[e[20]||(e[20]=a("div",{class:"yeji-chart-panel__label"}," 部门合计业绩占比(TOP10 + 其它) ",-1)),s(z(Y),{class:"yeji-echart yeji-echart--compact",option:ca(l),autoresize:""},null,8,["option"])])]),_:2},1024)):v("",!0)]),_:2},1024)):v("",!0)])):v("",!0)],64))),128)),k.value?(i(!0),c($,{key:1},H(ot.value,l=>(i(),c("section",{key:"lb-chart-"+l.dept_id,class:"yeji-chart-block"},[a("h3",Mn,[m(d(l.dept_name)+" · 医助 ",1),k.value.channel_name?(i(),c("span",An," ("+d(k.value.channel_name)+") ",1)):v("",!0),a("span",On,d(k.value.start_date)+"~"+d(k.value.end_date),1)]),s(B,{gutter:16},{default:u(()=>[s(N,{xs:24,lg:pt(l)?14:24},{default:u(()=>[s(z(Y),{class:"yeji-echart",option:ia(l,k.value),autoresize:""},null,8,["option"])]),_:2},1032,["lg"]),pt(l)?(i(),j(N,{key:0,xs:24,lg:10},{default:u(()=>[a("div",Fn,[e[21]||(e[21]=a("div",{class:"yeji-chart-panel__label"},"诊金占比",-1)),s(z(Y),{class:"yeji-echart yeji-echart--compact",option:da(l,k.value),autoresize:""},null,8,["option"])])]),_:2},1024)):v("",!0)]),_:2},1024)]))),128)):v("",!0)],64)):!q.value&&(!se.value||!re.value)&&!J.value?(i(),j(f,{key:1,class:"yeji-charts-empty",description:"当前筛选下暂无图表数据,请调整条件后查询"})):v("",!0)])),[[E,q.value||se.value&&re.value||J.value]])]),_:1}),s($e,{label:"数据表格",name:"table"},{default:u(()=>[se.value?(i(),j(F,{key:0,class:"yeji-panel doctor-daily-card doctor-daily-card--nested",shadow:"never"},{header:u(()=>[a("div",In,[a("div",Rn,[e[22]||(e[22]=a("span",{class:"doctor-daily-card__title"},"医生统计",-1)),we.value?(i(),c("span",Tn,d(we.value),1)):v("",!0)]),a("div",En,[s(O,{type:"primary",size:"small",loading:re.value,onClick:rt},{default:u(()=>[...e[23]||(e[23]=[m(" 刷新 ",-1)])]),_:1},8,["loading"])])])]),default:u(()=>[W((i(),j(ee,{data:R.value,size:"small",border:"",stripe:"",class:"doctor-daily-table","show-summary":"","summary-method":Ot},{default:u(()=>[s(g,{prop:"doctor_name",label:"医生","min-width":"100",fixed:""}),s(g,{prop:"system_prescription_count",label:"系统开方","min-width":"88",align:"right"}),s(g,{prop:"manual_prescription_count",label:"手动开方","min-width":"88",align:"right"}),s(g,{prop:"deal_amount",label:"成交金额","min-width":"110",align:"right"},{default:u(({row:l})=>[m("¥ "+d(xe(l.deal_amount)),1)]),_:1}),s(g,{prop:"deal_order_count",label:"接诊诊单","min-width":"88",align:"right"}),s(g,{prop:"avg_deal_amount",label:"平均单价","min-width":"100",align:"right"},{default:u(({row:l})=>[m(d(l.avg_deal_amount!=null?`¥ ${xe(l.avg_deal_amount)}`:"—"),1)]),_:1}),s(g,{prop:"appointment_completed",label:"挂号完成","min-width":"88",align:"right"}),s(g,{prop:"appointment_missed",label:"过号","min-width":"72",align:"right"}),s(g,{prop:"appointment_cancelled",label:"取消","min-width":"72",align:"right"})]),_:1},8,["data"])),[[E,re.value]])]),_:1})):v("",!0),de.value||Se.value?W((i(),c("div",Vn,[de.value?(i(),c("div",Bn,[a("div",Yn,d(de.value.title),1),a("div",Hn,[(i(!0),c($,null,H(de.value.sections,l=>(i(),c("div",{key:l.dept_id,class:"tp-section"},[a("div",Un,[a("span",Wn,d(l.dept_name)+"目标",1),a("span",qn,d(pa(l.target_amount)),1)]),a("table",Gn,[a("tbody",null,[a("tr",null,[e[24]||(e[24]=a("td",{class:"tp-lbl"},"昨日诊金",-1)),a("td",Jn,d(A(l.yesterday_amount)),1)]),l.douyin_amount!==null?(i(),c("tr",Qn,[e[25]||(e[25]=a("td",{class:"tp-lbl"},"抖音总诊金",-1)),a("td",Xn,d(A(l.douyin_amount)),1)])):v("",!0),l.tuifen_amount!==null?(i(),c("tr",Zn,[e[26]||(e[26]=a("td",{class:"tp-lbl"},"推粉总诊金",-1)),a("td",Kn,d(A(l.tuifen_amount)),1)])):v("",!0),a("tr",null,[e[27]||(e[27]=a("td",{class:"tp-lbl"},"总诊金",-1)),a("td",el,d(A(l.total_amount)),1)]),a("tr",null,[e[28]||(e[28]=a("td",{class:"tp-lbl"},"目标进度",-1)),a("td",tl,d(V(l.target_progress)),1)]),a("tr",null,[e[29]||(e[29]=a("td",{class:"tp-lbl"},"完成进度",-1)),a("td",{class:Fe(["tp-val",_a(l.completion_rate)])},d(ma(l.completion_rate)),3)])])])]))),128))])])):v("",!0)])),[[E,Se.value]]):v("",!0),W((i(),c("div",al,[!q.value&&ae.value.length===0?(i(),c("div",nl,[s(f,{description:"暂无数据"})])):v("",!0),(i(!0),c($,null,H(ae.value,(l,w)=>(i(),c("div",{key:w,class:"yeji-table"},[a("div",ll,d(_t(l)),1),a("table",ol,[a("thead",null,[a("tr",null,[e[72]||(e[72]=a("th",{class:"col-dept"},"部门",-1)),a("th",null,[e[36]||(e[36]=a("span",null,"进线数据",-1)),s(T,{placement:"top",effect:"dark","show-after":200},{content:u(()=>[a("div",sl,[e[34]||(e[34]=m(" add_external_contact 事件数,按接待企微成员归属部门;定渠道时须客户带对应企微标签。",-1)),e[35]||(e[35]=a("br",null,null,-1)),l.channel_name?(i(),c($,{key:0},[e[30]||(e[30]=a("b",null,"名称含「二中心」的部门",-1)),e[31]||(e[31]=m("在选定渠道下进线计 ",-1)),e[32]||(e[32]=a("b",null,"0",-1)),e[33]||(e[33]=m("。 ",-1))],64)):v("",!0)])]),default:u(()=>[s(b,{class:"col-info"},{default:u(()=>[s(z(U))]),_:1})]),_:2},1024)]),a("th",null,[e[38]||(e[38]=a("span",null,"合计业绩",-1)),s(T,{placement:"top",effect:"dark","show-after":200},{content:u(()=>[...e[37]||(e[37]=[a("div",{style:{"max-width":"300px","line-height":"1.7","font-size":"12px"}},[m(" 按订单"),a("b",null,"创建时间"),m("统计,与「处方订单列表」业绩合计口径一致。"),a("br"),a("b",null,"不受渠道筛选影响"),m(",展示部门下全部订单。 ")],-1)])]),default:u(()=>[s(b,{class:"col-info"},{default:u(()=>[s(z(U))]),_:1})]),_:1})]),l.channel_name?(i(),c("th",rl,[a("span",null,d(Ze(l,"业绩")),1),s(T,{placement:"top",effect:"dark","show-after":200},{content:u(()=>[...e[39]||(e[39]=[a("div",{style:{"max-width":"340px","line-height":"1.7","font-size":"12px"}},[m(" 与「处方订单列表」业绩"),a("b",null,"同口径"),m(":按订单 "),a("b",null,"create_time"),m(" 归日,"),a("br"),m(" fulfillment_status ≠ 4。"),a("br"),m(" 渠道判定仅用 EXISTS:该患者有任一挂号 "),a("b",null,"channels 命中字典 + status=3"),m("(不限挂号时点)。 ")],-1)])]),default:u(()=>[s(b,{class:"col-info"},{default:u(()=>[s(z(U))]),_:1})]),_:1})])):v("",!0),a("th",null,[e[41]||(e[41]=a("span",null,"预约诊单",-1)),s(T,{placement:"top",effect:"dark","show-after":200},{content:u(()=>[...e[40]||(e[40]=[a("div",{style:{"max-width":"320px","line-height":"1.7","font-size":"12px"}},[m(" 已完成挂号条数,与「医生预约 / 已完成」列表同口径。"),a("br"),m(" 部门按医助→接诊医生归属。 ")],-1)])]),default:u(()=>[s(b,{class:"col-info"},{default:u(()=>[s(z(U))]),_:1})]),_:1})]),a("th",null,[e[43]||(e[43]=a("span",null,"接诊诊单",-1)),s(T,{placement:"top",effect:"dark","show-after":200},{content:u(()=>[...e[42]||(e[42]=[a("div",{style:{"max-width":"320px","line-height":"1.7","font-size":"12px"}},[m(" 与「处方订单列表」在 "),a("b",null,"assistant_dept_id"),m(" 下条数同源:订单 "),a("b",null,"create_time"),m(" 落入区间、履约 "),a("b",null,"fulfillment_status ≠ 4"),m(";"),a("br"),m(" 按诊单 "),a("b",null,"医助 assistant_id"),m("(经 admin_dept 映射到展示「中心」),非订单 creator_id。选定渠道时本列仍为全量。 ")],-1)])]),default:u(()=>[s(b,{class:"col-info"},{default:u(()=>[s(z(U))]),_:1})]),_:1})]),l.channel_name?(i(),c("th",il,[a("span",null,d(Ze(l,"成交单")),1),s(T,{placement:"top",effect:"dark","show-after":200},{content:u(()=>[a("div",dl,[m(" 与「"+d(l.channel_name)+"业绩」同源:统计区间内 ",1),e[44]||(e[44]=a("b",null,"非取消业务订单",-1)),e[45]||(e[45]=m(" 条数(fulfillment_status ≠ 4),",-1)),e[46]||(e[46]=a("br",null,null,-1)),e[47]||(e[47]=m(" 按订单 ",-1)),e[48]||(e[48]=a("b",null,"create_time",-1)),e[49]||(e[49]=m(" 归日;渠道判定同业绩列(患者须有对应 channels 的已完成挂号)。 ",-1))])]),default:u(()=>[s(b,{class:"col-info"},{default:u(()=>[s(z(U))]),_:1})]),_:2},1024)])):v("",!0),e[73]||(e[73]=a("th",null,"平均单价",-1)),l.channel_name?(i(),c("th",ul,[a("span",null,d(Ze(l,"客单价")),1),s(T,{placement:"top",effect:"dark","show-after":200},{content:u(()=>[a("div",cl,d(l.channel_name)+"业绩 ÷ "+d(l.channel_name)+"接诊诊单(均值)。 ",1)]),default:u(()=>[s(b,{class:"col-info"},{default:u(()=>[s(z(U))]),_:1})]),_:2},1024)])):v("",!0),a("th",null,[e[69]||(e[69]=a("span",null,"ROI",-1)),s(T,{placement:"top",effect:"dark","show-after":200},{content:u(()=>[a("div",ml,[l.channel_name?(i(),c($,{key:0},[e[50]||(e[50]=m(" 有渠道时:",-1)),e[51]||(e[51]=a("b",null,"合计行 ROI",-1)),e[52]||(e[52]=m(" = ",-1)),a("b",null,d(l.channel_name)+"业绩合计",1),e[53]||(e[53]=m("(与上表该渠道业绩列合计一致,",-1)),e[54]||(e[54]=a("b",null,"不含名称含「二中心」的部门",-1)),e[55]||(e[55]=m(")÷ ",-1)),e[56]||(e[56]=a("b",null,"投放成本合计",-1)),e[57]||(e[57]=m("。",-1)),e[58]||(e[58]=a("br",null,null,-1)),e[59]||(e[59]=m(" 部门行 ROI = 该部门 ",-1)),a("b",null,d(l.channel_name)+"业绩",1),e[60]||(e[60]=m(" ÷ 该部门 ",-1)),e[61]||(e[61]=a("b",null,"投放成本",-1)),e[62]||(e[62]=m(";二中心部门该渠道业绩与进线为 0。与「合计业绩」列无关。 ",-1))],64)):(i(),c($,{key:1},[e[63]||(e[63]=a("b",null,"合计业绩",-1)),e[64]||(e[64]=m(" ÷ ",-1)),e[65]||(e[65]=a("b",null,"投放成本",-1)),e[66]||(e[66]=m("。投放成本按各部门",-1)),e[67]||(e[67]=a("b",null,"进线条数占比",-1)),e[68]||(e[68]=m("从总成本中分摊。 ",-1))],64))])]),default:u(()=>[s(b,{class:"col-info"},{default:u(()=>[s(z(U))]),_:1})]),_:2},1024)]),a("th",null,[e[71]||(e[71]=a("span",null,"投放成本",-1)),s(T,{placement:"top",effect:"dark","show-after":200},{content:u(()=>[...e[70]||(e[70]=[a("div",{style:{"max-width":"320px","line-height":"1.7","font-size":"12px"}},[m(" 区间与渠道与账务表一致后得到"),a("b",null,"总投放成本"),m(";"),a("b",null,"单进线成本"),m(" = 总成本 ÷ 各展示部门"),a("b",null,"进线合计"),m(";"),a("br"),m(" 各部门行投放成本 = 单进线成本 × 该部门进线(四舍五入尾差并入进线最多的部门)。 ")],-1)])]),default:u(()=>[s(b,{class:"col-info"},{default:u(()=>[s(z(U))]),_:1})]),_:1})])])]),a("tbody",null,[(i(!0),c($,null,H(l.rows,x=>(i(),c("tr",{key:`${w}-${x.dept_id}-${x.dept_name}`,class:Fe(["yeji-row--action",{"yeji-row--unassigned":Qe(x),"yeji-row--idle":x.dept_id<=0&&!Qe(x)}]),onClick:Ae=>oa(l,x)},[a("td",pl,d(x.dept_name),1),a("td",{onClick:Ae=>ta(Ae,l,x)},[x.dept_id>0&&Number(x.lead_count)>0?(i(),c("span",vl,d(A(x.lead_count)),1)):(i(),c($,{key:1},[m(d(A(x.lead_count)),1)],64))],8,fl),a("td",null,d(V(x.performance_amount)),1),l.channel_name?(i(),c("td",yl,d(V(x.completed_performance_amount)),1)):v("",!0),a("td",null,d(A(x.consult_count)),1),a("td",null,d(A(x.deal_order_count)),1),l.channel_name?(i(),c("td",hl,d(A(x.channel_consult_count)),1)):v("",!0),a("td",null,d(Le(x.avg_price)),1),l.channel_name?(i(),c("td",gl,d(Le(x.channel_avg_price)),1)):v("",!0),a("td",{class:Fe(gt(x.roi))},d(ht(x.roi)),3),a("td",null,d(V(x.cost_amount)),1)],10,_l))),128)),a("tr",bl,[e[74]||(e[74]=a("td",{class:"col-dept"},"合计",-1)),a("td",null,d(A(l.total.lead_count)),1),a("td",null,d(V(l.total.performance_amount)),1),l.channel_name?(i(),c("td",wl,d(V(l.total.completed_performance_amount)),1)):v("",!0),a("td",null,d(A(l.total.consult_count)),1),a("td",null,d(A(l.total.deal_order_count)),1),l.channel_name?(i(),c("td",xl,d(A(l.total.channel_consult_count)),1)):v("",!0),a("td",null,d(Le(l.total.avg_price)),1),l.channel_name?(i(),c("td",jl,d(Le(l.total.channel_avg_price)),1)):v("",!0),a("td",{class:Fe(gt(l.total.roi))},d(ht(l.total.roi)),3),a("td",null,d(V(l.total.cost_amount)),1)])])]),a("div",kl,[a("span",null,"区间:"+d(l.start_date)+" ~ "+d(l.end_date),1),l.channel_name?(i(),c("span",Nl," · 渠道:"+d(l.channel_name),1)):v("",!0),l.total.cost_per_lead!=null&&l.total.cost_per_lead>0?(i(),c("span",Dl," · 单进线成本:"+d(V(l.total.cost_per_lead))+" 元 ",1)):v("",!0)])]))),128))])),[[E,q.value]]),k.value||J.value?W((i(),c("div",Sl,[k.value?(i(),c($,{key:0},[a("p",zl,[m(d(k.value.range_note)+" ",1),a("span",Ll,d(k.value.start_date)+" ~ "+d(k.value.end_date),1)]),a("div",Cl,[(i(!0),c($,null,H(k.value.leaderboards,l=>(i(),c($,{key:l.dept_id},[l.rows.length>0?(i(),c("div",$l,[a("div",Pl,[m(d(l.dept_name)+" · 医助排行榜 ",1),k.value.channel_name?(i(),c("span",Ml," ("+d(k.value.channel_name)+") ",1)):v("",!0)]),a("table",Al,[e[75]||(e[75]=a("thead",null,[a("tr",null,[a("th",{class:"col-rank"},"排名"),a("th",{class:"col-abbr"},"部门"),a("th",{class:"col-name"},"姓名"),a("th",{class:"col-consult"},"接诊单数"),a("th",{class:"col-deal"},"接诊诊单"),a("th",null,"诊金"),a("th",null,[m("接诊率"),a("br"),a("span",{class:"th-sub"},"(元/进线)")])])],-1)),a("tbody",null,[(i(!0),c($,null,H(l.rows,w=>(i(),c("tr",{key:w.admin_id,class:"yeji-row--action",onClick:x=>sa(w)},[a("td",Fl,d(w.rank),1),a("td",Il,d(w.dept_abbr),1),a("td",Rl,d(w.name),1),a("td",Tl,d(yt(w.consult_count)),1),a("td",El,d(yt(w.deal_order_count)),1),a("td",null,d(V(w.fee_amount)),1),a("td",null,d(V(w.consult_rate)),1)],8,Ol))),128))])]),e[76]||(e[76]=a("div",{class:"yeji-table__foot yeji-table__foot--left"},[a("span",null,"诊金单位:元 · 接诊率 = 诊金 ÷ 进线(元/进线)")],-1))])):v("",!0)],64))),128))]),!J.value&&Vt.value===0?(i(),c("div",Vl,[s(f,{description:"当前筛选下暂无医助排行数据"})])):v("",!0)],64)):v("",!0)])),[[E,J.value]]):v("",!0)]),_:1})]),_:1},8,["modelValue"])]),_:1}),s(Me,{modelValue:je.value,"onUpdate:modelValue":e[4]||(e[4]=l=>je.value=l),direction:"rtl",size:"min(960px, 96vw)","destroy-on-close":"",class:"yeji-order-drawer","show-close":!0},{header:u(()=>[a("div",Bl,[a("h3",Yl,d(qe.value),1),a("p",Hl,d(Ge.value),1)])]),default:u(()=>[a("div",Ul,[a("section",Wl,[a("div",ql,[e[77]||(e[77]=a("span",{class:"yeji-order-drawer__stat-label"},"符合条件的订单",-1)),a("span",Gl,d(ke.value.toLocaleString("zh-CN"))+" 笔",1)]),a("div",Jl,[e[78]||(e[78]=a("span",{class:"yeji-order-drawer__stat-label"},[m(" 约诊 "),a("span",{class:"yeji-order-drawer__stat-note"},"(已完成挂号;日期按挂号 appointment_date;医助=挂号或诊单,与看板接诊一致)")],-1)),a("span",Ql,d(it.value===null?"—":it.value.toLocaleString("zh-CN"))+" 次",1)]),a("div",Xl,[e[79]||(e[79]=a("span",{class:"yeji-order-drawer__stat-label"},[m(" 业务订单金额合计 "),a("span",{class:"yeji-order-drawer__stat-note"},"(不含履约已取消,与上方业绩口径一致)")],-1)),a("span",Zl," ¥"+d(ct(Ft.value)),1)]),Z.value.length>0?(i(),c("div",Kl,[e[80]||(e[80]=a("span",{class:"yeji-order-drawer__stat-label"},"本页小计",-1)),a("span",eo,"¥"+d(ct(It.value)),1)])):v("",!0)]),W((i(),c("div",to,[Z.value.length>0||X.value?(i(),j(ee,{key:0,data:Z.value,size:"small",stripe:"",border:"","max-height":"58vh",class:"yeji-order-drawer__table","empty-text":X.value?"加载中…":"暂无数据"},{default:u(()=>[s(g,{type:"index",label:"#",width:"46",index:Gt}),s(g,{prop:"order_no",label:"订单号","min-width":"152","show-overflow-tooltip":""}),s(g,{label:"金额",width:"108",align:"right"},{default:u(({row:l})=>[a("span",ao,"¥"+d(l.amount??"—"),1)]),_:1}),s(g,{prop:"recipient_name",label:"收货人",width:"96","show-overflow-tooltip":""}),s(g,{label:"履约",width:"104","show-overflow-tooltip":""},{default:u(({row:l})=>[m(d(qt(l.fulfillment_status)),1)]),_:1}),s(g,{label:"创建时间","min-width":"148"},{default:u(({row:l})=>[m(d(Jt(l.create_time)),1)]),_:1}),s(g,{prop:"doctor_name",label:"开方人",width:"88","show-overflow-tooltip":""}),s(g,{prop:"creator_name",label:"创建人",width:"88","show-overflow-tooltip":""})]),_:1},8,["data","empty-text"])):v("",!0),!X.value&&Z.value.length===0?(i(),j(f,{key:1,description:"暂无业务订单"})):v("",!0),a("div",no,[s(te,{"current-page":K.value,"page-size":Ne.value,background:"",layout:"total, sizes, prev, pager, next, jumper",total:ke.value,"page-sizes":[10,15,20,50],disabled:X.value,"hide-on-single-page":!1,onCurrentChange:Zt,onSizeChange:Kt},null,8,["current-page","page-size","total","disabled"])])])),[[E,X.value]])])]),_:1},8,["modelValue"]),s(fe,{modelValue:Ee.value,"onUpdate:modelValue":e[5]||(e[5]=l=>Ee.value=l),width:"min(680px, 94vw)","destroy-on-close":"",class:"yeji-unassigned-dialog"},{header:u(()=>[a("div",lo,[e[81]||(e[81]=a("span",{class:"yeji-unassigned-dialog__title"},"「未归属中心」业绩拆解",-1)),a("p",oo,d(tt.value),1)])]),default:u(()=>[ce.value?(i(),c("p",so,d(ce.value),1)):v("",!0),W((i(),c("div",ro,[le.value.length>0||ne.value?(i(),j(ee,{key:0,data:le.value,size:"small",stripe:"",border:"","max-height":"440",class:"yeji-unassigned-dialog__table","empty-text":ne.value?"加载中…":"暂无数据"},{default:u(()=>[s(g,{prop:"name",label:"创建人","min-width":"120","show-overflow-tooltip":""}),s(g,{label:"账号",width:"88",align:"right"},{default:u(({row:l})=>[m(d(l.admin_id>0?l.admin_id:"—"),1)]),_:1}),s(g,{label:"订单数",width:"88",align:"right"},{default:u(({row:l})=>[m(d(A(l.order_count)),1)]),_:1}),s(g,{label:"业绩金额","min-width":"112",align:"right"},{default:u(({row:l})=>[m(d(V(l.amount)),1)]),_:1})]),_:1},8,["data","empty-text"])):v("",!0),!ne.value&&le.value.length===0?(i(),j(f,{key:1,description:"暂无拆解数据"})):v("",!0)])),[[E,ne.value]])]),_:1},8,["modelValue"]),s(fe,{modelValue:Ve.value,"onUpdate:modelValue":e[6]||(e[6]=l=>Ve.value=l),width:"min(920px, 96vw)","destroy-on-close":"",class:"yeji-leadlines-dialog"},{header:u(()=>[a("div",io,[e[82]||(e[82]=a("span",{class:"yeji-unassigned-dialog__title"},"进线数据明细",-1)),a("p",uo,d(at.value),1)])]),default:u(()=>[me.value?(i(),c("p",co,d(me.value),1)):v("",!0),W((i(),c("div",mo,[oe.value.length>0||Q.value?(i(),j(ee,{key:0,data:oe.value,size:"small",stripe:"",border:"","max-height":"440",class:"yeji-unassigned-dialog__table","empty-text":Q.value?"加载中…":"暂无数据"},{default:u(()=>[s(g,{prop:"event_time_text",label:"进线时间","min-width":"156","show-overflow-tooltip":""}),s(g,{prop:"reception_admin_name",label:"接待",width:"88","show-overflow-tooltip":""}),s(g,{prop:"external_contact_name",label:"客户","min-width":"100","show-overflow-tooltip":""}),s(g,{prop:"external_userid",label:"外部联系人ID","min-width":"140","show-overflow-tooltip":""}),s(g,{prop:"user_id",label:"企微成员ID","min-width":"120","show-overflow-tooltip":""}),s(g,{prop:"state",label:"渠道参数",width:"96","show-overflow-tooltip":""})]),_:1},8,["data","empty-text"])):v("",!0),!Q.value&&oe.value.length===0?(i(),j(f,{key:1,description:"暂无进线明细"})):v("",!0),_e.value>0?(i(),c("div",_o,[s(te,{"current-page":pe.value,"page-size":ge.value,background:"",layout:"total, sizes, prev, pager, next, jumper",total:_e.value,"page-sizes":[10,20,50,100],disabled:Q.value,"hide-on-single-page":!1,onCurrentChange:na,onSizeChange:la},null,8,["current-page","page-size","total","disabled"])])):v("",!0)])),[[E,Q.value]])]),_:1},8,["modelValue"])])}}}),os=an(fo,[["__scopeId","data-v-c043897a"]]);export{os as default};
|