Files
wecom_it_smart_desk/frontend-agent/dist_old/assets/AiAssistantPanel-Ijo7E7oT.js
T

2 lines
13 KiB
JavaScript

import{d as A,b as i,c as u,f as a,y as L,t as I,m as S,G as F,g as _,w as h,h as $,F as z,z as U,e as M,J as D,r as w,E as p,i as y,n as E,x as B,p as Q,s as R}from"./index-CnIbBo4X.js";import{u as N,d as G,e as P}from"./conversation-BQKKYvcD.js";import{a as O}from"./index-ra8jRslb.js";const H={class:"panel-mode-toggle"},J=["title"],W={class:"panel-mode-toggle__icon"},X={class:"panel-mode-toggle__label"},Y=A({__name:"PanelModeToggle",props:{mode:{}},emits:["toggle"],setup(g){return(l,n)=>(i(),u("div",H,[a("button",{class:L(["panel-mode-toggle__btn",{"is-expanded":g.mode==="expanded"}]),onClick:n[0]||(n[0]=s=>l.$emit("toggle")),title:g.mode==="normal"?"放大面板":"缩小面板"},[a("span",W,I(g.mode==="normal"?"⤢":"⤡"),1),a("span",X,I(g.mode==="normal"?"放大":"缩小"),1)],10,J)]))}}),Z=S(Y,[["__scopeId","data-v-3fc67206"]]),ee={class:"smart-tag-editor"},te={class:"smart-tag-editor__header"},ae={class:"smart-tag-editor__tags"},ne={key:0,class:"smart-tag-editor__tags-saved"},se={key:1,class:"smart-tag-editor__tags-suggested"},oe={key:2,class:"smart-tag-editor__empty"},le={class:"smart-tag-editor__add"},ie=A({__name:"SmartTagEditor",props:{conversationId:{}},setup(g){const l=g,n=N(),s=w({}),r=w([]),v=w(!1),b=w(""),m=w("");function T(e){return{priority:"danger",category:"warning",emotion:"info",blocking:"danger",impact_scope:"warning"}[e]||"info"}function C(e,t){return`${{priority:"优先级",category:"分类",emotion:"情绪",blocking:"阻断",impact_scope:"影响范围"}[e]||e}: ${t}`}function o(){const e=n.currentConversation;e&&e.tags?s.value=e.tags:s.value={},r.value=[]}async function V(){if(!l.conversationId){p.warning("请先选择一个会话");return}v.value=!0;try{const e=await G(l.conversationId);e&&e.suggested_tags&&(r.value=e.suggested_tags.filter(t=>!Object.keys(s.value).includes(t)),r.value.length===0&&p.info("暂无新的标签建议"))}catch(e){console.error("获取标签建议失败:",e),p.error("获取标签建议失败")}finally{v.value=!1}}async function d(e){if(l.conversationId){s.value[e]=!0,r.value=r.value.filter(t=>t!==e);try{await P(l.conversationId,s.value),p.success(`已添加标签: ${e}`)}catch(t){console.error("保存标签失败:",t),p.error("保存标签失败"),delete s.value[e]}}}async function c(e){if(!l.conversationId)return;const t=s.value[e];delete s.value[e];try{await P(l.conversationId,s.value),p.success(`已移除标签: ${e}`)}catch(k){console.error("保存标签失败:",k),p.error("保存标签失败"),s.value[e]=t}}async function f(){if(!l.conversationId){p.warning("请先选择一个会话");return}const e=b.value.trim(),t=m.value.trim();if(!e){p.warning("请输入标签名");return}s.value[e]=t||!0,b.value="",m.value="";try{await P(l.conversationId,s.value),p.success(`已添加标签: ${e}`)}catch(k){console.error("保存标签失败:",k),p.error("保存标签失败"),delete s.value[e]}}return F(()=>l.conversationId,()=>{o()},{immediate:!0}),(e,t)=>{const k=y("el-button"),K=y("el-tag"),j=y("el-input");return i(),u("div",ee,[a("div",te,[t[3]||(t[3]=a("span",{class:"smart-tag-editor__bar"},null,-1)),t[4]||(t[4]=a("span",{class:"smart-tag-editor__title"},"🏷️ 智能标注",-1)),_(k,{size:"small",loading:v.value,onClick:V,title:"获取AI标签建议"},{default:h(()=>[...t[2]||(t[2]=[$(" AI建议 ",-1)])]),_:1},8,["loading"])]),a("div",ae,[Object.keys(s.value).length>0?(i(),u("div",ne,[(i(!0),u(z,null,U(s.value,(q,x)=>(i(),E(K,{key:x,class:"smart-tag-editor__tag-item",type:T(x),closable:"",onClose:Le=>c(x)},{default:h(()=>[$(I(C(x,q)),1)]),_:2},1032,["type","onClose"]))),128))])):M("",!0),r.value.length>0?(i(),u("div",se,[t[5]||(t[5]=a("div",{class:"smart-tag-editor__tags-suggested-title"},"AI 建议:",-1)),(i(!0),u(z,null,U(r.value,q=>(i(),E(K,{key:q,class:"smart-tag-editor__tag-item smart-tag-editor__tag-suggested",type:"info",onClick:x=>d(q)},{default:h(()=>[$(" + "+I(q),1)]),_:2},1032,["onClick"]))),128))])):M("",!0),Object.keys(s.value).length===0&&r.value.length===0?(i(),u("div",oe,' 暂无标签,点击"AI建议"获取智能标注 ')):M("",!0)]),a("div",le,[_(j,{modelValue:b.value,"onUpdate:modelValue":t[0]||(t[0]=q=>b.value=q),placeholder:"标签名",size:"small",style:{width:"100px"},onKeyup:D(f,["enter"])},null,8,["modelValue"]),_(j,{modelValue:m.value,"onUpdate:modelValue":t[1]||(t[1]=q=>m.value=q),placeholder:"值",size:"small",style:{width:"80px"},onKeyup:D(f,["enter"])},null,8,["modelValue"]),_(k,{size:"small",onClick:f},{default:h(()=>[...t[6]||(t[6]=[$("添加",-1)])]),_:1})])])}}}),re=S(ie,[["__scopeId","data-v-aaa1da42"]]);async function de(g){return await O.post("/annotations",g)}async function ce(g){return await O.get(`/annotations/${g}`)}const ue={class:"quality-feedback"},_e={key:0,class:"quality-feedback__loading"},ge={key:1,class:"quality-feedback__empty"},ve={key:2,class:"quality-feedback__list"},me={class:"quality-feedback__item-content"},pe={class:"quality-feedback__item-meta"},be={class:"quality-feedback__item-time"},fe={class:"quality-feedback__item-text"},ye={class:"quality-feedback__item-actions"},ke={class:"quality-feedback__annotated-icon"},we={class:"quality-feedback__annotated-text"},he={key:0,class:"quality-feedback__annotated-comment"},$e={key:1,class:"quality-feedback__buttons"},Ie=["disabled","onClick"],qe=["disabled","onClick"],Ve=A({__name:"QualityFeedback",props:{conversationId:{}},setup(g){const l=g,n=N(),s=w(!1),r=w([]),v=w(null),b=B(()=>n.messages.filter(d=>d.sender_type==="agent"&&d.ai_suggestion===!0));function m(d){return r.value.find(c=>c.message_id===d)||null}function T(d,c){return d?d.length>c?d.slice(0,c)+"...":d:""}function C(d){if(!d)return"";const c=new Date(d),f=String(c.getMonth()+1).padStart(2,"0"),e=String(c.getDate()).padStart(2,"0"),t=String(c.getHours()).padStart(2,"0"),k=String(c.getMinutes()).padStart(2,"0");return`${f}-${e} ${t}:${k}`}async function o(){if(!l.conversationId){r.value=[];return}s.value=!0;try{const d=await ce(l.conversationId);r.value=d.items||[]}catch(d){console.error("获取标注数据失败:",d),r.value=[]}finally{s.value=!1}}async function V(d,c){if(!l.conversationId){p.warning("请先选择一个会话");return}v.value=d;try{const f=await de({conversation_id:l.conversationId,message_id:d,feedback:c});r.value.push(f),p.success(c==="useful"?'已标注为"有用"':'已标注为"无用"')}catch(f){console.error("标注失败:",f),p.error("标注失败,请稍后重试")}finally{v.value=null}}return F(()=>l.conversationId,()=>{o()},{immediate:!0}),(d,c)=>{const f=y("el-skeleton"),e=y("el-empty");return i(),u("div",ue,[c[2]||(c[2]=a("div",{class:"quality-feedback__header"},[a("span",{class:"quality-feedback__bar"}),a("span",{class:"quality-feedback__title"},"📊 质量反馈"),a("span",{class:"quality-feedback__hint"},"仅标注采纳AI草稿的回复")],-1)),s.value?(i(),u("div",_e,[_(f,{rows:3,animated:""})])):b.value.length===0?(i(),u("div",ge,[_(e,{description:"暂无可标注的AI回复","image-size":50}),c[0]||(c[0]=a("p",{class:"quality-feedback__empty-tip"}," 当坐席采纳AI草稿并发送回复后,可在此处对AI质量进行标注 ",-1))])):(i(),u("div",ve,[(i(!0),u(z,null,U(b.value,t=>(i(),u("div",{key:t.id,class:"quality-feedback__item"},[a("div",me,[a("div",pe,[a("span",be,I(C(t.created_at)),1),c[1]||(c[1]=a("span",{class:"quality-feedback__item-badge"},"AI采纳",-1))]),a("p",fe,I(T(t.content,120)),1)]),a("div",ye,[m(t.id)?(i(),u("div",{key:0,class:L(["quality-feedback__annotated",`quality-feedback__annotated--${m(t.id).feedback}`])},[a("span",ke,I(m(t.id).feedback==="useful"?"👍":"👎"),1),a("span",we,I(m(t.id).feedback==="useful"?"有用":"无用"),1),m(t.id).comment?(i(),u("span",he,I(m(t.id).comment),1)):M("",!0)],2)):(i(),u("div",$e,[a("button",{class:"quality-feedback__btn quality-feedback__btn--useful",disabled:v.value===t.id,onClick:k=>V(t.id,"useful")}," 👍 有用 ",8,Ie),a("button",{class:"quality-feedback__btn quality-feedback__btn--useless",disabled:v.value===t.id,onClick:k=>V(t.id,"useless")}," 👎 无用 ",8,qe)]))])]))),128))]))])}}}),Te=S(Ve,[["__scopeId","data-v-b9f2a3a8"]]),Ce={class:"knowledge-contribute"},Ae={class:"knowledge-contribute__field"},Se={class:"knowledge-contribute__field"},xe={class:"knowledge-contribute__field"},Me={class:"knowledge-contribute__field"},ze={class:"knowledge-contribute__actions"},Ue={key:0,class:"knowledge-contribute__success-tip"},Fe={class:"knowledge-contribute__success-text"},Ke=A({__name:"KnowledgeContribute",props:{conversationId:{}},setup(g){const l=g,n=R({title:"",category:"",issue:"",action:""}),s=w(!1),r=w(""),v=[{label:"账号/权限",value:"account"},{label:"网络/连接",value:"network"},{label:"软件/应用",value:"software"},{label:"硬件/设备",value:"hardware"},{label:"邮件/协作",value:"collaboration"},{label:"安全/合规",value:"security"},{label:"流程/制度",value:"process"},{label:"其他",value:"other"}],b=B(()=>n.title.trim().length>0&&n.category.length>0&&n.issue.trim().length>0&&n.action.trim().length>0);async function m(){if(!b.value){p.warning("请填写完整后再提交");return}s.value=!0;try{await O.post("/knowledge-iteration/suggestions",{title:n.title.trim(),issue:n.issue.trim(),action:n.action.trim(),category:n.category,suggestion_type:"knowledge",source_type:"agent",conversation_id:l.conversationId||void 0}),p.success("知识建议已提交,等待审核"),r.value=n.title.trim(),T()}catch(C){console.error("提交知识建议失败:",C),p.error("提交失败,请稍后重试")}finally{s.value=!1}}function T(){n.title="",n.category="",n.issue="",n.action=""}return F(()=>l.conversationId,()=>{T(),r.value=""}),(C,o)=>{const V=y("el-input"),d=y("el-option"),c=y("el-select"),f=y("el-button");return i(),u("div",Ce,[o[11]||(o[11]=a("div",{class:"knowledge-contribute__header"},[a("span",{class:"knowledge-contribute__bar"}),a("span",{class:"knowledge-contribute__title"},"📚 知识贡献")],-1)),a("form",{class:"knowledge-contribute__form",onSubmit:Q(m,["prevent"])},[a("div",Ae,[o[4]||(o[4]=a("label",{class:"knowledge-contribute__label"},[$(" 标题 "),a("span",{class:"knowledge-contribute__required"},"*")],-1)),_(V,{modelValue:n.title,"onUpdate:modelValue":o[0]||(o[0]=e=>n.title=e),placeholder:"请输入知识标题",size:"small",maxlength:"100","show-word-limit":""},null,8,["modelValue"])]),a("div",Se,[o[5]||(o[5]=a("label",{class:"knowledge-contribute__label"},[$(" 分类 "),a("span",{class:"knowledge-contribute__required"},"*")],-1)),_(c,{modelValue:n.category,"onUpdate:modelValue":o[1]||(o[1]=e=>n.category=e),placeholder:"请选择分类",size:"small",style:{width:"100%"}},{default:h(()=>[(i(),u(z,null,U(v,e=>_(d,{key:e.value,label:e.label,value:e.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),a("div",xe,[o[6]||(o[6]=a("label",{class:"knowledge-contribute__label"},[$(" 问题描述 "),a("span",{class:"knowledge-contribute__required"},"*")],-1)),_(V,{modelValue:n.issue,"onUpdate:modelValue":o[2]||(o[2]=e=>n.issue=e),type:"textarea",rows:3,placeholder:"请描述遇到的问题",maxlength:"500","show-word-limit":""},null,8,["modelValue"])]),a("div",Me,[o[7]||(o[7]=a("label",{class:"knowledge-contribute__label"},[$(" 解决方案 "),a("span",{class:"knowledge-contribute__required"},"*")],-1)),_(V,{modelValue:n.action,"onUpdate:modelValue":o[3]||(o[3]=e=>n.action=e),type:"textarea",rows:4,placeholder:"请输入解决方案或操作步骤",maxlength:"1000","show-word-limit":""},null,8,["modelValue"])]),a("div",ze,[_(f,{type:"primary",size:"small",loading:s.value,disabled:!b.value,onClick:m},{default:h(()=>[...o[8]||(o[8]=[$(" 提交知识建议 ",-1)])]),_:1},8,["loading","disabled"]),_(f,{size:"small",onClick:T},{default:h(()=>[...o[9]||(o[9]=[$(" 重置 ",-1)])]),_:1})])],32),r.value?(i(),u("div",Ue,[o[10]||(o[10]=a("span",{class:"knowledge-contribute__success-icon"},"✅",-1)),a("span",Fe,' 已提交:"'+I(r.value)+'",等待审核 ',1)])):M("",!0)])}}}),Pe=S(Ke,[["__scopeId","data-v-d49ea873"]]),Ee={class:"ai-training-panel"},Be=A({__name:"AiTrainingPanel",props:{conversationId:{}},setup(g){const l=g,n=w("smart-tag");return F(()=>l.conversationId,()=>{n.value="smart-tag"}),(s,r)=>{const v=y("el-tab-pane"),b=y("el-tabs");return i(),u("div",Ee,[_(b,{modelValue:n.value,"onUpdate:modelValue":r[0]||(r[0]=m=>n.value=m),class:"ai-training-panel__tabs"},{default:h(()=>[_(v,{label:"智能标注",name:"smart-tag"},{default:h(()=>[_(re,{"conversation-id":g.conversationId},null,8,["conversation-id"])]),_:1}),_(v,{label:"质量反馈",name:"quality-feedback"},{default:h(()=>[_(Te,{"conversation-id":g.conversationId},null,8,["conversation-id"])]),_:1}),_(v,{label:"知识贡献",name:"knowledge-contribute"},{default:h(()=>[_(Pe,{"conversation-id":g.conversationId},null,8,["conversation-id"])]),_:1})]),_:1},8,["modelValue"])])}}}),Ne=S(Be,[["__scopeId","data-v-089305c2"]]),Oe={class:"ai-assistant-panel"},je={key:1,class:"ai-assistant-panel__empty"},De=A({__name:"AiAssistantPanel",props:{mode:{default:"normal"}},emits:["toggle"],setup(g){const{mode:l}=g,n=N(),s=B(()=>n.currentConversationId||"");return(r,v)=>{const b=y("el-empty");return i(),u("div",Oe,[_(Z,{mode:l,onToggle:v[0]||(v[0]=m=>r.$emit("toggle"))}),s.value?(i(),E(Ne,{key:0,"conversation-id":s.value},null,8,["conversation-id"])):(i(),u("div",je,[_(b,{description:"请先选择一个会话","image-size":60})]))])}}}),He=S(De,[["__scopeId","data-v-6f0ad97b"]]);export{He as A};