Files
zyt/server/public/admin/assets/index-CBaaBP0Y.js
T
2026-09-03 18:05:32 +08:00

2 lines
17 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 q,ap as ue,bo as fe,bx as ge,ac as ve,bi as ye,q as o,r,s as t,v as i,D as c,u as m,cL as ke,w as he,cO as be,L as d,T as s,P as g,by as we,K as xe,O as p,bh as $e,bZ as Ne,F as u,ae as h,dd as F,de as z,cg as K,a1 as De,G as L,df as Ce,bK as Se,t as W,bB as Me,cP as Fe,cJ as ze,bX as Le,ba as Ee,M as x,p as v}from"./.pnpm-BSw4l71J.js";import{v as Ie}from"./stats-BQq-dFZD.js";import{_ as Ve}from"./index-0obBWZiZ.js";const Te={class:"performance-dashboard","element-loading-text":"正在汇总权限范围内的数据"},Pe={class:"dashboard-header"},Re={class:"dashboard-heading"},Be={class:"dashboard-heading__icon"},Oe={class:"dashboard-title-row"},Ae={class:"scope-badge"},je={key:0},Ue={class:"dashboard-actions"},Ge={key:0,class:"updated-at"},Ke={key:1,class:"dashboard-skeleton"},We={class:"performance-strip","aria-label":"业绩概览"},qe={class:"metric-card metric-card--primary"},He={class:"metric-value metric-value--money"},Je={class:"metric-card"},Xe={class:"metric-value metric-value--money"},Ze={class:"metric-card"},Qe={class:"metric-value metric-value--money"},Ye={key:0,class:"metric-card"},et={class:"metric-label-row"},tt={class:"metric-value metric-value--money"},at={class:"metric-card metric-card--clock"},nt={class:"metric-value metric-value--time"},ot={class:"metric-foot"},st={class:"operating-grid","aria-label":"今日运营指标"},rt={class:"metric-label"},lt={class:"metric-comparisons"},it={class:"metric-hint"},ct={class:"dashboard-grid dashboard-grid--rankings"},dt={class:"dashboard-panel ranking-panel"},_t={class:"panel-header"},mt={key:0},pt={class:"panel-header-actions"},ut={key:0,class:"ranking-list"},ft={class:"ranking-main"},gt={class:"ranking-copy"},vt={key:0,class:"ranking-self-tag"},yt={class:"ranking-meter","aria-hidden":"true"},kt={class:"ranking-value"},ht={class:"dashboard-panel ranking-panel"},bt={class:"panel-header"},wt={key:0,class:"ranking-list"},xt={class:"ranking-main"},$t={class:"ranking-copy"},Nt={key:0,class:"ranking-self-tag"},Dt={class:"ranking-meter","aria-hidden":"true"},Ct={class:"ranking-value ranking-value--money"},St={class:"dashboard-grid dashboard-grid--bottom"},Mt={class:"dashboard-panel trend-panel"},Ft={class:"panel-header panel-header--stack-mobile"},zt={class:"dashboard-panel target-panel"},Lt={class:"panel-header"},Et={class:"panel-meta"},It={class:"target-block"},Vt={class:"target-copy"},Tt={key:0},Pt={key:1},Rt={class:"target-block target-block--secondary"},Bt={class:"target-copy"},Ot={key:0,class:"target-empty-note"},At={class:"dashboard-notes"},jt={key:3,class:"dashboard-empty"},Ut=q({name:"performanceDashboardPage"}),Gt=q({...Ut,setup(Kt){const b=()=>({direction:"flat",rate:null,previous:0}),B=()=>({scope:{key:"",kind:"",scope_value:4,label:"",is_limited:!0,viewer_name:"",viewer_id:0,role_ids:[],role_names:[],department_names:[],visible_member_count:0},performance:{month_amount:0,month_compare_rate:null,month_compare_label:"",today_amount:0,today_compare_rate:null,today_compare_label:"",yesterday_amount:0,yesterday_compare_rate:null,yesterday_compare_label:"",personal_month_amount:0},today:{add_fans_count:0,appointment_total_count:0,low_amount_payment_count:0,interview_count:0,completed_order_count:0,completed_order_amount:0,paid_appointment_count:0,paid_appointment_rate:0,interview_receive_rate:0,comparisons:{add_fans_count:b(),appointment_total_count:b(),low_amount_payment_count:b(),interview_count:b(),completed_order_count:b(),completed_order_amount:b(),paid_appointment_rate:b(),interview_receive_rate:b()}},rankings:{appointments:{title:"实时挂号排行",kind:"assistant",metric:"registration",scope_label:"",items:[]},performance:{title:"今日部门业绩排行",kind:"dept",scope_label:"",items:[]}},filters:{ranking_departments:[],ranking_dept_id:0,ranking_selectable:!0},trend:{date_range:[],dates:[],registrations:[],appointments:[],leads:[],orders:[]},target:{year_month:"",target_amount:0,completed_amount:0,completion_rate:null,personal_amount:0,personal_contribution_rate:null,department_count:0},meta:{generated_at:"",timezone:"",commission_note:"",rate_note:""}}),e=Ee(B()),$=x(!1),N=x(!1),D=x(""),E=x("registrations"),C=x(),I=x(new Date);let V;const H={value:"id",label:"name",children:"children"},J=[{label:"挂号",value:"registrations"},{label:"预约",value:"appointments"},{label:"进线",value:"leads"},{label:"诊单",value:"orders"}],X=v(()=>{const n=e.scope.role_names.length?e.scope.role_names.join("、"):"管理员",a=e.scope.department_names.length?e.scope.department_names.join("、"):"未绑定部门";return`${e.scope.viewer_name||"当前账号"}${n}${a}`}),Z=v(()=>[{key:"fans",label:"今日加粉",value:y(e.today.add_fans_count),hint:"按企微新增客户事件统计",comparisons:[e.today.comparisons.add_fans_count]},{key:"appointments",label:"今日预约",value:y(e.today.appointment_total_count),hint:"状态为已预约、已完成或改期,排除已取消",comparisons:[e.today.comparisons.appointment_total_count]},{key:"lowAmountPayments",label:"今日挂号",value:`${y(e.today.low_amount_payment_count)} `,hint:"已支付且实收金额大于 0、低于 10 元的订单",comparisons:[e.today.comparisons.low_amount_payment_count]},{key:"orders",label:"今日接诊 / 诊单金额",value:"",hint:"按业务订单统计,排除取消、拒收和退款",comparisons:[{...e.today.comparisons.completed_order_count,label:"诊单"},{...e.today.comparisons.completed_order_amount,label:"金额"}]},{key:"appointmentRate",label:"挂号率",value:S(e.today.paid_appointment_rate),hint:`挂号 ${y(e.today.paid_appointment_count)} / 加粉数`,comparisons:[e.today.comparisons.paid_appointment_rate]},{key:"receiveRate",label:"接诊率",value:S(e.today.interview_receive_rate),hint:"诊单数 / 面诊数",comparisons:[e.today.comparisons.interview_receive_rate]},{key:"interviews",label:"今日面诊",value:y(e.today.interview_count),hint:"状态为已完成的预约",comparisons:[e.today.comparisons.interview_count]}]),Q=v(()=>new Intl.DateTimeFormat("zh-CN",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(I.value)),Y=v(()=>new Intl.DateTimeFormat("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",weekday:"short"}).format(I.value)),ee=v(()=>e.filters.ranking_selectable!==!1&&e.scope.kind!=="group_leader"&&e.rankings.appointments.kind!=="doctor"&&e.filters.ranking_departments.length>0),O=v(()=>e.rankings.appointments.metric==="appointment"?"预约":"挂号"),A=v(()=>{if(e.rankings.appointments.metric==="appointment")return"";const n=e.rankings.appointments.kind==="doctor"?"医生":"成员";return`${e.rankings.appointments.scope_label||"当前部门"}${n}已支付且实收低于 10 元的订单数`}),te=v(()=>{const n=e.rankings.performance.scope_label||"当前部门";return e.rankings.performance.kind==="person"?e.scope.kind==="group_leader"?"本小组内今日计入业绩的个人订单":`${n}内今日计入业绩的个人订单`:`${n}内今日计入业绩的业务订单`}),ae=v(()=>Math.max(0,...e.rankings.appointments.items.map(n=>Number(n.count||0)))),ne=v(()=>Math.max(0,...e.rankings.performance.items.map(n=>Number(n.amount||0)))),oe=v(()=>{const a={registrations:{label:"挂号",data:e.trend.registrations},appointments:{label:"预约",data:e.trend.appointments},leads:{label:"进线",data:e.trend.leads},orders:{label:"诊单",data:e.trend.orders}}[E.value];return{animationDuration:320,tooltip:{trigger:"axis",valueFormatter:_=>`${y(_)} 条`},grid:{left:42,right:18,top:24,bottom:30,containLabel:!0},xAxis:{type:"category",boundaryGap:!1,data:e.trend.dates,axisLine:{lineStyle:{color:"#d9e0e7"}},axisLabel:{color:"#7d8996"}},yAxis:{type:"value",minInterval:1,splitLine:{lineStyle:{color:"#edf1f4"}},axisLabel:{color:"#7d8996"}},series:[{name:a.label,type:"line",smooth:.35,showSymbol:!0,symbolSize:7,data:a.data,lineStyle:{color:"#0f8f83",width:3},itemStyle:{color:"#0f8f83",borderColor:"#ffffff",borderWidth:2},areaStyle:{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"rgba(15, 143, 131, 0.20)"},{offset:1,color:"rgba(15, 143, 131, 0.01)"}]}}}]}}),k=(n,a=2)=>${new Intl.NumberFormat("zh-CN",{minimumFractionDigits:a,maximumFractionDigits:a}).format(Number(n||0))}`,y=n=>new Intl.NumberFormat("zh-CN",{maximumFractionDigits:0}).format(Number(n||0)),S=n=>n===null?"暂无":`${Number(n||0).toFixed(1)}%`,T=n=>`${n>=0?"+":""}${Number(n).toFixed(1)}%`,P=n=>n===null||n===0?"":n>0?"is-positive":"is-negative",se=n=>n==="up"?"is-positive":n==="down"?"is-negative":"is-flat",re=n=>{const a=n.label?`${n.label} `:"";if(n.direction==="flat")return`${a}较昨日持平`;const _=n.direction==="up"?"上升":"下降";return n.rate===null?`${a}较昨日${_}(昨日为 0`:`${a}较昨日${_} ${Math.abs(Number(n.rate)).toFixed(1)}%`},j=(n,a)=>a<=0||n<=0?"0%":`${Math.max(6,Math.min(100,Number(n)/a*100))}%`,U=n=>n===null||!Number.isFinite(Number(n))?0:Math.max(0,Math.min(100,Number(n))),w=async()=>{$.value=!0,D.value="";try{const n=await Ie({ranking_dept_id:N.value?C.value||0:void 0,_t:Date.now()});Object.assign(e,B(),n||{}),C.value=Number(e.filters.ranking_dept_id||0)||void 0,N.value=!0}catch(n){D.value=(n==null?void 0:n.msg)||(n==null?void 0:n.message)||"驾驶舱数据加载失败,请稍后重试"}finally{$.value=!1}},le=()=>{w()};return ue(()=>{w(),V=setInterval(()=>{I.value=new Date},1e3)}),fe(()=>{N.value&&w()}),ge(()=>{V&&clearInterval(V)}),(n,a)=>{const _=he,R=xe,ie=$e,ce=Ne,de=De,_e=Se,M=Me,me=Fe,G=Le,pe=ye;return ve((o(),r("div",Te,[t("header",Pe,[t("div",Re,[t("div",Be,[i(_,null,{default:c(()=>[i(m(ke))]),_:1})]),t("div",null,[t("div",Oe,[a[2]||(a[2]=t("h1",null,"我的首页",-1)),t("span",Ae,[i(_,null,{default:c(()=>[i(m(be))]),_:1}),d(" "+s(e.scope.label||"数据范围"),1)])]),t("p",null,[d(s(X.value)+" ",1),e.scope.visible_member_count>0?(o(),r("span",je," ,当前可见 "+s(e.scope.visible_member_count)+" 位成员 ",1)):g("",!0)])])]),t("div",Ue,[e.meta.generated_at?(o(),r("div",Ge," 数据更新于 "+s(e.meta.generated_at),1)):g("",!0),i(R,{icon:m(we),loading:$.value,onClick:w},{default:c(()=>[...a[3]||(a[3]=[d("刷新数据",-1)])]),_:1},8,["icon","loading"])])]),D.value?(o(),p(ie,{key:0,class:"dashboard-error",type:"error",closable:!1,"show-icon":"",title:D.value},{default:c(()=>[i(R,{size:"small",onClick:w},{default:c(()=>[...a[4]||(a[4]=[d("重新加载",-1)])]),_:1})]),_:1},8,["title"])):g("",!0),!N.value&&$.value?(o(),r("div",Ke,[i(ce,{rows:12,animated:""})])):N.value?(o(),r(u,{key:2},[t("section",We,[t("article",qe,[a[5]||(a[5]=t("div",{class:"metric-label"},"本月实时业绩",-1)),t("div",He,s(k(e.performance.month_amount)),1),t("div",{class:h(["metric-foot",P(e.performance.month_compare_rate)])},[e.performance.month_compare_rate!==null?(o(),r(u,{key:0},[e.performance.month_compare_rate>=0?(o(),p(_,{key:0},{default:c(()=>[i(m(F))]),_:1})):(o(),p(_,{key:1},{default:c(()=>[i(m(z))]),_:1})),d(" "+s(e.performance.month_compare_label)+" "+s(T(e.performance.month_compare_rate)),1)],64)):(o(),r(u,{key:1},[d("上月同期暂无可比数据")],64))],2)]),t("article",Je,[a[6]||(a[6]=t("div",{class:"metric-label"},"今日新增业绩",-1)),t("div",Xe,s(k(e.performance.today_amount)),1),t("div",{class:h(["metric-foot",P(e.performance.today_compare_rate)])},[e.performance.today_compare_rate!==null?(o(),r(u,{key:0},[e.performance.today_compare_rate>=0?(o(),p(_,{key:0},{default:c(()=>[i(m(F))]),_:1})):(o(),p(_,{key:1},{default:c(()=>[i(m(z))]),_:1})),d(" "+s(e.performance.today_compare_label)+" "+s(T(e.performance.today_compare_rate)),1)],64)):(o(),r(u,{key:1},[d("昨日暂无可比数据")],64))],2)]),t("article",Ze,[a[7]||(a[7]=t("div",{class:"metric-label"},"昨日新增业绩",-1)),t("div",Qe,s(k(e.performance.yesterday_amount)),1),t("div",{class:h(["metric-foot",P(e.performance.yesterday_compare_rate)])},[e.performance.yesterday_compare_rate!==null?(o(),r(u,{key:0},[e.performance.yesterday_compare_rate>=0?(o(),p(_,{key:0},{default:c(()=>[i(m(F))]),_:1})):(o(),p(_,{key:1},{default:c(()=>[i(m(z))]),_:1})),d(" "+s(e.performance.yesterday_compare_label)+" "+s(T(e.performance.yesterday_compare_rate)),1)],64)):(o(),r(u,{key:1},[d("前一日暂无可比数据")],64))],2)]),e.scope.kind!=="assistant"?(o(),r("article",Ye,[t("div",et,[a[8]||(a[8]=t("span",null,"本人本月业绩",-1)),i(de,{content:e.meta.commission_note,placement:"top"},{default:c(()=>[i(_,{class:"metric-help"},{default:c(()=>[i(m(K))]),_:1})]),_:1},8,["content"])]),t("div",tt,s(k(e.performance.personal_month_amount)),1),a[9]||(a[9]=t("div",{class:"metric-foot"},"仅统计当前登录账号",-1))])):g("",!0),t("article",at,[a[10]||(a[10]=t("div",{class:"metric-label"},"当前时间",-1)),t("div",nt,s(Q.value),1),t("div",ot,s(Y.value),1)])]),t("section",st,[(o(!0),r(u,null,L(Z.value,l=>(o(),r("article",{key:l.key,class:"metric-card metric-card--compact"},[t("div",rt,s(l.label),1),t("div",{class:h(["metric-value",{"metric-value--pair":l.key==="orders"}])},[l.key==="orders"?(o(),r(u,{key:0},[d(s(y(e.today.completed_order_count))+" ",1),a[11]||(a[11]=t("span",null,"/",-1)),d(" "+s(k(e.today.completed_order_amount)),1)],64)):(o(),r(u,{key:1},[d(s(l.value),1)],64))],2),t("div",lt,[(o(!0),r(u,null,L(l.comparisons,f=>(o(),r("div",{key:`${l.key}-${f.label||"total"}`,class:h(["metric-foot",se(f.direction)])},[f.direction==="up"?(o(),p(_,{key:0},{default:c(()=>[i(m(F))]),_:1})):f.direction==="down"?(o(),p(_,{key:1},{default:c(()=>[i(m(z))]),_:1})):(o(),p(_,{key:2},{default:c(()=>[i(m(Ce))]),_:1})),d(" "+s(re(f)),1)],2))),128))]),t("div",it,s(l.hint),1)]))),128))]),t("section",ct,[t("article",dt,[t("div",_t,[t("div",null,[t("h2",null,s(e.rankings.appointments.title),1),A.value?(o(),r("p",mt,s(A.value),1)):g("",!0)]),t("div",pt,[ee.value?(o(),p(_e,{key:0,modelValue:C.value,"onUpdate:modelValue":a[0]||(a[0]=l=>C.value=l),data:e.filters.ranking_departments,props:H,"node-key":"id","check-strictly":"",clearable:"",filterable:"","default-expand-all":"",placeholder:"全部部门",class:"ranking-dept-select",onChange:le},null,8,["modelValue","data"])):g("",!0),a[12]||(a[12]=t("span",{class:"panel-meta"},"实时",-1))])]),e.rankings.appointments.items.length?(o(),r("div",ut,[(o(!0),r(u,null,L(e.rankings.appointments.items,(l,f)=>(o(),r("div",{key:`appointment-${l.id}-${f}`,class:h(["ranking-row",{"is-self":l.is_self}])},[t("span",{class:h(["ranking-index",{"is-top":f<2,"is-self":l.is_self}])},s(f+1),3),t("div",ft,[t("div",gt,[t("strong",null,[d(s(l.name||"未命名成员")+" ",1),l.is_self?(o(),r("i",vt,"我")):g("",!0)]),t("span",null,s(y(l.count))+" "+s(O.value),1)]),t("div",yt,[t("span",{style:W({width:j(l.count,ae.value)})},null,4)])]),t("b",kt,s(y(l.count)),1)],2))),128))])):(o(),p(M,{key:1,"image-size":72,description:`当前数据范围内暂无${O.value}排行`},null,8,["description"]))]),t("article",ht,[t("div",bt,[t("div",null,[t("h2",null,s(e.rankings.performance.title),1),t("p",null,s(te.value),1)]),a[13]||(a[13]=t("span",{class:"panel-meta"},"今日",-1))]),e.rankings.performance.items.length?(o(),r("div",wt,[(o(!0),r(u,null,L(e.rankings.performance.items,(l,f)=>(o(),r("div",{key:`performance-${l.id}-${f}`,class:h(["ranking-row",{"is-self":l.is_self}])},[t("span",{class:h(["ranking-index",{"is-top":f<2,"is-self":l.is_self}])},s(f+1),3),t("div",xt,[t("div",$t,[t("strong",null,[d(s(l.name||(e.rankings.performance.kind==="person"?"未命名成员":"未命名部门"))+" ",1),l.is_self?(o(),r("i",Nt,"我")):g("",!0)]),t("span",null,s(y(l.count))+" 个诊单",1)]),t("div",Dt,[t("span",{style:W({width:j(l.amount,ne.value)})},null,4)])]),t("b",Ct,s(k(l.amount)),1)],2))),128))])):(o(),p(M,{key:1,"image-size":72,description:"当前数据范围内暂无业务订单业绩"}))])]),t("section",St,[t("article",Mt,[t("div",Ft,[t("div",null,[a[14]||(a[14]=t("h2",null,"近 7 天数据趋势",-1)),t("p",null,s(e.trend.date_range.join(" 至 ")),1)]),i(me,{modelValue:E.value,"onUpdate:modelValue":a[1]||(a[1]=l=>E.value=l),options:J},null,8,["modelValue"])]),e.trend.dates.length?(o(),p(m(ze),{key:0,class:"trend-chart",option:oe.value,autoresize:""},null,8,["option"])):(o(),p(M,{key:1,"image-size":72,description:"暂无趋势数据"}))]),t("article",zt,[t("div",Lt,[t("div",null,[a[15]||(a[15]=t("h2",null,"进度目标",-1)),t("p",null,s(e.target.year_month)+",按当前角色数据范围计算",1)]),t("span",Et,s(e.target.department_count)+" 个目标部门",1)]),t("div",It,[t("div",Vt,[t("div",null,[a[16]||(a[16]=t("span",null,"范围目标进度",-1)),e.target.target_amount>0?(o(),r("strong",Tt,s(S(e.target.completion_rate)),1)):(o(),r("strong",Pt,"未设置"))]),t("p",null,[d(" 已完成 "+s(k(e.target.completed_amount))+" ",1),e.target.target_amount>0?(o(),r(u,{key:0},[d(" ,目标 "+s(k(e.target.target_amount)),1)],64)):g("",!0)])]),i(G,{percentage:U(e.target.completion_rate),"show-text":!1,"stroke-width":12,color:"#0f8f83"},null,8,["percentage"])]),t("div",Rt,[t("div",Bt,[t("div",null,[a[17]||(a[17]=t("span",null,"本人业绩贡献",-1)),t("strong",null,s(S(e.target.personal_contribution_rate)),1)]),t("p",null," 本人 "+s(k(e.target.personal_amount))+",占当前范围已完成业绩 ",1)]),i(G,{percentage:U(e.target.personal_contribution_rate),"show-text":!1,"stroke-width":12,color:"#738196"},null,8,["percentage"])]),e.target.target_amount<=0?(o(),r("div",Ot," 当前范围尚未设置本月部门目标,已完成业绩仍会正常统计。 ")):g("",!0)])]),t("footer",At,[i(_,null,{default:c(()=>[i(m(K))]),_:1}),t("span",null,s(e.meta.rate_note),1)])],64)):D.value?(o(),r("div",jt,[i(M,{description:"驾驶舱数据加载失败"},{default:c(()=>[i(R,{type:"primary",onClick:w},{default:c(()=>[...a[18]||(a[18]=[d("重新加载",-1)])]),_:1})]),_:1})])):g("",!0)])),[[pe,$.value]])}}}),Jt=Ve(Gt,[["__scopeId","data-v-8a87b9f7"]]);export{Jt as default};