2 lines
17 KiB
JavaScript
2 lines
17 KiB
JavaScript
import{a3 as L,b4 as ve,aq as A,aP as S,s as g,a8 as ee,a5 as o,as as m,am as l,a6 as w,al as v,aa as y,an as k,ap as b,ao as $,D as fe,a4 as te,b as se,F as me,P as _e,ar as ye,ah as ke,aA as we,aj as be,ak as ge,b5 as f,L as he,ab as W,b6 as M,C as $e,e as Se,d as Ce,E as Ae}from"./index-DyhzhPHB.js";/* empty css */import{T as oe,N as Te,a as xe,C as Ie,S as Pe,b as De}from"./index-Cf-KgPGN.js";import{C as Be}from"./index-6n6rsn4x.js";async function Ne(i){return await L.get(`/itportal/automation/sessions/${i}`)}async function Ve(i,c){return await L.post(`/itportal/automation/actions/${i}/confirm`,c)}async function Le(i,c){return await L.post(`/itportal/automation/sessions/${i}/resolved`,c)}async function Re(i,c){return await L.post(`/itportal/automation/sessions/${i}/pause`,{reason:c||null})}async function Ue(i){return await L.post("/itportal/automation/sessions/resume",{session_id:i||null})}async function We(i){return await L.post(`/itportal/automation/sessions/${i}/resume`)}async function ze(i){return await L.get("/itportal/automation/sessions/paused",{params:{employee_id:i}})}async function Ee(i,c){return await L.post(`/itportal/automation/sessions/${i}/correct`,c)}async function Me(i,c){return await L.post(`/itportal/automation/sessions/${i}/supplement`,c)}async function Z(i){return await L.get(`/itportal/automation/sessions/${i}/info-items`)}function ie(){return localStorage.getItem("h5_token")||""}function Fe(i){const c=ie(),d=window.location.protocol==="https:"?"wss:":"ws:",a=window.location.host;return`${d}//${a}/ws/automation/${i}?token=${encodeURIComponent(c)}`}const qe=ve("automation",()=>{const i=A(null),c=A(!1),d=A(null),a=A(!1),n=A(null),r=A([]),T=A(null),P=A([]),R=A(null),h=A([]),s=A(!1),p=S(()=>{var e;return((e=i.value)==null?void 0:e.status)==="resolved"}),N=S(()=>{var e;return((e=i.value)==null?void 0:e.status)==="handoff"}),D=S(()=>{var e;return((e=i.value)==null?void 0:e.status)==="paused"});async function _(e){c.value=!0;try{i.value=await Ne(e)}finally{c.value=!1}}async function q(e,t){await Ve(e,t),T.value=null,n.value&&await _(n.value)}async function j(e,t){await Le(e,t),n.value&&await _(n.value)}async function H(e){n.value&&(i.value=await Re(n.value,e))}async function O(e){const t=e?await We(e):await Ue(e);if(t.need_select){s.value=!0,P.value=t.paused_list||[];return}s.value=!1,t.session&&(i.value=t.session),t.resume_point&&(R.value=t.resume_point),t.pending_items&&t.pending_items.length>0&&g(`请补全信息:${t.pending_items.join("、")}`)}async function J(e){P.value=await ze(e)}async function G(e,t,I,C){await Ee(e,{field:t,new_value:I,old_value:C}),h.value=await Z(e)}async function K(e,t,I){await Me(e,{field:t,value:I}),h.value=await Z(e)}async function E(e){h.value=await Z(e)}function Q(e){F();const t=Fe(e),I=ie(),C=new WebSocket(t,[`bearer.${I}`]);d.value=C,n.value=e,C.onopen=()=>{a.value=!0},C.onmessage=V=>{try{const z=JSON.parse(V.data);X(z)}catch(z){console.error("[automation H5 WS] 消息解析失败",z)}},C.onclose=()=>{a.value=!1},C.onerror=()=>{a.value=!1}}function F(){d.value&&(d.value.close(),d.value=null),a.value=!1,n.value=null}function X(e){var t,I,C;if(!(e.session_id&&n.value&&e.session_id!==n.value))switch(e.type){case"automation.progress":r.value.push({type:e.type,time:x(),data:e.data}),n.value&&_(n.value);break;case"automation.action_required":T.value=((t=e.data)==null?void 0:t.action)||null,n.value&&_(n.value);break;case"automation.resolved":n.value&&_(n.value),g("问题已解决");break;case"automation.takeover":T.value=null,n.value&&_(n.value);break;case"automation.error":r.value.push({type:e.type,time:x(),data:e.data}),g("自动化处置出现异常");break;case"automation.paused":r.value.push({type:e.type,time:x(),data:e.data}),n.value&&_(n.value),g(((I=e.data)==null?void 0:I.resume_hint)||"任务已暂停");break;case"automation.resumed":r.value.push({type:e.type,time:x(),data:e.data}),n.value&&(_(n.value),E(n.value));break;case"automation.info_corrected":r.value.push({type:e.type,time:x(),data:e.data}),n.value&&E(n.value);break;case"automation.info_supplemented":r.value.push({type:e.type,time:x(),data:e.data}),n.value&&E(n.value);break;case"automation.timeout_closed":r.value.push({type:e.type,time:x(),data:e.data}),n.value&&_(n.value),g(((C=e.data)==null?void 0:C.reason)||"任务因长时间未恢复已自动关闭");break}}function x(){return new Date().toISOString()}return{currentSession:i,loading:c,wsConnected:a,progressEvents:r,pendingAction:T,pausedSessions:P,resumePoint:R,infoItems:h,needSelectSession:s,isResolved:p,isHandoff:N,isPaused:D,fetchSession:_,confirmAction:q,resolveSession:j,pauseCurrentSession:H,resumeCurrentSession:O,fetchPausedSessions:J,correctSessionInfo:G,supplementSessionInfo:K,fetchInfoItems:E,connectWs:Q,disconnectWs:F}}),je={key:0,class:"confirm-body"},He={class:"risk-row"},Oe={class:"action-title"},Je={class:"action-desc"},Ge={key:0,class:"payload-block"},Ke={class:"payload-pre"},Qe={key:1,class:"confirm-body"},Xe=ee({__name:"ActionConfirmDialog",props:{visible:{type:Boolean},action:{}},emits:["confirm","cancel","update:visible"],setup(i,{emit:c}){const d=i,a=c,n=S({get:()=>d.visible,set:s=>a("update:visible",s)}),r=S(()=>{var s,p;switch((s=d.action)==null?void 0:s.risk_level){case"read":return"只读";case"low":return"低风险";case"write":return"写操作";case"high":return"高危";default:return((p=d.action)==null?void 0:p.risk_level)||"未知"}}),T=S(()=>{var s;switch((s=d.action)==null?void 0:s.risk_level){case"read":return"primary";case"low":return"success";case"write":return"warning";case"high":return"danger";default:return"primary"}}),P=S(()=>{var s,p;try{return JSON.stringify((s=d.action)==null?void 0:s.payload,null,2)}catch{return String((p=d.action)==null?void 0:p.payload)}});function R(){a("confirm",{confirmed:!0})}function h(){a("cancel")}return(s,p)=>{const N=oe,D=fe;return o(),m(D,{show:n.value,"onUpdate:show":p[0]||(p[0]=_=>n.value=_),title:"高危操作确认","show-confirm-button":!0,"show-cancel-button":!0,"confirm-button-text":"确认执行","cancel-button-text":"暂不执行","confirm-button-color":"#ee0a24",onConfirm:R,onCancel:h},{default:l(()=>[i.action?(o(),w("div",je,[v("div",He,[y(N,{type:T.value,mark:""},{default:l(()=>[k(b(r.value),1)]),_:1},8,["type"])]),v("div",Oe,b(i.action.title),1),v("div",Je,b(i.action.description),1),i.action.payload?(o(),w("div",Ge,[p[1]||(p[1]=v("div",{class:"block-label"},"操作参数",-1)),v("pre",Ke,b(P.value),1)])):$("",!0),p[2]||(p[2]=v("p",{class:"warn-tip"},"该操作将实际执行,请确认信息无误后再继续。",-1))])):(o(),w("div",Qe,[...p[3]||(p[3]=[v("p",{class:"warn-tip"},"暂无动作详情。",-1)])]))]),_:1},8,["show"])}}}),Ye=te(Xe,[["__scopeId","data-v-871c5ac9"]]),Ze={class:"resolve-feedback"},et={class:"desc"},tt={class:"btns"},at=ee({__name:"ResolveFeedback",props:{visible:{type:Boolean},session:{}},emits:["feedback","update:visible"],setup(i,{emit:c}){const d=i,a=c,n=S({get:()=>d.visible,set:h=>a("update:visible",h)}),r=A(""),T=S(()=>{var D;const h=(D=d.session)==null?void 0:D.auto_close_at;if(!h)return"稍后";const s=new Date(h).getTime()-Date.now();if(s<=0)return"即将";const p=Math.floor(s/6e4),N=Math.floor(s%6e4/1e3);return p>0?`${p} 分 ${N} 秒`:`${N} 秒`});function P(h){a("feedback",{satisfied:h,note:r.value||void 0}),r.value="",n.value=!1}function R(){a("update:visible",!1)}return(h,s)=>{const p=se,N=me,D=_e;return o(),m(D,{show:n.value,"onUpdate:show":s[3]||(s[3]=_=>n.value=_),position:"bottom",round:"",style:{padding:"20px"},onClose:R},{default:l(()=>[v("div",Ze,[s[8]||(s[8]=v("div",{class:"title"},"问题已解决 🎉",-1)),v("p",et,[s[4]||(s[4]=k(" 本次自动化处置已完成。如无异议,会话将在 ",-1)),v("b",null,b(T.value),1),s[5]||(s[5]=k(" 后自动关闭(静默关单)。 ",-1))]),s[9]||(s[9]=v("div",{class:"question"},"本次服务是否解决了您的问题?",-1)),v("div",tt,[y(p,{type:"primary",block:"",onClick:s[0]||(s[0]=_=>P(!0))},{default:l(()=>[...s[6]||(s[6]=[k("已解决,满意",-1)])]),_:1}),y(p,{block:"",class:"btn-secondary",onClick:s[1]||(s[1]=_=>P(!1))},{default:l(()=>[...s[7]||(s[7]=[k("仍未解决",-1)])]),_:1})]),y(N,{modelValue:r.value,"onUpdate:modelValue":s[2]||(s[2]=_=>r.value=_),type:"textarea",rows:"2",placeholder:"补充意见(可选)",class:"note-field"},null,8,["modelValue"])])]),_:1},8,["show"])}}}),nt=te(at,[["__scopeId","data-v-613c2db3"]]),st={class:"auto-progress"},ot={class:"content"},it={key:0,class:"event-detail"},ut={key:2,class:"section-title"},rt={class:"info-value"},lt={class:"info-text"},ct={class:"info-modifiers"},dt={key:0,class:"info-history"},pt={class:"history-action"},vt={key:4,class:"action-bar"},ft={key:5,class:"action-bar"},mt=ee({__name:"AutomationProgress",setup(i){const c=ye(),d=ke(),a=qe(),n=S(()=>c.params.id||""),r=S(()=>a.currentSession),T=A(!1),P=A([]);we(()=>n.value,()=>{T.value=!1});const R=S(()=>{var e;return((e=r.value)==null?void 0:e.title)||"自动化处置"}),h=S(()=>{var e;return`${Math.round((((e=r.value)==null?void 0:e.confidence)||0)*100)}%`}),s=S(()=>{var e;return(e=r.value)!=null&&e.auto_close_at?x(r.value.auto_close_at):"-"}),p=S(()=>{var C;if(!((C=r.value)!=null&&C.paused_at))return"";const e=Date.now()-new Date(r.value.paused_at).getTime(),t=Math.floor(e/36e5),I=Math.floor(e%36e5/6e4);return t>0?`已暂停 ${t}h ${I}min`:`已暂停 ${I}min`});be(async()=>{if(!n.value){g("缺少会话参数");return}await a.fetchSession(n.value),a.connectWs(n.value);try{await a.fetchInfoItems(n.value)}catch{}}),ge(()=>a.disconnectWs());async function N(){if(n.value)try{await a.pauseCurrentSession("员工主动暂停"),g("任务已暂停")}catch{g("暂停失败,请重试")}}async function D(){if(n.value)try{await a.resumeCurrentSession(n.value),g("任务已恢复")}catch{g("恢复失败,请重试")}}async function _(e){try{await a.resumeCurrentSession(e),a.currentSession&&d.replace(`/automation/${e}`)}catch{g("恢复失败,请重试")}}async function q(e){const t=a.pendingAction;if(t)try{await a.confirmAction(t.id,e),g(e.confirmed?"已确认执行":"已取消执行")}catch{g("操作失败,请重试")}}async function j(){const e=a.pendingAction;if(e)try{await a.confirmAction(e.id,{confirmed:!1}),g("已取消执行")}catch{g("操作失败,请重试")}}async function H(e){if(n.value)try{await a.resolveSession(n.value,e),T.value=!0,g("感谢反馈")}catch{g("提交失败,请重试")}}function O(){d.back()}const J=S(()=>{var e;return G(((e=r.value)==null?void 0:e.status)||"")});function G(e){switch(e){case"created":return"已创建";case"running":return"执行中";case"paused":return"已暂停";case"resolved":return"已解决";case"handoff":return"已转人工";case"error":return"异常";case"closed":return"已关闭";default:return e||"未知"}}function K(e){switch(e.risk_level){case"read":return"只读";case"low":return"低风险";case"write":return"写操作";case"high":return"高危";default:return e.risk_level}}function E(e){switch(e.risk_level){case"read":return"primary";case"low":return"success";case"write":return"warning";case"high":return"danger";default:return"primary"}}function Q(e){switch(e.status){case"pending":case"awaiting_approval":return"待确认";case"approved":return"已通过";case"rejected":return"已取消";case"running":return"执行中";case"done":case"executed":return"已完成";case"failed":return"失败";case"skipped":return"已跳过";default:return e.status}}function F(e){switch(e.type){case"automation.progress":return"处置进展更新";case"automation.action_required":return"需要您确认高危操作";case"automation.resolved":return"问题已解决";case"automation.takeover":return"已转人工坐席";case"automation.error":return"处置异常";case"automation.paused":return"任务已暂停";case"automation.resumed":return"任务已恢复";case"automation.info_corrected":return"信息已更正";case"automation.info_supplemented":return"信息已补充";case"automation.timeout_closed":return"任务超时关闭";default:return e.type}}function X(e){if(!e.data)return"";switch(e.type){case"automation.paused":return e.data.resume_hint||"";case"automation.resumed":return e.data.current_step||"";case"automation.info_corrected":return`${e.data.field}: ${e.data.old_value||""} → ${e.data.new_value||""} (v${e.data.version})`;case"automation.info_supplemented":return`${e.data.field}: ${e.data.supplement_value||""}`;case"automation.timeout_closed":return e.data.reason||"";default:return e.data.message||e.data.step||""}}function x(e){try{return new Date(e).toLocaleString("zh-CN",{hour12:!1})}catch{return e}}return(e,t)=>{const I=Te,C=he,V=$e,z=Be,ue=xe,U=oe,Y=se,re=Ie,ae=Pe,le=De,ce=Se,de=Ce,pe=Ae;return o(),w("div",st,[y(I,{title:R.value,"left-arrow":"",onClickLeft:O},null,8,["title"]),v("div",ot,[f(a).loading?(o(),m(C,{key:0,class:"page-loading",type:"spinner",color:"#07c160"})):$("",!0),f(a).needSelectSession&&f(a).pausedSessions.length>0?(o(),w(W,{key:1},[t[2]||(t[2]=v("div",{class:"section-title"},"您有未完成的任务,请选择要继续的",-1)),y(z,{inset:""},{default:l(()=>[(o(!0),w(W,null,M(f(a).pausedSessions,(u,B)=>(o(),m(V,{key:u.session_id,title:`${B+1}. ${u.title}`,label:`${u.scenario_key||""} · 暂停于 ${x(u.paused_at||"")} · ${u.paused_duration}`,"is-link":"",onClick:ne=>_(u.session_id)},null,8,["title","label","onClick"]))),128))]),_:1})],64)):f(a).currentSession?(o(),w(W,{key:2},[r.value.status==="paused"?(o(),m(ue,{key:0,"left-icon":"pause-circle-o",color:"#1989fa",background:"#ecf9ff"},{default:l(()=>[k(" 任务已暂停 · "+b(p.value),1)]),_:1})):$("",!0),f(a).resumePoint?(o(),m(re,{key:1,class:"resume-card",title:f(a).resumePoint.title,desc:f(a).resumePoint.current_step},{tags:l(()=>[y(U,{plain:"",type:"primary"},{default:l(()=>[k(b(f(a).resumePoint.scenario_key||"未知场景"),1)]),_:1}),f(a).resumePoint.paused_at?(o(),m(U,{key:0,plain:"",type:"warning"},{default:l(()=>[k(" 暂停于 "+b(x(f(a).resumePoint.paused_at)),1)]),_:1})):$("",!0)]),footer:l(()=>[y(Y,{size:"small",type:"primary",onClick:D},{default:l(()=>[...t[3]||(t[3]=[k("继续处理",-1)])]),_:1})]),_:1},8,["title","desc"])):$("",!0),y(z,{inset:"",class:"block"},{default:l(()=>[y(V,{title:"状态",value:J.value},null,8,["value"]),y(V,{title:"场景",value:r.value.scenario_key||"-"},null,8,["value"]),y(V,{title:"置信度",value:h.value},null,8,["value"]),r.value.auto_close_at?(o(),m(V,{key:0,title:"自动关单",value:s.value},null,8,["value"])):$("",!0),r.value.paused_at?(o(),m(V,{key:1,title:"暂停时间",value:x(r.value.paused_at)},null,8,["value"])):$("",!0)]),_:1}),t[10]||(t[10]=v("div",{class:"section-title"},"处置进展",-1)),y(le,{direction:"vertical",active:f(a).progressEvents.length},{default:l(()=>[(o(!0),w(W,null,M(f(a).progressEvents,(u,B)=>(o(),m(ae,{key:B,title:F(u)},{default:l(()=>[k(b(x(u.time))+" ",1),u.data?(o(),w("div",it,b(X(u)),1)):$("",!0)]),_:2},1032,["title"]))),128)),f(a).progressEvents.length?$("",!0):(o(),m(ae,{key:0,title:"正在初始化自动化处置…"}))]),_:1},8,["active"]),t[11]||(t[11]=v("div",{class:"section-title"},"执行动作",-1)),y(z,{inset:""},{default:l(()=>[(o(!0),w(W,null,M(r.value.actions,u=>(o(),m(V,{key:u.id,title:u.title,label:u.description,value:Q(u)},{icon:l(()=>[y(U,{type:E(u),class:"act-tag"},{default:l(()=>[k(b(K(u)),1)]),_:2},1032,["type"])]),_:2},1032,["title","label","value"]))),128)),r.value.actions.length?$("",!0):(o(),m(V,{key:0,title:"暂无动作"}))]),_:1}),f(a).infoItems.length>0?(o(),w("div",ut,"已收集信息")):$("",!0),f(a).infoItems.length>0?(o(),m(de,{key:3,modelValue:P.value,"onUpdate:modelValue":t[0]||(t[0]=u=>P.value=u)},{default:l(()=>[(o(!0),w(W,null,M(f(a).infoItems,u=>(o(),m(ce,{key:u.id,name:u.name,title:u.name},{value:l(()=>[v("div",rt,[u.is_locked?(o(),m(U,{key:0,type:"danger",size:"mini"},{default:l(()=>[...t[4]||(t[4]=[k("已锁定",-1)])]),_:1})):u.is_filled?(o(),m(U,{key:1,type:"success",size:"mini"},{default:l(()=>[...t[5]||(t[5]=[k("已填写",-1)])]),_:1})):(o(),m(U,{key:2,type:"warning",size:"mini"},{default:l(()=>[...t[6]||(t[6]=[k("待填写",-1)])]),_:1})),v("span",lt,b(u.value||"-"),1),u.version>1?(o(),m(U,{key:3,plain:"",size:"mini"},{default:l(()=>[k("v"+b(u.version),1)]),_:2},1024)):$("",!0)])]),default:l(()=>[v("div",ct,[(o(!0),w(W,null,M(u.modifiers,B=>(o(),m(U,{key:B,plain:"",size:"mini",class:"mod-tag"},{default:l(()=>[k(b(B),1)]),_:2},1024))),128))]),u.update_history.length>0?(o(),w("div",dt,[t[7]||(t[7]=v("div",{class:"history-title"},"变更历史",-1)),(o(!0),w(W,null,M(u.update_history,(B,ne)=>(o(),w("div",{key:ne,class:"history-item"},[k(" v"+b(B.version)+": "+b(B.old_value)+" → "+b(B.new_value)+" ",1),v("span",pt,"["+b(B.action)+"]",1)]))),128))])):$("",!0)]),_:2},1032,["name","title"]))),128))]),_:1},8,["modelValue"])):$("",!0),r.value.status==="running"?(o(),w("div",vt,[y(Y,{block:"",type:"warning",plain:"",onClick:N},{default:l(()=>[...t[8]||(t[8]=[k("暂停任务",-1)])]),_:1})])):$("",!0),r.value.status==="paused"?(o(),w("div",ft,[y(Y,{block:"",type:"primary",onClick:D},{default:l(()=>[...t[9]||(t[9]=[k("继续处理",-1)])]),_:1})])):$("",!0),y(Ye,{visible:!!f(a).pendingAction,action:f(a).pendingAction,onConfirm:q,onCancel:j},null,8,["visible","action"]),y(nt,{visible:f(a).isResolved&&!T.value,session:f(a).currentSession,onFeedback:H,"onUpdate:visible":t[1]||(t[1]=u=>{u||(T.value=!0)})},null,8,["visible","session"])],64)):(o(),m(pe,{key:3,description:"会话不存在或已结束"}))])])}}}),bt=te(mt,[["__scopeId","data-v-bc3c6a08"]]);export{bt as default};
|