Files
iqudo-top1/web/dist/assets/ExecuteView-BrNPNrQz.js
2026-08-09 00:29:26 +08:00

1 line
9.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{A as e,Bt as t,D as n,F as r,I as i,O as a,P as o,Q as s,S as c,Tt as l,U as u,Y as d,_t as f,et as p,i as ee,j as m,k as h,lt as g,n as _,r as v,t as y,tt as b,vt as x,zt as te}from"./client-Bk7n1O1W.js";import{a as S}from"./config-provider-CxhqvDI_.js";import{t as C}from"./modal-C5Vo2Ug5.js";import{t as ne}from"./PlayCircleOutlined-DjeS67m_.js";import{t as re}from"./SafetyCertificateOutlined-B1v8On0u.js";import{t as w}from"./StopOutlined-X-yne_Zl.js";import{h as T,m as E}from"./useApi-CROJJdhE-C8LJOf_8.js";var ie={class:`page-shell execution-shell`},ae={key:0,class:`sop-catalog`},oe=[`onClick`],se={class:`entry-seq`},ce={class:`play`},le={key:1,class:`run-workspace`},ue={class:`run-context`},de={class:`run-label`},fe={class:`context-meta`},pe={class:`context-meta`},me={class:`privacy-note`},he={class:`conversation surface`},ge={class:`conversation-progress`},D={class:`node-content`},O={key:0},k={key:0,class:`knowledge-snapshot`},A={class:`knowledge-head`},j={class:`standard-copy`},M={key:0,class:`knowledge-note forbidden`},N={key:1,class:`knowledge-note risk`},P={key:1,class:`completed-state`},F={key:0,class:`quick-feedback`},I={key:1,class:`feedback-thanks`},L={class:`run-actions`},R=v(i({__name:`ExecuteView`,setup(i){let v=E(),R=T(),z=x(!0),B=x([]),V=x(null),H=f({}),U=x(!1),W=x(),G=f({score:5,comment:``}),K=x(!1),q=n(()=>V.value?.node.config||{}),J=n(()=>{if(!V.value)return[];let e=V.value.node;return e.type===`question`||e.type===`choice`?V.value.fields.filter(e=>e.field_key===q.value.field_key):e.type===`form`?V.value.fields.filter(e=>(q.value.field_keys||[]).includes(e.field_key)):[]});async function Y(){z.value=!0;try{B.value=(await y.get(`/published-sops`)).items;let e=Number(v.query.run||0);e>0&&(V.value=await y.get(`/runs/${e}`))}catch(e){S.error(_(e)),await R.replace({query:{}})}finally{z.value=!1}}async function X(){Object.keys(H).forEach(e=>delete H[e]),await u(),W.value?.clearValidate()}async function _e(e){try{V.value=await y.post(`/runs`,{sop_id:e}),await R.replace({query:{run:String(V.value.run.id)}}),await X(),Object.assign(G,{score:5,comment:``}),K.value=!1}catch(e){S.error(_(e))}}async function ve(){if(V.value){try{await W.value?.validate()}catch{return}U.value=!0;try{V.value=await y.post(`/runs/${V.value.run.id}/answer`,{node_key:V.value.node.node_key,answers:{...H}}),await X()}catch(e){S.error(_(e))}finally{U.value=!1}}}function ye(){V.value&&C.confirm({title:`结束本次执行?`,content:`当前节点尚未提交的内容不会保存,执行记录将标记为“人工结束”。`,okText:`确认结束`,cancelText:`继续执行`,okType:`danger`,async onOk(){if(V.value){U.value=!0;try{V.value=await y.post(`/runs/${V.value.run.id}/finish`,{result:`manual`}),Object.keys(H).forEach(e=>delete H[e]),S.success(`本次执行已结束`)}catch(e){throw S.error(_(e)),e}finally{U.value=!1}}}})}function Z(e){return e.field_type}function Q(e,t){let n=e.validation?.[t];return typeof n==`number`?n:void 0}function $(e){return e.required||[`question`,`choice`].includes(V.value?.node.type||``)&&q.value.required===!0}function be(e){let t=[];if($(e)&&t.push({required:!0,message:`请填写${e.field_name}`,trigger:[`change`,`blur`]}),[`text`,`textarea`].includes(e.field_type)){let n=Q(e,`min_length`),r=Q(e,`max_length`);n!==void 0&&t.push({min:n,message:`${e.field_name}不能少于 ${n} 个字符`,trigger:`blur`}),r!==void 0&&t.push({max:r,message:`${e.field_name}不能超过 ${r} 个字符`,trigger:`blur`})}if(e.field_type===`number`){let n=Q(e,`min`),r=Q(e,`max`);t.push({type:`number`,message:`${e.field_name}必须是数字`,trigger:`change`}),n!==void 0&&t.push({type:`number`,min:n,message:`${e.field_name}不能小于 ${n}`,trigger:`change`}),r!==void 0&&t.push({type:`number`,max:r,message:`${e.field_name}不能大于 ${r}`,trigger:`change`})}return t}async function xe(){if(V.value){U.value=!0;try{await y.post(`/runs/${V.value.run.id}/feedback`,G),K.value=!0,S.success(`反馈已提交`)}catch(e){S.error(_(e))}finally{U.value=!1}}}async function Se(){V.value=null,await R.replace({query:{}}),await Y()}return d(Y),(n,i)=>{let u=b(`a-empty`),d=b(`a-rate`),f=b(`a-textarea`),_=b(`a-button`),v=b(`a-radio-button`),y=b(`a-radio-group`),x=b(`a-input`),S=b(`a-input-number`),C=b(`a-radio`),T=b(`a-select`),E=b(`a-date-picker`),R=b(`a-form-item`),Y=b(`a-form`),X=b(`a-spin`);return s(),m(`div`,ie,[i[16]||=a(`div`,{class:`page-heading`},[a(`div`,null,[a(`h1`,null,`执行话术`),a(`p`,null,`选择已发布 SOP系统会根据客户回答给出下一步。`)])],-1),r(X,{spinning:z.value},{default:g(()=>[V.value?(s(),m(`div`,le,[a(`aside`,ue,[a(`span`,de,`RUN-`+t(String(V.value.run.id).padStart(5,`0`)),1),a(`h2`,null,t(V.value.run.status===`completed`?`执行已结束`:`执行进行中`),1),i[5]||=a(`p`,null,`客户回答会自动保存在当前执行记录中。`,-1),a(`div`,fe,[i[2]||=a(`span`,null,`当前节点`,-1),a(`b`,null,t(V.value.node.title),1)]),a(`div`,pe,[i[3]||=a(`span`,null,`已采集字段`,-1),a(`b`,null,t(Object.keys(V.value.run.answers||{}).length),1)]),a(`div`,me,[r(l(re)),i[4]||=a(`span`,null,`敏感信息请遵循企业数据规范`,-1)])]),a(`main`,he,[a(`div`,ge,[a(`span`,{class:te({done:V.value.run.status===`completed`})},null,2),a(`b`,null,t(V.value.run.status===`completed`?`流程已完成`:`正在执行`),1)]),a(`div`,D,[a(`small`,null,t(V.value.node.type.toUpperCase()),1),a(`h1`,null,t(V.value.node.title),1),V.value.node.content?(s(),m(`blockquote`,O,t(V.value.node.content),1)):e(``,!0)]),V.value.node.knowledge?(s(),m(`section`,k,[a(`div`,A,[a(`b`,null,t(V.value.node.knowledge.title),1),a(`span`,null,`知识卡 V`+t(V.value.node.knowledge.version),1)]),a(`div`,j,[i[6]||=a(`small`,null,`标准话术`,-1),a(`p`,null,t(V.value.node.knowledge.standard_copy),1)]),V.value.node.knowledge.forbidden_copy?(s(),m(`div`,M,[i[7]||=a(`small`,null,`禁用表达`,-1),a(`p`,null,t(V.value.node.knowledge.forbidden_copy),1)])):e(``,!0),V.value.node.knowledge.risk_note?(s(),m(`div`,N,[i[8]||=a(`small`,null,`风险提醒`,-1),a(`p`,null,t(V.value.node.knowledge.risk_note),1)])):e(``,!0)])):e(``,!0),V.value.run.status===`completed`?(s(),m(`div`,P,[r(l(ee)),a(`h3`,null,t(V.value.run.result===`manual`?`已人工结束`:V.value.node.type===`escalate`?`已转交处理`:`本次执行已完成`),1),a(`p`,null,t(V.value.run.result===`manual`?`本次执行由操作人员在当前节点结束。`:V.value.node.content),1),K.value?(s(),m(`div`,I,`反馈已记录,将用于后续优化。`)):(s(),m(`div`,F,[i[10]||=a(`span`,null,`这套 SOP 是否清晰好用?`,-1),r(d,{value:G.score,"onUpdate:value":i[0]||=e=>G.score=e},null,8,[`value`]),r(f,{value:G.comment,"onUpdate:value":i[1]||=e=>G.comment=e,rows:2,maxlength:2e3,placeholder:`可填写需要改进的步骤`},null,8,[`value`]),r(_,{type:`primary`,loading:U.value,onClick:xe},{default:g(()=>[...i[9]||=[o(`提交反馈`,-1)]]),_:1},8,[`loading`])])),r(_,{onClick:Se},{default:g(()=>[...i[11]||=[o(`执行另一套 SOP`,-1)]]),_:1})])):(s(),m(c,{key:2},[r(Y,{ref_key:`answerForm`,ref:W,model:H,layout:`vertical`,class:`answer-form`},{default:g(()=>[(s(!0),m(c,null,p(J.value,e=>(s(),h(R,{key:e.id,name:e.field_key,label:e.field_name,required:$(e),rules:be(e)},{default:g(()=>[V.value.node.type===`choice`?(s(),h(y,{key:0,value:H[e.field_key],"onUpdate:value":t=>H[e.field_key]=t,class:`choice-group`},{default:g(()=>[(s(!0),m(c,null,p(q.value.options||[],e=>(s(),h(v,{key:e,value:e},{default:g(()=>[o(t(e),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`value`,`onUpdate:value`])):Z(e)===`text`?(s(),h(x,{key:1,value:H[e.field_key],"onUpdate:value":t=>H[e.field_key]=t,maxlength:Q(e,`max_length`),"show-count":``},null,8,[`value`,`onUpdate:value`,`maxlength`])):Z(e)===`textarea`?(s(),h(f,{key:2,value:H[e.field_key],"onUpdate:value":t=>H[e.field_key]=t,rows:3,maxlength:Q(e,`max_length`),"show-count":``},null,8,[`value`,`onUpdate:value`,`maxlength`])):Z(e)===`number`?(s(),h(S,{key:3,value:H[e.field_key],"onUpdate:value":t=>H[e.field_key]=t,min:Q(e,`min`),max:Q(e,`max`),style:{width:`100%`}},null,8,[`value`,`onUpdate:value`,`min`,`max`])):Z(e)===`boolean`?(s(),h(y,{key:4,value:H[e.field_key],"onUpdate:value":t=>H[e.field_key]=t},{default:g(()=>[r(C,{value:!0},{default:g(()=>[...i[12]||=[o(``,-1)]]),_:1}),r(C,{value:!1},{default:g(()=>[...i[13]||=[o(``,-1)]]),_:1})]),_:1},8,[`value`,`onUpdate:value`])):Z(e)===`select`?(s(),h(T,{key:5,value:H[e.field_key],"onUpdate:value":t=>H[e.field_key]=t,options:(e.options||[]).map(e=>({value:e,label:e}))},null,8,[`value`,`onUpdate:value`,`options`])):Z(e)===`multiselect`?(s(),h(T,{key:6,value:H[e.field_key],"onUpdate:value":t=>H[e.field_key]=t,mode:`multiple`,options:(e.options||[]).map(e=>({value:e,label:e}))},null,8,[`value`,`onUpdate:value`,`options`])):Z(e)===`date`?(s(),h(E,{key:7,value:H[e.field_key],"onUpdate:value":t=>H[e.field_key]=t,"value-format":`YYYY-MM-DD`,style:{width:`100%`}},null,8,[`value`,`onUpdate:value`])):(s(),h(x,{key:8,value:H[e.field_key],"onUpdate:value":t=>H[e.field_key]=t},null,8,[`value`,`onUpdate:value`]))]),_:2},1032,[`name`,`label`,`required`,`rules`]))),128))]),_:1},8,[`model`]),a(`div`,L,[a(`span`,null,t(J.value.length?`填写后继续下一步`:`确认当前话术已完成`),1),a(`div`,null,[r(_,{danger:``,disabled:U.value,onClick:ye},{default:g(()=>[r(l(w)),i[14]||=o(`人工结束`,-1)]),_:1},8,[`disabled`]),r(_,{type:`primary`,size:`large`,loading:U.value,onClick:ve},{default:g(()=>[...i[15]||=[o(`继续下一步`,-1)]]),_:1},8,[`loading`])])])],64))])])):(s(),m(`div`,ae,[(s(!0),m(c,null,p(B.value,e=>(s(),m(`button`,{key:e.id,class:`sop-entry surface`,onClick:t=>_e(e.id)},[a(`span`,se,t(String(e.id).padStart(2,`0`)),1),a(`div`,null,[a(`small`,null,t(e.scenario_name)+` · V`+t(e.version),1),a(`h2`,null,t(e.name),1),a(`p`,null,t(e.description||`按标准步骤执行这套话术流程。`),1)]),a(`span`,ce,[r(l(ne))])],8,oe))),128)),B.value.length?e(``,!0):(s(),h(u,{key:0,description:`还没有已发布的 SOP`}))]))]),_:1},8,[`spinning`])])}}}),[[`__scopeId`,`data-v-937f7610`]]);export{R as default};