Files
zyt/server/public/admin/assets/index-RGrXU0Bv.js
T
2026-07-02 11:57:54 +08:00

2 lines
16 KiB
JavaScript

import{_ as Re}from"./index.vue_vue_type_script_setup_true_lang-ByFSC-yR.js";import{o as te,ap as Fe,q as r,r as S,v as o,D as n,b9 as Me,b6 as Ie,cR as Be,O as u,bK as Ue,bm as $e,F as z,G as W,bn as He,bc as Ye,bb as je,L as b,bp as Ke,P as O,K as qe,u as k,bg as Ge,s as i,T as v,ae as Z,c8 as Je,cJ as R,bB as Qe,c7 as Xe,bj as Ze,bk as et,w as tt,cl as at,br as nt,C as lt,M as x,ba as ee,p as d,E as ot}from"./.pnpm-BGZW0UGg.js";import{s as st}from"./stats-QndOkCTY.js";import{u as rt}from"./usePaging-C4oc3vBq.js";import{_ as it}from"./index-CTzEhZ24.js";const dt={class:"conversion-stats-page"},ut={class:"stats-kpi-grid"},ct={class:"stats-kpi-label"},pt={class:"card-header"},mt={class:"card-hint"},yt={class:"card-header"},_t={class:"card-header"},bt={class:"card-header"},vt={class:"card-header-main"},ht={class:"card-hint"},ft=["title"],gt={class:"entity-name"},kt={class:"mt-4 flex justify-end"},Ct=te({name:"conversionStatsPage"}),St=te({...Ct,setup(xt){const C=x([]),F=x([]),M=x([]),I=x([]),B=x([]),U=x([]),$=x(!1),c=ee({dimension:"dept",date_range:[],summary:{},charts:{ranking:{names:[],amounts:[],order_counts:[],fan_counts:[],rois:[],appointment_counts:[],interview_counts:[]},amount_share:[],fan_share:[],order_share:[]}}),l=ee({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 s;e.include_filters=$.value?0:1,l.time_type==="custom"&&(e.start_date=C.value[0]||"",e.end_date=C.value[1]||"");const t=await st(e);return Object.assign(c,(t==null?void 0:t.extend)||{}),ge((s=t==null?void 0:t.extend)==null?void 0:s.filters),t},{pager:p,getLists:H}=rt({fetchFun:ae,params:l,firstLoading:!0}),ne=[{label:"部门",value:"dept"},{label:"医助",value:"assistant"},{label:"医生",value:"doctor"}],le={value:"id",label:"name",children:"children"},oe={children:"children"},w=d(()=>l.dimension==="assistant"?"医助":l.dimension==="doctor"?"医生":"部门"),se=d(()=>l.dimension==="assistant"?I.value:l.dimension==="doctor"?B.value:M.value),V=d({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}}),re=[{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(()=>l.dimension==="doctor"),ce=d(()=>f.value?ie:re),pe=d(()=>f.value?ue:de),Y=d(()=>{var e;return(e=c.date_range)!=null&&e.length?`${c.date_range[0]}${c.date_range[1]}`:"未选择"}),me=d(()=>c.charts.ranking.names.length>0),ye=d(()=>c.charts.amount_share.length>0),_e=d(()=>{var e,t;return f.value?(((e=c.charts.order_share)==null?void 0:e.length)||0)>0:(((t=c.charts.fan_share)==null?void 0:t.length)||0)>0}),j=d(()=>f.value?"开药金额占比":"诊单金额占比"),K=d(()=>f.value?"接诊单数占比":"加粉占比"),be=d(()=>f.value?"暂无接诊数据":"暂无加粉数据"),h=d(()=>{var m;const e=((m=c.charts)==null?void 0:m.ranking)||{},t=Array.isArray(e.names)?e.names:[],s=y=>t.map((_,T)=>Number((y==null?void 0:y[T])??0));return{names:t,amounts:s(Array.isArray(e.amounts)?e.amounts:[]),appointmentCounts:s(Array.isArray(e.appointment_counts)?e.appointment_counts:[]),interviewCounts:s(Array.isArray(e.interview_counts)?e.interview_counts:[]),orderCounts:s(Array.isArray(e.order_counts)?e.order_counts:[]),fanCounts:s(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"}}]}}),he=d(()=>({tooltip:{trigger:"item"},legend:{bottom:0,type:"scroll",pageIconColor:"#409eff",pageTextStyle:{color:"#909399"}},series:[{name:j.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:c.charts.amount_share}]})),fe=d(()=>({tooltip:{trigger:"item"},legend:{bottom:0,type:"scroll",pageIconColor:"#409eff",pageTextStyle:{color:"#909399"}},series:[{name:K.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?c.charts.order_share:c.charts.fan_share}]})),q=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(q(s.children)))}),t},ge=e=>{if(!e)return;$.value=!0;const t=Array.isArray(e.departments)?e.departments:[],s=Array.isArray(e.assistants)?e.assistants:[],m=Array.isArray(e.doctors)?e.doctors:[],y=Array.isArray(e.media_channels)?e.media_channels:[];F.value=t,M.value=q(t),I.value=s.map(_=>({id:Number(_.id),name:_.name})),B.value=m.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),ot.error((e==null?void 0:e.msg)||"获取统计数据失败")}},ke=()=>{l.dept_id=void 0,l.assistant_id=void 0,l.doctor_id=void 0,p.page=1,g()},G=()=>{p.page=1,g()},Ce=()=>{p.page=1,g()},Se=()=>{l.time_type!=="custom"&&(C.value=[],p.page=1,g())},xe=()=>{C.value.length===2&&(p.page=1,g())},we=()=>{p.page=1,g()},Ee=()=>{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",C.value=[],p.page=1,p.size=15,g()},J=(e,t,s="count",m=!1)=>{if(m)return"—";const y=(t==null?void 0:t[e])??0;return s==="money"?${Number(y||0).toFixed(2)}`:s==="percent"?`${Number(y||0).toFixed(2)}%`:s==="ratio"?Number(y||0).toFixed(2):String(y??0)},Ae=e=>(e==null?void 0:e.id)!==void 0&&(e==null?void 0:e.id)!==null?String(e.id):"",Oe=e=>(e==null?void 0:e.type)==="member"||(e==null?void 0:e.type)==="unbound",Ve=({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 Fe(async()=>{await g()}),(e,t)=>{const s=Be,m=Ie,y=Ue,_=He,T=$e,E=je,Te=Ye,Pe=Ke,Q=qe,ze=Me,A=Ge,D=Qe,P=Je,L=Xe,We=tt,N=nt,X=et,De=Ze,Le=Re;return r(),S("div",dt,[o(A,{class:"!border-none",shadow:"never"},{default:n(()=>[o(ze,{inline:!0,model:l,class:"stats-filter-form"},{default:n(()=>[o(m,{label:"统计维度"},{default:n(()=>[o(s,{modelValue:l.dimension,"onUpdate:modelValue":t[0]||(t[0]=a=>l.dimension=a),options:ne,onChange:ke},null,8,["modelValue"])]),_:1}),o(m,{label:w.value},{default:n(()=>[l.dimension==="dept"?(r(),u(y,{key:0,modelValue:V.value,"onUpdate:modelValue":t[1]||(t[1]=a=>V.value=a),data:F.value,placeholder:`全部${w.value}`,clearable:"",filterable:"","node-key":"id","check-strictly":"","default-expand-all":!0,props:le,style:{width:"220px"},onChange:G},null,8,["modelValue","data","placeholder"])):(r(),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:G},{default:n(()=>[(r(!0),S(z,null,W(se.value,a=>(r(),u(_,{key:a.id,label:a.name,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"]))]),_:1},8,["label"]),o(m,{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:Ce},{default:n(()=>[(r(!0),S(z,null,W(U.value,a=>(r(),u(_,{key:a.code,label:a.name,value:a.code},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),o(m,{label:"时间范围"},{default:n(()=>[o(Te,{modelValue:l.time_type,"onUpdate:modelValue":t[4]||(t[4]=a=>l.time_type=a),onChange:Se},{default:n(()=>[o(E,{label:"today"},{default:n(()=>[...t[7]||(t[7]=[b("今天",-1)])]),_:1}),o(E,{label:"yesterday"},{default:n(()=>[...t[8]||(t[8]=[b("昨天",-1)])]),_:1}),o(E,{label:"week"},{default:n(()=>[...t[9]||(t[9]=[b("最近7天",-1)])]),_:1}),o(E,{label:"month"},{default:n(()=>[...t[10]||(t[10]=[b("最近30天",-1)])]),_:1}),o(E,{label:"custom"},{default:n(()=>[...t[11]||(t[11]=[b("自定义",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),l.time_type==="custom"?(r(),u(m,{key:0},{default:n(()=>[o(Pe,{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),o(m,null,{default:n(()=>[o(Q,{type:"primary",loading:k(p).loading,onClick:we},{default:n(()=>[...t[12]||(t[12]=[b("查询",-1)])]),_:1},8,["loading"]),o(Q,{onClick:Ee},{default:n(()=>[...t[13]||(t[13]=[b("重置",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),i("div",ut,[(r(!0),S(z,null,W(ce.value,a=>(r(),S("div",{key:a.key,class:"stats-kpi-card"},[i("div",ct,v(a.label),1),i("div",{class:Z(["stats-kpi-value",{"is-money":a.type==="money"}])},v(J(a.key,c.summary,a.type,a.placeholder)),3)]))),128))]),o(L,{gutter:20,class:"mt-4"},{default:n(()=>[o(P,{span:24},{default:n(()=>[o(A,{class:"!border-none",shadow:"never"},{header:n(()=>[i("div",pt,[t[14]||(t[14]=i("span",null,"转化排行",-1)),i("span",mt,v(Y.value)+" · TOP 10",1)])]),default:n(()=>[me.value?(r(),u(k(R),{key:0,class:"stats-chart stats-chart-wide",option:ve.value,autoresize:""},null,8,["option"])):(r(),u(D,{key:1,description:"暂无图表数据"}))]),_:1})]),_:1})]),_:1}),o(L,{gutter:20,class:"mt-4"},{default:n(()=>[o(P,{xs:24,lg:12},{default:n(()=>[o(A,{class:"!border-none",shadow:"never"},{header:n(()=>[i("div",yt,[i("span",null,v(j.value),1),t[15]||(t[15]=i("span",{class:"card-hint"},"TOP 10",-1))])]),default:n(()=>[ye.value?(r(),u(k(R),{key:0,class:"stats-chart",option:he.value,autoresize:""},null,8,["option"])):(r(),u(D,{key:1,description:"暂无金额数据"}))]),_:1})]),_:1}),o(P,{xs:24,lg:12},{default:n(()=>[o(A,{class:"!border-none",shadow:"never"},{header:n(()=>[i("div",_t,[i("span",null,v(K.value),1),t[16]||(t[16]=i("span",{class:"card-hint"},"TOP 10",-1))])]),default:n(()=>[_e.value?(r(),u(k(R),{key:0,class:"stats-chart",option:fe.value,autoresize:""},null,8,["option"])):(r(),u(D,{key:1,description:be.value},null,8,["description"]))]),_:1})]),_:1})]),_:1}),o(L,{gutter:20,class:"mt-4"},{default:n(()=>[o(P,{span:24},{default:n(()=>[o(A,{class:"!border-none stats-detail-card",shadow:"never"},{header:n(()=>[i("div",bt,[i("div",vt,[t[17]||(t[17]=i("span",{class:"card-title"},"明细列表",-1)),i("span",ht,v(w.value)+"维度 · "+v(Y.value),1)])])]),default:n(()=>[o(De,{data:k(p).lists,"row-key":Ae,"tree-props":l.dimension==="dept"?oe:void 0,"default-expand-all":!1,indent:20,"row-class-name":Ve,size:"default",style:{width:"100%"},"max-height":"640",border:""},{default:n(()=>[o(X,{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},[Oe(a)?(r(),S("span",{key:0,class:Z(["member-icon",{"is-leader":a.is_leader,"is-unbound":a.type==="unbound"}])},[o(We,null,{default:n(()=>[o(k(at))]),_:1})],2)):O("",!0),i("span",gt,v(a.name),1),a.type==="member"&&a.is_leader?(r(),u(N,{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?(r(),u(N,{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"?(r(),u(N,{key:3,size:"small",type:"danger",effect:"plain",round:"",class:"role-tag"},{default:n(()=>[...t[19]||(t[19]=[b(" 未绑定 ",-1)])]),_:1})):O("",!0)],8,ft)]),_:1},8,["label"]),(r(!0),S(z,null,W(pe.value,a=>(r(),u(X,{key:a.key,label:a.label,"min-width":a.minWidth||110,width:a.width,align:a.align||"center"},{default:n(({row:Ne})=>[b(v(J(a.key,Ne,a.type,a.placeholder)),1)]),_:2},1032,["label","min-width","width","align"]))),128))]),_:1},8,["data","tree-props"]),i("div",kt,[o(Le,{modelValue:k(p),"onUpdate:modelValue":t[6]||(t[6]=a=>lt(p)?p.value=a:null),onChange:k(H)},null,8,["modelValue","onChange"])])]),_:1})]),_:1})]),_:1})])}}}),Tt=it(St,[["__scopeId","data-v-ab5d8498"]]);export{Tt as default};