Files
zyt/server/public/admin/assets/index-D9FI0CBd.js
T
2026-08-05 11:55:10 +08:00

2 lines
11 KiB
JavaScript

import{o as z,ba as O,ap as Q,ac as Z,bi as ee,q as r,r as i,s as e,T as s,v as o,D as u,u as w,cO as te,w as ae,L as _,P as F,by as le,K as ne,cP as se,F as b,G as y,O as x,bn as oe,bm as re,bK as ie,t as L,bB as de,bk as ue,ae as ce,bj as me,bX as _e,cJ as pe,M as ge,p as f,E as he}from"./.pnpm-Bie2Sx_u.js";import{f as be}from"./first_visit-QY1EjRaI.js";import{_ as ye}from"./index-BwhoO6F6.js";const fe={class:"conversion-page","element-loading-text":"正在汇总权限范围内的数据"},ve={class:"page-heading"},ke={class:"heading-meta"},we={class:"scope-chip"},xe={key:0},Ne={class:"filter-strip"},Ve={class:"filter-item filter-item--time"},Ce={class:"filter-item"},Ee={class:"filter-item"},Me={class:"range-text"},Se={class:"metric-grid","aria-label":"综合转化指标"},De={class:"ranking-grid"},Oe={class:"panel ranking-panel"},Fe={key:0,class:"bar-list"},Le=["title"],ze={class:"bar-track"},Pe={class:"panel ranking-panel"},$e={key:0,class:"bar-list"},Be=["title"],Te={class:"bar-track"},Ae={class:"panel detail-panel"},Ie={class:"panel-heading panel-heading--table"},je={class:"panel target-panel"},qe={class:"panel-heading"},Re={class:"target-layout"},Ue={class:"target-progress-list"},Ge={class:"target-summary"},Ke={class:"is-teal"},He={class:"progress-block"},Je={class:"progress-copy"},We={class:"progress-block progress-block--month"},Xe={class:"progress-copy"},Ye={key:0,class:"target-empty-note"},Qe={class:"trend-wrap"},Ze=z({name:"firstVisitConversionPage"}),et=z({...Ze,setup(tt){const N=()=>({meta:{time_type:"today",time_label:"今日",start_date:"",end_date:"",generated_at:"",scope_value:4,scope_label:"",selected_dept_name:"",selected_assistant_name:"",open_count_source:""},filters:{departments:[],assistants:[]},summary:{},rankings:{orders:[],amounts:[]},rows:[],target:{year:new Date().getFullYear(),target_amount:0,actual_amount:0,completion_rate:null,current_month_target:0,current_month_actual:0,current_month_rate:null,department_count:0,months:[],target_cumulative:[],actual_cumulative:[]}}),a=O(N()),h=ge(!1),c=O({time_type:"today",dept_id:void 0,assistant_id:void 0}),P={value:"id",label:"name",children:"children"},$=[{label:"今日",value:"today"},{label:"本周",value:"week"},{label:"本月",value:"month"},{label:"本季度",value:"quarter"},{label:"本年",value:"year"}],B=[{key:"add_fans_count",label:"加粉数",type:"count",hint:"企微新增客户"},{key:"total_open_count",label:"开口数",type:"count",hint:"来源于个人业绩录入"},{key:"interview_count",label:"面诊",type:"count",hint:"已完成挂号"},{key:"completed_order_count",label:"接诊诊单",type:"count",hint:"处方与支付审核通过"},{key:"completed_order_amount",label:"诊单金额",type:"money",hint:"与接诊诊单同口径"},{key:"avg_unit_price",label:"平均客单价",type:"money",hint:"诊单金额 / 接诊诊单"},{key:"account_cost",label:"现金成本",type:"money",hint:"当前范围内实际投放成本"},{key:"roi",label:"ROI",type:"ratio",hint:"诊单金额 / 投放成本"}],T=f(()=>{const l=[`${a.meta.time_label||"当前区间"}数据`,a.meta.scope_label||"当前权限范围"];return a.meta.selected_dept_name&&l.push(a.meta.selected_dept_name),a.meta.selected_assistant_name&&l.push(a.meta.selected_assistant_name),l.join(" · ")}),A=f(()=>Math.max(0,...a.rankings.orders.map(l=>Number(l.value||0)))),I=f(()=>Math.max(0,...a.rankings.amounts.map(l=>Number(l.value||0)))),j=f(()=>({animationDuration:450,color:["#0f9185","#2f78df"],tooltip:{trigger:"axis",valueFormatter:l=>d(l)},grid:{left:62,right:24,top:28,bottom:36},xAxis:{type:"category",boundaryGap:!1,data:a.target.months,axisLine:{lineStyle:{color:"#d9e1e9"}},axisLabel:{color:"#718096"}},yAxis:{type:"value",axisLabel:{color:"#718096",formatter:l=>U(l)},splitLine:{lineStyle:{color:"#edf1f5"}}},series:[{name:"实际完成",type:"line",smooth:!0,symbol:"none",lineStyle:{width:3},areaStyle:{color:"rgba(15,145,133,.08)"},data:a.target.actual_cumulative},{name:"目标值",type:"line",smooth:!0,symbol:"none",lineStyle:{width:2,type:"dashed"},data:a.target.target_cumulative}]}));async function p(){h.value=!0;try{const l=await be(c);Object.assign(a,N(),l||{})}catch(l){he.error((l==null?void 0:l.message)||"综合数据加载失败")}finally{h.value=!1}}function q(){c.assistant_id=void 0,p()}function R(l,t){const g=a.summary[l];return t==="money"?d(g):t==="ratio"?E(g):V(g)}function V(l){return Math.round(Number(l||0)).toLocaleString("zh-CN")}function d(l){return${Number(l||0).toLocaleString("zh-CN",{minimumFractionDigits:2,maximumFractionDigits:2})}`}function C(l){return`${Number(l||0).toFixed(1)}%`}function v(l){return l==null?"未设置":C(l)}function E(l){return Number(l||0).toFixed(2)}function U(l){return Math.abs(l)>=1e4?`${(l/1e4).toFixed(0)}万`:String(Math.round(l))}function M(l,t){return t<=0?"0%":`${Math.max(4,Math.min(100,Number(l||0)/t*100))}%`}function S(l){return Math.max(0,Math.min(100,Number(l||0)))}return Q(p),(l,t)=>{const g=ae,G=ne,K=se,H=oe,J=re,W=ie,k=de,m=ue,X=me,D=_e,Y=ee;return Z((r(),i("div",fe,[e("header",ve,[e("div",null,[t[3]||(t[3]=e("h1",null,"综合数据转化",-1)),e("p",null,s(T.value),1)]),e("div",ke,[e("span",we,[o(g,null,{default:u(()=>[o(w(te))]),_:1}),_(s(a.meta.scope_label||"数据范围"),1)]),a.meta.generated_at?(r(),i("span",xe,"更新于 "+s(a.meta.generated_at),1)):F("",!0),o(G,{icon:w(le),loading:h.value,onClick:p},{default:u(()=>[...t[4]||(t[4]=[_("刷新",-1)])]),_:1},8,["icon","loading"])])]),e("section",Ne,[e("div",Ve,[t[5]||(t[5]=e("span",{class:"filter-label"},"时间范围",-1)),o(K,{modelValue:c.time_type,"onUpdate:modelValue":t[0]||(t[0]=n=>c.time_type=n),options:$,onChange:p},null,8,["modelValue"])]),e("div",Ce,[t[6]||(t[6]=e("span",{class:"filter-label"},"搜索员工",-1)),o(J,{modelValue:c.assistant_id,"onUpdate:modelValue":t[1]||(t[1]=n=>c.assistant_id=n),clearable:"",filterable:"",placeholder:"全部员工",class:"employee-select",onChange:p},{default:u(()=>[(r(!0),i(b,null,y(a.filters.assistants,n=>(r(),x(H,{key:n.id,label:n.name,value:Number(n.id)},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",Ee,[t[7]||(t[7]=e("span",{class:"filter-label"},"部门",-1)),o(W,{modelValue:c.dept_id,"onUpdate:modelValue":t[2]||(t[2]=n=>c.dept_id=n),data:a.filters.departments,props:P,"node-key":"id",clearable:"",filterable:"","check-strictly":"","default-expand-all":"",placeholder:"全部可见部门",class:"dept-select",onChange:q},null,8,["modelValue","data"])]),e("span",Me,s(a.meta.start_date)+" 至 "+s(a.meta.end_date),1)]),e("section",Se,[(r(),i(b,null,y(B,n=>e("article",{key:n.key,class:"metric-card"},[e("span",null,s(n.label),1),e("strong",null,s(R(n.key,n.type)),1),e("small",null,s(n.hint),1)])),64))]),e("section",De,[e("article",Oe,[t[8]||(t[8]=e("div",{class:"panel-heading"},[e("div",null,[e("h2",null,"部门订单量占比"),e("p",null,"当前范围内审核通过的接诊诊单")]),e("span",null,"单位:单")],-1)),a.rankings.orders.length?(r(),i("div",Fe,[(r(!0),i(b,null,y(a.rankings.orders,n=>(r(),i("div",{key:`order-${n.id}`,class:"bar-row"},[e("span",{class:"bar-name",title:n.name},s(n.name),9,Le),e("div",ze,[e("i",{class:"is-teal",style:L({width:M(n.value,A.value)})},null,4)]),e("strong",null,s(V(n.value))+" 单",1)]))),128))])):(r(),x(k,{key:1,"image-size":54,description:"当前范围暂无订单数据"}))]),e("article",Pe,[t[9]||(t[9]=e("div",{class:"panel-heading"},[e("div",null,[e("h2",null,"部门金额占比"),e("p",null,"与诊单金额指标保持同一审核口径")]),e("span",null,"单位:元")],-1)),a.rankings.amounts.length?(r(),i("div",$e,[(r(!0),i(b,null,y(a.rankings.amounts,n=>(r(),i("div",{key:`amount-${n.id}`,class:"bar-row"},[e("span",{class:"bar-name",title:n.name},s(n.name),9,Be),e("div",Te,[e("i",{class:"is-blue",style:L({width:M(n.value,I.value)})},null,4)]),e("strong",null,s(d(n.value)),1)]))),128))])):(r(),x(k,{key:1,"image-size":54,description:"当前范围暂无金额数据"}))])]),e("section",Ae,[e("div",Ie,[t[10]||(t[10]=e("div",null,[e("h2",null,"明细数据列表"),e("p",null,"部门层级汇总;父级包含其下级数据")],-1)),e("span",null,s(a.rows.length)+" 个顶层节点",1)]),o(X,{data:a.rows,"row-key":"id","tree-props":{children:"children"},"default-expand-all":"",class:"detail-table"},{empty:u(()=>[o(k,{description:"当前权限范围内暂无转化数据"})]),default:u(()=>[o(m,{prop:"name",label:"部门","min-width":"230",fixed:"left"},{default:u(({row:n})=>[e("strong",{class:ce({"is-parent":Array.isArray(n.children)&&n.children.length})},s(n.name),3)]),_:1}),o(m,{prop:"add_fans_count",label:"加粉","min-width":"88",align:"right"}),o(m,{prop:"total_open_count",label:"开口","min-width":"88",align:"right"}),o(m,{prop:"interview_count",label:"面诊","min-width":"88",align:"right"}),o(m,{prop:"completed_order_count",label:"接诊诊单","min-width":"104",align:"right"}),o(m,{label:"诊单金额","min-width":"120",align:"right"},{default:u(({row:n})=>[_(s(d(n.completed_order_amount)),1)]),_:1}),o(m,{label:"接诊率","min-width":"96",align:"right"},{default:u(({row:n})=>[_(s(C(n.interview_receive_rate)),1)]),_:1}),o(m,{label:"ROI","min-width":"86",align:"right"},{default:u(({row:n})=>[_(s(E(n.roi)),1)]),_:1})]),_:1},8,["data"])]),e("section",je,[e("div",qe,[e("div",null,[t[11]||(t[11]=e("h2",null,"一诊诊金目标追踪",-1)),e("p",null,s(a.target.year)+" 年 · 按当前角色、部门及员工筛选范围计算",1)]),e("span",null,s(a.target.department_count)+" 个目标部门",1)]),e("div",Re,[e("div",Ue,[e("div",Ge,[e("div",null,[t[12]||(t[12]=e("span",null,"年度目标",-1)),e("strong",null,s(d(a.target.target_amount)),1)]),e("div",null,[t[13]||(t[13]=e("span",null,"已完成",-1)),e("strong",null,s(d(a.target.actual_amount)),1)]),e("div",null,[t[14]||(t[14]=e("span",null,"完成率",-1)),e("strong",Ke,s(v(a.target.completion_rate)),1)])]),e("div",He,[e("div",Je,[t[15]||(t[15]=e("span",null,"年度范围目标",-1)),e("b",null,s(v(a.target.completion_rate)),1)]),o(D,{percentage:S(a.target.completion_rate),"show-text":!1,"stroke-width":12,color:"#0f9185"},null,8,["percentage"]),e("small",null,"已完成 "+s(d(a.target.actual_amount))+" / 目标 "+s(d(a.target.target_amount)),1)]),e("div",We,[e("div",Xe,[t[16]||(t[16]=e("span",null,"本月范围目标",-1)),e("b",null,s(v(a.target.current_month_rate)),1)]),o(D,{percentage:S(a.target.current_month_rate),"show-text":!1,"stroke-width":12,color:"#2f78df"},null,8,["percentage"]),e("small",null,"已完成 "+s(d(a.target.current_month_actual))+" / 目标 "+s(d(a.target.current_month_target)),1)]),Number(a.target.target_amount)<=0?(r(),i("div",Ye," 当前可见部门尚未维护本年度月度目标,实际诊单金额仍会正常统计。 ")):F("",!0)]),e("div",Qe,[t[17]||(t[17]=e("div",{class:"trend-title"},[e("span",null,"年度累计趋势"),e("div",null,[e("i",{class:"legend-line is-actual"}),_("实际完成 "),e("i",{class:"legend-line is-target"}),_("目标值")])],-1)),o(w(pe),{class:"target-chart",option:j.value,autoresize:""},null,8,["option"])])])])])),[[Y,h.value]])}}}),st=ye(et,[["__scopeId","data-v-8241067b"]]);export{st as default};