PageSourceSearch

https://wei.city/_nuxt/DMqAPj39.js

js wei.city collected 2026-09-24 14:38:37 UTC 71,579 bytes, 2 lines download raw bytes

1import{_ as qs,A as Js,D as Qs,H as Ys,a as Xs,b as Zs,c as Gs,d as ea,e as ta,f as sa,J as aa,L as oa,M as na,N as ia,S as ra,T as la,g as ua,V as da}from"./DMfTsiWl.js";import{aR as Ee,ea as Qe,eR as Xt,cF as St,cL as r,aB as l,dD as p,ay as g,dP as a,cv as x,aw as s,f as z,d4 as le,ax as Be,eZ as J,T as ca,at as R,c$ as b,a1 as Oe,cw as ze,d5 as Kt,a0 as pa,bs as qt,bt as va,ew as fa,dW as Zt,cH as Gt,cu as te,dn as es,eX as Ne,eO as Ke,cb as It,aI as qe,eY as xe,aJ as Ct,eW as Je,eN as ma,cZ as kt,et as ha}from"./BQpWByWK.js";import{u as ga}from"./4ocfwtbW.js";import{u as ya}from"./COvWvA50.js";import"./w3XBMUx2.js";import"./BvCVExpy.js";import"./BDYPYTBS.js";import"./C1sFeeWI.js";import"./C3I7gg_Z.js";import"./CXrjN5r8.js";import"./DxCNposV.js";import"./KNeBdjIC.js";import"./DXbo10_u.js";import"./ZnevxfK4.js";import"./C1s6BCIR.js";import"./C1VjYhya.js";import"./BhfifKLc.js";import"./DQCo6u8G.js";import"./CbapU1-B.js";import"./KI3naYzN.js";import"./DWEZbR2m.js";const _a=Object.freeze(Object.defineProperty({__proto__:null,AbortError:Js,DefaultHttpClient:Qs,HttpClient:Ys,HttpError:Xs,HttpResponse:Zs,get HttpTransportType(){return Gs},HubConnection:ea,HubConnectionBuilder:ta,get HubConnectionState(){return sa},JsonHubProtocol:aa,get LogLevel(){return oa},get MessageType(){return na},NullLogger:ia,Subject:ra,TimeoutError:la,get TransferFormat(){return ua},VERSION:da},Symbol.toStringTag,{value:"Module"})),ba={class:"support-v2-message-body"},wa={key:0,class:"support-v2-message-body__text"},ka=["href"],Ia={class:"support-v2-message-body__url-icon"},Sa=["src"],Ca={key:1,class:"fa-solid fa-link"},$a={class:"support-v2-message-body__url-meta"},Ta={key:0},Ma={key:2,class:"support-v2-message-body__attachments"},Va=["onClick"],Pa=["src","alt"],La={class:"support-v2-message-body__file-meta"},Aa=["href"],Ua={class:"support-v2-message-body__file-meta"},Da=["title"],Ra=["src","alt"],Na={key:0},xa=Ee({__name:"SupportV2MessageBody",props:{content:{},attachments:{},linkPreview:{}},setup(i){const c=i,{t:m}=Qe({useScope:"global"}),v=new Set(["stockwebsiteblob.blob.core.windows.net","stockwewebfiles.blob.core.windows.net","weicity.blob.core.windows.net","yingfei.blob.core.windows.net","r2.wei.city","lh3.googleusercontent.com"]),f=/\.(?:png|jpe?g|gif|webp|avif|bmp|ico)$/i;function I(_,A=!1){const M=(_||"").trim();if(!M||M.includes("\\")||/[\u0000-\u001f\u007f]/.test(M))return"";const q=M.split(/[?#]/,1)[0]||"";if(M.startsWith("/")&&!M.startsWith("//"))return!A||f.test(q)?M:"";try{const F=new URL(M);return F.protocol==="https:"&&!F.username&&!F.password&&!F.port&&v.has(F.hostname.toLowerCase())&&(!A||f.test(F.pathname))?F.href:""}catch{return""}}function y(_){try{const A=new URL((_||"").trim());return A.protocol==="http:"||A.protocol==="https:"?A.href:""}catch{return""}}const T=R(()=>(c.attachments||[]).flatMap(_=>{const A=I(_.url,_.kind==="image");return A?[{..._,url:A}]:[]})),$=R(()=>{const _=y(c.linkPreview?.url);if(_)try{const q=new URL(_);return{url:_,host:q.hostname.replace(/^www\./i,""),imageUrl:I(c.linkPreview?.imageUrl,!0),title:c.linkPreview?.title||_,description:c.linkPreview?.description||""}}catch{return null}const A=(c.content||"").match(/https?:\/\/[^\s<>"']+/i);if(!A)return null;const M=y(A[0].replace(/[),.;!?]+$/g,""));if(!M)return null;try{const q=new URL(M);return{url:M,host:q.hostname.replace(/^www\./i,""),imageUrl:"",title:M,description:""}}catch{return null}}),S=b(null);function D(_){S.value=_}function H(){S.value=null}function ne(_){(_.key==="Escape"||_.key==="Esc")&&(_.stopPropagation(),H())}Xt(S,_=>{_?window.addEventListener("keydown",ne):window.removeEventListener("keydown",ne)}),St(()=>{window.removeEventListener("keydown",ne)});function K(_){return!Number.isFinite(_)||_<=0?"":_<1024?`${_} B`:_<1024*1024?`${(_/1024).toFixed(1)} KB`:`${(_/1024/1024).toFixed(1)} MB`}return(_,A)=>(r(),l("div",ba,[i.content?(r(),l("div",wa,p(i.content),1)):g("",!0),a($)?(r(),l("a",{key:1,class:x(["support-v2-message-body__url-preview",{"support-v2-message-body__url-preview--image":!!a($).imageUrl}]),href:a($).url,target:"_blank",rel:"noopener noreferrer"},[s("span",Ia,[a($).imageUrl?(r(),l("img",{key:0,src:a($).imageUrl,alt:"",loading:"lazy"},null,8,Sa)):(r(),l("i",Ca))]),s("span",$a,[s("strong",null,p(a($).host),1),s("small",null,p(a($).title),1),a($).description?(r(),l("span",Ta,p(a($).description),1)):g("",!0)])],10,ka)):g("",!0),a(T).length?(r(),l("div",Ma,[(r(!0),l(z,null,le(a(T),M=>(r(),l(z,{key:`${M.url}-${M.name}`},[M.kind==="image"?(r(),l("button",{key:0,class:"support-v2-message-body__attachment is-image",type:"button",onClick:q=>D(M)},[s("img",{src:M.url,alt:M.name,loading:"lazy"},null,8,Pa),s("span",La,[s("strong",null,p(M.name||a(m)("support.image")),1),s("small",null,p(K(M.size)||M.contentType||a(m)("support.image")),1)])],8,Va)):(r(),l("a",{key:1,class:"support-v2-message-body__attachment",href:M.url,target:"_blank",rel:"noopener noreferrer"},[A[1]||(A[1]=s("span",{class:"support-v2-message-body__file-icon"},[s("i",{class:"fa-regular fa-file-lines"})],-1)),s("span",Ua,[s("strong",null,p(M.name||a(m)("support.attachment_message")),1),s("small",null,p(K(M.size)||M.contentType||a(m)("support.file")),1)])],8,Aa))],64))),128))])):g("",!0),(r(),Be(ca,{to:"body"},[a(S)?(r(),l("div",{key:0,class:"support-v2-message-body__preview",role:"dialog","aria-modal":"true",onClick:H},[s("button",{class:"support-v2-message-body__preview-close",type:"button",title:a(m)("common.close"),onClick:J(H,["stop"])},[...A[2]||(A[2]=[s("i",{class:"fa-solid fa-xmark"},null,-1)])],8,Da),s("figure",{class:"support-v2-message-body__preview-frame",onClick:A[0]||(A[0]=J(()=>{},["stop"]))},[s("img",{src:a(S).url,alt:a(S).name},null,8,Ra),a(S).name?(r(),l("figcaption",Na,p(a(S).name),1)):g("",!0)])])):g("",!0)]))]))}}),Ba=Oe(xa,[["__scopeId","data-v-7470d0d6"]]),Ea={key:0,class:"support-v2-thread__day-divider"},Oa=["data-support-v2-message-id"],Ha=["src","alt"],Fa={key:2,class:"support-v2-thread__avatar-placeholder"},Wa={class:"support-v2-thread__bubble-wrap"},ja={key:0,class:"support-v2-thread__meta"},za={class:"support-v2-thread__bubble"},Ka={key:0,class:"support-v2-thread__reply"},qa={key:1,class:"support-v2-thread__state"},Ja={key:1,class:"support-v2-thread__actions"},Qa=Ee({__name:"SupportV2MessageThread",props:{messages:{},mineSenderType:{},highlightedMessageId:{default:null}},setup(i){const{t:c}=Qe({useScope:"global"}),m=i,v=["#218b80","#3569a8","#875f9a","#9a7040"],f=b(null),I=R(()=>m.messages.filter(w=>!w.isDeleted&&!w.isRecalled));function y(w){return w.senderType===m.mineSenderType}function T(w){return w.senderName||""}function $(w){return w?w.includes("/images/default-avatar")||w.includes("/lib/Admin/assets/img/user/user.jpg"):!0}function S(w){return w.senderAvatarUrl||""}function D(w){const V=S(w);return!!(V&&!w.isLetterAvatar&&!$(V))}function H(w){return T(w).slice(0,1).toUpperCase()}function ne(w){return(w.senderType===1?w.visitorId||w.senderName||"visitor":w.senderId||w.senderName||"staff").toLowerCase()}function K(w){let V=0;for(let L=0;L<w.length;L+=1)V=(V<<5)-V+w.charCodeAt(L);return{backgroundColor:v[Math.abs(V)%v.length]}}function _(w,V){const L=I.value[V-1];if(!L||L.senderType!==w.senderType||L.senderId!==w.senderId)return!1;const k=new Date(L.createdAtUtc),j=new Date(w.createdAtUtc);return k.toDateString()===j.toDateString()&&j.getTime()-k.getTime()<=300*1e3}function A(w,V){const L=I.value[V-1];return!L||new Date(L.createdAtUtc).toDateString()!==new Date(w.createdAtUtc).toDateString()}function M(w){const V=new Date(w);return Number.isNaN(V.getTime())?"":V.toLocaleDateString([],{year:"numeric",month:"2-digit",day:"2-digit"})}function q(w){const V=new Date(w);
1return Number.isNaN(V.getTime())?"":V.toLocaleString([],{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function F(w){return w.isRecalled?c("support.recalled_message"):""}function ue(w){const V=w.currentTarget;if(!V)return;const L=V.querySelectorAll("[data-support-v2-message-id]");let k=null;for(const j of L){const se=j.getBoundingClientRect();if(w.clientY>=se.top&&w.clientY<=se.bottom){const ie=j.dataset.supportV2MessageId;k=ie?Number(ie):null;break}}f.value=k}function Q(){f.value=null}return(w,V)=>{const L=Ba;return r(),l("div",{class:"support-v2-thread",onPointermove:ue,onPointerleave:Q},[(r(!0),l(z,null,le(a(I),(k,j)=>(r(),l(z,{key:k.messageId},[A(k,j)?(r(),l("div",Ea,[s("span",null,p(M(k.createdAtUtc)),1)])):g("",!0),s("article",{class:x(["support-v2-thread__message",{"support-v2-thread__message--mine":y(k),"support-v2-thread__message--grouped":_(k,j),"support-v2-thread__message--actions-visible":a(f)===k.messageId,"support-v2-thread__message--highlighted":m.highlightedMessageId===k.messageId}]),"data-support-v2-message-id":k.messageId},[!_(k,j)&&D(k)?(r(),l("img",{key:0,class:"support-v2-thread__avatar",src:S(k),alt:T(k)},null,8,Ha)):_(k,j)?(r(),l("span",Fa)):(r(),l("span",{key:1,class:"support-v2-thread__avatar",style:ze(K(ne(k)))},p(H(k)),5)),s("div",Wa,[_(k,j)?g("",!0):(r(),l("div",ja,[s("span",null,p(T(k)),1),s("span",null,p(q(k.createdAtUtc)),1)])),s("div",za,[k.replyTo&&!F(k)?(r(),l("div",Ka,[s("strong",null,p(k.replyTo.senderName),1),s("span",null,p(k.replyTo.content||a(c)("support.attachment_message")),1)])):g("",!0),F(k)?(r(),l("div",qa,[V[0]||(V[0]=s("i",{class:"fa-regular fa-circle-xmark"},null,-1)),s("span",null,p(F(k)),1)])):(r(),Be(L,{key:2,content:k.content,attachments:k.attachments,"link-preview":k.linkPreview},null,8,["content","attachments","link-preview"]))]),w.$slots.actions&&!k.deliveryStatus?(r(),l("div",Ja,[Kt(w.$slots,"actions",{message:k,isMine:y(k)},void 0,!0)])):g("",!0),Kt(w.$slots,"after",{message:k},void 0,!0)])],10,Oa)],64))),128))],32)}}}),ts=Oe(Qa,[["__scopeId","data-v-855078b4"]]),ct="weicity.support.v2.visitorId",$t="weicity.support.v2.visitorToken",pt="weicity.support.v2.visitorOwner";function Ya(){return window.localStorage.getItem($t)||void 0}const Xa=1024*1024,Za=2048,Ga=.78,ss=()=>fa().public.apiBase||void 0;function eo(i){const c=ss();return c?`${c.replace(/\/+$/g,"")}/${i.replace(/^\/+/g,"")}`:i}function E(i,c={}){return $fetch(i,{baseURL:ss(),credentials:"include",headers:va(),...c})}function Jt(i){if(!i||typeof i!="object")return!1;const c=i.statusCode,m="data"in i?i.data:void 0;return(m&&typeof m=="object"&&"needLogin"in m?!!m.needLogin:!1)||c===401}function to(i){return i?(i instanceof Error?i.message:typeof i=="object"&&i&&"message"in i?String(i.message??""):String(i)).toLowerCase().includes("forbidden"):!1}function as(){window.localStorage.removeItem(ct),window.localStorage.removeItem($t),window.localStorage.removeItem(pt)}function so(i,c){const m=(i||"").trim(),v=(c||"").trim();return!!m&&!!v&&m!==v}function ao(i){so(window.localStorage.getItem(pt),i)&&as()}function oo(i){const c=(i||"").trim();c?window.localStorage.setItem(pt,c):window.localStorage.removeItem(pt)}function Z(i,c){if(i&&typeof i=="object"){const m="data"in i?i.data:void 0;if(m&&typeof m=="object"&&"error"in m){const v=m.error;if(typeof v=="string"&&v.trim())return v}}return c}function Ye(i){const c=new URLSearchParams;for(const[v,f]of Object.entries(i))f!==void 0&&f!==""&&c.set(v,String(f));const m=c.toString();return m?`?${m}`:""}function no(){const i=ga("support-v2-session",()=>E("/api/app/support2/session"),{server:!1});return{...i,isLoading:R(()=>i.status.value==="pending")}}async function io(i){{const m=window.localStorage.getItem(ct);if(m)return m}const c=await E("/api/app/support2/visitor",{method:"POST",body:{displayName:""}});return window.localStorage.setItem(ct,c.visitorId),c.visitorToken&&window.localStorage.setItem($t,c.visitorToken),c.visitorId}async function ro(i){const c=await E(`/api/app/support2/visitor/${i}/bind-user`,{method:"POST"});return c.visitorId&&window.localStorage.setItem(ct,c.visitorId),c}function lo(i=50){return E(`/api/app/support2/visitors${Ye({limit:i})}`)}async function Qt(i){try{return await E(`/api/app/support2/visitor/${encodeURIComponent(i)}`)}catch{return null}}function uo(i,c=50){return E(`/api/app/support2/visitors/search${Ye({query:i,limit:c}
1)}`)}function co(i,c=20){return E(`/api/app/support2/users/search${Ye({query:i,limit:c})}`)}function po(i){return E("/api/app/support2/users/conversation",{method:"POST",body:{userId:i}})}function vt(i,c,m=50){return E(`/api/app/support2/visitor/${i}/messages${Ye({before:c,limit:m})}`)}async function os(i){try{return await E(`/api/app/support2/visitor/${i}/messages/pinned`)}catch{return[]}}function ns(i,c,m=[],v){return E("/api/app/support2/message",{method:"POST",body:{visitorId:i,content:c,attachments:m,replyToMessageId:v}})}function vo(i){return E(`/api/app/support2/visitor/${i}/read`,{method:"POST"})}function fo(i){return E(`/api/app/support2/visitor/${i}/unread`,{method:"POST"})}async function mo(i){try{await E(`/api/app/support2/visitor/${i}/view`,{method:"POST"})}catch{}}function ho(i){return E(`/api/app/support2/visitor/${i}/timeline`)}function go(i){return E(`/api/app/support2/visitor/${i}/pin`,{method:"POST"})}function yo(i){return E(`/api/app/support2/visitor/${i}/pin`,{method:"DELETE"})}function _o(i,c){return E(`/api/app/support2/visitor/${i}/notification`,{method:"POST",body:c})}function bo(i,c){return E(`/api/app/support2/visitor/${i}/messages/${c}/pin`,{method:"POST"})}function wo(i,c){return E(`/api/app/support2/visitor/${i}/messages/${c}/pin`,{method:"DELETE"})}function ko(i,c){return E(`/api/app/support2/visitor/${i}/messages/${c}/delete`,{method:"POST"})}function is(i,c){return E(`/api/app/support2/visitor/${i}/messages/${c}/recall`,{method:"POST"})}function Io(i){return E(`/api/app/support2/visitor/${i}`,{method:"DELETE"})}function rs(){return E("/api/app/support2/welcome")}function So(i={}){return E(`/api/app/support2/admin/deleted-messages${Ye({visitorId:i.visitorId,before:i.before,limit:i.limit??50})}`)}async function ls(i){const c=await Co(i),m=new FormData;m.append("file",c);const v=await E("/api/upload",{method:"POST",body:m});return{url:v.location,name:i.name,contentType:c.type||i.type||"application/octet-stream",size:v.size??c.size,kind:i.type.startsWith("image/")?"image":"file"}}async function Co(i){if(!i.type.startsWith("image/")||i.size<=Xa||i.type==="image/gif"||i.type==="image/svg+xml")return i;try{const c=await createImageBitmap(i),m=Math.min(1,Za/Math.max(c.width,c.height)),v=Math.max(1,Math.round(c.width*m)),f=Math.max(1,Math.round(c.height*m)),I=document.createElement("canvas");I.width=v,I.height=f;const y=I.getContext("2d");if(!y)return c.close(),i;y.drawImage(c,0,0,v,f),c.close();const T=await new Promise($=>{I.toBlob($,"image/jpeg",Ga)});return!T||T.size>=i.size?i:new File([T],i.name,{type:"image/jpeg",lastModified:i.lastModified})}catch{return i}}async function us(i){const c=await pa(()=>Promise.resolve().then(()=>_a),void 0,import.meta.url),m=new c.HubConnectionBuilder().withUrl(eo("/hubs/support2"),{accessTokenFactory:()=>qt()||"",withCredentials:!0}).withAutomaticReconnect().build();i.onMessage&&m.on("ReceiveMessage",i.onMessage),i.onMessageState&&m.on("ReceiveMessageState",i.onMessageState),i.onUnreadCleared&&m.on("ReceiveUnreadCleared",i.onUnreadCleared);async function v(){const f=qt()||"";if(i.role==="staff"){await m.invoke("JoinAsStaff",f);return}if(!i.visitorId)throw new Error("visitorId is required");await m.invoke("JoinAsVisitor",i.visitorId,f,Ya())}return m.onreconnecting(()=>i.onStateChange?.("reconnecting")),m.onreconnected(async()=>{try{await v(),i.onStateChange?.("connected")}catch{i.onStateChange?.("disconnected")}}),m.onclose(()=>i.onStateChange?.("disconnected")),await m.start(),await v(),i.onStateChange?.("connected"),m}function ye(i,c=[]){const v=(i||"").trim().replace(/\s+/g," "),f=c.filter(T=>T.kind==="image").length,I=c.length-f,y=$o(f,I);return v&&y?`${v.slice(0,64)} · ${y}`:v?v.slice(0,80):c.length===0?"":y}function $o(i,c){const m=i+c;return m===0?"":i>0&&c>0?`${m}个附件`:i>0?i>1?`${i}张图片`:"图片":c>1?`${c}个文件`:"文件"}const To={class:"support-v2-dashboard__sidebar"},Mo={class:"support-v2-dashboard__sidebar-header"},Vo={class:"support-v2-dashboard__sidebar-subtitle"},Po={class:"support-v2-dashboard__header-actions"},Lo=["disabled"],Ao={class:"support-v2-dashboard__search"},Uo={key:0,class:"support-v2-dashboard__search-hint"},Do={key:0,class:"support-v2-dashboard__empty"},Ro=["onClick","onContextmenu"],No={class:"support-v2-dashboard__visitor-avatar-wrap"},xo={class:"support-v2-dashboard__visitor-main"},Bo={class:"support-v2-dashboard__visitor-top"},Eo={key:0,class:"support-v2-dashboard__visitor-identities","aria-label":"用户身份标识"},Oo=["title"],Ho={class:"support-v2-dashboard__visitor-side"},Fo={class:"support-v2-dashboard__visitor-time-row"},Wo={key:0,class:"support-v2-dashboard__visitor-pin",title:"置顶消息"},jo={key:0,class:"support-v2-dashboard__badge"},zo=["disabled"],Ko=["disabled"],qo=["disabled"],Jo=["disabled"],Qo=["disabled"],Yo={key:0,class:"support-v2-dashboard__visitor-context-note"}
1,Xo={key:1,class:"support-v2-dashboard__visitor-context-note"},Zo={key:2,class:"support-v2-dashboard__user-section"},Go=["disabled","onClick"],en={class:"support-v2-dashboard__visitor-avatar-wrap"},tn={class:"support-v2-dashboard__user-main"},sn={class:"support-v2-dashboard__user-email"},an={class:"support-v2-dashboard__user-action"},on={key:0,class:"fa-solid fa-circle-notch fa-spin"},nn={class:"support-v2-dashboard__main"},rn={class:"support-v2-dashboard__chat-header"},ln={class:"support-v2-dashboard__chat-title"},un={key:0,class:"support-v2-dashboard__chat-subtitle"},dn={key:1,class:"support-v2-dashboard__contact-line"},cn={key:2,class:"support-v2-dashboard__visitor-meta"},pn={key:1,class:"support-v2-dashboard__visitor-meta-region"},vn={class:"support-v2-dashboard__chat-actions"},fn=["disabled"],mn={key:2,class:"support-v2-dashboard__chat-title"},hn={key:0,class:"support-v2-dashboard__status"},gn={key:1,class:"support-v2-dashboard__empty support-v2-dashboard__empty--large"},yn={key:2,class:"support-v2-dashboard__empty support-v2-dashboard__empty--large"},_n={key:3,class:"support-v2-dashboard__history-loader","aria-live":"polite"},bn={key:4,class:"support-v2-dashboard__pinned-messages"},wn=["onClick","onKeydown"],kn=["onClick"],In=["onClick"],Sn=["title","onClick"],Cn=["onClick"],$n=["onClick"],Tn=["disabled","onClick"],Mn={key:0,class:"support-v2-dashboard__replying"},Vn=["disabled"],Pn={key:1,class:"support-v2-dashboard__pending"},Ln=["disabled","onClick"],An=["disabled"],Un={class:"support-v2-dashboard__composer-field"},Dn=["disabled","onKeydown"],Rn=["disabled"],Nn=["disabled"],xn=["value"],Bn=["disabled"],En=["disabled"],On=["disabled"],Hn=["disabled"],Fn=["disabled"],Wn={class:"support-v2-dashboard__history-modal"},jn={class:"support-v2-dashboard__history-head-actions"},zn=["disabled"],Kn={class:"support-v2-dashboard__history-body"},qn={key:0,class:"support-v2-dashboard__history-empty"},Jn={key:1,class:"support-v2-dashboard__history-empty is-error"},Qn={key:2,class:"support-v2-dashboard__history-empty"},Yn={key:3,class:"support-v2-dashboard__history-list"},Xn={class:"support-v2-dashboard__history-item-head"},Zn={class:"support-v2-dashboard__history-actor"},Gn={class:"support-v2-dashboard__history-time"},ei={class:"support-v2-dashboard__history-meta"},ti={key:0},si={key:0,class:"support-v2-dashboard__history-content"},ai={key:1,class:"support-v2-dashboard__history-attachments"},oi=["href"],ni={key:2,class:"support-v2-dashboard__history-content is-empty"},ii={class:"support-v2-dashboard__history-modal"},ri={class:"support-v2-dashboard__history-head-actions"},li=["disabled"],ui={class:"support-v2-dashboard__history-note"},di={class:"support-v2-dashboard__history-body"},ci={key:0,class:"support-v2-dashboard__history-empty"},pi={key:1,class:"support-v2-dashboard__history-empty is-error"},vi={key:2,class:"support-v2-dashboard__history-empty"},fi={key:3,class:"support-v2-dashboard__history-list"},mi={class:"support-v2-dashboard__history-item-head"},hi={class:"support-v2-dashboard__history-badge"},gi={class:"support-v2-dashboard__history-actor"},yi={class:"support-v2-dashboard__history-time"},_i={key:0,class:"support-v2-dashboard__history-content"},ut=50,Yt=120,bi=24,wi=700,ki=700,Ii=Ee({__name:"SupportV2Dashboard",props:{session:{},initialVisitorId:{}},setup(i){const c=i,{shellTabs:m}=Zt(),v=b([]),f=b([]),I=b([]),y=b(""),T=b(""),$=b(null),S=b([]),D=b(""),H=b(null),ne=b([]),K=b(""),_=b(""),A=b(!0),M=b(!1),q=b(!1),F=b(!1),ue=b(!1),Q=b(!1),w=b(!1),V=b(!1),L=b(!1),k=b(!1),j=b(!1),se=b(!1),ie=b(null),de=b("connecting"),Ve=b(""),Pe=b("success"),fe=b(null),Xe=b(null),He=b(null),Ze=b(null),_e=b(null),ce=b(!1),Le=b("list");let he=null;const P=kt({isOpen:!1,visitor:null,title:"",content:"",notificationType:2,isSending:!1});let be=null,pe=null,ge=null,Ie=null,we=null,Ae=0,ft=-1;const Ge=["#218b80","#3569a8","#875f9a","#9a7040"],Se=b(""),ke=b(""),Ce=b(""),O=R(()=>[...v.value,...H.value||[]].find(t=>t.visitorId.toLowerCase()===y.value.toLowerCase())||null),G=R(()=>{const t=_e.value?.visitorId.toLowerCase();return t&&[...v.value,...H.value||[]].find(e=>e.visitorId.toLowerCase()===t)||null}),et=R(()=>({left:`${_e.value?.x||0}px`,top:`${_e.value?.y||0}px`})),mt=R(()=>v.value.reduce((t,e)=>t+Math.max(0,e.unreadCount),0)),ht=R(()=>v.value.filter(t=>t.pinPriority>0).length),tt=R(()=>{switch(de.value){case"connected":return"实时在线";case"reconnecting":return"正在重连";case"disconnected":return"实时断开,已启用轮询";default:return"正在连接"}}),st=R(()=>!!O.value&&!!(T.value.trim()||S.value.length)&&!Q.value&&!k.value),$e=R(()=>{const t=D.value.trim().toLowerCase(),e=v.value;if(!t)return e;const d=e.filter(n=>n.displayName.toLowerCase().includes(t)||(n.email||"").toLowerCase().includes(t)||(n.userId||"").toLowerCase().includes(t)||(n.lastMessagePreview||"").toLowerCase().includes(t));return Ws(d,H.value||[])}),Ue=R(()=>D.value.trim()?w.value?"正在搜索全部访客":H.value?`全局搜索 · ${$e.value.length} 条结果`:"正在筛选最近会话":"");Xt(D,Wt),Gt(async()=>{he=window.matchMedia("(max-width: 860px)"),ce.value=he.matches,he.addEventListener("change",at),document.addEventListener("click",re),document.addEventListener("keydown",Dt),rs().then(t=>{t.contactTelegram&&(Se.value=t.contactTelegram),t.contactWeChat&&(ke.value=t.contactWeChat),t.contactWhatsApp&&(Ce.value=t.contactWhatsApp)}).catch(()=>{}),await Fe();try{be=await us({role:"staff",onMessage:Rs,onMessageState:Bs,onUnreadCleared:xs,onStateChange:Rt}),_t()}catch(t){_.value=Z(t,"实时连接未加入客服组,请重新登录后再试"),Rt("disconnected")}}),St(async()=>{he&&(he.removeEventListener("change",at),he=null),document.removeEventListener("click",re),document.removeEventListener("keydown",Dt),pe&&(clearTimeout(pe),pe=null),ge&&(clearTimeout(ge),ge=null),we&&(clearTimeout(we),we=null),_t(),be&&(await be.stop(),be=null)});async function Fe(t=!1,e=!1){if(q.value)return;const d=!t&&!M.value,n=e||!t&&M.value;d&&(A.value=!0);const h=Date.now();n&&(q.value=!0),_.value="";try{const X=await lo(50),ae=O.value,W=ae&&!X.some(me=>me.visitorId.toLowerCase()===ae.visitorId.toLowerCase());if(v.value=Me(ae&&W?[ae,...X]:X),!y.value){const me=c.initialVisitorId?.trim().toLowerCase();if(me){const oe=v.value.find(Re=>Re.visitorId.toLowerCase()===me);if(oe)await o(oe);else{const Re=await Qt(c.initialVisitorId.trim());Re?await o(Re):v.value.length>0&&!ce.value&&await o(v.value[0])}}else v.value.length>0&&!ce.value&&await o(v.value[0])}}catch(X){_.value=Z(X,"访客列表加载失败")}finally{if(M.value=!0,d&&(A.value=!1),n){const X=wi-(Date.now()-h);X>0&&await new Promise(ae=>setTimeout(ae,X)),q.value=!1}}}function at(t){ce.value=t.matches,t.matches||(Le.value="list")}function Te(){Le.value="list"}async function o(t){re(),v.value.some(e=>e.visitorId.toLowerCase()===t.visitorId.toLowerCase())||(v.value=Me([t,...v.value])),y.value=t.visitorId,ce.value&&(Le.value="chat"),se.value=!1,N(),u(),mo(t.visitorId),await C(t.visitorId,!0),await rt(t.visitorId),await te(De)}async function u(){if(ce.value)return;await te();const t=Ze.value;
1!t||t.disabled||t.focus({preventScroll:!0})}async function N(){await te(),Xe.value?.querySelector(".support-v2-dashboard__visitor.is-active")?.scrollIntoView({block:"nearest"})}async function C(t,e=!1){F.value=!0,_.value="",e&&(f.value=[],I.value=[],j.value=!1);try{const[d]=await Promise.all([vt(t,void 0,ut),U(t)]);f.value=d.map(n=>({...n,visitorId:t})).sort((n,h)=>n.messageId-h.messageId),j.value=d.length===ut}catch(d){_.value=Z(d,"消息加载失败")}finally{F.value=!1}}async function U(t){const e=await os(t);I.value=e.map(d=>({...d,visitorId:t})).filter(d=>d.isPinned&&!d.isDeleted&&!d.isRecalled)}async function ve(t=!0){const e=y.value,d=f.value[0]?.messageId;if(!e||!d||d<0||!j.value||V.value)return!1;const n=fe.value,h=n?.scrollHeight||0,X=n?.scrollTop||0;V.value=!0,_.value="";try{const ae=await vt(e,d,ut),W=new Set(f.value.map(oe=>oe.messageId)),me=ae.map(oe=>({...oe,visitorId:e})).filter(oe=>!W.has(oe.messageId)).sort((oe,Re)=>oe.messageId-Re.messageId);if(f.value=[...me,...f.value],j.value=ae.length===ut,await te(),n&&t){const oe=n.scrollHeight-h;n.scrollTop=Math.max(0,X+oe-bi)}return me.length>0}catch(ae){return _.value=Z(ae,"加载更早消息失败"),!1}finally{V.value=!1}}async function We(){const t=T.value.trim(),e=[...S.value];!t&&e.length===0||Q.value||k.value||!y.value||(await ot(t,e),u())}async function ot(t,e=[]){const d=y.value;if(!t&&e.length===0||Q.value||!d)return;const n=$.value?.messageId,h=ft--,X=new Date().toISOString(),ae={messageId:h,visitorId:d,senderType:2,senderId:c.session?.userId||"support-staff",senderName:c.session?.displayName||"客服",senderAvatarUrl:c.session?.avatarUrl||"",isLetterAvatar:!0,content:t,attachments:e,replyTo:$.value?{messageId:$.value.messageId,senderName:$.value.senderName,content:ye($.value.content,$.value.attachments),createdAtUtc:$.value.createdAtUtc}:void 0,createdAtUtc:X,deliveryStatus:"sending"};Q.value=!0,_.value="",f.value.push(ae),Ot(),T.value="",$.value=null,S.value=[],await te(De);try{const W=await ns(d,t,e,n);Ht(h),Et({...ae,messageId:W.messageId,createdAtUtc:W.createdAtUtc,senderType:W.senderType,senderId:W.senderId,senderName:W.senderName,senderAvatarUrl:W.senderAvatarUrl,isLetterAvatar:W.isLetterAvatar,content:W.content,attachments:W.attachments||e,linkPreview:W.linkPreview,replyTo:W.replyTo,isPinned:W.isPinned,isDeleted:W.isDeleted,isRecalled:W.isRecalled,unreadCount:W.unreadCount,deliveryStatus:void 0}),Os(d,ye(W.content,W.attachments||e),W.createdAtUtc),await te(De)}catch(W){_.value=Z(W,"发送失败,请稍后重试");const me=f.value.find(oe=>oe.messageId===h);me&&(me.deliveryStatus="failed")}finally{Q.value=!1}}function ds(t){t.deliveryStatus!=="failed"||Q.value||(Ht(t.messageId),$.value=t.replyTo&&f.value.find(e=>e.messageId===t.replyTo?.messageId)||null,ot(t.content,t.attachments||[]))}function cs(t){t.messageId<0||t.isDeleted||t.isRecalled||($.value=t)}function ps(){$.value=null}async function Tt(t){if(!(!y.value||t.messageId<0||t.isDeleted||t.isRecalled)){if(!t.isPinned&&I.value.length>=6){B("最多只能置顶六条消息","error");return}try{const e=t.isPinned?await wo(y.value,t.messageId):await bo(y.value,t.messageId);it(e),B(e.isPinned?"消息已置顶":"已取消消息置顶")}catch{B("操作失败,请重试","error")}}}async function vs(t){if(!(!y.value||t.messageId<0||t.isDeleted||t.isRecalled))try{const e=await ko(y.value,t.messageId);it(e),B("消息已删除")}catch{B("操作失败,请重试","error")}}async function fs(t){if(!(!y.value||t.messageId<0||t.isDeleted||t.isRecalled))try{const e=await is(y.value,t.messageId);it(e),B("消息已撤回")}catch{B("操作失败,请重试","error")}}function ms(){He.value?.click()}async function hs(t){const e=t.target,d=Array.from(e.files||[]);if(e.value="",!!d.length){k.value=!0,_.value="";try{for(const n of d)S.value.push(await ls(n))}catch(n){_.value=Z(n,"附件上传失败")}finally{k.value=!1}}}function gs(t){S.value.splice(t,1)}async function ys(){if(!y.value||F.value||ue.value)return;const t=Date.now();ue.value=!0;try{await C(y.value),await rt(y.value),await te(De)}finally{const e=ki-(Date.now()-t);e>0&&await new Promise(d=>setTimeout(d,e)),ue.value=!1}}
1async function _s(t,e){if(t?.visitorId)try{if(!navigator.clipboard)throw new Error("Clipboard API unavailable");await navigator.clipboard.writeText(t.visitorId),B("已复制")}catch{B("复制失败","error")}finally{e?.stopPropagation(),re()}}async function nt(t,e){try{if(!navigator.clipboard)throw new Error("Clipboard API unavailable");await navigator.clipboard.writeText(e),B(`${t} 已复制`)}catch{B("复制失败","error")}}async function bs(t,e){if(!(!t||L.value)){L.value=!0;try{const d=await fo(t.visitorId);t.unreadCount=d.unreadCount,v.value=Me(v.value),B("已标记为未读")}catch{B("操作失败,请重试","error")}finally{L.value=!1,e?.stopPropagation(),re()}}}async function ws(t,e){if(!(!t||L.value)){if(t.pinPriority<=0&&ht.value>=6){B("最多只能置顶六个会话","error"),e?.stopPropagation(),re();return}L.value=!0;try{const d=t.pinPriority>0?await yo(t.visitorId):await go(t.visitorId);t.pinPriority=d.pinPriority,v.value=Me(v.value),B(d.pinPriority>0?"会话已置顶":"已取消置顶")}catch{B("操作失败,请重试","error")}finally{L.value=!1,e?.stopPropagation(),re()}}}const ks=R(()=>!!c.session?.isSupportAdmin),Mt=R(()=>!!c.session?.canViewDeletionHistory),Is=R(()=>!!c.session?.canUseUserSearch);function gt(t){return!!t&&!t.lastMessagePreview}const ee=kt({isOpen:!1,isLoading:!1,error:"",items:[]});async function Ss(){Mt.value&&(ee.isOpen=!0,await Pt())}function Vt(){ee.isOpen=!1}async function Pt(){ee.isLoading=!0,ee.error="";try{ee.items=await So({limit:100})}catch(t){ee.error=Z(t,"加载删除记录失败")}finally{ee.isLoading=!1}}function Cs(t){const e=t.actorName||t.actorUserId||(t.actorRole===0?"用户":"未知"),d=t.actorRole===2?"管理员":t.actorRole===1?"客服":"用户",n=t.operation===1?"删除":"撤回";return`${e}(${d})${n}`}function $s(t){return t.originalSenderType===2?`客服 ${t.originalSenderName||""}`.trim():t.originalSenderName||t.visitorName||"访客"}function Lt(t){if(!t.attachmentJson)return[];try{const e=JSON.parse(t.attachmentJson);return Array.isArray(e)?e:[]}catch{return[]}}const Y=kt({isOpen:!1,isLoading:!1,error:"",visitorTitle:"",items:[]});async function Ts(){const t=O.value;t&&(Y.isOpen=!0,Y.visitorTitle=t.email||t.displayName||t.visitorId,await Ut())}function At(){Y.isOpen=!1}async function Ut(){const t=y.value;if(t){Y.isLoading=!0,Y.error="";try{Y.items=await ho(t)}catch(e){Y.error=Z(e,"加载行为记录失败")}finally{Y.isLoading=!1}}}function Ms(t){switch(t){case 1:return"打开会话";case 2:return"回复";case 3:return"标记已读";case 4:return"标记未读";case 5:return"置顶";case 6:return"取消置顶";case 7:return"删除消息";case 8:return"撤回消息";case 9:return"删除会话";default:return"操作"}}async function Vs(t,e){if(!(!t||L.value)){if(!gt(t)){B("只能删除没有任何消息的会话","error"),e?.stopPropagation(),re();return}L.value=!0;try{await Io(t.visitorId),v.value=v.value.filter(d=>d.visitorId!==t.visitorId),H.value&&(H.value=H.value.filter(d=>d.visitorId!==t.visitorId)),y.value===t.visitorId&&(y.value="",f.value=[]),B("会话已删除")}catch(d){B(Z(d,"删除会话失败"),"error")}finally{L.value=!1,e?.stopPropagation(),re()}}}function je(t){return!!t?.userId?.trim()}function Ps(t){const e=t?.userId?.trim();return e?`/zbk/users?uid=${encodeURIComponent(e)}`:""}function Ls(t,e){e?.stopPropagation();const d=Ps(t);if(re(),!d){B("游客没有用户资料","error");return}window.open(d,"_blank","noopener,noreferrer")}function As(t,e){if(e?.stopPropagation(),re(),!je(t)){B("游客不能接收站内通知","error");return}P.visitor=t,P.title="",P.content="",P.notificationType=2,P.isOpen=!0}function yt(){P.isSending||(P.isOpen=!1,P.visitor=null,P.title="",P.content="")}async function Us(){const t=P.visitor;if(!t||!je(t)||P.isSending)return;const e=P.title.trim();if(!e){B("请填写通知标题","error");return}P.isSending=!0;try{await _o(t.visitorId,{title:e,content:P.content.trim(),notificationType:P.notificationType}),P.isOpen=!1,P.visitor=null,B("通知已发送")}catch{B("发送失败,请重试","error")}finally{P.isSending=!1}}function Ds(t,e){t.preventDefault(),t.stopPropagation();const d=198,n=236,h=window.innerWidth||document.documentElement.clientWidth,X=window.innerHeight||document.documentElement.clientHeight;_e.value={visitorId:e.visitorId,x:Math.max(8,Math.min(t.clientX,h-d-8)),y:Math.max(8,Math.min(t.clientY,X-n-8))}}function re(){_e.value=null}function Dt(t){t.key==="Escape"&&re()}function B(t,e="success"){Ve.value=t,Pe.value=e,ge&&clearTimeout(ge),ge=setTimeout(()=>{Ve.value="",ge=null},1600)}function Rs(t){if(t.visitorId&&(Es(t),t.visitorId.toLowerCase()===y.value.toLowerCase())){const e=zt();Et(t),t.senderType===1&&rt(t.visitorId),e?te(De):se.value=!0}}function Rt(t){if(de.value=t,t==="connected"){_t();return}Ns()}function Ns(){Ie||(Ie=es(()=>{Nt()},8e3),Nt())}function _t(){Ie&&(clearInterval(Ie),Ie=null)}
1async function Nt(){await Fe(!0),y.value&&!F.value&&(await C(y.value),await rt(y.value))}function xs(t){const e=v.value.find(d=>d.visitorId.toLowerCase()===t.visitorId.toLowerCase());e&&(e.unreadCount=0)}function Bs(t){!it(t)&&y.value.toLowerCase()===t.visitorId.toLowerCase()&&U(y.value)}function it(t){const e=f.value.find(h=>h.messageId===t.messageId);e&&(e.isPinned=t.isPinned,e.isDeleted=t.isDeleted,e.isRecalled=t.isRecalled);const d=I.value.find(h=>h.messageId===t.messageId);d&&(d.isPinned=t.isPinned,d.isDeleted=t.isDeleted,d.isRecalled=t.isRecalled),$.value?.messageId===t.messageId&&(t.isDeleted||t.isRecalled)&&($.value=null);const n=e||d;return n&&t.isPinned&&!t.isDeleted&&!t.isRecalled?I.value.some(h=>h.messageId===n.messageId)||(I.value=[{...n},...I.value].slice(0,6)):I.value=I.value.filter(h=>h.messageId!==t.messageId),!!(e||d)}function Es(t){const e=t.visitorId||"",d=v.value.find(n=>n.visitorId.toLowerCase()===e.toLowerCase());d?(d.lastMessageAtUtc=t.createdAtUtc,d.lastMessagePreview=ye(t.content,t.attachments),d.lastMessageFromStaff=t.senderType===2,d.unreadCount=y.value.toLowerCase()===e.toLowerCase()?0:Math.max(0,t.unreadCount??d.unreadCount),d.userId?.trim()||Bt(e)):(v.value.unshift({visitorId:e,userId:t.senderType===1?t.senderId:"",displayName:t.senderType===1?t.senderName:"访客",lastMessageAtUtc:t.createdAtUtc,createdAtUtc:t.createdAtUtc,pinPriority:0,unreadCount:y.value.toLowerCase()===e.toLowerCase()?0:Math.max(1,t.unreadCount||1),lastMessagePreview:ye(t.content,t.attachments),lastMessageFromStaff:t.senderType===2}),Bt(e)),v.value=Me(v.value)}const bt=new Set,xt=new Set;async function Bt(t){const e=t.toLowerCase();if(!(bt.has(e)||xt.has(e))){bt.add(e);try{const d=await Qt(t);if(!d)return;xt.add(e);const n=v.value.findIndex(X=>X.visitorId.toLowerCase()===e);if(n===-1)return;const h=v.value[n];v.value[n]={...d,unreadCount:h.unreadCount,lastMessageAtUtc:h.lastMessageAtUtc,lastMessagePreview:h.lastMessagePreview??d.lastMessagePreview,lastMessageFromStaff:h.lastMessagePreview!=null?h.lastMessageFromStaff:d.lastMessageFromStaff,pinPriority:h.pinPriority||d.pinPriority},v.value=Me(v.value)}finally{bt.delete(e)}}}async function rt(t){const e=v.value.find(d=>d.visitorId.toLowerCase()===t.toLowerCase());e&&(e.unreadCount=0);try{await vo(t)}catch{}}function Et(t){f.value.some(e=>e.messageId===t.messageId)||(f.value.push(t),Ot())}function Ot(){f.value.sort((t,e)=>new Date(t.createdAtUtc).getTime()-new Date(e.createdAtUtc).getTime()||t.messageId-e.messageId)}function Ht(t){f.value=f.value.filter(e=>e.messageId!==t)}function Os(t,e,d){const n=v.value.find(h=>h.visitorId.toLowerCase()===t.toLowerCase());n&&(n.lastMessageAtUtc=d,n.lastMessagePreview=e,n.lastMessageFromStaff=!0,v.value=Me(v.value))}function Me(t){return[...t].sort((e,d)=>e.pinPriority>0!=d.pinPriority>0?e.pinPriority>0?-1:1:e.pinPriority!==d.pinPriority?d.pinPriority-e.pinPriority:e.unreadCount>0!=d.unreadCount>0?e.unreadCount>0?-1:1:new Date(d.lastMessageAtUtc).getTime()-new Date(e.lastMessageAtUtc).getTime())}function Ft(t){let e=0;for(let d=0;d<t.length;d+=1)e=(e<<5)-e+t.charCodeAt(d);return{backgroundColor:Ge[Math.abs(e)%Ge.length]}}function Wt(t){const e=t.trim();if(Ae+=1,H.value=null,ne.value=[],w.value=!1,pe&&(clearTimeout(pe),pe=null),!e)return;const d=Ae;pe=setTimeout(()=>{Hs(e,d)},300)}async function Hs(t,e){w.value=!0;try{const[d,n]=await Promise.all([uo(t,100),Is.value?co(t,20).catch(()=>[]):Promise.resolve([])]);e===Ae&&t===D.value.trim()&&(H.value=d,ne.value=n)}catch{}finally{e===Ae&&(w.value=!1)}}const jt=R(()=>{if(!ne.value.length)return[];const t=new Set($e.value.map(d=>d.visitorId.toLowerCase())),e=new Set($e.value.map(d=>(d.userId||"").toLowerCase()).filter(Boolean));return ne.value.filter(d=>d.existingVisitorId&&t.has(d.existingVisitorId.toLowerCase())?!1:!e.has(d.userId.toLowerCase()))});async function Fs(t){if(!K.value){if(t.existingVisitorId){const d=[...v.value,...H.value||[]].find(n=>n.visitorId.toLowerCase()===t.existingVisitorId.toLowerCase());if(d){await o(d);return}}K.value=t.userId;try{const e=await po(t.userId),d={visitorId:e.visitorId,userId:t.userId,displayName:e.displayName||t.dis
1playName,email:t.email||void 0,lastMessageAtUtc:new Date().toISOString(),createdAtUtc:new Date().toISOString(),pinPriority:0,unreadCount:0,lastMessagePreview:""};D.value="",Wt(""),await o(d),B(e.created?"已发起会话":"已打开会话")}catch(e){B(Z(e,"发起会话失败"),"error")}finally{K.value=""}}}function Ws(t,e){const d=[...t],n=new Set(t.map(h=>h.visitorId.toLowerCase()));for(const h of e)n.has(h.visitorId.toLowerCase())||(d.push(h),n.add(h.visitorId.toLowerCase()));return d}function lt(t){const e=new Date(t);return Number.isNaN(e.getTime())?"":e.toLocaleString([],{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function De(){const t=fe.value;t&&(t.scrollTop=t.scrollHeight,se.value=!1)}async function wt(t){if(t.isDeleted||t.isRecalled)return;let e=0;for(;!f.value.some(n=>n.messageId===t.messageId)&&j.value&&e<20&&(e+=1,!!await ve(!1)););await te(),js(t.messageId)||B("未找到这条置顶消息","error")}function js(t){const e=fe.value;if(!e)return!1;const d=e.querySelector(`[data-support-v2-message-id="${t}"]`);return d?(d.scrollIntoView({behavior:"smooth",block:"center"}),ie.value=t,we&&clearTimeout(we),we=setTimeout(()=>{ie.value===t&&(ie.value=null)},1800),!0):!1}function zt(){const t=fe.value;return t?t.scrollHeight-t.scrollTop-t.clientHeight<96:!0}function zs(){const t=fe.value;return t?!!y.value&&f.value.length>0&&j.value&&!F.value&&!V.value&&t.scrollHeight>t.clientHeight+Yt&&t.scrollTop<=Yt:!1}function Ks(){se.value=!!y.value&&f.value.length>0&&!zt(),zs()&&ve()}return(t,e)=>{const d=ts;return r(),l("div",{class:x(["support-v2-dashboard",{"is-mobile":a(ce),"is-mobile-chat":a(ce)&&a(Le)==="chat"}])},[s("aside",To,[s("header",Mo,[s("div",null,[e[18]||(e[18]=s("h1",null,"客服工作台",-1)),s("p",Vo,[s("span",null,p(`${a(mt)} 条未读消息`),1),s("span",{class:x(["support-v2-dashboard__realtime",`is-${a(de)}`])},p(a(tt)),3)])]),s("div",Po,[a(Mt)?(r(),l("button",{key:0,class:"support-v2-dashboard__icon-button",type:"button",title:"删除记录(测试)",onClick:Ss},[...e[19]||(e[19]=[s("i",{class:"fa-solid fa-clock-rotate-left"},null,-1)])])):g("",!0),s("button",{class:"support-v2-dashboard__icon-button",type:"button",disabled:a(A)||a(q),title:"刷新会话",onClick:e[0]||(e[0]=()=>Fe())},[s("i",{class:x(["fa-solid fa-rotate",{"fa-spin":a(q)}])},null,2)],8,Lo)])]),s("div",Ao,[s("i",{class:x(a(w)?"fa-solid fa-circle-notch fa-spin":"fa-solid fa-magnifying-glass")},null,2),Ne(s("input",{"onUpdate:modelValue":e[1]||(e[1]=n=>It(D)?D.value=n:null),type:"search",placeholder:"搜索访客 / 消息 / 注册用户"},null,512),[[Ke,a(D)]])]),a(Ue)?(r(),l("div",Uo,p(a(Ue)),1)):g("",!0),s("div",{ref_key:"visitorListRef",ref:Xe,class:"support-v2-dashboard__visitors"},[a(M)&&a($e).length===0?(r(),l("div",Do,[...e[20]||(e[20]=[s("i",{class:"fa-regular fa-comments"},null,-1),s("span",null,"暂无匹配会话",-1)])])):g("",!0),(r(!0),l(z,null,le(a($e),n=>(r(),l("button",{key:n.visitorId,class:x(["support-v2-dashboard__visitor",{"is-active":n.visitorId.toLowerCase()===a(y).toLowerCase(),"is-pinned":n.pinPriority>0}]),type:"button",onClick:h=>o(n),onContextmenu:J(h=>Ds(h,n),["prevent"])},[s("span",No,[s("span",{class:"support-v2-dashboard__visitor-avatar",style:ze(Ft(n.visitorId.toLowerCase()))},p(n.displayName.slice(0,1).toUpperCase()||"?"),5)]),s("span",xo,[s("span",Bo,[s("strong",null,p(n.email||n.displayName),1),n.badges?.length?(r(),l("span",Eo,[(r(!0),l(z,null,le(n.badges,h=>(r(),l("span",{key:h.key||h.label,class:"support-v2-dashboard__visitor-identity",style:ze({backgroundColor:h.backgroundColor,color:h.fontColor}),title:h.label},p(h.label),13,Oo))),128))])):g("",!0)]),s("span",{class:x(["support-v2-dashboard__visitor-preview",n.lastMessagePreview?n.lastMessageFromStaff?"support-v2-dashboard__visitor-preview--staff":"support-v2-dashboard__visitor-preview--customer":""])},p(n.lastMessagePreview||"暂无消息"),3)]),s("span",Ho,[s("span",Fo,[n.pinPriority>0?(r(),l("span",Wo,[...e[21]||(e[21]=[s("i",{class:"fa-solid fa-thumbtack"},null,-1)])])):g("",!0),s("time",null,p(lt(n.lastMessageAtUtc)),1)]),n.unreadCount>0?(r(),l("span",jo,p(n.unreadCount>99?"99+":n.unreadCount),1)):g("",!0)])],42,Ro))),128)),a(G)?(r(),l("div",{key:1,class:"support-v2-dashboard__visitor-context-menu",style:ze(a(et)),onClick:e[8]||(e[8]=J(()=>{},["stop"])),onContextmenu:e[9]||(e[9]=J(()=>{},["prevent"]))},[s("button",{type:"button",onClick:e[2]||(e[2]=n=>_s(a(G),n))},[...e[22]||(e[22]=[s("i",{class:"fa-regular fa-copy"},null,-1),s("span",null,"复制访客 ID",-1)])]),s("button",{type:"button",disabled:a(L),onClick:e[3]||(e[3]=n=>bs(a(G),n))},[...e[23]||(e[23]=[s("i",{class:"fa-regular fa-envelope"},null,-1),s("span",null,"标记为未读",-1)])],8,zo),s("button",{type:"button",disabled:a(L),onClick:e[4]||(e[4]=n=>ws(a(G),n))},[e[24]||(e[24]=s("i",{class:"fa-solid fa-bookmark"},null,-1)),s("span",null,p(a(G).pinPriority>0?"取消置顶":"置顶会话"),1)],8,Ko),s("button",{type:"button",disabled:!je(a(G)),onClick:e[5]||(e[5]=n=>Ls(a(G),n))},[...e[25]||(e[25]=[s("i",{class:"fa-regular fa-address-card"},null,-1),s("span",null,"查看资料",-1)])],8,qo),s("button",{type:"button",disabled:!je(a(G))||a(L),onClick:e[6]||(e[6]=n=>As(a(G),n))},[...e[26]||(e[26]=[s("i",{class:"fa-regular fa-bell"},null,-1),s("span",null,"发送通知",-1)])],8,Jo),s("button",{type:"button",class:"support-v2-dashboard__visitor-context-danger",disabled:!gt(a(G))||a(L),onClick:e[7]||(e[7]=n=>Vs(a(G),n))},[...e[27]||(e[27]=[s("i",{class:"fa-regular fa-trash-can"},null,-1),s("span",null,"删除会话",-1)])],8,Qo),je(a(G))?g("",!0):(r(),l("div",Yo," 游客不能使用用户资料和通知 ")),gt(a(G))?g("",!0):(r(),l("div",Xo," 仅可删除没有任何消息的会话 "))],36)):g("",!0),a(jt).length?(r(),l("div",Zo,[e[28]||(e[28]=s("div",{class:"support-v2-dashboard__user-section-title"},"注册用户 · 发起会话",-1)),(r(!0),l(z,null,le(a(jt),n=>(r(),l("button",{key:n.userId,type:"button",class:"support-v2-dashboard__user-row",disabled:!!a(K),onClick:h=>Fs(n)},[s("span",en,[s("span",{class:"support-v2-dashboard__visitor-avatar",style:ze(Ft(n.userId.toLowerCase()))},p((n.displayName||"?").slice(0,1).toUpperCase()),5)]),s("span",tn,[s("strong",null,p(n.displayName),1),s("span",sn,p(n.email||n.userId),1)]),s("span",an,[a(K)===n.userId?(r(),l("i",on)):(r(),l(z,{key:1},[s("i",{class:x(n.existingVisitorId?"fa-regular fa-comment-dots":"fa-solid fa-comment-medical")},null,2),s("span",null,p(n.existingVisitorId?"打开":"发起"),1)],64))])],8,Go))),128))])):g("",!0)],512)]),s("main",nn,[a(Ve)?(r(),l("div",{key:0,class:x(["support-v2-dashboard__toast",{"is-error":a(Pe)==="error"}])},[s("i",{class:x(a(Pe)==="error"?"fa-solid fa-circle-exclamation":"fa-solid fa-circle-check")},null,2),s("span",null,p(a(Ve)),1)],2)):g("",!0),s("header",rn,[a(ce)?(r(),l("button",{key:0,class:"support-v2-dashboard__back",type:"button",title:"返回会话列表",onClick:Te},[...e[29]||(e[29]=[s("i",{class:"fa-solid fa-arrow-left"},null,-1)])])):g("",!0),a(O)?(r(),l(z,{key:1},[s("div",ln,[s("h2",null,p(a(O).email||a(O).displayName),1),a(O).email&&a(O).displayName&&a(O).displayName!==a(O).email?(r(
1),l("span",un,p(a(O).displayName),1)):g("",!0),a(Se)||a(ke)||a(Ce)?(r(),l("div",dn,[a(Se)?(r(),l("button",{key:0,type:"button",title:"复制 Telegram 用户名",onClick:e[10]||(e[10]=n=>nt("Telegram号码",a(Se)))},[e[30]||(e[30]=s("i",{class:"fa-brands fa-telegram"},null,-1)),e[31]||(e[31]=s("span",null,"Telegram",-1)),s("strong",null,p(a(Se)),1)])):g("",!0),a(ke)?(r(),l("button",{key:1,type:"button",title:"复制微信",onClick:e[11]||(e[11]=n=>nt("微信号",a(ke)))},[e[32]||(e[32]=s("i",{class:"fa-brands fa-weixin"},null,-1)),e[33]||(e[33]=s("span",null,"微信",-1)),s("strong",null,p(a(ke)),1)])):g("",!0),a(Ce)?(r(),l("button",{key:2,type:"button",title:"复制 WhatsApp 号码",onClick:e[12]||(e[12]=n=>nt("WhatsApp号码",a(Ce)))},[e[34]||(e[34]=s("i",{class:"fa-brands fa-whatsapp"},null,-1)),e[35]||(e[35]=s("span",null,"WhatsApp",-1)),s("strong",null,p(a(Ce)),1)])):g("",!0)])):g("",!0),a(O).ip||a(O).region?(r(),l("div",cn,[a(O).ip?(r(),l("button",{key:0,type:"button",class:"support-v2-dashboard__visitor-meta-ip",title:"复制 IP 地址",onClick:e[13]||(e[13]=n=>nt("IP",a(O).ip||""))},[e[36]||(e[36]=s("i",{class:"fa-solid fa-location-crosshairs"},null,-1)),e[37]||(e[37]=s("span",null,"IP",-1)),s("strong",null,p(a(O).ip),1)])):g("",!0),a(O).region?(r(),l("span",pn,[e[38]||(e[38]=s("i",{class:"fa-solid fa-earth-asia"},null,-1)),qe(" "+p(a(O).region),1)])):g("",!0)])):g("",!0)]),s("div",vn,[s("button",{class:"support-v2-dashboard__icon-button",type:"button",title:"客服行为记录",onClick:Ts},[...e[39]||(e[39]=[s("i",{class:"fa-solid fa-clock-rotate-left"},null,-1)])]),s("button",{class:"support-v2-dashboard__icon-button",type:"button",title:"刷新消息",disabled:a(F)||a(ue),onClick:ys},[s("i",{class:x(["fa-solid fa-rotate",{"fa-spin":a(ue)}])},null,2)],8,fn)])],64)):(r(),l("div",mn,[...e[40]||(e[40]=[s("h2",null,"请选择一个访客",-1),s("p",null,"从左侧列表打开会话后即可回复",-1)])]))]),s("div",{ref_key:"messageListRef",ref:fe,class:"support-v2-dashboard__messages",onScroll:Ks},[a(_)?(r(),l("div",hn,p(a(_)),1)):g("",!0),a(O)?!a(F)&&a(f).length===0?(r(),l("div",yn,[...e[42]||(e[42]=[s("span",null,"暂无消息",-1)])])):g("",!0):(r(),l("div",gn,[...e[41]||(e[41]=[s("span",null,"选择一个会话开始回复",-1)])])),a(O)&&a(V)?(r(),l("div",_n,[...e[43]||(e[43]=[s("span",null,[s("i",{class:"fa-solid fa-circle-notch fa-spin"}),s("span",null,"正在加载更早消息")],-1)])])):g("",!0),a(I).length?(r(),l("div",bn,[(r(!0),l(z,null,le(a(I),n=>(r(),l("div",{key:`pinned-${n.messageId}`,class:"support-v2-dashboard__pinned-message",role:"button",tabindex:"0",title:"定位到原消息",onClick:h=>wt(n),onKeydown:[xe(J(h=>wt(n),["prevent"]),["enter"]),xe(J(h=>wt(n),["prevent"]),["space"])]},[e[45]||(e[45]=s("i",{class:"fa-solid fa-bookmark"},null,-1)),s("span",null,p(("supportV2MessagePreview"in t?t.supportV2MessagePreview:a(ye))(n.content,n.attachments)||"附件消息"),1),s("button",{type:"button",title:"取消置顶",onClick:J(h=>Tt(n),["stop"])},[...e[44]||(e[44]=[s("i",{class:"fa-solid fa-xmark"},null,-1)])],8,kn)],40,wn))),128))])):g("",!0),Ct(d,{messages:a(f),"mine-sender-type":2,"highlighted-message-id":a(ie)},{actions:Je(({message:n})=>[s("button",{type:"button",title:"回复",onClick:h=>cs(n)},[...e[46]||(e[46]=[s("i",{class:"fa-solid fa-reply"},null,-1)])],8,In),s("button",{type:"button",title:n.isPinned?"取消置顶":"置顶消息",onClick:h=>Tt(n)},[...e[47]||(e[47]=[s("i",{class:"fa-solid fa-bookmark"},null,-1)])],8,Sn),a(ks)&&n.senderType===1?(r(),l("button",{key:0,type:"button",title:"删除",onClick:h=>vs(n)},[...e[48]||(e[48]=[s("i",{class:"fa-regular fa-trash-can"},null,-1)])],8,Cn)):g("",!0),n.senderType===2?(r(),l("button",{key:1,type:"button",title:"撤回",onClick:h=>fs(n)},[...e[49]||(e[49]=[s("i",{class:"fa-solid fa-rotate-left"},null,-1)])],8,$n)):g("",!0)]),after:Je(({message:n})=>[n.deliveryStatus?(r(),l("div",{key:0,class:x(["support-v2-dashboard__delivery",{"is-failed":n.deliveryStatus==="failed"}])},[n.deliveryStatus==="sending"?(r(),l(z,{key:0},[e[50]||(e[50]=s("i",{class:"fa-solid fa-circle-notch fa-spin"},null,-1)),e[51]||(e[51]=s("span",null,"发送中",-1))],64)):(r(),l(z,{key:1},[e[52]||(e[52]=s("i",{class:"fa-solid fa-circle-exclamation"},null,-1)),e[53]||(e[53]=s("span",null,"失败",-1)),s("button",{type:"button",disabled:a(Q),onClick:h=>ds(n)},"重试",8,Tn)],64))],2)):g("",!0)]),_:1},8,["messages","highlighted-message-id"])],544),a(se)?(r(),l("button",{key:1,class:"support-v2-dashboard__jump-latest",type:"button",onClick:De},[...e[54]||(e[54]=[s("i",{class:"fa-solid fa-arrow-down"},null,-1),s("span",null,"回到最新",-1)])])):g("",!0),s("form",{class:x(["support-v2-dashboard__composer",{"support-v2-dashboard__composer--shell-tabs":a(m)}]),onSubmit:J(We,["prevent"])},[a($)?(r(),l("div",Mn,[e[56]||(e[56]=s("i",{class:"fa-solid fa-reply"},null,-1)),s("span",null,p(`回复 ${a($).senderName}:`)+p(("supportV2MessagePreview"in t?t.supportV2MessagePreview:a(ye))(a($).content,a($).attachments)||"附件消息"),1),s("button",{type:"button",title:"取消回复",disabled:a(Q),onClick:ps},[...e[55]||(e[55]=[s("i",{class:"fa-solid fa-xmark"}
1,null,-1)])],8,Vn)])):g("",!0),a(S).length?(r(),l("div",Pn,[(r(!0),l(z,null,le(a(S),(n,h)=>(r(),l("span",{key:`${n.url}-${h}`,class:"support-v2-dashboard__pending-item"},[s("i",{class:x(n.kind==="image"?"fa-regular fa-image":"fa-regular fa-file-lines")},null,2),s("span",null,p(n.name),1),s("button",{type:"button",title:"移除附件",disabled:a(Q),onClick:X=>gs(h)},[...e[57]||(e[57]=[s("i",{class:"fa-solid fa-xmark"},null,-1)])],8,Ln)]))),128))])):g("",!0),s("input",{ref_key:"fileInputRef",ref:He,class:"support-v2-dashboard__file-input",type:"file",multiple:"",onChange:hs},null,544),s("button",{class:"support-v2-dashboard__tool-button",type:"button",title:"添加图片或文件",disabled:!a(O)||a(Q)||a(k),onClick:ms},[s("i",{class:x(a(k)?"fa-solid fa-circle-notch fa-spin":"fa-solid fa-paperclip")},null,2)],8,An),s("div",Un,[Ne(s("textarea",{ref_key:"composerInputRef",ref:Ze,"onUpdate:modelValue":e[14]||(e[14]=n=>It(T)?T.value=n:null),rows:"2",placeholder:"输入回复",disabled:!a(O)||a(Q),onKeydown:xe(J(We,["exact","prevent"]),["enter"])},null,40,Dn),[[Ke,a(T)]])]),s("button",{class:"btn btn-primary",type:"submit",title:"发送",disabled:!a(st)},[e[58]||(e[58]=s("i",{class:"fa-solid fa-paper-plane"},null,-1)),s("span",null,p(a(Q)?"发送中":"发送"),1)],8,Rn)],34)]),a(P).isOpen?(r(),l("div",{key:0,class:"support-v2-dashboard__modal-backdrop",onClick:J(yt,["self"])},[s("form",{class:"support-v2-dashboard__notification-modal",onSubmit:J(Us,["prevent"])},[s("header",null,[e[60]||(e[60]=s("h3",null,"发送通知",-1)),s("button",{type:"button",disabled:a(P).isSending,title:"关闭",onClick:yt},[...e[59]||(e[59]=[s("i",{class:"fa-solid fa-xmark"},null,-1)])],8,Nn)]),s("label",null,[e[61]||(e[61]=s("span",null,"接收用户",-1)),s("input",{value:a(P).visitor?.displayName||"",type:"text",disabled:""},null,8,xn)]),s("label",null,[e[63]||(e[63]=s("span",null,"通知类型",-1)),Ne(s("select",{"onUpdate:modelValue":e[15]||(e[15]=n=>a(P).notificationType=n),disabled:a(P).isSending},[...e[62]||(e[62]=[s("option",{value:0},"普通消息",-1),s("option",{value:1},"系统通知",-1),s("option",{value:2},"VIP服务",-1)])],8,Bn),[[ma,a(P).notificationType,void 0,{number:!0}]])]),s("label",null,[e[64]||(e[64]=s("span",null,"通知标题",-1)),Ne(s("input",{"onUpdate:modelValue":e[16]||(e[16]=n=>a(P).title=n),type:"text",maxlength:"120",disabled:a(P).isSending},null,8,En),[[Ke,a(P).title]])]),s("label",null,[e[65]||(e[65]=s("span",null,"通知内容",-1)),Ne(s("textarea",{"onUpdate:modelValue":e[17]||(e[17]=n=>a(P).content=n),rows:"4",maxlength:"1000",disabled:a(P).isSending},null,8,On),[[Ke,a(P).content]])]),s("footer",null,[s("button",{type:"button",class:"btn btn-outline-light",disabled:a(P).isSending,onClick:yt},"取消",8,Hn),s("button",{type:"submit",class:"btn btn-primary",disabled:a(P).isSending},[s("i",{class:x(a(P).isSending?"fa-solid fa-circle-notch fa-spin":"fa-regular fa-paper-plane")},null,2),s("span",null,p(a(P).isSending?"发送中":"发送通知"),1)],8,Fn)])],32)])):g("",!0),a(ee).isOpen?(r(),l("div",{key:1,class:"support-v2-dashboard__modal-backdrop",onClick:J(Vt,["self"])},[s("section",Wn,[s("header",null,[e[67]||(e[67]=s("h3",null,[s("i",{class:"fa-solid fa-clock-rotate-left"}),qe(" 删除消息历史")],-1)),s("div",jn,[s("button",{type:"button",disabled:a(ee).isLoading,title:"刷新会话",onClick:Pt},[s("i",{class:x(["fa-solid fa-rotate",{"fa-spin":a(ee).isLoading}])},null,2)],8,zn),s("button",{type:"button",title:"关闭",onClick:Vt},[...e[66]||(e[66]=[s("i",{class:"fa-solid fa-xmark"},null,-1)])])])]),e[71]||(e[71]=s("p",{class:"support-v2-dashboard__history-note"},"记录用户或管理员删除/撤回的消息(仅系统管理员可见)。",-1)),s("div",Kn,[a(ee).isLoading?(r(),l("div",qn,[...e[68]||(e[68]=[s("i",{class:"fa-solid fa-circle-notch fa-spin"},null,-1),s("span",null,"加载中…",-1)])])):a(ee).error?(r(),l("div",Jn,[e[69]||(e[69]=s("i",{class:"fa-solid fa-triangle-exclamation"},null,-1)),s("span",null,p(a(ee).error),1)])):a(ee).items.length===0?(r(),l("div",Qn,[...e[70]||(e[70]=[s("i",{class:"fa-regular fa-trash-can"},null,-1),s("span",null,"暂无删除记录",-1)])])):(r(),l("ul",Yn,[(r(!0),l(z,null,le(a(ee).items,n=>(r(),l("li",{key:n.auditId,class:x(["support-v2-dashboard__history-item",{"is-recall":n.operation===2}])},[s("div",Xn,[s("span",{class:x(["support-v2-dashboard__history-badge",n.operation===1?"is-delete":"is-recall"])},p(n.operation===1?"删除":"撤回"),3),s("span",Zn,p(Cs(n)),1),s("span",Gn,p(lt(n.createdAtUtc)),1)]),s("div",ei,[qe(p(`会话:${n.visitorName||n.visitorId}
1 · 原发送方:${$s(n)}`)+" ",1),n.messageCreatedAtUtc?(r(),l("span",ti,p(` · 发于 ${lt(n.messageCreatedAtUtc)}`),1)):g("",!0)]),n.content?(r(),l("div",si,p(n.content),1)):g("",!0),Lt(n).length?(r(),l("div",ai,[(r(!0),l(z,null,le(Lt(n),h=>(r(),l("a",{key:h.url,href:h.url,target:"_blank",rel:"noopener",class:"support-v2-dashboard__history-attachment"},[s("i",{class:x(h.kind==="image"?"fa-regular fa-image":"fa-regular fa-file")},null,2),s("span",null,p(h.name||"附件消息"),1)],8,oi))),128))])):n.content?g("",!0):(r(),l("div",ni,"(无文本内容)"))],2))),128))]))])])])):g("",!0),a(Y).isOpen?(r(),l("div",{key:2,class:"support-v2-dashboard__modal-backdrop",onClick:J(At,["self"])},[s("section",ii,[s("header",null,[e[73]||(e[73]=s("h3",null,[s("i",{class:"fa-solid fa-user-clock"}),qe(" 客服行为记录")],-1)),s("div",ri,[s("button",{type:"button",disabled:a(Y).isLoading,title:"刷新消息",onClick:Ut},[s("i",{class:x(["fa-solid fa-rotate",{"fa-spin":a(Y).isLoading}])},null,2)],8,li),s("button",{type:"button",title:"关闭",onClick:At},[...e[72]||(e[72]=[s("i",{class:"fa-solid fa-xmark"},null,-1)])])])]),s("p",ui,p(`会话:${a(Y).visitorTitle} · 记录哪个客服在何时对此会话做了什么(只记事实,供复核接待情况)。`),1),s("div",di,[a(Y).isLoading?(r(),l("div",ci,[...e[74]||(e[74]=[s("i",{class:"fa-solid fa-circle-notch fa-spin"},null,-1),s("span",null,"加载中…",-1)])])):a(Y).error?(r(),l("div",pi,[e[75]||(e[75]=s("i",{class:"fa-solid fa-triangle-exclamation"},null,-1)),s("span",null,p(a(Y).error),1)])):a(Y).items.length===0?(r(),l("div",vi,[...e[76]||(e[76]=[s("i",{class:"fa-regular fa-clock"},null,-1),s("span",null,"暂无行为记录",-1)])])):(r(),l("ul",fi,[(r(!0),l(z,null,le(a(Y).items,n=>(r(),l("li",{key:n.id,class:"support-v2-dashboard__history-item"},[s("div",mi,[s("span",hi,p(Ms(n.actionType)),1),s("span",gi,p(n.staffName||n.staffUserId||"客服"),1),s("span",yi,p(lt(n.createdAtUtc)),1)]),n.detail?(r(),l("div",_i,p(n.detail),1)):g("",!0)]))),128))]))])])])):g("",!0)],2)}}}),Si=Oe(Ii,[["__scopeId","data-v-dfb3321a"]]),Ci={class:"support-v2-chat"},$i={class:"support-v2-chat__header"},Ti={class:"support-v2-chat__brand"},Mi={class:"min-w-0"},Vi={key:0,class:"support-v2-chat__contact"},Pi=["title"],Li=["title"],Ai=["href","title"],Ui=["title"],Di={key:0,class:"support-v2-chat__connecting","aria-hidden":"true"},Ri={key:0,class:"support-v2-chat__empty"},Ni={key:1,class:"support-v2-chat__pinned-messages"},xi=["title","onClick","onKeydown"],Bi=["title","onClick"],Ei=["title","onClick"],Oi=["disabled","onClick"],Hi={key:0,class:"support-v2-chat__status"},Fi={key:1,class:"support-v2-chat__replying"},Wi=["title","disabled"],ji={key:2,class:"support-v2-chat__pending"},zi=["title","disabled","onClick"],Ki=["title","disabled"],qi={class:"support-v2-chat__field"},Ji=["placeholder","disabled","onKeydown"],Qi=["disabled"],Yi="/WeiCity/logo-tile-192.png",dt=50,Xi=120*1e3,Zi=Ee({__name:"SupportV2VisitorChat",props:{session:{}},setup(i){const{t:c}=Qe({useScope:"global"}),m=i,{shellTabs:v}=Zt(),f=b([]),I=b([]),y=b(""),T=b(null),$=b([]),S=b(""),D=b(""),H=b(!1),ne=b(Date.now()),K=b(!0),_=b(!1),A=b(!1),M=b(!1),q=b(!1),F=b(null),ue=b(null),Q=b(null);let w=null,V=null,L=null,k=null,j=-1;const se=b(""),ie=b(""),de=b(""),Ve=R(()=>!!(se.value||ie.value||de.value)),Pe=R(()=>{const o=de.value.trim();if(!o)return"";if(/^https:\/\/(?:wa\.me|api\.whatsapp\.com)\//i.test(o))return o;const u=o.replace(/\D/g,"");return u.length>=8&&u.length<=15?`https://wa.me/${u}`:""}),fe=R(()=>!!m.session?.isAuthenticated),Xe=R(()=>m.session?.displayName||c("support.visitor")),He=R(()=>m.session?.avatarUrl||""),Ze=R(()=>!!(y.value.trim()||$.value.length)&&!K.value&&!_.value&&!A.value);Gt(async()=>{L=es(()=>{ne.value=Date.now()},15e3),await ce()}),St(async()=>{L&&(clearInterval(L),L=null),V&&(clearTimeout(V),V=null),k&&(clearTimeout(k),k=null),w&&(await w.stop(),w=null)});async function _e(o){if(o?as():ao(m.session?.userId),S.value=await io(),m.session?.isAuthenticated){const u=await ro(S.value);u?.visitorId&&(S.value=u.visitorId),oo(m.session?.userId)}await Le(),f.value.length===0&&await P(),await te(Te),w=await us({role:"visitor",visitorId:S.value,onMessage:u=>{st(u.visitorId,S.value)&&(O(u),te(Te))},onMessageState:tt})}async function ce(){K.value=!0,D.value="",H.value=!1;try{try{await _e(!1)}catch(o){if(to(o))await _e(!0);else throw o}}catch(o){Jt(o)?(H.value=!0,D.value=Z(o,c("support.login_expired_view"))):D.value=Z(o,c("support.connect_failed"))}finally{K.value=!1,await te(Te)}}async function Le(){if(!S.value)return;const[o]=await Promise.all([vt(S.value,void 0,dt),he()]);f.value=o.map(u=>({...u,visitorId:S.value})).sort((u,N)=>u.messageId-N.messageId),M.value=o.length===dt}async function he(){if(!S.value)return;const o=await os(S.value);I.value=o.map(u=>({...u,visitorId:S.value})).filter(u=>u.isPinned&&!u.isDeleted&&!u.isRecalled)}async function P(){try{const o=await rs();o.contactTelegram&&(se.value=o.contactTelegram),o.contactWeChat&&(ie.value=o.contactWeChat),o.contactWhatsApp&&(de.value=o.contactWhatsApp);const u=$e(o.content);if(!u)return;f.value.push({messageId:-Date.now(),visitorId:S.value,senderType:2,senderId:"system",senderName:o.senderName||c("support.default_agent_name"),senderAvatarUrl:o.senderAvatar||"",isLetterAvatar:!1,content:u,createdAtUtc:new Date().toISOString()})}catch{}}async function be(o,u){try{if(!navigator.clipboard)throw new Error("Clipboard API unavailable");await navigator.clipboard.writeText(u),D.value=c("support.copied",{label:o}),V&&clearTimeout(V),V=setTimeout(()=>{D.value="",V=null},1500)}catch{D.value=c("support.copy_failed")}}async function pe(){const o=y.value.trim(),u=[...$.value];if(!o&&u.length===0||_.value||A.value||!S.value)return;const N=T.value?.messageId,C=j--,U={messageId:C,visitorId:S.value,senderType:1,senderId:m.session?.userId||S.value,senderName:Xe.value,senderAvatarUrl:He.value,isLetterAvatar:!He.value,content:o,attachments:u,replyTo:T.value?{messageId:T.value.messageId,senderName:T.value.senderName,content:ye(T.value.content,T.value.attachments),createdAtUtc:T.value.createdAtUtc}:void 0,createdAtUtc:new Date().toISOString(),deliveryStatus:"sending"};_.value=!0,D.value="",H.value=!1,f.value.push(U),G(),y.value="",T.value=null,$.value=[],await te(Te);try{const ve=await ns(S.value,o,u,N);et(C),ge(ve,o,u),await te(Te)}catch(ve){Jt(ve)?(H.value=!0,D.value=Z(ve,c("support.login_expired_send")),y.value=o,$.value=u):D.value=Z(ve,c("support.send_failed"));const We=f.value.find(ot=>ot.messageId===C);We&&(We.deliveryStatus="failed")}finally{_.value=!1}}function ge(o,u,N=[]){O({messageId:o.messageId,visitorId:o.visitorId||S.value,senderType:o.senderType,senderId:o.senderId,senderName:o.senderName,senderAvatarUrl:o.senderAvatarUrl,isLetterAvatar:o.isLetterAvatar,content:o.content||u,attachments:o.attachments||N,replyTo:o.replyTo,isPinned:o.isPinned,isDeleted:o.isDeleted,isRecalled:o.isRecalled,createdAtUtc:o.createdAtUtc,unreadCount:o.unreadCount})}function Ie(){{const o=`${window.location.pathname}${window.location.search}`;window.location.href=`/login?returnUrl=${encodeURIComponent(o)}`}}function we(){Q.value?.click()}async function Ae(o){const u=o.target,N=Array.from(u.files||[]);if(u.value="",!!N.length){A.value=!0,D.value="";try{for(const C of N)$.value.push(await ls(C))}catch(C){D.value=Z(C,c("support.upload_failed"))}finally{A.value=!1}}}function ft(o){$.value.splice(o,1)}function Ge(o){o.messageId<0||o.isDeleted||o.isRecalled||(T.value=o)}function Se(){T.value=null}function ke(o){if(o.messageId<0||o.senderType!==1||o.isDeleted||o.isRecalled)return!1;const u=Date.parse(o.createdAtUtc);return Number.isFinite(u)&&ne.value-u<=Xi}async function Ce(o){if(!(!S.value||!ke(o)))try{tt(await is(S.value,o.messageId))}catch(u){D.value=Z(u,c("support.op_failed"))}}function O(o){f.value.some(u=>u.messageId===o.messageId)||(f.value.push(o),G())}function G(){f.value.sort((o,u)=>new Date(o.createdAtUtc).getTime()-new Date(u.createdAtUtc).getTime()||o.messageId-u.messageId)}function et(o){f.value=f.value.filter(u=>u.messageId!==o)}function mt(o){o.deliveryStatus!=="failed"||_.value||(et(o.messageId),T.value=o.replyTo&&f.value.find(u=>u.messageId===o.replyTo?.messageId)||null,ht(o.content,o.attachments||[]))}async function ht(o,u){y.value=o,$.value=u,await pe()}function tt(o){if(!st(o.visitorId,S.value))return;const u=f.value.find(U=>U.messageId===o.messageId);u&&(u.isPinned=o.isPinned,u.isDeleted=o.isDeleted,u.isRecalled=o.isRecalled);const N=I.value.find(U=>U.messageId===o.messageId);N&&(N.isPinned=o.isPinned,N.isDeleted=o.isDeleted,N.isRecalled=o.isRecalled),T.value?.messageId===o.messageId&&(o.isDeleted||o.isRecalled)&&(T.value=null);const C=u||N;C&&o.isPinned&&!o.isDeleted&&!o.isRecalled?I.value.some(U=>U.messageId===C.messageId)||(I.value=[{...C},...I.value].slice(0,6)):I.value=I.value.filter(U=>U.messageId!==o.messageId),!C&&o.isPinned&&he()}function st(o,u){return!o||o.toLowerCase()===u.toLowerCase()}function $e(o){const u=(o||"").trim();if(!u)return"";try{return JSON.parse(u).blocks?.map(U=>
1U.data?.text||"").filter(Boolean).join(`
2`)||u}catch{return u}}async function Ue(o){if(o.isDeleted||o.isRecalled||!S.value)return;let u=0;for(;!f.value.some(N=>N.messageId===o.messageId)&&M.value&&u<20&&(u+=1,!!await Fe()););await te(),at(o.messageId)}async function Fe(){const o=f.value[0]?.messageId;if(!S.value||!o||o<0||!M.value||q.value)return!1;q.value=!0;try{const u=await vt(S.value,o,dt),N=new Set(f.value.map(U=>U.messageId)),C=u.map(U=>({...U,visitorId:S.value})).filter(U=>!N.has(U.messageId)).sort((U,ve)=>U.messageId-ve.messageId);return f.value=[...C,...f.value],M.value=u.length===dt,C.length>0}catch(u){return D.value=Z(u,c("support.load_pinned_failed")),!1}finally{q.value=!1}}function at(o){const u=ue.value;if(!u)return!1;const N=u.querySelector(`[data-support-v2-message-id="${o}"]`);return N?(N.scrollIntoView({behavior:"smooth",block:"center"}),F.value=o,k&&clearTimeout(k),k=setTimeout(()=>{F.value===o&&(F.value=null)},1800),!0):!1}function Te(){const o=ue.value;o&&(o.scrollTop=o.scrollHeight)}return(o,u)=>{const N=ts;return r(),l("div",Ci,[s("header",$i,[s("div",Ti,[s("img",{class:"support-v2-chat__avatar",src:Yi,alt:""}),s("div",Mi,[s("h1",null,p(o.$t("support.title")),1),a(Ve)?(r(),l("div",Vi,[a(se)?(r(),l("button",{key:0,type:"button",title:o.$t("support.copy_telegram"),onClick:u[0]||(u[0]=C=>be(o.$t("support.telegram_id"),a(se)))},[u[4]||(u[4]=s("i",{class:"fa-brands fa-telegram"},null,-1)),s("span",null,p(o.$t("support.telegram_label")),1),s("strong",null,p(a(se)),1)],8,Pi)):g("",!0),a(ie)?(r(),l("button",{key:1,type:"button",title:o.$t("support.copy_wechat"),onClick:u[1]||(u[1]=C=>be(o.$t("support.wechat_id"),a(ie)))},[u[5]||(u[5]=s("i",{class:"fa-brands fa-weixin"},null,-1)),s("span",null,p(o.$t("support.wechat_label")),1),s("strong",null,p(a(ie)),1)],8,Li)):g("",!0),a(Pe)?(r(),l("a",{key:2,href:a(Pe),target:"_blank",rel:"noopener noreferrer",title:o.$t("support.open_whatsapp")},[u[6]||(u[6]=s("i",{class:"fa-brands fa-whatsapp"},null,-1)),s("span",null,p(o.$t("support.whatsapp_label")),1),s("strong",null,p(a(de)),1)],8,Ai)):a(de)?(r(),l("button",{key:3,type:"button",title:o.$t("support.copy_whatsapp"),onClick:u[2]||(u[2]=C=>be(o.$t("support.whatsapp_id"),a(de)))},[u[7]||(u[7]=s("i",{class:"fa-brands fa-whatsapp"},null,-1)),s("span",null,p(o.$t("support.whatsapp_label")),1),s("strong",null,p(a(de)),1)],8,Ui)):g("",!0)])):g("",!0)])]),a(K)?(r(),l("div",Di,[...u[8]||(u[8]=[s("span",null,null,-1)])])):g("",!0)]),s("div",{ref_key:"messageListRef",ref:ue,class:"support-v2-chat__messages"},[!a(K)&&a(f).length===0?(r(),l("div",Ri,[u[9]||(u[9]=s("i",{class:"fa-regular fa-comments"},null,-1)),s("span",null,p(o.$t("support.ask_hint")),1)])):g("",!0),a(I).length?(r(),l("div",Ni,[(r(!0),l(z,null,le(a(I),C=>(r(),l("div",{key:`pinned-${C.messageId}`,class:"support-v2-chat__pinned-message",role:"button",tabindex:"0",title:o.$t("support.jump_to_original"),onClick:U=>Ue(C),onKeydown:[xe(J(U=>Ue(C),["prevent"]),["enter"]),xe(J(U=>Ue(C),["prevent"]),["space"])]},[u[10]||(u[10]=s("i",{class:"fa-solid fa-bookmark"},null,-1)),s("span",null,p(("supportV2MessagePreview"in o?o.supportV2MessagePreview:a(ye))(C.content,C.attachments)||o.$t("support.attachment_message")),1)],40,xi))),128))])):g("",!0),Ct(N,{messages:a(f),"mine-sender-type":1,"highlighted-message-id":a(F)},{actions:Je(({message:C})=>[s("button",{type:"button",title:o.$t("support.reply"),onClick:U=>Ge(C)},[...u[11]||(u[11]=[s("i",{class:"fa-solid fa-reply"},null,-1)])],8,Bi),ke(C)?(r(),l("button",{key:0,type:"button",title:o.$t("support.recall"),onClick:U=>Ce(C)},[...u[12]||(u[12]=[s("i",{class:"fa-solid fa-rotate-left"},null,-1)])],8,Ei)):g("",!0)]),after:Je(({message:C})=>[C.deliveryStatus?(r(),l("div",{key:0,class:x(["support-v2-chat__delivery",{"is-failed":C.deliveryStatus==="failed"}])},[C.deliveryStatus==="sending"?(r(),l(z,{key:0},[u[13]||(u[13]=s("i",{class:"fa-solid fa-circle-notch fa-spin"},null,-1)),s("span",null,p(o.$t("support.sending")),1)],64)):(r(),l(z,{key:1},[u[14]||(u[14]=s("i",{class:"fa-solid fa-circle-exclamation"},null,-1)),s("span",null,p(o.$t("support.send_failed_short")),1),s("button",{type:"button",disabled:a(_),onClick:U=>mt(C)},p(o.$t("support.retry")),9,Oi)],64))],2)):g("",!0)]),_:1},8,["messages","highlighted-message-id"])],512),s("form",{class:x(["support-v2-chat__composer",{"support-v2-chat__composer--shell-tabs":a(v)}]),onSubmit:J(pe,["prevent"])},[a(D)?(r(),l("p",Hi,[qe(p(a(D))+" ",1),a(H)?(r(),l("button",{key:0,t
2ype:"button",class:"support-v2-chat__login-link",onClick:Ie},p(o.$t("support.login_now")),1)):g("",!0)])):g("",!0),a(T)?(r(),l("div",Fi,[u[16]||(u[16]=s("i",{class:"fa-solid fa-reply"},null,-1)),s("span",null,p(o.$t("support.replying_to",{name:a(T).senderName}))+p(("supportV2MessagePreview"in o?o.supportV2MessagePreview:a(ye))(a(T).content,a(T).attachments)||o.$t("support.attachment_message")),1),s("button",{type:"button",title:o.$t("support.cancel_reply"),disabled:a(_),onClick:Se},[...u[15]||(u[15]=[s("i",{class:"fa-solid fa-xmark"},null,-1)])],8,Wi)])):g("",!0),a($).length?(r(),l("div",ji,[(r(!0),l(z,null,le(a($),(C,U)=>(r(),l("span",{key:`${C.url}-${U}`,class:"support-v2-chat__pending-item"},[s("i",{class:x(C.kind==="image"?"fa-regular fa-image":"fa-regular fa-file-lines")},null,2),s("span",null,p(C.name),1),s("button",{type:"button",title:o.$t("support.remove_attachment"),disabled:a(_),onClick:ve=>ft(U)},[...u[17]||(u[17]=[s("i",{class:"fa-solid fa-xmark"},null,-1)])],8,zi)]))),128))])):g("",!0),s("div",{class:x(["support-v2-chat__input-row",{"support-v2-chat__input-row--no-tools":!a(fe)}])},[a(fe)?(r(),l("input",{key:0,ref_key:"fileInputRef",ref:Q,class:"support-v2-chat__file-input",type:"file",multiple:"",onChange:Ae},null,544)):g("",!0),a(fe)?(r(),l("button",{key:1,class:"support-v2-chat__tool-button",type:"button",title:o.$t("support.add_attachment"),disabled:a(K)||a(_)||a(A),onClick:we},[s("i",{class:x(a(A)?"fa-solid fa-circle-notch fa-spin":"fa-solid fa-paperclip")},null,2)],8,Ki)):g("",!0),s("div",qi,[Ne(s("textarea",{"onUpdate:modelValue":u[3]||(u[3]=C=>It(y)?y.value=C:null),rows:"2",placeholder:o.$t("support.input_placeholder"),disabled:a(K)||a(_),onKeydown:xe(J(pe,["exact","prevent"]),["enter"])},null,40,Ji),[[Ke,a(y)]])]),s("button",{class:"btn btn-primary",type:"submit",disabled:!a(Ze)},[u[18]||(u[18]=s("i",{class:"fa-solid fa-paper-plane"},null,-1)),s("span",null,p(a(_)?o.$t("support.sending"):o.$t("support.send")),1)],8,Qi)],2)],34)])}}}),Gi=Oe(Zi,[["__scopeId","data-v-23e0ef31"]]),er={key:0,class:"support-v2-page__loading",role:"status"},tr={key:1,class:"support-v2-page__body"},sr=Ee({__name:"SupportV2Page",props:{initialVisitorId:{default:""},embedded:{type:Boolean,default:!1}},setup(i){const c=i,{t:m}=Qe(),v=no(),f=R(()=>v.data.value),I=R(()=>f.value??void 0),y=R(()=>v.isLoading.value&&!f.value),T=R(()=>c.embedded);return($,S)=>{const D=Si,H=Gi;return r(),l("main",{class:x(["support-v2-page",{"support-v2-page--embedded":a(T),"is-staff":!!a(f)?.isSupportStaff,"is-visitor":!a(f)?.isSupportStaff}])},[a(y)?(r(),l("div",er,p(a(m)("common.loading")),1)):(r(),l("div",tr,[a(f)?.isSupportStaff?(r(),Be(D,{key:0,session:a(I),"initial-visitor-id":c.initialVisitorId},null,8,["session","initial-visitor-id"])):(r(),Be(H,{key:1,session:a(I)},null,8,["session"]))]))],2)}}}),ar=Oe(sr,[["__scopeId","data-v-32435999"]]),or=Ee({__name:"support",setup(i){const{t:c}=Qe(),m=ha(),v=R(()=>{const I=m.query.v,y=Array.isArray(I)?I[0]:I;return typeof y=="string"?y.trim():""}),f=R(()=>{const I=m.query.embed,y=Array.isArray(I)?I[0]:I;return y==="1"||y?.toLowerCase()==="true"});return ya({title:()=>`${c("support.title")} · WeiCity`}),(I,y)=>{const T=ar,$=qs;return a(f)?(r(),Be(T,{key:1,"initial-visitor-id":a(v),embedded:""},null,8,["initial-visitor-id"])):(r(),Be($,{key:0,"active-mode":"support","header-title":a(c)("support.title"),"show-compose":!1,"show-side":!1,"back-to":"/","hide-content-header-on-mobile":!0,"shell-class":"wc-social--support"},{default:Je(()=>[Ct(T,{"initial-visitor-id":a(v)},null,8,["initial-visitor-id"])]),_:1},8,["header-title"]))}}}),$r=Oe(or,[["__scopeId","data-v-4de89e12"]]);export{$r as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.