2 lines
27 KiB
JavaScript
2 lines
27 KiB
JavaScript
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};
|