Files
zyt/server/public/admin/assets/index-FlvfVIH1.js
T
2026-08-07 09:24:50 +08:00

2 lines
13 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{o as z,ba as T,ap as et,ac as at,bi as nt,q as r,r as m,s as t,v as o,D as i,u as _,cT as lt,w as st,cO as ot,L as c,T as l,P as D,by as it,K as rt,bK as dt,cP as mt,F as N,G as S,O as k,bn as ut,bm as ct,ce as pt,ae as b,cU as _t,cf as gt,bk as bt,a0 as ft,bB as ht,bj as yt,bX as vt,cJ as kt,t as F,cg as wt,M as xt,p as C,E as Nt}from"./.pnpm-BadRMC3e.js";import{w as St}from"./first_visit-CINNdQ4q.js";import{_ as Ct}from"./index-MsV-VkKe.js";const Vt={class:"registration-stats","element-loading-text":"正在汇总权限范围内的挂号数据"},Et={class:"page-heading"},Mt={class:"heading-copy"},$t={class:"heading-mark"},Tt={class:"heading-actions"},Dt={class:"scope-chip"},Ft={key:0,class:"update-time"},zt={class:"filter-strip"},Lt={class:"filter-item"},Ot={class:"filter-item filter-item--time"},Pt={class:"filter-item"},Bt={class:"filter-summary"},At={class:"metric-grid","aria-label":"挂号统计核心指标"},Ut={class:"metric-card metric-card--teal"},jt={class:"metric-icon"},qt={class:"metric-card metric-card--blue"},Gt={class:"metric-icon"},It={class:"metric-card metric-card--amber"},Kt={class:"metric-icon"},Rt={class:"panel employee-panel"},Wt={class:"panel-heading"},Ht={class:"panel-badge"},Jt={key:0,class:"dept-dot"},Xt={key:2},Yt={class:"panel target-panel"},Qt={class:"panel-heading"},Zt={class:"panel-badge"},te={class:"target-layout"},ee={class:"target-summary"},ae={class:"target-numbers"},ne={class:"is-teal"},le={key:0},se={key:1,class:"target-empty"},oe={class:"target-chart-wrap"},ie={class:"ranking-grid"},re={class:"panel ranking-panel"},de={class:"panel-heading"},me={key:0,class:"ranking-list"},ue={class:"rank-track"},ce={class:"panel ranking-panel"},pe={class:"panel-heading"},_e={key:0,class:"ranking-list ranking-list--blue"},ge={class:"rank-track"},be={class:"panel department-panel"},fe={class:"panel-heading"},he={class:"panel-badge"},ye={class:"data-note"},ve=z({name:"firstVisitRegistrationStatsPage"}),ke=z({...ve,setup(we){const V=()=>({meta:{time_type:"today",time_label:"今日",start_date:"",end_date:"",generated_at:"",scope_value:4,scope_label:"",selected_dept_name:"",selected_assistant_name:"",member_count:0,appointment_rule:"",performance_rule:""},filters:{departments:[],assistants:[]},summary:{appointment_count:0,appointment_compare_count:0,appointment_compare_rate:null,order_count:0,order_amount:0,range_label:"今日"},employee_rows:[],rankings:{performance:[],appointments:[]},departments:[],target:{year:new Date().getFullYear(),target_amount:0,actual_amount:0,completion_rate:null,department_count:0,scope_note:"",months:[],target_cumulative:[],actual_cumulative:[]}}),y=xt(!1),n=T(V()),u=T({time_type:"today"}),L=[{label:"今日",value:"today"},{label:"本周",value:"week"},{label:"本月",value:"month"}],O={label:"name",value:"id",children:"children"},P=C(()=>Math.max(0,...n.rankings.performance.map(a=>Number(a.value)||0))),B=C(()=>Math.max(0,...n.rankings.appointments.map(a=>Number(a.value)||0))),A=C(()=>({animationDuration:450,grid:{left:18,right:18,top:18,bottom:12,containLabel:!0},tooltip:{trigger:"axis",valueFormatter:a=>p(a)},xAxis:{type:"category",boundaryGap:!1,data:n.target.months,axisLine:{lineStyle:{color:"#d9e1e8"}},axisTick:{show:!1},axisLabel:{color:"#7d8b9c",fontSize:11}},yAxis:{type:"value",splitNumber:3,axisLabel:{color:"#8b98a8",formatter:a=>j(a)},splitLine:{lineStyle:{color:"#eef2f5"}}},series:[{name:"累计完成",type:"line",smooth:!0,symbol:"circle",symbolSize:5,data:n.target.actual_cumulative,lineStyle:{color:"#139a8c",width:3},itemStyle:{color:"#ffffff",borderColor:"#139a8c",borderWidth:2},areaStyle:{color:"rgba(19,154,140,.08)"}},{name:"累计目标",type:"line",smooth:!0,showSymbol:!1,data:n.target.target_cumulative,lineStyle:{color:"#5f86e8",width:2,type:"dashed"}}]}));async function f(){y.value=!0;try{const a={time_type:u.time_type};u.dept_id&&(a.dept_id=Number(u.dept_id)),u.assistant_id&&(a.assistant_id=Number(u.assistant_id));const e=await St(a);Object.assign(n,V(),e||{})}catch(a){Nt.error((a==null?void 0:a.message)||"挂号统计加载失败,请稍后重试")}finally{y.value=!1}}function U(){delete u.assistant_id,f()}function w(a){return Number(a||0).toLocaleString("zh-CN",{maximumFractionDigits:0})}function p(a){return${Number(a||0).toLocaleString("zh-CN",{minimumFractionDigits:2,maximumFractionDigits:2})}`}function j(a){return Math.abs(a)>=1e4?`${(a/1e4).toFixed(a>=1e5?0:1)}万`:`${Math.round(a)}`}function q(a){return a==null?"未设置":`${Number(a).toFixed(1)}%`}function G(a){return Math.min(100,Math.max(0,Number(a)||0))}function I(a){if(a==null)return"上期无数据,暂不计算环比";const e=Number(a);return e===0?"与上期持平":`${e>0?"较上期增长":"较上期下降"} ${Math.abs(e).toFixed(1)}%`}function E(a){if(a==null)return"—";const e=Number(a);return`${e>0?"+":""}${e.toFixed(1)}%`}function x(a){return a==null||Number(a)===0?"is-neutral":Number(a)>0?"is-up":"is-down"}function M(a,e){return e<=0?"0%":`${Math.max(4,Math.min(100,Number(a||0)/e*100))}%`}function K(a){return String(a||"员").trim().slice(-1)}function R(a,e){return Number((a==null?void 0:a.order_amount)||0)-Number((e==null?void 0:e.order_amount)||0)}return et(f),(a,e)=>{const g=st,W=rt,H=dt,J=mt,X=ut,Y=ct,Q=ft,d=bt,v=ht,$=yt,Z=vt,tt=nt;return at((r(),m("div",Vt,[t("header",Et,[t("div",Mt,[t("span",$t,[o(g,null,{default:i(()=>[o(_(lt))]),_:1})]),e[3]||(e[3]=t("div",null,[t("h1",null,"挂号统计"),t("p",null,"挂号、诊单与目标数据按当前角色和部门权限实时汇总")],-1))]),t("div",Tt,[t("span",Dt,[o(g,null,{default:i(()=>[o(_(ot))]),_:1}),c(l(n.meta.scope_label||"数据范围"),1)]),n.meta.generated_at?(r(),m("span",Ft,"更新于 "+l(n.meta.generated_at),1)):D("",!0),o(W,{icon:_(it),loading:y.value,onClick:f},{default:i(()=>[...e[4]||(e[4]=[c("刷新",-1)])]),_:1},8,["icon","loading"])])]),t("section",zt,[t("div",Lt,[e[5]||(e[5]=t("span",null,"部门",-1)),o(H,{modelValue:u.dept_id,"onUpdate:modelValue":e[0]||(e[0]=s=>u.dept_id=s),data:n.filters.departments,props:O,"node-key":"id",clearable:"",filterable:"","check-strictly":"","default-expand-all":"",placeholder:"全部可见部门",class:"dept-select",onChange:U},null,8,["modelValue","data"])]),t("div",Ot,[e[6]||(e[6]=t("span",null,"时间",-1)),o(J,{modelValue:u.time_type,"onUpdate:modelValue":e[1]||(e[1]=s=>u.time_type=s),options:L,onChange:f},null,8,["modelValue"])]),t("div",Pt,[e[7]||(e[7]=t("span",null,"员工",-1)),o(Y,{modelValue:u.assistant_id,"onUpdate:modelValue":e[2]||(e[2]=s=>u.assistant_id=s),clearable:"",filterable:"",placeholder:"全部可见员工",class:"employee-select",onChange:f},{default:i(()=>[(r(!0),m(N,null,S(n.filters.assistants,s=>(r(),k(X,{key:s.id,label:s.name,value:Number(s.id)},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),t("div",Bt,[t("strong",null,l(n.meta.start_date||"—"),1),t("span",null,"至 "+l(n.meta.end_date||"—")+" · "+l(n.meta.member_count||0)+" 位员工",1)])]),t("section",At,[t("article",Ut,[t("div",jt,[o(g,null,{default:i(()=>[o(_(pt))]),_:1})]),t("div",null,[t("span",null,l(n.meta.time_label||"今日")+"总挂号",1),t("strong",null,l(w(n.summary.appointment_count)),1),t("small",{class:b(x(n.summary.appointment_compare_rate))},l(I(n.summary.appointment_compare_rate)),3)])]),t("article",qt,[t("div",Gt,[o(g,null,{default:i(()=>[o(_(_t))]),_:1})]),t("div",null,[t("span",null,l(n.meta.time_label||"今日")+"总诊单",1),t("strong",null,l(w(n.summary.order_count)),1),e[8]||(e[8]=t("small",null,"排除取消、拒收和退款订单",-1))])]),t("article",It,[t("div",Kt,[o(g,null,{default:i(()=>[o(_(gt))]),_:1})]),t("div",null,[t("span",null,l(n.meta.time_label||"今日")+"总业绩",1),t("strong",null,l(p(n.summary.order_amount)),1),e[9]||(e[9]=t("small",null,"按业务订单创建人归属",-1))])])]),t("section",Rt,[t("div",Wt,[e[10]||(e[10]=t("div",null,[t("h2",null,"本组员工挂号统计"),t("p",null,"部门汇总可展开查看员工;明日、后日预约始终使用对应自然日")],-1)),t("span",Ht,l(n.meta.time_label||"当前范围"),1)]),o($,{data:n.employee_rows,"row-key":"id","tree-props":{children:"children"},"default-expand-all":"",class:"stats-table"},{empty:i(()=>[o(v,{description:"当前权限与筛选范围内暂无医助数据"})]),default:i(()=>[o(d,{prop:"name",label:"部门 / 员工","min-width":"250",fixed:"left"},{default:i(({row:s})=>[t("div",{class:b(["name-cell",`is-${s.row_type}`])},[s.row_type==="department"?(r(),m("span",Jt)):(r(),k(Q,{key:1,size:26},{default:i(()=>[c(l(K(s.name)),1)]),_:2},1024)),t("strong",null,l(s.name),1),s.row_type==="department"?(r(),m("em",Xt,l(s.member_count)+" 人",1)):D("",!0)],2)]),_:1}),o(d,{prop:"appointment_count",label:`${n.meta.time_label||"当前"}挂号`,"min-width":"118",align:"right",sortable:""},null,8,["label"]),o(d,{prop:"tomorrow_count",label:"明日预约","min-width":"105",align:"right",sortable:""}),o(d,{prop:"day_after_count",label:"后日预约","min-width":"105",align:"right",sortable:""}),o(d,{prop:"order_count",label:"诊单","min-width":"86",align:"right",sortable:""}),o(d,{label:"业绩","min-width":"128",align:"right",sortable:"","sort-method":R},{default:i(({row:s})=>[c(l(p(s.order_amount)),1)]),_:1}),o(d,{label:"较上期","min-width":"105",align:"right"},{default:i(({row:s})=>[t("span",{class:b(["rate-text",x(s.appointment_compare_rate)])},l(E(s.appointment_compare_rate)),3)]),_:1}),o(d,{label:"状态","min-width":"92",align:"center"},{default:i(()=>[...e[11]||(e[11]=[t("span",{class:"status-pill"},[t("i"),c("正常")],-1)])]),_:1})]),_:1},8,["data"])]),t("section",Yt,[t("div",Qt,[t("div",null,[e[12]||(e[12]=t("h2",null,"一诊诊金目标追踪",-1)),t("p",null,l(n.target.year)+" 年 · "+l(n.target.scope_note),1)]),t("span",Zt,l(n.target.department_count||0)+" 个目标部门",1)]),t("div",te,[t("div",ee,[t("div",ae,[t("div",null,[e[13]||(e[13]=t("span",null,"年度目标",-1)),t("strong",null,l(p(n.target.target_amount)),1)]),t("div",null,[e[14]||(e[14]=t("span",null,"已完成",-1)),t("strong",null,l(p(n.target.actual_amount)),1)]),t("div",null,[e[15]||(e[15]=t("span",null,"完成率",-1)),t("strong",ne,l(q(n.target.completion_rate)),1)])]),o(Z,{percentage:G(n.target.completion_rate),"show-text":!1,"stroke-width":13,color:"#139a8c"},null,8,["percentage"]),Number(n.target.target_amount)>0?(r(),m("p",le," 尚差 "+l(p(Math.max(0,Number(n.target.target_amount)-Number(n.target.actual_amount))))+" 达成年度目标 ",1)):(r(),m("p",se,"当前范围未维护可用目标,实际业绩仍按统一口径正常统计。"))]),t("div",oe,[e[16]||(e[16]=t("div",{class:"chart-legend"},[t("i",{class:"actual"}),c("累计完成 "),t("i",{class:"target"}),c("累计目标")],-1)),o(_(kt),{class:"target-chart",option:A.value,autoresize:""},null,8,["option"])])])]),t("section",ie,[t("article",re,[t("div",de,[t("div",null,[t("h2",null,l(n.meta.time_label||"今日")+"业绩 TOP",1),e[17]||(e[17]=t("p",null,"按业务订单创建人排序",-1))]),e[18]||(e[18]=t("span",{class:"panel-badge"},"金额",-1))]),n.rankings.performance.length?(r(),m("div",me,[(r(!0),m(N,null,S(n.rankings.performance,(s,h)=>(r(),m("div",{key:`performance-${s.admin_id}`,class:"ranking-row"},[t("b",{class:b({"is-top":h<3})},l(h+1),3),t("span",null,[c(l(s.name),1),t("small",null,l(s.count)+" 单",1)]),t("div",ue,[t("i",{style:F({width:M(s.value,P.value)})},null,4)]),t("strong",null,l(p(s.value)),1)]))),128))])):(r(),k(v,{key:1,"image-size":52,description:"暂无业绩数据"}))]),t("article",ce,[t("div",pe,[t("div",null,[t("h2",null,l(n.meta.time_label||"今日")+"挂号 TOP",1),e[19]||(e[19]=t("p",null,"按有效挂号数量排序",-1))]),e[20]||(e[20]=t("span",{class:"panel-badge"},"挂号",-1))]),n.rankings.appointments.length?(r(),m("div",_e,[(r(!0),m(N,null,S(n.rankings.appointments,(s,h)=>(r(),m("div",{key:`appointment-${s.admin_id}`,class:"ranking-row"},[t("b",{class:b({"is-top":h<3})},l(h+1),3),t("span",null,[c(l(s.name),1),e[21]||(e[21]=t("small",null,"有效预约",-1))]),t("div",ge,[t("i",{style:F({width:M(s.value,B.value)})},null,4)]),t("strong",null,l(w(s.value))+" 个",1)]))),128))])):(r(),k(v,{key:1,"image-size":52,description:"暂无挂号数据"}))])]),t("section",be,[t("div",fe,[e[22]||(e[22]=t("div",null,[t("h2",null,"按部门统计"),t("p",null,"员工按最深层有效归属部门唯一计入,避免多部门重复累计")],-1)),t("span",he,l(n.departments.length)+" 个部门",1)]),o($,{data:n.departments,class:"stats-table department-table"},{empty:i(()=>[o(v,{description:"当前范围暂无部门汇总"})]),default:i(()=>[o(d,{prop:"name",label:"部门","min-width":"220"},{default:i(({row:s})=>[t("strong",null,l(s.name),1)]),_:1}),o(d,{prop:"member_count",label:"人数","min-width":"90",align:"right",sortable:""}),o(d,{prop:"appointment_count",label:`${n.meta.time_label||"当前"}挂号`,"min-width":"118",align:"right",sortable:""},null,8,["label"]),o(d,{prop:"tomorrow_count",label:"明日预约","min-width":"105",align:"right",sortable:""}),o(d,{prop:"order_count",label:"诊单","min-width":"90",align:"right",sortable:""}),o(d,{label:"业绩","min-width":"130",align:"right"},{default:i(({row:s})=>[c(l(p(s.order_amount)),1)]),_:1}),o(d,{label:"挂号环比","min-width":"110",align:"right"},{default:i(({row:s})=>[t("span",{class:b(["rate-text",x(s.appointment_compare_rate)])},l(E(s.appointment_compare_rate)),3)]),_:1})]),_:1},8,["data"])]),t("footer",ye,[o(g,null,{default:i(()=>[o(_(wt))]),_:1}),t("span",null,l(n.meta.appointment_rule)+""+l(n.meta.performance_rule)+"。",1)])])),[[tt,y.value]])}}}),Ce=Ct(ke,[["__scopeId","data-v-eb3397f3"]]);export{Ce as default};