2 lines
17 KiB
JavaScript
2 lines
17 KiB
JavaScript
import{P as ae,Q as oe,af as se,a2 as re,i as ie,d as de,J as ue,L as ce,R as pe,r as _e,E as me}from"./element-plus-CGvZDWx9.js";import{M as fe,x as ve,i as C}from"./@element-plus/icons-vue-CGmK0q4e.js";import{y as ye,a as he,b as be,c as ge,d as we}from"./stats-C2i-ix5x.js";import{f as ke,b as xe,ak as s,I as r,a as i,aN as d,J as t,F as f,ap as x,G as R,O as o,aP as H,H as _,A as De}from"./@vue/runtime-core-tF_2qJHK.js";import{Q as a,o as X}from"./@vue/shared-mAAVTE9n.js";import{y as k,n as h}from"./@vue/reactivity-BmZ-20sQ.js";import{_ as Se}from"./index-CruYaYFe.js";import"./@vue/runtime-dom-CEiKlVMn.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"./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"./echarts-Rf8enzZx.js";import"./tslib-BDyQ-Jie.js";import"./zrender-C0YiHEZX.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-Bm7NQW9r.js";const je={class:"yeji-page"},Ce={class:"filter-surface"},Ee={class:"filter-row filter-row--top"},Oe={class:"filter-field"},Ve={class:"channel-opt-row"},Le={class:"opt-name"},Fe={class:"opt-count"},Ie={class:"filter-field filter-field--wide"},Me={class:"filter-field filter-field--date-top"},Ne={class:"filter-actions"},$e={class:"filter-quick"},Ye={class:"date-pills",role:"group","aria-label":"快捷日期"},ze=["onClick"],Re={class:"tables-wrap"},Te={key:0,class:"empty-tip"},Be={class:"yeji-table__header"},Ue={class:"yeji-table__body"},Pe={style:{"max-width":"320px","line-height":"1.7","font-size":"12px"}},qe={key:0,class:"col-completed"},Ge={key:1,class:"col-completed"},Je={style:{"max-width":"320px","line-height":"1.7","font-size":"12px"}},Qe={key:2,class:"col-completed"},Ae={style:{"max-width":"280px","line-height":"1.7","font-size":"12px"}},He={style:{"max-width":"320px","line-height":"1.7","font-size":"12px"}},Xe={class:"col-dept"},Ke={key:0,class:"col-completed"},We={key:1,class:"col-completed"},Ze={key:2,class:"col-completed"},et={class:"total-row"},tt={key:0,class:"col-completed"},lt={key:1,class:"col-completed"},nt={key:2,class:"col-completed"},at={class:"yeji-table__foot"},ot={key:0},st={key:1},rt={key:0,class:"leaderboards-wrap"},it={class:"leaderboard-hint"},dt={class:"muted"},ut={class:"tables-wrap"},ct={key:0,class:"yeji-table leaderboard-table"},pt={class:"yeji-table__header"},_t={key:0,class:"leaderboard-sub"},mt={class:"yeji-table__body"},ft={class:"col-rank"},vt={class:"col-abbr"},yt={class:"col-name"},ht={key:0,class:"empty-tip leaderboard-empty"},bt=ke({__name:"yeji",setup(gt){const E=h(!1),T=h([]),M=h(!1),D=h([]),B=h([]),N=h(!1),S=h(""),b=h(null),F=h([]),v=h(null),V=h(!1),K=De(()=>{var e;const l=(e=v.value)==null?void 0:e.leaderboards;return l?l.filter(u=>u.rows.length>0).length:0}),U=[{text:"昨天",value:()=>{const l=new Date;return l.setDate(l.getDate()-1),[l,l]}},{text:"最近七天",value:()=>{const l=new Date,e=new Date;return e.setDate(e.getDate()-6),[e,l]}},{text:"本月",value:()=>{const l=new Date;return[new Date(l.getFullYear(),l.getMonth(),1),l]}},{text:"今日",value:()=>{const l=new Date;return[l,l]}},{text:"本周",value:()=>{const l=new Date,e=new Date,u=e.getDay()||7;return e.setDate(e.getDate()-(u-1)),[e,l]}},{text:"上月",value:()=>{const l=new Date,e=new Date(l.getFullYear(),l.getMonth()-1,1),u=new Date(l.getFullYear(),l.getMonth(),0);return[e,u]}}];function W(l){const e=l.value();b.value=[Y(e[0]),Y(e[1])],L()}async function Z(){M.value=!0;try{const l=await ye();T.value=(l||[]).sort((e,u)=>{const c=e.name.includes("中心")?-1:1,w=u.name.includes("中心")?-1:1;return c!==w?c-w:e.id-u.id})}catch{}finally{M.value=!1}}async function ee(){N.value=!0;try{const l=await he(),e=(l==null?void 0:l.groups)||[];B.value=e}catch{}finally{N.value=!1}}async function P(l){V.value=!0;try{const e={start_date:l.start,end_date:l.end};D.value.length>0&&(e.dept_ids=D.value.join(",")),S.value&&(e.channel_code=S.value);const u=await we(e);v.value={start_date:u.start_date,end_date:u.end_date,channel_code:u.channel_code||"",channel_name:u.channel_name||"",channel_filter_note:u.channel_filter_note||"",range_note:u.range_note||"",leaderboards:u.leaderboards||[]}}catch{v.value=null}finally{V.value=!1}}async function L(){E.value=!0,v.value=null;try{const l={};if(D.value.length>0&&(l.dept_ids=D.value.join(",")),S.value&&(l.channel_code=S.value),b.value&&b.value[0]&&b.value[1]){const[c,w]=b.value,z={...l,start_date:c,end_date:w},p=await be(z);F.value=[{label:c===w?c:`${c} ~ ${w}`,start_date:p.start_date,end_date:p.end_date,channel_code:p.channel_code||"",channel_name:p.channel_name||"",channel_group:p.channel_group||"",channel_filter_note:p.channel_filter_note||"",rows:p.rows||[],total:p.total}],await P({start:p.start_date,end:p.end_date});return}const e=await ge(l);F.value=((e==null?void 0:e.tables)||[]).map(c=>({label:c.label,start_date:c.start_date,end_date:c.end_date,channel_code:c.channel_code||"",channel_name:c.channel_name||"",channel_group:c.channel_group||"",channel_filter_note:c.channel_filter_note||"",rows:c.rows||[],total:c.total}));const u=Y(new Date);await P({start:u,end:u})}catch(l){me.error((l==null?void 0:l.msg)||(l==null?void 0:l.message)||"加载失败")}finally{E.value=!1}}function te(){D.value=[],b.value=null,S.value="",L()}function le(l){const e=l.channel_name?` · ${l.channel_name}`:"";return`${l.label}${e}`}function $(l,e){return`${l.channel_name}${e}`}function O(l){return l==null||l===""?"0":Number(l).toLocaleString("en-US")}function g(l){return l==null||l===""?"0.0":Number(l).toLocaleString("en-US",{minimumFractionDigits:1,maximumFractionDigits:1})}function I(l){return l==null||l===""?"—":Number(l).toLocaleString("en-US",{minimumFractionDigits:1,maximumFractionDigits:1})}function q(l){return l==null||l===""?"—":Number(l).toFixed(1)}function G(l){if(l==null||l==="")return"";const e=Number(l);return e>=1?"roi-good":e>=.8?"roi-mid":"roi-bad"}function Y(l){const e=l.getFullYear(),u=String(l.getMonth()+1).padStart(2,"0"),c=String(l.getDate()).padStart(2,"0");return`${e}-${u}-${c}`}return xe(async()=>{await Promise.all([Z(),ee()]),L()}),(l,e)=>{const u=oe,c=se,w=ae,z=re,p=de,J=ie,ne=ue,Q=pe,j=_e,A=ce;return s(),r("div",je,[i(ne,{class:"filter-card",shadow:"never"},{default:d(()=>[t("div",Ce,[t("div",Ee,[t("div",Oe,[e[3]||(e[3]=t("span",{class:"lbl"},"渠道来源",-1)),i(w,{modelValue:S.value,"onUpdate:modelValue":e[0]||(e[0]=n=>S.value=n),filterable:"",placeholder:"渠道筛选",class:"filter-select filter-select--channel",loading:N.value,onChange:L},{default:d(()=>[i(u,{label:"全部",value:""}),(s(!0),r(f,null,x(B.value,n=>(s(),R(c,{key:n.group_name,label:n.group_name},{default:d(()=>[(s(!0),r(f,null,x(n.channels,m=>(s(),R(u,{key:m.channel_code,label:m.channel_name,value:m.channel_code},{default:d(()=>[t("div",Ve,[t("span",Le,a(m.channel_name),1),t("span",Fe,a(m.customer_count>0?m.customer_count:""),1)])]),_:2},1032,["label","value"]))),128))]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue","loading"])]),t("div",Ie,[e[4]||(e[4]=t("span",{class:"lbl"},"展示部门",-1)),i(w,{modelValue:D.value,"onUpdate:modelValue":e[1]||(e[1]=n=>D.value=n),multiple:"","collapse-tags":"","collapse-tags-tooltip":"",filterable:"",placeholder:"默认:所有「中心」部门",class:"filter-select filter-select--dept",loading:M.value},{default:d(()=>[(s(!0),r(f,null,x(T.value,n=>(s(),R(u,{key:n.id,label:n.path||n.name,value:n.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","loading"])]),t("div",Me,[e[5]||(e[5]=t("span",{class:"lbl"},"日期范围",-1)),i(z,{modelValue:b.value,"onUpdate:modelValue":e[2]||(e[2]=n=>b.value=n),type:"daterange","value-format":"YYYY-MM-DD","start-placeholder":"开始","end-placeholder":"结束",clearable:!0,shortcuts:U,class:"filter-date-picker"},null,8,["modelValue"])]),t("div",Ne,[i(J,{type:"primary",class:"filter-btn filter-btn--query",round:"",loading:E.value,onClick:L},{default:d(()=>[i(p,{class:"filter-btn__icon"},{default:d(()=>[i(k(fe))]),_:1}),e[6]||(e[6]=o(" 查询 ",-1))]),_:1},8,["loading"]),i(J,{plain:"",class:"filter-btn filter-btn--reset",round:"",disabled:E.value,onClick:te},{default:d(()=>[i(p,{class:"filter-btn__icon"},{default:d(()=>[i(k(ve))]),_:1}),e[7]||(e[7]=o(" 重置 ",-1))]),_:1},8,["disabled"])])]),e[9]||(e[9]=t("p",{class:"filter-hint"}," 未选日期时展示「本月 / 本周 / 今日 / 昨日」四张汇总表;选日期后为单表。排行榜默认按今日(见下方说明)。 ",-1)),t("div",$e,[e[8]||(e[8]=t("span",{class:"filter-quick__title"},"快捷日期",-1)),t("div",Ye,[(s(),r(f,null,x(U,n=>t("button",{key:n.text,type:"button",class:"date-pill",onClick:m=>W(n)},a(n.text),9,ze)),64))])])])]),_:1}),H((s(),r("div",Re,[!E.value&&F.value.length===0?(s(),r("div",Te,[i(Q,{description:"暂无数据"})])):_("",!0),(s(!0),r(f,null,x(F.value,(n,m)=>(s(),r("div",{key:m,class:"yeji-table"},[t("div",Be,a(le(n)),1),t("table",Ue,[t("thead",null,[t("tr",null,[e[48]||(e[48]=t("th",{class:"col-dept"},"部门",-1)),t("th",null,[e[16]||(e[16]=t("span",null,"进线数据",-1)),i(j,{placement:"top",effect:"dark","show-after":200},{content:d(()=>[t("div",Pe,[e[14]||(e[14]=o(" add_external_contact 事件数,按接待企微成员归属部门;定渠道时须客户带对应企微标签。",-1)),e[15]||(e[15]=t("br",null,null,-1)),n.channel_name?(s(),r(f,{key:0},[e[10]||(e[10]=t("b",null,"名称含「二中心」的部门",-1)),e[11]||(e[11]=o("在选定渠道下进线计 ",-1)),e[12]||(e[12]=t("b",null,"0",-1)),e[13]||(e[13]=o("。 ",-1))],64)):_("",!0)])]),default:d(()=>[i(p,{class:"col-info"},{default:d(()=>[i(k(C))]),_:1})]),_:2},1024)]),t("th",null,[e[18]||(e[18]=t("span",null,"合计业绩",-1)),i(j,{placement:"top",effect:"dark","show-after":200},{content:d(()=>[...e[17]||(e[17]=[t("div",{style:{"max-width":"300px","line-height":"1.7","font-size":"12px"}},[o(" 按订单"),t("b",null,"创建时间"),o("统计,与「处方订单列表」业绩合计口径一致。"),t("br"),t("b",null,"不受渠道筛选影响"),o(",展示部门下全部订单。 ")],-1)])]),default:d(()=>[i(p,{class:"col-info"},{default:d(()=>[i(k(C))]),_:1})]),_:1})]),n.channel_name?(s(),r("th",qe,[t("span",null,a($(n,"业绩")),1),i(j,{placement:"top",effect:"dark","show-after":200},{content:d(()=>[...e[19]||(e[19]=[t("div",{style:{"max-width":"340px","line-height":"1.7","font-size":"12px"}},[o(" 与「处方订单列表」业绩"),t("b",null,"同口径"),o(":按订单 "),t("b",null,"create_time"),o(" 归日,"),t("br"),o(" fulfillment_status ≠ 4。"),t("br"),o(" 渠道判定仅用 EXISTS:该患者有任一挂号 "),t("b",null,"channels 命中字典 + status=3"),o("(不限挂号时点)。 ")],-1)])]),default:d(()=>[i(p,{class:"col-info"},{default:d(()=>[i(k(C))]),_:1})]),_:1})])):_("",!0),e[49]||(e[49]=t("th",null,"接诊诊单",-1)),n.channel_name?(s(),r("th",Ge,[t("span",null,a($(n,"成交单")),1),i(j,{placement:"top",effect:"dark","show-after":200},{content:d(()=>[t("div",Je,[o(" 与「"+a(n.channel_name)+"业绩」同源:统计区间内 ",1),e[20]||(e[20]=t("b",null,"非取消业务订单",-1)),e[21]||(e[21]=o(" 条数(fulfillment_status ≠ 4),",-1)),e[22]||(e[22]=t("br",null,null,-1)),e[23]||(e[23]=o(" 按订单 ",-1)),e[24]||(e[24]=t("b",null,"create_time",-1)),e[25]||(e[25]=o(" 归日;渠道判定同业绩列(患者须有对应 channels 的已完成挂号)。 ",-1))])]),default:d(()=>[i(p,{class:"col-info"},{default:d(()=>[i(k(C))]),_:1})]),_:2},1024)])):_("",!0),e[50]||(e[50]=t("th",null,"平均单价",-1)),n.channel_name?(s(),r("th",Qe,[t("span",null,a($(n,"客单价")),1),i(j,{placement:"top",effect:"dark","show-after":200},{content:d(()=>[t("div",Ae,a(n.channel_name)+"业绩 ÷ "+a(n.channel_name)+"成交单数(均值)。 ",1)]),default:d(()=>[i(p,{class:"col-info"},{default:d(()=>[i(k(C))]),_:1})]),_:2},1024)])):_("",!0),t("th",null,[e[45]||(e[45]=t("span",null,"ROI",-1)),i(j,{placement:"top",effect:"dark","show-after":200},{content:d(()=>[t("div",He,[n.channel_name?(s(),r(f,{key:0},[e[26]||(e[26]=o(" 有渠道时:",-1)),e[27]||(e[27]=t("b",null,"合计行 ROI",-1)),e[28]||(e[28]=o(" = ",-1)),t("b",null,a(n.channel_name)+"业绩合计",1),e[29]||(e[29]=o("(与上表该渠道业绩列合计一致,",-1)),e[30]||(e[30]=t("b",null,"不含名称含「二中心」的部门",-1)),e[31]||(e[31]=o(")÷ ",-1)),e[32]||(e[32]=t("b",null,"投放成本合计",-1)),e[33]||(e[33]=o("。",-1)),e[34]||(e[34]=t("br",null,null,-1)),e[35]||(e[35]=o(" 部门行 ROI = 该部门 ",-1)),t("b",null,a(n.channel_name)+"业绩",1),e[36]||(e[36]=o(" ÷ 该部门 ",-1)),e[37]||(e[37]=t("b",null,"投放成本",-1)),e[38]||(e[38]=o(";二中心部门该渠道业绩与进线为 0。与「合计业绩」列无关。 ",-1))],64)):(s(),r(f,{key:1},[e[39]||(e[39]=t("b",null,"合计业绩",-1)),e[40]||(e[40]=o(" ÷ ",-1)),e[41]||(e[41]=t("b",null,"投放成本",-1)),e[42]||(e[42]=o("。投放成本按各部门",-1)),e[43]||(e[43]=t("b",null,"进线条数占比",-1)),e[44]||(e[44]=o("从总成本中分摊。 ",-1))],64))])]),default:d(()=>[i(p,{class:"col-info"},{default:d(()=>[i(k(C))]),_:1})]),_:2},1024)]),t("th",null,[e[47]||(e[47]=t("span",null,"投放成本",-1)),i(j,{placement:"top",effect:"dark","show-after":200},{content:d(()=>[...e[46]||(e[46]=[t("div",{style:{"max-width":"320px","line-height":"1.7","font-size":"12px"}},[o(" 区间与渠道与账务表一致后得到"),t("b",null,"总投放成本"),o(";"),t("b",null,"单进线成本"),o(" = 总成本 ÷ 各展示部门"),t("b",null,"进线合计"),o(";"),t("br"),o(" 各部门行投放成本 = 单进线成本 × 该部门进线(四舍五入尾差并入进线最多的部门)。 ")],-1)])]),default:d(()=>[i(p,{class:"col-info"},{default:d(()=>[i(k(C))]),_:1})]),_:1})])])]),t("tbody",null,[(s(!0),r(f,null,x(n.rows,y=>(s(),r("tr",{key:y.dept_id},[t("td",Xe,a(y.dept_name),1),t("td",null,a(O(y.lead_count)),1),t("td",null,a(g(y.performance_amount)),1),n.channel_name?(s(),r("td",Ke,a(g(y.completed_performance_amount)),1)):_("",!0),t("td",null,a(O(y.consult_count)),1),n.channel_name?(s(),r("td",We,a(O(y.channel_consult_count)),1)):_("",!0),t("td",null,a(I(y.avg_price)),1),n.channel_name?(s(),r("td",Ze,a(I(y.channel_avg_price)),1)):_("",!0),t("td",{class:X(G(y.roi))},a(q(y.roi)),3),t("td",null,a(g(y.cost_amount)),1)]))),128)),t("tr",et,[e[51]||(e[51]=t("td",{class:"col-dept"},"合计",-1)),t("td",null,a(O(n.total.lead_count)),1),t("td",null,a(g(n.total.performance_amount)),1),n.channel_name?(s(),r("td",tt,a(g(n.total.completed_performance_amount)),1)):_("",!0),t("td",null,a(O(n.total.consult_count)),1),n.channel_name?(s(),r("td",lt,a(O(n.total.channel_consult_count)),1)):_("",!0),t("td",null,a(I(n.total.avg_price)),1),n.channel_name?(s(),r("td",nt,a(I(n.total.channel_avg_price)),1)):_("",!0),t("td",{class:X(G(n.total.roi))},a(q(n.total.roi)),3),t("td",null,a(g(n.total.cost_amount)),1)])])]),t("div",at,[t("span",null,"区间:"+a(n.start_date)+" ~ "+a(n.end_date),1),n.channel_name?(s(),r("span",ot," · 渠道:"+a(n.channel_name),1)):_("",!0),n.total.cost_per_lead!=null&&n.total.cost_per_lead>0?(s(),r("span",st," · 单进线成本:"+a(g(n.total.cost_per_lead))+" 元 ",1)):_("",!0)])]))),128))])),[[A,E.value]]),v.value||V.value?H((s(),r("div",rt,[v.value?(s(),r(f,{key:0},[t("p",it,[o(a(v.value.range_note)+" ",1),t("span",dt,[o(" 统计区间:"+a(v.value.start_date)+"~"+a(v.value.end_date)+" ",1),b.value?_("",!0):(s(),r(f,{key:0},[o(" (未选自定义日期时排行榜仅统计今日,与上方多张业绩表区间无关) ")],64))])]),t("div",ut,[(s(!0),r(f,null,x(v.value.leaderboards,n=>(s(),r(f,{key:n.dept_id},[n.rows.length>0?(s(),r("div",ct,[t("div",pt,[o(a(n.dept_name)+" · 医助排行榜 ",1),v.value.channel_name?(s(),r("span",_t," ("+a(v.value.channel_name)+") ",1)):_("",!0)]),t("table",mt,[e[52]||(e[52]=t("thead",null,[t("tr",null,[t("th",{class:"col-rank"},"排名"),t("th",{class:"col-abbr"},"部门"),t("th",{class:"col-name"},"姓名"),t("th",null,"诊金"),t("th",null,[o("接诊率"),t("br"),t("span",{class:"th-sub"},"(元/进线)")])])],-1)),t("tbody",null,[(s(!0),r(f,null,x(n.rows,m=>(s(),r("tr",{key:m.admin_id},[t("td",ft,a(m.rank),1),t("td",vt,a(m.dept_abbr),1),t("td",yt,a(m.name),1),t("td",null,a(g(m.fee_amount)),1),t("td",null,a(g(m.consult_rate)),1)]))),128))])]),e[53]||(e[53]=t("div",{class:"yeji-table__foot yeji-table__foot--left"},[t("span",null,"诊金单位:元 · 接诊率 = 诊金 ÷ 进线(元/进线,保留 1 位小数;有渠道时进线含标签过滤与二中心规则)")],-1))])):_("",!0)],64))),128))]),!V.value&&K.value===0?(s(),r("div",ht,[i(Q,{description:"当前筛选下暂无医助排行数据"})])):_("",!0)],64)):_("",!0)])),[[A,V.value]]):_("",!0)])}}}),ol=Se(bt,[["__scopeId","data-v-51c32b5f"]]);export{ol as default};
|