Files
zyt/server/public/admin/assets/index-0cLGCysG.js
T
2026-08-07 14:38:25 +08:00

2 lines
13 KiB
JavaScript

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