2 lines
24 KiB
JavaScript
2 lines
24 KiB
JavaScript
import{K as le,J as ae,T as se,i as ne,D as oe,B as ie,C as re,a2 as ue,P as de,af as me,Q as ce,M as _e,N as fe,q as pe,r as ge,L as ye,g as ve,V as xe,ab as be,ac as we,R as he,e as Se,ag as ke,ah as Ce,a9 as Ve,aa as Ee}from"./element-plus-BhlMEThZ.js";import{_ as Te}from"./index.vue_vue_type_script_setup_true_lang-BV5h5xGw.js";import{w as kt}from"./@vue/runtime-dom-DDAG46FW.js";import{a0 as Ae,a1 as Ne,L as rt,X as ze}from"./@element-plus/icons-vue-ouZ25BHH.js";import{u as qe}from"./usePaging-VsbTxSU0.js";import{r as z,i as A,_ as De}from"./index-WGeajlD5.js";import{f as $e,b as Le,d as Ue,ak as u,I as c,a,aN as l,J as n,H as N,F as E,ap as T,O as d,G as x,aP as Ie,A as Z}from"./@vue/runtime-core-C6bnekPw.js";import{r as U,y as b,a as Pe,n as k}from"./@vue/reactivity-DiY1c2vO.js";import{Q as r,p as je,o as Me}from"./@vue/shared-mAAVTE9n.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./lodash-D3kF6u-c.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-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"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";function He(L){return z.get({url:"/qywx.customer/lists",params:L})}function Be(){return z.post({url:"/qywx.customer/sync"})}function Ke(){return z.get({url:"/qywx.customer/stats"})}function Re(){return z.get({url:"/qywx.customer/tagStats"})}function Fe(){return z.get({url:"/qywx.customer/todayArrival"})}function Ge(L){return z.get({url:"/qywx.customer/todayArrivalList",params:L})}function Oe(){return z.get({url:"/qywx.customer/getSyncSettings"})}function Ye(L){return z.post({url:"/qywx.customer/saveSyncSettings",params:L})}const Je={class:"qywx-customer-page p-4"},Qe={class:"flex items-center justify-between"},We={class:"flex gap-2"},Xe={class:"grid grid-cols-4 gap-4 mb-4"},Ze={class:"text-2xl font-bold text-primary"},tl={class:"flex items-center justify-between mb-1"},el={key:0,class:"text-xs text-gray-400"},ll={class:"flex items-end gap-2"},al={class:"text-2xl font-bold text-success leading-none"},sl=["title"],nl={class:"mt-2 pt-2 border-t border-gray-100"},ol={class:"text-lg font-semibold text-gray-800"},il={class:"text-sm font-medium"},rl={class:"flex items-center justify-between gap-3"},ul={class:"text-xs text-gray-400"},dl={class:"flex items-center gap-2"},ml={class:"font-medium"},cl={class:"text-xs text-gray-400"},_l={key:0},fl={key:1,class:"text-gray-400"},pl={key:0},gl={key:0,class:"ml-1 text-gray-400 text-xs"},yl={key:1,class:"text-gray-400"},vl={class:"flex justify-end mt-4"},xl={class:"flex items-center justify-between w-full pr-4"},bl={class:"flex items-center gap-3"},wl={class:"px-1"},hl={key:0,class:"mb-3"},Sl={class:"flex flex-wrap gap-1"},kl={class:"flex items-start gap-2"},Cl={class:"flex-1 min-w-0"},Vl={class:"text-sm font-medium truncate"},El={class:"text-xs text-gray-500 mt-0.5"},Tl={key:0,class:"ml-2"},Al={key:1,class:"ml-2 text-emerald-500"},Nl={key:3,class:"mt-3 text-center"},zl={class:"flex items-center justify-between w-full pr-4"},ql={class:"flex items-center gap-3"},Dl={class:"px-1"},$l={class:"grid grid-cols-3 gap-2 mb-3"},Ll={class:"text-xl font-bold text-warning"},Ul={class:"text-xl font-bold"},Il={class:"text-xl font-bold"},Pl={class:"flex items-center gap-2 w-full"},jl={class:"font-medium"},Ml={class:"ml-auto text-xs text-gray-500"},Hl={class:"font-medium"},Bl={class:"text-xs text-gray-400 truncate"},Kl={class:"text-warning font-bold"},Rl={key:0},Fl={key:1,class:"text-gray-400"},Gl={key:0},Ol={key:0,class:"ml-1 text-gray-400 text-xs"},Yl={key:1,class:"text-gray-400"},Jl=$e({__name:"qywx",setup(L){const I=k(!1),P=k(!1),tt=k(!1),y=k(null),C=U({total:0,today:0,today_follow_staff:0,lastSync:"",syncStatus:"idle",syncStatusText:"未同步"}),Ct=Z(()=>{switch(C.syncStatus){case"success":return"success";case"syncing":return"warning";case"failed":return"danger";default:return"info"}}),w=U({auto_sync:!1,interval:3600}),_=U({name:"",follow_user:"",tag_ids:[],add_time_start:"",add_time_end:""}),et=k(null);function Vt(e){e&&e.length===2&&e[0]&&e[1]?(_.add_time_start=e[0],_.add_time_end=e[1]):(_.add_time_start="",_.add_time_end=""),q()}const v=U({total_tags:0,total_relations:0,total_tagged_customers:0,groups:[]}),j=k(!1),F=k(!1),lt=k(""),at=k([]),ut=Z(()=>{const e=lt.value.trim().toLowerCase();if(!e)return v.groups;const t=[];for(const i of v.groups){const m=(i.group_name||"").toLowerCase().includes(e),g=i.tags.filter(p=>m||(p.tag_name||"").toLowerCase().includes(e));g.length&&t.push({...i,tags:g})}return t});async function st(e=!1){j.value=!0;try{const t=await Re();t&&typeof t=="object"&&(v.total_tags=Number(t.total_tags??0),v.total_relations=Number(t.total_relations??0),v.total_tagged_customers=Number(t.total_tagged_customers??0),v.groups=Array.isArray(t.groups)?t.groups:[]),e&&A.msgSuccess("已刷新")}catch(t){e&&A.msgError((t==null?void 0:t.message)||"加载标签统计失败"),console.error("加载标签统计失败",t)}finally{j.value=!1}}function Et(){var e;F.value=!0,at.value=(e=v.groups[0])!=null&&e.group_name?[v.groups[0].group_name]:[],v.groups.length===0&&st()}function Tt(e){e&&(_.tag_ids.includes(e)||(_.tag_ids.push(e),q()))}function At(e){e&&(_.tag_ids=[e],F.value=!1,q())}const h=U({total:0,recent_time:0,hourly:new Array(24).fill(0),by_state:[]}),M=k(!1),G=k(!1),f=U({total:0,page_no:1,page_size:20,lists:[]}),Nt=new Date().getHours(),zt=Z(()=>Math.max(1,...h.hourly));function qt(e){if(e<=0)return"2px";const t=e/zt.value;return Math.max(4,Math.round(t*32))+"px"}const Dt=Z(()=>{const e=[];return h.hourly.forEach((t,i)=>{t>0&&e.push(`${String(i).padStart(2,"0")}:00 · ${t}`)}),e.length?e.join(" "):"今天还没有人进入"});async function O(e=!1){try{const t=await Fe();t&&(h.total=Number(t.total??0),h.recent_time=Number(t.recent_time??0),h.hourly=Array.isArray(t.hourly)&&t.hourly.length===24?t.hourly.map(i=>Number(i)||0):new Array(24).fill(0),h.by_state=Array.isArray(t.by_state)?t.by_state:[])}catch(t){console.error("加载今日进入分布失败",t)}e&&M.value&&(f.page_no=1,f.lists=[],await nt())}async function nt(){G.value=!0;try{const e=await Ge({page_no:f.page_no,page_size:f.page_size});if(e){f.total=Number(e.total??0);const t=Array.isArray(e.lists)?e.lists:[];f.page_no===1?f.lists=t:f.lists.push(...t)}}catch(e){console.error("加载今日进入明细失败",e)}finally{G.value=!1}}async function dt(){M.value=!0,f.page_no=1,f.lists=[],await Promise.all([O(!1),nt()])}async function $t(){f.lists.length>=f.total||(f.page_no+=1,await nt())}function Lt(e){if(!e||e<=0)return"";const t=new Date(e<1e12?e*1e3:e);return`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}function Ut(e){if(!e||e<=0)return"—";const t=new Date(e<1e12?e*1e3:e);return`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}`}let H=null,Y=null;function ot(){Y!==null&&(clearInterval(Y),Y=null)}async function It(e){return He(e)}const{pager:B,getLists:J,resetPage:q,resetParams:Pt}=qe({fetchFun:It,params:_});function jt(){_.name="",_.follow_user="",_.tag_ids=[],_.add_time_start="",_.add_time_end="",et.value=null,Pt()}function Mt(){ot();let e=0;Y=window.setInterval(async()=>{e+=1,await Q(),await J(),(C.syncStatus!=="syncing"||e>=120)&&(ot(),I.value=!1,e>=120&&C.syncStatus==="syncing"?A.msgWarning("长时间仍为「同步中」,请刷新页面或查看服务器 runtime/log/qywx_sync.log(可能未安装 CLI php 或禁用了 exec)"):C.syncStatus==="failed"&&A.msgError("同步失败,请查看服务器 runtime/log/qywx_sync.log 或后台同步状态"))},3e3)}async function mt(e){const t=(e==null?void 0:e.silent)===!0;I.value=!0;try{const i=await Be();t||A.msgSuccess((i==null?void 0:i.message)||"操作成功"),await Q(),await J(),i!=null&&i.background?Mt():I.value=!1}catch(i){const m=(i==null?void 0:i.message)||(i==null?void 0:i.msg)||"同步失败";(!t||!String(m).includes("正在执行"))&&A.msgError(m),I.value=!1}}async function Q(){try{const e=await Ke();e&&typeof e=="object"&&Object.assign(C,e)}catch(e){console.error("加载统计失败",e)}}async function Ht(){try{const e=await Oe();e&&typeof e=="object"&&Object.assign(w,e),w.auto_sync&&ct()}catch(e){console.error("加载同步设置失败",e)}}async function Bt(){try{await Ye(w),A.msgSuccess("保存成功"),P.value=!1,_t(),w.auto_sync&&ct()}catch(e){A.msgError((e==null?void 0:e.message)||"保存失败")}}function ct(){H||(H=window.setInterval(()=>{mt({silent:!0})},w.interval*1e3))}function _t(){H&&(clearInterval(H),H=null)}function Kt(e){y.value=e,tt.value=!0}function ft(e){const t=String((e==null?void 0:e.admin_name)??"").trim(),i=String((e==null?void 0:e.userid)??"").trim(),m=String((e==null?void 0:e.name)??"").trim();return t||(m&&i?`${m}(${i})`:m||i||"—")}function W(e){const t=String((e==null?void 0:e.admin_name)??"").trim(),i=String((e==null?void 0:e.userid)??"").trim(),m=[];return t&&m.push("后台:"+t),i&&m.push("企微:"+i),m.join("|")}function pt(e){if(!e)return null;const t=Number(e.external_first_add_time??0);if(t>0)return t;const i=e.follow_users;if(Array.isArray(i)&&i.length>0){let m=0;for(const g of i){const p=Number((g==null?void 0:g.createtime)??0);p>0&&(m===0||p<m)&&(m=p)}if(m>0)return m}return e.create_time??null}function X(e){if(e===""||e===null||e===void 0)return"—";const t=Number(e),i=typeof e=="string"&&/^\d+$/.test(e.trim());let m;return typeof e=="number"?m=e<1e12?e*1e3:e:!Number.isNaN(t)&&i?m=t<1e12?t*1e3:t:m=new Date(e).getTime(),Number.isNaN(m)?"—":new Date(m).toLocaleString("zh-CN")}let K=null;function Rt(){K===null&&(K=window.setInterval(()=>{Q(),O(M.value)},3e4))}function Ft(){K!==null&&(clearInterval(K),K=null)}return Le(()=>{J(),Q(),Ht(),O(!1),st(),Rt()}),Ue(()=>{_t(),ot(),Ft()}),(e,t)=>{const i=ne,m=le,g=ae,p=se,it=re,D=ie,Gt=ue,$=ce,Ot=me,gt=de,yt=oe,vt=pe,S=fe,xt=ge,bt=_e,Yt=Te,Jt=ve,wt=xe,Qt=we,Wt=be,ht=he,St=Se,Xt=Ce,Zt=ke,V=Ee,te=Ve,ee=ye;return u(),c("div",Je,[a(g,{shadow:"never",class:"mb-4"},{header:l(()=>[n("div",Qe,[t[22]||(t[22]=n("span",{class:"text-lg font-semibold"},"企业微信客户管理",-1)),n("div",We,[a(i,{type:"success",plain:"",onClick:dt},{icon:l(()=>[a(b(Ae))]),default:l(()=>[t[18]||(t[18]=d(" 今日进入明细 ",-1))]),_:1}),a(i,{type:"warning",plain:"",onClick:Et},{icon:l(()=>[a(b(Ne))]),default:l(()=>[t[19]||(t[19]=d(" 标签维度 ",-1))]),_:1}),a(i,{type:"primary",loading:I.value,onClick:t[0]||(t[0]=s=>mt())},{icon:l(()=>[a(b(rt))]),default:l(()=>[t[20]||(t[20]=d(" 立即同步 ",-1))]),_:1},8,["loading"]),a(i,{onClick:t[1]||(t[1]=s=>P.value=!0)},{icon:l(()=>[a(b(ze))]),default:l(()=>[t[21]||(t[21]=d(" 同步设置 ",-1))]),_:1})])])]),default:l(()=>[a(m,{title:"功能说明",type:"info",closable:!1,class:"mb-4"},{default:l(()=>[...t[23]||(t[23]=[n("div",{class:"text-sm"},[n("p",null,"自动从企业微信同步外部联系人(客户)信息,包括客户基本信息、跟进人等。"),n("p",{class:"mt-1"},"同步后的数据可用于患者信息匹配和自动关联。")],-1)])]),_:1}),n("div",Xe,[a(g,{shadow:"hover"},{default:l(()=>[t[24]||(t[24]=n("div",{class:"text-gray-500 text-sm mb-1"},"总客户数",-1)),n("div",Ze,r(C.total),1)]),_:1}),a(g,{shadow:"hover",class:"today-arrival-card cursor-pointer",onClick:dt},{default:l(()=>[n("div",tl,[t[25]||(t[25]=n("span",{class:"text-gray-500 text-sm"},"今日新增",-1)),h.recent_time?(u(),c("span",el," 最近 "+r(Lt(h.recent_time)),1)):N("",!0)]),n("div",ll,[n("div",al,r(C.today),1),t[26]||(t[26]=n("div",{class:"text-xs text-gray-400 pb-1"},"人",-1))]),n("div",{class:"hourly-bars mt-2",title:Dt.value},[(u(!0),c(E,null,T(h.hourly,(s,o)=>(u(),c("div",{key:o,class:Me(["hourly-bar",{"is-empty":s===0,"is-current":o===b(Nt)}]),style:je({height:qt(s)})},null,6))),128))],8,sl),n("div",nl,[t[27]||(t[27]=n("div",{class:"text-gray-500 text-xs mb-0.5"},"今日跟进人合计",-1)),n("div",ol,r(C.today_follow_staff),1)])]),_:1}),a(g,{shadow:"hover"},{default:l(()=>[t[28]||(t[28]=n("div",{class:"text-gray-500 text-sm mb-1"},"最后同步",-1)),n("div",il,r(C.lastSync||"未同步"),1)]),_:1}),a(g,{shadow:"hover"},{default:l(()=>[t[29]||(t[29]=n("div",{class:"text-gray-500 text-sm mb-1"},"同步状态",-1)),a(p,{type:Ct.value,size:"small"},{default:l(()=>[d(r(C.syncStatusText),1)]),_:1},8,["type"])]),_:1})])]),_:1}),a(g,{shadow:"never"},{default:l(()=>[a(yt,{model:_,inline:"",class:"mb-4"},{default:l(()=>[a(D,{label:"客户名称"},{default:l(()=>[a(it,{modelValue:_.name,"onUpdate:modelValue":t[2]||(t[2]=s=>_.name=s),placeholder:"搜索客户名称",clearable:"",onKeyup:kt(b(q),["enter"])},null,8,["modelValue","onKeyup"])]),_:1}),a(D,{label:"跟进人"},{default:l(()=>[a(it,{modelValue:_.follow_user,"onUpdate:modelValue":t[3]||(t[3]=s=>_.follow_user=s),placeholder:"跟进人姓名",clearable:"",onKeyup:kt(b(q),["enter"])},null,8,["modelValue","onKeyup"])]),_:1}),a(D,{label:"添加时间"},{default:l(()=>[a(Gt,{modelValue:et.value,"onUpdate:modelValue":t[4]||(t[4]=s=>et.value=s),type:"daterange","value-format":"YYYY-MM-DD","start-placeholder":"开始日期","end-placeholder":"结束日期",clearable:"",class:"!w-[280px]",onChange:Vt},null,8,["modelValue"])]),_:1}),a(D,{label:"标签"},{default:l(()=>[a(gt,{modelValue:_.tag_ids,"onUpdate:modelValue":t[5]||(t[5]=s=>_.tag_ids=s),multiple:"","collapse-tags":"","collapse-tags-tooltip":"",clearable:"",filterable:"",placeholder:"按标签筛选(可多选,命中任一即返回)",loading:j.value,style:{"min-width":"320px"},onChange:b(q)},{default:l(()=>[(u(!0),c(E,null,T(v.groups,s=>(u(),x(Ot,{key:s.group_name||"_",label:(s.group_name||"(未分组)")+" · "+s.customer_count},{default:l(()=>[(u(!0),c(E,null,T(s.tags,o=>(u(),x($,{key:o.tag_id,value:o.tag_id,label:o.tag_name},{default:l(()=>[n("span",rl,[n("span",null,r(o.tag_name),1),n("span",ul,r(o.customer_count)+" 人",1)])]),_:2},1032,["value","label"]))),128))]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue","loading","onChange"])]),_:1}),a(D,null,{default:l(()=>[a(i,{type:"primary",onClick:b(q)},{default:l(()=>[...t[30]||(t[30]=[d("查询",-1)])]),_:1},8,["onClick"]),a(i,{onClick:jt},{default:l(()=>[...t[31]||(t[31]=[d("重置",-1)])]),_:1})]),_:1})]),_:1},8,["model"]),Ie((u(),x(bt,{data:b(B).lists,stripe:""},{default:l(()=>[a(S,{label:"客户信息","min-width":"200"},{default:l(({row:s})=>[n("div",dl,[a(vt,{size:40,src:s.avatar},null,8,["src"]),n("div",null,[n("div",ml,r(s.name),1),n("div",cl,r(s.external_userid),1)])])]),_:1}),a(S,{label:"类型",width:"80"},{default:l(({row:s})=>[a(p,{size:"small"},{default:l(()=>[d(r(s.type===1?"微信":"企微"),1)]),_:2},1024)]),_:1}),a(S,{label:"性别",width:"60"},{default:l(({row:s})=>[d(r(s.gender===1?"男":s.gender===2?"女":"未知"),1)]),_:1}),a(S,{label:"跟进人","min-width":"150"},{default:l(({row:s})=>[s.follow_users&&s.follow_users.length?(u(),c("div",_l,[(u(!0),c(E,null,T(s.follow_users,(o,R)=>(u(),x(xt,{key:(o.userid||"")+"-"+R,disabled:!W(o),content:W(o),placement:"top"},{default:l(()=>[a(p,{size:"small",class:"mr-1 mb-1"},{default:l(()=>[d(r(ft(o)),1)]),_:2},1024)]),_:2},1032,["disabled","content"]))),128))])):(u(),c("span",fl,"—"))]),_:1}),a(S,{label:"标签","min-width":"180"},{default:l(({row:s})=>[s.tags&&s.tags.length?(u(),c("div",pl,[(u(!0),c(E,null,T(s.tags,o=>(u(),x(p,{key:o.tag_id,size:"small",effect:"light",type:"warning",class:"mr-1 mb-1 cursor-pointer",onClick:R=>Tt(o.tag_id)},{default:l(()=>[d(r(o.tag_name)+" ",1),o.group_name?(u(),c("span",gl,r(o.group_name),1)):N("",!0)]),_:2},1032,["onClick"]))),128))])):(u(),c("span",yl,"—"))]),_:1}),a(S,{label:"添加时间",width:"160"},{default:l(({row:s})=>[d(r(X(pt(s))),1)]),_:1}),a(S,{label:"更新时间",width:"160"},{default:l(({row:s})=>[d(r(X(s.update_time)),1)]),_:1}),a(S,{label:"操作",width:"120",fixed:"right"},{default:l(({row:s})=>[a(i,{type:"primary",link:"",onClick:o=>Kt(s)},{default:l(()=>[...t[32]||(t[32]=[d("查看详情",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[ee,b(B).loading]]),n("div",vl,[a(Yt,{modelValue:b(B),"onUpdate:modelValue":t[6]||(t[6]=s=>Pe(B)?B.value=s:null),onChange:b(J)},null,8,["modelValue","onChange"])])]),_:1}),a(wt,{modelValue:P.value,"onUpdate:modelValue":t[10]||(t[10]=s=>P.value=s),title:"同步设置",width:"500px"},{footer:l(()=>[a(i,{onClick:t[9]||(t[9]=s=>P.value=!1)},{default:l(()=>[...t[34]||(t[34]=[d("取消",-1)])]),_:1}),a(i,{type:"primary",onClick:Bt},{default:l(()=>[...t[35]||(t[35]=[d("保存",-1)])]),_:1})]),default:l(()=>[a(yt,{model:w,"label-width":"120px"},{default:l(()=>[a(D,{label:"自动同步"},{default:l(()=>[a(Jt,{modelValue:w.auto_sync,"onUpdate:modelValue":t[7]||(t[7]=s=>w.auto_sync=s)},null,8,["modelValue"]),t[33]||(t[33]=n("div",{class:"text-xs text-gray-400 mt-1"}," 开启后将定时自动同步企业微信客户数据 ",-1))]),_:1}),a(D,{label:"同步间隔"},{default:l(()=>[a(gt,{modelValue:w.interval,"onUpdate:modelValue":t[8]||(t[8]=s=>w.interval=s),disabled:!w.auto_sync},{default:l(()=>[a($,{label:"每小时",value:3600}),a($,{label:"每2小时",value:7200}),a($,{label:"每4小时",value:14400}),a($,{label:"每6小时",value:21600}),a($,{label:"每12小时",value:43200}),a($,{label:"每天",value:86400})]),_:1},8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"]),a(St,{modelValue:M.value,"onUpdate:modelValue":t[12]||(t[12]=s=>M.value=s),title:"今日进入明细",direction:"rtl",size:"520px","destroy-on-close":!1},{header:l(()=>[n("div",xl,[n("div",bl,[t[36]||(t[36]=n("span",{class:"text-base font-semibold"},"今日进入明细",-1)),a(p,{type:"success",effect:"plain"},{default:l(()=>[d("共 "+r(f.total)+" 人",1)]),_:1})]),a(i,{link:"",type:"primary",loading:G.value,onClick:t[11]||(t[11]=s=>O(!0))},{icon:l(()=>[a(b(rt))]),default:l(()=>[t[37]||(t[37]=d(" 刷新 ",-1))]),_:1},8,["loading"])])]),default:l(()=>{var s;return[n("div",wl,[a(m,{type:"info",closable:!1,class:"mb-3","show-icon":""},{title:l(()=>[...t[38]||(t[38]=[n("span",{class:"text-xs"}," 一次推送 = 一个人进来;数据来源为企微回调流水表(INSERT IGNORE 幂等),与客户同步解耦,数字零误差。 ",-1)])]),_:1}),(s=h.by_state)!=null&&s.length?(u(),c("div",hl,[t[39]||(t[39]=n("div",{class:"text-xs text-gray-500 mb-1"},"今日推广渠道 Top",-1)),n("div",Sl,[(u(!0),c(E,null,T(h.by_state,o=>(u(),x(p,{key:o.state||"_",size:"small",effect:"light",type:"success"},{default:l(()=>[d(r(o.state||"(无 state)")+" · "+r(o.count),1)]),_:2},1024))),128))])])):N("",!0),f.lists.length?(u(),x(Wt,{key:1,class:"mt-2"},{default:l(()=>[(u(!0),c(E,null,T(f.lists,o=>(u(),x(Qt,{key:o.id,timestamp:Ut(o.event_time),placement:"top",type:"success",hollow:!1},{default:l(()=>[n("div",kl,[a(vt,{size:32,src:o.customer_avatar||void 0},{default:l(()=>[d(r((o.customer_name||"?").slice(0,1)),1)]),_:2},1032,["src"]),n("div",Cl,[n("div",Vl,r(o.customer_name||o.external_userid||"(未知客户)"),1),n("div",El,[n("span",null,"接待:"+r(o.admin_name||o.user_id||"—"),1),o.state?(u(),c("span",Tl,[t[40]||(t[40]=d(" 渠道:",-1)),a(p,{size:"small",type:"info",effect:"plain"},{default:l(()=>[d(r(o.state),1)]),_:2},1024)])):N("",!0),o.welcome_code?(u(),c("span",Al,"欢迎语")):N("",!0)])])])]),_:2},1032,["timestamp"]))),128))]),_:1})):(u(),x(ht,{key:2,description:"今天还没有人进入","image-size":80})),f.total>f.lists.length?(u(),c("div",Nl,[a(i,{loading:G.value,size:"small",onClick:$t},{default:l(()=>[d(" 加载更多(还剩 "+r(f.total-f.lists.length)+") ",1)]),_:1},8,["loading"])])):N("",!0)])]}),_:1},8,["modelValue"]),a(St,{modelValue:F.value,"onUpdate:modelValue":t[16]||(t[16]=s=>F.value=s),title:"标签维度统计",direction:"rtl",size:"560px","destroy-on-close":!1},{header:l(()=>[n("div",zl,[n("div",ql,[t[41]||(t[41]=n("span",{class:"text-base font-semibold"},"标签维度统计",-1)),a(p,{type:"warning",effect:"plain"},{default:l(()=>[d(r(v.groups.length)+" 组 · "+r(v.total_tags)+" 标签 ",1)]),_:1})]),a(i,{link:"",type:"primary",loading:j.value,onClick:t[13]||(t[13]=s=>st(!0))},{icon:l(()=>[a(b(rt))]),default:l(()=>[t[42]||(t[42]=d(" 刷新 ",-1))]),_:1},8,["loading"])])]),default:l(()=>[n("div",Dl,[n("div",$l,[a(g,{shadow:"never","body-class":"!p-3"},{default:l(()=>[t[43]||(t[43]=n("div",{class:"text-xs text-gray-500"},"已打标签客户",-1)),n("div",Ll,r(v.total_tagged_customers),1)]),_:1}),a(g,{shadow:"never","body-class":"!p-3"},{default:l(()=>[t[44]||(t[44]=n("div",{class:"text-xs text-gray-500"},"标签数",-1)),n("div",Ul,r(v.total_tags),1)]),_:1}),a(g,{shadow:"never","body-class":"!p-3"},{default:l(()=>[t[45]||(t[45]=n("div",{class:"text-xs text-gray-500"},"关系总数",-1)),n("div",Il,r(v.total_relations),1)]),_:1})]),a(it,{modelValue:lt.value,"onUpdate:modelValue":t[14]||(t[14]=s=>lt.value=s),placeholder:"筛选标签名 / 分组名",clearable:"",size:"small",class:"mb-3"},null,8,["modelValue"]),ut.value.length===0?(u(),x(ht,{key:0,description:j.value?"加载中…":"暂无标签数据","image-size":64},null,8,["description"])):(u(),x(Zt,{key:1,modelValue:at.value,"onUpdate:modelValue":t[15]||(t[15]=s=>at.value=s)},{default:l(()=>[(u(!0),c(E,null,T(ut.value,s=>(u(),x(Xt,{key:s.group_name||"_",name:s.group_name||"_"},{title:l(()=>[n("div",Pl,[n("span",jl,r(s.group_name||"(未分组)"),1),a(p,{size:"small",effect:"plain"},{default:l(()=>[d(r(s.tags.length),1)]),_:2},1024),n("span",Ml," 最热 "+r(s.customer_count)+" 人 ",1)])]),default:l(()=>[a(bt,{data:s.tags,size:"small",stripe:""},{default:l(()=>[a(S,{label:"标签","min-width":"160"},{default:l(({row:o})=>[n("span",Hl,r(o.tag_name),1),n("div",Bl,r(o.tag_id),1)]),_:1}),a(S,{label:"客户数",width:"100",align:"right"},{default:l(({row:o})=>[n("span",Kl,r(o.customer_count),1)]),_:1}),a(S,{label:"操作",width:"80",align:"center"},{default:l(({row:o})=>[a(i,{link:"",type:"primary",size:"small",onClick:R=>At(o.tag_id)},{default:l(()=>[...t[46]||(t[46]=[d(" 筛选 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),_:2},1032,["name"]))),128))]),_:1},8,["modelValue"]))])]),_:1},8,["modelValue"]),a(wt,{modelValue:tt.value,"onUpdate:modelValue":t[17]||(t[17]=s=>tt.value=s),title:"客户详情",width:"600px"},{default:l(()=>[y.value?(u(),x(te,{key:0,column:2,border:""},{default:l(()=>[a(V,{label:"客户名称"},{default:l(()=>[d(r(y.value.name),1)]),_:1}),a(V,{label:"External ID"},{default:l(()=>[d(r(y.value.external_userid),1)]),_:1}),a(V,{label:"性别"},{default:l(()=>[d(r(y.value.gender===1?"男":y.value.gender===2?"女":"未知"),1)]),_:1}),a(V,{label:"类型"},{default:l(()=>[d(r(y.value.type===1?"微信用户":"企业微信用户"),1)]),_:1}),a(V,{label:"企业名称",span:2},{default:l(()=>[d(r(y.value.corp_name||"—"),1)]),_:1}),a(V,{label:"职位",span:2},{default:l(()=>[d(r(y.value.position||"—"),1)]),_:1}),a(V,{label:"添加时间",span:2},{default:l(()=>[d(r(X(pt(y.value))),1)]),_:1}),a(V,{label:"更新时间",span:2},{default:l(()=>[d(r(X(y.value.update_time)),1)]),_:1}),a(V,{label:"跟进人",span:2},{default:l(()=>{var s;return[(s=y.value.follow_users)!=null&&s.length?(u(),c("div",Rl,[(u(!0),c(E,null,T(y.value.follow_users,(o,R)=>(u(),x(xt,{key:(o.userid||"")+"-"+R,disabled:!W(o),content:W(o),placement:"top"},{default:l(()=>[a(p,{size:"small",class:"mr-1 mb-1"},{default:l(()=>[d(r(ft(o)),1)]),_:2},1024)]),_:2},1032,["disabled","content"]))),128))])):(u(),c("span",Fl,"—"))]}),_:1}),a(V,{label:"标签",span:2},{default:l(()=>{var s;return[(s=y.value.tags)!=null&&s.length?(u(),c("div",Gl,[(u(!0),c(E,null,T(y.value.tags,o=>(u(),x(p,{key:o.tag_id,size:"small",effect:"light",type:"warning",class:"mr-1 mb-1"},{default:l(()=>[d(r(o.tag_name)+" ",1),o.group_name?(u(),c("span",Ol,r(o.group_name),1)):N("",!0)]),_:2},1024))),128))])):(u(),c("span",Yl,"—"))]}),_:1})]),_:1})):N("",!0)]),_:1},8,["modelValue"])])}}}),La=De(Jl,[["__scopeId","data-v-07da3e76"]]);export{La as default};
|