2 lines
14 KiB
JavaScript
2 lines
14 KiB
JavaScript
import{_ as we}from"./index.vue_vue_type_script_setup_true_lang-BIrcOljy.js";import{D as Ce,B as xe,aj as Oe,W as Ve,P as Ee,Q as Ae,G as Se,F as Ne,a2 as Pe,i as Te,J as We,a4 as De,R as Le,a3 as Fe,M as Re,N as ze,E as Ie}from"./element-plus-CGvZDWx9.js";import{H as W}from"./vue-echarts-C_P3Zfkr.js";import{g as Me}from"./stats-C2i-ix5x.js";import{u as Be}from"./usePaging-BIG1oWvJ.js";import{f as Q,b as Ue,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 $e,J as s,A as y}from"./@vue/runtime-core-tF_2qJHK.js";import{y as b,a as He,n as g,r as G}from"./@vue/reactivity-BmZ-20sQ.js";import{Q as k,o as Ye}from"./@vue/shared-mAAVTE9n.js";import{_ as je}from"./index-CruYaYFe.js";import"./@vue/runtime-dom-CEiKlVMn.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-CGmK0q4e.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-Rf8enzZx.js";import"./tslib-BDyQ-Jie.js";import"./zrender-C0YiHEZX.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-BjeWxBI0.js";import"./pinia-CTWOnonq.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-Da2f2eD_.js";import"./@vueuse/shared-Bl-RnC0s.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-Bm7NQW9r.js";const Ge={class:"conversion-stats-page"},Qe={class:"stats-kpi-grid"},Je={class:"stats-kpi-label"},qe={class:"card-header"},Ke={class:"card-hint"},Xe={class:"card-header"},Ze={class:"card-hint"},et=["title"],tt={class:"mt-4 flex justify-end"},at=Q({name:"conversionStatsPage"}),nt=Q({...at,setup(ot){const v=g([]),D=g([]),L=g([]),F=g([]),R=g([]),z=g([]),I=g(!1),c=G({dimension:"dept",date_range:[],summary:{},charts:{ranking:{names:[],amounts:[],order_counts:[],fan_counts:[],rois:[]},amount_share:[],fan_share:[]}}),n=G({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=I.value?0:1,n.time_type==="custom"&&(t.start_date=v.value[0]||"",t.end_date=v.value[1]||"");const e=await Me(t);return Object.assign(c,(e==null?void 0:e.extend)||{}),de((r=e==null?void 0:e.extend)==null?void 0:r.filters),e},{pager:d,getLists:M}=Be({fetchFun:J,params:n,firstLoading:!0}),q=[{label:"部门",value:"dept"},{label:"医助",value:"assistant"},{label:"医生",value:"doctor"}],K={value:"id",label:"name",children:"children"},X={children:"children"},w=y(()=>n.dimension==="assistant"?"医助":n.dimension==="doctor"?"医生":"部门"),Z=y(()=>n.dimension==="assistant"?F.value:n.dimension==="doctor"?R.value:L.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}}),ee=[{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"}],te=[{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}],ae=y(()=>{var t;return(t=c.date_range)!=null&&t.length?`${c.date_range[0]} 至 ${c.date_range[1]}`:"未选择"}),ne=y(()=>c.charts.ranking.names.length>0),oe=y(()=>c.charts.amount_share.length>0),le=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:[])}}),re=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"}}]})),se=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}]})),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.fan_share}]})),B=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(B(r.children)))}),e},de=t=>{if(!t)return;I.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:[];D.value=e,L.value=B(e),F.value=r.map(m=>({id:Number(m.id),name:m.name})),R.value=p.map(m=>({id:Number(m.id),name:m.name})),z.value=u.map(m=>({code:String(m.code||""),name:String(m.name||"")}))},f=async()=>{try{await M()}catch(t){console.error("获取统计概览失败:",t),Ie.error((t==null?void 0:t.msg)||"获取统计数据失败")}},pe=()=>{n.dept_id=void 0,n.assistant_id=void 0,n.doctor_id=void 0,d.page=1,f()},U=()=>{d.page=1,f()},ue=()=>{d.page=1,f()},me=()=>{n.time_type!=="custom"&&(v.value=[],d.page=1,f())},ce=()=>{v.value.length===2&&(d.page=1,f())},_e=()=>{d.page=1,f()},ye=()=>{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()},$=(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 Ue(async()=>{await f()}),(t,e)=>{const r=Oe,p=xe,u=Ve,m=Ae,A=Ee,x=Ne,fe=Se,he=Pe,H=Te,ve=Ce,O=We,T=Le,S=De,Y=Fe,j=ze,be=Re,ge=we;return i(),V("div",Ge,[l(O,{class:"!border-none",shadow:"never"},{default:o(()=>[l(ve,{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:q,onChange:pe},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:D.value,placeholder:`全部${w.value}`,clearable:"",filterable:"","node-key":"id","check-strictly":"","default-expand-all":!0,props:K,style:{width:"220px"},onChange:U},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:U},{default:o(()=>[(i(!0),V(N,null,P(Z.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:ue},{default:o(()=>[(i(!0),V(N,null,P(z.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(fe,{modelValue:n.time_type,"onUpdate:modelValue":e[4]||(e[4]=a=>n.time_type=a),onChange:me},{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(he,{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:ce},null,8,["modelValue"])]),_:1})):$e("",!0),l(p,null,{default:o(()=>[l(H,{type:"primary",loading:b(d).loading,onClick:_e},{default:o(()=>[...e[12]||(e[12]=[h("查询",-1)])]),_:1},8,["loading"]),l(H,{onClick:ye},{default:o(()=>[...e[13]||(e[13]=[h("重置",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),s("div",Qe,[(i(),V(N,null,P(ee,a=>s("div",{key:a.key,class:"stats-kpi-card"},[s("div",Je,k(a.label),1),s("div",{class:Ye(["stats-kpi-value",{"is-money":a.type==="money"}])},k($(a.key,c.summary,a.type,a.placeholder)),3)])),64))]),l(Y,{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",qe,[e[14]||(e[14]=s("span",null,"转化排行",-1)),s("span",Ke,k(ae.value),1)])]),default:o(()=>[ne.value?(i(),_(b(W),{key:0,class:"stats-chart",option:re.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(()=>[oe.value?(i(),_(b(W),{key:0,class:"stats-chart",option:se.value,autoresize:""},null,8,["option"])):(i(),_(T,{key:1,description:"暂无金额数据"}))]),_:1})]),_:1})]),_:1}),l(Y,{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(()=>[le.value?(i(),_(b(W),{key:0,class:"stats-chart",option:ie.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",Xe,[e[17]||(e[17]=s("span",null,"明细列表",-1)),s("span",Ze,k(w.value)+"维度",1)])]),default:o(()=>[l(be,{data:b(d).lists,"row-key":n.dimension==="dept"?"id":void 0,"tree-props":n.dimension==="dept"?X:void 0,"default-expand-all":!1,size:"large",style:{width:"100%"},"max-height":"560"},{default:o(()=>[l(j,{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,et)]),_:1},8,["label"]),(i(),V(N,null,P(te,a=>l(j,{key:a.key,label:a.label,"min-width":a.minWidth||110,width:a.width,align:a.align||"center"},{default:o(({row:ke})=>[h(k($(a.key,ke,a.type,a.placeholder)),1)]),_:2},1032,["label","min-width","width","align"])),64))]),_:1},8,["data","row-key","tree-props"]),s("div",tt,[l(ge,{modelValue:b(d),"onUpdate:modelValue":e[6]||(e[6]=a=>He(d)?d.value=a:null),onChange:b(M)},null,8,["modelValue","onChange"])])]),_:1})]),_:1})]),_:1})])}}}),Gt=je(nt,[["__scopeId","data-v-b634f554"]]);export{Gt as default};
|