2 lines
23 KiB
JavaScript
2 lines
23 KiB
JavaScript
import{o as le,ba as I,ap as ae,aq as se,q as u,r as m,v as a,D as l,bh as ne,s as n,bg as oe,T as r,P as A,F as E,G as T,t as ie,ae as re,u as x,br as ue,L as d,K as de,cF as ce,cG as me,by as rt,co as _e,b9 as fe,b6 as ge,b7 as pe,b8 as kt,bp as ye,bm as ve,O as b,cB as xe,bn as be,ac as we,bj as he,bk as Se,a0 as ke,a1 as Ce,bi as Ve,C as Ee,I as Te,bt as Ae,c3 as Ne,c4 as qe,bB as ze,B as De,cH as $e,cI as Le,c0 as Ie,c1 as Ue,M as k,p as Z}from"./.pnpm-BGZW0UGg.js";import{_ as je}from"./index.vue_vue_type_script_setup_true_lang-ByFSC-yR.js";import{u as Pe}from"./usePaging-C4oc3vBq.js";import{r as q,i as N,_ as Me}from"./index-CeIwrh_6.js";function Be(L){return q.get({url:"/qywx.customer/lists",params:L})}function He(){return q.post({url:"/qywx.customer/sync"})}function Fe(){return q.get({url:"/qywx.customer/stats"})}function Ge(){return q.get({url:"/qywx.customer/tagStats"})}function Ke(){return q.get({url:"/qywx.customer/todayArrival"})}function Oe(L){return q.get({url:"/qywx.customer/todayArrivalList",params:L})}function Re(){return q.get({url:"/qywx.customer/getSyncSettings"})}function Ye(L){return q.post({url:"/qywx.customer/saveSyncSettings",params:L})}const We={class:"qywx-customer-page p-4"},Je={class:"flex items-center justify-between"},Qe={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"},cl={class:"font-medium"},ml={class:"text-xs text-gray-400"},_l={key:0},fl={key:1,class:"text-gray-400"},gl={key:0},pl={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"},ql={class:"flex items-center justify-between w-full pr-4"},zl={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"},Il={class:"text-xl font-bold"},Ul={class:"text-xl font-bold"},jl={class:"flex items-center gap-2 w-full"},Pl={class:"font-medium"},Ml={class:"ml-auto text-xs text-gray-500"},Bl={class:"font-medium"},Hl={class:"text-xs text-gray-400 truncate"},Fl={class:"text-warning font-bold"},Gl={key:0},Kl={key:1,class:"text-gray-400"},Ol={key:0},Rl={key:0,class:"ml-1 text-gray-400 text-xs"},Yl={key:1,class:"text-gray-400"},Wl=le({__name:"qywx",setup(L){const U=k(!1),j=k(!1),tt=k(!1),y=k(null),C=I({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=I({auto_sync:!1,interval:3600}),_=I({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=""),z()}const v=I({total_tags:0,total_relations:0,total_tagged_customers:0,groups:[]}),P=k(!1),K=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 c=(i.group_name||"").toLowerCase().includes(e),p=i.tags.filter(g=>c||(g.tag_name||"").toLowerCase().includes(e));p.length&&t.push({...i,tags:p})}return t});async function st(e=!1){P.value=!0;try{const t=await Ge();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&&N.msgSuccess("已刷新")}catch(t){e&&N.msgError((t==null?void 0:t.message)||"加载标签统计失败"),console.error("加载标签统计失败",t)}finally{P.value=!1}}function Et(){var e;K.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),z()))}function At(e){e&&(_.tag_ids=[e],K.value=!1,z())}const h=I({total:0,recent_time:0,hourly:new Array(24).fill(0),by_state:[]}),M=k(!1),O=k(!1),f=I({total:0,page_no:1,page_size:20,lists:[]}),Nt=new Date().getHours(),qt=Z(()=>Math.max(1,...h.hourly));function zt(e){if(e<=0)return"2px";const t=e/qt.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 R(e=!1){try{const t=await Ke();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(){O.value=!0;try{const e=await Oe({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{O.value=!1}}async function dt(){M.value=!0,f.page_no=1,f.lists=[],await Promise.all([R(!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 It(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 B=null,Y=null;function ot(){Y!==null&&(clearInterval(Y),Y=null)}async function Ut(e){return Be(e)}const{pager:H,getLists:W,resetPage:z,resetParams:jt}=Pe({fetchFun:Ut,params:_});function Pt(){_.name="",_.follow_user="",_.tag_ids=[],_.add_time_start="",_.add_time_end="",et.value=null,jt()}function Mt(){ot();let e=0;Y=window.setInterval(async()=>{e+=1,await J(),await W(),(C.syncStatus!=="syncing"||e>=120)&&(ot(),U.value=!1,e>=120&&C.syncStatus==="syncing"?N.msgWarning("长时间仍为「同步中」,请刷新页面或查看服务器 runtime/log/qywx_sync.log(可能未安装 CLI php 或禁用了 exec)"):C.syncStatus==="failed"&&N.msgError("同步失败,请查看服务器 runtime/log/qywx_sync.log 或后台同步状态"))},3e3)}async function ct(e){const t=(e==null?void 0:e.silent)===!0;U.value=!0;try{const i=await He();t||N.msgSuccess((i==null?void 0:i.message)||"操作成功"),await J(),await W(),i!=null&&i.background?Mt():U.value=!1}catch(i){const c=(i==null?void 0:i.message)||(i==null?void 0:i.msg)||"同步失败";(!t||!String(c).includes("正在执行"))&&N.msgError(c),U.value=!1}}async function J(){try{const e=await Fe();e&&typeof e=="object"&&Object.assign(C,e)}catch(e){console.error("加载统计失败",e)}}async function Bt(){try{const e=await Re();e&&typeof e=="object"&&Object.assign(w,e),w.auto_sync&&mt()}catch(e){console.error("加载同步设置失败",e)}}async function Ht(){try{await Ye(w),N.msgSuccess("保存成功"),j.value=!1,_t(),w.auto_sync&&mt()}catch(e){N.msgError((e==null?void 0:e.message)||"保存失败")}}function mt(){B||(B=window.setInterval(()=>{ct({silent:!0})},w.interval*1e3))}function _t(){B&&(clearInterval(B),B=null)}function Ft(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(),c=String((e==null?void 0:e.name)??"").trim();return t||(c&&i?`${c}(${i})`:c||i||"—")}function Q(e){const t=String((e==null?void 0:e.admin_name)??"").trim(),i=String((e==null?void 0:e.userid)??"").trim(),c=[];return t&&c.push("后台:"+t),i&&c.push("企微:"+i),c.join("|")}function gt(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 c=0;for(const p of i){const g=Number((p==null?void 0:p.createtime)??0);g>0&&(c===0||g<c)&&(c=g)}if(c>0)return c}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 c;return typeof e=="number"?c=e<1e12?e*1e3:e:!Number.isNaN(t)&&i?c=t<1e12?t*1e3:t:c=new Date(e).getTime(),Number.isNaN(c)?"—":new Date(c).toLocaleString("zh-CN")}let F=null;function Gt(){F===null&&(F=window.setInterval(()=>{J(),R(M.value)},3e4))}function Kt(){F!==null&&(clearInterval(F),F=null)}return ae(()=>{W(),J(),Bt(),R(!1),st(),Gt()}),se(()=>{_t(),ot(),Kt()}),(e,t)=>{const i=de,c=ne,p=oe,g=ue,it=pe,D=ge,Ot=ye,$=be,Rt=xe,pt=ve,yt=fe,vt=ke,S=Se,xt=Ce,bt=he,Yt=je,Wt=Te,wt=Ae,Jt=qe,Qt=Ne,ht=ze,St=De,Xt=Le,Zt=$e,V=Ue,te=Ie,ee=Ve;return u(),m("div",We,[a(p,{shadow:"never",class:"mb-4"},{header:l(()=>[n("div",Je,[t[22]||(t[22]=n("span",{class:"text-lg font-semibold"},"企业微信客户管理",-1)),n("div",Qe,[a(i,{type:"success",plain:"",onClick:dt},{icon:l(()=>[a(x(ce))]),default:l(()=>[t[18]||(t[18]=d(" 今日进入明细 ",-1))]),_:1}),a(i,{type:"warning",plain:"",onClick:Et},{icon:l(()=>[a(x(me))]),default:l(()=>[t[19]||(t[19]=d(" 标签维度 ",-1))]),_:1}),a(i,{type:"primary",loading:U.value,onClick:t[0]||(t[0]=s=>ct())},{icon:l(()=>[a(x(rt))]),default:l(()=>[t[20]||(t[20]=d(" 立即同步 ",-1))]),_:1},8,["loading"]),a(i,{onClick:t[1]||(t[1]=s=>j.value=!0)},{icon:l(()=>[a(x(_e))]),default:l(()=>[t[21]||(t[21]=d(" 同步设置 ",-1))]),_:1})])])]),default:l(()=>[a(c,{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(p,{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(p,{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(),m("span",el," 最近 "+r(Lt(h.recent_time)),1)):A("",!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),m(E,null,T(h.hourly,(s,o)=>(u(),m("div",{key:o,class:re(["hourly-bar",{"is-empty":s===0,"is-current":o===x(Nt)}]),style:ie({height:zt(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(p,{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(p,{shadow:"hover"},{default:l(()=>[t[29]||(t[29]=n("div",{class:"text-gray-500 text-sm mb-1"},"同步状态",-1)),a(g,{type:Ct.value,size:"small"},{default:l(()=>[d(r(C.syncStatusText),1)]),_:1},8,["type"])]),_:1})])]),_:1}),a(p,{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(x(z),["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(x(z),["enter"])},null,8,["modelValue","onKeyup"])]),_:1}),a(D,{label:"添加时间"},{default:l(()=>[a(Ot,{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(pt,{modelValue:_.tag_ids,"onUpdate:modelValue":t[5]||(t[5]=s=>_.tag_ids=s),multiple:"","collapse-tags":"","collapse-tags-tooltip":"",clearable:"",filterable:"",placeholder:"按标签筛选(可多选,命中任一即返回)",loading:P.value,style:{"min-width":"320px"},onChange:x(z)},{default:l(()=>[(u(!0),m(E,null,T(v.groups,s=>(u(),b(Rt,{key:s.group_name||"_",label:(s.group_name||"(未分组)")+" · "+s.customer_count},{default:l(()=>[(u(!0),m(E,null,T(s.tags,o=>(u(),b($,{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:x(z)},{default:l(()=>[...t[30]||(t[30]=[d("查询",-1)])]),_:1},8,["onClick"]),a(i,{onClick:Pt},{default:l(()=>[...t[31]||(t[31]=[d("重置",-1)])]),_:1})]),_:1})]),_:1},8,["model"]),we((u(),b(bt,{data:x(H).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",cl,r(s.name),1),n("div",ml,r(s.external_userid),1)])])]),_:1}),a(S,{label:"类型",width:"80"},{default:l(({row:s})=>[a(g,{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(),m("div",_l,[(u(!0),m(E,null,T(s.follow_users,(o,G)=>(u(),b(xt,{key:(o.userid||"")+"-"+G,disabled:!Q(o),content:Q(o),placement:"top"},{default:l(()=>[a(g,{size:"small",class:"mr-1 mb-1"},{default:l(()=>[d(r(ft(o)),1)]),_:2},1024)]),_:2},1032,["disabled","content"]))),128))])):(u(),m("span",fl,"—"))]),_:1}),a(S,{label:"标签","min-width":"180"},{default:l(({row:s})=>[s.tags&&s.tags.length?(u(),m("div",gl,[(u(!0),m(E,null,T(s.tags,o=>(u(),b(g,{key:o.tag_id,size:"small",effect:"light",type:"warning",class:"mr-1 mb-1 cursor-pointer",onClick:G=>Tt(o.tag_id)},{default:l(()=>[d(r(o.tag_name)+" ",1),o.group_name?(u(),m("span",pl,r(o.group_name),1)):A("",!0)]),_:2},1032,["onClick"]))),128))])):(u(),m("span",yl,"—"))]),_:1}),a(S,{label:"添加时间",width:"160"},{default:l(({row:s})=>[d(r(X(gt(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=>Ft(s)},{default:l(()=>[...t[32]||(t[32]=[d("查看详情",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[ee,x(H).loading]]),n("div",vl,[a(Yt,{modelValue:x(H),"onUpdate:modelValue":t[6]||(t[6]=s=>Ee(H)?H.value=s:null),onChange:x(W)},null,8,["modelValue","onChange"])])]),_:1}),a(wt,{modelValue:j.value,"onUpdate:modelValue":t[10]||(t[10]=s=>j.value=s),title:"同步设置",width:"500px"},{footer:l(()=>[a(i,{onClick:t[9]||(t[9]=s=>j.value=!1)},{default:l(()=>[...t[34]||(t[34]=[d("取消",-1)])]),_:1}),a(i,{type:"primary",onClick:Ht},{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(Wt,{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(pt,{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(g,{type:"success",effect:"plain"},{default:l(()=>[d("共 "+r(f.total)+" 人",1)]),_:1})]),a(i,{link:"",type:"primary",loading:O.value,onClick:t[11]||(t[11]=s=>R(!0))},{icon:l(()=>[a(x(rt))]),default:l(()=>[t[37]||(t[37]=d(" 刷新 ",-1))]),_:1},8,["loading"])])]),default:l(()=>{var s;return[n("div",wl,[a(c,{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(),m("div",hl,[t[39]||(t[39]=n("div",{class:"text-xs text-gray-500 mb-1"},"今日推广渠道 Top",-1)),n("div",Sl,[(u(!0),m(E,null,T(h.by_state,o=>(u(),b(g,{key:o.state||"_",size:"small",effect:"light",type:"success"},{default:l(()=>[d(r(o.state||"(无 state)")+" · "+r(o.count),1)]),_:2},1024))),128))])])):A("",!0),f.lists.length?(u(),b(Qt,{key:1,class:"mt-2"},{default:l(()=>[(u(!0),m(E,null,T(f.lists,o=>(u(),b(Jt,{key:o.id,timestamp:It(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(),m("span",Tl,[t[40]||(t[40]=d(" 渠道:",-1)),a(g,{size:"small",type:"info",effect:"plain"},{default:l(()=>[d(r(o.state),1)]),_:2},1024)])):A("",!0),o.welcome_code?(u(),m("span",Al,"欢迎语")):A("",!0)])])])]),_:2},1032,["timestamp"]))),128))]),_:1})):(u(),b(ht,{key:2,description:"今天还没有人进入","image-size":80})),f.total>f.lists.length?(u(),m("div",Nl,[a(i,{loading:O.value,size:"small",onClick:$t},{default:l(()=>[d(" 加载更多(还剩 "+r(f.total-f.lists.length)+") ",1)]),_:1},8,["loading"])])):A("",!0)])]}),_:1},8,["modelValue"]),a(St,{modelValue:K.value,"onUpdate:modelValue":t[16]||(t[16]=s=>K.value=s),title:"标签维度统计",direction:"rtl",size:"560px","destroy-on-close":!1},{header:l(()=>[n("div",ql,[n("div",zl,[t[41]||(t[41]=n("span",{class:"text-base font-semibold"},"标签维度统计",-1)),a(g,{type:"warning",effect:"plain"},{default:l(()=>[d(r(v.groups.length)+" 组 · "+r(v.total_tags)+" 标签 ",1)]),_:1})]),a(i,{link:"",type:"primary",loading:P.value,onClick:t[13]||(t[13]=s=>st(!0))},{icon:l(()=>[a(x(rt))]),default:l(()=>[t[42]||(t[42]=d(" 刷新 ",-1))]),_:1},8,["loading"])])]),default:l(()=>[n("div",Dl,[n("div",$l,[a(p,{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(p,{shadow:"never","body-class":"!p-3"},{default:l(()=>[t[44]||(t[44]=n("div",{class:"text-xs text-gray-500"},"标签数",-1)),n("div",Il,r(v.total_tags),1)]),_:1}),a(p,{shadow:"never","body-class":"!p-3"},{default:l(()=>[t[45]||(t[45]=n("div",{class:"text-xs text-gray-500"},"关系总数",-1)),n("div",Ul,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(),b(ht,{key:0,description:P.value?"加载中…":"暂无标签数据","image-size":64},null,8,["description"])):(u(),b(Zt,{key:1,modelValue:at.value,"onUpdate:modelValue":t[15]||(t[15]=s=>at.value=s)},{default:l(()=>[(u(!0),m(E,null,T(ut.value,s=>(u(),b(Xt,{key:s.group_name||"_",name:s.group_name||"_"},{title:l(()=>[n("div",jl,[n("span",Pl,r(s.group_name||"(未分组)"),1),a(g,{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",Bl,r(o.tag_name),1),n("div",Hl,r(o.tag_id),1)]),_:1}),a(S,{label:"客户数",width:"100",align:"right"},{default:l(({row:o})=>[n("span",Fl,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:G=>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(),b(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(gt(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(),m("div",Gl,[(u(!0),m(E,null,T(y.value.follow_users,(o,G)=>(u(),b(xt,{key:(o.userid||"")+"-"+G,disabled:!Q(o),content:Q(o),placement:"top"},{default:l(()=>[a(g,{size:"small",class:"mr-1 mb-1"},{default:l(()=>[d(r(ft(o)),1)]),_:2},1024)]),_:2},1032,["disabled","content"]))),128))])):(u(),m("span",Kl,"—"))]}),_:1}),a(V,{label:"标签",span:2},{default:l(()=>{var s;return[(s=y.value.tags)!=null&&s.length?(u(),m("div",Ol,[(u(!0),m(E,null,T(y.value.tags,o=>(u(),b(g,{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(),m("span",Rl,r(o.group_name),1)):A("",!0)]),_:2},1024))),128))])):(u(),m("span",Yl,"—"))]}),_:1})]),_:1})):A("",!0)]),_:1},8,["modelValue"])])}}}),ta=Me(Wl,[["__scopeId","data-v-07da3e76"]]);export{ta as default};
|