Files
zyt/server/public/admin/assets/index-BE3H3p8s.js
T
2026-08-24 16:56:37 +08:00

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