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