Files
zyt/server/public/admin/assets/index-DFXrTWHZ.js
T
2026-06-01 18:11:05 +08:00

2 lines
17 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 Je,i as Oe,d as We,r as Ge,Q as Xe,q as Ye,P as je,C as Ze,H as et,L as tt,W as st,X as at,T as lt,l as nt,m as it,Y as ot,M as rt,N as ut,V as dt}from"./element-plus-lurTijPg.js";import{w as ct}from"./@vue/runtime-dom-DDAG46FW.js";import{L as fe,M as mt,N as _t,J as ft}from"./@element-plus/icons-vue-HOEUG8sr.js";import{i as C,t as vt,_ as pt}from"./index-DF1MLuL8.js";import{u as gt}from"./usePaging-VsbTxSU0.js";import yt from"./MessageBubble-Mq5MNoMw.js";import{q as ht,S as kt,a as wt,b as bt,c as xt,d as St,e as ae,f as Tt,g as Mt,h as ve}from"./SendPanel-Ut8ml_Z3.js";import{f as zt,w as Et,b as Ct,ae as Vt,ak as o,I as u,G as x,H as _,J as a,a as l,aN as i,F as M,ap as B,O as f,aP as le,A as pe,n as ne}from"./@vue/runtime-core-C6bnekPw.js";import{y,n as m}from"./@vue/reactivity-DiY1c2vO.js";import{Q as d,o as $t}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";import"./file-BdGKYRpa.js";const Dt={class:"qywx-im"},Lt={class:"im-layout"},qt={class:"col-session"},At={class:"col-header"},It={class:"col-actions"},Bt={class:"col-filters"},Ht={class:"staff-option"},Pt={class:"staff-userid"},Nt={class:"session-list"},Ut={key:0,class:"empty-tip"},Kt=["onClick"],Rt={class:"session-meta"},Ft={class:"session-top"},Qt={class:"session-name"},Jt={class:"session-time"},Ot={class:"session-bottom"},Wt={class:"session-preview"},Gt={key:0,class:"session-staff"},Xt={key:1,class:"session-load-more"},Yt={class:"col-message"},jt={key:0,class:"no-session"},Zt={class:"col-header"},es={class:"msg-header-title"},ts={class:"msg-customer-name"},ss={class:"msg-customer-sub"},as={class:"col-actions"},ls={key:0,class:"load-history"},ns={key:1,class:"load-history end-tip"},is={key:2,class:"empty-tip"},os={class:"col-profile"},rs={class:"profile-panel"},us={class:"profile-name"},ds={class:"profile-fields"},cs={class:"field"},ms={class:"value"},_s={class:"field"},fs=["title"],vs={key:0,class:"field"},ps={class:"value"},gs={key:1,class:"field"},ys={class:"value"},hs={class:"field"},ks={class:"value"},ws={class:"field"},bs={class:"value"},xs={class:"tasks-panel"},Ss={key:0,class:"empty-tip"},Ts={class:"task-top"},Ms={class:"task-time"},zs={class:"task-body"},Es={key:0,class:"task-text"},Cs={key:1,class:"task-attachments"},Vs={key:2,class:"task-error"},$s={class:"task-actions"},Ds={key:1,class:"no-session"},Ls={class:"tips"},qs={key:1,class:"mt-2 text-center"},As=zt({__name:"index",setup(Is){const z=m(null),J=m(!1),ge=pe(()=>{if(!z.value)return"";const t=z.value;return t.enabled?`会话存档 SDK 不可用:${t.error||"未知错误"}`:"「会话内容存档」未启用,实时消息不可用。请在后端 pay.php 中开启 msgaudit_enabled 并配置 SDK 动态库与 RSA 私钥。"});async function ye(){try{z.value=await wt()}catch{}}async function he(){J.value=!0;try{await bt(5,!0),C.msgSuccess("已触发一次拉取,稍后刷新可见"),await S(!0),n.value&&await X()}catch(t){C.msgError((t==null?void 0:t.msg)||(t==null?void 0:t.message)||"拉取失败")}finally{J.value=!1}}const O=m([]);async function ke(){try{const t=await xt();O.value=Array.isArray(t)?t:(t==null?void 0:t.lists)||[]}catch{O.value=[]}}const E=m({staff_userid:"",keyword:"",only_unread:0}),W=m(!1);Et(W,t=>{E.value.only_unread=t?1:0});const{pager:g,getLists:G}=gt({fetchFun:ht,params:E.value,size:30});function S(t=!1){return t||(g.page=1),G()}async function we(){const t=[...g.lists||[]];g.page+=1;try{await G();const e=g.lists||[],r=new Set(t.map(v=>v.id)),c=[...t,...e.filter(v=>!r.has(v.id))];g.lists=c}catch{}}const n=m(null),h=m([]),H=m(!1),V=m(!1),$=m(!1),P=m(0),N=m(0),k=m(null),be=pe(()=>!!n.value&&n.value.session_type!==2);async function xe(t){var e;if(((e=n.value)==null?void 0:e.id)!==t.id){if(n.value=t,h.value=[],P.value=0,N.value=0,$.value=!1,await X(),await re(),t.unread_staff>0)try{await St(t.id),t.unread_staff=0}catch{}U.value="profile"}}async function X(){if(n.value){H.value=!0;try{const t=await ae({session_id:n.value.id,page_no:1,page_size:30}),e=(t==null?void 0:t.lists)||[];h.value=e,e.length&&(P.value=e[0].send_time,N.value=e[e.length-1].send_time),$.value=e.length>=30,await ne(),oe()}catch(t){C.msgError((t==null?void 0:t.msg)||(t==null?void 0:t.message)||"加载消息失败")}finally{H.value=!1}}}async function ie(){var e;if(!n.value||V.value)return;V.value=!0;const t=((e=k.value)==null?void 0:e.scrollHeight)||0;try{const r=await ae({session_id:n.value.id,page_no:1,page_size:30,before_time:P.value}),c=(r==null?void 0:r.lists)||[];c.length&&(P.value=c[0].send_time,h.value=[...c,...h.value]),$.value=c.length>=30,await ne(),k.value&&(k.value.scrollTop=k.value.scrollHeight-t)}finally{V.value=!1}}async function Se(){if(n.value)try{const t=await ae({session_id:n.value.id,page_no:1,page_size:50,after_time:N.value}),e=(t==null?void 0:t.lists)||[];if(!e.length)return;const r=new Set(h.value.map(T=>T.id)),c=e.filter(T=>!r.has(T.id));if(!c.length)return;h.value=[...h.value,...c],N.value=c[c.length-1].send_time;const v=k.value;(v?v.scrollHeight-v.scrollTop-v.clientHeight<120:!0)&&(await ne(),oe())}catch{}}function Te(){const t=k.value;t&&t.scrollTop<40&&$.value&&!V.value&&ie()}function oe(){k.value&&(k.value.scrollTop=k.value.scrollHeight)}async function Me(t){if(n.value)try{await Tt({sender_userid:n.value.staff_userid,external_userids:[n.value.external_userid],msg_payload:t,chat_type:"single"}),C.msgSuccess("已创建群发任务,员工手机确认后送达客户"),await re(),U.value="tasks"}catch(e){C.msgError((e==null?void 0:e.msg)||(e==null?void 0:e.message)||"发送失败")}}const U=m("profile"),K=m([]),Y=m(!1);async function re(){if(n.value){Y.value=!0;try{const t=await Mt({sender_userid:n.value.staff_userid,page_no:1,page_size:50}),e=(t==null?void 0:t.lists)||[];K.value=e.filter(r=>(r.external_userids||[]).includes(n.value.external_userid))}finally{Y.value=!1}}}function ze(t){return{0:"待提交",1:"已提交",2:"已送达",3:"失败"}[t]??`状态${t}`}function Ee(t){return{0:"info",1:"primary",2:"success",3:"danger"}[t]??"info"}function Ce(t){return{image:"图片",video:"视频",file:"文件",link:"链接",miniprogram:"小程序"}[t]||t}const j=m(!1),D=m(!1),ue=m(0),w=m(null);async function Ve(t){ue.value=t.id,w.value={detail_list:[],next_cursor:""},j.value=!0,D.value=!0;try{const e=await ve(t.id,"");w.value={detail_list:(e==null?void 0:e.detail_list)||[],next_cursor:(e==null?void 0:e.next_cursor)||"",task:e==null?void 0:e.task}}catch(e){C.msgError((e==null?void 0:e.msg)||(e==null?void 0:e.message)||"加载失败")}finally{D.value=!1}}async function $e(){var t;if((t=w.value)!=null&&t.next_cursor){D.value=!0;try{const e=await ve(ue.value,w.value.next_cursor);w.value={detail_list:[...w.value.detail_list,...(e==null?void 0:e.detail_list)||[]],next_cursor:(e==null?void 0:e.next_cursor)||"",task:e==null?void 0:e.task}}finally{D.value=!1}}}function De(t){switch(t){case 0:return"未发送";case 1:return"已送达";case 2:return"被拒收";case 3:return"已送达(未读)";default:return`状态${t}`}}function Le(t){return t===1?"success":t===2?"warning":t===3?"primary":"info"}function L(t){var e;return(e=t.customer)!=null&&e.name?t.customer.name:t.session_type===2?`群聊 ${t.roomid.slice(-6)}`:t.external_userid||"未命名客户"}function qe(t){const e=t.last_msg_summary||"",r=t.last_msg_type;return e||(r==="image"?"[图片]":r==="video"?"[视频]":r==="voice"?"[语音]":r==="file"?"[文件]":r==="link"?"[链接]":r==="weapp"?"[小程序]":r==="chatrecord"?"[聊天记录]":r?`[${r}]`:"暂无消息")}function Z(t){return t?vt(t*1e3,"yyyy-mm-dd hh:MM"):"-"}function Ae(t){if(!t)return"";const r=Math.floor(Date.now()/1e3)-t;if(r<60)return`${r}秒前`;if(r<3600)return`${Math.floor(r/60)}分前`;if(r<86400)return`${Math.floor(r/3600)}小时前`;const c=new Date(t*1e3);return`${c.getMonth()+1}-${c.getDate()}`}let ee=null,te=null;return Ct(async()=>{await Promise.all([ye(),ke()]),await S(),ee=window.setInterval(()=>{G({silent:!0}).catch(()=>{})},15e3),te=window.setInterval(()=>{Se()},8e3)}),Vt(()=>{ee&&window.clearInterval(ee),te&&window.clearInterval(te)}),(t,e)=>{var ce,me;const r=Je,c=We,v=Oe,R=Ge,T=Ye,Ie=Xe,Be=je,He=Ze,Pe=et,F=st,Ne=at,q=lt,de=nt,Ue=it,Ke=ot,Q=ut,Re=rt,Fe=dt,se=tt;return o(),u("div",Dt,[z.value&&!z.value.available?(o(),x(r,{key:0,title:ge.value,type:"warning",closable:!1,"show-icon":"",class:"archive-warning"},null,8,["title"])):_("",!0),a("div",Lt,[a("section",qt,[a("header",At,[e[11]||(e[11]=a("div",{class:"col-title"},"会话",-1)),a("div",It,[l(R,{content:"刷新"},{default:i(()=>[l(v,{size:"small",link:"",loading:y(g).loading,onClick:e[0]||(e[0]=s=>S(!0))},{default:i(()=>[l(c,null,{default:i(()=>[l(y(fe))]),_:1})]),_:1},8,["loading"])]),_:1}),l(R,{content:"手动拉一次存档"},{default:i(()=>{var s;return[l(v,{size:"small",link:"",disabled:!((s=z.value)!=null&&s.available),loading:J.value,onClick:he},{default:i(()=>[l(c,null,{default:i(()=>[l(y(mt))]),_:1})]),_:1},8,["disabled","loading"])]}),_:1})])]),a("div",Bt,[l(Be,{modelValue:E.value.staff_userid,"onUpdate:modelValue":e[1]||(e[1]=s=>E.value.staff_userid=s),placeholder:"全部员工",clearable:"",filterable:"",size:"default",style:{width:"100%"},onChange:e[2]||(e[2]=s=>S())},{default:i(()=>[(o(!0),u(M,null,B(O.value,s=>(o(),x(Ie,{key:s.userid,label:(s.name||s.userid)+""+s.userid+"",value:s.userid},{default:i(()=>[a("div",Ht,[l(T,{size:20,src:s.avatar},{default:i(()=>[f(d((s.name||"").slice(-2)),1)]),_:2},1032,["src"]),a("span",null,d(s.name),1),a("span",Pt,d(s.userid),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue"]),l(He,{modelValue:E.value.keyword,"onUpdate:modelValue":e[3]||(e[3]=s=>E.value.keyword=s),placeholder:"搜索客户或消息",clearable:"",size:"default",onKeyup:e[4]||(e[4]=ct(s=>S(),["enter"])),onClear:e[5]||(e[5]=s=>S())},{prefix:i(()=>[l(c,null,{default:i(()=>[l(y(_t))]),_:1})]),_:1},8,["modelValue"]),l(Pe,{modelValue:W.value,"onUpdate:modelValue":e[6]||(e[6]=s=>W.value=s),onChange:e[7]||(e[7]=s=>S())},{default:i(()=>[...e[12]||(e[12]=[f(" 仅未读 ",-1)])]),_:1},8,["modelValue"])]),le((o(),u("div",Nt,[!y(g).lists.length&&!y(g).loading?(o(),u("div",Ut,[l(F,{description:"暂无会话","image-size":80})])):_("",!0),(o(!0),u(M,null,B(y(g).lists,s=>{var p;return o(),u("div",{key:s.id,class:$t(["session-item",{active:((p=n.value)==null?void 0:p.id)===s.id}]),onClick:b=>xe(s)},[l(Ne,{value:s.unread_staff,hidden:!s.unread_staff,max:99},{default:i(()=>{var b;return[l(T,{size:42,src:((b=s.customer)==null?void 0:b.avatar)||""},{default:i(()=>[f(d(L(s).slice(-2)),1)]),_:2},1032,["src"])]}),_:2},1032,["value","hidden"]),a("div",Rt,[a("div",Ft,[a("span",Qt,d(L(s)),1),a("span",Jt,d(Ae(s.last_msg_time)),1)]),a("div",Ot,[a("span",Wt,d(qe(s)),1),s.session_type===2?(o(),x(q,{key:0,size:"small",type:"info",class:"session-tag"},{default:i(()=>[...e[13]||(e[13]=[f(" 群 ",-1)])]),_:1})):_("",!0)]),s.staff?(o(),u("div",Gt," 员工: "+d(s.staff.name||s.staff_userid),1)):_("",!0)])],10,Kt)}),128)),y(g).lists.length<y(g).count?(o(),u("div",Xt,[l(v,{link:"",type:"primary",onClick:we},{default:i(()=>[...e[14]||(e[14]=[f(" 加载更多 ",-1)])]),_:1})])):_("",!0)])),[[se,y(g).loading]])]),a("section",Yt,[n.value?(o(),u(M,{key:1},[a("header",Zt,[a("div",es,[a("div",ts,d(L(n.value)),1),a("div",ss,[(ce=n.value.customer)!=null&&ce.corp_name?(o(),u(M,{key:0},[f(d(n.value.customer.corp_name)+" · ",1)],64)):_("",!0),f(" 代发员工: "+d(((me=n.value.staff)==null?void 0:me.name)||n.value.staff_userid)+" ",1),n.value.session_type===2?(o(),x(q,{key:1,size:"small",type:"info",class:"ml-1"},{default:i(()=>[...e[15]||(e[15]=[f(" 群聊 ",-1)])]),_:1})):_("",!0)])]),a("div",as,[l(R,{content:"刷新消息"},{default:i(()=>[l(v,{link:"",size:"small",loading:H.value,onClick:e[8]||(e[8]=s=>X())},{default:i(()=>[l(c,null,{default:i(()=>[l(y(fe))]),_:1})]),_:1},8,["loading"])]),_:1})])]),a("div",{ref_key:"messageListRef",ref:k,class:"message-list",onScroll:Te},[$.value?(o(),u("div",ls,[l(v,{link:"",type:"primary",loading:V.value,onClick:ie},{default:i(()=>[...e[16]||(e[16]=[f(" 加载更早的消息 ",-1)])]),_:1},8,["loading"])])):h.value.length?(o(),u("div",ns," —— 没有更早的消息了 —— ")):_("",!0),!h.value.length&&!H.value?(o(),u("div",is,[l(F,{description:"暂无消息","image-size":80})])):_("",!0),(o(!0),u(M,null,B(h.value,s=>(o(),x(yt,{key:s.id,message:s},null,8,["message"]))),128))],544),l(kt,{"can-send-message":be.value,onSend:Me},null,8,["can-send-message"])],64)):(o(),u("div",jt,[l(F,{description:"选择左侧会话查看消息"},{image:i(()=>[l(c,{size:60,color:"#ccc"},{default:i(()=>[l(y(ft))]),_:1})]),_:1})]))]),a("section",os,[n.value?(o(),x(Ue,{key:0,modelValue:U.value,"onUpdate:modelValue":e[9]||(e[9]=s=>U.value=s),class:"profile-tabs"},{default:i(()=>[l(de,{label:"客户资料",name:"profile"},{default:i(()=>{var s,p,b,A,I;return[a("div",rs,[l(T,{size:72,src:((s=n.value.customer)==null?void 0:s.avatar)||""},{default:i(()=>[f(d(L(n.value).slice(-2)),1)]),_:1},8,["src"]),a("div",us,d(L(n.value)),1),a("div",ds,[a("div",cs,[e[17]||(e[17]=a("span",{class:"label"},"客户类型",-1)),a("span",ms,d(((p=n.value.customer)==null?void 0:p.type)===2?"@微信":"@企业微信"),1)]),a("div",_s,[e[18]||(e[18]=a("span",{class:"label"},"外部 ID",-1)),a("span",{class:"value ellipsis",title:n.value.external_userid},d(n.value.external_userid||"-"),9,fs)]),(b=n.value.customer)!=null&&b.corp_name?(o(),u("div",vs,[e[19]||(e[19]=a("span",{class:"label"},"所属企业",-1)),a("span",ps,d(n.value.customer.corp_name),1)])):_("",!0),(A=n.value.customer)!=null&&A.gender?(o(),u("div",gs,[e[20]||(e[20]=a("span",{class:"label"},"性别",-1)),a("span",ys,d(n.value.customer.gender===1?"男":n.value.customer.gender===2?"女":"未知"),1)])):_("",!0),a("div",hs,[e[21]||(e[21]=a("span",{class:"label"},"代发员工",-1)),a("span",ks,d(((I=n.value.staff)==null?void 0:I.name)||n.value.staff_userid),1)]),a("div",ws,[e[22]||(e[22]=a("span",{class:"label"},"最近消息",-1)),a("span",bs,d(Z(n.value.last_msg_time)),1)])])])]}),_:1}),l(de,{label:`发送任务(${K.value.length})`,name:"tasks"},{default:i(()=>[le((o(),u("div",xs,[K.value.length?_("",!0):(o(),u("div",Ss,[l(F,{description:"暂无任务","image-size":80})])),(o(!0),u(M,null,B(K.value,s=>{var p,b,A,I;return o(),u("div",{key:s.id,class:"task-item"},[a("div",Ts,[l(q,{type:Ee(s.status),size:"small"},{default:i(()=>[f(d(ze(s.status)),1)]),_:2},1032,["type"]),a("span",Ms,d(Z(s.create_time)),1)]),a("div",zs,[(b=(p=s.msg_payload)==null?void 0:p.text)!=null&&b.content?(o(),u("div",Es,d(s.msg_payload.text.content),1)):_("",!0),(I=(A=s.msg_payload)==null?void 0:A.attachments)!=null&&I.length?(o(),u("div",Cs,[e[23]||(e[23]=f(" 附件: ",-1)),(o(!0),u(M,null,B(s.msg_payload.attachments,(_e,Qe)=>(o(),x(q,{key:Qe,size:"small",type:"info",class:"mr-1"},{default:i(()=>[f(d(Ce(_e.msgtype)),1)]),_:2},1024))),128))])):_("",!0),s.error?(o(),u("div",Vs,d(s.error),1)):_("",!0)]),a("div",$s,[l(v,{size:"small",link:"",type:"primary",onClick:_e=>Ve(s)},{default:i(()=>[...e[24]||(e[24]=[f(" 送达详情 ",-1)])]),_:1},8,["onClick"])])])}),128))])),[[se,Y.value]])]),_:1},8,["label"])]),_:1},8,["modelValue"])):(o(),u("div",Ds,[a("div",Ls,[e[25]||(e[25]=a("h4",null,"企业微信 IM",-1)),e[26]||(e[26]=a("p",null,"选择一个会话查看客户资料与群发任务",-1)),l(Ke),e[27]||(e[27]=a("p",{class:"text-sm"}," · 实时消息依赖「会话内容存档」,由后台计划任务每 30 秒拉取一次。 ",-1)),e[28]||(e[28]=a("p",{class:"text-sm"}," · 发送使用「企业群发」能力,员工手机端确认后送达客户。 ",-1))])]))])]),l(Fe,{modelValue:j.value,"onUpdate:modelValue":e[10]||(e[10]=s=>j.value=s),title:"群发送达详情",width:"640px",top:"8vh"},{default:i(()=>{var s;return[w.value?le((o(),x(Re,{key:0,data:w.value.detail_list,border:"",size:"small","max-height":"420"},{default:i(()=>[l(Q,{label:"外部客户",prop:"external_userid","min-width":"200"}),l(Q,{label:"员工",prop:"userid","min-width":"120"}),l(Q,{label:"状态",width:"120"},{default:i(({row:p})=>[l(q,{type:Le(p.status),size:"small"},{default:i(()=>[f(d(De(p.status)),1)]),_:2},1032,["type"])]),_:1}),l(Q,{label:"送达时间",width:"160"},{default:i(({row:p})=>[f(d(p.send_time?Z(p.send_time):"-"),1)]),_:1})]),_:1},8,["data"])),[[se,D.value]]):_("",!0),(s=w.value)!=null&&s.next_cursor?(o(),u("div",qs,[l(v,{link:"",type:"primary",onClick:$e},{default:i(()=>[...e[29]||(e[29]=[f(" 加载更多 ",-1)])]),_:1})])):_("",!0)]}),_:1},8,["modelValue"])])}}}),Sa=pt(As,[["__scopeId","data-v-6e4c9382"]]);export{Sa as default};