3 lines
159 KiB
JavaScript
3 lines
159 KiB
JavaScript
|
|
import{p as Pe,q as ht,r as h,s as O,d as be,j as le,k as a,c as l,v as se,a as e,t as v,e as A,F as ge,x as we,y as Ve,f as ye,g as $e,w as P,l as K,_ as ke,z as Be,A as Ut,o as Ke,B as Xe,C as L,b as $,D as qe,E as ie,G as Nt,H as jt,I as Me,J as De,K as St,L as yt,M as He,N as Mt,O as Wt,P as qt,m as Rt,Q as bt,R as Ft,S as Ht,T as Kt,U as Xt,V as Yt,W as kt,X as nt,Y as tt,Z as At,$ as Qt,u as ut,a0 as Gt,a1 as Jt,a2 as Zt,a3 as en,a4 as tn,a5 as nn,a6 as an}from"./index-BddXPv-R.js";import{A as sn}from"./AiAssistantPanel-QaiboL_R.js";async function on(t){const n={};return await Pe.get("/quick-replies",{params:n})}async function ln(t){return await Pe.post("/quick-replies",t)}async function rn(t,n){return await Pe.put(`/quick-replies/${t}`,n)}async function cn(t){await Pe.delete(`/quick-replies/${t}`)}const wt=ht("quickReply",()=>{const t=h([]),n=h(!1),r=O(()=>{const _={};for(const y of t.value)_[y.category]||(_[y.category]=[]),_[y.category].push(y);return _}),d=O(()=>Object.keys(r.value));async function u(){try{n.value=!0;const _=await on();t.value=_.items}catch(_){console.error("获取快速回复模板失败:",_)}finally{n.value=!1}}async function c(_){try{const y=await ln(_);return await u(),y}catch(y){return console.error("创建快速回复模板失败:",y),null}}async function s(_,y){try{const z=await rn(_,y);return await u(),z}catch(z){return console.error("更新快速回复模板失败:",z),null}}async function o(_){try{await cn(_),await u()}catch(y){console.error("删除快速回复模板失败:",y)}}function i(_,y){let z=_;for(const[B,U]of Object.entries(y))z=z.replaceAll(`{${B}}`,U);return z}return{templates:t,loading:n,templatesByCategory:r,categories:d,fetchTemplates:u,addTemplate:c,editTemplate:s,removeTemplate:o,replaceVariables:i}}),Lt="it_desk_theme";function ct(t){document.documentElement.setAttribute("data-theme",t),localStorage.setItem(Lt,t)}function _t(){const t=localStorage.getItem(Lt);return t==="dark"||t==="light"?t:window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function un(){const t=_t();return ct(t),{applyTheme:ct,getInitialTheme:_t}}const Et=ht("theme",()=>{const t=h("light");function n(){const d=t.value==="light"?"dark":"light";t.value=d,ct(d)}function r(){const d=_t();t.value=d,ct(d)}return{currentTheme:t,toggleTheme:n,initTheme:r}});async function dn(t){return await Pe.get("/todo-items",{params:t})}async function vn(t){return await Pe.get("/todo-items",{params:{...t,_force:1}})}async function mn(t,n){return await Pe.put(`/todo-items/${t}/status`,{status:n})}const $t=ht("todo",()=>{const t=h([]),n=h(null),r=h(!1),d=h("all"),u=O(()=>t.value.filter(B=>B.priority==="urgent").length),c=O(()=>t.value.filter(B=>B.priority==="high").length),s=O(()=>t.value.filter(B=>B.status==="pending"||B.status==="processing"));async function o(){try{r.value=!0;const B=d.value!=="all"?{type:d.value}:void 0,U=await dn(B);t.value=U.items}catch(B){console.error("获取待办列表失败:",B),t.value=[]}finally{r.value=!1}}async function i(){try{r.value=!0;const B=d.value!=="all"?{type:d.value}:void 0,U=await vn(B);t.value=U.items}catch(B){console.error("刷新待办列表失败:",B),t.value=[]}finally{r.value=!1}}async function _(B){d.value=B,await o()}function y(B){n.value=B}async function z(B,U){try{await mn(B,U),await o()}catch(k){console.error("更新待办状态失败:",k)}}return{todoList:t,currentTodoItem:n,loading:r,activeType:d,urgentCount:u,highCount:c,pendingTodos:s,fetchTodoList:o,refreshList:i,setActiveType:_,selectTodoItem:y,updateTodoItemStatus:z}}),fn={class:"conv-avatar-wrap"},pn=["src"],gn=["title"],yn={class:"conversation-info"},_n={class:"conversation-name"},hn={key:0,title:"已置顶"},bn={key:1,title:"代办"},kn={class:"text-ellipsis"},wn={key:2,class:"tag-badge tag-badge-vip"},$n={key:3,class:"tag-badge tag-badge-hand-raise"},Cn={key:4,class:"tag-badge tag-badge-need-intervene"},xn={key:6,class:"tag-badge tag-badge-agent"},In={key:7,class:"tag-badge tag-badge-pending-close"},Tn={class:"priority-icons"},Sn=["title"],Mn={class:"conversation-summ
|
|||
|
|
`)}const ee=["😀","😃","😄","😁","😆","😅","🤣","😂","🙂","😊","😇","🥰","😍","🤩","😘","😗","😚","😙","😋","😛","😜","🤪","😝","🤑","🤗","🤭","🤫","🤔","🤐","🤨","😐","😑","😶","😏","😒","🙄","😬","😮","🤯","😲","😳","🥺","😢","😭","😤","😠","😡","🤬","👍","👎","👏","🙌","🤝","💪","✌️","🤞","❤️","🧡","💛","💚","💙","💜","💯","✅"],W=O(()=>{const E=_.currentConversation;if(!E)return[];const w=[E.employee_id];return E.participants&&w.push(...E.participants.map(M=>M.id)),w}),g=O(()=>{const E=s.value;return E?E.selectionStart!==E.selectionEnd&&E.selectionEnd-E.selectionStart>=5:!1}),Y=O(()=>c.value.trim().length>0);function de(){_.fetchConversations()}function he(E){c.value+=E,R.value=!1,De(()=>{var w;(w=s.value)==null||w.focus()})}let Z=0,G=0,ce=0;Me(()=>_.pendingReplyText,E=>{E&&(c.value=E,_.pendingReplyText="",De(()=>{var w;(w=s.value)==null||w.focus()}))}),Me(c,()=>{var w;const E=(w=_.currentConversation)==null?void 0:w.id;E&&c.value.trim()&&y(E)}),Me(()=>H.finalText+"|"+H.interimText,()=>{if(H.isListening){const E=F.value,w=Q(E)?" ":"";c.value=E+w+H.finalText+H.interimText}}),Me(()=>H.isListening,(E,w)=>{if(w&&!E){const M=F.value,C=Q(M)?" ":"";c.value=M+C+H.finalText,J()}});function te(){if(!H.isSupported){ie.warning("当前浏览器不支持语音识别,请使用 Chrome 或 Edge");return}H.isListening?(b(),ie.success("语音识别已停止")):(F.value=c.value,V(),H.isListening?ie.info("正在聆听..."):H.error&&ie.error(H.error))}function ue(E){E.ctrlKey&&(E.key==="d"||E.key==="D")&&(E.preventDefault(),te())}function D(E){var w;E.preventDefault(),B.value=!0,Z=E.clientY,G=((w=i.value)==null?void 0:w.offsetHeight)||80,ce=z.value,document.addEventListener("mousemove",N),document.addEventListener("mouseup",oe),document.body.style.cursor="row-resize",document.body.style.userSelect="none"}function N(E){if(!B.value)return;const w=Z-E.clientY,C=Math.max(80,Math.min(400,G+w))-G,I=Math.max(60,Math.min(300,ce+C));z.value=I}function oe(){B.value=!1,document.removeEventListener("mousemove",N),document.removeEventListener("mouseup",oe),document.body.style.cursor="",document.body.style.userSelect=""}function q(E){if(x.ghostText.value){if(E.key==="Tab"&&!E.shiftKey){E.preventDefault(),x.acceptCompletion();return}if(E.key==="Tab"&&E.shiftKey){E.preventDefault(),x.acceptCompletionWord();return}if(E.key==="Escape"){E.preventDefault(),x.clearCompletion();return}}if(E.key==="Enter"&&E.ctrlKey&&!E.shiftKey){E.preventDefault(),E.stopPropagation(),X();return}E.key==="Enter"&&!E.shiftKey&&(E.preventDefault(),X())}async function X(){var I;const E=c.value.trim(),w=p.hasImages.value,M=E.length>0;if(!w&&!M)return;const C=(I=_.currentConversation)==null?void 0:I.id;if(!C){ie.warning("请先选择一个会话");return}w&&await me(C),M&&u("send",E),c.value="",z.value=60}async function me(E){var I,m;ie.info("发送中...");const w=[...p.images.value];let M=0,C=0;for(const ae of w)try{const re=await at(ae.blob),ve=await nt(E,"[图片]","image",{media_url:re.url,file_name:re.filename,file_size:re.file_size});_.messages.push(ve),M++}catch(re){C++,console.error("[ReplyBox] 图片发送失败:",re);const ve=d((m=(I=re==null?void 0:re.response)==null?void 0:I.data)==null?void 0:m.detail)||(re==null?void 0:re.message)||"未知错误";ie.error(`图片发送失败:${ve}`)}p.clearAll(),M>0&&C===0?ie.success("发送成功"):M>0&&C>0&&ie.warning(`${M} 张发送成功,${C} 张发送失败`)}async function _e(E){const w=E.clipboardData;if(!w)return;const M=w.items;if(!(!M||M.length===0))for(const C of Array.from(M)){if(C.kind==="file"){E.preventDefault();const I=C.getAsFile();if(!I)continue;I.type.startsWith("image/")||I.name.match(/\.(jpg|jpeg|png|gif|bmp|webp|svg|ico|tiff?)$/i)?await pe(I):await ne(I);return}if(C.type.startsWith("image/")&&C.kind==="string"){E.preventDefault();const I=C.getAsFile();if(I){await pe(I);return}}if(C.kind==="string"&&C.type.startsWith("image/")){E.preventDefault();const I=C.getAsFile();if(I){await
|