2 lines
17 KiB
JavaScript
2 lines
17 KiB
JavaScript
import{_ as Le}from"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import{D as Me,B as Ie,ak as Be,Z as Ue,P as $e,Q as He,G as Ye,F as Ge,R as Qe,i as je,J as Je,ac as Ze,W as qe,ab as Ke,M as Xe,N as et,d as tt,T as at,E as nt}from"./element-plus-Bolc0EfP.js";import{Z as ot}from"./@element-plus/icons-vue-B0jSCQ-G.js";import{H as F}from"./vue-echarts-BNtg2q_G.js";import{s as lt}from"./stats-BnE5aE3N.js";import{u as rt}from"./usePaging-VsbTxSU0.js";import{f as te,b as st,ak as s,I as S,a as l,aN as n,G as u,F as N,ap as W,O as b,H as O,J as i,A as d}from"./@vue/runtime-core-C6bnekPw.js";import{y as k,a as it,n as x,r as X}from"./@vue/reactivity-DiY1c2vO.js";import{Q as v,o as ee}from"./@vue/shared-mAAVTE9n.js";import{_ as dt}from"./index-DsiMl32K.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.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-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.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-C4onkBvW.js";const ut={class:"conversion-stats-page"},pt={class:"stats-kpi-grid"},mt={class:"stats-kpi-label"},ct={class:"card-header"},yt={class:"card-hint"},_t={class:"card-header"},bt={class:"card-header"},vt={class:"card-header"},ft={class:"card-header-main"},ht={class:"card-hint"},gt=["title"],kt={class:"entity-name"},Ct={class:"mt-4 flex justify-end"},St=te({name:"conversionStatsPage"}),xt=te({...St,setup(wt){const C=x([]),L=x([]),M=x([]),I=x([]),B=x([]),U=x([]),$=x(!1),p=X({dimension:"dept",date_range:[],summary:{},charts:{ranking:{names:[],amounts:[],order_counts:[],fan_counts:[],rois:[],appointment_counts:[],interview_counts:[]},amount_share:[],fan_share:[],order_share:[]}}),o=X({dimension:"dept",dept_id:void 0,assistant_id:void 0,doctor_id:void 0,media_channel_code:"",time_type:"today",start_date:"",end_date:""}),ae=async e=>{var r;e.include_filters=$.value?0:1,o.time_type==="custom"&&(e.start_date=C.value[0]||"",e.end_date=C.value[1]||"");const t=await lt(e);return Object.assign(p,(t==null?void 0:t.extend)||{}),ge((r=t==null?void 0:t.extend)==null?void 0:r.filters),t},{pager:m,getLists:H}=rt({fetchFun:ae,params:o,firstLoading:!0}),ne=[{label:"部门",value:"dept"},{label:"医助",value:"assistant"},{label:"医生",value:"doctor"}],oe={value:"id",label:"name",children:"children"},le={children:"children"},w=d(()=>o.dimension==="assistant"?"医助":o.dimension==="doctor"?"医生":"部门"),re=d(()=>o.dimension==="assistant"?I.value:o.dimension==="doctor"?B.value:M.value),V=d({get:()=>o.dimension==="assistant"?o.assistant_id:o.dimension==="doctor"?o.doctor_id:o.dept_id,set:e=>{if(o.dimension==="assistant"){o.assistant_id=e;return}if(o.dimension==="doctor"){o.doctor_id=e;return}o.dept_id=e}}),se=[{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"}],ie=[{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"},{key:"receive_rate",label:"接诊率",type:"percent"}],de=[{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}],ue=[{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:"receive_rate",label:"接诊率",type:"percent",minWidth:100}],f=d(()=>o.dimension==="doctor"),pe=d(()=>f.value?ie:se),me=d(()=>f.value?ue:de),Y=d(()=>{var e;return(e=p.date_range)!=null&&e.length?`${p.date_range[0]} 至 ${p.date_range[1]}`:"未选择"}),ce=d(()=>p.charts.ranking.names.length>0),ye=d(()=>p.charts.amount_share.length>0),_e=d(()=>{var e,t;return f.value?(((e=p.charts.order_share)==null?void 0:e.length)||0)>0:(((t=p.charts.fan_share)==null?void 0:t.length)||0)>0}),G=d(()=>f.value?"开药金额占比":"诊单金额占比"),Q=d(()=>f.value?"接诊单数占比":"加粉占比"),be=d(()=>f.value?"暂无接诊数据":"暂无加粉数据"),h=d(()=>{var c;const e=((c=p.charts)==null?void 0:c.ranking)||{},t=Array.isArray(e.names)?e.names:[],r=y=>t.map((_,T)=>Number((y==null?void 0:y[T])??0));return{names:t,amounts:r(Array.isArray(e.amounts)?e.amounts:[]),appointmentCounts:r(Array.isArray(e.appointment_counts)?e.appointment_counts:[]),interviewCounts:r(Array.isArray(e.interview_counts)?e.interview_counts:[]),orderCounts:r(Array.isArray(e.order_counts)?e.order_counts:[]),fanCounts:r(Array.isArray(e.fan_counts)?e.fan_counts:[])}}),ve=d(()=>{const e={tooltip:{trigger:"axis"},grid:{left:48,right:24,top:48,bottom:48},xAxis:{type:"category",data:h.value.names,axisLabel:{interval:0,rotate:h.value.names.length>6?25:0}},yAxis:[{type:"value",name:"金额 / 数量"}]};return f.value?{...e,legend:{data:["开药金额","挂号数","面诊数","接诊单数"]},series:[{name:"开药金额",type:"bar",barMaxWidth:36,data:h.value.amounts,itemStyle:{color:"#4a78ff"}},{name:"挂号数",type:"line",smooth:!0,showSymbol:!0,symbolSize:8,lineStyle:{width:3},data:h.value.appointmentCounts,itemStyle:{color:"#15b8a6"}},{name:"面诊数",type:"line",smooth:!0,showSymbol:!0,symbolSize:8,lineStyle:{width:3},data:h.value.interviewCounts,itemStyle:{color:"#ff9f43"}},{name:"接诊单数",type:"line",smooth:!0,showSymbol:!0,symbolSize:8,lineStyle:{width:3},data:h.value.orderCounts,itemStyle:{color:"#7c3aed"}}]}:{...e,legend:{data:["诊单金额","接诊诊单","加粉数"]},series:[{name:"诊单金额",type:"bar",barMaxWidth:36,data:h.value.amounts,itemStyle:{color:"#4a78ff"}},{name:"接诊诊单",type:"line",smooth:!0,showSymbol:!0,symbolSize:8,lineStyle:{width:3},data:h.value.orderCounts,itemStyle:{color:"#15b8a6"}},{name:"加粉数",type:"line",smooth:!0,showSymbol:!0,symbolSize:8,lineStyle:{width:3},data:h.value.fanCounts,itemStyle:{color:"#ff9f43"}}]}}),fe=d(()=>({tooltip:{trigger:"item"},legend:{bottom:0,type:"scroll",pageIconColor:"#409eff",pageTextStyle:{color:"#909399"}},series:[{name:G.value,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:p.charts.amount_share}]})),he=d(()=>({tooltip:{trigger:"item"},legend:{bottom:0,type:"scroll",pageIconColor:"#409eff",pageTextStyle:{color:"#909399"}},series:[{name:Q.value,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:f.value?p.charts.order_share:p.charts.fan_share}]})),j=e=>{let t=[];return e.forEach(r=>{t.push({id:Number(r.id),name:r.name}),Array.isArray(r.children)&&r.children.length>0&&(t=t.concat(j(r.children)))}),t},ge=e=>{if(!e)return;$.value=!0;const t=Array.isArray(e.departments)?e.departments:[],r=Array.isArray(e.assistants)?e.assistants:[],c=Array.isArray(e.doctors)?e.doctors:[],y=Array.isArray(e.media_channels)?e.media_channels:[];L.value=t,M.value=j(t),I.value=r.map(_=>({id:Number(_.id),name:_.name})),B.value=c.map(_=>({id:Number(_.id),name:_.name})),U.value=y.map(_=>({code:String(_.code||""),name:String(_.name||"")}))},g=async()=>{try{await H()}catch(e){console.error("获取统计概览失败:",e),nt.error((e==null?void 0:e.msg)||"获取统计数据失败")}},ke=()=>{o.dept_id=void 0,o.assistant_id=void 0,o.doctor_id=void 0,m.page=1,g()},J=()=>{m.page=1,g()},Ce=()=>{m.page=1,g()},Se=()=>{o.time_type!=="custom"&&(C.value=[],m.page=1,g())},xe=()=>{C.value.length===2&&(m.page=1,g())},we=()=>{m.page=1,g()},Ae=()=>{o.dimension="dept",o.dept_id=void 0,o.assistant_id=void 0,o.doctor_id=void 0,o.media_channel_code="",o.time_type="today",C.value=[],m.page=1,m.size=15,g()},Ee=e=>{const t=Number((e==null?void 0:e.completed_order_count)||0),r=Number((e==null?void 0:e.interview_count)||0);return r<=0?0:t/r*100},Z=(e,t,r="count",c=!1)=>{if(c)return"—";const y=f.value&&e==="receive_rate"?Ee(t):(t==null?void 0:t[e])??0;return r==="money"?`¥${Number(y||0).toFixed(2)}`:r==="percent"?`${Number(y||0).toFixed(2)}%`:r==="ratio"?Number(y||0).toFixed(2):String(y??0)},Oe=e=>(e==null?void 0:e.id)!==void 0&&(e==null?void 0:e.id)!==null?String(e.id):"",Ve=e=>(e==null?void 0:e.type)==="member"||(e==null?void 0:e.type)==="unbound",Te=({row:e})=>(e==null?void 0:e.type)==="unbound"?"member-row member-row--unbound":(e==null?void 0:e.type)==="member"?e.is_leader?"member-row member-row--leader":"member-row":"";return st(async()=>{await g()}),(e,t)=>{const r=Be,c=Ie,y=Ue,_=He,T=$e,A=Ge,Pe=Ye,Ne=Qe,q=je,We=Me,E=Je,z=qe,P=Ze,D=Ke,ze=tt,R=at,K=et,De=Xe,Re=Le;return s(),S("div",ut,[l(E,{class:"!border-none",shadow:"never"},{default:n(()=>[l(We,{inline:!0,model:o,class:"stats-filter-form"},{default:n(()=>[l(c,{label:"统计维度"},{default:n(()=>[l(r,{modelValue:o.dimension,"onUpdate:modelValue":t[0]||(t[0]=a=>o.dimension=a),options:ne,onChange:ke},null,8,["modelValue"])]),_:1}),l(c,{label:w.value},{default:n(()=>[o.dimension==="dept"?(s(),u(y,{key:0,modelValue:V.value,"onUpdate:modelValue":t[1]||(t[1]=a=>V.value=a),data:L.value,placeholder:`全部${w.value}`,clearable:"",filterable:"","node-key":"id","check-strictly":"","default-expand-all":!0,props:oe,style:{width:"220px"},onChange:J},null,8,["modelValue","data","placeholder"])):(s(),u(T,{key:1,modelValue:V.value,"onUpdate:modelValue":t[2]||(t[2]=a=>V.value=a),placeholder:`全部${w.value}`,clearable:"",filterable:"",style:{width:"220px"},onChange:J},{default:n(()=>[(s(!0),S(N,null,W(re.value,a=>(s(),u(_,{key:a.id,label:a.name,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"]))]),_:1},8,["label"]),l(c,{label:"自媒体渠道"},{default:n(()=>[l(T,{modelValue:o.media_channel_code,"onUpdate:modelValue":t[3]||(t[3]=a=>o.media_channel_code=a),placeholder:"全部渠道",clearable:"",filterable:"",style:{width:"220px"},onChange:Ce},{default:n(()=>[(s(!0),S(N,null,W(U.value,a=>(s(),u(_,{key:a.code,label:a.name,value:a.code},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),l(c,{label:"时间范围"},{default:n(()=>[l(Pe,{modelValue:o.time_type,"onUpdate:modelValue":t[4]||(t[4]=a=>o.time_type=a),onChange:Se},{default:n(()=>[l(A,{label:"today"},{default:n(()=>[...t[7]||(t[7]=[b("今天",-1)])]),_:1}),l(A,{label:"yesterday"},{default:n(()=>[...t[8]||(t[8]=[b("昨天",-1)])]),_:1}),l(A,{label:"week"},{default:n(()=>[...t[9]||(t[9]=[b("最近7天",-1)])]),_:1}),l(A,{label:"month"},{default:n(()=>[...t[10]||(t[10]=[b("最近30天",-1)])]),_:1}),l(A,{label:"custom"},{default:n(()=>[...t[11]||(t[11]=[b("自定义",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),o.time_type==="custom"?(s(),u(c,{key:0},{default:n(()=>[l(Ne,{modelValue:C.value,"onUpdate:modelValue":t[5]||(t[5]=a=>C.value=a),type:"daterange","value-format":"YYYY-MM-DD","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期",style:{width:"260px"},onChange:xe},null,8,["modelValue"])]),_:1})):O("",!0),l(c,null,{default:n(()=>[l(q,{type:"primary",loading:k(m).loading,onClick:we},{default:n(()=>[...t[12]||(t[12]=[b("查询",-1)])]),_:1},8,["loading"]),l(q,{onClick:Ae},{default:n(()=>[...t[13]||(t[13]=[b("重置",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),i("div",pt,[(s(!0),S(N,null,W(pe.value,a=>(s(),S("div",{key:a.key,class:"stats-kpi-card"},[i("div",mt,v(a.label),1),i("div",{class:ee(["stats-kpi-value",{"is-money":a.type==="money"}])},v(Z(a.key,p.summary,a.type,a.placeholder)),3)]))),128))]),l(D,{gutter:20,class:"mt-4"},{default:n(()=>[l(P,{span:24},{default:n(()=>[l(E,{class:"!border-none",shadow:"never"},{header:n(()=>[i("div",ct,[t[14]||(t[14]=i("span",null,"转化排行",-1)),i("span",yt,v(Y.value)+" · TOP 10",1)])]),default:n(()=>[ce.value?(s(),u(k(F),{key:0,class:"stats-chart stats-chart-wide",option:ve.value,autoresize:""},null,8,["option"])):(s(),u(z,{key:1,description:"暂无图表数据"}))]),_:1})]),_:1})]),_:1}),l(D,{gutter:20,class:"mt-4"},{default:n(()=>[l(P,{xs:24,lg:12},{default:n(()=>[l(E,{class:"!border-none",shadow:"never"},{header:n(()=>[i("div",_t,[i("span",null,v(G.value),1),t[15]||(t[15]=i("span",{class:"card-hint"},"TOP 10",-1))])]),default:n(()=>[ye.value?(s(),u(k(F),{key:0,class:"stats-chart",option:fe.value,autoresize:""},null,8,["option"])):(s(),u(z,{key:1,description:"暂无金额数据"}))]),_:1})]),_:1}),l(P,{xs:24,lg:12},{default:n(()=>[l(E,{class:"!border-none",shadow:"never"},{header:n(()=>[i("div",bt,[i("span",null,v(Q.value),1),t[16]||(t[16]=i("span",{class:"card-hint"},"TOP 10",-1))])]),default:n(()=>[_e.value?(s(),u(k(F),{key:0,class:"stats-chart",option:he.value,autoresize:""},null,8,["option"])):(s(),u(z,{key:1,description:be.value},null,8,["description"]))]),_:1})]),_:1})]),_:1}),l(D,{gutter:20,class:"mt-4"},{default:n(()=>[l(P,{span:24},{default:n(()=>[l(E,{class:"!border-none stats-detail-card",shadow:"never"},{header:n(()=>[i("div",vt,[i("div",ft,[t[17]||(t[17]=i("span",{class:"card-title"},"明细列表",-1)),i("span",ht,v(w.value)+"维度 · "+v(Y.value),1)])])]),default:n(()=>[l(De,{data:k(m).lists,"row-key":Oe,"tree-props":o.dimension==="dept"?le:void 0,"default-expand-all":!1,indent:20,"row-class-name":Te,size:"default",style:{width:"100%"},"max-height":"640",border:""},{default:n(()=>[l(K,{label:w.value,prop:"name",fixed:"left","min-width":"300","class-name":"dept-name-column"},{default:n(({row:a})=>[i("div",{class:"dept-name-cell",title:a.name},[Ve(a)?(s(),S("span",{key:0,class:ee(["member-icon",{"is-leader":a.is_leader,"is-unbound":a.type==="unbound"}])},[l(ze,null,{default:n(()=>[l(k(ot))]),_:1})],2)):O("",!0),i("span",kt,v(a.name),1),a.type==="member"&&a.is_leader?(s(),u(R,{key:1,size:"small",type:"warning",effect:"light",round:"",class:"role-tag"},{default:n(()=>[...t[18]||(t[18]=[b(" 组长 ",-1)])]),_:1})):O("",!0),a.type==="member"&&a.role?(s(),u(R,{key:2,size:"small",type:a.role==="医生"?"success":"info",effect:"plain",round:"",class:"role-tag"},{default:n(()=>[b(v(a.role),1)]),_:2},1032,["type"])):O("",!0),a.type==="unbound"?(s(),u(R,{key:3,size:"small",type:"danger",effect:"plain",round:"",class:"role-tag"},{default:n(()=>[...t[19]||(t[19]=[b(" 未绑定 ",-1)])]),_:1})):O("",!0)],8,gt)]),_:1},8,["label"]),(s(!0),S(N,null,W(me.value,a=>(s(),u(K,{key:a.key,label:a.label,"min-width":a.minWidth||110,width:a.width,align:a.align||"center"},{default:n(({row:Fe})=>[b(v(Z(a.key,Fe,a.type,a.placeholder)),1)]),_:2},1032,["label","min-width","width","align"]))),128))]),_:1},8,["data","tree-props"]),i("div",Ct,[l(Re,{modelValue:k(m),"onUpdate:modelValue":t[6]||(t[6]=a=>it(m)?m.value=a:null),onChange:k(H)},null,8,["modelValue","onChange"])])]),_:1})]),_:1})]),_:1})])}}}),ya=dt(xt,[["__scopeId","data-v-dc9b311a"]]);export{ya as default};
|