3 lines
160 KiB
JavaScript
3 lines
160 KiB
JavaScript
import{u as Pe,g as Ut,i as Nt,r as jt,p as Wt,a as qt,b as Ft,s as nt,c as Ht}from"./conversation-BQKKYvcD.js";import{a as ht,u as ut,b as Kt,v as Xt,c as Yt}from"./agent-Dxg35leS.js";import{v as bt,r as h,x as O,d as be,i as le,b as a,c as l,y as se,f as e,t as v,e as A,F as ge,z as we,A as Ve,n as ye,p as $e,w as P,h as K,m as ke,o as Ke,a as Xe,u as L,g as C,B as qe,E as ie,C as Qt,D as Gt,G as Me,H as De,I as St,J as yt,K as He,L as Mt,M as Jt,s as Rt,N as kt,O as Zt,l as tt,T as At,P as en,Q as tn,R as nn,S as an}from"./index-CnIbBo4X.js";import{a as Be}from"./index-ra8jRslb.js";import{A as sn}from"./AiAssistantPanel-Ijo7E7oT.js";async function on(t){const n={};return await Be.get("/quick-replies",{params:n})}async function ln(t){return await Be.post("/quick-replies",t)}async function rn(t,n){return await Be.put(`/quick-replies/${t}`,n)}async function cn(t){await Be.delete(`/quick-replies/${t}`)}const wt=bt("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=bt("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 Be.get("/todo-items",{params:t})}async function vn(t){return await Be.get("/todo-items",{params:{...t,_force:1}})}async function mn(t,n){return await Be.put(`/todo-items/${t}/status`,{status:n})}const $t=bt("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-summary-row"},Rn={class:"conversation-summary"},An={class:"conversation-time"},Ln={class:"conversation-meta"},En={class:"urgency-stars"},Dn=["title"],Pn=be({__name:"ConversationItem",props:{conversation:{},active:{type:Boolean},showGrab:{type:Boolean,default:!1},showLeave:{type:Boolean,default:!1},section:{default:"my"}},emits:["click","grab","leave"],setup(t){const n=[{key:"is_blocking",icon:"⛔",cssClass:"pi-blocked",bg:"var(--color-danger)",title:"阻断性问题"},{key:"impact_scope",icon:"👥",cssClass:"pi-impact",bg:"var(--color-warning)",highThreshold:5,title:"影响范围广"},{key:"role_level",icon:"⭐",cssClass:"pi-role",bg:"var(--purple)",title:"高角色等级"},{key:"is_repeat",icon:"🔁",cssClass:"pi-repeat",bg:"var(--color-warning)",title:"重复问题"}],r=["av-blue","av-green","av-orange","av-purple","av-red","av-teal","av-pink"],d=["ta-blue","ta-green","ta-orange","ta-purple","ta-red","ta-teal","ta-pink"];function u(V){let b=0;for(let J=0;J<V.length;J++)b=(b<<5)-b+V.charCodeAt(J)|0;return Math.abs(b)%r.length}const c=t,s=O(()=>!!c.conversation.avatar),o=h(!1),i=O(()=>{const V=c.conversation.employee_name;return V?V.charAt(V.length-1):"?"}),_=O(()=>{const V=c.conversation.employee_name||"unknown";return r[u(V)]}),y=O(()=>{var V,b;return c.conversation.status==="queued"||(V=c.conversation.tags)!=null&&V.hand_raise||(b=c.conversation.tags)!=null&&b.need_intervene?!0:c.conversation.status==="resolved"?!1:c.conversation.status==="serving"}),z=O(()=>{var V,b,J,x;return(V=c.conversation.tags)!=null&&V.hand_raise||c.conversation.is_blocking||(b=c.conversation.tags)!=null&&b.need_intervene||((J=c.conversation.tags)==null?void 0:J.emotion)==="angry"||((x=c.conversation.tags)==null?void 0:x.emotion)==="urgent"?"dot-urgent":c.conversation.status==="resolved"?"":(c.conversation.status==="queued","dot-normal")}),B=O(()=>z.value==="dot-urgent"?"紧急新消息":z.value==="dot-normal"?"有新消息":"新消息"),U=O(()=>c.section!=="history"),k=O(()=>{if(c.section==="colleague")return c.conversation.assigned_agent_name?c.conversation.assigned_agent_name.charAt(c.conversation.assigned_agent_name.length-1):"?";const V=c.conversation.employee_name;return V?V.charAt(V.length-1):"?"}),j=O(()=>{if(c.section==="colleague"){const b=c.conversation.assigned_agent_name||"unknown";return d[u(b)]}const V=c.conversation.employee_name||"unknown";return d[u(V)]}),T=O(()=>c.section==="colleague"?`坐席:${c.conversation.assigned_agent_name||"未知"}`:c.conversation.employee_name||"未知"),R=O(()=>{var b;const V=(b=c.conversation.tags)==null?void 0:b.emotion;return V==="urgent"?"tag-badge-emotion-urgent":V==="angry"?"tag-badge-emotion-angry":V==="worried"?"tag-badge-emotion-worried":""}),S=O(()=>{var b;return{urgent:"🔴紧急",angry:"😡愤怒",worried:"😟担忧"}[((b=c.conversation.tags)==null?void 0:b.emotion)||""]||""}),f=O(()=>{const V=c.conversation.last_message_at;if(!V)return"";const b=new Date(V),J=new Date,x=J.getTime()-b.getTime(),F=Math.floor(x/6e4);if(F<1)return"刚刚";if(F<60)return`${F}分钟前`;if(b.toDateString()===J.toDateString())return`${String(b.getHours()).padStart(2,"0")}:${String(b.getMinutes()).padStart(2,"0")}`;const Q=new Date(J);return Q.setDate(Q.getDate()-1),b.toDateString()===Q.toDateString()?"昨天":`${b.getMonth()+1}/${b.getDate()}`}),p=O(()=>{var J;const V=[],b=c.conversation;for(const x of n){let F=!1,Q=x.title;switch(x.key){case"is_blocking":F=!!b.is_blocking;break;case"impact_scope":F=(b.impact_scope||0)>=(x.highThreshold||5),F&&(Q=`影响范围: ${b.impact_scope}人`);break;case"role_level":F=H(b);break;case"is_repeat":F=(((J=b.tags)==null?void 0:J.repeat_count)||0)>=3,F&&(Q=`重复追问: ${b.tags.repeat_count}次`);break}F&&V.push({...x,title:Q})}return V});function H(V){const b=["总监","VP","CIO","CTO","CFO","CEO","总裁","副总","高级总监"],J=V.level||"";return b.some(x=>J.includes(x))}return(V,b)=>{var x,F,Q;const J=le("el-button");return a(),l("div",{class:se(["conversation-item",{active:t.active,resolved:t.conversation.status==="resolved","pending-close":t.conversation.status==="pending_close","other-agent":!t.conversation.is_mine&&t.conversation.status==="serving"}]),onClick:b[3]||(b[3]=ee=>V.$emit("click"))},[e("div",fn,[s.value&&!o.value?(a(),l("img",{key:0,src:t.conversation.avatar,class:"conversation-avatar-img",onError:b[0]||(b[0]=ee=>o.value=!0)},null,40,pn)):(a(),l("div",{key:1,class:se(["conversation-avatar",_.value])},v(i.value),3)),y.value?(a(),l("span",{key:2,class:se(["new-msg-dot",z.value]),title:B.value},null,10,gn)):A("",!0)]),e("div",yn,[e("div",_n,[t.conversation.is_pinned?(a(),l("span",hn,"📌")):A("",!0),t.conversation.is_todo?(a(),l("span",bn,"📋")):A("",!0),e("span",kn,v(t.conversation.employee_name||"未知"),1),t.conversation.is_vip?(a(),l("span",wn,"VIP")):A("",!0),(x=t.conversation.tags)!=null&&x.hand_raise?(a(),l("span",$n,"招手")):A("",!0),(F=t.conversation.tags)!=null&&F.need_intervene?(a(),l("span",Cn,"🔔需介入")):A("",!0),(Q=t.conversation.tags)!=null&&Q.emotion&&t.conversation.tags.emotion!=="neutral"?(a(),l("span",{key:5,class:se(["tag-badge",R.value])},v(S.value),3)):A("",!0),t.conversation.assigned_agent_name&&!t.conversation.is_mine&&t.conversation.status==="serving"?(a(),l("span",xn,v(t.conversation.assigned_agent_name),1)):A("",!0),t.conversation.status==="pending_close"?(a(),l("span",In," ⏳ 待确认 ")):A("",!0),e("span",Tn,[(a(!0),l(ge,null,we(p.value,ee=>(a(),l("span",{key:ee.key,class:se(["priority-icon",ee.cssClass]),title:ee.title,style:Ve({backgroundColor:ee.bg})},v(ee.icon),15,Sn))),128))])]),e("div",Mn,[e("span",Rn,v(t.conversation.last_message_summary||"暂无消息"),1),e("span",An,v(f.value),1)]),e("div",Ln,[e("div",En,[(a(),l(ge,null,we(5,ee=>e("span",{key:ee,class:se(["urgency-star",{empty:ee>t.conversation.urgency_score}])},"★",2)),64))]),t.showGrab&&t.conversation.can_grab?(a(),ye(J,{key:0,type:"primary",size:"small",link:"",class:"grab-btn",onClick:b[1]||(b[1]=$e(ee=>V.$emit("grab"),["stop"]))},{default:P(()=>[...b[4]||(b[4]=[K(" 接手 ",-1)])]),_:1})):A("",!0),t.showLeave?(a(),ye(J,{key:1,type:"danger",size:"small",link:"",class:"leave-btn",onClick:b[2]||(b[2]=$e(ee=>V.$emit("leave"),["stop"]))},{default:P(()=>[...b[5]||(b[5]=[K(" 退出 ",-1)])]),_:1})):A("",!0)])]),U.value?(a(),l("div",{key:0,class:se(["conv-target-avatar",j.value]),title:T.value},v(k.value),11,Dn)):A("",!0)],2)}}}),ft=ke(Pn,[["__scopeId","data-v-0f8e48ba"]]),Bn={class:"todo-panel"},Vn={class:"todo-header"},On={class:"todo-header-left"},zn={key:0,class:"todo-urgent-badge"},Un={class:"todo-header-right"},Nn={class:"todo-tabs"},jn=["disabled"],Wn={class:"todo-list"},qn={key:0,class:"todo-loading"},Fn=["onClick"],Hn={class:"todo-text text-ellipsis"},Kn={class:"todo-time"},Xn=["title"],Yn={key:1,class:"todo-empty"},Qn={class:"todo-footer"},Gn={class:"agent-stat"},Jn={class:"agent-stat"},Zn={class:"agent-stat"},ea=6e4,ta=be({__name:"TodoPanel",setup(t){const n=$t(),r=Pe(),d=Ut(),u=h(d.onlineAgents),c=h(d.busyAgents),s=h(d.offlineAgents);let o=null;Ke(()=>{n.fetchTodoList(),o=setInterval(()=>{n.fetchTodoList()},ea)}),Xe(()=>{o&&(clearInterval(o),o=null)});function i(S){return{ticket:"工单",approval:"审批"}[S]||S}function _(S){if(!S)return"";const f=new Date(S),p=new Date,H=p.getTime()-f.getTime(),V=Math.floor(H/6e4);return V<1?"刚刚":V<60?`${V}分钟前`:f.toDateString()===p.toDateString()?`${String(f.getHours()).padStart(2,"0")}:${String(f.getMinutes()).padStart(2,"0")}`:`${f.getMonth()+1}/${f.getDate()}`}function y(S){n.selectTodoItem(S),r.workspaceView="task"}function z(S){n.setActiveType(S)}function B(){n.refreshList()}const U=["ka-blue","ka-green","ka-orange","ka-purple","ka-red"];function k(S){let f=0;for(let p=0;p<S.length;p++)f=(f<<5)-f+S.charCodeAt(p)|0;return Math.abs(f)%U.length}function j(S){const f=S.title||"",p=f.indexOf(" - ");if(p>=0){const H=f.substring(0,p).trim();return H.charAt(H.length-1)}return f.charAt(0)}function T(S){return U[k(S.title||"default")]}function R(S){const f=S.title||"",p=f.indexOf(" - ");return p>=0?f.substring(0,p).trim():f}return(S,f)=>(a(),l("div",Bn,[e("div",Vn,[e("div",On,[f[3]||(f[3]=e("span",{class:"todo-title"},"📋 待办事项",-1)),L(n).urgentCount>0?(a(),l("span",zn,v(L(n).urgentCount),1)):A("",!0)]),e("div",Un,[e("div",Nn,[e("button",{class:se(["todo-tab",{"todo-tab-active":L(n).activeType==="all"}]),onClick:f[0]||(f[0]=p=>z("all"))},"全部",2),e("button",{class:se(["todo-tab",{"todo-tab-active":L(n).activeType==="approval"}]),onClick:f[1]||(f[1]=p=>z("approval"))},"审批",2),e("button",{class:se(["todo-tab",{"todo-tab-active":L(n).activeType==="ticket"}]),onClick:f[2]||(f[2]=p=>z("ticket"))},"工单",2)]),e("button",{class:se(["todo-refresh-btn",{"todo-refreshing":L(n).loading}]),disabled:L(n).loading,title:"刷新待办列表",onClick:B},"🔄",10,jn)])]),e("div",Wn,[L(n).loading&&L(n).pendingTodos.length===0?(a(),l("div",qn," 加载中... ")):A("",!0),(a(!0),l(ge,null,we(L(n).pendingTodos,p=>{var H;return a(),l("div",{key:p.id,class:se(["todo-item",{"todo-item-active":((H=L(n).currentTodoItem)==null?void 0:H.id)===p.id}]),onClick:V=>y(p)},[e("span",{class:se(["todo-priority-dot",`priority-${p.priority}`])},null,2),e("span",Hn,v(p.title),1),e("span",{class:se(["todo-type-tag",`type-${p.type}`])},v(i(p.type)),3),e("span",Kn,v(_(p.created_at)),1),e("div",{class:se(["ki-avatar",T(p)]),title:R(p)},v(j(p)),11,Xn)],10,Fn)}),128)),L(n).pendingTodos.length===0&&!L(n).loading?(a(),l("div",Yn," 暂无待办 ")):A("",!0)]),e("div",Qn,[e("span",Gn,[f[4]||(f[4]=e("span",{class:"agent-dot dot-online"},null,-1)),e("span",null,v(u.value)+" 在线",1)]),e("span",Jn,[f[5]||(f[5]=e("span",{class:"agent-dot dot-busy"},null,-1)),e("span",null,v(c.value)+" 忙碌",1)]),e("span",Zn,[f[6]||(f[6]=e("span",{class:"agent-dot dot-offline"},null,-1)),e("span",null,v(s.value)+" 离线",1)])])]))}}),na=ke(ta,[["__scopeId","data-v-e790eb7c"]]),aa={class:"conversation-list-root"},sa={class:"sidebar-search"},oa={class:"filter-tags"},la=["onClick"],ia={class:"conversation-list-scroll"},ra={key:0,class:"loading-state"},ca={key:1,class:"empty-state"},ua=be({__name:"ConversationList",setup(t){const n=[{key:"all",label:"全部"},{key:"pending",label:"待处理"},{key:"active",label:"进行中"},{key:"done",label:"已完成"}],r=Pe(),d=$t(),u=h(""),c=h("all");function s(B){let U=B;if(u.value.trim()){const k=u.value.trim().toLowerCase();U=U.filter(j=>j.employee_name.toLowerCase().includes(k)||j.department.toLowerCase().includes(k)||j.last_message_summary.toLowerCase().includes(k))}return c.value!=="all"&&(U=U.filter(k=>{switch(c.value){case"pending":return k.status==="queued";case"active":return k.status==="serving"||k.status==="ai_handling";case"done":return k.status==="resolved";default:return!0}})),U}const o=O(()=>s(r.myConversations)),i=O(()=>s(r.colleagueConversations)),_=O(()=>s(r.historyConversations));async function y(B){const U=B.assigned_agent_name||"其他坐席";try{await qe.confirm(`确定要接手 ${U} 的会话吗?接手后该会话将归您处理。`,"接手确认",{confirmButtonText:"确认接手",cancelButtonText:"取消",type:"warning"}),await r.grabConv(B.id),ie.success("接手成功")}catch(k){k!=="cancel"&&(k!=null&&k.message)&&ie.error(k.message||"接手失败")}}async function z(B){const U=B.assigned_agent_name||"主责坐席";try{await qe.confirm(`确定要退出 ${U} 的协作会话吗?`,"退出确认",{confirmButtonText:"确认退出",cancelButtonText:"取消",type:"warning"}),await r.leaveConvCollaboration(B.id),ie.success("已退出协作")}catch(k){k!=="cancel"&&(k!=null&&k.message)&&ie.error(k.message||"退出失败")}}return Ke(()=>{d.fetchTodoList()}),(B,U)=>{const k=le("el-input"),j=le("Loading"),T=le("el-icon"),R=le("el-empty");return a(),l("div",aa,[e("div",sa,[C(k,{modelValue:u.value,"onUpdate:modelValue":U[0]||(U[0]=S=>u.value=S),placeholder:"搜索用户、关键词...","prefix-icon":"Search",clearable:"",size:"default"},null,8,["modelValue"]),e("div",oa,[(a(),l(ge,null,we(n,S=>e("span",{key:S.key,class:se(["filter-tag",{active:c.value===S.key}]),onClick:f=>c.value=S.key},v(S.label),11,la)),64))])]),e("div",ia,[L(r).loadingConversations?(a(),l("div",ra,[C(T,{class:"is-loading",size:20},{default:P(()=>[C(j)]),_:1}),U[1]||(U[1]=e("div",{class:"loading-text"},"加载中...",-1))])):A("",!0),(a(!0),l(ge,null,we(o.value,S=>(a(),ye(ft,{key:S.id,conversation:S,active:S.id===L(r).currentConversationId,"show-grab":S.status==="serving"&&!S.is_mine&&!S.is_collaborator,"show-leave":S.is_collaborator&&S.status==="serving",section:"my",onClick:f=>L(r).selectConversation(S.id),onGrab:f=>y(S),onLeave:f=>z(S)},null,8,["conversation","active","show-grab","show-leave","onClick","onGrab","onLeave"]))),128)),(a(!0),l(ge,null,we(i.value,S=>(a(),ye(ft,{key:S.id,conversation:S,active:S.id===L(r).currentConversationId,"show-grab":S.status==="serving"&&!S.is_mine,section:"colleague",onClick:f=>L(r).selectConversation(S.id),onGrab:f=>y(S)},null,8,["conversation","active","show-grab","onClick","onGrab"]))),128)),(a(!0),l(ge,null,we(_.value,S=>(a(),ye(ft,{key:S.id,conversation:S,active:S.id===L(r).currentConversationId,section:"history",onClick:f=>L(r).selectConversation(S.id)},null,8,["conversation","active","onClick"]))),128)),!L(r).loadingConversations&&L(r).conversations.length===0?(a(),l("div",ca,[C(R,{description:"暂无会话","image-size":80})])):A("",!0)]),C(na)])}}}),da=ke(ua,[["__scopeId","data-v-d0763629"]]),va="/itagent/duckula.webp",ma={class:"contact-card-inline"},fa={class:"contact-card-inline__header"},pa=["src"],ga={key:1},ya={class:"contact-card-inline__name-row"},_a={class:"contact-card-inline__name"},ha={class:"contact-card-inline__dept"},ba={class:"contact-card-inline__body"},ka={class:"contact-card-inline__info-item"},wa={class:"contact-card-inline__info-value contact-card-inline__info-value--highlight"},$a={key:0,class:"contact-card-inline__info-item"},Ca={class:"contact-card-inline__info-value"},xa={key:1,class:"contact-card-inline__info-item"},Ia={class:"contact-card-inline__info-label"},Ta={class:"contact-card-inline__info-value"},Sa={key:0,class:"contact-card-inline__reason"},Ma=be({__name:"ContactCardInline",props:{contact:{},routingReason:{}},setup(t){const n=t,r=O(()=>n.contact.name?n.contact.name.charAt(0):"?"),d=O(()=>{const o=["gradient-1","gradient-2","gradient-3","gradient-4","gradient-5"];if(!n.contact.name)return o[0];const i=n.contact.name.charCodeAt(0);return o[i%o.length]}),u=O(()=>n.contact.gender==="female"?"♀":"♂"),c=O(()=>n.contact.gender==="female"?"gender-female":"gender-male"),s=O(()=>n.contact.business_category==="行政-物业"?"办公地点":"服务区域");return(o,i)=>{const _=le("el-tag"),y=le("el-icon");return a(),l("div",ma,[e("div",fa,[e("div",{class:se(["contact-card-inline__avatar",d.value])},[t.contact.avatar_url?(a(),l("img",{key:0,src:t.contact.avatar_url,alt:"",class:"contact-card-inline__avatar-img"},null,8,pa)):(a(),l("span",ga,v(r.value),1))],2),e("div",ya,[e("div",_a,[K(v(t.contact.name)+" ",1),e("span",{class:se(["contact-card-inline__gender",c.value])},v(u.value),3)]),e("div",ha,v(t.contact.department)+" · "+v(t.contact.position),1)]),C(_,{size:"small",type:"info",effect:"plain",class:"contact-card-inline__badge"},{default:P(()=>[...i[0]||(i[0]=[K(" 员工名片 ",-1)])]),_:1})]),e("div",ba,[e("div",ka,[i[1]||(i[1]=e("span",{class:"contact-card-inline__info-label"},"负责业务",-1)),e("span",wa,v(t.contact.responsibility),1)]),t.contact.extension?(a(),l("div",$a,[i[2]||(i[2]=e("span",{class:"contact-card-inline__info-label"},"分机号",-1)),e("span",Ca,v(t.contact.extension),1)])):A("",!0),t.contact.service_area?(a(),l("div",xa,[e("span",Ia,v(s.value),1),e("span",Ta,v(t.contact.service_area),1)])):A("",!0)]),t.routingReason?(a(),l("div",Sa,[C(y,{size:12},{default:P(()=>[C(L(Qt))]),_:1}),e("span",null,v(t.routingReason),1)])):A("",!0)])}}}),Ra=ke(Ma,[["__scopeId","data-v-d533ed0f"]]),Aa={key:0,class:"message-bubble message-system"},La={class:"message-sender-name"},Ea={key:0,src:va,class:"duckula-avatar",alt:"Duckula"},Da={class:"reply-quote-text"},Pa={class:"reply-quote-sender"},Ba={key:1,style:{"white-space":"pre-wrap"}},Va=["src","alt"],Oa={key:1,class:"media-card"},za={class:"media-info"},Ua={key:0,class:"media-filename"},Na=["href"],ja={class:"media-info"},Wa={class:"media-type-label"},qa={key:0,class:"media-size"},Fa={key:1,class:"media-card"},Ha={class:"media-info"},Ka={class:"media-type-label"},Xa={key:0,class:"media-size"},Ya={style:{"white-space":"pre-wrap"}},Qa={key:0,class:"ai-structured-options"},Ga={key:1,class:"ai-structured-action"},Ja={class:"ai-structured-action__text"},Za={style:{"white-space":"pre-wrap"}},es={key:0,class:"byod-summary"},ts={key:0,class:"byod-summary__category"},ns={key:7,class:"media-card"},as={class:"media-icon"},ss={class:"media-info"},os={class:"media-type-label"},ls={key:0,class:"media-filename"},is={key:1,class:"media-size"},rs={key:8,class:"bubble-actions"},cs={class:"message-time"},us=be({__name:"MessageBubble",props:{message:{}},emits:["scrollToMessage","reply"],setup(t){const n=t,r=Pe(),{copy:d}=Gt(),u=h(!1),c=h(!1);async function s(){try{await d(n.message.content),c.value=!0,setTimeout(()=>{c.value=!1},1500)}catch(T){console.error("复制失败:",T)}}const o=O(()=>{var R;return{employee:n.message.sender_name||((R=r.currentConversation)==null?void 0:R.employee_name)||"未知",agent:n.message.sender_name||"我",ai:"Duckula(达寇拉)"}[n.message.sender_type]||"未知"}),i=O(()=>{if(!n.message.created_at)return"";const T=new Date(n.message.created_at),R=String(T.getHours()).padStart(2,"0"),S=String(T.getMinutes()).padStart(2,"0");return`${R}:${S}`}),_=O(()=>({image:"🖼️",voice:"🎤",video:"🎬",file:"📎",location:"📍"})[n.message.msg_type]||"📄"),y=O(()=>({image:"图片消息",voice:"语音消息",video:"视频消息",file:"文件消息",location:"位置消息"})[n.message.msg_type]||"媒体消息"),z=O(()=>{var S,f;const T=(f=(S=n.message.extra_data)==null?void 0:S.action)==null?void 0:f.type;return{approval_card:"审批卡片",action_card:"操作卡片",info_card:"信息卡片"}[T]||"推荐卡片"});function B(T){return T<1024?`${T} B`:T<1024*1024?`${(T/1024).toFixed(1)} KB`:`${(T/(1024*1024)).toFixed(1)} MB`}function U(){var R;const T=n.message.media_url||((R=n.message.extra_data)==null?void 0:R.pic_url);T&&window.open(T,"_blank")}const k=O(()=>{if(!n.message.reply_to_id)return"";const T=r.messages.find(S=>S.id===n.message.reply_to_id);if(!T)return"...";const R=T.content||"";return R.length>50?R.substring(0,50)+"...":R}),j=O(()=>{if(!n.message.reply_to_id)return"";const T=r.messages.find(R=>R.id===n.message.reply_to_id);return T?T.sender_name||"未知":""});return(T,R)=>{var S,f,p,H,V,b,J,x;return a(),l("div",{class:se(["message-row",`message-row-${t.message.sender_type}`])},[t.message.sender_type==="system"?(a(),l("div",Aa,v(t.message.content),1)):(a(),l(ge,{key:1},[e("div",La,[K(v(o.value)+" ",1),t.message.sender_type==="ai"?(a(),l("img",Ea)):A("",!0)]),e("div",{class:se(["message-bubble",`message-${t.message.sender_type}`]),onMouseenter:R[2]||(R[2]=F=>u.value=!0),onMouseleave:R[3]||(R[3]=F=>u.value=!1)},[t.message.reply_to_id&&k.value?(a(),l("div",{key:0,class:"reply-quote",onClick:R[0]||(R[0]=$e(F=>T.$emit("scrollToMessage",t.message.reply_to_id),["stop"]))},[R[4]||(R[4]=e("div",{class:"reply-quote-bar"},null,-1)),e("div",Da,[e("span",Pa,v(j.value),1),K(" "+v(k.value),1)])])):A("",!0),t.message.msg_type==="text"?(a(),l("div",Ba,v(t.message.content),1)):t.message.msg_type==="image"?(a(),l("div",{key:2,class:"image-message",onClick:U},[t.message.media_url||(S=t.message.extra_data)!=null&&S.pic_url?(a(),l("img",{key:0,src:t.message.media_url||((f=t.message.extra_data)==null?void 0:f.pic_url),alt:t.message.file_name||"图片",class:"image-thumbnail",loading:"lazy"},null,8,Va)):(a(),l("div",Oa,[R[6]||(R[6]=e("div",{class:"media-icon"},"🖼️",-1)),e("div",za,[R[5]||(R[5]=e("span",{class:"media-type-label"},"图片消息",-1)),t.message.file_name?(a(),l("span",Ua,v(t.message.file_name),1)):A("",!0)])]))])):t.message.msg_type==="file"?(a(),l(ge,{key:3},[t.message.media_url?(a(),l("a",{key:0,href:t.message.media_url,target:"_blank",class:"media-card media-card-link"},[R[7]||(R[7]=e("div",{class:"media-icon"},"📎",-1)),e("div",ja,[e("span",Wa,v(t.message.file_name||"文件消息"),1),t.message.file_size?(a(),l("span",qa,v(B(t.message.file_size)),1)):A("",!0)])],8,Na)):(a(),l("div",Fa,[R[8]||(R[8]=e("div",{class:"media-icon"},"📎",-1)),e("div",Ha,[e("span",Ka,v(t.message.file_name||"文件消息"),1),t.message.file_size?(a(),l("span",Xa,v(B(t.message.file_size)),1)):A("",!0)])]))],64)):t.message.msg_type==="contact_card"?(a(),ye(Ra,{key:4,contact:((p=t.message.extra_data)==null?void 0:p.contact)??{},"routing-reason":((H=t.message.extra_data)==null?void 0:H.routing_reason)??""},null,8,["contact","routing-reason"])):t.message.msg_type==="ai_structured"?(a(),l(ge,{key:5},[e("div",Ya,v(t.message.content),1),(b=(V=t.message.extra_data)==null?void 0:V.options)!=null&&b.length?(a(),l("div",Qa,[R[9]||(R[9]=e("span",{class:"ai-structured-options__label"},"推荐选项:",-1)),(a(!0),l(ge,null,we(t.message.extra_data.options,(F,Q)=>(a(),l("span",{key:Q,class:"ai-structured-options__tag"},v(F.label||F.value),1))),128))])):A("",!0),(J=t.message.extra_data)!=null&&J.action?(a(),l("div",Ga,[R[10]||(R[10]=e("span",{class:"ai-structured-action__icon"},"📌",-1)),e("span",Ja," 已推送"+v(z.value)+":"+v(t.message.extra_data.action.title||"智能推荐"),1)])):A("",!0)],64)):t.message.msg_type==="byod_card"?(a(),l(ge,{key:6},[e("div",Za,v(t.message.content),1),(x=t.message.extra_data)!=null&&x.byod_result?(a(),l("div",es,[e("span",{class:se(["byod-summary__badge",{"byod-summary__badge--eligible":t.message.extra_data.byod_result.eligible}])},v(t.message.extra_data.byod_result.eligible?"符合补贴":"可登记"),3),t.message.extra_data.byod_result.matched_category?(a(),l("span",ts,v(t.message.extra_data.byod_result.matched_category),1)):A("",!0)])):A("",!0)],64)):(a(),l("div",ns,[e("div",as,v(_.value),1),e("div",ss,[e("span",os,v(y.value),1),t.message.file_name?(a(),l("span",ls,v(t.message.file_name),1)):A("",!0),t.message.file_size?(a(),l("span",is,v(B(t.message.file_size)),1)):A("",!0)])])),u.value?(a(),l("div",rs,[t.message.msg_type==="text"?(a(),l("button",{key:0,class:"action-btn",title:"复制消息",onClick:$e(s,["stop"])},v(c.value?"✓":"📋"),1)):A("",!0),e("button",{class:"action-btn",title:"回复",onClick:R[1]||(R[1]=$e(F=>T.$emit("reply",t.message),["stop"]))}," ↩ ")])):A("",!0)],34),e("div",cs,v(i.value),1)],64))],2)}}}),ds=ke(us,[["__scopeId","data-v-37239c1d"]]);async function vs(t){return await Be.get("/agent/employees/search",{params:{keyword:t}})}async function ms(){return await Be.get("/agent/org/tree")}const fs={class:"search-area"},ps={key:0,class:"empty-hint"},gs={key:1,class:"empty-hint"},ys=["onClick"],_s={class:"person-avatar"},hs=["src","alt","onError"],bs={key:1,class:"avatar-letter"},ks={class:"person-info"},ws={class:"person-name"},$s={class:"person-dept"},Cs={key:2,class:"manual-add"},xs={class:"org-tree-area"},Is={class:"tree-node"},Ts={class:"tree-node-label"},Ss={key:0,class:"tree-node-dept"},Ms={key:1,class:"empty-hint"},Rs={key:0,class:"selected-area"},As={class:"selected-header"},Ls={class:"selected-tags"},Es={class:"history-mode"},Ds={class:"dialog-footer"},Ps=be({__name:"InviteParticipantDialog",props:{modelValue:{type:Boolean},conversationId:{},existingParticipantIds:{default:()=>[]}},emits:["update:modelValue","success"],setup(t,{emit:n}){const r=t,d=n,u=h(r.modelValue),c=h({}),s=h("search"),o=h(""),i=h([]),_=h(!1),y=h([]),z=h("recent10"),B=h(!1),U=h([]),k=h(!1),j=h(!1),T=h(null);let R=null;const S=O(()=>new Set(r.existingParticipantIds)),f=O(()=>U.value.map(Z=>Z.id)),p={label:"label",children:"children",disabled:Z=>Z.isLeaf===!0&&S.value.has(Z.id)};Me(()=>r.modelValue,Z=>{u.value=Z,Z&&(s.value="search",o.value="",i.value=[],y.value=[],z.value="recent10",c.value={},R&&(clearTimeout(R),R=null),De(()=>{T.value&&T.value.setCheckedKeys([])}))}),Me(u,Z=>{d("update:modelValue",Z)}),Me(o,()=>{R&&clearTimeout(R),R=setTimeout(()=>{V()},300)}),Me(s,Z=>{Z==="org"&&!k.value&&J()});function H(Z){return Z?Z.charAt(Z.length-1):"?"}async function V(){const Z=o.value.trim();if(!Z){i.value=[];return}_.value=!0;try{const G=await vs(Z);i.value=G.filter(ce=>!S.value.has(ce.id)).map(ce=>({id:ce.id,name:ce.name,department:ce.department,type:"employee"}))}catch{i.value=[]}finally{_.value=!1}}function b(){R&&(clearTimeout(R),R=null),V()}async function J(){j.value=!0;try{if(U.value=await ms(),k.value=!0,await De(),T.value){const Z=x(U.value),G=y.value.filter(ce=>Z.has(ce.id)).map(ce=>ce.id);T.value.setCheckedKeys(G)}}catch{U.value=[]}finally{j.value=!1}}function x(Z){const G=new Set;function ce(te){var ue;if(te.isLeaf){G.add(te.id);return}(ue=te.children)==null||ue.forEach(ce)}return Z.forEach(ce),G}function F(){if(!T.value)return;const Z=T.value.getCheckedNodes(!0,!1).filter(ue=>ue.isLeaf===!0),G=x(U.value),ce=y.value.filter(ue=>!G.has(ue.id)),te=Z.map(ue=>({id:ue.id,name:ue.label,department:ue.department||"",type:"employee"}));y.value=[...ce,...te]}function Q(Z){return y.value.some(G=>G.id===Z)}function ee(Z){const G=y.value.findIndex(ce=>ce.id===Z.id);G>=0?y.value.splice(G,1):y.value.push(Z),k.value&&T.value&&Y()}function W(Z){const G=y.value.findIndex(ce=>ce.id===Z);G>=0&&y.value.splice(G,1),k.value&&T.value&&Y()}function g(){y.value=[],T.value&&T.value.setCheckedKeys([])}function Y(){if(!T.value)return;const Z=x(U.value),G=y.value.filter(ce=>Z.has(ce.id)).map(ce=>ce.id);T.value.setCheckedKeys(G)}function de(){const Z=o.value.trim();if(!Z)return;const G={id:`manual_${Date.now()}`,name:Z,department:"",type:"employee"};Q(G.id)||y.value.push(G),o.value="",i.value=[]}async function he(){var Z,G;if(y.value.length!==0){B.value=!0;try{const ce=await Nt(r.conversationId,{participants:y.value.map(te=>({id:te.id,name:te.name,department:te.department,type:te.type})),history_mode:z.value});ie.success(`已邀请 ${y.value.length} 人加入会话`),d("success",ce),u.value=!1}catch(ce){const te=((G=(Z=ce==null?void 0:ce.response)==null?void 0:Z.data)==null?void 0:G.message)||(ce==null?void 0:ce.message)||"邀请失败";ie.error(te)}finally{B.value=!1}}}return(Z,G)=>{const ce=le("el-input"),te=le("el-icon"),ue=le("el-button"),D=le("el-tab-pane"),N=le("el-tree"),oe=le("el-tabs"),q=le("el-tag"),X=le("el-radio-button"),me=le("el-radio-group"),_e=le("el-dialog"),pe=St("loading");return a(),ye(_e,{modelValue:u.value,"onUpdate:modelValue":G[4]||(G[4]=ne=>u.value=ne),title:"📋 邀请 — 邀请员工/部门加入会话",width:"520px","close-on-click-modal":!1,"destroy-on-close":""},{footer:P(()=>[e("div",Ds,[C(ue,{onClick:G[3]||(G[3]=ne=>u.value=!1)},{default:P(()=>[...G[10]||(G[10]=[K("取消",-1)])]),_:1}),C(ue,{type:"primary",disabled:y.value.length===0,loading:B.value,onClick:he},{default:P(()=>[K(" 确认邀请("+v(y.value.length)+"人) ",1)]),_:1},8,["disabled","loading"])])]),default:P(()=>[C(oe,{modelValue:s.value,"onUpdate:modelValue":G[1]||(G[1]=ne=>s.value=ne),class:"invite-tabs"},{default:P(()=>[C(D,{label:"搜索",name:"search"},{default:P(()=>[C(ce,{modelValue:o.value,"onUpdate:modelValue":G[0]||(G[0]=ne=>o.value=ne),placeholder:"搜索员工姓名或工号...","prefix-icon":"Search",clearable:"",style:{"margin-bottom":"12px"},onKeyup:yt(b,["enter"])},null,8,["modelValue"]),He((a(),l("div",fs,[!_.value&&i.value.length===0&&o.value?(a(),l("div",ps," 未找到匹配的员工,可直接输入添加 ")):A("",!0),!_.value&&i.value.length===0&&!o.value?(a(),l("div",gs," 请输入姓名或工号搜索,或直接手动添加 ")):A("",!0),(a(!0),l(ge,null,we(i.value,ne=>(a(),l("div",{key:ne.id,class:se(["person-item",{selected:Q(ne.id)}]),onClick:fe=>ee(ne)},[e("div",_s,[ne.avatar&&!c.value[ne.id]?(a(),l("img",{key:0,src:ne.avatar,alt:ne.name,class:"avatar-img",onError:fe=>c.value[ne.id]=!0},null,40,hs)):(a(),l("span",bs,v(H(ne.name)),1))]),e("div",ks,[e("div",ws,v(ne.name),1),e("div",$s,v(ne.department||"未知部门"),1)]),Q(ne.id)?(a(),ye(te,{key:0,class:"check-icon",color:"var(--accent)"},{default:P(()=>[C(L(Mt))]),_:1})):A("",!0)],10,ys))),128)),o.value&&i.value.length===0&&!_.value?(a(),l("div",Cs,[C(ue,{type:"primary",link:"",onClick:de},{default:P(()=>[C(te,null,{default:P(()=>[C(L(Jt))]),_:1}),K(" 手动添加「"+v(o.value)+"」 ",1)]),_:1})])):A("",!0)])),[[pe,_.value]])]),_:1}),C(D,{label:"组织架构",name:"org"},{default:P(()=>[He((a(),l("div",xs,[U.value.length>0?(a(),ye(N,{key:0,ref_key:"treeRef",ref:T,data:U.value,props:p,"node-key":"id","show-checkbox":"","default-expanded-keys":f.value,"expand-on-click-node":!1,onCheck:F},{default:P(({data:ne})=>[e("span",Is,[e("span",Ts,v(ne.label),1),ne.isLeaf&&ne.department?(a(),l("span",Ss,v(ne.department),1)):A("",!0)])]),_:1},8,["data","default-expanded-keys"])):A("",!0),!j.value&&U.value.length===0?(a(),l("div",Ms," 暂无组织架构数据 ")):A("",!0)])),[[pe,j.value]])]),_:1})]),_:1},8,["modelValue"]),y.value.length>0?(a(),l("div",Rs,[e("div",As,[e("span",null,"已选 "+v(y.value.length)+" 人",1),C(ue,{type:"primary",link:"",size:"small",onClick:g},{default:P(()=>[...G[5]||(G[5]=[K("清空",-1)])]),_:1})]),e("div",Ls,[(a(!0),l(ge,null,we(y.value,ne=>(a(),ye(q,{key:ne.id,closable:"",effect:"plain",onClose:fe=>W(ne.id)},{default:P(()=>[K(v(ne.name)+v(ne.department?`(${ne.department})`:""),1)]),_:2},1032,["onClose"]))),128))])])):A("",!0),e("div",Es,[G[9]||(G[9]=e("span",{class:"history-label"},"历史消息共享:",-1)),C(me,{modelValue:z.value,"onUpdate:modelValue":G[2]||(G[2]=ne=>z.value=ne),size:"small"},{default:P(()=>[C(X,{value:"recent10"},{default:P(()=>[...G[6]||(G[6]=[K("最近10条",-1)])]),_:1}),C(X,{value:"all"},{default:P(()=>[...G[7]||(G[7]=[K("全部",-1)])]),_:1}),C(X,{value:"none"},{default:P(()=>[...G[8]||(G[8]=[K("不共享",-1)])]),_:1})]),_:1},8,["modelValue"])])]),_:1},8,["modelValue"])}}}),Dt=ke(Ps,[["__scopeId","data-v-629bd8a1"]]),Bs={class:"screenshot-editor"},Vs={key:0,class:"crop-mode"},Os={class:"crop-header"},zs=["src"],Us={class:"crop-footer"},Ns={key:1,class:"edit-mode"},js={class:"edit-toolbar"},Ws={class:"tool-group"},qs=["onClick","title"],Fs={class:"color-picker"},Hs=["onClick"],Ks={class:"action-group"},Xs={class:"edit-footer"},Ys=be({__name:"ScreenshotEditor",props:{screenshotCanvas:{default:null}},emits:["confirm","cancel"],setup(t,{emit:n}){const r=t,d=n,u=h("crop"),c=h(""),s=h(null),o=h(null),i=Rt({x:0,y:0,width:0,height:0,show:!1,startX:0,startY:0});let _=0;const y=[{name:"brush",icon:"✎",label:"画笔"},{name:"highlighter",icon:"🖍",label:"高亮"},{name:"rect",icon:"□",label:"矩形"},{name:"arrow",icon:"➜",label:"箭头"},{name:"text",icon:"T",label:"文字"}],z=["#f44336","#e91e63","#2196f3","#4caf50","#ffeb3b","#000000"],B=h("brush"),U=h("#f44336"),k=h(null),j=h(null);let T=null,R=0,S=0;const f=h(!1),p=h(0),H=h(0),V=h([]),b=h([]),J=h(-1);Me(()=>r.screenshotCanvas,q=>{q&&(c.value=q.toDataURL("image/png"),De(()=>{s.value&&(s.value.onload=()=>{W()})}))},{immediate:!0});function x(){if(!s.value||!o.value)return;const q=s.value;q.naturalWidth,q.naturalHeight}function F(q){if(!s.value||!o.value)return;const X=s.value.getBoundingClientRect();i.startX=q.clientX-X.left,i.startY=q.clientY-X.top,i.show=!0}function Q(q){if(!i.show||!s.value)return;const X=s.value.getBoundingClientRect(),me=q.clientX-X.left,_e=q.clientY-X.top;i.x=Math.min(i.startX,me),i.y=Math.min(i.startY,_e),i.width=Math.abs(me-i.startX),i.height=Math.abs(_e-i.startY)}function ee(){}function W(){!s.value||!o.value||(i.x=0,i.y=0,i.width=s.value.offsetWidth,i.height=s.value.offsetHeight,i.show=!0)}function g(q){_+=q,s.value&&(s.value.style.transform=`rotate(${_}deg)`)}function Y(){if(!s.value||!i.show)return;const q=s.value,X=q.naturalWidth/q.offsetWidth,me=q.naturalHeight/q.offsetHeight;i.x*X,i.y*me;const _e=i.width*X,pe=i.height*me,ne=document.createElement("canvas");ne.width=_e,ne.height=pe;const fe=ne.getContext("2d");fe&&(fe.translate(ne.width/2,ne.height/2),fe.rotate(_*Math.PI/180),fe.drawImage(q,-q.naturalWidth/2,-q.naturalHeight/2),c.value=ne.toDataURL("image/png"),u.value="edit",De(de))}function de(){const q=k.value,X=j.value;if(!q||!X||!c.value)return;const me=new Image;me.onload=()=>{const _e=X.clientWidth-40,pe=X.clientHeight-40;let ne=me.width,fe=me.height;ne>_e&&(fe=_e/ne*fe,ne=_e),fe>pe&&(ne=pe/fe*ne,fe=pe),R=ne,S=fe,q.width=ne,q.height=fe,T=q.getContext("2d"),T==null||T.drawImage(me,0,0,ne,fe),he()},me.src=c.value}function he(){if(!T||!R||!S)return;const q=T.getImageData(0,0,R,S);b.value=b.value.slice(0,J.value+1),b.value.push(q),J.value=b.value.length-1}function Z(){J.value<=0||(J.value--,T==null||T.putImageData(b.value[J.value],0,0))}function G(){J.value>=b.value.length-1||(J.value++,T==null||T.putImageData(b.value[J.value],0,0))}function ce(){!T||!R||!S||(T.clearRect(0,0,R,S),he())}function te(q){if(!k.value||!T)return;const X=k.value.getBoundingClientRect();if(f.value=!0,p.value=q.clientX-X.left,H.value=q.clientY-X.top,V.value=[{x:p.value,y:H.value}],B.value==="text"){const me=prompt("请输入文字:","");me&&(T.font="20px Microsoft YaHei",T.fillStyle=U.value,T.fillText(me,p.value,H.value),he()),f.value=!1}}function ue(q){if(!f.value||!T||!k.value)return;const X=k.value.getBoundingClientRect(),me=q.clientX-X.left,_e=q.clientY-X.top;if(B.value==="brush"||B.value==="highlighter"){T.lineCap="round",T.lineJoin="round",T.lineWidth=B.value==="highlighter"?20:4,T.strokeStyle=B.value==="highlighter"?"rgba(255,255,0,0.5)":U.value,T.beginPath();const pe=V.value[V.value.length-1];T.moveTo(pe.x,pe.y),T.lineTo(me,_e),T.stroke(),V.value.push({x:me,y:_e})}}function D(q){if(!f.value||!T||!k.value)return;const X=k.value.getBoundingClientRect(),me=q.clientX-X.left,_e=q.clientY-X.top;B.value==="rect"?(T.strokeStyle=U.value,T.lineWidth=3,T.strokeRect(p.value,H.value,me-p.value,_e-H.value)):B.value==="arrow"&&N(T,p.value,H.value,me,_e,U.value),f.value=!1,V.value=[],he()}function N(q,X,me,_e,pe,ne){const Ae=Math.atan2(pe-me,_e-X);q.strokeStyle=ne,q.lineWidth=3,q.beginPath(),q.moveTo(X,me),q.lineTo(_e,pe),q.stroke(),q.fillStyle=ne,q.beginPath(),q.moveTo(_e,pe),q.lineTo(_e-15*Math.cos(Ae-Math.PI/6),pe-15*Math.sin(Ae-Math.PI/6)),q.lineTo(_e-15*Math.cos(Ae+Math.PI/6),pe-15*Math.sin(Ae+Math.PI/6)),q.closePath(),q.fill()}async function oe(){k.value&&k.value.toBlob(q=>{q&&d("confirm",q)},"image/png")}return(q,X)=>{const me=le("el-button"),_e=le("el-button-group");return a(),l("div",Bs,[u.value==="crop"?(a(),l("div",Vs,[e("div",Os,[X[5]||(X[5]=e("span",null,"截图裁剪 - 拖拽选择区域",-1)),C(me,{text:"",onClick:X[0]||(X[0]=pe=>d("cancel"))},{default:P(()=>[...X[4]||(X[4]=[K("✕ 关闭",-1)])]),_:1})]),e("div",{class:"crop-content",ref_key:"cropContainerRef",ref:o},[e("img",{ref_key:"imgRef",ref:s,src:c.value,class:"crop-image",onLoad:x,onMousedown:F,onMousemove:Q,onMouseup:ee,onMouseleave:ee},null,40,zs),i.show?(a(),l("div",{key:0,class:"crop-box",style:Ve({left:i.x+"px",top:i.y+"px",width:i.width+"px",height:i.height+"px"})},null,4)):A("",!0)],512),e("div",Us,[C(_e,null,{default:P(()=>[C(me,{onClick:X[1]||(X[1]=pe=>g(-90))},{default:P(()=>[...X[6]||(X[6]=[K("↺ 逆时针",-1)])]),_:1}),C(me,{onClick:X[2]||(X[2]=pe=>g(90))},{default:P(()=>[...X[7]||(X[7]=[K("↻ 顺时针",-1)])]),_:1}),C(me,{onClick:W},{default:P(()=>[...X[8]||(X[8]=[K("重置选区",-1)])]),_:1})]),_:1}),C(me,{type:"primary",onClick:Y,disabled:!i.show},{default:P(()=>[...X[9]||(X[9]=[K(" 确认裁剪 ✓ ",-1)])]),_:1},8,["disabled"])])])):(a(),l("div",Ns,[e("div",js,[e("div",Ws,[(a(),l(ge,null,we(y,pe=>e("button",{key:pe.name,class:se(["tool-btn",{active:B.value===pe.name}]),onClick:ne=>B.value=pe.name,title:pe.label},v(pe.icon),11,qs)),64))]),e("div",Fs,[(a(),l(ge,null,we(z,pe=>e("button",{key:pe,class:se(["color-btn",{active:U.value===pe}]),style:Ve({backgroundColor:pe}),onClick:ne=>U.value=pe},null,14,Hs)),64))]),e("div",Ks,[C(me,{size:"small",onClick:Z,disabled:J.value<=0},{default:P(()=>[...X[10]||(X[10]=[K("↩",-1)])]),_:1},8,["disabled"]),C(me,{size:"small",onClick:G,disabled:J.value>=b.value.length-1},{default:P(()=>[...X[11]||(X[11]=[K("↪",-1)])]),_:1},8,["disabled"]),C(me,{size:"small",type:"danger",onClick:ce},{default:P(()=>[...X[12]||(X[12]=[K("🗑",-1)])]),_:1})])]),e("div",{class:"canvas-wrapper",ref_key:"wrapperRef",ref:j},[e("canvas",{ref_key:"canvasRef",ref:k,onMousedown:te,onMousemove:ue,onMouseup:D,onMouseleave:D},null,544)],512),e("div",Xs,[C(me,{onClick:X[3]||(X[3]=pe=>u.value="crop")},{default:P(()=>[...X[13]||(X[13]=[K("← 重裁",-1)])]),_:1}),C(me,{type:"primary",onClick:oe},{default:P(()=>[...X[14]||(X[14]=[K("完成发送 ✓",-1)])]),_:1})])]))])}}}),Qs=ke(Ys,[["__scopeId","data-v-b86208d1"]]),Gs={class:"wechat-capture"},Js={class:"capture-bg"},Zs={class:"resize-handles"},eo={class:"toolbar-inner"},to={class:"tools"},no=["title","onClick"],ao={class:"colors"},so=["onClick"],oo={class:"actions"},lo=["disabled"],io={key:1,class:"hint"},ro=70,co=4,ot=2,uo=5,vo=33,mo=520,Ct=64,lt=8,fo=be({__name:"ScreenCapture",props:{screenshotCanvas:{}},emits:["confirm","cancel"],setup(t,{emit:n}){const r=t,d=n,u=h(null),c=h(null);let s=null,o=null;const i=h({x:0,y:0,w:0,h:0}),_=h(!1),y=h(!1),z=h(""),B=h({x:0,y:0,w:0,h:0}),U=h({x:0,y:0}),k=h("arrow"),j=h("#ff3b30"),T=[{name:"mosaic",icon:"▦",label:"马赛克"},{name:"text",icon:"T",label:"文字"},{name:"arrow",icon:"➜",label:"箭头"},{name:"rect",icon:"□",label:"矩形"}],R=["#ff3b30","#ff9500","#ffcc00","#4cd964","#5ac8fa","#007aff","#5856d6","#000000"],S=[],f=h(-1),p=h(!1),H=h({x:0,y:0});let V=null;const b=h(!1),J=h(""),x=h({left:"0px",top:"0px"}),F=h(null);let Q={x:0,y:0},ee=null,W=null;const g=h(null);let Y=null,de=!1,he=0;const Z=O(()=>({left:i.value.x+"px",top:i.value.y+"px",width:i.value.w+"px",height:i.value.h+"px"})),G=O(()=>{const M=window.innerWidth,I=window.innerHeight,$=i.value.y+i.value.h,m=i.value.x+i.value.w/2,re=$+Ct+lt+16<=I?$+lt:Math.max(lt,i.value.y-Ct-lt);let ve=m;const Ce=mo/2,Ie=Ce+12,Te=M-Ce-12;return ve<Ie&&(ve=Ie),ve>Te&&(ve=Te),{position:"fixed",top:`${re}px`,left:`${ve}px`,transform:"translateX(-50%)",marginTop:"0"}});Ke(()=>{ce(),document.addEventListener("keydown",w),document.addEventListener("mouseup",me)}),Xe(()=>{document.removeEventListener("keydown",w),document.removeEventListener("mouseup",me),ee&&(clearTimeout(ee),ee=null),S.length=0,f.value=-1,W=null,g.value=null,Y=null,de=!1});function ce(){const M=u.value,I=c.value;if(!M||!I||!r.screenshotCanvas)return;const $=window.innerWidth,m=window.innerHeight,ae=r.screenshotCanvas.width,re=r.screenshotCanvas.height;M.width=$,M.height=m,s=M.getContext("2d"),s&&(s.drawImage(r.screenshotCanvas,0,0,ae,re,0,0,$,m),q(),W=s.getImageData(0,0,$,m)),I.width=$,I.height=m,o=I.getContext("2d"),te()}function te(){if(!o)return;const M=o.canvas.width,I=o.canvas.height;o.clearRect(0,0,M,I),o.fillStyle="rgba(0, 0, 0, 0.5)",o.fillRect(0,0,M,I),i.value.w>0&&o.clearRect(i.value.x,i.value.y,i.value.w,i.value.h)}function ue(M,I,$,m,ae,re){let ve=0,Ce=0,Ie=0,Te=0;const Se=Math.floor(re/2);for(let Re=-Se;Re<=Se;Re++)for(let Ee=-Se;Ee<=Se;Ee++){const We=m+Ee,ze=ae+Re;if(We>=0&&We<I&&ze>=0&&ze<$){const Ue=(ze*I+We)*4;ve+=M[Ue],Ce+=M[Ue+1],Ie+=M[Ue+2],Te++}}return Te===0?{r:0,g:0,b:0}:{r:Math.round(ve/Te),g:Math.round(Ce/Te),b:Math.round(Ie/Te)}}function D(M,I,$,m,ae,re,ve,Ce){let Ie=0,Te=-1,Se=m+re*ot,Re=ae+ve*ot;for(;Se>=0&&Se<I&&Re>=0&&Re<$;){const Ee=(Re*I+Se)*4,We=M[Ee],ze=M[Ee+1],Ue=M[Ee+2];if(Math.abs(We-Ce.r)+Math.abs(ze-Ce.g)+Math.abs(Ue-Ce.b)>ro){if(Ie===0&&(Te=re!==0?Se:Re),Ie++,Ie>=co)return Te}else Ie=0,Te=-1;Se+=re*ot,Re+=ve*ot}return ve===-1?0:ve===1?$-1:re===-1?0:I-1}function N(M,I){if(!W)return null;const{data:$,width:m,height:ae}=W,re=Math.max(0,Math.min(Math.round(M),m-1)),ve=Math.max(0,Math.min(Math.round(I),ae-1)),Ce=ue($,m,ae,re,ve,3),Ie=D($,m,ae,re,ve,0,-1,Ce),Te=D($,m,ae,re,ve,0,1,Ce),Se=D($,m,ae,re,ve,-1,0,Ce),Re=D($,m,ae,re,ve,1,0,Ce),Ee=Se,We=Ie,ze=Re-Se,Ue=Te-Ie;return ze<10||Ue<10||ze>m*.95&&Ue>ae*.95?null:{x:Ee,y:We,w:ze,h:Ue}}function oe(){if(!o||!g.value)return;const{x:M,y:I,w:$,h:m}=g.value;o.clearRect(M,I,$,m),o.fillStyle="rgba(0, 0, 0, 0.2)",o.fillRect(M,I,$,m),o.strokeStyle="#07C160",o.lineWidth=2,o.setLineDash([6,4]),o.strokeRect(M+1,I+1,$-2,m-2),o.setLineDash([]);const ae=`${Math.round($)} × ${Math.round(m)}`;o.font="12px sans-serif";const re=o.measureText(ae).width,ve=6,Ce=20,Ie=re+ve*2,Te=M+$-Ie,Se=I+m-Ce;Te>M&&Se>I&&(o.fillStyle="#07C160",o.fillRect(Te,Se,Ie,Ce),o.fillStyle="#fff",o.textBaseline="middle",o.textAlign="left",o.fillText(ae,Te+ve,Se+Ce/2))}function q(){if(!s)return;const M=s.canvas,I=s.getImageData(0,0,M.width,M.height);f.value<S.length-1&&S.splice(f.value+1),S.push({imageData:I,timestamp:Date.now()}),f.value=S.length-1,S.length>50&&(S.shift(),f.value=S.length-1)}function X(){if(f.value<=0||!s)return;f.value--;const M=S[f.value];M&&s.putImageData(M.imageData,0,0)}function me(){_.value&&(_.value=!1,(i.value.w<20||i.value.h<20)&&(i.value={x:0,y:0,w:0,h:0},te())),de&&!_.value&&i.value.w===0&&(g.value&&(i.value={...g.value},g.value=null,te()),de=!1),p.value&&(p.value=!1,V=null)}function _e(M){const I=M.clientX,$=M.clientY;if(b.value&&Oe(),i.value.w===0){Y={x:I,y:$},de=!0;return}if(vt(I,$)){if(k.value==="text"){Je(I,$);return}if(p.value=!0,H.value={x:I,y:$},k.value==="mosaic"&&s){const m=s.canvas;V=s.getImageData(0,0,m.width,m.height)}}}function pe(M){if(_.value){const I=Math.min(i.value.x,M.clientX),$=Math.min(i.value.y,M.clientY),m=Math.abs(M.clientX-i.value.x),ae=Math.abs(M.clientY-i.value.y);i.value={x:I,y:$,w:m,h:ae},te()}else y.value?xe(M):p.value?Ne(M):i.value.w===0&&fe(M)}function ne(){_.value?(_.value=!1,(i.value.w<20||i.value.h<20)&&(i.value={x:0,y:0,w:0,h:0},te())):de&&i.value.w===0&&(g.value&&(i.value={...g.value},g.value=null,te()),de=!1),p.value&&(p.value=!1,q(),V=null)}function fe(M){const I=M.clientX,$=M.clientY;if(de&&Y){const re=I-Y.x,ve=$-Y.y;if(Math.sqrt(re*re+ve*ve)>=uo){_.value=!0,de=!1,g.value=null;const Ce=Math.min(Y.x,I),Ie=Math.min(Y.y,$),Te=Math.abs(I-Y.x),Se=Math.abs($-Y.y);i.value={x:Ce,y:Ie,w:Te,h:Se},te()}return}const m=Date.now();if(m-he<vo)return;he=m;const ae=N(I,$);g.value=ae,te(),ae&&oe()}function Ae(){i.value.w===0&&!de&&!_.value&&(g.value=null,te())}function Ne(M){if(!s)return;const I=M.clientX,$=M.clientY,m=Math.max(i.value.x,Math.min(I,i.value.x+i.value.w)),ae=Math.max(i.value.y,Math.min($,i.value.y+i.value.h));switch(k.value){case"mosaic":V&&s.putImageData(V,0,0),Ye(H.value.x,H.value.y,m,ae);break;case"arrow":if(V)s.putImageData(V,0,0);else{const re=s.canvas;V=s.getImageData(0,0,re.width,re.height)}Qe(H.value.x,H.value.y,m,ae);break;case"rect":if(V)s.putImageData(V,0,0);else{const re=s.canvas;V=s.getImageData(0,0,re.width,re.height)}Ge(H.value.x,H.value.y,m,ae);break}}function Ye(M,I,$,m){if(!s)return;const ae=Math.min(M,$),re=Math.min(I,m),ve=Math.max(M,$),Ce=Math.max(I,m),Ie=ve-ae,Te=Ce-re;if(Ie<2||Te<2)return;const Se=10,Re=document.createElement("canvas");Re.width=Math.max(1,Math.ceil(Ie/Se)),Re.height=Math.max(1,Math.ceil(Te/Se));const Ee=Re.getContext("2d");Ee&&(Ee.drawImage(s.canvas,ae,re,Ie,Te,0,0,Re.width,Re.height),s.imageSmoothingEnabled=!1,s.drawImage(Re,0,0,Re.width,Re.height,ae,re,Ie,Te),s.imageSmoothingEnabled=!0)}function Qe(M,I,$,m){if(!s)return;const ae=3,re=15,ve=Math.atan2(m-I,$-M);s.strokeStyle=j.value,s.fillStyle=j.value,s.lineWidth=ae,s.lineCap="round",s.beginPath(),s.moveTo(M,I),s.lineTo($,m),s.stroke(),s.beginPath(),s.moveTo($,m),s.lineTo($-re*Math.cos(ve-Math.PI/6),m-re*Math.sin(ve-Math.PI/6)),s.lineTo($-re*Math.cos(ve+Math.PI/6),m-re*Math.sin(ve+Math.PI/6)),s.closePath(),s.fill()}function Ge(M,I,$,m){if(!s)return;const ae=Math.min(M,$),re=Math.min(I,m),ve=Math.abs($-M),Ce=Math.abs(m-I);s.strokeStyle=j.value,s.lineWidth=3,s.lineJoin="round",s.strokeRect(ae,re,ve,Ce)}function Je(M,I){Q={x:M,y:I},J.value="",x.value={left:M+"px",top:I-14+"px"},b.value=!0,setTimeout(()=>{var $,m;($=F.value)==null||$.focus(),(m=F.value)==null||m.select()},0)}function Oe(){if(!b.value)return;ee&&(clearTimeout(ee),ee=null);const M=J.value.trim();M&&s&&(s.fillStyle=j.value,s.font="20px sans-serif",s.textBaseline="middle",s.fillText(M,Q.x,Q.y),q()),b.value=!1,J.value=""}function Ze(){ee=setTimeout(()=>{ee=null,Oe()},150)}function et(){ee&&(clearTimeout(ee),ee=null)}function je(){ee&&(clearTimeout(ee),ee=null),b.value=!1,J.value=""}function Le(M,I){I.preventDefault(),I.stopPropagation(),y.value=!0,z.value=M,B.value={...i.value},U.value={x:I.clientX,y:I.clientY},document.addEventListener("mousemove",pe),document.addEventListener("mouseup",st)}function xe(M){const I=M.clientX-U.value.x,$=M.clientY-U.value.y,m=B.value;let ae={...m};switch(z.value){case"nw":ae={x:m.x+I,y:m.y+$,w:m.w-I,h:m.h-$};break;case"n":ae={x:m.x,y:m.y+$,w:m.w,h:m.h-$};break;case"ne":ae={x:m.x,y:m.y+$,w:m.w+I,h:m.h-$};break;case"e":ae={x:m.x,y:m.y,w:m.w+I,h:m.h};break;case"se":ae={x:m.x,y:m.y,w:m.w+I,h:m.h+$};break;case"s":ae={x:m.x,y:m.y,w:m.w,h:m.h+$};break;case"sw":ae={x:m.x+I,y:m.y,w:m.w-I,h:m.h+$};break;case"w":ae={x:m.x+I,y:m.y,w:m.w-I,h:m.h};break}ae.w>20&&ae.h>20&&(i.value=ae,te())}function st(){y.value=!1,document.removeEventListener("mousemove",pe),document.removeEventListener("mouseup",st),te()}function vt(M,I){return M>=i.value.x&&M<=i.value.x+i.value.w&&I>=i.value.y&&I<=i.value.y+i.value.h}function mt(){i.value.w>0?(i.value={x:0,y:0,w:0,h:0},te()):d("cancel")}function E(){if(!s||i.value.w===0){ie.warning("请先框选区域");return}const M=s.canvas,I=document.createElement("canvas");I.width=i.value.w,I.height=i.value.h;const $=I.getContext("2d");$&&($.drawImage(M,i.value.x,i.value.y,i.value.w,i.value.h,0,0,i.value.w,i.value.h),I.toBlob(m=>{m?d("confirm",m):ie.error("截图导出失败")},"image/png"))}function w(M){if(M.key==="Escape"){if(b.value){je();return}d("cancel")}}return Me(()=>r.screenshotCanvas,()=>{r.screenshotCanvas&&De(()=>ce())}),(M,I)=>(a(),l("div",Gs,[e("div",Js,[e("canvas",{ref_key:"baseCanvasRef",ref:u,class:"base-canvas"},null,512),e("canvas",{ref_key:"maskCanvasRef",ref:c,class:"mask-canvas",onMousedown:_e,onMousemove:pe,onMouseup:ne,onMouseleave:Ae},null,544),He(e("input",{ref_key:"textInputRef",ref:F,"onUpdate:modelValue":I[0]||(I[0]=$=>J.value=$),class:se(["text-input-overlay",{"text-input-active":b.value}]),style:Ve(x.value),onKeydown:[yt(Oe,["enter"]),yt(je,["esc"])],onBlur:Ze,onFocus:et},null,38),[[kt,J.value]]),i.value.w>0?(a(),l("div",{key:0,class:"selection-box",style:Ve(Z.value)},[e("div",Zs,[e("span",{class:"handle nw",onMousedown:I[1]||(I[1]=$e($=>Le("nw",$),["stop"]))},null,32),e("span",{class:"handle n",onMousedown:I[2]||(I[2]=$e($=>Le("n",$),["stop"]))},null,32),e("span",{class:"handle ne",onMousedown:I[3]||(I[3]=$e($=>Le("ne",$),["stop"]))},null,32),e("span",{class:"handle e",onMousedown:I[4]||(I[4]=$e($=>Le("e",$),["stop"]))},null,32),e("span",{class:"handle se",onMousedown:I[5]||(I[5]=$e($=>Le("se",$),["stop"]))},null,32),e("span",{class:"handle s",onMousedown:I[6]||(I[6]=$e($=>Le("s",$),["stop"]))},null,32),e("span",{class:"handle sw",onMousedown:I[7]||(I[7]=$e($=>Le("sw",$),["stop"]))},null,32),e("span",{class:"handle w",onMousedown:I[8]||(I[8]=$e($=>Le("w",$),["stop"]))},null,32)]),e("div",{class:"edit-toolbar",style:Ve(G.value),onMousedown:I[9]||(I[9]=$e(()=>{},["stop"]))},[e("div",eo,[e("div",to,[(a(),l(ge,null,we(T,$=>e("button",{key:$.name,class:se(["tool-btn",{active:k.value===$.name}]),title:$.label,onClick:m=>k.value=$.name},v($.icon),11,no)),64))]),e("div",ao,[(a(),l(ge,null,we(R,$=>e("span",{key:$,class:se(["color-dot",{active:j.value===$}]),style:Ve({background:$}),onClick:m=>j.value=$},null,14,so)),64))]),e("div",oo,[e("button",{class:"action-btn undo-btn",disabled:f.value<=0,title:"撤销",onClick:X},"↶",8,lo),e("button",{class:"action-btn cancel-btn",title:"取消截图",onClick:mt},"取消"),e("button",{class:"action-btn confirm-btn",title:"确认截图",onClick:E},"✓ 确认")])])],36)],4)):A("",!0),i.value.w?A("",!0):(a(),l("div",io,"移动鼠标自动识别窗口,点击选窗口或拖拽框选区域,按 ESC 退出"))])]))}}),po=ke(fo,[["__scopeId","data-v-974c426c"]]),dt=h(!1),rt=h(null),Fe=h(null);let Pt="user";function go(t){return(t==null?void 0:t.name)==="NotAllowedError"||(t==null?void 0:t.name)==="SecurityError"?"permission-denied":(t==null?void 0:t.name)==="NotFoundError"||(t==null?void 0:t.name)==="DevicesNotFoundError"?"no-device":(t==null?void 0:t.name)==="NotReadableError"||(t==null?void 0:t.name)==="TrackStartError"?"in-use":"unknown"}function Bt(t){if(!t)return"";const n=navigator.userAgent,d=!/Mobile|Android|iPhone|iPad|iPod|Windows Phone/i.test(n)?"选择本地图片":"使用系统相机";return{"permission-denied":`摄像头权限被拒绝,请使用下方"${d}",或在浏览器设置中允许访问摄像头`,"no-device":`当前环境不支持直接访问摄像头,请使用下方"${d}"`,"in-use":`摄像头正在被其他应用使用,请关闭后重试或使用"${d}"`,unknown:`摄像头启动失败,请使用下方"${d}"或重试`}[t]}async function Vt(t="user"){if(rt.value=null,Fe.value&&Ot(),Pt=t,!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)return rt.value="no-device",console.warn("[useCamera] 浏览器不支持 getUserMedia"),!1;try{const n=await navigator.mediaDevices.getUserMedia({video:{facingMode:{ideal:t},width:{ideal:1280},height:{ideal:720}},audio:!1});return Fe.value=n,dt.value=!0,!0}catch(n){return rt.value=go(n),console.error("[useCamera] 启动摄像头失败:",n),!1}}function Ot(){Fe.value&&(Fe.value.getTracks().forEach(t=>t.stop()),Fe.value=null),dt.value=!1}async function yo(t){if(!dt.value||!Fe.value)return console.warn("[useCamera] 摄像头未启动,无法拍照"),null;if(!t.videoWidth||!t.videoHeight)return console.warn("[useCamera] 视频尚未就绪"),null;try{const n=document.createElement("canvas");n.width=t.videoWidth,n.height=t.videoHeight;const r=n.getContext("2d");return r?(r.drawImage(t,0,0,n.width,n.height),await new Promise(u=>{n.toBlob(c=>u(c),"image/png")})):null}catch(n){return console.error("[useCamera] 拍照失败:",n),null}}async function _o(){return await Vt(Pt==="user"?"environment":"user")}function ho(){return{isActive:dt,error:rt,stream:Fe,startCamera:Vt,stopCamera:Ot,captureFrame:yo,switchCamera:_o,getCameraErrorMessage:Bt}}const bo={class:"camera-preview"},ko=["src"],wo={key:1,class:"camera-error"},$o={class:"error-text"},Co={class:"error-hint"},xo={key:2,class:"camera-loading"},Io=["capture"],To={key:0,class:"footer-controls"},So={key:1,class:"footer-controls"},Mo={key:2,class:"footer-controls"},Ro=be({__name:"CameraCapture",props:{modelValue:{type:Boolean}},emits:["update:modelValue","confirm","cancel"],setup(t,{emit:n}){const r=t,d=n,u=O({get:()=>r.modelValue,set:g=>d("update:modelValue",g)}),c=h(null),s=h(null),o=h(null),i=h(!1),_=h(null),y=h(!1),{error:z,stream:B,startCamera:U,stopCamera:k,captureFrame:j}=ho(),T=O(()=>Bt(o.value)),R=O(()=>{const g=navigator.userAgent;return!/Mobile|Android|iPhone|iPad|iPod|Windows Phone/i.test(g)}),S=O(()=>R.value?"选择本地图片":"使用系统相机"),f=O(()=>R.value?'点击下方"选择本地图片"可从本地选择图片':'点击下方"使用系统相机"可通过系统相机拍照');function p(){var g;(g=_.value)==null||g.click()}function H(g){var Z;const Y=g.target,de=(Z=Y.files)==null?void 0:Z[0];if(!de)return;const he=new FileReader;he.onload=()=>{s.value=he.result,o.value=null,i.value=!0,y.value=!0},he.onerror=()=>{ie.error("图片读取失败,请重试")},he.readAsDataURL(de),Y.value=""}async function V(){if(o.value=null,i.value=!1,s.value=null,y.value=!1,ie.info("即将请求摄像头权限..."),!await U("user")){o.value=z.value||"unknown";return}await De(),c.value&&B.value&&(c.value.srcObject=B.value,c.value.onloadedmetadata=()=>{var Y;(Y=c.value)==null||Y.play().then(()=>{i.value=!0}).catch(de=>{console.error("[CameraCapture] 视频播放失败:",de),o.value="unknown"})})}async function b(){if(!c.value||!i.value)return;const g=await j(c.value);if(!g){ie.error("拍照失败,请重试");return}const Y=new FileReader;Y.onload=()=>{s.value=Y.result},Y.readAsDataURL(g)}function J(){const g=y.value;s.value=null,y.value=!1,g&&p()}async function x(){let g=null;if(s.value?g=W(s.value):c.value&&i.value&&(g=await j(c.value)),!g){ie.error("拍照数据获取失败,请重试");return}k(),d("confirm",g),u.value=!1}function F(){d("cancel"),u.value=!1}function Q(){k(),s.value=null,o.value=null,i.value=!1,y.value=!1}async function ee(){await V()}function W(g){const Y=g.split(","),de=Y[0],he=Y[1],Z=de.match(/:(.*?);/),G=Z?Z[1]:"image/png",ce=atob(he),te=ce.length,ue=new Uint8Array(te);for(let D=0;D<te;D++)ue[D]=ce.charCodeAt(D);return new Blob([ue],{type:G})}return Me(u,async g=>{g?(await De(),await V()):k()}),Xe(()=>{k()}),(g,Y)=>{const de=le("el-button"),he=le("el-dialog");return a(),ye(he,{modelValue:u.value,"onUpdate:modelValue":Y[0]||(Y[0]=Z=>u.value=Z),title:"拍照",width:"640px","close-on-click-modal":!1,"close-on-press-escape":!0,onClose:Q},{footer:P(()=>[!s.value&&!o.value?(a(),l("div",To,[C(de,{onClick:F},{default:P(()=>[...Y[3]||(Y[3]=[K("取消",-1)])]),_:1}),C(de,{type:"primary",circle:"",size:"large",disabled:!i.value,title:"拍照",onClick:b},{default:P(()=>[...Y[4]||(Y[4]=[e("span",{class:"capture-icon"},"📷",-1)])]),_:1},8,["disabled"])])):s.value?(a(),l("div",So,[C(de,{onClick:J},{default:P(()=>[...Y[5]||(Y[5]=[K("重拍",-1)])]),_:1}),C(de,{type:"primary",onClick:x},{default:P(()=>[...Y[6]||(Y[6]=[K(" 确认 ✓ ",-1)])]),_:1})])):(a(),l("div",Mo,[C(de,{onClick:F},{default:P(()=>[...Y[7]||(Y[7]=[K("关闭",-1)])]),_:1}),C(de,{type:"success",onClick:p},{default:P(()=>[K(v(S.value),1)]),_:1}),C(de,{type:"primary",onClick:ee},{default:P(()=>[...Y[8]||(Y[8]=[K("重试",-1)])]),_:1})]))]),default:P(()=>[e("div",bo,[He(e("video",{ref_key:"videoRef",ref:c,autoplay:"",muted:"",playsinline:"",class:"camera-video"},null,512),[[Zt,!s.value&&!o.value]]),s.value?(a(),l("img",{key:0,src:s.value,class:"captured-photo",alt:"拍照结果"},null,8,ko)):A("",!0),o.value?(a(),l("div",wo,[Y[1]||(Y[1]=e("div",{class:"error-icon"},"📷",-1)),e("p",$o,v(T.value),1),e("p",Co,v(f.value),1)])):A("",!0),!s.value&&!o.value&&!i.value?(a(),l("div",xo,[...Y[2]||(Y[2]=[e("p",null,"正在启动摄像头...",-1)])])):A("",!0)]),e("input",{ref_key:"fileInputRef",ref:_,type:"file",accept:"image/*",capture:R.value?void 0:"user",style:{display:"none"},onChange:H},null,40,Io)]),_:1},8,["modelValue"])}}}),Ao=ke(Ro,[["__scopeId","data-v-8133b63c"]]),Lo={key:0,class:"pending-images-bar"},Eo=["src","alt"],Do=["title"],Po=["onClick"],Bo=be({__name:"PendingImagePreview",props:{images:{}},emits:["remove"],setup(t){return(n,r)=>t.images.length>0?(a(),l("div",Lo,[(a(!0),l(ge,null,we(t.images,d=>(a(),l("div",{class:"thumbnail",key:d.id},[e("img",{src:d.previewUrl,class:"thumb-img",alt:d.source==="screenshot"?"截图":"拍照"},null,8,Eo),e("span",{class:"thumb-source",title:d.source==="screenshot"?"截图":"拍照"},v(d.source==="screenshot"?"✂":"📷"),9,Do),e("button",{class:"thumb-remove",title:"删除",onClick:u=>n.$emit("remove",d.id)},"✕",8,Po)]))),128))])):A("",!0)}}),Vo=ke(Bo,[["__scopeId","data-v-86e08e43"]]),Oo={key:0,class:"completion-bar"},zo={key:0,class:"completion-thinking"},Uo={class:"completion-text"},No=be({__name:"CompletionBar",props:{ghostText:{default:""},loading:{type:Boolean,default:!1},confidence:{default:0},visible:{type:Boolean,default:!0}},emits:["accept","acceptWord","dismiss"],setup(t){return(n,r)=>t.visible&&(t.ghostText||t.loading)?(a(),l("div",Oo,[t.loading?(a(),l("span",zo,"AI 正在思考...")):(a(),l(ge,{key:1},[r[0]||(r[0]=e("span",{class:"completion-label"},"AI 建议:",-1)),e("span",Uo,v(t.ghostText),1),r[1]||(r[1]=e("span",{class:"completion-hint"},[e("kbd",null,"Tab"),K(" 接受 "),e("span",{class:"completion-hint__sub"},[K("| "),e("kbd",null,"Shift+Tab"),K(" 逐词")])],-1))],64))])):A("",!0)}}),jo=ke(No,[["__scopeId","data-v-ace47e74"]]),Wo={class:"toolbar-right"},qo=["disabled"],Fo=["disabled"],Ho=be({__name:"AiAssistToolbar",props:{autocompleteEnabled:{type:Boolean,default:!0},hasSelection:{type:Boolean,default:!1},hasText:{type:Boolean,default:!1}},emits:["toggleAutocomplete","toneAdjust","polish","rewrite"],setup(t){return(n,r)=>(a(),l("div",Wo,[e("button",{class:se(["tb-btn tb-btn--ai",{"tb-btn--active":t.autocompleteEnabled}]),title:"AI自动补齐",onClick:r[0]||(r[0]=d=>n.$emit("toggleAutocomplete"))},[...r[4]||(r[4]=[K(" ✨ ",-1),e("span",{class:"tb-tip"},"自动补齐",-1)])],2),e("button",{class:se(["tb-btn tb-btn--ai",{"tb-btn--disabled":!t.hasSelection}]),disabled:!t.hasSelection,title:"AI语气调整",onClick:r[1]||(r[1]=d=>n.$emit("toneAdjust"))},[...r[5]||(r[5]=[K(" 🎭 ",-1),e("span",{class:"tb-tip"},"语气",-1)])],10,qo),e("button",{class:se(["tb-btn tb-btn--ai",{"tb-btn--disabled":!t.hasText}]),disabled:!t.hasText,title:"AI润色",onClick:r[2]||(r[2]=d=>n.$emit("polish"))},[...r[6]||(r[6]=[K(" ✏️ ",-1),e("span",{class:"tb-tip"},"润色",-1)])],10,Fo),e("button",{class:"tb-btn tb-btn--ai",title:"AI改写",onClick:r[3]||(r[3]=d=>n.$emit("rewrite"))},[...r[7]||(r[7]=[K(" 🔄 ",-1),e("span",{class:"tb-tip"},"改写",-1)])])]))}}),Ko=ke(Ho,[["__scopeId","data-v-8712714b"]]),pt={professional:"专业",friendly:"友好",concise:"简洁"},it={expand:"扩写",compress:"压缩",correct:"纠错"},Xo={class:"tone-header"},Yo={class:"tone-original"},Qo={class:"tone-text"},Go={key:0,class:"tone-select"},Jo={class:"tone-options"},Zo=["onClick"],el={class:"tone-option__icon"},tl={class:"tone-option__name"},nl={class:"tone-option__desc"},al={key:1,class:"tone-loading"},sl={key:2,class:"tone-result"},ol={class:"tone-text tone-text--highlight"},ll={key:0,class:"tone-summary"},il={class:"tone-actions"},rl=be({__name:"ToneAdjustPopover",props:{visible:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},result:{default:null},originalText:{default:""}},emits:["select","replace","cancel"],setup(t){const n=[{value:"professional",icon:"💼",label:pt.professional,desc:"技术术语,结构清晰"},{value:"friendly",icon:"😊",label:pt.friendly,desc:"亲和温暖,贴心关怀"},{value:"concise",icon:"⚡",label:pt.concise,desc:"开门见山,直奔主题"}];return(r,d)=>(a(),l(ge,null,[t.visible?(a(),l("div",{key:0,class:"tone-overlay",onClick:d[0]||(d[0]=u=>r.$emit("cancel"))})):A("",!0),t.visible?(a(),l("div",{key:1,class:"tone-popover",onClick:d[4]||(d[4]=$e(()=>{},["stop"]))},[e("div",Xo,[d[5]||(d[5]=e("span",{class:"tone-title"},"语气调整",-1)),e("button",{class:"tone-close",onClick:d[1]||(d[1]=u=>r.$emit("cancel"))},"✕")]),e("div",Yo,[d[6]||(d[6]=e("label",{class:"tone-label"},"原文",-1)),e("p",Qo,v(t.originalText),1)]),!t.loading&&!t.result?(a(),l("div",Go,[d[7]||(d[7]=e("label",{class:"tone-label"},"选择目标语气",-1)),e("div",Jo,[(a(),l(ge,null,we(n,u=>e("button",{key:u.value,class:"tone-option",onClick:c=>r.$emit("select",u.value)},[e("span",el,v(u.icon),1),e("span",tl,v(u.label),1),e("span",nl,v(u.desc),1)],8,Zo)),64))])])):A("",!0),t.loading?(a(),l("div",al,[...d[8]||(d[8]=[e("span",{class:"tone-loading__spinner"},null,-1),e("span",null,"AI 正在改写...",-1)])])):A("",!0),t.result?(a(),l("div",sl,[d[9]||(d[9]=e("label",{class:"tone-label"},"改写结果",-1)),e("p",ol,v(t.result.rewritten_text||"AI 暂不可用"),1),t.result.changes_summary?(a(),l("p",ll,v(t.result.changes_summary),1)):A("",!0),e("div",il,[e("button",{class:"tone-btn tone-btn--primary",onClick:d[2]||(d[2]=u=>r.$emit("replace",t.result.rewritten_text))}," 替换原文 "),e("button",{class:"tone-btn",onClick:d[3]||(d[3]=u=>r.$emit("cancel"))},"取消")])])):A("",!0)])):A("",!0)],64))}}),cl=ke(rl,[["__scopeId","data-v-741d3331"]]),ul={class:"polish-header"},dl={key:0,class:"polish-actions-select"},vl={class:"polish-action-tabs"},ml=["onClick"],fl={class:"polish-action-tab__icon"},pl={class:"polish-action-tab__name"},gl={class:"polish-action-tab__desc"},yl={key:1,class:"polish-loading"},_l={key:2,class:"polish-body"},hl={class:"polish-compare"},bl={class:"polish-side"},kl={class:"polish-text-box polish-text-box--original"},wl={class:"polish-side"},$l={class:"polish-label"},Cl={class:"polish-action-badge"},xl={key:0,class:"polish-summary"},Il={class:"polish-footer"},Tl=["disabled"],Sl=be({__name:"PolishPanel",props:{visible:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},result:{default:null},originalText:{default:""}},emits:["selectAction","replace","cancel"],setup(t){const n=[{value:"expand",icon:"📝",label:it.expand,desc:"补充细节,丰富内容"},{value:"compress",icon:"📋",label:it.compress,desc:"精简文字,删除冗余"},{value:"correct",icon:"✅",label:it.correct,desc:"纠正错别字和语法"}],r=t,d=h(null),u=h("");Me(()=>r.result,s=>{s&&(u.value=s.polished_text)}),Me(()=>r.visible,s=>{s||(u.value="")});const c=O(()=>r.result?it[r.result.action]||r.result.action:"");return(s,o)=>(a(),l(ge,null,[t.visible?(a(),l("div",{key:0,class:"polish-overlay",onClick:o[0]||(o[0]=i=>s.$emit("cancel"))})):A("",!0),t.visible?(a(),l("div",{key:1,class:"polish-panel",onClick:o[5]||(o[5]=$e(()=>{},["stop"]))},[e("div",ul,[o[6]||(o[6]=e("span",{class:"polish-title"},"✏️ 文字润色",-1)),e("button",{class:"polish-close",onClick:o[1]||(o[1]=i=>s.$emit("cancel"))},"✕")]),!t.loading&&!t.result?(a(),l("div",dl,[o[7]||(o[7]=e("label",{class:"polish-label"},"选择润色操作",-1)),e("div",vl,[(a(),l(ge,null,we(n,i=>e("button",{key:i.value,class:"polish-action-tab",onClick:_=>s.$emit("selectAction",i.value)},[e("span",fl,v(i.icon),1),e("span",pl,v(i.label),1),e("span",gl,v(i.desc),1)],8,ml)),64))])])):A("",!0),t.loading?(a(),l("div",yl,[...o[8]||(o[8]=[e("span",{class:"polish-loading__spinner"},null,-1),e("span",null,"AI 正在润色...",-1)])])):A("",!0),t.result?(a(),l("div",_l,[e("div",hl,[e("div",bl,[o[9]||(o[9]=e("label",{class:"polish-label"},"原文",-1)),e("div",kl,v(t.originalText),1)]),e("div",wl,[e("label",$l,[o[10]||(o[10]=K(" 润色结果 ",-1)),e("span",Cl,v(c.value),1)]),He(e("textarea",{ref_key:"editTextareaRef",ref:d,"onUpdate:modelValue":o[2]||(o[2]=i=>u.value=i),class:"polish-text-box polish-text-box--result",placeholder:"润色结果为空"},null,512),[[kt,u.value]])])]),t.result.changes_summary?(a(),l("p",xl," 💡 "+v(t.result.changes_summary),1)):A("",!0),e("div",Il,[e("button",{class:"polish-btn polish-btn--ghost",onClick:o[3]||(o[3]=i=>s.$emit("cancel"))}," 取消 "),e("button",{class:"polish-btn polish-btn--primary",disabled:!u.value,onClick:o[4]||(o[4]=i=>s.$emit("replace",u.value))}," 替换原文 ",8,Tl)])])):A("",!0)])):A("",!0)],64))}}),Ml=ke(Sl,[["__scopeId","data-v-090be9b9"]]),Rl={class:"rewrite-header"},Al={key:0,class:"rewrite-loading"},Ll={key:1,class:"rewrite-body"},El={class:"rewrite-version-list"},Dl={class:"rewrite-version-card__head"},Pl={class:"rewrite-version-card__index"},Bl={class:"rewrite-version-card__style"},Vl={key:0,class:"rewrite-version-card__source"},Ol={class:"rewrite-version-card__content"},zl={class:"rewrite-version-card__actions"},Ul=["onClick"],Nl=["onClick"],jl={key:2,class:"rewrite-empty"},Wl=be({__name:"RewritePanel",props:{visible:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},result:{default:null}},emits:["replace","append","cancel"],setup(t){const n=t,r=O(()=>{var d;return((d=n.result)==null?void 0:d.versions)??[]});return(d,u)=>(a(),l(ge,null,[t.visible?(a(),l("div",{key:0,class:"rewrite-overlay",onClick:u[0]||(u[0]=c=>d.$emit("cancel"))})):A("",!0),t.visible?(a(),l("div",{key:1,class:"rewrite-panel",onClick:u[2]||(u[2]=$e(()=>{},["stop"]))},[e("div",Rl,[u[3]||(u[3]=e("span",{class:"rewrite-title"},"🔄 智能改写",-1)),e("button",{class:"rewrite-close",onClick:u[1]||(u[1]=c=>d.$emit("cancel"))},"✕")]),t.loading?(a(),l("div",Al,[...u[4]||(u[4]=[e("span",{class:"rewrite-loading__spinner"},null,-1),e("div",{class:"rewrite-loading__info"},[e("p",{class:"rewrite-loading__title"},"正在生成改写版本"),e("p",{class:"rewrite-loading__sub"},"AI 将基于对话上下文和知识库,为你提供多个改写建议")],-1)])])):A("",!0),!t.loading&&r.value.length>0?(a(),l("div",Ll,[e("div",El,[(a(!0),l(ge,null,we(r.value,(c,s)=>(a(),l("div",{key:s,class:"rewrite-version-card"},[e("div",Dl,[e("span",Pl,"版本 "+v(s+1),1),e("span",Bl,v(c.style),1),c.source?(a(),l("span",Vl,v(c.source),1)):A("",!0)]),e("div",Ol,v(c.text),1),e("div",zl,[e("button",{class:"rewrite-action-btn rewrite-action-btn--primary",onClick:o=>d.$emit("replace",c.text)}," 替换 ",8,Ul),e("button",{class:"rewrite-action-btn",onClick:o=>d.$emit("append",c.text)}," 追加 ",8,Nl)])]))),128))])])):A("",!0),!t.loading&&t.result&&r.value.length===0?(a(),l("div",jl,[...u[5]||(u[5]=[e("span",{class:"rewrite-empty__icon"},"📭",-1),e("p",{class:"rewrite-empty__text"},"暂无改写建议",-1),e("p",{class:"rewrite-empty__hint"},"AI 未能生成合适的改写版本,请稍后重试",-1)])])):A("",!0)])):A("",!0)],64))}}),ql=ke(Wl,[["__scopeId","data-v-59717528"]]),Fl=/\s+|[,,。;;::!!??、()()]+/,Hl=800,Kl=1500,Xl=5,Yl=.5;function Ql(t){const{getConversationId:n,getInputText:r,setInputText:d}=t,u=h(""),c=h(!1),s=h(!0),o=h(0),i=h(!1),_=h(!1),y=h(null),z=h(""),B=h(!1),U=h(!1),k=h(null),j=h(""),T=h(!1),R=h(!1),S=h(null);let f=null,p=null,H=null,V=null,b=null;function J(){if(!s.value)return;const te=r();if(te.length<Xl){Q();return}const ue=n();ue&&(u.value="",f&&(f.abort(),f=null),p&&clearTimeout(p),p=setTimeout(async()=>{f=new AbortController;const D=f.signal,N=setTimeout(()=>{f==null||f.abort()},Kl);c.value=!0;try{const oe=await Ft(ue,te,0,80,D);!D.aborted&&oe.confidence>=Yl&&(u.value=oe.completion,o.value=oe.confidence)}catch(oe){(oe==null?void 0:oe.name)!=="AbortError"&&(oe==null?void 0:oe.code)!=="ERR_CANCELED"&&console.error("[useAiAssist] 自动补齐失败:",oe)}finally{clearTimeout(N),c.value=!1,f=null}},Hl))}function x(){u.value&&(d(r()+u.value),u.value="",o.value=0)}function F(){if(!u.value)return;const te=u.value.split(Fl).filter(Boolean);if(te.length===0)return;const ue=r(),D=ue.length>0&&!ue.endsWith(" ");d(ue+(D?" ":"")+te[0]),u.value=te.length>1?te.slice(1).join(" "):""}function Q(){u.value="",o.value=0}function ee(te,ue){!te||te.length<5||(z.value=te,y.value=null,i.value=!0)}async function W(te,ue,D){const N=n();if(N){H&&H.abort(),H=new AbortController,_.value=!0,y.value=null;try{const oe=await qt(N,te,ue,D,H.signal);y.value=oe}catch(oe){(oe==null?void 0:oe.name)!=="AbortError"&&(oe==null?void 0:oe.code)!=="ERR_CANCELED"&&(console.error("[useAiAssist] 语气调整失败:",oe),y.value={rewritten_text:"",tone:D,changes_summary:"AI 服务暂不可用"})}finally{_.value=!1,H=null}}}function g(){i.value=!1,y.value=null,z.value=""}function Y(){const te=r();te&&(j.value=te,k.value=null,B.value=!0)}async function de(te){const ue=n();if(ue){V&&V.abort(),V=new AbortController,U.value=!0,k.value=null;try{const D=await Wt(ue,j.value,te,V.signal);k.value=D}catch(D){(D==null?void 0:D.name)!=="AbortError"&&(D==null?void 0:D.code)!=="ERR_CANCELED"&&(console.error("[useAiAssist] 文字润色失败:",D),k.value={polished_text:"",action:te,changes_summary:"AI 服务暂不可用"})}finally{U.value=!1,V=null}}}function he(){B.value=!1,k.value=null,j.value=""}async function Z(){const te=n();if(te){b&&b.abort(),b=new AbortController,T.value=!0,R.value=!0,S.value=null;try{const ue=await jt(te,r(),b.signal);S.value=ue}catch(ue){(ue==null?void 0:ue.name)!=="AbortError"&&(ue==null?void 0:ue.code)!=="ERR_CANCELED"&&(console.error("[useAiAssist] 智能改写失败:",ue),S.value={versions:[]})}finally{R.value=!1,b=null}}}function G(){T.value=!1,S.value=null}function ce(){f&&(f.abort(),f=null),H&&(H.abort(),H=null),V&&(V.abort(),V=null),b&&(b.abort(),b=null),p&&(clearTimeout(p),p=null),u.value="",c.value=!1,o.value=0,i.value=!1,_.value=!1,y.value=null,B.value=!1,U.value=!1,k.value=null,T.value=!1,R.value=!1,S.value=null}return{ghostText:u,isCompletLoading:c,autocompleteEnabled:s,completionConfidence:o,triggerAutocomplete:J,acceptCompletion:x,acceptCompletionWord:F,clearCompletion:Q,tonePopoverVisible:i,toneLoading:_,toneResult:y,toneOriginalText:z,openTonePopover:ee,adjustTone:W,closeTonePopover:g,polishPanelVisible:B,polishLoading:U,polishResult:k,polishOriginalText:j,openPolishPanel:Y,polishText:de,closePolishPanel:he,rewritePanelVisible:T,rewriteLoading:R,rewriteResult:S,openRewritePanel:Z,closeRewritePanel:G,cleanup:ce}}const xt=h(!1);function Gl(){return!!(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia)}async function Jl(){if(!Gl())return console.warn("[useScreenCapture] 浏览器不支持 Screen Capture API"),null;xt.value=!0;try{const t=await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"monitor"},audio:!1}),n=t.getVideoTracks()[0];if(!n)return console.warn("[useScreenCapture] 没有获取到视频轨道"),t.getTracks().forEach(u=>u.stop()),null;const r=n.getSettings();if(r.displaySurface&&r.displaySurface!=="monitor")return t.getTracks().forEach(u=>u.stop()),console.warn("[useScreenCapture] 用户选择了非屏幕源:",r.displaySurface),null;let d=null;if("ImageCapture"in window)try{const c=await new ImageCapture(n).grabFrame();d=document.createElement("canvas"),d.width=c.width,d.height=c.height;const s=d.getContext("2d");s&&s.drawImage(c,0,0),c.close()}catch(u){console.warn("[useScreenCapture] ImageCapture 失败,回退到 Canvas 方案:",u)}if(!d){const u=document.createElement("video");u.srcObject=t,u.muted=!0,await new Promise((s,o)=>{u.onloadedmetadata=()=>s(),u.onerror=()=>o(new Error("视频加载失败")),u.play()}),await new Promise(s=>setTimeout(s,200)),d=document.createElement("canvas"),d.width=u.videoWidth,d.height=u.videoHeight;const c=d.getContext("2d");c&&c.drawImage(u,0,0),u.pause(),u.srcObject=null}return t.getTracks().forEach(u=>u.stop()),d}catch(t){return(t==null?void 0:t.name)==="NotAllowedError"||(t==null?void 0:t.name)==="AbortError"?(console.log("[useScreenCapture] 用户取消了屏幕选择"),null):(console.error("[useScreenCapture] 截图失败:",t),null)}finally{xt.value=!1}}function Zl(){const t=h([]),n=O(()=>t.value.length>0),r=O(()=>t.value.length);function d(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function u(o,i){const _=URL.createObjectURL(o),y={id:d(),blob:o,previewUrl:_,source:i,createdAt:Date.now()};t.value.push(y)}function c(o){const i=t.value.findIndex(_=>_.id===o);i!==-1&&(URL.revokeObjectURL(t.value[i].previewUrl),t.value.splice(i,1))}function s(){t.value.forEach(o=>{URL.revokeObjectURL(o.previewUrl)}),t.value=[]}return{images:t,hasImages:n,count:r,addImage:u,removeImage:c,clearAll:s}}async function at(t){const n=new FormData;if(t instanceof File)n.append("file",t);else{const r=`paste-image-${Date.now()}.png`;n.append("file",t,r)}return await ei(n)}async function ei(t,n=3){for(let r=0;r<=n;r++)try{return await Be.post("/upload",t,{headers:{"Content-Type":void 0},timeout:6e4})}catch(d){if(r===n)throw d;const u=1e3*Math.pow(2,r);console.warn(`[Upload] 上传失败,${u/1e3}秒后重试(第 ${r+1}/${n} 次)`),await new Promise(c=>setTimeout(c,u))}throw new Error("上传失败:已达最大重试次数")}function ti(){const t=Rt({isListening:!1,interimText:"",finalText:"",error:null,isSupported:typeof window<"u"&&(!!window.SpeechRecognition||!!window.webkitSpeechRecognition)});let n=null,r=!1;function d(){const o=window.SpeechRecognition||window.webkitSpeechRecognition;if(!o){t.error="当前浏览器不支持语音识别,请使用 Chrome 或 Edge";return}n=new o,n.lang="zh-CN",n.continuous=!0,n.interimResults=!0,n.maxAlternatives=1,n.onresult=i=>{let _="";for(let y=i.resultIndex;y<i.results.length;y++){const z=i.results[y],B=z[0].transcript;z.isFinal?t.finalText+=B:_+=B}t.interimText=_},n.onerror=i=>{switch(i.error){case"not-allowed":t.error="麦克风权限被拒绝,请在浏览器设置中允许使用麦克风",r=!1,t.isListening=!1;break;case"service-not-allowed":t.error="语音识别服务不可用,请检查浏览器设置",r=!1,t.isListening=!1;break;case"network":t.error="网络错误,语音识别服务不可用,请检查网络连接",r=!1,t.isListening=!1;break;case"no-speech":break;case"aborted":break;case"audio-capture":t.error="音频采集失败,请检查麦克风设备",r=!1,t.isListening=!1;break;default:t.error=`语音识别错误: ${i.error}`;break}},n.onend=()=>{if(t.interimText="",r)try{n.start()}catch{setTimeout(()=>{if(r&&n)try{n.start()}catch(i){console.error("[SpeechRecognition] 自动重启失败:",i),t.isListening=!1,t.error="语音识别自动恢复失败,请重新点击语音按钮"}},100)}else t.isListening=!1}}function u(){if(!t.isListening){if(!t.isSupported){t.error="当前浏览器不支持语音识别,请使用 Chrome 或 Edge";return}if(t.error=null,t.finalText="",t.interimText="",r=!0,n||d(),!n){t.error="语音识别器创建失败";return}try{n.start(),t.isListening=!0}catch{setTimeout(()=>{if(r&&n&&!t.isListening)try{n.start(),t.isListening=!0}catch(o){console.error("[SpeechRecognition] 启动失败:",o),t.error="语音识别启动失败,请重试",r=!1}},200)}}}function c(){if(r=!1,n)try{n.stop()}catch(o){console.warn("[SpeechRecognition] stop 警告:",o)}t.isListening=!1,t.interimText=""}function s(){t.finalText="",t.interimText="",t.error=null}return{state:t,start:u,stop:c,reset:s}}const ni={key:0,class:"reply-preview"},ai={class:"reply-preview-content"},si={class:"reply-preview-sender"},oi={class:"reply-preview-text"},li={class:"chat-toolbar"},ii={class:"toolbar-left"},ri={class:"emoji-wrapper"},ci={key:0,class:"emoji-picker-popup"},ui={class:"emoji-grid"},di=["onClick"],vi={class:"chat-input-card"},mi=["title"],fi=["disabled"],pi=be({__name:"ReplyBox",props:{replyToMessage:{default:null}},emits:["send","cancelReply"],setup(t,{expose:n,emit:r}){function d(E){return E?typeof E=="string"?E:Array.isArray(E)?E.map(w=>w.loc&&w.msg?`${w.loc.slice(1).join(".")}: ${w.msg}`:w.msg?w.msg:JSON.stringify(w)).join("; "):typeof E=="object"?JSON.stringify(E):String(E):""}const u=r,c=h(""),s=h(null),o=h(null),i=h(null),_=Pe(),{sendTyping:y}=ht(),z=h(60),B=h(!1),U=h(!1),k=h(!1),j=h(!1);let T=null;const R=h(!1),S=h(null),f=h(!1),p=Zl(),{state:H,start:V,stop:b,reset:J}=ti(),x=Ql({getConversationId:()=>_.currentConversationId,getInputText:()=>c.value,setInputText:E=>{c.value=E}}),F=h("");function Q(E){return E.length>0&&!E.endsWith(" ")&&!E.endsWith(`
|
||
`)}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,I=Q(M)?" ":"";c.value=M+I+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,I=Math.max(80,Math.min(400,G+w))-G,$=Math.max(60,Math.min(300,ce+I));z.value=$}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 $;const E=c.value.trim(),w=p.hasImages.value,M=E.length>0;if(!w&&!M)return;const I=($=_.currentConversation)==null?void 0:$.id;if(!I){ie.warning("请先选择一个会话");return}w&&await me(I),M&&u("send",E),c.value="",z.value=60}async function me(E){var $,m;ie.info("发送中...");const w=[...p.images.value];let M=0,I=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){I++,console.error("[ReplyBox] 图片发送失败:",re);const ve=d((m=($=re==null?void 0:re.response)==null?void 0:$.data)==null?void 0:m.detail)||(re==null?void 0:re.message)||"未知错误";ie.error(`图片发送失败:${ve}`)}p.clearAll(),M>0&&I===0?ie.success("发送成功"):M>0&&I>0&&ie.warning(`${M} 张发送成功,${I} 张发送失败`)}async function _e(E){var M;const w=(M=E.clipboardData)==null?void 0:M.items;if(w)for(const I of Array.from(w)){if(I.kind==="file"){E.preventDefault();const $=I.getAsFile();if(!$)continue;$.type.startsWith("image/")||$.name.match(/\.(jpg|jpeg|png|gif|bmp|webp|svg|ico|tiff?)$/i)?await pe($):await ne($);return}if(I.type.startsWith("image/")&&I.kind==="string"){E.preventDefault();const $=I.getAsFile();if($){await pe($);return}}if(I.kind==="string"){E.preventDefault();const $=I.getAsFile();if($){$.type.startsWith("image/")||$.name.match(/\.(jpg|jpeg|png|gif|bmp|webp|svg|ico|tiff?)$/i)?await pe($):await ne($);return}}}}async function pe(E){var M,I,$;const w=(M=_.currentConversation)==null?void 0:M.id;if(!w){ie.warning("请先选择一个会话");return}try{ie.info("图片上传中...");const m=await at(E),ae=await nt(w,"[图片]","image",{media_url:m.url,file_name:m.filename,file_size:m.file_size});_.messages.push(ae),ie.success("图片发送成功")}catch(m){console.error("图片上传失败:",m),ie.error(d(($=(I=m==null?void 0:m.response)==null?void 0:I.data)==null?void 0:$.detail)||(m==null?void 0:m.message)||"图片上传失败,请重试")}}async function ne(E){var M,I,$;const w=(M=_.currentConversation)==null?void 0:M.id;if(!w){ie.warning("请先选择一个会话");return}try{const m=E instanceof File?E.name:"文件";ie.info(`正在上传: ${m}`);const ae=await at(E),re=await nt(w,`[文件] ${ae.filename}`,"file",{media_url:ae.url,file_name:ae.filename,file_size:ae.file_size});_.messages.push(re),ie.success("文件发送成功")}catch(m){console.error("文件发送失败:",m),ie.error(d(($=(I=m==null?void 0:m.response)==null?void 0:I.data)==null?void 0:$.detail)||(m==null?void 0:m.message)||"文件发送失败,请重试")}}async function fe(E){var $,m,ae;const w=E.target,M=w.files;if(!M||M.length===0)return;const I=($=_.currentConversation)==null?void 0:$.id;if(!I){ie.warning("请先选择一个会话");return}for(const re of Array.from(M))try{re===M[0]&&ie.info(`正在上传: ${re.name}`);const ve=await at(re),Ce=ve.msg_type==="image",Ie=await nt(I,Ce?"[图片]":`[文件] ${re.name}`,Ce?"image":"file",{media_url:ve.url,file_name:ve.filename,file_size:ve.file_size});_.messages.push(Ie),ie.success(`${re.name} 发送成功`)}catch(ve){console.error("文件上传失败:",ve),ie.error(`${re.name} 上传失败: ${d((ae=(m=ve==null?void 0:ve.response)==null?void 0:m.data)==null?void 0:ae.detail)||(ve==null?void 0:ve.message)||"请重试"}`)}w.value=""}function Ae(){const E=s.value;if(!E)return;const w=E.value.substring(E.selectionStart,E.selectionEnd);if(!w||w.length<5){ie.info("请先选中至少 5 个字符再使用语气调整功能");return}x.openTonePopover(w,c.value)}function Ne(E){const w=s.value;if(!w)return;const M=w.selectionStart,I=w.selectionEnd,$=c.value;c.value=$.substring(0,M)+E+$.substring(I),De(()=>{w&&(w.selectionStart=M+E.length,w.selectionEnd=M+E.length,w.focus())})}function Ye(E){c.value=E,x.closePolishPanel()}function Qe(E){c.value=E,x.closeRewritePanel()}function Ge(E){const w=c.value,M=w.length>0&&!w.endsWith(" ")?" ":"";c.value=w+M+E,x.closeRewritePanel()}function Je(E){var w;switch(E){case"image":o.value&&(o.value.accept="image/*",o.value.multiple=!0,o.value.click());break;case"file":o.value&&(o.value.accept="",o.value.multiple=!0,o.value.click());break;case"quickReply":(w=s.value)==null||w.focus();break;case"screenshot":Oe();break;default:const M={remote:"远程协助功能开发中"};ie.info(M[E]||"功能开发中")}}async function Oe(){var M;if(!((M=_.currentConversation)==null?void 0:M.id)){ie.warning("请先选择一个会话");return}try{ie.info("请在弹窗中选择「屏幕」以截取完整画面",3)}catch{}const w=await Jl();w&&(S.value=w,j.value=!0)}function Ze(E){j.value=!1,S.value=null,p.addImage(E,"screenshot")}function et(){j.value=!1,S.value=null}function je(){var w;if(!((w=_.currentConversation)==null?void 0:w.id)){ie.warning("请先选择一个会话");return}f.value=!0}function Le(E){f.value=!1,p.addImage(E,"camera")}function xe(){f.value=!1}async function st(E){var M,I,$;const w=(M=_.currentConversation)==null?void 0:M.id;if(w)try{ie.info("截图上传中...");const m=await at(E),ae=await nt(w,"[截图]","image",{media_url:m.url,file_name:m.filename,file_size:m.file_size});_.messages.push(ae),ie.success("截图发送成功")}catch(m){console.error("[ReplyBox] 截图发送失败:",m);const ae=d(($=(I=m==null?void 0:m.response)==null?void 0:I.data)==null?void 0:$.detail)||(m==null?void 0:m.message)||"未知错误";ie.error(`截图发送失败:${ae}`)}finally{k.value=!1,T=null}}function vt(){k.value=!1,T=null}Ke(()=>{document.addEventListener("keydown",ue)}),Xe(()=>{document.removeEventListener("mousemove",N),document.removeEventListener("mouseup",oe),document.removeEventListener("keydown",ue),H.isListening&&b(),p.clearAll(),x.cleanup()});function mt(){var E;c.value="",(E=s.value)==null||E.blur()}return n({handleSend:X,handleUndo:mt}),(E,w)=>{var M,I,$;return a(),l("div",{class:"reply-box",ref_key:"replyBoxRef",ref:i},[e("div",{class:se(["input-resize-handle",{dragging:B.value}]),onMousedown:D,title:"拖拽调整输入框高度"},null,34),t.replyToMessage?(a(),l("div",ni,[w[24]||(w[24]=e("div",{class:"reply-preview-bar"},null,-1)),e("div",ai,[e("span",si,v(t.replyToMessage.sender_name||"未知"),1),e("span",oi,v((M=t.replyToMessage.content)==null?void 0:M.substring(0,60))+v(((I=t.replyToMessage.content)==null?void 0:I.length)>60?"...":""),1)]),e("button",{class:"reply-preview-close",title:"取消回复",onClick:w[0]||(w[0]=m=>E.$emit("cancelReply"))},"✕")])):A("",!0),C(Vo,{images:L(p).images.value,onRemove:L(p).removeImage},null,8,["images","onRemove"]),e("div",li,[e("div",ii,[e("button",{class:"tb-btn",title:"截图",onClick:Oe},[...w[25]||(w[25]=[K(" ✂️ ",-1),e("span",{class:"tb-tip"},"截图",-1)])]),e("button",{class:"tb-btn",title:"拍照",onClick:je},[...w[26]||(w[26]=[K(" 📷 ",-1),e("span",{class:"tb-tip"},"拍照",-1)])]),w[30]||(w[30]=e("div",{class:"tb-sep"},null,-1)),e("div",ri,[e("button",{class:"tb-btn",title:"表情",onClick:w[1]||(w[1]=m=>R.value=!R.value)},[...w[27]||(w[27]=[K(" 😊 ",-1),e("span",{class:"tb-tip"},"表情",-1)])]),R.value?(a(),l("div",ci,[e("div",ui,[(a(),l(ge,null,we(ee,m=>e("button",{key:m,class:"emoji-grid__item",onClick:ae=>he(m)},v(m),9,di)),64))])])):A("",!0),R.value?(a(),l("div",{key:1,class:"emoji-picker-overlay",onClick:w[2]||(w[2]=m=>R.value=!1)})):A("",!0)]),e("button",{class:"tb-btn",title:"文件",onClick:w[3]||(w[3]=m=>Je("file"))},[...w[28]||(w[28]=[K(" 📎 ",-1),e("span",{class:"tb-tip"},"文件",-1)])]),w[31]||(w[31]=e("div",{class:"tb-sep"},null,-1)),e("button",{class:"tb-btn",title:"邀请员工/部门",onClick:w[4]||(w[4]=m=>U.value=!0)},[...w[29]||(w[29]=[K(" 👥 ",-1),e("span",{class:"tb-tip"},"邀请",-1)])])]),C(Ko,{"autocomplete-enabled":L(x).autocompleteEnabled.value,"has-selection":g.value,"has-text":Y.value,onToggleAutocomplete:w[5]||(w[5]=m=>L(x).autocompleteEnabled.value=!L(x).autocompleteEnabled.value),onToneAdjust:Ae,onPolish:w[6]||(w[6]=m=>L(x).openPolishPanel()),onRewrite:w[7]||(w[7]=m=>L(x).openRewritePanel())},null,8,["autocomplete-enabled","has-selection","has-text"])]),e("div",vi,[He(e("textarea",{ref_key:"inputRef",ref:s,"onUpdate:modelValue":w[8]||(w[8]=m=>c.value=m),class:se(["chat-input",{"chat-input--listening":L(H).isListening}]),placeholder:"输入回复内容... (Enter或Ctrl+Enter发送,Shift+Enter换行)",style:Ve({height:z.value+"px"}),onKeydown:q,onInput:w[9]||(w[9]=m=>L(x).triggerAutocomplete()),onPaste:_e},null,38),[[kt,c.value]]),L(H).isSupported?(a(),l("button",{key:0,class:se(["btn-voice",{"btn-voice--listening":L(H).isListening}]),title:L(H).isListening?"点击停止识别":"语音输入 (Ctrl+D)",onClick:te},v(L(H).isListening?"⏹":"🎤"),11,mi)):A("",!0),e("button",{class:"btn-send",disabled:!c.value.trim()&&!L(p).hasImages.value,onClick:X}," 发 送 ",8,fi)]),C(jo,{"ghost-text":L(x).ghostText.value,loading:L(x).isCompletLoading.value,confidence:L(x).completionConfidence.value,visible:L(x).autocompleteEnabled.value,onAccept:w[10]||(w[10]=m=>L(x).acceptCompletion()),onAcceptWord:w[11]||(w[11]=m=>L(x).acceptCompletionWord()),onDismiss:w[12]||(w[12]=m=>L(x).clearCompletion())},null,8,["ghost-text","loading","confidence","visible"]),C(Dt,{modelValue:U.value,"onUpdate:modelValue":w[13]||(w[13]=m=>U.value=m),"conversation-id":(($=L(_).currentConversation)==null?void 0:$.id)||"","existing-participant-ids":W.value,onSuccess:de},null,8,["modelValue","conversation-id","existing-participant-ids"]),e("input",{ref_key:"fileInputRef",ref:o,type:"file",style:{display:"none"},onChange:fe},null,544),k.value?(a(),ye(Qs,{key:1,"screenshot-canvas":L(T),onConfirm:st,onCancel:vt},null,8,["screenshot-canvas"])):A("",!0),j.value&&S.value?(a(),ye(po,{key:2,"screenshot-canvas":S.value,onConfirm:Ze,onCancel:et},null,8,["screenshot-canvas"])):A("",!0),C(Ao,{modelValue:f.value,"onUpdate:modelValue":w[14]||(w[14]=m=>f.value=m),onConfirm:Le,onCancel:xe},null,8,["modelValue"]),C(cl,{visible:L(x).tonePopoverVisible.value,loading:L(x).toneLoading.value,result:L(x).toneResult.value,"original-text":L(x).toneOriginalText.value,onSelect:w[15]||(w[15]=m=>L(x).adjustTone(L(x).toneOriginalText.value,c.value,m)),onReplace:w[16]||(w[16]=m=>{Ne(m),L(x).closeTonePopover()}),onCancel:w[17]||(w[17]=m=>L(x).closeTonePopover())},null,8,["visible","loading","result","original-text"]),C(Ml,{visible:L(x).polishPanelVisible.value,loading:L(x).polishLoading.value,result:L(x).polishResult.value,"original-text":L(x).polishOriginalText.value,onSelectAction:w[18]||(w[18]=m=>L(x).polishText(m)),onReplace:w[19]||(w[19]=m=>Ye(m)),onCancel:w[20]||(w[20]=m=>L(x).closePolishPanel())},null,8,["visible","loading","result","original-text"]),C(ql,{visible:L(x).rewritePanelVisible.value,loading:L(x).rewriteLoading.value,result:L(x).rewriteResult.value,onReplace:w[21]||(w[21]=m=>Qe(m)),onAppend:w[22]||(w[22]=m=>Ge(m)),onCancel:w[23]||(w[23]=m=>L(x).closeRewritePanel())},null,8,["visible","loading","result"])],512)}}}),gi=ke(pi,[["__scopeId","data-v-f33d28fd"]]),yi={class:"ai-recommend-bar"},_i={key:0,class:"ai-recommend-bar__loading"},hi={key:1,class:"ai-recommend-bar__empty"},bi={key:2,class:"ai-recommend-bar__list"},ki=["onClick","title"],wi={class:"ai-recommend-bar__card-header"},$i={key:0,class:"ai-recommend-bar__shortcut"},Ci={class:"ai-recommend-bar__card-title"},xi={class:"ai-recommend-bar__card-content"},Ii=be({__name:"AiRecommendBar",props:{recommendations:{},loading:{type:Boolean}},emits:["select","refresh"],setup(t,{expose:n,emit:r}){const d=t,u=r,c=Pe(),s=O(()=>d.recommendations.slice(0,6));function o(_){c.pendingReplyText=_,u("select",_)}function i(_){return _>=.85?"ai-recommend-bar__confidence--high":_>=.6?"ai-recommend-bar__confidence--medium":"ai-recommend-bar__confidence--low"}return n({selectByIndex(_){_<s.value.length&&o(s.value[_].content)}}),(_,y)=>{const z=le("el-icon");return a(),l("div",yi,[t.loading?(a(),l("div",_i,[C(z,{class:"is-loading",size:14},{default:P(()=>[C(L(tt))]),_:1}),y[2]||(y[2]=e("span",{class:"ai-recommend-bar__loading-text"},"AI 正在生成推荐...",-1))])):t.recommendations.length===0?(a(),l("div",hi,[y[3]||(y[3]=K(" 暂无 AI 推荐 ",-1)),e("button",{class:"ai-recommend-bar__refresh",onClick:y[0]||(y[0]=B=>_.$emit("refresh")),title:"刷新推荐"}," 🔄 ")])):(a(),l("div",bi,[(a(!0),l(ge,null,we(s.value,(B,U)=>(a(),l("div",{key:U,class:"ai-recommend-bar__card",onClick:k=>o(B.content),title:`按 ${U+1} 快速选用`},[e("div",wi,[U<6?(a(),l("span",$i,v(U+1),1)):A("",!0),e("span",Ci,v(B.title),1),e("span",{class:se(["ai-recommend-bar__confidence",i(B.confidence)])},v((B.confidence*100).toFixed(0))+"% ",3)]),e("p",xi,v(B.content),1)],8,ki))),128)),e("button",{class:"ai-recommend-bar__refresh-btn",onClick:y[1]||(y[1]=B=>_.$emit("refresh")),title:"刷新推荐列表"}," 🔄 ")]))])}}}),Ti=ke(Ii,[["__scopeId","data-v-276ff3df"]]),Si={class:"quick-reply-bar"},Mi={class:"quick-reply-bar__chips"},Ri=["onClick","onMouseenter"],Ai={key:0,class:"quick-reply-bar__kbd"},Li={key:0,class:"quick-reply-bar__empty"},Ei={class:"quick-reply-bar__l2-header"},Di={class:"quick-reply-bar__l2-title"},Pi={class:"quick-reply-bar__l2-list"},Bi=["onClick"],Vi={key:0,class:"quick-reply-bar__l2-kbd"},Oi={class:"quick-reply-bar__l2-item-title"},zi={class:"quick-reply-bar__l2-item-content"},Ui={key:0,class:"quick-reply-bar__l2-empty"},Ni=be({__name:"QuickReplyBar",props:{templates:{}},emits:["select"],setup(t,{expose:n,emit:r}){const d=r,u=Pe(),c=wt(),s=h({l1Index:-1,l2Index:-1}),o=h(!1),i=h(-1);let _=null;const y=O(()=>c.categories),z=O(()=>c.templatesByCategory),B=O(()=>s.value.l1Index<0||s.value.l1Index>=y.value.length?"":y.value[s.value.l1Index]),U=O(()=>{const Q=B.value;return Q?z.value[Q]||[]:[]});function k(Q){if(s.value.l1Index===Q&&o.value){f();return}s.value.l1Index=Q,s.value.l2Index=-1,o.value=!0,S()}function j(Q){o.value&&(s.value.l1Index=Q,s.value.l2Index=-1,S())}function T(Q){const ee=u.currentConversation,W={};ee!=null&&ee.employee_name&&(W.employee_name=ee.employee_name),ee!=null&&ee.department&&(W.department=ee.department);const g=c.replaceVariables(Q.content,W);u.pendingReplyText=g,d("select",g),i.value=s.value.l1Index,f(),ie.success(`已选用: ${Q.title}`)}function R(){S(),_=setTimeout(()=>{o.value=!1},200)}function S(){_&&(clearTimeout(_),_=null)}function f(){o.value=!1,S()}const p=h(-1);function H(Q){Q<0||Q>=y.value.length||(p.value=Q,k(Q),setTimeout(()=>{p.value=-1},3e3))}function V(Q){if(!o.value)return;const ee=U.value;Q<1||Q>ee.length||T(ee[Q-1])}function b(){if(!o.value)return;const Q=U.value;Q.length>0&&T(Q[0])}function J(){f()}function x(){return o.value}function F(){i.value>=0&&k(i.value)}return n({selectL1ByIndex:H,selectL2ByDigit:V,confirmL2Selection:b,closeL2Panel:J,isL2Open:x,undoSelection:F}),Xe(()=>{S()}),(Q,ee)=>(a(),l("div",Si,[e("div",Mi,[(a(!0),l(ge,null,we(y.value,(W,g)=>(a(),l("button",{key:W,class:se(["quick-reply-bar__chip",{"is-active":s.value.l1Index===g,"is-kb-selected":p.value===g}]),onClick:Y=>k(g),onMouseenter:Y=>j(g)},[K(v(W)+" ",1),g<6?(a(),l("kbd",Ai,v(g+1),1)):A("",!0)],42,Ri))),128)),y.value.length===0?(a(),l("span",Li," 暂无快速回复模板 ")):A("",!0)]),C(At,{name:"quick-reply-fade"},{default:P(()=>[o.value?(a(),l("div",{key:0,class:"quick-reply-bar__l2-panel",onMouseenter:S,onMouseleave:R},[e("div",Ei,[e("span",Di,v(B.value),1),e("button",{class:"quick-reply-bar__l2-close",onClick:f,title:"关闭"},"✕")]),e("div",Pi,[(a(!0),l(ge,null,we(U.value,(W,g)=>(a(),l("div",{key:W.id,class:"quick-reply-bar__l2-item",onClick:Y=>T(W)},[g<9?(a(),l("kbd",Vi,v(g+1),1)):A("",!0),e("span",Oi,v(W.title),1),e("span",zi,v(W.content),1)],8,Bi))),128)),U.value.length===0?(a(),l("div",Ui," 该分类下暂无模板 ")):A("",!0)])],32)):A("",!0)]),_:1})]))}}),ji=ke(Ni,[["__scopeId","data-v-803f630a"]]);function Wi(){var d,u,c,s;const t=document.activeElement;if(!t)return!1;const n=(d=t.tagName)==null?void 0:d.toLowerCase();if(n==="input"||n==="textarea"||n==="select"||t.isContentEditable)return!0;const r=(u=t.getAttribute)==null?void 0:u.call(t,"role");return!!(r==="textbox"||r==="combobox"||r==="searchbox"||(c=t.closest)!=null&&c.call(t,".el-input")||(s=t.closest)!=null&&s.call(t,".el-textarea"))}function qi(t={}){const n=[];function r(){if(t.onQuickReplyDigit)for(let u=1;u<=9;u++)n.push({key:String(u),handler:()=>t.onQuickReplyDigit(u)});t.onUndo&&n.push({key:"Escape",handler:()=>t.onUndo()}),t.onQuickReplyBack&&n.push({key:"Backspace",handler:()=>t.onQuickReplyBack()},{key:"ArrowLeft",handler:()=>t.onQuickReplyBack()}),t.onQuickReplyNavigate&&n.push({key:"ArrowUp",handler:()=>t.onQuickReplyNavigate("up")},{key:"ArrowDown",handler:()=>t.onQuickReplyNavigate("down")}),t.onQuickReplyConfirm&&n.push({key:"Enter",handler:()=>t.onQuickReplyConfirm()}),t.onFocusSearch&&n.push({key:"/",handler:()=>t.onFocusSearch()}),t.onScreenshot&&n.push({ctrl:!0,shift:!0,key:"a",handler:()=>t.onScreenshot()}),t.onTabSwitch&&n.push({key:"Tab",handler:()=>t.onTabSwitch()}),t.onSend&&(n.push({shift:!0,key:" ",code:"Space",handler:()=>t.onSend()}),n.push({shift:!0,key:"Space",handler:()=>t.onSend()}),n.push({shift:!0,key:" ",handler:()=>t.onSend()}))}function d(u){if(!(u.shiftKey&&(u.code==="Space"||u.key===" "||u.key==="Space"||u.keyCode===32))&&(u.isComposing||u.keyCode===229)||document.querySelector(".wechat-capture"))return;const s=Wi();for(const o of n){if(o.code){if(o.code!==u.code)continue}else if(o.key!==u.key)continue;const i=o.ctrl?u.ctrlKey||u.metaKey:!u.ctrlKey&&!u.metaKey,_=o.alt?u.altKey:!u.altKey,y=o.shift?u.shiftKey:!u.shiftKey;if(!(!i||!_||!y)){if(s){if(o.key==="Escape"){u.preventDefault(),o.handler(u);return}if(o.key==="Tab"){u.preventDefault(),o.handler(u);return}if(o.shift&&o.code==="Space"){u.preventDefault(),o.handler(u);return}if(o.key==="Enter"||o.key==="/"||o.key==="Backspace")continue;continue}u.preventDefault(),o.handler(u);return}}}r(),Ke(()=>{document.addEventListener("keydown",d)}),Xe(()=>{document.removeEventListener("keydown",d)})}const Fi={class:"reply-suggest-area__tabs"},Hi={key:0,class:"reply-suggest-area__badge"},Ki={class:"reply-suggest-area__content"},Xi=be({__name:"ReplySuggestArea",props:{conversationId:{}},emits:["select","send","undo"],setup(t,{emit:n}){const r=t,d=n,u=Pe(),c=wt(),s=h("ai"),o=h([]),i=h(!1),_=h(null),y=h(null),z=O(()=>c.templates),B=O(()=>o.value.length),U=O(()=>s.value==="ai"?"var(--suggest-ai-bg)":"var(--suggest-quick-bg)");function k(x){u.pendingReplyText=x,d("select",x)}function j(x){var F;s.value==="quick"&&x==="ai"&&((F=y.value)==null||F.closeL2Panel()),s.value=x}function T(x){var F;s.value==="quick"&&((F=y.value)==null||F.selectL1ByIndex(x))}function R(x){var F,Q;s.value==="ai"?x>=1&&x<=o.value.length&&k(o.value[x-1].content):s.value==="quick"&&((F=y.value)!=null&&F.isL2Open()?(Q=y.value)==null||Q.selectL2ByDigit(x):x<=6&&T(x-1))}function S(){var x,F;s.value==="quick"&&(x=y.value)!=null&&x.isL2Open()&&((F=y.value)==null||F.confirmL2Selection())}function f(){var x;s.value==="quick"&&((x=y.value)==null||x.closeL2Panel())}function p(){var x,F,Q;if(s.value==="quick"&&((x=y.value)!=null&&x.isL2Open())){(F=y.value)==null||F.closeL2Panel();return}d("undo"),s.value==="quick"&&((Q=y.value)==null||Q.undoSelection())}function H(){d("send")}async function V(){await b(),ie.success("AI 推荐已刷新")}async function b(){if(r.conversationId){i.value=!0;try{const x=await Ht(r.conversationId);u.aiDrafts.has(r.conversationId)||u.aiDrafts.set(r.conversationId,new Map);const F=`draft_${Date.now()}`;u.aiDrafts.get(r.conversationId).set(F,x),J()}catch(x){console.warn("自动刷新 AI 推荐失败:",(x==null?void 0:x.message)||x)}finally{i.value=!1}}}function J(){const x=r.conversationId;if(!x){o.value=[];return}const F=u.aiDrafts.get(x);if(F&&F.size>0){const Q=[];F.forEach(ee=>{Q.push({title:"AI 回复建议",content:ee.content,confidence:ee.confidence})}),o.value=Q.slice(0,6);return}o.value=[{title:"重置密码流程",content:"您好,密码重置可通过企业门户自助操作:访问 portal.company.com → 忘记密码 → 按提示完成重置。如无法自助,请提供工号,我帮您后台重置。",confidence:.92},{title:"VPN 连接故障排查",content:"VPN 连接问题常见原因:1) 网络切换后未重连;2) 证书过期。请先尝试:断开 VPN → 重启客户端 → 重新连接。如仍失败,请提供错误截图。",confidence:.85}]}return qi({onQuickReplyDigit:x=>R(x),onUndo:()=>p(),onQuickReplyConfirm:()=>S(),onQuickReplyBack:()=>f(),onTabSwitch:()=>j(s.value==="ai"?"quick":"ai"),onSend:()=>H()}),Me(()=>r.conversationId,()=>{J()},{immediate:!0}),Me(()=>u.recommendRefreshSignal,(x,F)=>{x!==0&&r.conversationId&&b()}),(x,F)=>(a(),l("div",{class:"reply-suggest-area",style:Ve({background:U.value})},[e("div",Fi,[e("button",{class:se(["reply-suggest-area__tab",{"is-active":s.value==="ai"}]),onClick:F[0]||(F[0]=Q=>j("ai"))},[F[2]||(F[2]=K(" 🤖 AI推荐 ",-1)),B.value>0?(a(),l("span",Hi,v(B.value),1)):A("",!0),F[3]||(F[3]=e("kbd",{class:"reply-suggest-area__kbd"},"Tab",-1))],2),e("button",{class:se(["reply-suggest-area__tab",{"is-active":s.value==="quick"}]),onClick:F[1]||(F[1]=Q=>j("quick"))},[...F[4]||(F[4]=[K(" ⚡ 快速回复 ",-1),e("kbd",{class:"reply-suggest-area__kbd"},"Tab",-1)])],2)]),e("div",Ki,[s.value==="ai"?(a(),ye(Ti,{key:0,ref_key:"aiRecommendBarRef",ref:_,recommendations:o.value,loading:i.value,onSelect:k,onRefresh:V},null,8,["recommendations","loading"])):(a(),ye(ji,{key:1,ref_key:"quickReplyBarRef",ref:y,templates:z.value,onSelect:k},null,8,["templates"]))])],4))}}),Yi=ke(Xi,[["__scopeId","data-v-ffe31bf2"]]),Qi={class:"conversation-separator__text"},Gi={key:0,class:"conversation-separator__badge"},Ji=be({__name:"ConversationSeparator",props:{summary:{},isCurrent:{type:Boolean}},setup(t){return(n,r)=>(a(),l("div",{class:se(["conversation-separator",{"is-current":t.isCurrent}])},[r[0]||(r[0]=e("span",{class:"conversation-separator__line"},null,-1)),e("span",Qi,[K(v(t.summary)+" ",1),t.isCurrent?(a(),l("span",Gi,"当前会话")):A("",!0)]),r[1]||(r[1]=e("span",{class:"conversation-separator__line"},null,-1))],2))}}),Zi=ke(Ji,[["__scopeId","data-v-e5e2722a"]]),er={class:"agent-list"},tr={key:0,class:"empty-hint"},nr=["onClick"],ar={class:"agent-avatar"},sr={class:"agent-info"},or={class:"agent-name"},lr={key:2,class:"load-text"},ir={key:0,class:"agent-sub"},rr={class:"dialog-footer"},cr={key:0,class:"selected-hint"},ur=be({__name:"InviteDialog",props:{modelValue:{type:Boolean},excludeAgentIds:{default:()=>[]}},emits:["update:modelValue","confirm"],setup(t,{emit:n}){const r=t,d=n,u=ut(),c=h(r.modelValue),s=h(""),o=h(null),i=h(!1);Me(()=>r.modelValue,k=>{c.value=k,k&&(s.value="",o.value=null,u.loadAvailableAgents())}),Me(c,k=>{d("update:modelValue",k)});const _=O(()=>o.value&&u.availableAgents.find(k=>k.user_id===o.value)||null),y=O(()=>{const k=new Set(r.excludeAgentIds);let j=u.availableAgents.filter(R=>!k.has(R.user_id)&&R.status==="online");const T=s.value.trim().toLowerCase();return T&&(j=j.filter(R=>R.name.toLowerCase().includes(T))),j.sort((R,S)=>R.current_load===0&&S.current_load>0?-1:S.current_load===0&&R.current_load>0?1:R.current_load-S.current_load)});function z(k){return k?k.charAt(k.length-1):"?"}function B(k){o.value=k.user_id}async function U(){o.value&&(i.value=!0,d("confirm",o.value))}return(k,j)=>{const T=le("el-input"),R=le("el-tag"),S=le("Star"),f=le("el-icon"),p=le("Check"),H=le("el-button"),V=le("el-dialog");return a(),ye(V,{modelValue:c.value,"onUpdate:modelValue":j[2]||(j[2]=b=>c.value=b),title:"🤝 摇人 — 邀请坐席协作",width:"450px","close-on-click-modal":!1,"destroy-on-close":""},{footer:P(()=>[e("div",rr,[_.value?(a(),l("div",cr," 已选:"+v(_.value.name),1)):A("",!0),e("div",null,[C(H,{onClick:j[1]||(j[1]=b=>c.value=!1)},{default:P(()=>[...j[6]||(j[6]=[K("取消",-1)])]),_:1}),C(H,{type:"primary",disabled:!o.value,loading:i.value,onClick:U},{default:P(()=>[...j[7]||(j[7]=[K(" 确认邀请 ",-1)])]),_:1},8,["disabled","loading"])])])]),default:P(()=>[C(T,{modelValue:s.value,"onUpdate:modelValue":j[0]||(j[0]=b=>s.value=b),placeholder:"搜索坐席姓名...","prefix-icon":"Search",clearable:"",style:{"margin-bottom":"12px"}},null,8,["modelValue"]),e("div",er,[y.value.length===0?(a(),l("div",tr," 暂无可邀请的在线坐席 ")):A("",!0),(a(!0),l(ge,null,we(y.value,b=>(a(),l("div",{key:b.user_id,class:se(["agent-item",{selected:o.value===b.user_id,busy:b.current_load>=b.max_load}]),onClick:J=>B(b)},[e("div",ar,v(z(b.name)),1),e("div",sr,[e("div",or,[K(v(b.name)+" ",1),b.current_load>=b.max_load?(a(),ye(R,{key:0,type:"danger",size:"small",effect:"plain"},{default:P(()=>[...j[3]||(j[3]=[K(" 忙碌 ",-1)])]),_:1})):b.current_load===0?(a(),ye(R,{key:1,type:"success",size:"small",effect:"plain"},{default:P(()=>[...j[4]||(j[4]=[K(" 空闲 ",-1)])]),_:1})):(a(),l("span",lr," 负载 "+v(b.current_load)+"/"+v(b.max_load),1))]),b.current_load<=b.max_load*.6?(a(),l("div",ir,[C(f,null,{default:P(()=>[C(S)]),_:1}),j[5]||(j[5]=K(" 推荐 ",-1))])):A("",!0)]),o.value===b.user_id?(a(),ye(f,{key:0,class:"check-icon",color:"var(--accent)"},{default:P(()=>[C(p)]),_:1})):A("",!0)],10,nr))),128))])]),_:1},8,["modelValue"])}}}),dr=ke(ur,[["__scopeId","data-v-b7f62250"]]),zt={primary_agent:"#3b82f6",collaborator:"#07C160",owner:"#FF9800",invitee:"transparent"};function vr(t){const n=O(()=>{const u=[];t.agentName&&u.push({id:t.agentId||"agent_primary",name:t.agentName,avatar:"",department:"IT坐席",role:"primary_agent",joined:!0,isSelf:t.agentId===t.currentAgentId}),t.employeeName&&u.push({id:t.employeeId,name:t.employeeName,avatar:"",department:"",role:"owner",joined:!0,isSelf:!1});for(const s of t.collaboratingAgentIds){const o=t.collaboratingAgentNames[s]||s;u.push({id:s,name:o,avatar:"",department:"IT坐席",role:"collaborator",joined:!0,isSelf:s===t.currentAgentId})}const c=(t.participants||[]).slice().sort((s,o)=>s.joined!==o.joined?s.joined?-1:1:s.joined_at&&o.joined_at?new Date(s.joined_at).getTime()-new Date(o.joined_at).getTime():0);for(const s of c)u.push({id:s.id,name:s.name,avatar:s.avatar||"",department:s.department||"",role:"invitee",joined:s.joined??!1,isSelf:!1,joinedAt:s.joined_at});return u}),r=O(()=>n.value.length),d=O(()=>n.value.some(u=>!u.joined));return{normalizedParticipants:n,totalCount:r,hasPending:d}}const mr={class:"expanded-panel"},fr={class:"expanded-panel__header"},pr={class:"expanded-panel__list"},gr=["onMouseenter"],yr=["src","alt","onError"],_r={key:1,class:"expanded-panel__avatar-letter"},hr={class:"expanded-panel__info"},br={key:0,class:"expanded-panel__role-tag expanded-panel__role-tag--primary"},kr={key:1,class:"expanded-panel__role-tag expanded-panel__role-tag--collab"},wr={key:2,class:"expanded-panel__role-tag expanded-panel__role-tag--owner"},$r={key:0,class:"expanded-panel__dept"},Cr=be({__name:"ParticipantExpandedPanel",props:{participants:{},isPrimaryAgent:{type:Boolean}},emits:["remove","collapse"],setup(t,{emit:n}){const r=n,d=h({});function u(_){const y=_||"?";return y.charAt(y.length-1)}const c={},s=h({});function o(_,y){c[_]=y}function i(_,y){De(()=>{const z=c[_];z&&(s.value[_]=z.scrollWidth>z.clientWidth)})}return(_,y)=>{const z=le("el-button"),B=le("el-tooltip"),U=le("el-icon");return a(),l("div",mr,[e("div",fr,[y[2]||(y[2]=e("span",{class:"expanded-panel__title"},"参与者详情",-1)),C(z,{type:"primary",link:"",size:"small",onClick:y[0]||(y[0]=k=>r("collapse"))},{default:P(()=>[...y[1]||(y[1]=[K(" 收起 ",-1)])]),_:1})]),e("div",pr,[(a(!0),l(ge,null,we(t.participants,k=>(a(),l("div",{key:k.id,class:se(["expanded-panel__item",{"expanded-panel__item--self":k.isSelf}])},[C(B,{content:`${k.name}${k.department?" · "+k.department:""}`,disabled:!s.value[k.id],placement:"top"},{default:P(()=>[e("div",{class:se(["expanded-panel__avatar",{"expanded-panel__avatar--self":k.isSelf}]),style:Ve({borderColor:L(zt)[k.role]}),onMouseenter:j=>i(k.id,j)},[k.avatar&&!d.value[k.id]?(a(),l("img",{key:0,src:k.avatar,alt:k.name,class:"expanded-panel__avatar-img",onError:j=>d.value[k.id]=!0},null,40,yr)):(a(),l("span",_r,v(u(k.name)),1))],46,gr)]),_:2},1032,["content","disabled"]),e("div",hr,[e("span",{class:"expanded-panel__name",ref_for:!0,ref:j=>o(k.id,j)},[K(v(k.name)+" ",1),k.role==="primary_agent"?(a(),l("span",br,"主责")):k.role==="collaborator"?(a(),l("span",kr,"协作")):k.role==="owner"?(a(),l("span",wr,"发起人")):A("",!0)],512),k.department?(a(),l("span",$r,v(k.department),1)):A("",!0)]),k.role==="invitee"?(a(),l("span",{key:0,class:se(["expanded-panel__status",k.joined?"expanded-panel__status--joined":"expanded-panel__status--pending"])},v(k.joined?"已加入":"待加入"),3)):A("",!0),t.isPrimaryAgent&&k.role==="invitee"?(a(),ye(U,{key:1,class:"expanded-panel__remove-icon",onClick:$e(j=>r("remove",k.id),["stop"])},{default:P(()=>[C(L(en))]),_:1},8,["onClick"])):A("",!0)],2))),128))])])}}}),xr=ke(Cr,[["__scopeId","data-v-8d14fa82"]]),Ir={key:0,class:"participant-bar"},Tr={class:"participant-bar__label"},Sr={class:"participant-bar__avatars"},Mr=["src","alt","onError"],Rr={key:1,class:"participant-bar__avatar-letter"},Ar={key:0,class:"participant-bar__overflow"},Lr={key:0,class:"participant-bar__expanded-wrapper"},It=6,Er=be({__name:"ParticipantBar",props:{participants:{},agentName:{},agentId:{default:""},employeeName:{},employeeId:{},isPrimaryAgent:{type:Boolean},collaboratingAgentIds:{default:()=>[]},collaboratingAgentNames:{default:()=>({})},currentAgentId:{default:""},conversationId:{default:""}},emits:["invite","remove"],setup(t,{emit:n}){const r=t,d=n,u=h({}),c=h(!1),s=h(new Map),{normalizedParticipants:o,totalCount:i}=vr(r),_=O(()=>r.participants.length>0||r.collaboratingAgentIds.length>0),y=O(()=>o.value.slice(0,It)),z=O(()=>Math.max(0,o.value.length-It));function B(T){const R=T||"?";return R.charAt(R.length-1)}function U(){c.value=!c.value,r.conversationId&&s.value.set(r.conversationId,c.value)}function k(){c.value=!1,r.conversationId&&s.value.set(r.conversationId,!1)}function j(T){r.isPrimaryAgent&&d("remove",T)}return Me(()=>r.conversationId,T=>{if(T){const R=s.value.get(T);c.value=R??!1}else c.value=!1},{immediate:!0}),(T,R)=>{const S=le("el-button");return _.value?(a(),l("div",Ir,[e("div",{class:"participant-bar__main",onClick:U},[e("span",Tr,v(L(i))+"人参与: ",1),e("div",Sr,[(a(!0),l(ge,null,we(y.value,f=>(a(),l("div",{key:f.id,class:se(["participant-bar__avatar",{"participant-bar__avatar--self":f.isSelf}]),style:Ve({borderColor:L(zt)[f.role]})},[f.avatar&&!u.value[f.id]?(a(),l("img",{key:0,src:f.avatar,alt:f.name,class:"participant-bar__avatar-img",onError:p=>u.value[f.id]=!0},null,40,Mr)):(a(),l("span",Rr,v(B(f.name)),1))],6))),128)),z.value>0?(a(),l("span",Ar," +"+v(z.value),1)):A("",!0)]),e("span",{class:se(["participant-bar__arrow",{"participant-bar__arrow--open":c.value}])},"▼",2)]),e("div",{class:"participant-bar__actions",onClick:R[1]||(R[1]=$e(()=>{},["stop"]))},[t.isPrimaryAgent?(a(),ye(S,{key:0,size:"small",type:"primary",link:"",onClick:R[0]||(R[0]=$e(f=>T.$emit("invite"),["stop"]))},{default:P(()=>[...R[2]||(R[2]=[K(" + 邀请 ",-1)])]),_:1})):A("",!0)]),C(At,{name:"expand"},{default:P(()=>[c.value?(a(),l("div",Lr,[C(xr,{participants:L(o),"is-primary-agent":t.isPrimaryAgent,onRemove:j,onCollapse:k},null,8,["participants","is-primary-agent"])])):A("",!0)]),_:1})])):A("",!0)}}}),Dr=ke(Er,[["__scopeId","data-v-f55e8e66"]]),Pr=["title"],Br=be({__name:"ItLevelBadge",props:{level:{},size:{default:"md"}},setup(t){const n=t,r={bronze:{icon:"🛡️",name:"青铜",lv:1,title:"青铜 Lv.1 — IT基础薄弱,需要详细指导"},silver:{icon:"🥈",name:"白银",lv:2,title:"白银 Lv.2 — 能完成基本操作,需协助复杂问题"},gold:{icon:"🥇",name:"黄金",lv:3,title:"黄金 Lv.3 — 熟悉常见操作,可独立解决一般问题"},platinum:{icon:"⭐",name:"铂金",lv:4,title:"铂金 Lv.4 — 熟练使用办公软件,能自助排查常见故障"},diamond:{icon:"💎",name:"钻石",lv:5,title:"钻石 Lv.5 — 具备一定技术能力,能理解技术解释"},star:{icon:"🌟",name:"星耀",lv:6,title:"星耀 Lv.6 — IT能力较强,可自行解决大部分问题"},king:{icon:"👑",name:"王者",lv:7,title:"王者 Lv.7 — IT达人级别,仅少数问题需协助"}},d=O(()=>r[n.level]||r.silver);return(u,c)=>(a(),l("span",{class:se(["it-badge",[t.level,`it-badge-${t.size}`]]),title:d.value.title},v(d.value.icon),11,Pr))}}),gt=ke(Br,[["__scopeId","data-v-da7a1629"]]);async function Vr(t){return await Be.get("/troubleshooting-templates",{params:t})}async function Or(t,n){return await Be.put(`/employees/${t}/it-level`,{it_level:n,source:"manual"})}const zr={class:"user-info-bar"},Ur={class:"user-info-bar__left"},Nr=["src"],jr={key:1,class:"user-info-bar__avatar"},Wr={class:"user-info-bar__name-group"},qr={class:"user-info-bar__name"},Fr={key:0,class:"user-info-bar__dept"},Hr={class:"info-chip info-chip--gray"},Kr={class:"info-chip info-chip--gray"},Xr={class:"info-chip info-chip--accent"},Yr={key:0,class:"info-chip info-chip--red"},Qr={key:1,class:"info-chip info-chip--purple"},Gr={key:1},Jr={class:"user-info-bar__detail-inner"},Zr={class:"detail-card"},ec={class:"detail-card__body"},tc={class:"detail-card__emotion"},nc={class:"detail-card__emotion-emoji"},ac={class:"detail-card__emotion-text"},sc={class:"detail-card__desc"},oc={class:"detail-card"},lc={class:"detail-card__body"},ic={class:"detail-card__stat"},rc={class:"detail-card__stat"},cc={class:"detail-card"},uc={class:"detail-card__body"},dc={class:"detail-card__stat"},vc={class:"detail-card__stat"},mc={class:"detail-card"},fc={class:"detail-card__body"},pc={class:"detail-card__level-row"},gc={class:"detail-card__level-name"},yc={class:"detail-card__level-desc"},_c=["onClick"],hc={key:0,class:"it-level-selector__check"},bc={class:"detail-card"},kc={class:"detail-card__body"},wc={class:"detail-card__stat"},$c={class:"detail-card__stat"},Cc={class:"detail-card"},xc={class:"detail-card__body"},Ic={key:0,class:"detail-card__notes"},Tc={key:1,class:"detail-card__notes detail-card__notes--empty"},Sc=be({__name:"UserInfoBar",props:{conversation:{},availableAgents:{default:()=>[]},canInviteCollaborator:{type:Boolean,default:!1},historyMode:{type:Boolean,default:!1},historyLoading:{type:Boolean,default:!1}},emits:["assign","resolve","toggle-pin","toggle-todo","transfer","invite","toggle-history"],setup(t,{expose:n}){const r=t,d=h(!1),u=h(!1),c=h("silver"),s=h({}),o={bronze:{name:"青铜",lv:1,desc:"IT基础薄弱,需要详细指导"},silver:{name:"白银",lv:2,desc:"能完成基本操作,需协助复杂问题"},gold:{name:"黄金",lv:3,desc:"熟悉常见操作,可独立解决一般问题"},platinum:{name:"铂金",lv:4,desc:"熟练使用办公软件,能自助排查常见故障"},diamond:{name:"钻石",lv:5,desc:"具备一定技术能力,能理解技术解释"},star:{name:"星耀",lv:6,desc:"IT能力较强,可自行解决大部分问题"},king:{name:"王者",lv:7,desc:"IT达人级别,仅少数问题需协助"}},i=O(()=>{var W;return!!((W=r.conversation)!=null&&W.avatar)}),_=h(!1),y=O(()=>{var g;return(((g=r.conversation)==null?void 0:g.employee_name)||"?").slice(0,2)}),z=O(()=>{var Y;const W=((Y=r.conversation)==null?void 0:Y.emotion_state)||"normal";return{normal:"正常",worried:"担忧",angry:"愤怒",urgent:"紧急"}[W]||"正常"}),B=O(()=>{var Y;const W=((Y=r.conversation)==null?void 0:Y.emotion_state)||"normal";return{normal:"😊",worried:"😟",angry:"😡",urgent:"🔴"}[W]||"😊"}),U=O(()=>{var Y;const W=((Y=r.conversation)==null?void 0:Y.emotion_state)||"normal";return{normal:"情绪平稳,正常沟通",worried:"语气急促,连续追问进度",angry:"措辞激烈,多次表达不满",urgent:"问题严重影响工作,要求立即处理"}[W]||"情绪平稳"}),k=O(()=>{var g;const W=((g=r.conversation)==null?void 0:g.emotion_state)||"normal";return W==="normal"?"info-chip--gray":W==="angry"||W==="urgent"?"info-chip--red":"info-chip--yellow"}),j=O(()=>{var Z;const W=(Z=r.conversation)==null?void 0:Z.created_at;if(!W)return"0分钟";const g=Date.now()-new Date(W).getTime(),Y=Math.floor(g/6e4);if(Y<60)return`${Y}分钟`;const de=Math.floor(Y/60),he=Y%60;return`${de}小时${he}分钟`}),T=O(()=>{var g;const W=(g=r.conversation)==null?void 0:g.tags;return((W==null?void 0:W.repeat_count)||0)+1}),R=O(()=>{var W,g;return((g=(W=r.conversation)==null?void 0:W.tags)==null?void 0:g.repeat_count)||0}),S=O(()=>Object.keys(s.value).length>0),f=O(()=>{const W=s.value,g=[];return W.pregnant&&g.push("孕妇"),W.disabled&&g.push("残疾/行动不便"),W.preference&&g.push(W.preference),W.custom&&g.push(W.custom),g.join(";")||""}),p=O(()=>{var W;return((W=o[c.value])==null?void 0:W.name)||"白银"}),H=O(()=>{var W;return((W=o[c.value])==null?void 0:W.lv)||2}),V=O(()=>{var W;return((W=o[c.value])==null?void 0:W.desc)||""}),b=O(()=>{var W,g;return((g=(W=r.conversation)==null?void 0:W.tags)==null?void 0:g.repeat_count)||0}),J=O(()=>Math.floor(Math.random()*5)+1),x=O(()=>"VPN 2次,邮箱 1次");function F(){d.value=!d.value,d.value||(u.value=!1)}async function Q(W){var Y,de;const g=(Y=r.conversation)==null?void 0:Y.employee_id;if(!g){ie.warning("无法获取员工信息");return}try{await Or(g,W),c.value=W,u.value=!1,ie.success(`IT 等级已调整为 ${((de=o[W])==null?void 0:de.name)||W}`)}catch(he){console.error("更新 IT 等级失败:",he),c.value=W,u.value=!1}}function ee(){d.value=!1,u.value=!1,r.conversation&&(c.value=r.conversation.level||"silver")}return n({resetForNewConversation:ee}),(W,g)=>{var ce,te,ue,D,N,oe,q,X,me,_e,pe,ne;const Y=le("el-icon"),de=le("el-button"),he=le("el-dropdown-item"),Z=le("el-dropdown-menu"),G=le("el-dropdown");return a(),l("div",zr,[e("div",{class:"user-info-bar__persistent",onClick:F},[e("div",Ur,[i.value&&!_.value?(a(),l("img",{key:0,src:(ce=t.conversation)==null?void 0:ce.avatar,class:"user-info-bar__avatar-img",onError:g[0]||(g[0]=fe=>_.value=!0)},null,40,Nr)):(a(),l("div",jr,v(y.value),1)),e("div",Wr,[e("span",qr,v(((te=t.conversation)==null?void 0:te.employee_name)||((ue=t.conversation)==null?void 0:ue.employee_id)||"未知"),1),(D=t.conversation)!=null&&D.department||(N=t.conversation)!=null&&N.position?(a(),l("span",Fr," · "+v(((oe=t.conversation)==null?void 0:oe.department)||"")+v((q=t.conversation)!=null&&q.position?" "+t.conversation.position:""),1)):A("",!0),C(gt,{level:c.value,size:"sm"},null,8,["level"])]),e("span",{class:se(["user-info-bar__arrow",{"is-expanded":d.value}])},"▶",2)]),e("div",{class:"user-info-bar__chips",onClick:g[2]||(g[2]=$e(()=>{},["stop"]))},[e("span",{class:se(["info-chip",k.value])}," 😟 "+v(z.value),3),e("span",Hr," ⏱ "+v(j.value),1),e("span",Kr," 💬 "+v(T.value)+"轮 ",1),e("span",Xr," 🖥 "+v(p.value)+" Lv."+v(H.value),1),R.value>0?(a(),l("span",Yr," 🔁 重复×"+v(R.value),1)):A("",!0),S.value?(a(),l("span",Qr," 📝 备注 ")):A("",!0),e("span",{class:se(["info-chip info-chip--toggle",{"is-active":t.historyMode,"is-loading":t.historyLoading}]),onClick:g[1]||(g[1]=$e(fe=>W.$emit("toggle-history"),["stop"]))},[t.historyLoading?(a(),ye(Y,{key:0,class:"is-loading"},{default:P(()=>[C(L(tt))]),_:1})):(a(),l("span",Gr,v(t.historyMode?"🕐 返回当前":"🕐 历史会话"),1))],2)]),e("div",{class:"user-info-bar__actions",onClick:g[9]||(g[9]=$e(()=>{},["stop"]))},[((X=t.conversation)==null?void 0:X.status)==="queued"?(a(),ye(de,{key:0,type:"success",size:"small",onClick:g[3]||(g[3]=fe=>W.$emit("assign"))},{default:P(()=>[C(Y,null,{default:P(()=>[C(L(Mt))]),_:1}),g[12]||(g[12]=K(" 接单 ",-1))]),_:1})):A("",!0),C(de,{size:"small",type:(me=t.conversation)!=null&&me.is_pinned?"warning":"default",onClick:g[4]||(g[4]=fe=>W.$emit("toggle-pin"))},{default:P(()=>{var fe;return[K(v((fe=t.conversation)!=null&&fe.is_pinned?"取消置顶":"📌 置顶"),1)]}),_:1},8,["type"]),C(de,{size:"small",type:(_e=t.conversation)!=null&&_e.is_todo?"warning":"default",onClick:g[5]||(g[5]=fe=>W.$emit("toggle-todo"))},{default:P(()=>{var fe;return[K(v((fe=t.conversation)!=null&&fe.is_todo?"取消代办":"📋 代办"),1)]}),_:1},8,["type"]),C(G,{trigger:"click",onCommand:g[6]||(g[6]=fe=>W.$emit("transfer",fe))},{dropdown:P(()=>[C(Z,null,{default:P(()=>[(a(!0),l(ge,null,we(t.availableAgents,fe=>(a(),ye(he,{key:fe.user_id,command:fe.user_id},{default:P(()=>[K(v(fe.name)+" ("+v(fe.current_load)+"/"+v(fe.max_load)+") ",1)]),_:2},1032,["command"]))),128)),t.availableAgents.length===0?(a(),ye(he,{key:0,disabled:""},{default:P(()=>[...g[14]||(g[14]=[K(" 暂无可用坐席 ",-1)])]),_:1})):A("",!0)]),_:1})]),default:P(()=>[C(de,{size:"small",type:"info"},{default:P(()=>[C(Y,null,{default:P(()=>[C(L(tn))]),_:1}),g[13]||(g[13]=K(" 转接 ",-1))]),_:1})]),_:1}),t.canInviteCollaborator?(a(),ye(de,{key:1,size:"small",type:"primary",onClick:g[7]||(g[7]=fe=>W.$emit("invite"))},{default:P(()=>[...g[15]||(g[15]=[K(" 🤝 摇人 ",-1)])]),_:1})):A("",!0),((pe=t.conversation)==null?void 0:pe.status)==="serving"?(a(),ye(de,{key:2,type:"danger",size:"small",onClick:g[8]||(g[8]=fe=>W.$emit("resolve"))},{default:P(()=>[C(Y,null,{default:P(()=>[C(L(nn))]),_:1}),g[16]||(g[16]=K(" 结单 ",-1))]),_:1})):((ne=t.conversation)==null?void 0:ne.status)==="pending_close"?(a(),ye(de,{key:3,type:"warning",size:"small",disabled:""},{default:P(()=>[...g[17]||(g[17]=[K(" ⏳ 等待员工确认 ",-1)])]),_:1})):A("",!0)])]),e("div",{class:se(["user-info-bar__detail",{"is-expanded":d.value}])},[e("div",Jr,[e("div",Zr,[g[18]||(g[18]=e("div",{class:"detail-card__header"},"情绪状态",-1)),e("div",ec,[e("div",tc,[e("span",nc,v(B.value),1),e("span",ac,v(z.value),1)]),e("div",sc,v(U.value),1)])]),e("div",oc,[g[23]||(g[23]=e("div",{class:"detail-card__header"},"会话详情",-1)),e("div",lc,[e("div",ic,[g[20]||(g[20]=e("span",{class:"detail-card__stat-icon"},"⏱",-1)),e("span",null,[g[19]||(g[19]=K("等待时长:",-1)),e("strong",null,v(j.value),1)])]),e("div",rc,[g[22]||(g[22]=e("span",{class:"detail-card__stat-icon"},"💬",-1)),e("span",null,[g[21]||(g[21]=K("对话轮次:",-1)),e("strong",null,v(T.value)+" 轮",1)])])])]),e("div",cc,[g[26]||(g[26]=e("div",{class:"detail-card__header"},"问题分析",-1)),e("div",uc,[e("div",dc,[g[24]||(g[24]=e("span",{class:"detail-card__stat-icon"},"🔁",-1)),e("span",null,v(R.value>0?"重复问题":"非重复问题"),1)]),e("div",vc,[e("span",null,[g[25]||(g[25]=K("7天内反馈:",-1)),e("strong",null,v(b.value)+" 次",1)])])])]),e("div",mc,[g[28]||(g[28]=e("div",{class:"detail-card__header"},"IT技能等级",-1)),e("div",fc,[e("div",pc,[C(gt,{level:c.value,size:"md"},null,8,["level"]),e("span",gc,v(p.value)+" Lv."+v(H.value),1),C(de,{size:"small",type:"primary",link:"",onClick:g[10]||(g[10]=$e(fe=>u.value=!u.value,["stop"]))},{default:P(()=>[...g[27]||(g[27]=[K(" 调整 ",-1)])]),_:1})]),e("div",yc,v(V.value),1),u.value?(a(),l("div",{key:0,class:"it-level-selector",onClick:g[11]||(g[11]=$e(()=>{},["stop"]))},[(a(),l(ge,null,we(o,(fe,Ae)=>e("div",{key:Ae,class:se(["it-level-selector__item",{"is-active":c.value===Ae}]),onClick:Ne=>Q(Ae)},[C(gt,{level:Ae,size:"sm"},null,8,["level"]),e("span",null,v(fe.name)+" Lv."+v(fe.lv),1),c.value===Ae?(a(),l("span",hc,"✓")):A("",!0)],10,_c)),64))])):A("",!0)])]),e("div",bc,[g[30]||(g[30]=e("div",{class:"detail-card__header"},"历史工单",-1)),e("div",kc,[e("div",wc,[e("span",null,[g[29]||(g[29]=K("30天内工单:",-1)),e("strong",null,v(J.value),1)])]),e("div",$c,[e("span",null,"类型分布:"+v(x.value),1)])])]),e("div",Cc,[g[31]||(g[31]=e("div",{class:"detail-card__header"},"其他备注",-1)),e("div",xc,[f.value?(a(),l("div",Ic,v(f.value),1)):(a(),l("div",Tc," 暂无备注 "))])])])],2)])}}}),Mc=ke(Sc,[["__scopeId","data-v-b675a057"]]),Rc={key:0,class:"flowchart-step"},Ac={class:"flowchart-step__number"},Lc={key:1,class:"flowchart-decision"},Ec={class:"flowchart-decision__box"},Dc={class:"flowchart-decision__text"},Pc={class:"flowchart-decision__branches"},Bc={key:0,class:"flowchart-branch flowchart-branch--yes"},Vc={class:"flowchart-branch__content"},Oc={key:1,class:"flowchart-branch flowchart-branch--no"},zc={class:"flowchart-branch__content"},Uc={key:2,class:"flowchart-node__children"},Nc=be({__name:"FlowchartNode",props:{node:{},baseIndex:{default:1}},setup(t){const n=t,r=O(()=>n.baseIndex),d=O(()=>`flowchart-status--${n.node.status||"pending"}`);return(u,c)=>{const s=le("FlowchartNode",!0);return a(),l("div",{class:se(["flowchart-node",[`flowchart-node--${t.node.type}`,`flowchart-node--${t.node.status||"pending"}`]])},[t.node.type==="step"?(a(),l("div",Rc,[e("div",{class:se(["flowchart-step__indicator",d.value])},[e("span",Ac,v(r.value),1)],2),e("div",{class:se(["flowchart-step__connector",d.value])},null,2),e("div",{class:se(["flowchart-step__label",d.value])},v(t.node.label),3)])):A("",!0),t.node.type==="decision"?(a(),l("div",Lc,[e("div",Ec,[c[0]||(c[0]=e("span",{class:"flowchart-decision__icon"},"❓",-1)),e("span",Dc,v(t.node.label),1)]),e("div",Pc,[t.node.yes_branch?(a(),l("div",Bc,[c[1]||(c[1]=e("div",{class:"flowchart-branch__label"},"是",-1)),c[2]||(c[2]=e("div",{class:"flowchart-branch__connector"},null,-1)),e("div",Vc,[C(s,{node:t.node.yes_branch,"base-index":r.value},null,8,["node","base-index"])])])):A("",!0),t.node.no_branch?(a(),l("div",Oc,[c[3]||(c[3]=e("div",{class:"flowchart-branch__label"},"否",-1)),c[4]||(c[4]=e("div",{class:"flowchart-branch__connector"},null,-1)),e("div",zc,[C(s,{node:t.node.no_branch,"base-index":r.value},null,8,["node","base-index"])])])):A("",!0)])])):A("",!0),t.node.type==="step"&&t.node.children&&t.node.children.length>0?(a(),l("div",Uc,[(a(!0),l(ge,null,we(t.node.children,(o,i)=>(a(),ye(s,{key:o.id,node:o,"base-index":r.value+i+1},null,8,["node","base-index"]))),128))])):A("",!0)],2)}}}),jc=ke(Nc,[["__scopeId","data-v-c80637ec"]]),Wc={class:"troubleshoot-bar"},qc={class:"troubleshoot-bar__icon-bar-label"},Fc=["onClick"],Hc={key:0,class:"path-arrow-inline"},Kc=["title"],Xc={class:"troubleshoot-bar__flowchart-inner"},Yc={key:1,class:"troubleshoot-bar__flowchart-empty"},Qc=be({__name:"TroubleshootBar",setup(t){const n=Pe(),r=h(!1),d=h(!0),u=h([]),c=h(""),s=h([]),o=h(null),i=O(()=>s.value),_=O(()=>o.value),y=O(()=>{const f=s.value.findIndex(p=>p.status==="current");return f>=0?f+1:1});function z(){d.value=!d.value,d.value&&(r.value=!1)}function B(){d.value=!0,r.value=!1}function U(){r.value=!r.value}function k(f){const p=u.value.find(H=>H.id===f);p&&(s.value=[...p.path_steps],o.value=p.flowchart||null)}function j(f){const p=s.value;if(!p||f<0||f>=p.length)return;const H=p.map((V,b)=>({...V,status:b<f?"done":b===f?"current":"pending"}));s.value=H,o.value&&T(o.value,f),ie.success(`当前步骤:${p[f].label}`)}function T(f,p){let H=0;function V(b){if(b.type==="step"){if(H<p?b.status="done":H===p?b.status="current":b.status="pending",H++,b.children)for(const J of b.children)V(J)}else b.type==="decision"&&(b.status="pending",b.yes_branch&&V(b.yes_branch),b.no_branch&&V(b.no_branch))}V(f)}async function R(){try{const f=await Vr();u.value=f.items,f.items.length>0&&(c.value=f.items[0].id,s.value=[...f.items[0].path_steps],o.value=f.items[0].flowchart||null)}catch(f){console.error("获取排查模板失败:",f),S()}}function S(){const f=[{id:"tpl-vpn",name:"VPN连接故障",category:"vpn",is_active:!0,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),path_steps:[{label:"确认VPN版本",status:"done"},{label:"清除缓存重连",status:"current"},{label:"远程排查",status:"pending"},{label:"升级客户端",status:"pending"},{label:"回访确认",status:"pending"}],flowchart:{id:"fc-vpn-1",type:"step",label:"确认VPN客户端版本",status:"done",children:[{id:"fc-vpn-2",type:"decision",label:"版本是否为最新?",status:"pending",yes_branch:{id:"fc-vpn-3",type:"step",label:"清除DNS缓存并重连",status:"current",children:[{id:"fc-vpn-4",type:"decision",label:"重连是否成功?",status:"pending",yes_branch:{id:"fc-vpn-5",type:"step",label:"回访确认",status:"pending"},no_branch:{id:"fc-vpn-6",type:"step",label:"发起远程协助",status:"pending",children:[{id:"fc-vpn-7",type:"decision",label:"远程能否解决?",status:"pending",yes_branch:{id:"fc-vpn-8",type:"step",label:"回访确认并结单",status:"pending"},no_branch:{id:"fc-vpn-9",type:"step",label:"升级至二线团队",status:"pending"}}]}}]},no_branch:{id:"fc-vpn-10",type:"step",label:"升级VPN客户端到最新版",status:"pending",children:[{id:"fc-vpn-11",type:"step",label:"重试连接",status:"pending"}]}}]}},{id:"tpl-email",name:"邮箱登录故障",category:"email",is_active:!0,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),path_steps:[{label:"确认邮箱状态",status:"done"},{label:"重置密码",status:"current"},{label:"检查配置",status:"pending"},{label:"清理缓存",status:"pending"},{label:"回访确认",status:"pending"}],flowchart:{id:"fc-email-1",type:"step",label:"确认邮箱账号状态",status:"done",children:[{id:"fc-email-2",type:"decision",label:"账号是否被锁定?",status:"pending",yes_branch:{id:"fc-email-3",type:"step",label:"解锁账号并重置密码",status:"current"},no_branch:{id:"fc-email-4",type:"step",label:"检查Outlook配置",status:"pending",children:[{id:"fc-email-5",type:"decision",label:"配置是否正确?",status:"pending",yes_branch:{id:"fc-email-6",type:"step",label:"清理Outlook缓存",status:"pending"},no_branch:{id:"fc-email-7",type:"step",label:"重新配置Outlook",status:"pending"}}]}}]}},{id:"tpl-system",name:"系统登录异常",category:"system",is_active:!0,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),path_steps:[{label:"确认系统状态",status:"current"},{label:"清除浏览器缓存",status:"pending"},{label:"更换浏览器",status:"pending"},{label:"检查网络权限",status:"pending"},{label:"回访确认",status:"pending"}],flowchart:{id:"fc-sys-1",type:"step",label:"确认系统服务是否正常",status:"current",children:[{id:"fc-sys-2",type:"decision",label:"系统服务是否正常?",status:"pending",yes_branch:{id:"fc-sys-3",type:"step",label:"清除浏览器缓存",status:"pending",children:[{id:"fc-sys-4",type:"decision",label:"清除后是否恢复?",status:"pending",yes_branch:{id:"fc-sys-5",type:"step",label:"回访确认并结单",status:"pending"},no_branch:{id:"fc-sys-6",type:"step",label:"更换浏览器重试",status:"pending"}}]},no_branch:{id:"fc-sys-7",type:"step",label:"联系运维检查服务端",status:"pending"}}]}},{id:"tpl-account",name:"账号权限问题",category:"account",is_active:!0,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),path_steps:[{label:"确认权限需求",status:"current"},{label:"提交审批",status:"pending"},{label:"配置权限",status:"pending"},{label:"验证权限",status:"pending"},{label:"回访确认",status:"pending"}],flowchart:{id:"fc-acc-1",type:"step",label:"确认权限需求与合规性",status:"current",children:[{id:"fc-acc-2",type:"decision",label:"权限是否符合策略?",status:"pending",yes_branch:{id:"fc-acc-3",type:"step",label:"提交权限审批流程",status:"pending",children:[{id:"fc-acc-4",type:"step",label:"审批通过后配置权限",status:"pending"}]},no_branch:{id:"fc-acc-5",type:"step",label:"建议替代方案或申请特批",status:"pending"}}]}}];u.value=f,f.length>0&&(c.value=f[0].id,s.value=[...f[0].path_steps],o.value=f[0].flowchart)}return Ke(()=>{R()}),Me(()=>n.currentConversationId,()=>{k(c.value),r.value=!1,d.value=!0}),(f,p)=>{const H=le("el-option"),V=le("el-select");return a(),l("div",Wc,[d.value?(a(),l("div",{key:0,class:"troubleshoot-bar__icon-bar",onClick:z,title:"点击展开排查步骤"},[p[3]||(p[3]=e("span",{class:"troubleshoot-bar__icon-bar-symbol"},"🔧",-1)),e("span",qc," 排查 · 第"+v(y.value)+"步 / "+v(i.value.length),1),p[4]||(p[4]=e("span",{class:"troubleshoot-bar__icon-bar-arrow"},"▶",-1))])):(a(),l(ge,{key:1},[e("div",{class:"troubleshoot-bar__header",onClick:z},[p[5]||(p[5]=e("span",{class:"troubleshoot-bar__title"},"🔧 排查步骤",-1)),C(V,{modelValue:c.value,"onUpdate:modelValue":p[0]||(p[0]=b=>c.value=b),size:"small",style:{width:"140px"},onClick:p[1]||(p[1]=$e(()=>{},["stop"])),onChange:k},{default:P(()=>[(a(!0),l(ge,null,we(u.value,b=>(a(),ye(H,{key:b.id,label:b.name,value:b.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),e("div",{class:"troubleshoot-bar__path-inline",onClick:p[2]||(p[2]=$e(()=>{},["stop"]))},[(a(!0),l(ge,null,we(i.value,(b,J)=>(a(),l(ge,{key:J},[e("span",{class:se(["path-step-inline",`path-step-inline--${b.status}`]),onClick:x=>j(J)},v(J+1)+" "+v(b.label),11,Fc),J<i.value.length-1?(a(),l("span",Hc,"→")):A("",!0)],64))),128))]),e("span",{class:"troubleshoot-bar__toggle",onClick:$e(U,["stop"]),title:r.value?"收起全流程图":"展开全流程图"},v(r.value?"▼":"▶"),9,Kc),e("span",{class:"troubleshoot-bar__collapse-btn",onClick:$e(B,["stop"]),title:"收起为图标条"},"⤓")]),e("div",{class:se(["troubleshoot-bar__flowchart",{"is-expanded":r.value}])},[e("div",Xc,[_.value?(a(),ye(jc,{key:0,node:_.value,"base-index":1},null,8,["node"])):(a(),l("div",Yc," 暂无流程图数据 "))])],2)],64))])}}}),Gc=ke(Qc,[["__scopeId","data-v-9050e124"]]),Jc={style:{height:"100%",display:"flex","flex-direction":"column"}},Zc={key:1,style:{padding:"4px 20px",background:"var(--bg-accent-soft)","border-bottom":"1px solid var(--border-light)","font-size":"12px",color:"var(--text-secondary)","flex-shrink":"0"}},eu={key:0,style:{"text-align":"center",padding:"20px"}},tu={key:1,style:{"text-align":"center",padding:"20px"}},nu={key:2,style:{"text-align":"center",padding:"40px",color:"var(--text-tertiary)"}},au={key:0,style:{"text-align":"center",padding:"10px"}},su={key:1,style:{"text-align":"center",padding:"40px",color:"var(--text-tertiary)"}},ou={key:2,class:"typing-indicator"},lu={class:"typing-text"},iu={key:3,class:"ai-thinking-indicator"},ru={class:"ai-thinking-text"},cu={key:5,class:"pending-close-banner"},uu={key:7,style:{padding:"12px 16px","border-top":"1px solid var(--border-color)","text-align":"center",color:"var(--accent)","font-size":"13px","background-color":"var(--bg-accent-soft)"}},du={key:8,style:{padding:"12px 16px","border-top":"1px solid var(--border-color)","text-align":"center",color:"var(--text-tertiary)","font-size":"13px","background-color":"var(--bg-tertiary)"}},vu={key:0,style:{"text-align":"center",padding:"20px"}},mu={key:1},fu=be({__name:"ChatArea",setup(t){const n=Pe(),r=ut(),d=O(()=>n.currentConversation),u=h(null),c=h(null),s=h(null),o=h(!1),i=h(!1),_=h(null),y=h(!1),z=h({problem:"",cause:"",solution:""}),B=O(()=>{const D=n.currentConversation;return!D||D.status!=="serving"?!1:D.is_mine||D.is_collaborator}),U=O(()=>{const D=n.currentConversation;return D?D.assigned_agent_id===r.userId:!1}),k=O(()=>{var N,oe;const D=n.currentConversation;return D?(((N=D.participants)==null?void 0:N.length)||0)>0||(((oe=D.collaborating_agent_ids)==null?void 0:oe.length)||0)>0:!1}),j=O(()=>{const D=n.currentConversation;if(!D)return[];const N=new Set;D.assigned_agent_id&&N.add(D.assigned_agent_id);for(const oe of D.collaborating_agent_ids||[])N.add(oe);return N.add(r.userId),Array.from(N)}),T=O(()=>{const D=n.currentConversation;if(!D||D.status!=="serving")return"";const N=[];D.assigned_agent_name&&N.push(`主责:${D.assigned_agent_name}`);const oe=D.collaborating_agent_ids||[];if(oe.length>0){const q=oe.map(X=>{var me;return((me=D.collaborating_agent_names)==null?void 0:me[X])||"未知"});N.push(`协作:${q.join("、")}`)}return N.join(" | ")}),R=O(()=>{const D=n.currentConversationId;return D?n.getTypingText(D):""}),S=O(()=>{const D=n.currentConversationId;return D?n.getAiThinkingText(D):""}),f=O(()=>{const D=n.displayMessages,N=[];let oe="";for(const q of D)q.conversation_id!==oe&&(N.push({type:"separator",key:`sep-${q.conversation_id}`,summary:n.historyConversationSummaries[q.conversation_id]||"未知会话",isCurrent:q.conversation_id===n.currentConversationId}),oe=q.conversation_id),N.push({type:"message",key:q.id,data:q});return N});async function p(){if(n.currentConversation)try{await n.assignConv(n.currentConversation.id,r.userId),ie.success("接单成功")}catch(D){console.error("接单失败:",D)}}async function H(){if(n.currentConversation)try{await qe.confirm("确定要结单吗?结单后无法继续回复。","确认结单",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"});const D=n.currentConversation.id;y.value=!0,await n.fetchSummary(D),n.currentSummary?(z.value.problem=n.currentSummary.problem,z.value.cause=n.currentSummary.cause,z.value.solution=n.currentSummary.solution):z.value={problem:"",cause:"",solution:""}}catch{}}async function V(){if(!n.currentConversation)return;const D=n.currentConversation.id,N=[];z.value.problem&&N.push(`【问题】${z.value.problem}`),z.value.cause&&N.push(`【根因】${z.value.cause}`),z.value.solution&&N.push(`【解决】${z.value.solution}`);const oe=N.join(";")||"已处理完成";try{await n.resolveConv(D,oe),y.value=!1,ie.success("结单请求已发送,等待员工确认(5分钟内未响应将自动关闭)")}catch(q){console.error("结单失败:",q),ie.error("结单失败,请重试")}}async function b(){if(n.currentConversation)try{await n.togglePinConv(n.currentConversation.id)}catch(D){console.error("切换置顶失败:",D)}}async function J(){if(n.currentConversation)try{await n.toggleTodoConv(n.currentConversation.id)}catch(D){console.error("切换代办失败:",D)}}async function x(D){if(n.currentConversation)try{await qe.confirm("确定要转接给其他坐席吗?","确认转接",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}),await n.transferConv(n.currentConversation.id,D),ie.success("转接成功")}catch{}}async function F(D){if(n.currentConversation)try{await n.inviteToConversation(n.currentConversation.id,D),o.value=!1,ie.success("已发送摇人邀请")}catch(N){ie.error((N==null?void 0:N.message)||"摇人失败")}}const Q=O(()=>{var oe;const D=n.currentConversation;if(!D)return[];const N=[D.employee_id];return(oe=D.participants)==null||oe.forEach(q=>N.push(q.id)),N});function ee(){n.fetchConversations()}async function W(D){if(n.currentConversation)try{await qe.confirm("确定移除该参与者?","移除确认",{type:"warning"}),await n.removeParticipantFromConv(n.currentConversation.id,D),ie.success("已移除参与者")}catch{}}function g(D){_.value=D}function Y(D){}function de(){var D;(D=s.value)==null||D.handleSend()}function he(){var D;(D=s.value)==null||D.handleUndo()}async function Z(D){var oe;const N=((oe=_.value)==null?void 0:oe.id)||void 0;await n.sendReply(D,N),_.value=null}function G(D){const oe=n.displayMessages.findIndex(q=>q.id===D);if(oe>=0&&u.value){const X=u.value.querySelectorAll(".message-row")[oe];X&&(X.scrollIntoView({behavior:"smooth",block:"center"}),X.style.transition="background 0.3s",X.style.background="var(--accent-soft)",setTimeout(()=>{X.style.background=""},1500))}}function ce(){De(()=>{u.value&&(u.value.scrollTop=u.value.scrollHeight)})}async function te(){n.historyMode?n.disableHistoryMode():(await n.enableHistoryMode(),ce())}function ue(D){if(!n.historyMode||!n.historyHasMore||n.historyLoading)return;D.target.scrollTop<50&&n.loadMoreHistory()}return Me(()=>n.messages.length,()=>{ce()}),Me(()=>n.currentConversationId,()=>{var D;ce(),r.loadAvailableAgents(),(D=c.value)==null||D.resetForNewConversation()}),(D,N)=>{var ne,fe,Ae,Ne,Ye,Qe,Ge,Je,Oe,Ze,et,je,Le;const oe=le("el-icon"),q=le("el-input"),X=le("el-form-item"),me=le("el-form"),_e=le("el-button"),pe=le("el-dialog");return a(),l("div",Jc,[C(Mc,{ref_key:"userInfoBarRef",ref:c,conversation:L(n).currentConversation,"available-agents":L(r).availableAgents,"can-invite-collaborator":B.value,"history-mode":L(n).historyMode,"history-loading":L(n).historyLoading,onAssign:p,onResolve:H,onTogglePin:b,onToggleTodo:J,onTransfer:x,onInvite:N[0]||(N[0]=xe=>o.value=!0),onToggleHistory:te},null,8,["conversation","available-agents","can-invite-collaborator","history-mode","history-loading"]),C(Gc),k.value?(a(),ye(Dr,{key:0,participants:((ne=d.value)==null?void 0:ne.participants)||[],"agent-name":((fe=d.value)==null?void 0:fe.assigned_agent_name)||"坐席","agent-id":((Ae=d.value)==null?void 0:Ae.assigned_agent_id)||"","employee-name":((Ne=d.value)==null?void 0:Ne.employee_name)||"","employee-id":((Ye=d.value)==null?void 0:Ye.employee_id)||"","is-primary-agent":U.value,"collaborating-agent-ids":((Qe=d.value)==null?void 0:Qe.collaborating_agent_ids)||[],"collaborating-agent-names":((Ge=d.value)==null?void 0:Ge.collaborating_agent_names)||{},"current-agent-id":L(r).userId,"conversation-id":((Je=d.value)==null?void 0:Je.id)||"",onInvite:N[1]||(N[1]=xe=>i.value=!0),onRemove:W},null,8,["participants","agent-name","agent-id","employee-name","employee-id","is-primary-agent","collaborating-agent-ids","collaborating-agent-names","current-agent-id","conversation-id"])):A("",!0),T.value?(a(),l("div",Zc,v(T.value),1)):A("",!0),e("div",{ref_key:"messageListRef",ref:u,class:"message-list-scroll",onScroll:ue},[!L(n).historyMode&&L(n).loadingMessages?(a(),l("div",eu,[C(oe,{class:"is-loading",size:20},{default:P(()=>[C(L(tt))]),_:1}),N[10]||(N[10]=e("div",{style:{"margin-top":"8px",color:"var(--text-tertiary)","font-size":"12px"}},"加载消息中...",-1))])):L(n).historyMode&&L(n).historyLoading&&L(n).historyMessages.length===0?(a(),l("div",tu,[C(oe,{class:"is-loading",size:20},{default:P(()=>[C(L(tt))]),_:1}),N[11]||(N[11]=e("div",{style:{"margin-top":"8px",color:"var(--text-tertiary)","font-size":"12px"}},"加载历史消息中...",-1))])):L(n).historyMode&&L(n).historyMessages.length===0?(a(),l("div",nu," 暂无历史会话 ")):(a(),l(ge,{key:3},[L(n).historyMode&&L(n).historyLoading?(a(),l("div",au,[C(oe,{class:"is-loading",size:16},{default:P(()=>[C(L(tt))]),_:1}),N[12]||(N[12]=e("span",{style:{"margin-left":"4px",color:"var(--text-tertiary)","font-size":"12px"}},"加载更多...",-1))])):A("",!0),(a(!0),l(ge,null,we(f.value,xe=>(a(),l(ge,{key:xe.key},[xe.type==="separator"?(a(),ye(Zi,{key:0,summary:xe.summary,"is-current":xe.isCurrent},null,8,["summary","is-current"])):(a(),ye(ds,{key:1,message:xe.data,onReply:g,onScrollToMessage:G},null,8,["message"]))],64))),128)),!L(n).historyMode&&L(n).displayMessages.length===0?(a(),l("div",su," 暂无消息 ")):A("",!0)],64))],544),R.value?(a(),l("div",ou,[N[13]||(N[13]=e("span",{class:"typing-dots"},[e("span",{class:"dot"}),e("span",{class:"dot"}),e("span",{class:"dot"})],-1)),e("span",lu,v(R.value),1)])):A("",!0),S.value?(a(),l("div",iu,[N[14]||(N[14]=e("span",{class:"ai-thinking-dots"},[e("span",{class:"dot"}),e("span",{class:"dot"}),e("span",{class:"dot"})],-1)),e("span",ru,v(S.value),1)])):A("",!0),!L(n).historyMode&&((Oe=L(n).currentConversation)==null?void 0:Oe.status)!=="resolved"&&((Ze=L(n).currentConversation)==null?void 0:Ze.status)!=="pending_close"&&L(n).currentConversationId?(a(),ye(Yi,{key:4,"conversation-id":L(n).currentConversationId,onSelect:Y,onSend:de,onUndo:he},null,8,["conversation-id"])):A("",!0),((et=L(n).currentConversation)==null?void 0:et.status)==="pending_close"?(a(),l("div",cu,[C(oe,null,{default:P(()=>[C(L(an))]),_:1}),N[15]||(N[15]=e("span",null,"结单请求已发送,等待员工确认中(5分钟内未响应将自动关闭)",-1))])):A("",!0),!L(n).historyMode&&((je=L(n).currentConversation)==null?void 0:je.status)!=="resolved"?(a(),ye(gi,{key:6,ref_key:"replyBoxRef",ref:s,"reply-to-message":_.value,onSend:Z,onCancelReply:N[2]||(N[2]=xe=>_.value=null)},null,8,["reply-to-message"])):L(n).historyMode?(a(),l("div",uu," 🕐 查看历史会话中 · 消息只读 ")):(a(),l("div",du," 该会话已结单,无法发送消息 ")),C(dr,{modelValue:o.value,"onUpdate:modelValue":N[3]||(N[3]=xe=>o.value=xe),"exclude-agent-ids":j.value,onConfirm:F},null,8,["modelValue","exclude-agent-ids"]),C(Dt,{modelValue:i.value,"onUpdate:modelValue":N[4]||(N[4]=xe=>i.value=xe),"conversation-id":((Le=L(n).currentConversation)==null?void 0:Le.id)||"","existing-participant-ids":Q.value,onSuccess:ee},null,8,["modelValue","conversation-id","existing-participant-ids"]),C(pe,{modelValue:y.value,"onUpdate:modelValue":N[9]||(N[9]=xe=>y.value=xe),title:"会话摘要确认",width:"480px","close-on-click-modal":!1},{footer:P(()=>[C(_e,{onClick:N[8]||(N[8]=xe=>y.value=!1)},{default:P(()=>[...N[18]||(N[18]=[K("取消结单",-1)])]),_:1}),C(_e,{type:"primary",onClick:V},{default:P(()=>[...N[19]||(N[19]=[K("确认结单",-1)])]),_:1})]),default:P(()=>[L(n).loadingSummary?(a(),l("div",vu,[C(oe,{class:"is-loading",size:20},{default:P(()=>[C(L(tt))]),_:1}),N[16]||(N[16]=e("div",{style:{"margin-top":"8px",color:"var(--text-tertiary)"}},"正在生成 AI 摘要...",-1))])):(a(),l("div",mu,[N[17]||(N[17]=e("p",{style:{"font-size":"13px",color:"var(--text-secondary)","margin-bottom":"12px"}}," 以下为 AI 自动生成的会话摘要,请确认或修改后提交: ",-1)),C(me,{"label-position":"top",size:"small"},{default:P(()=>[C(X,{label:"问题"},{default:P(()=>[C(q,{modelValue:z.value.problem,"onUpdate:modelValue":N[5]||(N[5]=xe=>z.value.problem=xe),type:"textarea",rows:2},null,8,["modelValue"])]),_:1}),C(X,{label:"原因"},{default:P(()=>[C(q,{modelValue:z.value.cause,"onUpdate:modelValue":N[6]||(N[6]=xe=>z.value.cause=xe),type:"textarea",rows:2},null,8,["modelValue"])]),_:1}),C(X,{label:"解决方案"},{default:P(()=>[C(q,{modelValue:z.value.solution,"onUpdate:modelValue":N[7]||(N[7]=xe=>z.value.solution=xe),type:"textarea",rows:2},null,8,["modelValue"])]),_:1})]),_:1})]))]),_:1},8,["modelValue"])])}}}),pu=ke(fu,[["__scopeId","data-v-436fcc42"]]),gu={class:"ticket-detail"},yu={class:"tic-card"},_u={class:"tic-row"},hu={class:"tic-value"},bu={class:"tic-row"},ku={class:"tic-value"},wu={class:"tic-row"},$u={class:"tic-value"},Cu={key:0,class:"tic-priority urgent"},xu={key:1,class:"tic-priority high"},Iu={key:2,class:"tic-priority normal"},Tu={class:"tic-row"},Su={class:"tic-value"},Mu={class:"tic-row"},Ru={class:"tic-value"},Au={class:"tic-row"},Lu={class:"tic-value tic-desc"},Eu={class:"tic-card"},Du={class:"tic-row"},Pu={class:"tic-value"},Bu={class:"tic-row"},Vu={class:"tic-value"},Ou={class:"tic-actions"},zu=["href"],Tt="https://devops.dc.servyou-it.com/ITSM",Uu=be({__name:"TicketDetail",props:{todoItem:{}},emits:["action"],setup(t){const n=t,r={pending:"待处理",processing:"处理中",resolved:"已解决"},d=O(()=>{var s;const c=(s=n.todoItem.description)==null?void 0:s.process_instance_id;return c?`${Tt}/workflow/allTickets/detail?process_instance_id=${c}`:Tt});function u(c){if(!c)return"—";try{return new Date(c).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return c}}return(c,s)=>{var o,i,_,y;return a(),l("div",gu,[e("div",yu,[s[6]||(s[6]=e("div",{class:"tic-card-title"},"📋 工单描述",-1)),e("div",_u,[s[0]||(s[0]=e("span",{class:"tic-label"},"标题",-1)),e("span",hu,v(t.todoItem.title),1)]),e("div",bu,[s[1]||(s[1]=e("span",{class:"tic-label"},"工单号",-1)),e("span",ku,v(((o=t.todoItem.description)==null?void 0:o.process_instance_id)||"—"),1)]),e("div",wu,[s[2]||(s[2]=e("span",{class:"tic-label"},"优先级",-1)),e("span",$u,[t.todoItem.priority==="urgent"?(a(),l("span",Cu,"🔴 紧急")):t.todoItem.priority==="high"?(a(),l("span",xu,"🟡 高")):(a(),l("span",Iu,"🟢 普通"))])]),e("div",Tu,[s[3]||(s[3]=e("span",{class:"tic-label"},"创建人",-1)),e("span",Su,v(((i=t.todoItem.description)==null?void 0:i.creator)||"—"),1)]),e("div",Mu,[s[4]||(s[4]=e("span",{class:"tic-label"},"创建时间",-1)),e("span",Ru,v(u(t.todoItem.created_at)),1)]),e("div",Au,[s[5]||(s[5]=e("span",{class:"tic-label"},"描述",-1)),e("span",Lu,v(((_=t.todoItem.description)==null?void 0:_.title)||t.todoItem.title||"—"),1)])]),e("div",Eu,[s[9]||(s[9]=e("div",{class:"tic-card-title"},"📊 处理进度",-1)),e("div",Du,[s[7]||(s[7]=e("span",{class:"tic-label"},"状态",-1)),e("span",Pu,[e("span",{class:se(["tic-status-badge",`tic-status-${t.todoItem.status}`])},v(r[t.todoItem.status]||t.todoItem.status),3)])]),e("div",Bu,[s[8]||(s[8]=e("span",{class:"tic-label"},"执行人",-1)),e("span",Vu,v(((y=t.todoItem.description)==null?void 0:y.executor)||t.todoItem.assigned_agent_id||"未分配"),1)])]),e("div",Ou,[e("a",{class:"tic-action-btn tic-action-primary",href:d.value,target:"_blank",rel:"noopener noreferrer"}," 🔗 在 ITSM 中打开 ",8,zu)])])}}}),Nu=ke(Uu,[["__scopeId","data-v-dda29e70"]]),ju={class:"approval-detail"},Wu={class:"tic-card"},qu={class:"tic-row"},Fu={class:"tic-value"},Hu={class:"tic-row"},Ku={class:"tic-value"},Xu={class:"tic-row"},Yu={class:"tic-value"},Qu={class:"tic-row"},Gu={class:"tic-value"},Ju={class:"tic-row"},Zu={class:"tic-value"},ed={class:"tic-row"},td={class:"tic-value"},nd={class:"tic-card"},ad={class:"tic-actions"},sd=["href"],od=be({__name:"ApprovalDetail",props:{todoItem:{}},emits:["action"],setup(t){const n=t,r=h(""),d=O(()=>{var y,z;const o=(y=n.todoItem.description)==null?void 0:y.sp_no,i=(z=n.todoItem.description)==null?void 0:z.template_id,_=new URLSearchParams;return i&&_.set("template_id",i),o&&_.set("sp_id",o),_.set("from","template_list"),`https://app.work.weixin.qq.com/wework_admin/approval_v3#/?${_.toString()}`}),u=O(()=>{var i;const o=(i=n.todoItem.description)==null?void 0:i.sp_status;return o===1?"apv-status-pending":o===2?"apv-status-approved":o===3?"apv-status-rejected":o===4||o===6?"apv-status-revoked":"apv-status-pending"}),c=O(()=>{var _;const o=(_=n.todoItem.description)==null?void 0:_.sp_status;return{1:"审批中",2:"已通过",3:"已驳回",4:"已撤销",6:"通过后撤销",7:"已删除",10:"已支付"}[o]||"审批中"});function s(o){if(!o)return"—";try{return typeof o=="number"?new Date(o*1e3).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):new Date(o).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return String(o)}}return(o,i)=>{var y,z,B,U,k;const _=le("el-input");return a(),l("div",ju,[e("div",Wu,[i[7]||(i[7]=e("div",{class:"tic-card-title"},"📝 审批内容",-1)),e("div",qu,[i[1]||(i[1]=e("span",{class:"tic-label"},"审批单号",-1)),e("span",Fu,v(((y=t.todoItem.description)==null?void 0:y.sp_no)||"—"),1)]),e("div",Hu,[i[2]||(i[2]=e("span",{class:"tic-label"},"审批类型",-1)),e("span",Ku,v(((z=t.todoItem.description)==null?void 0:z.template_name)||t.todoItem.title||"—"),1)]),e("div",Xu,[i[3]||(i[3]=e("span",{class:"tic-label"},"申请人",-1)),e("span",Yu,v(((B=t.todoItem.description)==null?void 0:B.applicant)||"—"),1)]),e("div",Qu,[i[4]||(i[4]=e("span",{class:"tic-label"},"申请时间",-1)),e("span",Gu,v(s((U=t.todoItem.description)==null?void 0:U.apply_time)),1)]),e("div",Ju,[i[5]||(i[5]=e("span",{class:"tic-label"},"当前审批人",-1)),e("span",Zu,v(((k=t.todoItem.description)==null?void 0:k.current_approver)||"—"),1)]),e("div",ed,[i[6]||(i[6]=e("span",{class:"tic-label"},"审批状态",-1)),e("span",td,[e("span",{class:se(["apv-status-badge",u.value])},v(c.value),3)])])]),e("div",nd,[i[8]||(i[8]=e("div",{class:"tic-card-title"},"✏️ 审批意见",-1)),C(_,{modelValue:r.value,"onUpdate:modelValue":i[0]||(i[0]=j=>r.value=j),type:"textarea",rows:4,placeholder:"请输入审批意见(实际审批需在企微审批中操作)...",resize:"none",class:"apv-textarea"},null,8,["modelValue"])]),e("div",ad,[e("a",{class:"tic-action-btn tic-action-primary",href:d.value,target:"_blank",rel:"noopener noreferrer"}," 🔗 在企微审批中打开 ",8,sd)])])}}}),ld=ke(od,[["__scopeId","data-v-21f6e7c0"]]),id={class:"task-detail-view"},rd={class:"tdv-header"},cd={class:"tdv-header-center"},ud={class:"tdv-title"},dd={class:"tdv-header-right"},vd={class:"tdv-content"},md={key:2,class:"tdv-unknown"},fd=be({__name:"TaskDetailView",props:{todoItem:{}},setup(t){const n=Pe(),r={ticket:"📋 运维工单",approval:"📝 审批单"},d={urgent:"🔴 紧急",high:"🟡 高",normal:"🟢 普通"};function u(){n.workspaceView="chat"}function c(s){ie.success(`操作成功:${s}`)}return(s,o)=>(a(),l("div",id,[e("div",rd,[e("button",{class:"tdv-back-btn",onClick:u},[...o[0]||(o[0]=[e("span",{class:"tdv-back-arrow"},"←",-1),e("span",null,"返回会话",-1)])]),e("div",cd,[e("h2",ud,v(t.todoItem.title),1),e("span",{class:se(["tdv-type-tag",`tdv-type-${t.todoItem.type}`])},v(r[t.todoItem.type]||t.todoItem.type),3)]),e("div",dd,[e("span",{class:se(["tdv-priority",`tdv-priority-${t.todoItem.priority}`])},v(d[t.todoItem.priority]||t.todoItem.priority),3)])]),e("div",vd,[t.todoItem.type==="ticket"?(a(),ye(Nu,{key:0,"todo-item":t.todoItem,onAction:c},null,8,["todo-item"])):t.todoItem.type==="approval"?(a(),ye(ld,{key:1,"todo-item":t.todoItem,onAction:c},null,8,["todo-item"])):(a(),l("div",md,[e("p",null,"未知的任务类型:"+v(t.todoItem.type),1)]))])]))}}),pd=ke(fd,[["__scopeId","data-v-3caee2ec"]]),gd={class:"top-bar"},yd={class:"top-bar-main"},_d={class:"top-bar-right"},hd=["title"],bd={style:{cursor:"pointer",display:"flex","align-items":"center",gap:"4px"}},kd={class:"agent-name"},wd={key:0,style:{"min-height":"200px"}},$d={key:1},Cd={style:{color:"var(--text-tertiary)","font-size":"12px"}},xd={key:1,style:{"text-align":"center"}},Id=["src"],Td=be({__name:"TopBar",emits:["toggleAssistant"],setup(t){const n=ut(),r=Et(),d=Pe(),{disconnect:u}=ht(),c=h(!1),s=h(null),o=h(""),i=h(!1),_=async f=>{try{await navigator.clipboard.writeText(f),ie.success("已复制到剪贴板")}catch{ie.error("复制失败,请手动复制")}},y=h(!1);async function z(){i.value=!0,c.value=!0,o.value="";try{const f=await Kt();s.value=f,y.value=!!f.secret}catch(f){console.error("获取OTP绑定信息失败:",f),ie.error("获取OTP绑定信息失败")}finally{i.value=!1}}async function B(){if(!o.value||o.value.length<6){ie.warning("请输入6位OTP码");return}i.value=!0;try{await Xt(n.userId,o.value),ie.success("OTP验证成功,已启用二次验证"),c.value=!1}catch(f){console.error("OTP验证失败:",f)}finally{i.value=!1}}async function U(){var f;try{await qe.confirm("确定要解绑OTP吗?解绑后将不再需要二次验证。","提示",{confirmButtonText:"确定解绑",cancelButtonText:"取消",type:"warning"}),i.value=!0,await Yt(),ie.success("OTP已解绑"),c.value=!1}catch(p){(f=p==null?void 0:p.message)!=null&&f.includes("cancel")||console.error("解绑OTP失败:",p)}finally{i.value=!1}}const k=O(()=>({online:"在线",busy:"忙碌",offline:"离线"})[n.agentStatus]||"离线"),j=O(()=>({online:"success",busy:"warning",offline:"info"})[n.agentStatus]||"info");function T(){r.toggleTheme()}async function R(f){if(f==="otp"){await z();return}try{await n.changeStatus(f),ie.success(`已切换为${k.value}`)}catch(p){console.error("切换状态失败:",p)}}async function S(){try{await qe.confirm("确定要退出登录吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}),u(),d.stopAllPolling(),n.logout()}catch{}}return(f,p)=>{const H=le("el-tag"),V=le("ArrowDown"),b=le("el-icon"),J=le("el-dropdown-item"),x=le("el-dropdown-menu"),F=le("el-dropdown"),Q=le("SwitchButton"),ee=le("el-button"),W=le("Operation"),g=le("el-result"),Y=le("el-divider"),de=le("el-input"),he=le("el-dialog"),Z=St("loading");return a(),l(ge,null,[e("header",gd,[e("div",yd,[p[11]||(p[11]=e("div",{class:"top-bar-left"},[e("span",{class:"logo-block"},"IT"),e("span",{class:"title-gradient"},"智能IT服务台"),e("span",{class:"subtitle"},"· 坐席工作台 — AI驱动 · 多系统对接 · 一站式处理")],-1)),e("div",_d,[e("div",{class:"theme-switch",title:L(r).currentTheme==="light"?"切换到深色模式":"切换到浅色模式",onClick:T},[...p[5]||(p[5]=[e("span",{class:"switch-icon"},"☀️",-1),e("div",{class:"switch-track"},[e("div",{class:"switch-thumb"})],-1),e("span",{class:"switch-icon"},"🌙",-1)])],8,hd),C(F,{trigger:"click",onCommand:R},{dropdown:P(()=>[C(x,null,{default:P(()=>[C(J,{command:"online"},{default:P(()=>[...p[6]||(p[6]=[K(" 🟢 在线 — 接收新会话 ",-1)])]),_:1}),C(J,{command:"busy"},{default:P(()=>[...p[7]||(p[7]=[K(" 🟡 忙碌 — 不接新会话 ",-1)])]),_:1}),C(J,{command:"offline"},{default:P(()=>[...p[8]||(p[8]=[K(" ⚪ 离线 — 不接收任何会话 ",-1)])]),_:1}),C(J,{divided:"",command:"otp"},{default:P(()=>[...p[9]||(p[9]=[K(" 🔐 OTP二次验证 ",-1)])]),_:1})]),_:1})]),default:P(()=>[e("span",bd,[C(H,{type:j.value,size:"small",effect:"dark"},{default:P(()=>[K(v(k.value),1)]),_:1},8,["type"]),e("span",kd,v(L(n).agentName),1),C(b,null,{default:P(()=>[C(V)]),_:1})])]),_:1}),C(ee,{text:"",type:"danger",onClick:S},{default:P(()=>[C(b,null,{default:P(()=>[C(Q)]),_:1}),p[10]||(p[10]=K(" 登出 ",-1))]),_:1}),C(ee,{class:"assistant-toggle-btn",text:"",onClick:p[0]||(p[0]=G=>f.$emit("toggleAssistant"))},{default:P(()=>[C(b,null,{default:P(()=>[C(W)]),_:1})]),_:1})])])]),C(he,{modelValue:c.value,"onUpdate:modelValue":p[4]||(p[4]=G=>c.value=G),title:"OTP二次验证设置",width:"400px","close-on-click-modal":!1},{default:P(()=>[i.value?He((a(),l("div",wd,null,512)),[[Z,i.value]]):s.value?(a(),l("div",$d,[y.value?(a(),l(ge,{key:0},[C(g,{icon:"success",title:"OTP已绑定"},{"sub-title":P(()=>[p[12]||(p[12]=e("p",null,"当前账号已绑定OTP二次验证",-1)),e("p",Cd," 密钥:"+v(s.value.secret),1)]),_:1}),C(ee,{type:"danger",onClick:U},{default:P(()=>[...p[13]||(p[13]=[K("解绑OTP",-1)])]),_:1})],64)):(a(),l("div",xd,[p[18]||(p[18]=e("p",{style:{"margin-bottom":"16px"}},"请使用身份验证器(如Google Authenticator)扫码绑定",-1)),e("img",{src:s.value.qr_code,alt:"OTP二维码",style:{width:"200px",height:"200px",margin:"0 auto"}},null,8,Id),C(Y,null,{default:P(()=>[...p[14]||(p[14]=[K("或手动输入密钥",-1)])]),_:1}),C(de,{modelValue:s.value.secret,"onUpdate:modelValue":p[2]||(p[2]=G=>s.value.secret=G),readonly:""},{append:P(()=>[C(ee,{onClick:p[1]||(p[1]=G=>_(s.value.secret))},{default:P(()=>[...p[15]||(p[15]=[K("复制",-1)])]),_:1})]),_:1},8,["modelValue"]),C(Y,null,{default:P(()=>[...p[16]||(p[16]=[K("验证启用",-1)])]),_:1}),C(de,{modelValue:o.value,"onUpdate:modelValue":p[3]||(p[3]=G=>o.value=G),placeholder:"输入6位OTP码",maxlength:"6",style:{width:"200px"}},null,8,["modelValue"]),C(ee,{type:"primary",style:{"margin-top":"12px"},onClick:B},{default:P(()=>[...p[17]||(p[17]=[K(" 验证并启用 ",-1)])]),_:1})]))])):A("",!0)]),_:1},8,["modelValue"])],64)}}}),Sd=ke(Td,[["__scopeId","data-v-156a0f91"]]),Md=["data-theme"],Rd={class:"workspace-body"},Ad={class:"workspace-main"},Ld={key:2,class:"empty-chat-area"},Ed=be({__name:"Workspace",setup(t){const n=Pe(),r=ut(),d=wt(),u=Et(),c=$t();un();const{connect:s,disconnect:o}=ht(),i=h(null),_=h(!0),y=h(null),z=h(null),B=h(!1),U=h(!1);let k=0,j=0,T=0,R=0;function S(x){x.preventDefault(),y.value&&(B.value=!0,k=x.clientX,j=y.value.offsetWidth,document.addEventListener("mousemove",f),document.addEventListener("mouseup",p),document.body.style.cursor="col-resize",document.body.style.userSelect="none")}function f(x){if(!B.value||!y.value)return;const F=x.clientX-k,Q=Math.max(200,Math.min(560,j+F));y.value.style.width=Q+"px",y.value.style.minWidth=Q+"px"}function p(){B.value=!1,document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",p),document.body.style.cursor="",document.body.style.userSelect=""}function H(x){x.preventDefault(),z.value&&(U.value=!0,T=x.clientX,R=z.value.offsetWidth,document.addEventListener("mousemove",V),document.addEventListener("mouseup",b),document.body.style.cursor="col-resize",document.body.style.userSelect="none")}function V(x){if(!U.value||!z.value)return;const F=T-x.clientX,Q=Math.max(200,Math.min(560,R+F));z.value.style.width=Q+"px",z.value.style.minWidth=Q+"px"}function b(){U.value=!1,document.removeEventListener("mousemove",V),document.removeEventListener("mouseup",b),document.body.style.cursor="",document.body.style.userSelect=""}function J(){const x=n.panelMode==="normal"?"expanded":"normal";n.setPanelMode(x)}return Ke(async()=>{if(!localStorage.getItem("agent_token")){window.location.href="/login";return}u.initTheme(),await r.initAuth(),await d.fetchTemplates(),await n.fetchConversations(),n.conversations.length>0&&!n.currentConversationId&&await n.selectConversation(n.conversations[0].id),s()}),Xe(()=>{o(),n.stopAllPolling(),document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",p),document.removeEventListener("mousemove",V),document.removeEventListener("mouseup",b)}),(x,F)=>{const Q=le("el-empty");return a(),l("div",{class:"workspace-layout","data-theme":L(u).currentTheme},[C(Sd,{ref_key:"topBarRef",ref:i,onToggleAssistant:F[0]||(F[0]=ee=>_.value=!_.value)},null,512),e("div",Rd,[e("aside",{class:"workspace-sidebar",ref_key:"leftSidebarRef",ref:y},[C(da)],512),e("div",{class:se(["resize-handle",{dragging:B.value}]),onMousedown:S},null,34),e("main",Ad,[L(n).workspaceView==="chat"&&L(n).currentConversation?(a(),ye(pu,{key:0})):L(n).workspaceView==="task"&&L(c).currentTodoItem?(a(),ye(pd,{key:1,"todo-item":L(c).currentTodoItem},null,8,["todo-item"])):(a(),l("div",Ld,[C(Q,{description:"请从左侧选择一个会话开始服务"})]))]),_.value?(a(),l("div",{key:0,class:se(["resize-handle",{dragging:U.value}]),onMousedown:H},null,34)):A("",!0),_.value?(a(),l("aside",{key:1,class:se(["workspace-assistant",{"is-expanded":L(n).panelMode==="expanded"}]),ref_key:"rightSidebarRef",ref:z},[C(sn,{mode:L(n).panelMode,onToggle:J},null,8,["mode"])],2)):A("",!0)])],8,Md)}}}),Ud=ke(Ed,[["__scopeId","data-v-a1481490"]]);export{Ud as default};
|