Files
zyt/server/public/admin/assets/index-Cpwhwkr9.js
T
2026-04-27 10:31:26 +08:00

2 lines
14 KiB
JavaScript

import{_ as Ce}from"./index.vue_vue_type_script_setup_true_lang-DHyWBn5F.js";import{D as xe,B as Oe,ag as Ve,W as Ee,P as Ae,Q as Se,G as Ne,F as Pe,a2 as Te,i as We,J as De,a4 as Le,R as Fe,a3 as Re,M as ze,N as Ie,E as Me}from"./element-plus-Uuzrfxfo.js";import{H as W}from"./vue-echarts-CjH97xuT.js";import{r as Be,_ as Ue}from"./index-DVjedbgb.js";import{u as $e}from"./usePaging-B_C_SZ2Z.js";import{f as q,b as He,ak as i,I as V,a as l,aN as o,G as _,F as N,ap as P,O as h,H as Ye,J as s,A as y}from"./@vue/runtime-core-C0pg79pw.js";import{y as b,a as Ge,o as g,r as j}from"./@vue/reactivity-BIbyPIZJ.js";import{Q as k,o as Qe}from"./@vue/shared-mAAVTE9n.js";import"./@vue/runtime-dom-iFk_KP8y.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-CRomrsQH.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./resize-detector-G6vbKCU7.js";import"./echarts-CZvD9OL_.js";import"./tslib-BDyQ-Jie.js";import"./zrender-BQyIY4j9.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-CYz6RFzi.js";import"./pinia-Ba_jX6-d.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-DIKi2bJB.js";import"./@vueuse/shared-D8934tfB.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-BVMzZUvF.js";function je(D){return Be.get({url:"/stats.conversion/overview",params:D})}const qe={class:"conversion-stats-page"},Je={class:"stats-kpi-grid"},Ke={class:"stats-kpi-label"},Xe={class:"card-header"},Ze={class:"card-hint"},et={class:"card-header"},tt={class:"card-hint"},at=["title"],nt={class:"mt-4 flex justify-end"},ot=q({name:"conversionStatsPage"}),lt=q({...ot,setup(D){const v=g([]),L=g([]),F=g([]),R=g([]),z=g([]),I=g([]),M=g(!1),c=j({dimension:"dept",date_range:[],summary:{},charts:{ranking:{names:[],amounts:[],order_counts:[],fan_counts:[],rois:[]},amount_share:[],fan_share:[]}}),n=j({dimension:"dept",dept_id:void 0,assistant_id:void 0,doctor_id:void 0,media_channel_code:"",time_type:"today",start_date:"",end_date:""}),J=async t=>{var r;t.include_filters=M.value?0:1,n.time_type==="custom"&&(t.start_date=v.value[0]||"",t.end_date=v.value[1]||"");const e=await je(t);return Object.assign(c,(e==null?void 0:e.extend)||{}),pe((r=e==null?void 0:e.extend)==null?void 0:r.filters),e},{pager:d,getLists:B}=$e({fetchFun:J,params:n,firstLoading:!0}),K=[{label:"部门",value:"dept"},{label:"医助",value:"assistant"},{label:"医生",value:"doctor"}],X={value:"id",label:"name",children:"children"},Z={children:"children"},w=y(()=>n.dimension==="assistant"?"医助":n.dimension==="doctor"?"医生":"部门"),ee=y(()=>n.dimension==="assistant"?R.value:n.dimension==="doctor"?z.value:F.value),E=y({get:()=>n.dimension==="assistant"?n.assistant_id:n.dimension==="doctor"?n.doctor_id:n.dept_id,set:t=>{if(n.dimension==="assistant"){n.assistant_id=t;return}if(n.dimension==="doctor"){n.doctor_id=t;return}n.dept_id=t}}),te=[{key:"add_fans_count",label:"加粉数",type:"count"},{key:"paid_appointment_count",label:"付费挂号",type:"count"},{key:"free_appointment_count",label:"免费挂号",type:"count"},{key:"interview_count",label:"面诊",type:"count"},{key:"completed_order_count",label:"接诊诊单",type:"count"},{key:"paid_appointment_rate",label:"付费挂号率",type:"percent"},{key:"interview_rate",label:"面诊率",type:"percent"},{key:"receive_rate",label:"接诊率",type:"percent"},{key:"interview_receive_rate",label:"面诊接诊率",type:"percent"},{key:"business_order_amount",label:"业务订单额",type:"money"},{key:"completed_order_amount",label:"诊单金额",type:"money"},{key:"avg_unit_price",label:"平均单价",type:"money"},{key:"account_cost",label:"账户消耗",type:"money"},{key:"cash_cost",label:"现金成本",type:"money"},{key:"roi",label:"ROI",type:"ratio"}],ae=[{key:"add_fans_count",label:"加粉数",type:"count"},{key:"total_open_count",label:"总开口",type:"count",placeholder:!0},{key:"unreplied_count",label:"未回复",type:"count",placeholder:!0},{key:"paid_appointment_count",label:"付费挂号",type:"count"},{key:"free_appointment_count",label:"免费挂号",type:"count"},{key:"appointment_total_count",label:"挂号总数",type:"count"},{key:"interview_count",label:"面诊",type:"count"},{key:"completed_order_count",label:"接诊诊单",type:"count"},{key:"completed_order_amount",label:"诊单金额",type:"money",minWidth:120},{key:"paid_appointment_rate",label:"付费挂号率",type:"percent",minWidth:120},{key:"open_appointment_rate",label:"开口挂号率",type:"percent",placeholder:!0,minWidth:120},{key:"interview_rate",label:"面诊率",type:"percent",minWidth:100},{key:"receive_rate",label:"接诊率",type:"percent",minWidth:100},{key:"interview_receive_rate",label:"面诊接诊率",type:"percent",minWidth:130},{key:"open_receive_rate",label:"开口接诊率",type:"percent",placeholder:!0,minWidth:120},{key:"avg_unit_price",label:"平均单价",type:"money",minWidth:110},{key:"cash_cost",label:"现金成本",type:"money",minWidth:110},{key:"roi",label:"ROI",type:"ratio",minWidth:90}],ne=y(()=>{var t;return(t=c.date_range)!=null&&t.length?`${c.date_range[0]}${c.date_range[1]}`:"未选择"}),oe=y(()=>c.charts.ranking.names.length>0),le=y(()=>c.charts.amount_share.length>0),re=y(()=>c.charts.fan_share.length>0),C=y(()=>{var p;const t=((p=c.charts)==null?void 0:p.ranking)||{},e=Array.isArray(t.names)?t.names:[],r=u=>e.map((m,A)=>Number((u==null?void 0:u[A])??0));return{names:e,amounts:r(Array.isArray(t.amounts)?t.amounts:[]),orderCounts:r(Array.isArray(t.order_counts)?t.order_counts:[]),fanCounts:r(Array.isArray(t.fan_counts)?t.fan_counts:[])}}),se=y(()=>({tooltip:{trigger:"axis"},legend:{data:["诊单金额","接诊诊单","加粉数"]},grid:{left:48,right:24,top:48,bottom:48},xAxis:{type:"category",data:C.value.names,axisLabel:{interval:0,rotate:C.value.names.length>6?25:0}},yAxis:[{type:"value",name:"金额 / 数量"}],series:[{name:"诊单金额",type:"bar",barMaxWidth:36,data:C.value.amounts,itemStyle:{color:"#4a78ff"}},{name:"接诊诊单",type:"line",smooth:!0,showSymbol:!0,symbolSize:8,lineStyle:{width:3},data:C.value.orderCounts,itemStyle:{color:"#15b8a6"}},{name:"加粉数",type:"line",smooth:!0,showSymbol:!0,symbolSize:8,lineStyle:{width:3},data:C.value.fanCounts,itemStyle:{color:"#ff9f43"}}]})),ie=y(()=>({tooltip:{trigger:"item"},legend:{bottom:0,type:"scroll",pageIconColor:"#409eff",pageTextStyle:{color:"#909399"}},series:[{name:"诊单金额",type:"pie",radius:["42%","70%"],center:["50%","42%"],avoidLabelOverlap:!0,minAngle:3,label:{show:!0,formatter:"{b}",overflow:"truncate",width:90},labelLayout:{hideOverlap:!0},data:c.charts.amount_share}]})),de=y(()=>({tooltip:{trigger:"item"},legend:{bottom:0,type:"scroll",pageIconColor:"#409eff",pageTextStyle:{color:"#909399"}},series:[{name:"加粉数",type:"pie",radius:["42%","70%"],center:["50%","42%"],avoidLabelOverlap:!0,minAngle:3,label:{show:!0,formatter:"{b}",overflow:"truncate",width:90},labelLayout:{hideOverlap:!0},data:c.charts.fan_share}]})),U=t=>{let e=[];return t.forEach(r=>{e.push({id:Number(r.id),name:r.name}),Array.isArray(r.children)&&r.children.length>0&&(e=e.concat(U(r.children)))}),e},pe=t=>{if(!t)return;M.value=!0;const e=Array.isArray(t.departments)?t.departments:[],r=Array.isArray(t.assistants)?t.assistants:[],p=Array.isArray(t.doctors)?t.doctors:[],u=Array.isArray(t.media_channels)?t.media_channels:[];L.value=e,F.value=U(e),R.value=r.map(m=>({id:Number(m.id),name:m.name})),z.value=p.map(m=>({id:Number(m.id),name:m.name})),I.value=u.map(m=>({code:String(m.code||""),name:String(m.name||"")}))},f=async()=>{try{await B()}catch(t){console.error("获取统计概览失败:",t),Me.error((t==null?void 0:t.msg)||"获取统计数据失败")}},ue=()=>{n.dept_id=void 0,n.assistant_id=void 0,n.doctor_id=void 0,d.page=1,f()},$=()=>{d.page=1,f()},me=()=>{d.page=1,f()},ce=()=>{n.time_type!=="custom"&&(v.value=[],d.page=1,f())},_e=()=>{v.value.length===2&&(d.page=1,f())},ye=()=>{d.page=1,f()},fe=()=>{n.dimension="dept",n.dept_id=void 0,n.assistant_id=void 0,n.doctor_id=void 0,n.media_channel_code="",n.time_type="today",v.value=[],d.page=1,d.size=15,f()},H=(t,e,r="count",p=!1)=>{if(p)return"—";const u=(e==null?void 0:e[t])??0;return r==="money"?${Number(u||0).toFixed(2)}`:r==="percent"?`${Number(u||0).toFixed(2)}%`:r==="ratio"?Number(u||0).toFixed(2):String(u??0)};return He(async()=>{await f()}),(t,e)=>{const r=Ve,p=Oe,u=Ee,m=Se,A=Ae,x=Pe,he=Ne,ve=Te,Y=We,be=xe,O=De,T=Fe,S=Le,G=Re,Q=Ie,ge=ze,ke=Ce;return i(),V("div",qe,[l(O,{class:"!border-none",shadow:"never"},{default:o(()=>[l(be,{inline:!0,model:n,class:"stats-filter-form"},{default:o(()=>[l(p,{label:"统计维度"},{default:o(()=>[l(r,{modelValue:n.dimension,"onUpdate:modelValue":e[0]||(e[0]=a=>n.dimension=a),options:K,onChange:ue},null,8,["modelValue"])]),_:1}),l(p,{label:w.value},{default:o(()=>[n.dimension==="dept"?(i(),_(u,{key:0,modelValue:E.value,"onUpdate:modelValue":e[1]||(e[1]=a=>E.value=a),data:L.value,placeholder:`全部${w.value}`,clearable:"",filterable:"","node-key":"id","check-strictly":"","default-expand-all":!0,props:X,style:{width:"220px"},onChange:$},null,8,["modelValue","data","placeholder"])):(i(),_(A,{key:1,modelValue:E.value,"onUpdate:modelValue":e[2]||(e[2]=a=>E.value=a),placeholder:`全部${w.value}`,clearable:"",filterable:"",style:{width:"220px"},onChange:$},{default:o(()=>[(i(!0),V(N,null,P(ee.value,a=>(i(),_(m,{key:a.id,label:a.name,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"]))]),_:1},8,["label"]),l(p,{label:"自媒体渠道"},{default:o(()=>[l(A,{modelValue:n.media_channel_code,"onUpdate:modelValue":e[3]||(e[3]=a=>n.media_channel_code=a),placeholder:"全部渠道",clearable:"",filterable:"",style:{width:"220px"},onChange:me},{default:o(()=>[(i(!0),V(N,null,P(I.value,a=>(i(),_(m,{key:a.code,label:a.name,value:a.code},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),l(p,{label:"时间范围"},{default:o(()=>[l(he,{modelValue:n.time_type,"onUpdate:modelValue":e[4]||(e[4]=a=>n.time_type=a),onChange:ce},{default:o(()=>[l(x,{label:"today"},{default:o(()=>[...e[7]||(e[7]=[h("今天",-1)])]),_:1}),l(x,{label:"yesterday"},{default:o(()=>[...e[8]||(e[8]=[h("昨天",-1)])]),_:1}),l(x,{label:"week"},{default:o(()=>[...e[9]||(e[9]=[h("最近7天",-1)])]),_:1}),l(x,{label:"month"},{default:o(()=>[...e[10]||(e[10]=[h("最近30天",-1)])]),_:1}),l(x,{label:"custom"},{default:o(()=>[...e[11]||(e[11]=[h("自定义",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),n.time_type==="custom"?(i(),_(p,{key:0},{default:o(()=>[l(ve,{modelValue:v.value,"onUpdate:modelValue":e[5]||(e[5]=a=>v.value=a),type:"daterange","value-format":"YYYY-MM-DD","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期",style:{width:"260px"},onChange:_e},null,8,["modelValue"])]),_:1})):Ye("",!0),l(p,null,{default:o(()=>[l(Y,{type:"primary",loading:b(d).loading,onClick:ye},{default:o(()=>[...e[12]||(e[12]=[h("查询",-1)])]),_:1},8,["loading"]),l(Y,{onClick:fe},{default:o(()=>[...e[13]||(e[13]=[h("重置",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),s("div",Je,[(i(),V(N,null,P(te,a=>s("div",{key:a.key,class:"stats-kpi-card"},[s("div",Ke,k(a.label),1),s("div",{class:Qe(["stats-kpi-value",{"is-money":a.type==="money"}])},k(H(a.key,c.summary,a.type,a.placeholder)),3)])),64))]),l(G,{gutter:20,class:"mt-4"},{default:o(()=>[l(S,{xs:24,lg:14},{default:o(()=>[l(O,{class:"!border-none",shadow:"never"},{header:o(()=>[s("div",Xe,[e[14]||(e[14]=s("span",null,"转化排行",-1)),s("span",Ze,k(ne.value),1)])]),default:o(()=>[oe.value?(i(),_(b(W),{key:0,class:"stats-chart",option:se.value,autoresize:""},null,8,["option"])):(i(),_(T,{key:1,description:"暂无图表数据"}))]),_:1})]),_:1}),l(S,{xs:24,lg:10},{default:o(()=>[l(O,{class:"!border-none",shadow:"never"},{header:o(()=>[...e[15]||(e[15]=[s("div",{class:"card-header"},[s("span",null,"诊单金额占比"),s("span",{class:"card-hint"},"TOP 10")],-1)])]),default:o(()=>[le.value?(i(),_(b(W),{key:0,class:"stats-chart",option:ie.value,autoresize:""},null,8,["option"])):(i(),_(T,{key:1,description:"暂无金额数据"}))]),_:1})]),_:1})]),_:1}),l(G,{gutter:20,class:"mt-4"},{default:o(()=>[l(S,{xs:24,lg:10},{default:o(()=>[l(O,{class:"!border-none",shadow:"never"},{header:o(()=>[...e[16]||(e[16]=[s("div",{class:"card-header"},[s("span",null,"加粉占比"),s("span",{class:"card-hint"},"TOP 10")],-1)])]),default:o(()=>[re.value?(i(),_(b(W),{key:0,class:"stats-chart",option:de.value,autoresize:""},null,8,["option"])):(i(),_(T,{key:1,description:"暂无加粉数据"}))]),_:1})]),_:1}),l(S,{xs:24,lg:14},{default:o(()=>[l(O,{class:"!border-none",shadow:"never"},{header:o(()=>[s("div",et,[e[17]||(e[17]=s("span",null,"明细列表",-1)),s("span",tt,k(w.value)+"维度",1)])]),default:o(()=>[l(ge,{data:b(d).lists,"row-key":n.dimension==="dept"?"id":void 0,"tree-props":n.dimension==="dept"?Z:void 0,"default-expand-all":!1,size:"large",style:{width:"100%"},"max-height":"560"},{default:o(()=>[l(Q,{label:w.value,prop:"name",fixed:"left","min-width":"280","class-name":"dept-name-column","show-overflow-tooltip":""},{default:o(({row:a})=>[s("span",{class:"dept-name-cell",title:a.name},k(a.name),9,at)]),_:1},8,["label"]),(i(),V(N,null,P(ae,a=>l(Q,{key:a.key,label:a.label,"min-width":a.minWidth||110,width:a.width,align:a.align||"center"},{default:o(({row:we})=>[h(k(H(a.key,we,a.type,a.placeholder)),1)]),_:2},1032,["label","min-width","width","align"])),64))]),_:1},8,["data","row-key","tree-props"]),s("div",nt,[l(ke,{modelValue:b(d),"onUpdate:modelValue":e[6]||(e[6]=a=>Ge(d)?d.value=a:null),onChange:b(B)},null,8,["modelValue","onChange"])])]),_:1})]),_:1})]),_:1})])}}}),Qt=Ue(lt,[["__scopeId","data-v-b634f554"]]);export{Qt as default};