Files
zyt/server/public/admin/assets/qywx-CMKsxFl1.js
T
2026-09-09 15:52:46 +08:00

3 lines
30 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{o as fe,ba as O,ap as pe,aq as ge,be as ye,q as d,r as c,v as a,D as l,bh as ve,s as n,bg as be,T as u,P as L,F as C,G as V,t as xe,ae as we,u as x,br as Se,L as _,K as ke,cG as he,cH as Ce,by as bt,cp as Ve,b9 as Ae,b6 as Ee,b7 as Te,b8 as Nt,bm as Ne,O as y,bn as $e,bp as De,a1 as qe,cC as ze,ac as $t,bj as Ie,bk as Ue,a0 as Le,bi as je,C as Pe,I as Me,bt as Be,c3 as He,c4 as Oe,bB as Fe,B as Ge,cI as Ke,cJ as Re,c0 as We,c1 as Ye,M as A,p as dt}from"./.pnpm-BHOjf1ZS.js";import{_ as Je}from"./index.vue_vue_type_script_setup_true_lang-CDLrQsa9.js";import{u as Qe}from"./usePaging-oaNM6A9T.js";import{r as j,i as $,_ as Xe}from"./index-FUvp6yIk.js";function Ze(P){return j.get({url:"/qywx.customer/lists",params:P})}function tl(P){return j.post({url:"/qywx.customer/delete",params:P})}function el(){return j.post({url:"/qywx.customer/sync"})}function ll(){return j.get({url:"/qywx.customer/stats"})}function al(){return j.get({url:"/qywx.customer/tagStats"})}function sl(){return j.get({url:"/qywx.customer/todayArrival"})}function nl(P){return j.get({url:"/qywx.customer/todayArrivalList",params:P})}function ol(){return j.get({url:"/qywx.customer/getSyncSettings"})}function il(P){return j.post({url:"/qywx.customer/saveSyncSettings",params:P})}const rl={class:"qywx-customer-page p-4"},dl={class:"flex items-center justify-between"},ul={class:"flex gap-2"},ml={class:"grid grid-cols-4 gap-4 mb-4"},_l={class:"text-2xl font-bold text-primary"},cl={class:"flex items-center justify-between mb-1"},fl={key:0,class:"text-xs text-gray-400"},pl={class:"flex items-end gap-2"},gl={class:"text-2xl font-bold text-success leading-none"},yl=["title"],vl={class:"mt-2 pt-2 border-t border-gray-100"},bl={class:"text-lg font-semibold text-gray-800"},xl={class:"text-sm font-medium"},wl={class:"flex items-center justify-between gap-3"},Sl={class:"text-xs text-gray-400"},kl={class:"flex items-center gap-2"},hl={class:"font-medium"},Cl={class:"text-xs text-gray-400"},Vl={key:0},Al={key:1,class:"text-gray-400"},El={key:0},Tl={key:0,class:"ml-1 text-gray-400 text-xs"},Nl={key:1,class:"text-gray-400"},$l={key:0,class:"flex items-center gap-1"},Dl={class:"inline-block max-w-[150px] truncate align-middle"},ql={class:"text-primary whitespace-nowrap cursor-help"},zl={key:1,class:"text-gray-400"},Il={class:"flex justify-end mt-4"},Ul={class:"flex items-center justify-between w-full pr-4"},Ll={class:"flex items-center gap-3"},jl={class:"px-1"},Pl={key:0,class:"mb-3"},Ml={class:"flex flex-wrap gap-1"},Bl={class:"flex items-start gap-2"},Hl={class:"flex-1 min-w-0"},Ol={class:"text-sm font-medium truncate"},Fl={class:"text-xs text-gray-500 mt-0.5"},Gl={key:0,class:"ml-2"},Kl={key:1,class:"ml-2 text-emerald-500"},Rl={key:3,class:"mt-3 text-center"},Wl={class:"flex items-center justify-between w-full pr-4"},Yl={class:"flex items-center gap-3"},Jl={class:"px-1"},Ql={class:"grid grid-cols-3 gap-2 mb-3"},Xl={class:"text-xl font-bold text-warning"},Zl={class:"text-xl font-bold"},ta={class:"text-xl font-bold"},ea={class:"flex items-center gap-2 w-full"},la={class:"font-medium"},aa={class:"ml-auto text-xs text-gray-500"},sa={class:"font-medium"},na={class:"text-xs text-gray-400 truncate"},oa={class:"text-warning font-bold"},ia={key:0,class:"flex flex-wrap gap-1"},ra={key:1,class:"text-gray-400"},da={key:0},ua={key:1,class:"text-gray-400"},ma={key:0},_a={key:0,class:"ml-1 text-gray-400 text-xs"},ca={key:1,class:"text-gray-400"},fa=fe({__name:"qywx",setup(P){const F=A(!1),G=A(!1),ut=A(!1),w=A(null),K=A(null),D=O({total:0,today:0,today_follow_staff:0,lastSync:"",syncStatus:"idle",syncStatusText:"未同步"}),Dt=dt(()=>{switch(D.syncStatus){case"success":return"success";case"syncing":return"warning";case"failed":return"danger";default:return"info"}}),E=O({auto_sync:!1,interval:3600}),f=O({name:"",follow_user:"",add_way:"",tag_ids:[],add_time_start:"",add_time_end:"",dedupe_mode:"first"}),mt=A(null);function qt(e){e&&e.length===2&&e[0]&&e[1]?(f.add_time_start=e[0],f.add_time_end=e[1]):(f.add_time_start="",f.add_time_end=""),U()}const h=O({total_tags:0,total_relations:0,total_tagged_customers:0,groups:[]}),R=A(!1),lt=A(!1),_t=A(""),ct=A([]),xt=dt(()=>{const e=_t.value.trim().toLowerCase();if(!e)return h.groups;const t=[];for(const o of h.groups){const m=(o.group_name||"").toLowerCase().includes(e),S=o.tags.filter(r=>m||(r.tag_name||"").toLowerCase().includes(e));S.length&&t.push({...o,tags:S})}return t});async function at(e=!1){R.value=!0;try{const t=await al();t&&typeof t=="object"&&(h.total_tags=Number(t.total_tags??0),h.total_relations=Number(t.total_relations??0),h.total_tagged_customers=Number(t.total_tagged_customers??0),h.groups=Array.isArray(t.groups)?t.groups:[]),e&&$.msgSuccess("已刷新")}catch(t){e&&$.msgError((t==null?void 0:t.message)||"加载标签统计失败"),console.error("加载标签统计失败",t)}finally{R.value=!1}}function zt(){var e;lt.value=!0,ct.value=(e=h.groups[0])!=null&&e.group_name?[h.groups[0].group_name]:[],h.groups.length===0&&at()}function It(e){e&&(f.tag_ids.includes(e)||(f.tag_ids.push(e),U()))}function Ut(e){e&&(f.tag_ids=[e],lt.value=!1,U())}const T=O({total:0,recent_time:0,hourly:new Array(24).fill(0),by_state:[]}),W=A(!1),st=A(!1),g=O({total:0,page_no:1,page_size:20,lists:[]}),Lt=new Date().getHours(),jt=dt(()=>Math.max(1,...T.hourly));function Pt(e){if(e<=0)return"2px";const t=e/jt.value;return Math.max(4,Math.round(t*32))+"px"}const Mt=dt(()=>{const e=[];return T.hourly.forEach((t,o)=>{t>0&&e.push(`${String(o).padStart(2,"0")}:00 · ${t}`)}),e.length?e.join(" "):"今天还没有人进入"});async function nt(e=!1){try{const t=await sl();t&&(T.total=Number(t.total??0),T.recent_time=Number(t.recent_time??0),T.hourly=Array.isArray(t.hourly)&&t.hourly.length===24?t.hourly.map(o=>Number(o)||0):new Array(24).fill(0),T.by_state=Array.isArray(t.by_state)?t.by_state:[])}catch(t){console.error("加载今日进入分布失败",t)}e&&W.value&&(g.page_no=1,g.lists=[],await ft())}async function ft(){st.value=!0;try{const e=await nl({page_no:g.page_no,page_size:g.page_size});if(e){g.total=Number(e.total??0);const t=Array.isArray(e.lists)?e.lists:[];g.page_no===1?g.lists=t:g.lists.push(...t)}}catch(e){console.error("加载今日进入明细失败",e)}finally{st.value=!1}}async function wt(){W.value=!0,g.page_no=1,g.lists=[],await Promise.all([nt(!1),ft()])}async function Bt(){g.lists.length>=g.total||(g.page_no+=1,await ft())}function Ht(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 Ot(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 Y=null,ot=null;function pt(){ot!==null&&(clearInterval(ot),ot=null)}async function Ft(e){return Ze(e)}const{pager:M,getLists:J,resetPage:U,resetParams:Gt}=Qe({fetchFun:Ft,params:f});function Kt(){f.name="",f.follow_user="",f.add_way="",f.tag_ids=[],f.add_time_start="",f.add_time_end="",f.dedupe_mode="first",mt.value=null,Gt()}function Rt(){pt();let e=0;ot=window.setInterval(async()=>{e+=1,await Q(),await J(),(D.syncStatus!=="syncing"||e>=120)&&(pt(),F.value=!1,e>=120&&D.syncStatus==="syncing"?$.msgWarning("长时间仍为「同步中」,请刷新页面或查看服务器 runtime/log/qywx_sync.log(可能未安装 CLI php 或禁用了 exec"):D.syncStatus==="failed"&&$.msgError("同步失败,请查看服务器 runtime/log/qywx_sync.log 或后台同步状态"))},3e3)}async function St(e){const t=(e==null?void 0:e.silent)===!0;F.value=!0;try{const o=await el();t||$.msgSuccess((o==null?void 0:o.message)||"操作成功"),await Q(),await J(),o!=null&&o.background?Rt():F.value=!1}catch(o){const m=(o==null?void 0:o.message)||(o==null?void 0:o.msg)||"同步失败";(!t||!String(m).includes("正在执行"))&&$.msgError(m),F.value=!1}}async function Q(){try{const e=await ll();e&&typeof e=="object"&&Object.assign(D,e)}catch(e){console.error("加载统计失败",e)}}async function Wt(){try{const e=await ol();e&&typeof e=="object"&&Object.assign(E,e),E.auto_sync&&kt()}catch(e){console.error("加载同步设置失败",e)}}async function Yt(){try{await il(E),$.msgSuccess("保存成功"),G.value=!1,ht(),E.auto_sync&&kt()}catch(e){$.msgError((e==null?void 0:e.message)||"保存失败")}}function kt(){Y||(Y=window.setInterval(()=>{St({silent:!0})},E.interval*1e3))}function ht(){Y&&(clearInterval(Y),Y=null)}function Jt(e){w.value=e,ut.value=!0}async function Qt(e){const t=Number(e.id);if(!Number.isInteger(t)||t<=0||K.value!==null)return;const o=String(e.name||e.external_userid||"该客户");try{await $.confirm(`确定删除企业微信客户“${o}”吗?此操作仅删除系统内的同步记录,不会删除企业微信中的客户关系;后续重新同步时可能再次出现。`)}catch{return}K.value=t;try{await tl({id:t}),M.page>1&&M.lists.length===1&&(M.page-=1),await Promise.all([J(),Q(),at()]),$.msgSuccess("删除成功")}catch(m){$.msgError((m==null?void 0:m.message)||(m==null?void 0:m.msg)||"删除失败")}finally{K.value=null}}function gt(e){const t=String((e==null?void 0:e.admin_name)??"").trim(),o=String((e==null?void 0:e.userid)??"").trim(),m=String((e==null?void 0:e.name)??"").trim();return t||(m&&o?`${m}${o}`:m||o||"—")}function it(e){const t=String((e==null?void 0:e.admin_name)??"").trim(),o=String((e==null?void 0:e.userid)??"").trim(),m=[];return t&&m.push("后台:"+t),o&&m.push("企微:"+o),m.join("")}function Xt(e){return e?Array.isArray(e.add_channels)?e.add_channels.map(t=>({state:String((t==null?void 0:t.state)??"").trim(),label:String((t==null?void 0:t.label)??(t==null?void 0:t.state)??"").trim(),source_type:(t==null?void 0:t.source_type)==="promotion_pool"?"promotion_pool":"state",pool_id:Number((t==null?void 0:t.pool_id)??0),user_id:String((t==null?void 0:t.user_id)??"").trim(),event_time:Number((t==null?void 0:t.event_time)??0)})).filter(t=>t.state!==""):Array.isArray(e.add_channel_states)?e.add_channel_states.map(t=>String(t??"").trim()).filter(t=>t!=="").map(t=>({state:t,label:t,source_type:"state",pool_id:0,user_id:"",event_time:0})):[]:[]}const Ct={0:"未知添加方式",1:"通过扫描二维码添加",2:"通过搜索手机号添加",3:"通过名片分享添加",4:"通过群聊添加",5:"通过手机通讯录添加",6:"通过微信联系人添加",8:"安装第三方应用时自动添加",9:"通过搜索邮箱添加",10:"通过视频号添加",11:"通过日程参与人添加",12:"通过会议参与人添加",13:"通过微信好友添加",14:"通过智慧硬件专属客服添加",15:"通过上门服务客服添加",16:"通过获客链接添加",17:"通过定制开发添加",18:"通过需求回复添加",21:"通过第三方售前客服添加",22:"通过可能的商务伙伴添加",24:"通过接受微信好友申请添加",201:"通过内部成员共享添加",202:"通过管理员或负责人分配添加"},Zt=Object.entries(Ct).map(([e,t])=>({value:Number(e),label:t}));function te(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0?e:typeof e!="string"||!/^\d+$/.test(e.trim())?null:Number(e.trim())}function ee(e){return Ct[e]||`其他添加方式(${e}`}function H(e){if(!e)return[];const t=Xt(e),o=new Set,m=[];return(Array.isArray(e.follow_users)?e.follow_users:[]).forEach((r,q)=>{const k=String((r==null?void 0:r.userid)??(r==null?void 0:r.UserId)??"").trim(),v=String((r==null?void 0:r.state)??(r==null?void 0:r.State)??"").trim(),z=te((r==null?void 0:r.add_way)??(r==null?void 0:r.AddWay));let I=t.findIndex((b,B)=>!o.has(B)&&k!==""&&v!==""&&b.user_id===k&&b.state===v);I<0&&v!==""&&(I=t.findIndex((b,B)=>!o.has(B)&&b.state===v)),I<0&&k!==""&&(I=t.findIndex((b,B)=>!o.has(B)&&b.user_id===k));const p=I>=0?t[I]:void 0;if(I>=0&&o.add(I),z===null&&v===""&&!p)return;const vt=String((r==null?void 0:r.add_way_label)??"").trim(),tt=(p==null?void 0:p.source_type)??(/^zyt_pool:[1-9]\d*$/.test(v)?"promotion_pool":"state"),rt=vt||(z!==null?ee(z):tt==="promotion_pool"?"通过获客链接添加":"通过其他渠道添加");m.push({key:`follow:${q}:${k}:${z??"unknown"}:${v}`,add_way:z,label:rt,state:v||(p==null?void 0:p.state)||"",channel_label:(p==null?void 0:p.label)||"",source_type:tt,pool_id:(p==null?void 0:p.pool_id)||0,user_id:k||(p==null?void 0:p.user_id)||"",staff_name:gt(r),event_time:(p==null?void 0:p.event_time)||Number((r==null?void 0:r.createtime)??0)})}),t.forEach((r,q)=>{o.has(q)||m.push({...r,key:`channel:${q}:${r.user_id}:${r.state}`,add_way:r.source_type==="promotion_pool"?16:null,label:r.source_type==="promotion_pool"?"通过获客链接添加":"通过其他渠道添加",channel_label:r.label,staff_name:r.user_id||"—"})}),m.sort((r,q)=>q.event_time-r.event_time)}function yt(e){const t=[];return t.push(`添加方式:${e.label}`),e.source_type==="promotion_pool"&&e.channel_label&&t.push(`获客助手方案:${e.channel_label}`),e.staff_name&&e.staff_name!=="—"&&t.push(`跟进人:${e.staff_name}`),e.event_time>0&&t.push(`添加时间:${X(e.event_time)}`),e.state&&t.push(`渠道参数:${e.state}`),t.join("")}function le(e){return H(e).slice(1).map(yt).join(`
`)}function Vt(e){if(!e)return null;const t=Number(e.external_first_add_time??0);if(t>0)return t;const o=e.follow_users;if(Array.isArray(o)&&o.length>0){let m=0;for(const S of o){const r=Number((S==null?void 0:S.createtime)??0);r>0&&(m===0||r<m)&&(m=r)}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),o=typeof e=="string"&&/^\d+$/.test(e.trim());let m;return typeof e=="number"?m=e<1e12?e*1e3:e:!Number.isNaN(t)&&o?m=t<1e12?t*1e3:t:m=new Date(e).getTime(),Number.isNaN(m)?"—":new Date(m).toLocaleString("zh-CN")}let Z=null;function ae(){Z===null&&(Z=window.setInterval(()=>{Q(),nt(W.value)},3e4))}function se(){Z!==null&&(clearInterval(Z),Z=null)}return pe(()=>{J(),Q(),Wt(),nt(!1),at(),ae()}),ge(()=>{ht(),pt(),se()}),(e,t)=>{const o=ke,m=ve,S=be,r=Se,q=Te,k=Ee,v=$e,z=Ne,I=De,p=qe,vt=ze,tt=Ae,rt=Le,b=Ue,B=Ie,ne=Je,oe=Me,At=Be,ie=Oe,re=He,Et=Fe,Tt=Ge,de=Re,ue=Ke,N=Ye,me=We,_e=ye("perms"),ce=je;return d(),c("div",rl,[a(S,{shadow:"never",class:"mb-4"},{header:l(()=>[n("div",dl,[t[24]||(t[24]=n("span",{class:"text-lg font-semibold"},"企业微信客户管理",-1)),n("div",ul,[a(o,{type:"success",plain:"",onClick:wt},{icon:l(()=>[a(x(he))]),default:l(()=>[t[20]||(t[20]=_(" 今日进入明细 ",-1))]),_:1}),a(o,{type:"warning",plain:"",onClick:zt},{icon:l(()=>[a(x(Ce))]),default:l(()=>[t[21]||(t[21]=_(" 标签维度 ",-1))]),_:1}),a(o,{type:"primary",loading:F.value,onClick:t[0]||(t[0]=s=>St())},{icon:l(()=>[a(x(bt))]),default:l(()=>[t[22]||(t[22]=_(" 立即同步 ",-1))]),_:1},8,["loading"]),a(o,{onClick:t[1]||(t[1]=s=>G.value=!0)},{icon:l(()=>[a(x(Ve))]),default:l(()=>[t[23]||(t[23]=_(" 同步设置 ",-1))]),_:1})])])]),default:l(()=>[a(m,{title:"功能说明",type:"info",closable:!1,class:"mb-4"},{default:l(()=>[...t[25]||(t[25]=[n("div",{class:"text-sm"},[n("p",null,"自动从企业微信同步外部联系人(客户)信息,包括客户基本信息、跟进人等。"),n("p",{class:"mt-1"},"同步后的数据可用于患者信息匹配和自动关联。")],-1)])]),_:1}),n("div",ml,[a(S,{shadow:"hover"},{default:l(()=>[t[26]||(t[26]=n("div",{class:"text-gray-500 text-sm mb-1"},"总客户数",-1)),n("div",_l,u(D.total),1)]),_:1}),a(S,{shadow:"hover",class:"today-arrival-card cursor-pointer",onClick:wt},{default:l(()=>[n("div",cl,[t[27]||(t[27]=n("span",{class:"text-gray-500 text-sm"},"今日新增",-1)),T.recent_time?(d(),c("span",fl," 最近 "+u(Ht(T.recent_time)),1)):L("",!0)]),n("div",pl,[n("div",gl,u(D.today),1),t[28]||(t[28]=n("div",{class:"text-xs text-gray-400 pb-1"},"人",-1))]),n("div",{class:"hourly-bars mt-2",title:Mt.value},[(d(!0),c(C,null,V(T.hourly,(s,i)=>(d(),c("div",{key:i,class:we(["hourly-bar",{"is-empty":s===0,"is-current":i===x(Lt)}]),style:xe({height:Pt(s)})},null,6))),128))],8,yl),n("div",vl,[t[29]||(t[29]=n("div",{class:"text-gray-500 text-xs mb-0.5"},"今日跟进人合计",-1)),n("div",bl,u(D.today_follow_staff),1)])]),_:1}),a(S,{shadow:"hover"},{default:l(()=>[t[30]||(t[30]=n("div",{class:"text-gray-500 text-sm mb-1"},"最后同步",-1)),n("div",xl,u(D.lastSync||"未同步"),1)]),_:1}),a(S,{shadow:"hover"},{default:l(()=>[t[31]||(t[31]=n("div",{class:"text-gray-500 text-sm mb-1"},"同步状态",-1)),a(r,{type:Dt.value,size:"small"},{default:l(()=>[_(u(D.syncStatusText),1)]),_:1},8,["type"])]),_:1})])]),_:1}),a(S,{shadow:"never"},{default:l(()=>[a(tt,{model:f,inline:"",class:"mb-4"},{default:l(()=>[a(k,{label:"客户名称"},{default:l(()=>[a(q,{modelValue:f.name,"onUpdate:modelValue":t[2]||(t[2]=s=>f.name=s),placeholder:"搜索客户名称",clearable:"",onKeyup:Nt(x(U),["enter"])},null,8,["modelValue","onKeyup"])]),_:1}),a(k,{label:"跟进人"},{default:l(()=>[a(q,{modelValue:f.follow_user,"onUpdate:modelValue":t[3]||(t[3]=s=>f.follow_user=s),placeholder:"跟进人姓名(后台姓名或企微账号)",clearable:"",onKeyup:Nt(x(U),["enter"])},null,8,["modelValue","onKeyup"])]),_:1}),a(k,{label:"渠道"},{default:l(()=>[a(z,{modelValue:f.add_way,"onUpdate:modelValue":t[4]||(t[4]=s=>f.add_way=s),clearable:"",filterable:"",placeholder:"选择或搜索添加渠道",style:{width:"240px"},onChange:x(U)},{default:l(()=>[(d(!0),c(C,null,V(x(Zt),s=>(d(),y(v,{key:s.value,label:s.label,value:s.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue","onChange"])]),_:1}),a(k,{label:"添加时间"},{default:l(()=>[a(I,{modelValue:mt.value,"onUpdate:modelValue":t[5]||(t[5]=s=>mt.value=s),type:"daterange","value-format":"YYYY-MM-DD","start-placeholder":"开始日期","end-placeholder":"结束日期",clearable:"",class:"!w-[280px]",onChange:qt},null,8,["modelValue"])]),_:1}),a(k,{label:"去重筛选"},{default:l(()=>[a(z,{modelValue:f.dedupe_mode,"onUpdate:modelValue":t[6]||(t[6]=s=>f.dedupe_mode=s),style:{width:"220px"},onChange:x(U)},{default:l(()=>[a(v,{label:"客户去重(首次添加)",value:"first"}),a(v,{label:"含重加(对齐企微)",value:"any"})]),_:1},8,["modelValue","onChange"]),a(p,{content:"客户去重:按客户首次添加时间。含重加:当天任意员工添加过即计入(含老客被其他员工重加),与企微时间筛选更接近;可与跟进人、添加时间联用。",placement:"top"},{default:l(()=>[...t[32]||(t[32]=[n("span",{class:"ml-1 text-gray-400 text-xs cursor-help"},"说明",-1)])]),_:1})]),_:1}),a(k,{label:"标签"},{default:l(()=>[a(z,{modelValue:f.tag_ids,"onUpdate:modelValue":t[7]||(t[7]=s=>f.tag_ids=s),multiple:"","collapse-tags":"","collapse-tags-tooltip":"",clearable:"",filterable:"",placeholder:"按标签筛选(可多选,命中任一即返回)",loading:R.value,style:{"min-width":"320px"},onChange:x(U)},{default:l(()=>[(d(!0),c(C,null,V(h.groups,s=>(d(),y(vt,{key:s.group_name||"_",label:(s.group_name||"(未分组)")+" · "+s.customer_count},{default:l(()=>[(d(!0),c(C,null,V(s.tags,i=>(d(),y(v,{key:i.tag_id,value:i.tag_id,label:i.tag_name},{default:l(()=>[n("span",wl,[n("span",null,u(i.tag_name),1),n("span",Sl,u(i.customer_count)+" 人",1)])]),_:2},1032,["value","label"]))),128))]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue","loading","onChange"])]),_:1}),a(k,null,{default:l(()=>[a(o,{type:"primary",onClick:x(U)},{default:l(()=>[...t[33]||(t[33]=[_("查询",-1)])]),_:1},8,["onClick"]),a(o,{onClick:Kt},{default:l(()=>[...t[34]||(t[34]=[_("重置",-1)])]),_:1})]),_:1})]),_:1},8,["model"]),$t((d(),y(B,{data:x(M).lists,stripe:""},{default:l(()=>[a(b,{label:"客户信息","min-width":"200"},{default:l(({row:s})=>[n("div",kl,[a(rt,{size:40,src:s.avatar},null,8,["src"]),n("div",null,[n("div",hl,u(s.name),1),n("div",Cl,u(s.external_userid),1)])])]),_:1}),a(b,{label:"类型",width:"80"},{default:l(({row:s})=>[a(r,{size:"small"},{default:l(()=>[_(u(s.type===1?"微信":"企微"),1)]),_:2},1024)]),_:1}),a(b,{label:"性别",width:"60"},{default:l(({row:s})=>[_(u(s.gender===1?"男":s.gender===2?"女":"未知"),1)]),_:1}),a(b,{label:"跟进人","min-width":"150"},{default:l(({row:s})=>[s.follow_users&&s.follow_users.length?(d(),c("div",Vl,[(d(!0),c(C,null,V(s.follow_users,(i,et)=>(d(),y(p,{key:(i.userid||"")+"-"+et,disabled:!it(i),content:it(i),placement:"top"},{default:l(()=>[a(r,{size:"small",class:"mr-1 mb-1"},{default:l(()=>[_(u(gt(i)),1)]),_:2},1024)]),_:2},1032,["disabled","content"]))),128))])):(d(),c("span",Al,"—"))]),_:1}),a(b,{label:"标签","min-width":"180"},{default:l(({row:s})=>[s.tags&&s.tags.length?(d(),c("div",El,[(d(!0),c(C,null,V(s.tags,i=>(d(),y(r,{key:i.tag_id,size:"small",effect:"light",type:"warning",class:"mr-1 mb-1 cursor-pointer",onClick:et=>It(i.tag_id)},{default:l(()=>[_(u(i.tag_name)+" ",1),i.group_name?(d(),c("span",Tl,u(i.group_name),1)):L("",!0)]),_:2},1032,["onClick"]))),128))])):(d(),c("span",Nl,"—"))]),_:1}),a(b,{label:"添加渠道","min-width":"160"},{default:l(({row:s})=>[H(s).length?(d(),c("div",$l,[(d(!0),c(C,null,V(H(s).slice(0,1),i=>(d(),y(p,{key:i.key,content:yt(i),placement:"top"},{default:l(()=>[n("span",Dl,u(i.label),1)]),_:2},1032,["content"]))),128)),H(s).length>1?(d(),y(p,{key:0,content:le(s),placement:"top"},{default:l(()=>[n("span",ql," 另 "+u(H(s).length-1)+" 条 ",1)]),_:2},1032,["content"])):L("",!0)])):(d(),c("span",zl,"未记录"))]),_:1}),a(b,{label:"添加时间",width:"160"},{default:l(({row:s})=>[_(u(X(Vt(s))),1)]),_:1}),a(b,{label:"更新时间",width:"160"},{default:l(({row:s})=>[_(u(X(s.update_time)),1)]),_:1}),a(b,{label:"操作",width:"160",fixed:"right"},{default:l(({row:s})=>[a(o,{type:"primary",link:"",onClick:i=>Jt(s)},{default:l(()=>[...t[35]||(t[35]=[_("查看详情",-1)])]),_:1},8,["onClick"]),$t((d(),y(o,{type:"danger",link:"",loading:K.value===Number(s.id),disabled:K.value!==null,onClick:i=>Qt(s)},{default:l(()=>[...t[36]||(t[36]=[_(" 删除 ",-1)])]),_:1},8,["loading","disabled","onClick"])),[[_e,["qywx.customer/delete"]]])]),_:1})]),_:1},8,["data"])),[[ce,x(M).loading]]),n("div",Il,[a(ne,{modelValue:x(M),"onUpdate:modelValue":t[8]||(t[8]=s=>Pe(M)?M.value=s:null),onChange:x(J)},null,8,["modelValue","onChange"])])]),_:1}),a(At,{modelValue:G.value,"onUpdate:modelValue":t[12]||(t[12]=s=>G.value=s),title:"同步设置",width:"500px"},{footer:l(()=>[a(o,{onClick:t[11]||(t[11]=s=>G.value=!1)},{default:l(()=>[...t[38]||(t[38]=[_("取消",-1)])]),_:1}),a(o,{type:"primary",onClick:Yt},{default:l(()=>[...t[39]||(t[39]=[_("保存",-1)])]),_:1})]),default:l(()=>[a(tt,{model:E,"label-width":"120px"},{default:l(()=>[a(k,{label:"自动同步"},{default:l(()=>[a(oe,{modelValue:E.auto_sync,"onUpdate:modelValue":t[9]||(t[9]=s=>E.auto_sync=s)},null,8,["modelValue"]),t[37]||(t[37]=n("div",{class:"text-xs text-gray-400 mt-1"}," 开启后将定时自动同步企业微信客户数据 ",-1))]),_:1}),a(k,{label:"同步间隔"},{default:l(()=>[a(z,{modelValue:E.interval,"onUpdate:modelValue":t[10]||(t[10]=s=>E.interval=s),disabled:!E.auto_sync},{default:l(()=>[a(v,{label:"每小时",value:3600}),a(v,{label:"每2小时",value:7200}),a(v,{label:"每4小时",value:14400}),a(v,{label:"每6小时",value:21600}),a(v,{label:"每12小时",value:43200}),a(v,{label:"每天",value:86400})]),_:1},8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"]),a(Tt,{modelValue:W.value,"onUpdate:modelValue":t[14]||(t[14]=s=>W.value=s),title:"今日进入明细",direction:"rtl",size:"520px","destroy-on-close":!1},{header:l(()=>[n("div",Ul,[n("div",Ll,[t[40]||(t[40]=n("span",{class:"text-base font-semibold"},"今日进入明细",-1)),a(r,{type:"success",effect:"plain"},{default:l(()=>[_("共 "+u(g.total)+" 人",1)]),_:1})]),a(o,{link:"",type:"primary",loading:st.value,onClick:t[13]||(t[13]=s=>nt(!0))},{icon:l(()=>[a(x(bt))]),default:l(()=>[t[41]||(t[41]=_(" 刷新 ",-1))]),_:1},8,["loading"])])]),default:l(()=>{var s;return[n("div",jl,[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=T.by_state)!=null&&s.length?(d(),c("div",Pl,[t[43]||(t[43]=n("div",{class:"text-xs text-gray-500 mb-1"},"今日推广渠道 Top",-1)),n("div",Ml,[(d(!0),c(C,null,V(T.by_state,i=>(d(),y(r,{key:i.state||"_",size:"small",effect:"light",type:"success"},{default:l(()=>[_(u(i.state||"(无 state")+" · "+u(i.count),1)]),_:2},1024))),128))])])):L("",!0),g.lists.length?(d(),y(re,{key:1,class:"mt-2"},{default:l(()=>[(d(!0),c(C,null,V(g.lists,i=>(d(),y(ie,{key:i.id,timestamp:Ot(i.event_time),placement:"top",type:"success",hollow:!1},{default:l(()=>[n("div",Bl,[a(rt,{size:32,src:i.customer_avatar||void 0},{default:l(()=>[_(u((i.customer_name||"?").slice(0,1)),1)]),_:2},1032,["src"]),n("div",Hl,[n("div",Ol,u(i.customer_name||i.external_userid||"(未知客户)"),1),n("div",Fl,[n("span",null,"接待:"+u(i.admin_name||i.user_id||"—"),1),i.state?(d(),c("span",Gl,[t[44]||(t[44]=_(" 渠道:",-1)),a(r,{size:"small",type:"info",effect:"plain"},{default:l(()=>[_(u(i.state),1)]),_:2},1024)])):L("",!0),i.welcome_code?(d(),c("span",Kl,"欢迎语")):L("",!0)])])])]),_:2},1032,["timestamp"]))),128))]),_:1})):(d(),y(Et,{key:2,description:"今天还没有人进入","image-size":80})),g.total>g.lists.length?(d(),c("div",Rl,[a(o,{loading:st.value,size:"small",onClick:Bt},{default:l(()=>[_(" 加载更多(还剩 "+u(g.total-g.lists.length)+" ",1)]),_:1},8,["loading"])])):L("",!0)])]}),_:1},8,["modelValue"]),a(Tt,{modelValue:lt.value,"onUpdate:modelValue":t[18]||(t[18]=s=>lt.value=s),title:"标签维度统计",direction:"rtl",size:"560px","destroy-on-close":!1},{header:l(()=>[n("div",Wl,[n("div",Yl,[t[45]||(t[45]=n("span",{class:"text-base font-semibold"},"标签维度统计",-1)),a(r,{type:"warning",effect:"plain"},{default:l(()=>[_(u(h.groups.length)+" 组 · "+u(h.total_tags)+" 标签 ",1)]),_:1})]),a(o,{link:"",type:"primary",loading:R.value,onClick:t[15]||(t[15]=s=>at(!0))},{icon:l(()=>[a(x(bt))]),default:l(()=>[t[46]||(t[46]=_(" 刷新 ",-1))]),_:1},8,["loading"])])]),default:l(()=>[n("div",Jl,[n("div",Ql,[a(S,{shadow:"never","body-class":"!p-3"},{default:l(()=>[t[47]||(t[47]=n("div",{class:"text-xs text-gray-500"},"已打标签客户",-1)),n("div",Xl,u(h.total_tagged_customers),1)]),_:1}),a(S,{shadow:"never","body-class":"!p-3"},{default:l(()=>[t[48]||(t[48]=n("div",{class:"text-xs text-gray-500"},"标签数",-1)),n("div",Zl,u(h.total_tags),1)]),_:1}),a(S,{shadow:"never","body-class":"!p-3"},{default:l(()=>[t[49]||(t[49]=n("div",{class:"text-xs text-gray-500"},"关系总数",-1)),n("div",ta,u(h.total_relations),1)]),_:1})]),a(q,{modelValue:_t.value,"onUpdate:modelValue":t[16]||(t[16]=s=>_t.value=s),placeholder:"筛选标签名 / 分组名",clearable:"",size:"small",class:"mb-3"},null,8,["modelValue"]),xt.value.length===0?(d(),y(Et,{key:0,description:R.value?"加载中…":"暂无标签数据","image-size":64},null,8,["description"])):(d(),y(ue,{key:1,modelValue:ct.value,"onUpdate:modelValue":t[17]||(t[17]=s=>ct.value=s)},{default:l(()=>[(d(!0),c(C,null,V(xt.value,s=>(d(),y(de,{key:s.group_name||"_",name:s.group_name||"_"},{title:l(()=>[n("div",ea,[n("span",la,u(s.group_name||"(未分组)"),1),a(r,{size:"small",effect:"plain"},{default:l(()=>[_(u(s.tags.length),1)]),_:2},1024),n("span",aa," 最热 "+u(s.customer_count)+" 人 ",1)])]),default:l(()=>[a(B,{data:s.tags,size:"small",stripe:""},{default:l(()=>[a(b,{label:"标签","min-width":"160"},{default:l(({row:i})=>[n("span",sa,u(i.tag_name),1),n("div",na,u(i.tag_id),1)]),_:1}),a(b,{label:"客户数",width:"100",align:"right"},{default:l(({row:i})=>[n("span",oa,u(i.customer_count),1)]),_:1}),a(b,{label:"操作",width:"80",align:"center"},{default:l(({row:i})=>[a(o,{link:"",type:"primary",size:"small",onClick:et=>Ut(i.tag_id)},{default:l(()=>[...t[50]||(t[50]=[_(" 筛选 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),_:2},1032,["name"]))),128))]),_:1},8,["modelValue"]))])]),_:1},8,["modelValue"]),a(At,{modelValue:ut.value,"onUpdate:modelValue":t[19]||(t[19]=s=>ut.value=s),title:"客户详情",width:"600px"},{default:l(()=>[w.value?(d(),y(me,{key:0,column:2,border:""},{default:l(()=>[a(N,{label:"客户名称"},{default:l(()=>[_(u(w.value.name),1)]),_:1}),a(N,{label:"External ID"},{default:l(()=>[_(u(w.value.external_userid),1)]),_:1}),a(N,{label:"性别"},{default:l(()=>[_(u(w.value.gender===1?"男":w.value.gender===2?"女":"未知"),1)]),_:1}),a(N,{label:"类型"},{default:l(()=>[_(u(w.value.type===1?"微信用户":"企业微信用户"),1)]),_:1}),a(N,{label:"企业名称",span:2},{default:l(()=>[_(u(w.value.corp_name||"—"),1)]),_:1}),a(N,{label:"职位",span:2},{default:l(()=>[_(u(w.value.position||"—"),1)]),_:1}),a(N,{label:"添加时间",span:2},{default:l(()=>[_(u(X(Vt(w.value))),1)]),_:1}),a(N,{label:"添加渠道",span:2},{default:l(()=>[H(w.value).length?(d(),c("div",ia,[(d(!0),c(C,null,V(H(w.value),s=>(d(),y(p,{key:s.key,content:yt(s),placement:"top"},{default:l(()=>[a(r,{size:"small",type:"info",effect:"plain"},{default:l(()=>[_(u(s.label),1)]),_:2},1024)]),_:2},1032,["content"]))),128))])):(d(),c("span",ra,"未记录"))]),_:1}),a(N,{label:"更新时间",span:2},{default:l(()=>[_(u(X(w.value.update_time)),1)]),_:1}),a(N,{label:"跟进人",span:2},{default:l(()=>{var s;return[(s=w.value.follow_users)!=null&&s.length?(d(),c("div",da,[(d(!0),c(C,null,V(w.value.follow_users,(i,et)=>(d(),y(p,{key:(i.userid||"")+"-"+et,disabled:!it(i),content:it(i),placement:"top"},{default:l(()=>[a(r,{size:"small",class:"mr-1 mb-1"},{default:l(()=>[_(u(gt(i)),1)]),_:2},1024)]),_:2},1032,["disabled","content"]))),128))])):(d(),c("span",ua,"—"))]}),_:1}),a(N,{label:"标签",span:2},{default:l(()=>{var s;return[(s=w.value.tags)!=null&&s.length?(d(),c("div",ma,[(d(!0),c(C,null,V(w.value.tags,i=>(d(),y(r,{key:i.tag_id,size:"small",effect:"light",type:"warning",class:"mr-1 mb-1"},{default:l(()=>[_(u(i.tag_name)+" ",1),i.group_name?(d(),c("span",_a,u(i.group_name),1)):L("",!0)]),_:2},1024))),128))])):(d(),c("span",ca,"—"))]}),_:1})]),_:1})):L("",!0)]),_:1},8,["modelValue"])])}}}),ba=Xe(fa,[["__scopeId","data-v-537c4308"]]);export{ba as default};