2 lines
18 KiB
JavaScript
2 lines
18 KiB
JavaScript
import{d as G,b as i,c as u,F as M,z as B,x as Z,y as j,f as t,t as c,m as K,o as ee,g as a,w as m,K as te,e as x,r as y,i as p,I as le,n as E,h as k,G as ae,u as Y,a3 as ce,a4 as _e,L as pe,a5 as ve,B as ge,E as S,a6 as me}from"./index-CnIbBo4X.js";import{a as N}from"./index-ra8jRslb.js";const fe={class:"triage-stats-bar"},ye={class:"stat-card__value"},he={class:"stat-card__label"},be=G({__name:"TriageStatsBar",props:{stats:{}},setup(s){const h=s,T=Z(()=>{const n=h.stats;return[{key:"pending",label:"待分诊",value:(n==null?void 0:n.pending_total)??0,color:"blue"},{key:"today",label:"今日已分诊",value:(n==null?void 0:n.today_triaged)??0,color:"cyan"},{key:"ai_self",label:"AI自答",value:(n==null?void 0:n.ai_self_count)??0,color:"green"},{key:"human",label:"转人工",value:(n==null?void 0:n.human_count)??0,color:"orange"},{key:"auto_approval",label:"自动审批",value:(n==null?void 0:n.auto_approval_count)??0,color:"purple"},{key:"avg_duration",label:"平均耗时",value:C((n==null?void 0:n.avg_duration_sec)??0),color:"gray"}]});function C(n){if(n<60)return`${n.toFixed(0)}s`;const $=Math.floor(n/60),v=Math.floor(n%60);return`${$}m${v}s`}return(n,$)=>(i(),u("div",fe,[(i(!0),u(M,null,B(T.value,v=>(i(),u("div",{key:v.key,class:j(["stat-card",`stat-card--${v.color}`])},[t("div",ye,c(v.value),1),t("div",he,c(v.label),1)],2))),128))]))}}),ke=K(be,[["__scopeId","data-v-f2ad30ed"]]);function $e(s){return N.get("/agent/triage/pending",{params:s})}function we(){return N.get("/agent/triage/stats")}function X(s){return N.get(`/agent/triage/${s}`)}function xe(s,h){return N.post(`/agent/triage/${s}/route`,h)}function Te(s){return N.get("/agent/triage/history",{params:s})}function Ce(s){return N.get("/agent/triage/export",{params:s,responseType:"blob"})}function ze(s,h){return N.post(`/agent/triage/${s}/exclude-options`,h)}const Ve={class:"triage-pending-list"},Ie={class:"filter-bar"},Le={class:"list-container"},De={key:0,class:"empty-state"},Ue=["onClick"],Me={class:"list-item__content"},Se={class:"list-item__title"},Ae={class:"list-item__meta"},Pe={class:"meta-user"},Re={key:0,class:"meta-dept"},Be={class:"list-item__time"},Ee={key:0,class:"list-item__confidence"},Ne={class:"confidence-text"},qe={key:0,class:"pagination"},J=20,He=G({__name:"TriagePendingList",props:{selectedId:{}},emits:["select"],setup(s,{expose:h,emit:T}){const C=y([]),n=y(!1),$=y(0),v=y(1),L=y(""),z=y("");async function D(){n.value=!0;try{const _=await $e({urgency:L.value||void 0,problem_type:z.value||void 0,page:v.value,page_size:J});C.value=_.items,$.value=_.total}catch(_){console.error("加载待分诊列表失败:",_)}finally{n.value=!1}}function I(){v.value=1,D()}function A(){D()}function P(_){return{high:"紧急",medium:"中",low:"低"}[_]||_}function q(_){return{ai_self:"AI自答",human:"转人工",auto_approval:"自动审批"}[_]||_}function H(_){return{ai_self:"success",human:"danger",auto_approval:"warning"}[_]||"info"}function d(_){return _===null?"#909399":_>=.8?"#67c23a":_>=.5?"#e6a23c":"#f56c6c"}function e(_){if(!_)return"";const g=new Date(_),V=(new Date().getTime()-g.getTime())/1e3;return V<60?"刚刚":V<3600?`${Math.floor(V/60)}分钟前`:V<86400?`${Math.floor(V/3600)}小时前`:g.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}return ee(()=>{D()}),h({refresh:D}),(_,g)=>{const w=p("el-option"),V=p("el-select"),O=p("el-empty"),R=p("el-tag"),o=p("el-progress"),l=p("el-pagination"),b=le("loading");return i(),u("div",Ve,[t("div",Ie,[a(V,{modelValue:L.value,"onUpdate:modelValue":g[0]||(g[0]=r=>L.value=r),placeholder:"紧急度",clearable:"",size:"small",style:{width:"100px"},onChange:I},{default:m(()=>[a(w,{label:"全部",value:""}),a(w,{label:"高",value:"high"}),a(w,{label:"中",value:"medium"}),a(w,{label:"低",value:"low"})]),_:1},8,["modelValue"]),a(V,{modelValue:z.value,"onUpdate:modelValue":g[1]||(g[1]=r=>z.value=r),placeholder:"问题类型",clearable:"",size:"small",style:{width:"120px"},onChange:I},{default:m(()=>[a(w,{label:"全部",value:""}),a(w,{label:"硬件",value:"硬件"}),a(w,{label:"软件",value:"软件"}),a(w,{label:"网络",value:"网络"}),a(w,{label:"安全",value:"安全"}),a(w,{label:"账号",value:"账号"}),a(w,{label:"其他",value:"其他"})]),_:1},8,["modelValue"])]),te((i(),u("div",Le,[C.value.length===0&&!n.value?(i(),u("div",De,[a(O,{description:"暂无待分诊记录","image-size":80})])):x("",!0),(i(!0),u(M,null,B(C.value,r=>(i(),u("div",{key:r.id,class:j(["list-item",{"list-item--active":r.id===s.selectedId}]),onClick:U=>_.$emit("select",r)},[t("div",{class:j(["list-item__urgency",`urgency--${r.urgency}`])},c(P(r.urgency)),3),t("div",Me,[t("div",Se,c(r.request_title),1),t("div",Ae,[t("span",Pe,c(r.user_name||r.user_id),1),r.user_dept?(i(),u("span",Re,c(r.user_dept),1)):x("",!0),r.problem_type?(i(),E(R,{key:1,size:"small",type:"info",effect:"plain"},{default:m(()=>[k(c(r.problem_type),1)]),_:2},1024)):x("",!0),r.suggested_route?(i(),E(R,{key:2,size:"small",type:H(r.suggested_route),effect:"plain"},{default:m(()=>[k(c(q(r.suggested_route)),1)]),_:2},1032,["type"])):x("",!0)]),t("div",Be,c(e(r.created_at)),1)]),r.confidence!==null?(i(),u("div",Ee,[a(o,{percentage:Math.round((r.confidence||0)*100),"stroke-width":4,"show-text":!1,color:d(r.confidence)},null,8,["percentage","color"]),t("span",Ne,c(Math.round((r.confidence||0)*100))+"%",1)])):x("",!0)],10,Ue))),128))])),[[b,n.value]]),$.value>J?(i(),u("div",qe,[a(l,{"current-page":v.value,"onUpdate:currentPage":g[2]||(g[2]=r=>v.value=r),"page-size":J,total:$.value,layout:"prev, pager, next",small:"",onCurrentChange:A},null,8,["current-page","total"])])):x("",!0)])}}}),Oe=K(He,[["__scopeId","data-v-be52f33d"]]),Fe={class:"triage-detail-panel"},Ye={key:0,class:"empty-state"},je={class:"section"},Ge={class:"user-profile"},Ke={class:"profile-item"},Je={class:"profile-value"},Qe={class:"profile-item"},We={class:"profile-value"},Xe={class:"profile-item"},Ze={class:"profile-value"},et={class:"profile-item"},tt={class:"profile-value"},lt={class:"section"},at={class:"problem-content"},st={class:"section"},nt={class:"ai-analysis"},ot={class:"analysis-grid"},it={class:"analysis-item"},rt={class:"analysis-item"},dt={class:"analysis-value"},ut={class:"analysis-item"},ct={class:"confidence-bar"},_t={class:"analysis-item"},pt={class:"analysis-item"},vt={key:0,class:"analysis-item"},gt={class:"analysis-value"},mt={key:0,class:"section"},ft={class:"context-tags"},yt={key:1,class:"section"},ht={class:"triage-steps"},bt={class:"step-question"},kt={class:"step-num"},$t={class:"step-options"},wt={class:"option-label"},xt={key:0,class:"option-prob"},Tt={class:"section"},Ct={class:"exclude-section"},zt={class:"section route-section"},Vt={class:"route-buttons"},It=G({__name:"TriageDetailPanel",props:{detail:{}},emits:["routed"],setup(s,{emit:h}){const T=s,C=h,n=y(""),$=y([]),v=y(""),L=Z(()=>{var e;if(!((e=T.detail)!=null&&e.triage_steps))return[];const d=[];for(const _ of T.detail.triage_steps)if(_.options)for(const g of _.options)g.label&&d.push(g.label);return d});ae(()=>{var d;return(d=T.detail)==null?void 0:d.id},()=>{n.value="",$.value=[],v.value=""});async function z(d){if(!T.detail)return;const e={ai_self:"AI自答",human:"转人工",auto_approval:"自动审批",skip:"跳过"};try{await ge.confirm(`确认执行「${e[d]}」操作?`,"路由确认",{type:"warning"})}catch{return}try{await xe(T.detail.id,{route_action:d,route_note:n.value||void 0}),S.success(`已执行「${e[d]}」`),C("routed")}catch{S.error("路由操作失败")}}async function D(){if(T.detail)try{await ze(T.detail.id,{excluded_labels:$.value,recommended_label:v.value||void 0}),S.success("排除选项已推送到H5")}catch{S.error("推送排除选项失败")}}function I(d){return{high:"紧急",medium:"中",low:"低"}[d]||d}function A(d){return{high:"danger",medium:"warning",low:"info"}[d]||"info"}function P(d){return d?{ai_self:"AI自答",human:"转人工",auto_approval:"自动审批"}[d]||d:"-"}function q(d){return d&&{ai_self:"success",human:"danger",auto_approval:"warning"}[d]||"info"}function H(d){return d===null?"#909399":d>=.8?"#67c23a":d>=.5?"#e6a23c":"#f56c6c"}return(d,e)=>{const _=p("el-empty"),g=p("el-tag"),w=p("el-progress"),V=p("el-option"),O=p("el-select"),R=p("el-input"),o=p("el-button");return i(),u("div",Fe,[s.detail?(i(),u(M,{key:1},[t("div",je,[e[11]||(e[11]=t("div",{class:"section-title"},"👤 用户画像",-1)),t("div",Ge,[t("div",Ke,[e[7]||(e[7]=t("span",{class:"profile-label"},"姓名",-1)),t("span",Je,c(s.detail.user_name||s.detail.user_id),1)]),t("div",Qe,[e[8]||(e[8]=t("span",{class:"profile-label"},"部门",-1)),t("span",We,c(s.detail.user_dept||"-"),1)]),t("div",Xe,[e[9]||(e[9]=t("span",{class:"profile-label"},"IT等级",-1)),t("span",Ze,c(s.detail.user_level||"-"),1)]),t("div",et,[e[10]||(e[10]=t("span",{class:"profile-label"},"设备",-1)),t("span",tt,c(s.detail.device_info||"-"),1)])])]),t("div",lt,[e[12]||(e[12]=t("div",{class:"section-title"},"📝 问题描述",-1)),t("div",at,c(s.detail.request_content),1)]),t("div",st,[e[19]||(e[19]=t("div",{class:"section-title"},"🤖 AI 分析结果",-1)),t("div",nt,[t("div",ot,[t("div",it,[e[13]||(e[13]=t("span",{class:"analysis-label"},"问题类型",-1)),a(g,{size:"small",type:"info"},{default:m(()=>[k(c(s.detail.problem_type||"未分类"),1)]),_:1})]),t("div",rt,[e[14]||(e[14]=t("span",{class:"analysis-label"},"问题分类",-1)),t("span",dt,c(s.detail.problem_category||"-"),1)]),t("div",ut,[e[15]||(e[15]=t("span",{class:"analysis-label"},"置信度",-1)),t("div",ct,[a(w,{percentage:Math.round((s.detail.confidence||0)*100),"stroke-width":8,color:H(s.detail.confidence)},null,8,["percentage","color"])])]),t("div",_t,[e[16]||(e[16]=t("span",{class:"analysis-label"},"紧急度",-1)),a(g,{size:"small",type:A(s.detail.urgency),effect:"dark"},{default:m(()=>[k(c(I(s.detail.urgency)),1)]),_:1},8,["type"])]),t("div",pt,[e[17]||(e[17]=t("span",{class:"analysis-label"},"AI建议",-1)),a(g,{size:"small",type:q(s.detail.suggested_route)},{default:m(()=>[k(c(P(s.detail.suggested_route)),1)]),_:1},8,["type"])]),s.detail.matched_knowledge?(i(),u("div",vt,[e[18]||(e[18]=t("span",{class:"analysis-label"},"匹配知识",-1)),t("span",gt,c(s.detail.matched_knowledge),1)])):x("",!0)])])]),s.detail.collected_context&&s.detail.collected_context.length>0?(i(),u("div",mt,[e[20]||(e[20]=t("div",{class:"section-title"},"✅ 已收集上下文",-1)),t("div",ft,[(i(!0),u(M,null,B(s.detail.collected_context,(l,b)=>(i(),E(g,{key:b,size:"small",type:"primary",effect:"plain"},{default:m(()=>[k(c(l),1)]),_:2},1024))),128))])])):x("",!0),s.detail.triage_steps&&s.detail.triage_steps.length>0?(i(),u("div",yt,[e[21]||(e[21]=t("div",{class:"section-title"},"📋 分诊步骤",-1)),t("div",ht,[(i(!0),u(M,null,B(s.detail.triage_steps,(l,b)=>(i(),u("div",{key:b,class:"step-item"},[t("div",bt,[t("span",kt,c(b+1),1),k(" "+c(l.question),1)]),t("div",$t,[(i(!0),u(M,null,B(l.options,(r,U)=>(i(),u("div",{key:U,class:"step-option"},[t("span",wt,c(r.label),1),r.probability!==void 0?(i(),u("span",xt,c(Math.round(r.probability*100))+"% ",1)):x("",!0)]))),128))])]))),128))])])):x("",!0),t("div",Tt,[e[23]||(e[23]=t("div",{class:"section-title"},"🚫 排除选项(推送到H5)",-1)),t("div",Ct,[a(O,{modelValue:$.value,"onUpdate:modelValue":e[0]||(e[0]=l=>$.value=l),multiple:"",filterable:"","allow-create":"",placeholder:"选择或输入要排除的选项",style:{width:"100%"},size:"small"},{default:m(()=>[(i(!0),u(M,null,B(L.value,l=>(i(),E(V,{key:l,label:l,value:l},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),a(R,{modelValue:v.value,"onUpdate:modelValue":e[1]||(e[1]=l=>v.value=l),placeholder:"推荐选项(可选)",size:"small",style:{"margin-top":"8px"}},null,8,["modelValue"]),a(o,{type:"warning",size:"small",plain:"",style:{"margin-top":"8px"},disabled:!$.value.length&&!v.value,onClick:D},{default:m(()=>[...e[22]||(e[22]=[k(" 推送排除/推荐 ",-1)])]),_:1},8,["disabled"])])]),t("div",zt,[e[28]||(e[28]=t("div",{class:"section-title"},"⚡ 路由操作",-1)),a(R,{modelValue:n.value,"onUpdate:modelValue":e[2]||(e[2]=l=>n.value=l),type:"textarea",rows:2,placeholder:"路由备注(可选)",style:{"margin-bottom":"12px"}},null,8,["modelValue"]),t("div",Vt,[a(o,{type:"success",icon:Y(ce),onClick:e[3]||(e[3]=l=>z("ai_self"))},{default:m(()=>[...e[24]||(e[24]=[k(" AI自答 ",-1)])]),_:1},8,["icon"]),a(o,{type:"danger",icon:Y(_e),onClick:e[4]||(e[4]=l=>z("human"))},{default:m(()=>[...e[25]||(e[25]=[k(" 转人工 ",-1)])]),_:1},8,["icon"]),a(o,{type:"warning",icon:Y(pe),onClick:e[5]||(e[5]=l=>z("auto_approval"))},{default:m(()=>[...e[26]||(e[26]=[k(" 自动审批 ",-1)])]),_:1},8,["icon"]),a(o,{type:"info",icon:Y(ve),onClick:e[6]||(e[6]=l=>z("skip"))},{default:m(()=>[...e[27]||(e[27]=[k(" 跳过 ",-1)])]),_:1},8,["icon"])])])],64)):(i(),u("div",Ye,[a(_,{description:"请从左侧列表选择分诊记录","image-size":120})]))])}}}),Lt=K(It,[["__scopeId","data-v-4c4531d4"]]),Dt={class:"triage-dashboard"},Ut={class:"dashboard-header"},Mt={class:"header-actions"},St={class:"dashboard-body"},At={class:"left-panel"},Pt={key:1,class:"history-list"},Rt={class:"filter-bar"},Bt={class:"list-container"},Et={key:0,class:"empty-state"},Nt=["onClick"],qt={class:"list-item__content"},Ht={class:"list-item__title"},Ot={class:"list-item__meta"},Ft={class:"meta-user"},Yt={class:"list-item__time"},jt={key:0,class:"pagination"},Gt={class:"right-panel"},Kt=G({__name:"TriageDashboard",setup(s){const h=y("pending"),T=y(null),C=y(null),n=y(null),$=y(null),v=y([]),L=y(!1),z=y(0),D=y(1),I=y(null),A=y("");async function P(){try{T.value=await we()}catch(o){console.error("加载统计失败:",o)}}async function q(o){C.value=o;try{n.value=await X(o.id)}catch{S.error("加载分诊详情失败")}}async function H(o){try{n.value=await X(o.id)}catch{S.error("加载分诊详情失败")}}function d(){var o;n.value=null,C.value=null,P(),h.value==="pending"?(o=$.value)==null||o.refresh():e()}async function e(){var o,l;L.value=!0;try{const b=await Te({date_from:(o=I.value)==null?void 0:o[0],date_to:(l=I.value)==null?void 0:l[1],route_action:A.value||void 0,page:D.value,page_size:20});v.value=b.items,z.value=b.total}catch(b){console.error("加载历史失败:",b)}finally{L.value=!1}}async function _(){var o,l;try{const b=await Ce({date_from:(o=I.value)==null?void 0:o[0],date_to:(l=I.value)==null?void 0:l[1]}),r=URL.createObjectURL(b),U=document.createElement("a");U.href=r,U.download=`分诊记录_${new Date().toISOString().slice(0,10)}.xlsx`,U.click(),URL.revokeObjectURL(r),S.success("导出成功")}catch{S.error("导出失败")}}function g(){var o;P(),h.value==="pending"?(o=$.value)==null||o.refresh():e()}ae(h,o=>{o==="history"&&v.value.length===0&&e(),n.value=null,C.value=null});function w(o){return{high:"高",medium:"中",low:"低"}[o]||o}function V(o){return{ai_self:"AI自答",human:"转人工",auto_approval:"自动审批",skip:"跳过"}[o]||o}function O(o){return{ai_self:"success",human:"danger",auto_approval:"warning",skip:"info"}[o]||"info"}function R(o){return o?new Date(o).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):""}return ee(()=>{P()}),(o,l)=>{var Q;const b=p("el-radio-button"),r=p("el-radio-group"),U=p("el-button"),se=p("el-icon"),ne=p("el-date-picker"),F=p("el-option"),oe=p("el-select"),ie=p("el-empty"),re=p("el-tag"),de=p("el-pagination"),ue=le("loading");return i(),u("div",Dt,[t("div",Ut,[l[8]||(l[8]=t("h2",{class:"dashboard-title"},"分诊看板",-1)),t("div",Mt,[a(r,{modelValue:h.value,"onUpdate:modelValue":l[0]||(l[0]=f=>h.value=f),size:"small"},{default:m(()=>[a(b,{label:"pending"},{default:m(()=>[...l[4]||(l[4]=[k("待分诊",-1)])]),_:1}),a(b,{label:"history"},{default:m(()=>[...l[5]||(l[5]=[k("历史记录",-1)])]),_:1})]),_:1},8,["modelValue"]),h.value==="history"?(i(),E(U,{key:0,type:"primary",size:"small",plain:"",onClick:_},{default:m(()=>[...l[6]||(l[6]=[k(" 导出 ",-1)])]),_:1})):x("",!0),a(U,{size:"small",onClick:g},{default:m(()=>[a(se,null,{default:m(()=>[a(Y(me))]),_:1}),l[7]||(l[7]=k(" 刷新 ",-1))]),_:1})])]),a(ke,{stats:T.value},null,8,["stats"]),t("div",St,[t("div",At,[h.value==="pending"?(i(),E(Oe,{key:0,ref_key:"pendingListRef",ref:$,"selected-id":(Q=C.value)==null?void 0:Q.id,onSelect:q},null,8,["selected-id"])):(i(),u("div",Pt,[t("div",Rt,[a(ne,{modelValue:I.value,"onUpdate:modelValue":l[1]||(l[1]=f=>I.value=f),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期",size:"small","value-format":"YYYY-MM-DD",onChange:e},null,8,["modelValue"]),a(oe,{modelValue:A.value,"onUpdate:modelValue":l[2]||(l[2]=f=>A.value=f),placeholder:"路由动作",clearable:"",size:"small",style:{width:"120px"},onChange:e},{default:m(()=>[a(F,{label:"全部",value:""}),a(F,{label:"AI自答",value:"ai_self"}),a(F,{label:"转人工",value:"human"}),a(F,{label:"自动审批",value:"auto_approval"}),a(F,{label:"跳过",value:"skip"})]),_:1},8,["modelValue"])]),te((i(),u("div",Bt,[v.value.length===0&&!L.value?(i(),u("div",Et,[a(ie,{description:"暂无历史记录","image-size":80})])):x("",!0),(i(!0),u(M,null,B(v.value,f=>{var W;return i(),u("div",{key:f.id,class:j(["list-item",{"list-item--active":f.id===((W=n.value)==null?void 0:W.id)}]),onClick:Jt=>H(f)},[t("div",{class:j(["list-item__urgency",`urgency--${f.urgency}`])},c(w(f.urgency)),3),t("div",qt,[t("div",Ht,c(f.request_title),1),t("div",Ot,[t("span",Ft,c(f.user_name||f.user_id),1),f.route_action?(i(),E(re,{key:0,size:"small",type:O(f.route_action)},{default:m(()=>[k(c(V(f.route_action)),1)]),_:2},1032,["type"])):x("",!0)]),t("div",Yt,c(R(f.created_at)),1)])],10,Nt)}),128))])),[[ue,L.value]]),z.value>20?(i(),u("div",jt,[a(de,{"current-page":D.value,"onUpdate:currentPage":l[3]||(l[3]=f=>D.value=f),"page-size":20,total:z.value,layout:"prev, pager, next",small:"",onCurrentChange:e},null,8,["current-page","total"])])):x("",!0)]))]),t("div",Gt,[a(Lt,{detail:n.value,onRouted:d},null,8,["detail"])])])])}}}),Xt=K(Kt,[["__scopeId","data-v-35ae7de7"]]);export{Xt as default};
|