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