3 lines
30 KiB
JavaScript
3 lines
30 KiB
JavaScript
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};
|