Files
zyt/server/public/admin/assets/qywx-7ynlfTDf.js
T
2026-07-16 09:04:40 +08:00

2 lines
27 KiB
JavaScript
Raw Blame History

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