3 lines
14 KiB
JavaScript
3 lines
14 KiB
JavaScript
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,Y as u,_t as d,a as f,et as ee,j as p,k as m,lt as h,n as g,r as _,t as v,tt as y,vt as b}from"./client-Bk7n1O1W.js";import{a as x}from"./config-provider-CxhqvDI_.js";import{t as S}from"./auth-D6Tj4g1X.js";import{t as C}from"./modal-C5Vo2Ug5.js";import{t as w}from"./PlusOutlined-CosM7zFe.js";import{t as te}from"./ArrowLeftOutlined-B1KoeknA.js";import{t as T}from"./DeleteOutlined-Bt9-1HZZ.js";import{t as E}from"./EditOutlined-BIUW-zYI.js";import{h as D,m as O}from"./useApi-CROJJdhE-C8LJOf_8.js";var k={icon:{tag:`svg`,attrs:{viewBox:`64 64 896 896`,focusable:`false`},children:[{tag:`path`,attrs:{d:`M740 161c-61.8 0-112 50.2-112 112 0 50.1 33.1 92.6 78.5 106.9v95.9L320 602.4V318.1c44.2-15 76-56.9 76-106.1 0-61.8-50.2-112-112-112s-112 50.2-112 112c0 49.2 31.8 91 76 106.1V706c-44.2 15-76 56.9-76 106.1 0 61.8 50.2 112 112 112s112-50.2 112-112c0-49.2-31.8-91-76-106.1v-27.8l423.5-138.7a50.52 50.52 0 0034.9-48.2V378.2c42.9-15.8 73.6-57 73.6-105.2 0-61.8-50.2-112-112-112zm-504 51a48.01 48.01 0 0196 0 48.01 48.01 0 01-96 0zm96 600a48.01 48.01 0 01-96 0 48.01 48.01 0 0196 0zm408-491a48.01 48.01 0 010-96 48.01 48.01 0 010 96z`}}]},name:`branches`,theme:`outlined`};function A(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:Object(arguments[t]),r=Object.keys(n);typeof Object.getOwnPropertySymbols==`function`&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){j(e,t,n[t])})}return e}function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var M=function(e,t){var n=A({},e,t.attrs);return r(f,A({},n,{icon:k}),null)};M.displayName=`BranchesOutlined`,M.inheritAttrs=!1;var ne={class:`page-shell`},re={key:0,class:`detail-heading`},ie={class:`scenario-summary`},ae={class:`heading-tags`},oe={class:`trigger-copy`},se={class:`heading-actions`},ce={class:`scenario-code`},le={key:0},ue={class:`surface`},de={class:`toolbar`},fe={key:0},pe={key:0,class:`row-actions`},me={class:`surface`},he={class:`toolbar`},ge={key:0,class:`sop-list`},N=[`onClick`],P={class:`sop-icon`},F={class:`sop-copy`},I={class:`sop-date`},L={key:1,class:`empty-state`},_e={class:`field-grid`},ve={class:`field-grid`},ye={key:1,class:`field-grid`},be={key:2,class:`field-grid`},R=_(i({__name:`ScenarioDetailView`,setup(i){let f=O(),_=D(),k=S(),A=Number(f.params.id),j=b(!0),R=b(!1),z=b(null),B=b([]),V=b([]),H=b(!1),U=b(!1),W=b(!1),G=b(null),K=d({name:``,industry:``,role_name:``,goal:``,trigger_text:``,visibility:`tenant`}),q=d({field_key:``,field_name:``,field_type:`text`,required:!1,options_text:``,min:void 0,max:void 0,min_length:void 0,max_length:void 0}),J=d({name:``,description:``}),xe=n(()=>z.value?.status===`active`?`green`:`default`),Se=n(()=>G.value?`编辑场景字段`:`添加场景字段`),Y=[{value:`text`,label:`单行文本`},{value:`textarea`,label:`多行文本`},{value:`number`,label:`数字`},{value:`boolean`,label:`是/否`},{value:`select`,label:`单选`},{value:`multiselect`,label:`多选`},{value:`date`,label:`日期`}];async function X(){j.value=!0;try{let e=await v.get(`/scenarios/${A}`);z.value=e.scenario,B.value=e.fields||[],V.value=e.sops||[]}catch(e){x.error(g(e))}finally{j.value=!1}}function Ce(){z.value&&(Object.assign(K,{name:z.value.name,industry:z.value.industry,role_name:z.value.role_name,goal:z.value.goal,trigger_text:z.value.trigger_text,visibility:z.value.visibility}),H.value=!0)}async function we(){R.value=!0;try{await v.put(`/scenarios/${A}`,K),x.success(`场景资料已更新`),H.value=!1,await X()}catch(e){x.error(g(e))}finally{R.value=!1}}function Te(){C.confirm({title:`归档“${z.value?.name}”?`,content:`归档后场景不再出现在列表中。存在已发布或审核中 SOP 时,需要先处理对应版本。`,okText:`归档场景`,okType:`danger`,cancelText:`取消`,async onOk(){try{await v.delete(`/scenarios/${A}`),x.success(`场景已归档`),_.replace(`/scenarios`)}catch(e){x.error(g(e))}}})}function Z(){G.value=null,Object.assign(q,{field_key:``,field_name:``,field_type:`text`,required:!1,options_text:``,min:void 0,max:void 0,min_length:void 0,max_length:void 0})}function Ee(){Z(),U.value=!0}function De(e){let t=e.validation||{};G.value=e.id,Object.assign(q,{field_key:e.field_key,field_name:e.field_name,field_type:e.field_type,required:e.required,options_text:Array.isArray(e.options)?e.options.join(`
|
||
`):``,min:typeof t.min==`number`?t.min:void 0,max:typeof t.max==`number`?t.max:void 0,min_length:typeof t.min_length==`number`?t.min_length:void 0,max_length:typeof t.max_length==`number`?t.max_length:void 0}),U.value=!0}async function Oe(){let e=q.options_text.split(`
|
||
`).map(e=>e.trim()).filter(Boolean),t={};q.field_type===`number`&&(q.min!==void 0&&(t.min=q.min),q.max!==void 0&&(t.max=q.max)),[`text`,`textarea`].includes(q.field_type)&&(q.min_length!==void 0&&(t.min_length=q.min_length),q.max_length!==void 0&&(t.max_length=q.max_length));let n={...q,options:e,validation:t,sort_order:G.value?B.value.find(e=>e.id===G.value)?.sort_order||0:B.value.length};R.value=!0;try{G.value?await v.put(`/scenario-fields/${G.value}`,n):await v.post(`/scenarios/${A}/fields`,n),x.success(G.value?`字段已更新`:`字段已添加`),U.value=!1,Z(),await X()}catch(e){x.error(g(e))}finally{R.value=!1}}async function ke(e){C.confirm({title:`删除字段“${e.field_name}”?`,content:`已发布或历史 SOP 版本引用的字段不能删除。`,okText:`删除字段`,okType:`danger`,async onOk(){try{await v.delete(`/scenario-fields/${e.id}`),x.success(`字段已删除`),await X()}catch(e){x.error(g(e))}}})}async function Ae(){R.value=!0;try{let e=await v.post(`/scenarios/${A}/sops`,J);x.success(`SOP 草稿已创建`),W.value=!1,_.push(`/sops/${e.sop.id}`)}catch(e){x.error(g(e))}finally{R.value=!1}}function je(e){return{draft:`草稿`,reviewing:`审核中`,published:`已发布`,offline:`已下线`}[e]||e}function Q(e){return Y.find(t=>t.value===e)?.label||e}function Me(e){return{tenant:`全企业`,team:`团队`,private:`仅自己`}[e]||e}return u(X),(n,i)=>{let u=y(`a-button`),d=y(`a-tag`),f=y(`a-table`),g=y(`a-tab-pane`),v=y(`a-tabs`),b=y(`a-skeleton`),x=y(`a-input`),S=y(`a-form-item`),C=y(`a-textarea`),D=y(`a-radio`),O=y(`a-radio-group`),A=y(`a-form`),X=y(`a-modal`),Ne=y(`a-select`),$=y(`a-input-number`),Pe=y(`a-checkbox`);return s(),p(`div`,ne,[r(u,{type:`link`,class:`back-link`,onClick:i[0]||=e=>l(_).push(`/scenarios`)},{default:h(()=>[r(l(te)),i[22]||=o(`返回场景列表`,-1)]),_:1}),r(b,{loading:j.value,active:``},{default:h(()=>[z.value?(s(),p(`div`,re,[a(`div`,ie,[a(`div`,ae,[r(d,{color:xe.value},{default:h(()=>[o(t(z.value.status===`active`?`使用中`:`草稿`),1)]),_:1},8,[`color`]),a(`span`,null,t(z.value.industry),1),a(`span`,null,t(z.value.role_name),1),a(`span`,null,t(Me(z.value.visibility)),1)]),a(`h1`,null,t(z.value.name),1),a(`p`,null,t(z.value.goal),1),a(`div`,oe,[i[23]||=a(`span`,null,`触发条件`,-1),o(t(z.value.trigger_text),1)])]),a(`div`,se,[a(`span`,ce,`SCN-`+t(String(z.value.id).padStart(4,`0`)),1),l(k).can(`scenario.edit`)?(s(),p(`div`,le,[r(u,{ghost:``,onClick:Ce},{default:h(()=>[r(l(E)),i[24]||=o(`编辑`,-1)]),_:1}),r(u,{ghost:``,danger:``,onClick:Te},{default:h(()=>[r(l(T)),i[25]||=o(`归档`,-1)]),_:1})])):e(``,!0)])])):e(``,!0),r(v,{"default-active-key":`fields`,class:`detail-tabs`},{default:h(()=>[r(g,{key:`fields`,tab:`场景字段`},{default:h(()=>[a(`section`,ue,[a(`div`,de,[i[27]||=a(`div`,null,[a(`b`,null,`采集字段`),a(`span`,{class:`toolbar-note`},`执行过程中收集的信息及校验规则`)],-1),l(k).can(`scenario.edit`)?(s(),m(u,{key:0,type:`primary`,onClick:Ee},{default:h(()=>[r(l(w)),i[26]||=o(`添加字段`,-1)]),_:1})):e(``,!0)]),r(f,{"data-source":B.value,"row-key":`id`,pagination:!1,scroll:{x:760},columns:[{title:`字段名称`,dataIndex:`field_name`},{title:`字段标识`,dataIndex:`field_key`},{title:`类型`,dataIndex:`field_type`,width:130},{title:`必填`,dataIndex:`required`,width:90},{title:``,key:`action`,width:100}]},{bodyCell:h(({column:n,record:i})=>[n.dataIndex===`field_key`?(s(),p(`code`,fe,t(i.field_key),1)):n.dataIndex===`field_type`?(s(),p(c,{key:1},[o(t(Q(i.field_type)),1)],64)):n.dataIndex===`required`?(s(),m(d,{key:2,color:i.required?`orange`:`default`},{default:h(()=>[o(t(i.required?`必填`:`选填`),1)]),_:2},1032,[`color`])):n.key===`action`?(s(),p(c,{key:3},[l(k).can(`scenario.edit`)?(s(),p(`div`,pe,[r(u,{type:`text`,"aria-label":`编辑字段`,onClick:e=>De(i)},{default:h(()=>[r(l(E))]),_:1},8,[`onClick`]),r(u,{type:`text`,danger:``,"aria-label":`删除字段`,onClick:e=>ke(i)},{default:h(()=>[r(l(T))]),_:1},8,[`onClick`])])):e(``,!0)],64)):e(``,!0)]),emptyText:h(()=>[...i[28]||=[a(`div`,{class:`empty-copy`},`还没有字段。先添加执行过程中需要收集的客户信息。`,-1)]]),_:1},8,[`data-source`])])]),_:1}),l(k).can(`sop.view`)?(s(),m(g,{key:`sops`,tab:`SOP 流程`},{default:h(()=>[a(`section`,me,[a(`div`,he,[i[30]||=a(`div`,null,[a(`b`,null,`话术流程`),a(`span`,{class:`toolbar-note`},`一个场景可以包含多套 SOP`)],-1),l(k).can(`sop.edit`)?(s(),m(u,{key:0,type:`primary`,onClick:i[1]||=e=>W.value=!0},{default:h(()=>[r(l(w)),i[29]||=o(`创建 SOP`,-1)]),_:1})):e(``,!0)]),V.value.length?(s(),p(`div`,ge,[(s(!0),p(c,null,ee(V.value,e=>(s(),p(`button`,{key:e.id,onClick:t=>l(_).push(`/sops/${e.id}`)},[a(`span`,P,[r(l(M))]),a(`span`,F,[a(`b`,null,t(e.name),1),a(`small`,null,t(e.description||`暂无说明`),1)]),r(d,{color:e.status===`published`?`green`:`default`},{default:h(()=>[o(t(je(e.status)),1)]),_:2},1032,[`color`]),a(`span`,I,t(new Date(e.updated_at).toLocaleDateString(`zh-CN`)),1)],8,N))),128))])):(s(),p(`div`,L,[r(l(M)),i[31]||=a(`p`,null,`还没有 SOP。创建一套流程,将经验变成连续动作。`,-1)]))])]),_:1})):e(``,!0)]),_:1})]),_:1},8,[`loading`]),l(k).can(`scenario.edit`)?(s(),m(X,{key:0,open:H.value,"onUpdate:open":i[8]||=e=>H.value=e,title:`编辑场景资料`,"ok-text":`保存修改`,"confirm-loading":R.value,onOk:we},{default:h(()=>[r(A,{layout:`vertical`,model:K},{default:h(()=>[r(S,{label:`场景名称`},{default:h(()=>[r(x,{value:K.name,"onUpdate:value":i[2]||=e=>K.name=e},null,8,[`value`])]),_:1}),a(`div`,_e,[r(S,{label:`所属行业`},{default:h(()=>[r(x,{value:K.industry,"onUpdate:value":i[3]||=e=>K.industry=e},null,8,[`value`])]),_:1}),r(S,{label:`适用角色`},{default:h(()=>[r(x,{value:K.role_name,"onUpdate:value":i[4]||=e=>K.role_name=e},null,8,[`value`])]),_:1})]),r(S,{label:`执行目标`},{default:h(()=>[r(C,{value:K.goal,"onUpdate:value":i[5]||=e=>K.goal=e,rows:3},null,8,[`value`])]),_:1}),r(S,{label:`触发条件`},{default:h(()=>[r(C,{value:K.trigger_text,"onUpdate:value":i[6]||=e=>K.trigger_text=e,rows:3},null,8,[`value`])]),_:1}),r(S,{label:`可见范围`},{default:h(()=>[r(O,{value:K.visibility,"onUpdate:value":i[7]||=e=>K.visibility=e},{default:h(()=>[r(D,{value:`tenant`},{default:h(()=>[...i[32]||=[o(`全企业`,-1)]]),_:1}),r(D,{value:`team`},{default:h(()=>[...i[33]||=[o(`团队`,-1)]]),_:1}),r(D,{value:`private`},{default:h(()=>[...i[34]||=[o(`仅自己`,-1)]]),_:1})]),_:1},8,[`value`])]),_:1})]),_:1},8,[`model`])]),_:1},8,[`open`,`confirm-loading`])):e(``,!0),l(k).can(`scenario.edit`)?(s(),m(X,{key:1,open:U.value,"onUpdate:open":i[18]||=e=>U.value=e,title:Se.value,"ok-text":G.value?`保存字段`:`添加字段`,"confirm-loading":R.value,onOk:Oe,onCancel:Z},{default:h(()=>[r(A,{layout:`vertical`,model:q},{default:h(()=>[a(`div`,ve,[r(S,{label:`字段名称`},{default:h(()=>[r(x,{value:q.field_name,"onUpdate:value":i[9]||=e=>q.field_name=e,placeholder:`宠物体重`},null,8,[`value`])]),_:1}),r(S,{label:`字段标识`},{default:h(()=>[r(x,{value:q.field_key,"onUpdate:value":i[10]||=e=>q.field_key=e,placeholder:`pet_weight`},null,8,[`value`])]),_:1})]),r(S,{label:`字段类型`},{default:h(()=>[r(Ne,{value:q.field_type,"onUpdate:value":i[11]||=e=>q.field_type=e,options:Y},null,8,[`value`])]),_:1}),[`select`,`multiselect`].includes(q.field_type)?(s(),m(S,{key:0,label:`选项(每行一个)`},{default:h(()=>[r(C,{value:q.options_text,"onUpdate:value":i[12]||=e=>q.options_text=e,rows:4},null,8,[`value`])]),_:1})):e(``,!0),q.field_type===`number`?(s(),p(`div`,ye,[r(S,{label:`最小值`},{default:h(()=>[r($,{value:q.min,"onUpdate:value":i[13]||=e=>q.min=e,style:{width:`100%`}},null,8,[`value`])]),_:1}),r(S,{label:`最大值`},{default:h(()=>[r($,{value:q.max,"onUpdate:value":i[14]||=e=>q.max=e,style:{width:`100%`}},null,8,[`value`])]),_:1})])):e(``,!0),[`text`,`textarea`].includes(q.field_type)?(s(),p(`div`,be,[r(S,{label:`最少字符`},{default:h(()=>[r($,{value:q.min_length,"onUpdate:value":i[15]||=e=>q.min_length=e,min:0,style:{width:`100%`}},null,8,[`value`])]),_:1}),r(S,{label:`最多字符`},{default:h(()=>[r($,{value:q.max_length,"onUpdate:value":i[16]||=e=>q.max_length=e,min:1,style:{width:`100%`}},null,8,[`value`])]),_:1})])):e(``,!0),r(Pe,{checked:q.required,"onUpdate:checked":i[17]||=e=>q.required=e},{default:h(()=>[...i[35]||=[o(`执行时必须填写`,-1)]]),_:1},8,[`checked`])]),_:1},8,[`model`])]),_:1},8,[`open`,`title`,`ok-text`,`confirm-loading`])):e(``,!0),l(k).can(`sop.edit`)?(s(),m(X,{key:2,open:W.value,"onUpdate:open":i[21]||=e=>W.value=e,title:`创建 SOP 草稿`,footer:null},{default:h(()=>[r(A,{layout:`vertical`,model:J,onFinish:Ae},{default:h(()=>[r(S,{label:`SOP 名称`,name:`name`,rules:[{required:!0,message:`请输入 SOP 名称`}]},{default:h(()=>[r(x,{value:J.name,"onUpdate:value":i[19]||=e=>J.name=e,placeholder:`问诊问药标准流程`},null,8,[`value`])]),_:1}),r(S,{label:`说明`},{default:h(()=>[r(C,{value:J.description,"onUpdate:value":i[20]||=e=>J.description=e,rows:4,placeholder:`这套流程适用于什么情况`},null,8,[`value`])]),_:1}),r(u,{type:`primary`,"html-type":`submit`,block:``,loading:R.value},{default:h(()=>[...i[36]||=[o(`创建并编排`,-1)]]),_:1},8,[`loading`])]),_:1},8,[`model`])]),_:1},8,[`open`])):e(``,!0)])}}}),[[`__scopeId`,`data-v-fb83e22e`]]);export{R as default}; |