@rytass/bpm-core-react 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/chunks/FormBuilderView-CAqjOYAP.cjs +3 -0
- package/dist/chunks/{FormBuilderView-D6baVqBY.cjs.map → FormBuilderView-CAqjOYAP.cjs.map} +1 -1
- package/dist/chunks/{FormBuilderView-QtREqV4j.js → FormBuilderView-TzSezeqC.js} +18 -16
- package/dist/chunks/{FormBuilderView-QtREqV4j.js.map → FormBuilderView-TzSezeqC.js.map} +1 -1
- package/dist/chunks/{FormRendererView-D8QHLvd0.js → FormRendererView-BurlEDUu.js} +44 -41
- package/dist/chunks/{FormRendererView-D8QHLvd0.js.map → FormRendererView-BurlEDUu.js.map} +1 -1
- package/dist/chunks/FormRendererView-Dde1s3I0.cjs +2 -0
- package/dist/chunks/{FormRendererView-Cw9LiidV.cjs.map → FormRendererView-Dde1s3I0.cjs.map} +1 -1
- package/dist/chunks/admin-pickers-Btvij1at.cjs.map +1 -1
- package/dist/chunks/admin-pickers-DLlG_1du.js.map +1 -1
- package/dist/chunks/approval-instance-list-page-BjX2kaoF.js.map +1 -1
- package/dist/chunks/approval-instance-list-page-CWiQvnfE.cjs +2 -0
- package/dist/chunks/{approval-instance-list-page-C408vxE2.cjs.map → approval-instance-list-page-CWiQvnfE.cjs.map} +1 -1
- package/dist/chunks/auth-provider-4BeCw7cI.cjs.map +1 -1
- package/dist/chunks/auth-provider-B5oPmvk2.js.map +1 -1
- package/dist/chunks/bpm-form-field-Bc6k4ZEO.cjs.map +1 -1
- package/dist/chunks/categories-DGlxuC6X.js.map +1 -1
- package/dist/chunks/categories-Yid05WAX.cjs +2 -0
- package/dist/chunks/{categories-DUfldZ_9.cjs.map → categories-Yid05WAX.cjs.map} +1 -1
- package/dist/chunks/{compose-D-OS-Ngs.js → compose-CUOe5Ia9.js} +4 -4
- package/dist/chunks/{compose-D-OS-Ngs.js.map → compose-CUOe5Ia9.js.map} +1 -1
- package/dist/chunks/compose-CyRkXdeu.cjs +2 -0
- package/dist/chunks/{compose-CODnd9-2.cjs.map → compose-CyRkXdeu.cjs.map} +1 -1
- package/dist/chunks/dashboard-page-CH87L5nx.cjs +2 -0
- package/dist/chunks/{dashboard-page-DwHQY6Ki.cjs.map → dashboard-page-CH87L5nx.cjs.map} +1 -1
- package/dist/chunks/dashboard-page-DJ9vOPga.js.map +1 -1
- package/dist/chunks/{delegations-DLEEFBlH.js → delegations-0MbJ7CWj.js} +3 -2
- package/dist/chunks/{delegations-DLEEFBlH.js.map → delegations-0MbJ7CWj.js.map} +1 -1
- package/dist/chunks/delegations-Bc9psOZ3.cjs +2 -0
- package/dist/chunks/{delegations-CGj-tZNO.cjs.map → delegations-Bc9psOZ3.cjs.map} +1 -1
- package/dist/chunks/{delegations-DqMpI_Nk.js → delegations-DyMGIDpp.js} +3 -2
- package/dist/chunks/{delegations-DqMpI_Nk.js.map → delegations-DyMGIDpp.js.map} +1 -1
- package/dist/chunks/delegations-vpLtus9g.cjs +2 -0
- package/dist/chunks/{delegations-kbMOSEif.cjs.map → delegations-vpLtus9g.cjs.map} +1 -1
- package/dist/chunks/{designer-DDSxwtjV.js → designer-Cb3WAC46.js} +39 -30
- package/dist/chunks/{designer-DDSxwtjV.js.map → designer-Cb3WAC46.js.map} +1 -1
- package/dist/chunks/designer-zLliyrHu.cjs +65 -0
- package/dist/chunks/{designer-Cdn10NNl.cjs.map → designer-zLliyrHu.cjs.map} +1 -1
- package/dist/chunks/detail-Bp2Nv0cs.cjs +2 -0
- package/dist/chunks/{detail-CtVu5NTi.cjs.map → detail-Bp2Nv0cs.cjs.map} +1 -1
- package/dist/chunks/{detail-DAPz2qyn.js → detail-Cmw-aQcu.js} +4 -4
- package/dist/chunks/{detail-DAPz2qyn.js.map → detail-Cmw-aQcu.js.map} +1 -1
- package/dist/chunks/format-date-time-CB-LxzqT.js.map +1 -1
- package/dist/chunks/format-date-time-D-cx5M8z.cjs +2 -0
- package/dist/chunks/{format-date-time-XxBzF0F5.cjs.map → format-date-time-D-cx5M8z.cjs.map} +1 -1
- package/dist/chunks/login-9bCXyjbX.cjs.map +1 -1
- package/dist/chunks/login-BKxpLibd.js.map +1 -1
- package/dist/chunks/notifications-Bc4mgSds.cjs +2 -0
- package/dist/chunks/{notifications--hwl-DR0.cjs.map → notifications-Bc4mgSds.cjs.map} +1 -1
- package/dist/chunks/notifications-DJ5wzCye.js.map +1 -1
- package/dist/chunks/{orgs-DytLvZ_X.js → orgs-B930facb.js} +11 -10
- package/dist/chunks/{orgs-DytLvZ_X.js.map → orgs-B930facb.js.map} +1 -1
- package/dist/chunks/orgs-BefGgeyc.cjs +2 -0
- package/dist/chunks/{orgs-Ni22buHs.cjs.map → orgs-BefGgeyc.cjs.map} +1 -1
- package/dist/chunks/providers-BsEn3ikK.cjs +2 -0
- package/dist/chunks/{providers-D_zTbkQH.cjs.map → providers-BsEn3ikK.cjs.map} +1 -1
- package/dist/chunks/{providers-DEqcuXw9.js → providers-DjLh4oLY.js} +3 -3
- package/dist/chunks/{providers-DEqcuXw9.js.map → providers-DjLh4oLY.js.map} +1 -1
- package/dist/chunks/{chunk-CMqjfN_6.cjs → rolldown-runtime-BocRIvOZ.cjs} +1 -1
- package/dist/chunks/router-adapter--gYs13E8.cjs.map +1 -1
- package/dist/chunks/routes-config-fDVHmvXi.cjs.map +1 -1
- package/dist/chunks/users-C9LA-Rd7.cjs +2 -0
- package/dist/chunks/{users-0HqlM_VQ.cjs.map → users-C9LA-Rd7.cjs.map} +1 -1
- package/dist/chunks/users-FWrb3ehW.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/next/index.cjs +1 -1
- package/dist/next/index.cjs.map +1 -1
- package/dist/next/index.js +9 -9
- package/dist/next/index.js.map +1 -1
- package/dist/next/workflow-chat-route.cjs +1 -1
- package/dist/next/workflow-chat-route.cjs.map +1 -1
- package/dist/next/workflow-chat-route.js +2 -1
- package/dist/next/workflow-chat-route.js.map +1 -1
- package/dist/pages/admin/delegations/index.cjs +1 -1
- package/dist/pages/admin/delegations/index.cjs.map +1 -1
- package/dist/pages/admin/delegations/index.js +1 -1
- package/dist/pages/admin/orgs/index.cjs +1 -1
- package/dist/pages/admin/orgs/index.cjs.map +1 -1
- package/dist/pages/admin/orgs/index.js +1 -1
- package/dist/pages/admin/users/index.cjs +1 -1
- package/dist/pages/admin/users/index.cjs.map +1 -1
- package/dist/pages/cc/index.cjs.map +1 -1
- package/dist/pages/dashboard/index.cjs.map +1 -1
- package/dist/pages/delegations/index.cjs +1 -1
- package/dist/pages/delegations/index.cjs.map +1 -1
- package/dist/pages/delegations/index.js +1 -1
- package/dist/pages/inbox/index.cjs.map +1 -1
- package/dist/pages/instances/detail/index.cjs +1 -1
- package/dist/pages/instances/detail/index.cjs.map +1 -1
- package/dist/pages/instances/detail/index.js +1 -1
- package/dist/pages/instances/new/index.cjs.map +1 -1
- package/dist/pages/login/index.cjs.map +1 -1
- package/dist/pages/root/index.cjs.map +1 -1
- package/dist/pages/search/index.cjs.map +1 -1
- package/dist/pages/sent/index.cjs.map +1 -1
- package/dist/pages/settings/notifications/index.cjs +1 -1
- package/dist/pages/settings/notifications/index.cjs.map +1 -1
- package/dist/pages/templates/categories/index.cjs +1 -1
- package/dist/pages/templates/categories/index.cjs.map +1 -1
- package/dist/pages/templates/compose/index.cjs +1 -1
- package/dist/pages/templates/compose/index.cjs.map +1 -1
- package/dist/pages/templates/compose/index.js +1 -1
- package/dist/pages/templates/designer/index.cjs +1 -1
- package/dist/pages/templates/designer/index.cjs.map +1 -1
- package/dist/pages/templates/designer/index.js +1 -1
- package/dist/pages/templates/index.cjs.map +1 -1
- package/dist/pages/templates/versions/index.cjs.map +1 -1
- package/dist/views/admin/delegations/index.cjs +1 -1
- package/dist/views/admin/delegations/index.js +1 -1
- package/dist/views/admin/index.cjs +1 -1
- package/dist/views/admin/index.js +2 -2
- package/dist/views/admin/orgs/index.cjs +1 -1
- package/dist/views/admin/orgs/index.js +1 -1
- package/dist/views/admin/users/index.cjs +1 -1
- package/dist/views/cc/index.cjs +1 -1
- package/dist/views/cc/index.cjs.map +1 -1
- package/dist/views/dashboard/index.cjs +1 -1
- package/dist/views/dashboard/index.cjs.map +1 -1
- package/dist/views/delegations/index.cjs +1 -1
- package/dist/views/delegations/index.js +1 -1
- package/dist/views/forms/builder/index.cjs +1 -1
- package/dist/views/forms/builder/index.js +1 -1
- package/dist/views/forms/renderer/index.cjs +1 -1
- package/dist/views/forms/renderer/index.js +1 -1
- package/dist/views/inbox/index.cjs +1 -1
- package/dist/views/inbox/index.cjs.map +1 -1
- package/dist/views/inbox/index.js.map +1 -1
- package/dist/views/instances/detail/index.cjs +1 -1
- package/dist/views/instances/detail/index.js +1 -1
- package/dist/views/instances/new/index.cjs +1 -1
- package/dist/views/instances/new/index.cjs.map +1 -1
- package/dist/views/instances/new/index.js +1 -1
- package/dist/views/instances/new/index.js.map +1 -1
- package/dist/views/search/index.cjs +1 -1
- package/dist/views/search/index.cjs.map +1 -1
- package/dist/views/sent/index.cjs +1 -1
- package/dist/views/sent/index.cjs.map +1 -1
- package/dist/views/settings/index.cjs +1 -1
- package/dist/views/settings/notifications/index.cjs +1 -1
- package/dist/views/templates/categories/index.cjs +1 -1
- package/dist/views/templates/compose/index.cjs +1 -1
- package/dist/views/templates/compose/index.js +1 -1
- package/dist/views/templates/designer/index.cjs +1 -1
- package/dist/views/templates/designer/index.js +1 -1
- package/dist/views/templates/index.cjs +1 -1
- package/dist/views/templates/index.cjs.map +1 -1
- package/dist/views/templates/index.js.map +1 -1
- package/dist/views/templates/versions/index.cjs +1 -1
- package/dist/views/templates/versions/index.cjs.map +1 -1
- package/dist/views/templates/versions/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/chunks/FormBuilderView-D6baVqBY.cjs +0 -3
- package/dist/chunks/FormRendererView-Cw9LiidV.cjs +0 -2
- package/dist/chunks/approval-instance-list-page-C408vxE2.cjs +0 -2
- package/dist/chunks/categories-DUfldZ_9.cjs +0 -2
- package/dist/chunks/compose-CODnd9-2.cjs +0 -2
- package/dist/chunks/dashboard-page-DwHQY6Ki.cjs +0 -2
- package/dist/chunks/delegations-CGj-tZNO.cjs +0 -2
- package/dist/chunks/delegations-kbMOSEif.cjs +0 -2
- package/dist/chunks/designer-Cdn10NNl.cjs +0 -65
- package/dist/chunks/detail-CtVu5NTi.cjs +0 -2
- package/dist/chunks/format-date-time-XxBzF0F5.cjs +0 -2
- package/dist/chunks/notifications--hwl-DR0.cjs +0 -2
- package/dist/chunks/orgs-Ni22buHs.cjs +0 -2
- package/dist/chunks/providers-D_zTbkQH.cjs +0 -2
- package/dist/chunks/users-0HqlM_VQ.cjs +0 -2
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";require('../style.css');require('../detail.css');const e=require("./chunk-CMqjfN_6.cjs"),t=require("./auth-provider-4BeCw7cI.cjs"),n=require("./format-date-time-XxBzF0F5.cjs"),r=require("./bpm-form-field-Bc6k4ZEO.cjs"),i=require("./FormRendererView-Cw9LiidV.cjs");;/* empty css */let a=require("react"),o=require("@mezzanine-ui/react"),s=require("react/jsx-runtime"),c=require("@rytass/bpm-core-client/workflow"),l=require("@mezzanine-ui/react/ContentHeader");l=e.t(l,1);let u=require("@mezzanine-ui/icons"),d=require("@rytass/bpm-core-client/form"),f=require("@xyflow/react"),p=require("dagre");p=e.t(p,1);let m=require("react-pdf"),h=require("@mezzanine-ui/core/stepper");var g={root:`bpm_root_ehm7w`,toolbar:`bpm_toolbar_R-tis`,pageControls:`bpm_pageControls_jM-rC`,zoomControls:`bpm_zoomControls_7RAbJ`,counter:`bpm_counter_ILUsD`,viewport:`bpm_viewport_DQXms`,page:`bpm_page_Cv5Rg`,state:`bpm_state_bpgp3`},ee=760,te=920,_=320,ne=32,re=.75,v=1.75,ie=.25;function y({filename:e,fileUrl:t,onDownload:n}){let r=(0,a.useRef)(null),[i,c]=(0,a.useState)(null),[l,d]=(0,a.useState)(1),[f,p]=(0,a.useState)(1),[h,y]=(0,a.useState)(ee);(0,a.useEffect)(()=>{let e=r.current;if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(e=>{let t=e[0]?.contentRect.width;t&&y(t)});return t.observe(e),()=>t.disconnect()},[]),(0,a.useEffect)(()=>{c(null),d(1),p(1)},[t]);let ae=(0,a.useMemo)(()=>{let e=Math.max(_,h-ne);return Math.round(Math.min(te,e)*f)},[f,h]),oe=(0,a.useCallback)(e=>{c(e.numPages),d(1)},[]),x=l>1,se=i!==null&&l<i,S=f>re,C=f<v,w=i===null?`第 ${l} 頁`:`第 ${l} / ${i} 頁`,T=`${Math.round(f*100)}%`;return(0,s.jsxs)(`section`,{"aria-label":`${e} PDF 預覽`,className:g.root,children:[(0,s.jsxs)(`div`,{className:g.toolbar,children:[(0,s.jsxs)(`div`,{className:g.pageControls,"aria-label":`頁面切換`,children:[(0,s.jsx)(o.Button,{"aria-label":`上一頁`,disabled:!x,icon:u.ChevronLeftIcon,onClick:()=>{d(e=>Math.max(1,e-1))},size:`minor`,variant:`base-secondary`}),(0,s.jsx)(o.Typography,{className:g.counter,component:`span`,variant:`body`,children:w}),(0,s.jsx)(o.Button,{"aria-label":`下一頁`,disabled:!se,icon:u.ChevronRightIcon,onClick:()=>{d(e=>i===null?e:Math.min(i,e+1))},size:`minor`,variant:`base-secondary`})]}),(0,s.jsxs)(`div`,{className:g.zoomControls,"aria-label":`縮放`,children:[(0,s.jsx)(o.Button,{"aria-label":`縮小`,disabled:!S,icon:u.ZoomOutIcon,onClick:()=>{p(e=>Math.max(re,e-ie))},size:`minor`,variant:`base-secondary`}),(0,s.jsx)(o.Typography,{className:g.counter,component:`span`,variant:`body`,children:T}),(0,s.jsx)(o.Button,{"aria-label":`放大`,disabled:!C,icon:u.ZoomInIcon,onClick:()=>{p(e=>Math.min(v,e+ie))},size:`minor`,variant:`base-secondary`})]}),n?(0,s.jsx)(o.Button,{icon:u.DownloadIcon,iconType:`leading`,onClick:n,size:`minor`,variant:`base-primary`,children:`下載`}):null]}),(0,s.jsx)(`div`,{className:g.viewport,ref:r,children:(0,s.jsx)(m.Document,{error:(0,s.jsx)(b,{message:`PDF 無法載入。`}),file:t,loading:(0,s.jsx)(b,{message:`正在載入 PDF...`}),noData:(0,s.jsx)(b,{message:`沒有可預覽的 PDF。`}),onLoadSuccess:oe,children:(0,s.jsx)(m.Page,{className:g.page,loading:(0,s.jsx)(b,{message:`正在載入頁面...`}),pageNumber:l,renderAnnotationLayer:!0,renderTextLayer:!0,width:ae})})})]})}function b({message:e}){return(0,s.jsx)(`div`,{className:g.state,children:(0,s.jsx)(o.Typography,{color:`text-neutral`,variant:`body`,children:e})})}function ae(e){let t=x(e,`from`),n=x(e,`to`),r=x(e,`reason`);return!t||!n||!r?null:{from:t,reason:r,ruleId:x(e,`ruleId`),to:n}}function oe(e){try{let t=JSON.parse(e);return Array.isArray(t)?t.map(e=>w(e)?ae(e):null).filter(e=>e!==null):[]}catch{return[]}}function x(e,t){let n=e[t];return typeof n==`string`?n:null}function se(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function S(e,t){let n=e[t];return typeof n==`number`?n:null}function C(e){return typeof e==`string`&&e.trim().length>0}function w(e){return typeof e==`object`&&!!e}function T(e){return e.status===`PENDING`||e.status===`IN_PROGRESS`}function E(e){return(0,d.readFormDataSourceErrorMessage)(e)||(e instanceof Error?e.message:`發生未知錯誤`)}function ce(e){return!Number.isFinite(e)||e<=0?`-`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function D(e){return e.length>16?`${e.slice(0,12)}...`:e}function O(e){return e===`APPROVED`?`已同意`:e===`CANCELLED`?`已取消`:e===`DRAFT`?`草稿`:e===`EXPIRED`?`已逾期`:e===`REJECTED`?`已拒絕`:e===`RETURNED`?`已退回`:e===`RUNNING`?`進行中`:e}function le(e){return e===`PENDING`?`待處理`:e===`IN_PROGRESS`?`處理中`:e===`COMPLETED`?`已完成`:e===`CANCELLED`?`已取消`:e===`TRANSFERRED`?`已轉派`:e}function ue(e){return e===`APPROVED`?`同意`:e===`REJECTED`?`拒絕`:e===`RETURNED`?`退回`:e===`TRANSFERRED`?`轉派`:e}function k(e){return e===`startEvent`?`開始`:e===`endEvent`?`完成`:e===`userTask`?`簽核節點`:e===`serviceTask`?`知會節點`:e===`exclusiveGateway`?`條件分流`:`平行處理`}function A(e,t){return t?.nodes.find(t=>t.id===e)?.data.label??e}function j(e,t){if(!e)return`-`;let n=t.get(e);return n?`${n.name}(${n.email})`:e}function de(e,t=new Map){let n=oe(e.delegationChainJson);if(!e.assigneeMemberId)return e.candidateMemberIds.length?`候選 ${e.candidateMemberIds.map(e=>j(e,t)).join(`、`)}`:`未指定`;let r=j(e.assigneeMemberId,t),i=j(e.originalAssigneeMemberId,t);return n.length===0||e.originalAssigneeMemberId===e.assigneeMemberId?r:`${r}(原:${i})`}function fe(e,t){return t?e.assigneeMemberId===t||e.candidateMemberIds.includes(t):!1}function pe(e,t){if(t.type!==`userTask`||!t.data.returnBehavior.allowReturn)return[];if(t.data.returnBehavior.allowedTargets===`ANY`)return e.nodes.filter(e=>e.id!==t.id).map(e=>({id:e.id,name:`${e.data.label}(${k(e.type)})`}));let n=t.data.returnBehavior.allowedTargets===`INITIATOR`?e.nodes.find(e=>e.type===`startEvent`)?.id:e.edges.find(e=>e.target===t.id)?.source,r=e.nodes.find(e=>e.id===n);return r?[{id:r.id,name:`${r.data.label}(${k(r.type)})`}]:[]}function me(e){return{email:e.email,id:e.memberId,name:`${e.name} · ${e.email}`}}function M(e){if(!w(e))return null;let t=e.email,n=e.id,r=e.name;return typeof n==`string`&&typeof r==`string`?{email:typeof t==`string`?t:null,id:n,name:r}:null}function he(e,t){let n=e.trim().toLocaleLowerCase();if(!n)return null;let r=t.filter(e=>[e.id,e.name,e.email??``].some(e=>e.toLocaleLowerCase().includes(n)));return r.length===1?r[0]??null:null}function N(e){return C(e)?{text:e,type:`text`}:null}function ge(e){return C(e)?{text:e,type:`dangerText`}:null}function _e(e,t,n,r){let i=t?n.get(t):null;return{email:i?.email??null,label:i?.name??r,memberId:t,prefix:e,type:`member`}}function P(e){return!!e}function F(e){let t=e.findIndex(e=>e.id.startsWith(`pending-task-`)||e.id.startsWith(`future-node-`));return t===-1?e.length:t}function ve(e){return e.eventType===`INSTANCE_STARTED`||e.eventType===`TASK_DECIDED`||e.eventType===`SLA_TRIGGERED`}function I(e){return e===`APPROVED`?`已同意`:e===`REJECTED`?`已拒絕`:e===`RETURNED`?`已退回`:e===`TRANSFERRED`?`已轉派`:`簽核已決議`}function L(e,t){return e===`INSTANCE_STARTED`?`案件已發起`:e===`TOKEN_CREATED`?`流程路徑已建立`:e===`ENGINE_PROCESS_REQUESTED`?`流程引擎已處理`:e===`TOKEN_ADVANCED`?`流程已前進`:e===`TASK_CREATED`?`待簽任務已建立`:e===`TASK_DECIDED`?I(x(t,`action`)):e===`SLA_TRIGGERED`?`時限提醒已觸發`:e}function ye(e){try{let t=JSON.parse(e.payloadJson);return w(t)?t:{}}catch{return{}}}function be(e,t){return e.eventType===`SLA_TRIGGERED`||x(t,`action`)===`REJECTED`||x(t,`instanceState`)===`REJECTED`}function xe(e){return n.t(e)}function R(e,t,n,r){if(e.eventType===`TASK_CREATED`){let e=x(t,`assigneeMemberId`),n=x(t,`originalAssigneeMemberId`);if(!e){let e=se(t,`candidateMemberIds`);return e.length?`候選簽核人:${e.map(e=>j(e,r)).join(`、`)}`:null}let i=j(e,r),a=j(n,r);return n&&n!==e?`待簽人:${i}(原簽核人:${a})`:`待簽人:${i}`}if(e.eventType===`TASK_DECIDED`){let e=x(t,`action`),n=x(t,`comment`),i=e?`決議:${ue(e)}`:null,a=x(t,`transferToMemberId`);return e===`REJECTED`&&n?[i,`拒絕原因:${n}`].filter(C).join(` · `):e===`APPROVED`&&n?[i,`同意說明:${n}`].filter(C).join(` · `):e===`TRANSFERRED`?[i,`轉派給:${j(a,r)}`].filter(C).join(` · `):i}if(e.eventType===`TOKEN_ADVANCED`){let e=x(t,`action`);if(e)return`流程結果:${ue(e)}`;let r=S(t,`arrivedCount`),i=S(t,`requiredCount`);if(r!==null&&i!==null)return`等待匯合:${r}/${i}`;let a=x(t,`fromNodeId`),o=x(t,`toNodeId`);if(a&&o)return`由 ${A(a,n)} 前進至 ${A(o,n)}`}if(e.eventType===`ENGINE_PROCESS_REQUESTED`){let e=x(t,`state`);return e?`案件狀態:${O(e)}`:null}return null}function Se(e,t,n,r,i,a,o){if(e.eventType!==`TASK_DECIDED`)return[N(R(e,t,n,o))].filter(P);let s=e.taskId?r.get(e.taskId):null,c=x(t,`action`)??s?.action??null,l=x(t,`comment`)??s?.comment??null,u=x(t,`transferToMemberId`)??s?.transferToMemberId??null,d=x(t,`signatureId`)??s?.signatureId??null,f=d?i.get(d):null;return[N(c?`決議:${ue(c)}`:null),c===`REJECTED`?ge(`拒絕原因:${l??`-`}`):null,c===`APPROVED`&&l?N(`同意說明:${l}`):null,c===`RETURNED`?N(`退回說明:${l??`-`}`):null,c===`TRANSFERRED`?N(`轉派給:${j(u,o)}`):null,c===`TRANSFERRED`?N(`轉派說明:${l??`-`}`):null,f?N(a?.valid?`簽章:已驗證(${D(f.signedPayloadHash)})`:`簽章:待檢查(${D(f.signedPayloadHash)})`):null].filter(P)}function z(e,t,n,r,i){if(e.type===`startEvent`||i.has(e.id))return!1;if(r===`REJECTED`)return!0;let a=De(e,t,n,r);return a.tone===`neutral`||a.tone===`waiting`}function B(e,t,n,r,i){if(r!==`RUNNING`&&r!==`REJECTED`)return[];let a=e.nodes.filter(e=>z(e,t,n,r,i)),o=Ce(e,a,t,n,i),s=new Map(e.nodes.map((e,t)=>[e.id,t]));return a.filter(e=>o.has(e.id)).sort((e,t)=>{let n=o.get(e.id)??0,r=o.get(t.id)??0;return n===r?e.position.x===t.position.x?e.position.y===t.position.y?(s.get(e.id)??0)-(s.get(t.id)??0):e.position.y-t.position.y:e.position.x-t.position.x:n-r})}function Ce(e,t,n,r,i){let a=new Set(t.map(e=>e.id)),o=e.edges.reduce((e,t)=>{let n=[...e.get(t.source)??[],t.target];return new Map(e).set(t.source,n)},new Map);return we(e,n,r,i).reduce((e,t)=>Ee(e,Te(t,o,a)),new Map)}function we(e,t,n,r){let i=n.filter(e=>e.status===`ACTIVE`||e.status===`WAITING`).map(e=>e.currentNodeId),a=t.filter(T).map(e=>e.nodeId),o=e.nodes.filter(e=>r.has(e.id)).map(e=>e.id),s=[...new Set([...i,...a,...o])],c=e.nodes.filter(e=>e.type===`startEvent`).map(e=>e.id);return s.length>0?s:c}function Te(e,t,n){return V([{distance:0,nodeId:e}],t,n)}function V(e,t,n,r=new Set,i=new Map){let[a,...o]=e;if(!a)return i;if(r.has(a.nodeId))return V(o,t,n,r,i);let s=new Set(r).add(a.nodeId),c=n.has(a.nodeId)?new Map(i).set(a.nodeId,Math.min(i.get(a.nodeId)??a.distance,a.distance)):i;return V([...o,...(t.get(a.nodeId)??[]).map(e=>({distance:a.distance+1,nodeId:e}))],t,n,s,c)}function Ee(e,t){return[...t.entries()].reduce((e,[t,n])=>new Map(e).set(t,Math.min(e.get(t)??n,n)),e)}function H(e){return e.type===`userTask`?`未來簽核:${e.data.label}`:e.type===`serviceTask`?`未來知會:${e.data.label}`:e.type===`exclusiveGateway`?`未來分流:${e.data.label}`:e.type===`parallelGateway`?`未來匯合:${e.data.label}`:e.type===`endEvent`?`流程完成:${e.data.label}`:`未來節點:${e.data.label}`}function U(e,t,n,r,i,a,o,s,c){let l=e.filter(ve).map(e=>{let t=ye(e),n=e.nodeId?A(e.nodeId,r):null;return{descriptionParts:[N(n?`節點:${n}`:`節點:全流程`),_e(`操作者`,e.actorMemberId,a,`系統`),N(`時間:${xe(e.createdAt)}`),...Se(e,t,r,o,s,c,a)].filter(P),error:be(e,t),id:e.id,title:L(e.eventType,t)}}),u=t.filter(T).map(e=>({descriptionParts:[N(`節點:${A(e.nodeId,r)}`),_e(`處理者`,e.assigneeMemberId,a,`未指定`),N(`建立時間:${xe(e.createdAt)}`)].filter(P),error:!1,id:`pending-task-${e.id}`,title:e.status===`IN_PROGRESS`?`簽核處理中`:`等待簽核處理`})),d=new Set([...e.filter(ve).map(e=>e.nodeId),...t.map(e=>e.nodeId)].filter(C)),f=r?B(r,t,n,i,d).map(e=>({descriptionParts:[N(`${k(e.type)} · 尚未抵達`)].filter(P),error:!1,forcePending:!0,id:`future-node-${e.id}`,title:H(e)})):[];return[...l,...u,...f]}function De(e,t,n,r){let i=t.filter(t=>t.nodeId===e.id),a=i.find(e=>e.status===`PENDING`||e.status===`IN_PROGRESS`),o=i.find(e=>e.status===`CANCELLED`),s=i.find(e=>e.status===`COMPLETED`),c=n.filter(t=>t.currentNodeId===e.id),l=c.find(e=>e.status===`ACTIVE`),u=c.find(e=>e.status===`WAITING`);return a?{secondaryLabel:`處理者 ${de(a)}`,statusLabel:`待處理`,tone:`current`}:o?{secondaryLabel:`已取消 ${de(o)}`,statusLabel:`已取消`,tone:`cancelled`}:s?{secondaryLabel:`已完成 ${de(s)}`,statusLabel:`已完成`,tone:`completed`}:l?{secondaryLabel:`token ${l.id}`,statusLabel:`執行中`,tone:`current`}:u?{secondaryLabel:`token ${u.id}`,statusLabel:`等待前置`,tone:`waiting`}:e.type===`startEvent`?{secondaryLabel:`流程已發起`,statusLabel:`已發起`,tone:`completed`}:e.type===`endEvent`&&r!==`RUNNING`?{secondaryLabel:r,statusLabel:r===`REJECTED`?`已拒絕`:`已完成`,tone:r===`REJECTED`?`cancelled`:`completed`}:{secondaryLabel:k(e.type),statusLabel:`未抵達`,tone:`neutral`}}async function Oe({activityLogs:e,adhocDirectives:t=[],tasks:n}){let r=[...new Set([...e.map(e=>e.actorMemberId),...n.map(e=>e.assigneeMemberId),...n.map(e=>e.originalAssigneeMemberId),...n.flatMap(e=>e.candidateMemberIds),...n.flatMap(e=>oe(e.delegationChainJson).flatMap(e=>[e.from,e.to])),...t.flatMap(e=>[e.createdByMemberId,...ke(e.targetValueJson)])].filter(C))];try{return await(0,c.resolveMemberProfiles)(r)}catch{return[]}}function ke(e){try{return(JSON.parse(e).memberIds??[]).filter(e=>typeof e==`string`)}catch{return[]}}async function Ae(e){return(await Promise.all(e.map(e=>(0,c.listTaskDecisions)(e.id)))).flat()}function je(e){return e.reduce((e,t)=>{let n=e.get(t.taskId),r=!n||new Date(t.decidedAt).getTime()>new Date(n.decidedAt).getTime()?t:n;return new Map(e).set(t.taskId,r)},new Map)}var W={display:`grid`,gap:16},G={display:`flex`,flexWrap:`wrap`,gap:8};function Me({canResubmitInstance:e,deciding:t,error:n,instance:r,loading:a,onDataSourceStateChange:c,onResubmitFormChange:l,onResubmitInstance:d,onUploadAttachment:f,resubmitFormData:p,resubmitFormErrors:m}){return(0,s.jsxs)(`div`,{style:W,children:[n?(0,s.jsx)(o.Typography,{color:`text-error`,variant:`body`,children:n}):null,a?(0,s.jsx)(o.Typography,{color:`text-neutral`,variant:`body`,children:`載入中...`}):null,r?.formDefinitionSnapshot.schema&&r.formDefinitionSnapshot.uiSchema?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.t,{dataSourceContext:e?{instanceId:r.id,kind:`runtime`}:void 0,dataSourceInitialValues:r.formData,errors:m,onChange:e=>{l(e)},onDataSourceStateChange:c,onUploadAttachment:e?f:void 0,optionSnapshots:r.formDataOptionSnapshot,readonly:!e,schema:r.formDefinitionSnapshot.schema,uiSchema:r.formDefinitionSnapshot.uiSchema,value:e?p:r.formData}),e?(0,s.jsx)(`div`,{style:G,children:(0,s.jsx)(o.Button,{disabled:t,icon:u.RefreshCcwIcon,iconType:`leading`,onClick:d,variant:`base-primary`,children:`重新送出`})}):null]}):(0,s.jsx)(o.Typography,{color:`text-neutral`,variant:`body`,children:`此案件沒有可顯示的表單快照。`})]})}var Ne={display:`grid`,gap:16};function K({attachments:e,onDownload:t,onPreview:r}){let i=(0,a.useMemo)(()=>e.map(e=>({attachment:e,createdAt:e.createdAt,filename:e.filename,id:e.id,key:e.id,mimeType:e.mimeType,sizeLabel:ce(Number(e.sizeBytes))})),[e]),c=(0,a.useMemo)(()=>[{dataIndex:`filename`,key:`filename`,title:`檔名`,width:260},{dataIndex:`mimeType`,key:`mimeType`,title:`類型`,width:180},{dataIndex:`sizeLabel`,key:`sizeLabel`,title:`大小`,width:120},{key:`createdAt`,render:e=>(0,s.jsx)(o.Typography,{component:`span`,variant:`body`,children:n.t(e.createdAt)}),title:`上傳時間`,width:220}],[]),l=(0,a.useMemo)(()=>({render:e=>[...e.mimeType===`application/pdf`?[{icon:u.FileSearchIcon,iconType:`leading`,name:`預覽`,onClick:()=>{r(e.attachment)}}]:[],{icon:u.DownloadIcon,iconType:`leading`,name:`下載`,onClick:()=>{t(e.attachment)}}],variant:`base-secondary`,width:160}),[t,r]);return(0,s.jsxs)(`div`,{style:Ne,children:[(0,s.jsx)(o.Typography,{component:`h2`,variant:`h3`,children:`附件`}),i.length>0?(0,s.jsx)(o.Table,{actions:l,columns:c,dataSource:i,fullWidth:!0}):(0,s.jsx)(o.Typography,{color:`text-neutral`,variant:`body`,children:`此案件沒有附件。`})]})}var Pe={display:`grid`,gap:12,width:`100%`},q={minWidth:`100%`,width:`100%`},Fe={display:`grid`,gap:12,width:`100%`},Ie={marginTop:12},J={marginTop:24};function Le(e){e&&(e.style.width=`100%`)}var Re={COMPLETION_NOTIFY:`結案通知`,COUNTERSIGN:`臨時會簽`,PRE_APPROVAL:`臨時加簽`,STAGE_NOTIFY:`階段完成通知`},ze={COMPLETION_NOTIFY:`本張單到達結案狀態(核准 / 拒絕 / 取消)後,通知指定對象。`,COUNTERSIGN:`指定對象會併入下一層簽核,下一層需所有人都完成才會繼續。`,PRE_APPROVAL:`指定對象需先完成加簽,本階段才會往下一層繼續。`,STAGE_NOTIFY:`本階段完成後(不論通過與否)通知指定對象。`},Y=[{id:`REJECT_INSTANCE`,name:`加簽拒絕時整單駁回`},{id:`RETURN_TO_ORIGIN`,name:`加簽拒絕時退回給我重新處理`}],Be=[{id:`MEMBER`,name:`指定成員`},{id:`WEBHOOK`,name:`Webhook`}],X=(0,a.forwardRef)(function({adhocDirectives:e,currentMemberId:t,instance:i,memberProfilesById:l,onChanged:u,tasks:d},f){let[p,m]=(0,a.useState)(!1),[h,g]=(0,a.useState)(null),[ee,te]=(0,a.useState)(``),[_,ne]=(0,a.useState)(!1),[re,v]=(0,a.useState)(``),[ie,y]=(0,a.useState)(null),[b,ae]=(0,a.useState)(!1),[oe,x]=(0,a.useState)(``),[se,S]=(0,a.useState)(!1),[C,w]=(0,a.useState)(null),[T,ce]=(0,a.useState)(``),[D,O]=(0,a.useState)(null),[ue,k]=(0,a.useState)(!1),[N,ge]=(0,a.useState)([]),[_e,P]=(0,a.useState)(!1),[F,ve]=(0,a.useState)(``),[I,L]=(0,a.useState)(null),[ye,be]=(0,a.useState)(!1),[xe,R]=(0,a.useState)([]),[Se,z]=(0,a.useState)(!1),[B,Ce]=(0,a.useState)(`COUNTERSIGN`),[we,Te]=(0,a.useState)(`REJECT_INSTANCE`),[V,Ee]=(0,a.useState)(!1),[H,U]=(0,a.useState)(`MEMBER`),[De,Oe]=(0,a.useState)(``),ke=re.trim(),Ae=oe.trim(),je=T.trim(),W=(0,a.useMemo)(()=>d.find(e=>fe(e,t)&&(e.status===`PENDING`||e.status===`IN_PROGRESS`))??null,[t,d]),G=(0,a.useMemo)(()=>W&&i?i.workflowSnapshot.nodes.find(e=>e.id===W.nodeId)??null:null,[W,i]),Me=(0,a.useMemo)(()=>G&&i?pe(i.workflowSnapshot,G):[],[G,i]),Ne=G?.type===`userTask`&&G.data.returnBehavior.allowReturn,K=G?.type===`userTask`&&G.data.allowReject!==!1,X=G?.type===`userTask`&&G.data.allowTransfer!==!1,He=G?.type===`userTask`&&G.data.returnBehavior.requireComment===!0,Ue=G?.type===`userTask`&&G.data.allowAddSigner,We=(0,a.useMemo)(()=>e.filter(e=>e.status===`PENDING`),[e]),Ge=Me.find(e=>e.id===C)??Me[0]??null,Ke=(0,a.useMemo)(()=>d.map(e=>({...e,assigneeLabel:de(e,l),key:e.id,nodeLabel:`${A(e.nodeId,i?.workflowSnapshot??null)}${e.isAdhoc?e.adhocType===`COUNTERSIGN`?`(臨時會簽)`:`(臨時加簽)`:``}`,statusLabel:le(e.status)})),[i,l,d]),Z=(0,a.useMemo)(()=>[{dataIndex:`nodeLabel`,key:`nodeLabel`,title:`節點`,width:180},{key:`assigneeMemberId`,title:`處理者`,render:e=>(0,s.jsx)(o.Typography,{component:`span`,variant:`body`,children:e.assigneeLabel}),width:180},{dataIndex:`statusLabel`,key:`statusLabel`,title:`狀態`,width:120},{key:`createdAt`,render:e=>(0,s.jsx)(o.Typography,{component:`span`,variant:`body`,children:n.t(e.createdAt)}),title:`建立時間`,width:220}],[]),qe=(0,a.useMemo)(()=>We.map(e=>({...e,createdByLabel:j(e.createdByMemberId,l),key:e.id,targetLabel:Ve(e,l),typeLabel:Re[e.type]})),[l,We]),Je=(0,a.useMemo)(()=>[{dataIndex:`typeLabel`,key:`typeLabel`,title:`類型`,width:180},{key:`targetLabel`,render:e=>(0,s.jsx)(o.Typography,{component:`span`,variant:`body`,children:e.targetLabel}),title:`對象`,width:220},{key:`createdByLabel`,render:e=>(0,s.jsx)(o.Typography,{component:`span`,variant:`body`,children:e.createdByLabel}),title:`設定者`,width:180},{key:`createdAt`,render:e=>(0,s.jsx)(o.Typography,{component:`span`,variant:`body`,children:n.t(e.createdAt)}),title:`建立時間`,width:220},{key:`actions`,render:e=>e.createdByMemberId===t?(0,s.jsx)(o.Button,{disabled:V,onClick:()=>void pt(e.id),size:`minor`,variant:`destructive-secondary`,children:`撤回`}):(0,s.jsx)(s.Fragment,{}),title:`操作`,width:100}],[V,t]);async function Ye({action:e,comment:n,returnToNodeId:r=null,transferToMemberId:i=null}){if(!t||!W||e===`REJECTED`&&!K||e===`TRANSFERRED`&&!X)return!1;m(!0),g(null);try{await(0,c.decideTask)({action:e,comment:n,decidedByMemberId:t,returnToNodeId:r,taskId:W.id,transferToMemberId:i}),ae(!1),S(!1),P(!1),v(``),x(``),ce(``),O(null),w(null),y(null)}catch(e){return g(E(e)),m(!1),!1}try{await u()}catch(e){g(E(e))}finally{m(!1)}return!0}function Xe(){!t||!W||(g(null),te(``),ne(!0))}function Ze(){p||(ne(!1),te(``))}async function Qe(){p||await Ye({action:`APPROVED`,comment:ee.trim()||null})&&(ne(!1),te(``))}function $e(){K&&(v(``),y(null),ae(!0))}function Q(){p||(ae(!1),v(``),y(null))}function et(){x(``),w(Me[0]?.id??null),S(!0)}function tt(){p||(S(!1),x(``),w(null))}function nt(){X&&(ce(``),O(null),P(!0),it(``))}function rt(){p||(P(!1),ce(``),O(null))}async function it(e){k(!0);try{ge((await(0,c.searchMembers)(e)).filter(e=>e.memberId!==t).map(me))}catch(e){g(E(e))}finally{k(!1)}}async function at(){if(K){if(!ke){y(`請輸入拒絕原因`);return}await Ye({action:`REJECTED`,comment:ke})}}async function ot(){if(X){if(!D){g(`請選擇轉派對象`);return}await Ye({action:`TRANSFERRED`,comment:je||null,transferToMemberId:D.id})}}async function st(){await Ye({action:`RETURNED`,comment:Ae||null,returnToNodeId:Ge?.id??null})}function ct(){ve(``),L(null),Te(`REJECT_INSTANCE`),U(`MEMBER`),Oe(``)}function lt(e){Ce(e),ct(),z(!0),dt(``)}function ut(){V||(z(!1),ct())}async function dt(e){be(!0);try{R((await(0,c.searchMembers)(e)).map(me))}catch(e){g(E(e))}finally{be(!1)}}async function ft(){if(!W)return;let e=(B===`STAGE_NOTIFY`||B===`COMPLETION_NOTIFY`)&&H===`WEBHOOK`,t=De.trim(),n=I;if(e&&!t){g(`請輸入 Webhook URL`);return}if(!e&&!n){g(`請選擇對象成員`);return}let r=e||!n?{kind:`WEBHOOK`,webhookUrl:t}:{kind:`MEMBER`,memberIds:[n.id]},i=F.trim()||null;Ee(!0),g(null);try{B===`COUNTERSIGN`?await(0,c.requestAdhocCountersign)({comment:i,target:r,taskId:W.id}):B===`PRE_APPROVAL`?await(0,c.requestAdhocPreApproval)({comment:i,onReject:we,target:r,taskId:W.id}):B===`STAGE_NOTIFY`?await(0,c.configureAdhocStageNotification)({target:r,taskId:W.id}):await(0,c.configureAdhocCompletionNotification)({target:r,taskId:W.id}),z(!1),ct(),await u()}catch(e){g(E(e))}finally{Ee(!1)}}async function pt(e){Ee(!0),g(null);try{await(0,c.cancelAdhocDirective)(e),await u()}catch(e){g(E(e))}finally{Ee(!1)}}(0,a.useImperativeHandle)(f,()=>({canAddSignerCurrentTask:Ue,canRejectCurrentTask:K,canReturnCurrentTask:Ne,canTransferCurrentTask:X,deciding:p,handleApprove:Xe,hasCurrentTask:W!==null,openAdhocModal:lt,openRejectModal:$e,openReturnModal:et,openTransferModal:nt}),[Ue,K,Ne,X,t,W,p]);let $=B===`STAGE_NOTIFY`||B===`COMPLETION_NOTIFY`,mt=$&&H===`WEBHOOK`?!De.trim():!I,ht=Y.find(e=>e.id===we)??Y[0],gt=Be.find(e=>e.id===H)??Be[0];return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.Typography,{component:`h2`,variant:`h3`,children:`任務`}),h?(0,s.jsx)(o.Typography,{color:`text-error`,variant:`body`,children:h}):null,(0,s.jsx)(`div`,{style:Ie,children:(0,s.jsx)(o.Table,{columns:Z,dataSource:Ke,fullWidth:!0})}),We.length>0?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.Typography,{component:`h3`,style:J,variant:`h3`,children:`待生效的臨時設定`}),(0,s.jsx)(`div`,{style:Ie,children:(0,s.jsx)(o.Table,{columns:Je,dataSource:qe,fullWidth:!0})})]}):null,(0,s.jsxs)(o.Modal,{cancelText:`取消`,confirmText:`送出同意`,loading:p,modalType:`standard`,onCancel:Ze,onClose:Ze,onConfirm:()=>void Qe(),open:_,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:`可以留下同意的說明,內容會記錄在簽核歷程;不填也可以直接送出。`,title:`簽核意見`,children:[h?(0,s.jsx)(o.Typography,{color:`text-error`,role:`alert`,variant:`body`,children:h}):null,(0,s.jsx)(`div`,{style:Pe,children:(0,s.jsx)(r.t,{label:`簽核意見`,name:`approveComment`,children:(0,s.jsx)(o.Textarea,{autoFocus:!0,onChange:e=>te(e.target.value),placeholder:`選填,例如補充核准的條件或提醒事項`,ref:Le,resize:`vertical`,rows:4,style:q,value:ee})})})]}),(0,s.jsx)(o.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!ke,variant:`destructive-primary`},confirmText:`送出拒絕`,loading:p,modalStatusType:`error`,modalType:`standard`,onCancel:Q,onClose:Q,onConfirm:()=>void at(),open:b,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:`拒絕案件時必須留下原因,供發起人與後續追蹤查看。`,title:`拒絕原因`,children:(0,s.jsxs)(`div`,{style:Pe,children:[(0,s.jsx)(r.t,{label:`拒絕原因`,name:`rejectReason`,required:!0,children:(0,s.jsx)(o.Textarea,{autoFocus:!0,onChange:e=>{v(e.target.value),y(null)},placeholder:`請說明拒絕原因`,ref:Le,resize:`vertical`,rows:4,style:q,type:ie?`error`:`default`,value:re})}),ie?(0,s.jsx)(o.Typography,{color:`text-error`,variant:`body`,children:ie}):null]})}),(0,s.jsx)(o.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!D},confirmText:`送出轉派`,loading:p,modalType:`standard`,onCancel:rt,onClose:rt,onConfirm:()=>void ot(),open:_e,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:`轉派後,原任務會保留轉派紀錄,新的待簽任務會指派給指定成員。`,title:`轉派簽核`,children:(0,s.jsxs)(`div`,{style:Fe,children:[(0,s.jsx)(r.t,{label:`轉派對象`,name:`transferToMemberId`,required:!0,children:(0,s.jsx)(o.AutoComplete,{asyncData:!0,disabledOptionsFilter:!0,emptyText:`沒有符合的成員`,inputProps:{autoCapitalize:`none`,autoCorrect:`off`,name:`transfer-member-search`,spellCheck:!1},loading:ue,loadingText:`搜尋成員中...`,mode:`single`,onChange:e=>O(M(e)),onSearch:it,onSearchTextChange:e=>O(he(e,N)),onVisibilityChange:e=>{e&&it(``)},options:[...N],placeholder:`搜尋姓名或信箱`,searchDebounceTime:300,value:D})}),(0,s.jsx)(r.t,{label:`轉派說明`,name:`transferComment`,children:(0,s.jsx)(o.Textarea,{onChange:e=>ce(e.target.value),placeholder:`可補充轉派原因`,ref:Le,resize:`vertical`,rows:4,style:q,value:T})})]})}),(0,s.jsx)(o.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!Ge||He&&!Ae},confirmText:`送出退回`,loading:p,modalType:`standard`,onCancel:tt,onClose:tt,onConfirm:()=>void st(),open:se,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:`退回後,流程會回到指定節點並等待重新處理。`,title:`退回簽核`,children:(0,s.jsxs)(`div`,{style:Fe,children:[(0,s.jsx)(r.t,{label:`退回節點`,name:`returnTargetNodeId`,required:!0,children:(0,s.jsx)(o.Select,{clearable:!1,fullWidth:!0,onChange:e=>w(e?.id??null),options:[...Me],placeholder:`選擇退回節點`,value:Ge})}),(0,s.jsx)(r.t,{hintText:He?`此關卡設定退回時必須填寫意見。`:void 0,label:`退回說明`,name:`returnComment`,required:He,children:(0,s.jsx)(o.Textarea,{onChange:e=>x(e.target.value),placeholder:He?`請說明退回原因`:`可補充需要修改的內容`,ref:Le,resize:`vertical`,rows:4,style:q,value:oe})})]})}),(0,s.jsx)(o.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:mt},confirmText:`送出`,loading:V,modalType:`standard`,onCancel:ut,onClose:ut,onConfirm:()=>void ft(),open:Se,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:ze[B],title:Re[B],children:(0,s.jsxs)(`div`,{style:Fe,children:[$?(0,s.jsx)(r.t,{label:`通知時機`,name:`adhocNotifyMode`,required:!0,children:(0,s.jsx)(o.Select,{clearable:!1,fullWidth:!0,onChange:e=>Ce(e?.id===`COMPLETION_NOTIFY`?`COMPLETION_NOTIFY`:`STAGE_NOTIFY`),options:[{id:`STAGE_NOTIFY`,name:Re.STAGE_NOTIFY},{id:`COMPLETION_NOTIFY`,name:Re.COMPLETION_NOTIFY}],value:{id:B,name:Re[B]}})}):null,$?(0,s.jsx)(r.t,{label:`通知對象類型`,name:`adhocTargetKind`,required:!0,children:(0,s.jsx)(o.Select,{clearable:!1,fullWidth:!0,onChange:e=>U(e?.id===`WEBHOOK`?`WEBHOOK`:`MEMBER`),options:[...Be],value:gt})}):null,$&&H===`WEBHOOK`?(0,s.jsx)(r.t,{label:`Webhook URL`,name:`adhocWebhookUrl`,required:!0,children:(0,s.jsx)(o.Input,{fullWidth:!0,onChange:e=>Oe(e.target.value),placeholder:`https://example.com/webhook`,value:De})}):(0,s.jsx)(r.t,{label:$?`通知對象`:`簽核對象`,name:`adhocMemberId`,required:!0,children:(0,s.jsx)(o.AutoComplete,{asyncData:!0,disabledOptionsFilter:!0,emptyText:`沒有符合的成員`,inputProps:{autoCapitalize:`none`,autoCorrect:`off`,name:`adhoc-member-search`,spellCheck:!1},loading:ye,loadingText:`搜尋成員中...`,mode:`single`,onChange:e=>L(M(e)),onSearch:dt,onSearchTextChange:e=>L(he(e,xe)),onVisibilityChange:e=>{e&&dt(``)},options:[...xe],placeholder:`搜尋姓名或信箱`,searchDebounceTime:300,value:I})}),B===`PRE_APPROVAL`?(0,s.jsx)(r.t,{label:`拒簽處理方式`,name:`adhocOnReject`,required:!0,children:(0,s.jsx)(o.Select,{clearable:!1,fullWidth:!0,onChange:e=>Te(e?.id===`RETURN_TO_ORIGIN`?`RETURN_TO_ORIGIN`:`REJECT_INSTANCE`),options:[...Y],value:ht})}):null,$?null:(0,s.jsx)(r.t,{label:`說明`,name:`adhocComment`,children:(0,s.jsx)(o.Textarea,{onChange:e=>ve(e.target.value),placeholder:`可補充原因`,ref:Le,resize:`vertical`,rows:3,style:q,value:F})})]})})]})});function Ve(e,t){try{let n=JSON.parse(e.targetValueJson);if(n.memberIds?.length)return n.memberIds.map(e=>j(e,t)).join(`、`);if(n.webhookUrl)return n.webhookUrl;if(n.positionId)return`職位 ${n.positionId}`;if(n.orgUnitId)return`部門 ${n.orgUnitId}`}catch{}return e.targetKind}var He={display:`grid`,gap:16};function Ue({signatureVerification:e,signatures:t}){let r=(0,a.useMemo)(()=>t.map(e=>({algorithm:e.algorithm,hashLabel:D(e.signedPayloadHash),key:e.id,keyVersion:e.keyVersion,signedAtLabel:n.t(e.signedAt),signerMemberId:e.signerMemberId})),[t]),i=(0,a.useMemo)(()=>[{dataIndex:`signerMemberId`,key:`signerMemberId`,title:`簽章者`,width:160},{dataIndex:`algorithm`,key:`algorithm`,title:`演算法`,width:150},{dataIndex:`keyVersion`,key:`keyVersion`,title:`Key 版本`,width:100},{dataIndex:`hashLabel`,key:`hashLabel`,title:`Payload Hash`,width:180},{dataIndex:`signedAtLabel`,key:`signedAtLabel`,title:`簽章時間`,width:220}],[]);return(0,s.jsxs)(`div`,{style:He,children:[(0,s.jsx)(o.Typography,{component:`h2`,variant:`h3`,children:`簽章`}),(0,s.jsx)(o.Typography,{color:e?.valid?`text-success`:`text-error`,variant:`body`,children:e?e.valid?`簽章鏈已驗證,共 ${e.checkedCount} 筆。`:`簽章鏈驗證失敗:${e.errors.join(`、`)}`:`尚無簽章紀錄。`}),r.length>0?(0,s.jsx)(o.Table,{columns:i,dataSource:r,fullWidth:!0}):null]})}var We={display:`grid`,gap:16},Ge={cursor:`help`,textDecoration:`underline dotted`,textUnderlineOffset:3},Ke={color:`var(--mzn-color-text-error)`};function Z(...e){return e.filter(e=>C(e??null)).join(` `)}var qe=(0,a.forwardRef)(function({className:e,descriptionParts:t,error:n,forcePending:r=!1,index:i=0,orientation:c,status:l=`pending`,title:u,type:d=`number`,...f},p){let m=r?`pending`:l;return(0,s.jsxs)(`div`,{...f,className:Z(h.stepClasses.host,d===`dot`?h.stepClasses.dot:null,n&&m!==`processing`?h.stepClasses.error:null,c===`horizontal`?h.stepClasses.horizontal:null,d===`number`?h.stepClasses.number:null,m===`pending`?h.stepClasses.pending:null,m===`processing`?h.stepClasses.processing:null,n&&m===`processing`?h.stepClasses.processingError:null,!n&&m===`succeeded`?h.stepClasses.succeeded:null,c===`vertical`?h.stepClasses.vertical:null,e),ref:p,children:[d===`dot`?(0,s.jsx)(`span`,{className:Z(h.stepClasses.statusIndicator,h.stepClasses.statusIndicatorDot)}):(0,s.jsx)(`span`,{className:h.stepClasses.statusIndicator,children:i+1}),(0,s.jsxs)(`div`,{className:h.stepClasses.textContainer,children:[(0,s.jsxs)(o.Typography,{className:h.stepClasses.title,variant:`label-primary-highlight`,children:[u,(0,s.jsx)(`span`,{className:h.stepClasses.titleConnectLine})]}),t.length>0?(0,s.jsx)(o.Typography,{className:h.stepClasses.description,variant:`caption`,children:t.map((e,t)=>(0,s.jsxs)(a.Fragment,{children:[t>0?` · `:null,Je(e)]},`${e.type}-${t}`))}):null]})]})});function Je(e){return e.type===`text`?e.text:e.type===`dangerText`?(0,s.jsx)(`span`,{style:Ke,children:e.text}):e.email?(0,s.jsxs)(s.Fragment,{children:[e.prefix,`:`,(0,s.jsx)(o.Tooltip,{title:e.email,children:({onMouseEnter:t,onMouseLeave:n,ref:r})=>(0,s.jsx)(`span`,{"data-testid":e.memberId?`member-tooltip-${e.memberId}`:void 0,onMouseEnter:t,onMouseLeave:n,ref:r,style:Ge,children:e.label})})]}):`${e.prefix}:${e.label}`}function Ye({activityLogs:e,instanceState:t,memberProfilesById:n,signatureVerification:r,signaturesById:i,taskDecisionsByTaskId:a,tasks:c,workflowSnapshot:l,workflowTokens:u}){let d=U(e,c,u,l,t,n,a,i,r),f=F(d),p=d.map(e=>({...e,descriptionParts:e.descriptionParts.filter(P)}));return(0,s.jsxs)(`div`,{style:We,children:[(0,s.jsx)(o.Typography,{component:`h2`,variant:`h3`,children:`歷程`}),p.length>0?(0,s.jsx)(o.Stepper,{currentStep:f,orientation:`vertical`,type:`dot`,children:p.map(e=>(0,s.jsx)(qe,{descriptionParts:e.descriptionParts,error:e.error,forcePending:e.forcePending,title:e.title},e.id))}):(0,s.jsx)(o.Typography,{color:`text-neutral`,variant:`body`,children:`尚無歷程紀錄。`})]})}var Xe=184,Ze=96,Qe={display:`grid`,gap:16},$e={background:`#f8fafc`,border:`1px solid #e2e8f0`,borderRadius:8,height:`min(64vh, 620px)`,minHeight:440,overflow:`hidden`,width:`min(80vw, 1040px)`},Q={background:`#ffffff`,border:`1px solid #cbd5e1`,borderRadius:8,boxShadow:`0 8px 18px rgba(15, 23, 42, 0.08)`,display:`grid`,gap:6,minHeight:82,padding:12,width:184},et={borderRadius:999,fontSize:12,fontWeight:600,justifySelf:`start`,lineHeight:`18px`,padding:`0 8px`},tt={color:`#64748b`,fontSize:12,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},nt={opacity:0},rt={display:`flex`,flexWrap:`wrap`,gap:8},it={alignItems:`center`,background:`#ffffff`,border:`1px solid #cbd5e1`,borderRadius:8,color:`#334155`,display:`inline-flex`,fontSize:12,fontWeight:600,gap:6,lineHeight:`20px`,padding:`4px 8px`},at={display:`grid`,gap:16},ot={workflowRuntime:ht};function st({instanceId:e,showAttachments:p=!0,showForm:m=!0,showHistory:h=!0,showSignatures:g=!0,showTasks:ee=!0}){let{member:te}=t.n(),_=te?.memberId??null,[ne,re]=(0,a.useState)([]),[v,ie]=(0,a.useState)(null),[b,ae]=(0,a.useState)([]),[oe,x]=(0,a.useState)([]),[se,S]=(0,a.useState)([]),[C,w]=(0,a.useState)(null),[T,ce]=(0,a.useState)([]),[D,le]=(0,a.useState)([]),[ue,k]=(0,a.useState)([]),[A,j]=(0,a.useState)(null),[de,pe]=(0,a.useState)(!0),[me,M]=(0,a.useState)(!1),[he,N]=(0,a.useState)(!1),[ge,_e]=(0,a.useState)(``),[P,F]=(0,a.useState)(!1),[ve,I]=(0,a.useState)({}),[L,ye]=(0,a.useState)({}),[be,xe]=(0,a.useState)({}),[R,Se]=(0,a.useState)(null),[z,B]=(0,a.useState)(null),[Ce,we]=(0,a.useState)([]),Te=ge.trim(),V=(0,a.useRef)(null);(0,a.useEffect)(()=>{Y()},[_,e]),(0,a.useEffect)(()=>{ye(v?.formData??{}),xe({})},[v]);let Ee=(0,a.useCallback)((e,t)=>{xe(n=>{let r=n[e];return r?.hasValue===t.hasValue&&r.status===t.status?n:{...n,[e]:{hasValue:t.hasValue,status:t.status}}})},[]),H=(0,a.useMemo)(()=>T.find(e=>fe(e,_)&&(e.status===`PENDING`||e.status===`IN_PROGRESS`))??null,[_,T]),U=(0,a.useMemo)(()=>H&&v?v.workflowSnapshot.nodes.find(e=>e.id===H.nodeId)??null:null,[H,v]),De=U?.type===`userTask`&&U.data.returnBehavior.allowReturn,ke=U?.type===`userTask`&&U.data.allowReject!==!1,W=U?.type===`userTask`&&U.data.allowTransfer!==!1,G=U?.type===`userTask`&&U.data.allowAddSigner,Ne=!!(v&&v.initiatorMemberId===_&&(v.state===`RUNNING`||v.state===`RETURNED`)),Pe=!!(v&&v.initiatorMemberId===_&&v.state===`RETURNED`),q=(0,a.useMemo)(()=>new Map(ue.map(e=>[e.memberId,e])),[ue]),Fe=(0,a.useMemo)(()=>je(b),[b]),Ie=(0,a.useMemo)(()=>new Map(se.map(e=>[e.id,e])),[se]),J=(0,a.useMemo)(()=>v?ft(v.workflowSnapshot):null,[v]),Le=(0,a.useMemo)(()=>v&&J?dt(J,T,D,v.state):[],[v,J,T,D]),Re=(0,a.useMemo)(()=>J?pt(J):[],[J]),ze=(0,a.useMemo)(()=>v?lt(v.workflowSnapshot):[],[v]);async function Y(){pe(!0),j(null);try{let t=await(0,c.readApprovalInstance)(e);re(t.activityLogs),ie(t.instance),ce(t.tasks),le(t.workflowTokens);let n=await(0,c.listAdhocDirectives)(t.instance.id),[r,i,a,o]=await Promise.all([Ae(t.tasks),Oe({...t,adhocDirectives:n}),(0,c.listAttachments)(t.instance.id),(0,c.readInstanceSignatures)(t.instance.id)]);ae(r),k(i),x(a),S(o.signatures),w(o.verification),we(n)}catch(e){j(E(e))}finally{pe(!1)}}async function Be(e,t){if(!_)throw Error(`尚未登入,無法上傳附件`);return{id:(await(0,c.uploadAttachment)({file:t,formFieldPath:`form.${e.fieldKey}`})).id}}async function Ve(e){if(!_)return;let t=await(0,c.readAttachmentDownloadUrl)({id:e.id});window.open(t,`_blank`,`noopener,noreferrer`)}async function He(e){if(!_)return;let t=await(0,c.readAttachmentPreviewUrl)({id:e.id});Se(e),B(t)}async function We(){if(!(!_||!v||!Ne)){M(!0),j(null),I({});try{await(0,c.cancelApprovalInstance)({cancelledByMemberId:_,comment:Te||null,instanceId:v.id}),_e(``),F(!1),await Y()}catch(e){j(E(e))}finally{M(!1)}}}async function Ge(){if(!_||!v||!Pe)return;M(!0),j(null),I({});let e=i.i(Object.values(be));if(e){j(e),M(!1);return}if(v.formDefinitionSnapshot.schema&&v.formDefinitionSnapshot.uiSchema){let e=(0,d.validateFormRendererValues)({schema:v.formDefinitionSnapshot.schema,uiSchema:v.formDefinitionSnapshot.uiSchema,values:L});if(!e.valid){I(e.errors),j(`請先補齊必填欄位。`),e.firstInvalidFieldKey&&(0,d.focusFormRendererField)(e.firstInvalidFieldKey),M(!1);return}}try{await(0,c.resubmitApprovalInstance)({formData:L,initiatorMemberId:_,instanceId:v.id,title:v.title}),await Y()}catch(e){j(E(e))}finally{M(!1)}}let Ke=V.current?.deciding??!1,Z=me||Ke;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.PageHeader,{children:(0,s.jsxs)(l.default,{description:v?`${O(v.state)} · ${n.t(v.startedAt)}`:`載入案件內容。`,title:v?.title??`簽核案件`,children:[v?(0,s.jsx)(o.Button,{"aria-label":`查看流程圖`,icon:u.ShareIcon,iconType:`icon-only`,onClick:()=>N(!0),title:`查看流程圖`,variant:`base-secondary`,children:`流程圖`}):null,Ne?(0,s.jsx)(o.Button,{disabled:Z,icon:u.DangerousOutlineIcon,iconType:`leading`,onClick:()=>F(!0),variant:`destructive-secondary`,children:`取消案件`}):null,H?(0,s.jsxs)(s.Fragment,{children:[G?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.Button,{disabled:Z,icon:u.PlusIcon,iconType:`leading`,onClick:()=>V.current?.openAdhocModal(`COUNTERSIGN`),variant:`base-secondary`,children:`會簽`},`adhoc-countersign`),(0,s.jsx)(o.Button,{disabled:Z,icon:u.PlusIcon,iconType:`leading`,onClick:()=>V.current?.openAdhocModal(`PRE_APPROVAL`),variant:`base-secondary`,children:`加簽`},`adhoc-pre-approval`)]}):null,(0,s.jsx)(o.Button,{disabled:Z,icon:u.NotificationUnreadIcon,iconType:`leading`,onClick:()=>V.current?.openAdhocModal(`STAGE_NOTIFY`),variant:`base-secondary`,children:`通知設定`},`adhoc-notify`),De?(0,s.jsx)(o.Button,{disabled:Z,icon:u.RefreshCcwIcon,iconType:`leading`,onClick:()=>V.current?.openReturnModal(),variant:`base-secondary`,children:`退回`},`task-return`):null,W?(0,s.jsx)(o.Button,{disabled:Z,icon:u.UserIcon,iconType:`leading`,onClick:()=>V.current?.openTransferModal(),variant:`base-secondary`,children:`轉派`},`task-transfer`):null,ke?(0,s.jsx)(o.Button,{disabled:Z,icon:u.DangerousOutlineIcon,iconType:`leading`,onClick:()=>V.current?.openRejectModal(),variant:`destructive-secondary`,children:`拒絕`},`task-reject`):null,(0,s.jsx)(o.Button,{disabled:Z,icon:u.CheckedIcon,iconType:`leading`,onClick:()=>V.current?.handleApprove(),variant:`base-primary`,children:`同意`},`task-approve`)]}):null]})}),(0,s.jsxs)(o.SectionGroup,{children:[m?(0,s.jsx)(o.Section,{children:(0,s.jsx)(Me,{canResubmitInstance:Pe,deciding:me,error:A,instance:v,loading:de,onDataSourceStateChange:Ee,onResubmitFormChange:e=>{ye(e),I({})},onResubmitInstance:()=>void Ge(),onUploadAttachment:Be,resubmitFormData:L,resubmitFormErrors:ve})}):null,p?(0,s.jsx)(o.Section,{children:(0,s.jsx)(K,{attachments:oe,onDownload:e=>{Ve(e)},onPreview:e=>{He(e)}})}):null,ee?(0,s.jsx)(o.Section,{children:(0,s.jsx)(X,{adhocDirectives:Ce,currentMemberId:_,instance:v,memberProfilesById:q,onChanged:Y,ref:V,tasks:T})}):null,g?(0,s.jsx)(o.Section,{children:(0,s.jsx)(Ue,{signatureVerification:C,signatures:se})}):null,h?(0,s.jsx)(o.Section,{children:(0,s.jsx)(Ye,{activityLogs:ne,instanceState:v?.state??`RUNNING`,memberProfilesById:q,signatureVerification:C,signaturesById:Ie,taskDecisionsByTaskId:Fe,tasks:T,workflowSnapshot:v?.workflowSnapshot??null,workflowTokens:D})}):null]}),v?(0,s.jsx)(o.Modal,{modalType:`standard`,onClose:()=>N(!1),open:he,showModalHeader:!0,size:`wide`,supportingText:`${O(v.state)} · ${n.t(v.startedAt)}`,title:`流程圖`,children:(0,s.jsxs)(`div`,{style:Qe,children:[(0,s.jsx)(`div`,{style:$e,children:(0,s.jsxs)(f.ReactFlow,{edges:Re,fitView:!0,fitViewOptions:{padding:.18},maxZoom:1.2,minZoom:.2,nodes:Le,nodesDraggable:!1,nodesFocusable:!1,nodeTypes:ot,panOnDrag:!0,proOptions:{hideAttribution:!0},children:[(0,s.jsx)(f.Background,{}),(0,s.jsx)(f.Controls,{showInteractive:!1})]})}),ze.length>0?(0,s.jsx)(`div`,{style:rt,children:ze.map(e=>(0,s.jsx)(`span`,{style:it,children:e},e))}):null]})}):null,(0,s.jsx)(o.Modal,{modalType:`standard`,onClose:()=>{Se(null),B(null)},open:!!(R&&z),showModalHeader:!0,size:`wide`,supportingText:R?.filename??void 0,title:`PDF 預覽`,children:z?(0,s.jsx)(y,{filename:R?.filename??`PDF 預覽`,fileUrl:z,onDownload:R?()=>void Ve(R):void 0}):null}),(0,s.jsx)(o.Modal,{cancelText:`保留案件`,confirmButtonProps:{variant:`destructive-primary`},confirmText:`確認取消`,loading:me,modalStatusType:`error`,modalType:`standard`,onCancel:()=>F(!1),onClose:()=>F(!1),onConfirm:()=>void We(),open:P,showModalFooter:!0,showModalHeader:!0,supportingText:`取消後會關閉目前待簽任務與候選簽核人。`,title:`取消案件`,children:(0,s.jsxs)(`div`,{style:at,children:[(0,s.jsxs)(o.Typography,{variant:`body`,children:[`確定要取消「`,v?.title??``,`」嗎?`]}),(0,s.jsx)(r.t,{label:`取消原因`,name:`cancelComment`,children:(0,s.jsx)(o.Textarea,{onChange:e=>_e(e.target.value),placeholder:`可填寫取消原因`,resize:`vertical`,rows:3,value:ge})})]})})]})}function ct(e){return e.data.label?e.data.label:e.data.isDefault?`其他情況`:e.data.condition??``}function lt(e){return e.edges.map(ct).filter(e=>e.trim().length>0)}function ut(e){return e===`startEvent`?`開始`:e===`endEvent`?`完成`:e===`userTask`?`簽核節點`:e===`serviceTask`?`知會節點`:e===`exclusiveGateway`?`條件分流`:`平行處理`}function dt(e,t,n,r){return e.nodes.map(e=>{let i=De(e,t,n,r);return{data:{kindLabel:ut(e.type),label:e.data.label,secondaryLabel:i.secondaryLabel,statusLabel:i.statusLabel,tone:i.tone},id:e.id,position:e.position,sourcePosition:f.Position.Right,targetPosition:f.Position.Left,type:`workflowRuntime`}})}function ft(e){let t=new p.graphlib.Graph;return t.setDefaultEdgeLabel(()=>({})),t.setGraph({nodesep:56,rankdir:`LR`,ranksep:120}),e.nodes.forEach(e=>{t.setNode(e.id,{height:Ze,width:Xe})}),e.edges.forEach(e=>{t.setEdge(e.source,e.target)}),p.layout(t),{...e,nodes:e.nodes.map(e=>{let n=t.node(e.id);return n?{...e,position:{x:n.x-Xe/2,y:n.y-Ze/2}}:e})}}function pt(e){return e.edges.map(e=>{let t=ct(e);return{animated:!1,id:e.id,label:t,labelBgBorderRadius:6,labelBgPadding:[8,4],labelBgStyle:{fill:e.data.isDefault?`#f8fafc`:`#eff6ff`,stroke:e.data.isDefault?`#64748b`:`#2563eb`,strokeWidth:1},labelShowBg:!!t,labelStyle:{fill:e.data.isDefault?`#475569`:`#2563eb`,fontSize:12,fontWeight:600},source:e.source,style:{stroke:`#475569`,strokeWidth:1.5},target:e.target,type:e.type??`smoothstep`}})}function $(e){return e===`current`?{...Q,border:`1px solid var(--mzn-color-primary, #0057ff)`,boxShadow:`0 0 0 3px rgba(0, 87, 255, 0.14)`}:e===`completed`?{...Q,border:`1px solid #16a34a`}:e===`cancelled`?{...Q,border:`1px solid #dc2626`,opacity:.72}:e===`waiting`?{...Q,border:`1px dashed #64748b`}:Q}function mt(e){let t=et;return e===`current`?{...t,background:`#eff6ff`,color:`#2563eb`}:e===`completed`?{...t,background:`#f0fdf4`,color:`#15803d`}:e===`cancelled`?{...t,background:`#fef2f2`,color:`#dc2626`}:e===`waiting`?{...t,background:`#f8fafc`,color:`#475569`}:{...t,background:`#f1f5f9`,color:`#64748b`}}function ht({data:e}){return(0,s.jsxs)(`div`,{style:$(e.tone),children:[(0,s.jsx)(f.Handle,{isConnectable:!1,position:f.Position.Left,style:nt,type:`target`}),(0,s.jsx)(o.Typography,{component:`span`,ellipsis:!0,title:e.label,variant:`label-primary`,children:e.label}),(0,s.jsx)(`span`,{style:mt(e.tone),children:e.statusLabel}),(0,s.jsx)(`span`,{title:e.secondaryLabel,style:tt,children:e.secondaryLabel||e.kindLabel}),(0,s.jsx)(f.Handle,{isConnectable:!1,position:f.Position.Right,style:nt,type:`source`})]})}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Ye}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Me}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Ue}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return st}});
|
|
2
|
-
//# sourceMappingURL=detail-CtVu5NTi.cjs.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=require("./chunk-CMqjfN_6.cjs");let t=require("moment");t=e.t(t,1);function n(e){return e?(0,t.default)(e).format(`YYYY-MM-DD HH:mm:ss`):`-`}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return n}});
|
|
2
|
-
//# sourceMappingURL=format-date-time-XxBzF0F5.cjs.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";require('../notifications.css');const e=require("./chunk-CMqjfN_6.cjs"),t=require("./auth-provider-4BeCw7cI.cjs");let n=require("react"),r=require("@mezzanine-ui/react"),i=require("react/jsx-runtime"),a=require("@rytass/bpm-core-client/workflow"),o=require("@mezzanine-ui/core/form"),s=require("@mezzanine-ui/react/ContentHeader");s=e.t(s,1);var c={preferenceFilter:`bpm_preferenceFilter_snhMa`,segmentFilterControl:`bpm_segmentFilterControl_piBnq`,segmentFilterLabel:`bpm_segmentFilterLabel_U0z8J`},l=[{id:`INSTANT`,name:`即時通知`},{id:`DAILY`,name:`每日摘要`}],u=[{id:`ON`,name:`開`},{id:`OFF`,name:`關`}],d={emailDigestMode:`INSTANT`,emailEnabled:!0,inAppEnabled:!0,memberId:``,quietHoursEnd:null,quietHoursStart:null,updatedAt:``};function f(){let{member:e}=t.n(),f=e?.memberId??null,[v,y]=(0,n.useState)(d),[b,x]=(0,n.useState)(!0),[S,C]=(0,n.useState)(!1),[w,T]=(0,n.useState)(null);(0,n.useEffect)(()=>{f&&(x(!0),T(null),(0,a.readNotificationPreference)(f).then(e=>{y(e)}).catch(e=>{T(_(e))}).finally(()=>{x(!1)}))},[f]);async function E(e){if(!f||S)return;let t=v;y(e),C(!0);try{y(await(0,a.updateNotificationPreference)({emailDigestMode:e.emailDigestMode,emailEnabled:e.emailEnabled,inAppEnabled:e.inAppEnabled,memberId:f,quietHoursEnd:e.quietHoursEnd,quietHoursStart:e.quietHoursStart}))}catch(e){y(t),T(_(e))}finally{C(!1)}}let D=b||S;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.PageHeader,{children:(0,i.jsx)(s.default,{description:`調整站內通知、Email 通知與摘要頻率。`,title:`通知設定`})}),(0,i.jsx)(r.SectionGroup,{children:(0,i.jsx)(r.Section,{filterArea:(0,i.jsx)(r.FilterArea,{className:c.preferenceFilter,isDirty:!1,children:(0,i.jsxs)(r.FilterLine,{children:[(0,i.jsx)(r.Filter,{minWidth:160,span:1,children:(0,i.jsx)(r.FormField,{layout:o.FormFieldLayout.VERTICAL,name:`inAppEnabled`,style:p,children:(0,i.jsxs)(`div`,{className:c.segmentFilterControl,children:[(0,i.jsx)(`span`,{className:c.segmentFilterLabel,children:`站內通知`}),(0,i.jsx)(r.RadioGroup,{disabled:D,name:`inAppEnabled`,onChange:e=>{E({...v,inAppEnabled:h(e.target.value)})},options:[...u],size:`sub`,type:`segment`,value:g(v.inAppEnabled)})]})})}),(0,i.jsx)(r.Filter,{minWidth:180,span:1,children:(0,i.jsx)(r.FormField,{layout:o.FormFieldLayout.VERTICAL,name:`emailEnabled`,style:p,children:(0,i.jsxs)(`div`,{className:c.segmentFilterControl,children:[(0,i.jsx)(`span`,{className:c.segmentFilterLabel,children:`Email 通知`}),(0,i.jsx)(r.RadioGroup,{disabled:D,name:`emailEnabled`,onChange:e=>{E({...v,emailEnabled:h(e.target.value)})},options:[...u],size:`sub`,type:`segment`,value:g(v.emailEnabled)})]})})}),(0,i.jsx)(r.Filter,{minWidth:280,span:2,children:(0,i.jsx)(r.FormField,{fullWidth:!0,layout:o.FormFieldLayout.VERTICAL,name:`emailDigestMode`,style:p,children:(0,i.jsxs)(`div`,{className:c.segmentFilterControl,children:[(0,i.jsx)(`span`,{className:c.segmentFilterLabel,children:`Email 頻率`}),(0,i.jsx)(r.RadioGroup,{disabled:D,name:`emailDigestMode`,onChange:e=>{E({...v,emailDigestMode:m(e.target.value)})},options:[...l],size:`sub`,type:`segment`,value:v.emailDigestMode})]})})})]})}),children:w?(0,i.jsx)(r.Typography,{color:`text-error`,variant:`body`,children:w}):(0,i.jsx)(r.Typography,{color:`text-neutral`,variant:`body`,children:`偏好設定會立即生效。`})})})]})}var p={minWidth:0,whiteSpace:`nowrap`};function m(e){return e===`DAILY`?`DAILY`:`INSTANT`}function h(e){return e!==`OFF`}function g(e){return e?`ON`:`OFF`}function _(e){return e instanceof Error?e.message:`發生未知錯誤`}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return f}});
|
|
2
|
-
//# sourceMappingURL=notifications--hwl-DR0.cjs.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";require('../style.css');require('../orgs.css');const e=require("./chunk-CMqjfN_6.cjs"),t=require("./bpm-form-field-Bc6k4ZEO.cjs"),n=require("./admin-pickers-Btvij1at.cjs");;/* empty css */let r=require("react"),i=require("@mezzanine-ui/react"),a=require("@rytass/bpm-core-client"),o=require("react/jsx-runtime"),s=require("@mezzanine-ui/core/form"),c=require("@mezzanine-ui/react/ContentHeader");c=e.t(c,1);let l=require("@mezzanine-ui/icons"),u=require("@rytass/bpm-core-client/organization"),d=require("@xyflow/react"),f=require("dagre");f=e.t(f,1);function p(e){return new Map(e.map(e=>[e.id,e.parentId]))}function m({orgUnitId:e,parentDraft:t,parentId:n}){let r=n===e?e:n,i=g({orgUnitId:e,parentDraft:t,parentId:r});if(i)return{message:i,parentDraft:t,status:`INVALID`};if((t.get(e)??null)===r)return{message:`父子關係沒有變更。`,parentDraft:t,status:`UNCHANGED`};let a=new Map(t);return a.set(e,r),{message:r?`已暫存新的上層組織。`:`已暫存為根節點。`,parentDraft:a,status:`UPDATED`}}function h({orgUnits:e,parentDraft:t}){return e.map(e=>{let n=t.get(e.id)??null;return n===e.parentId?null:{orgUnitId:e.id,parentId:n,previousParentId:e.parentId}}).filter(e=>!!e)}function g({orgUnitId:e,parentDraft:t,parentId:n}){return t.has(e)?n?t.has(n)?n===e?`組織不可成為自己的上層。`:_({orgUnitId:e,parentDraft:t,parentId:n})?`不可搬移到自己的下層組織。`:null:`找不到新的上層組織。`:null:`找不到要搬移的組織節點。`}function _({orgUnitId:e,parentDraft:t,parentId:n}){let r=new Set,i=n;for(;i;){if(i===e||r.has(i))return!0;r.add(i),i=t.get(i)??null}return!1}var v={orgTreeEditor:`bpm_orgTreeEditor_TMOtD`,orgTreeSummary:`bpm_orgTreeSummary_vpcV8`,orgTreeChangeList:`bpm_orgTreeChangeList_EzmOv`,orgTreeCanvas:`bpm_orgTreeCanvas_MeD7y`,orgTreePanel:`bpm_orgTreePanel_VFZph`,orgTreeNode:`bpm_orgTreeNode_bN4FS`,orgTreeNodeRoot:`bpm_orgTreeNodeRoot_Hr2KD`,orgTreeNodeSelected:`bpm_orgTreeNodeSelected_eRwtL`,orgTreeNodeChanged:`bpm_orgTreeNodeChanged_qPJg0`,orgTreeNodeDeleted:`bpm_orgTreeNodeDeleted_Ab0cI`,orgTreeNodeHeader:`bpm_orgTreeNodeHeader_LEXl-`,orgTreeNodeBadge:`bpm_orgTreeNodeBadge_zLc7t`,orgTreeNodeActions:`bpm_orgTreeNodeActions_cMldI`},y=`__org-tree-root__`,b=232,x=118,S=232,C=86,w=320,T=1.4,E=.25,D=.005,ee=250,te=80,O=.85,ne=.7,re=1200,k=600,A=96,ie={COMPANY:`公司`,DEPARTMENT:`部門`,DIVISION:`事業群`,TEAM:`小組`},ae={orgUnit:oe},j=(0,r.forwardRef)(function({onCreateChild:e,onCreateRoot:t,onEditOrgUnit:n,onSaveDraft:a,onStateChange:s,orgUnits:c},l){let[u,f]=(0,r.useState)(!1),[g,_]=(0,r.useState)(null),[S,C]=(0,r.useState)(null),[w,A]=(0,r.useState)(()=>p(c)),[ie,j]=(0,r.useState)(()=>new Set),[oe,ce]=(0,r.useState)(()=>new Map),[ue,M]=(0,r.useState)([]),N=(0,r.useRef)(null),P=(0,r.useRef)(null),F=(0,r.useCallback)(e=>{P.current=e,j(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),me=(0,r.useCallback)(()=>{P.current=y,j(new Set)},[]),L=(0,r.useCallback)(()=>{P.current=y,j(()=>{let e=se(c,w);return new Set([...e.keys()].filter(e=>e!==y))})},[c,w]),R=(0,r.useMemo)(()=>new Map(c.map(e=>[e.id,e])),[c]),z=(0,r.useMemo)(()=>h({orgUnits:c,parentDraft:w}),[c,w]),B=(0,r.useMemo)(()=>le({collapsedIds:ie,isEditing:u,measuredHeights:oe,onCreateChild:n=>{n?e(n):t()},onEditOrgUnit:e=>{let t=R.get(e);t&&n(t)},onToggleCollapse:F,orgUnits:c,orgUnitsById:R,parentDraft:w,selectedOrgUnitId:S}),[ie,F,u,oe,e,t,n,c,R,w,S]),he=(0,r.useRef)(B);he.current=B;let V=z.length>0,H=(0,r.useMemo)(()=>{let e=Math.max(B.bounds.width,B.bounds.height);return e<=0?E:Math.min(E,Math.max(D,ee/e))},[B.bounds.height,B.bounds.width]),ge=c.length<=te,U=(0,r.useCallback)(()=>{let e=N.current;if(!e)return;let{bounds:t,rootCenter:n}=he.current,r=t.width>0?re/t.width:1/0,i=t.height>0?k/t.height:1/0,a=Math.min(r,i);if(!Number.isFinite(a)||a>=ne){e.fitView({padding:.18});return}let o=k/(2*O);e.setCenter(n.x,Math.min(t.height/2,o),{duration:0,zoom:O})},[]),_e=(0,r.useCallback)(e=>{N.current=e,U()},[U]);(0,r.useImperativeHandle)(l,()=>({cancelEditing:xe,saveDraft:Se,startEditing:be})),(0,r.useEffect)(()=>{s({hasDraftChanges:V,isEditing:u})},[V,u,s]),(0,r.useEffect)(()=>{A(p(c)),j(new Set),ce(new Map),C(null),_(null),f(!1)},[c]),(0,r.useEffect)(()=>{M(B.nodes)},[B.nodes]),(0,r.useEffect)(()=>{if(typeof window>`u`)return()=>void 0;let e=window.requestAnimationFrame(()=>{U()});return()=>window.cancelAnimationFrame(e)},[U,c]),(0,r.useEffect)(()=>{let e=P.current;if(!e)return;P.current=null;let t=N.current,n=B.nodes.find(t=>t.id===e);!t||!n||t.setCenter(n.position.x+(n.width??b)/2,n.position.y+(n.initialHeight??x)/2,{duration:200,zoom:t.getZoom()})},[B.nodes]);let W=(0,r.useCallback)((e,t)=>{A(n=>{let r=m({orgUnitId:e,parentDraft:n,parentId:t});return _(r.message),r.parentDraft})},[]),G=(0,r.useCallback)(e=>{if(!u||!e.target||!e.source)return;let t=e.source===y?null:e.source;if(e.target===y){_(`根節點不能搬移到其他節點下。`);return}W(e.target,t)},[W,u]),ve=(0,r.useCallback)(e=>{let t=e.filter(e=>e.type===`dimensions`&&e.dimensions);t.length>0&&ce(e=>{let n=new Map(e);return t.reduce((e,t)=>{if(t.type!==`dimensions`||!t.dimensions)return e;let r=Math.ceil(t.dimensions.height);return Math.abs((n.get(t.id)??0)-r)<=1?e:(n.set(t.id,r),!0)},!1)?n:e}),u&&M(t=>(0,d.applyNodeChanges)(e,[...t]))},[u]),ye=(0,r.useCallback)((e,t,n)=>{if(!u||t.id===y)return;let r=fe(e,t.id)??de(t,n);if(r===void 0){_(`拖曳到目標父節點附近,或從父節點拉線到子節點。`);return}W(t.id,r===y?null:r)},[W,u]);function be(){f(!0),A(p(c)),_(`已進入編輯模式,拖曳節點或拉線只會更新前端草稿。`)}function xe(){f(!1),A(p(c)),_(`已取消草稿變更。`)}async function Se(){if(!a){_(`批次儲存 API 尚未接上,草稿仍保留在前端。`);return}await a(z),f(!1),_(`組織樹草稿已儲存。`)}return(0,o.jsxs)(`div`,{className:v.orgTreeEditor,children:[(0,o.jsxs)(`div`,{className:v.orgTreeSummary,children:[(0,o.jsx)(i.Typography,{color:`text-neutral`,variant:`caption`,children:g??(V?`目前有 ${z.length} 筆父子關係草稿變更。`:`目前沒有草稿變更。`)}),V?(0,o.jsx)(`ul`,{className:v.orgTreeChangeList,children:z.map(e=>(0,o.jsxs)(`li`,{children:[I(e.orgUnitId,R),`:`,I(e.previousParentId,R),` -> `,I(e.parentId,R)]},e.orgUnitId))}):null]}),(0,o.jsx)(`div`,{className:v.orgTreeCanvas,children:(0,o.jsxs)(d.ReactFlow,{connectionMode:d.ConnectionMode.Strict,edges:[...B.edges],fitViewOptions:{minZoom:H,padding:.18},isValidConnection:e=>pe({source:e.source,target:e.target},w),maxZoom:T,minZoom:H,nodeTypes:ae,nodes:[...ue],nodesConnectable:u,nodesDraggable:u,onConnect:G,onInit:_e,onNodeClick:(e,t)=>{C(t.id===y?null:t.id)},onNodeDoubleClick:(e,t)=>{if(t.id!==y){let e=R.get(t.id);e&&n(e)}},onNodeDragStop:ye,onNodesChange:ve,onPaneClick:()=>C(null),panOnDrag:!0,proOptions:{hideAttribution:!0},children:[(0,o.jsx)(d.Background,{}),(0,o.jsx)(d.Controls,{}),(0,o.jsxs)(d.Panel,{className:`${v.orgTreePanel} nopan nodrag`,position:`top-right`,children:[(0,o.jsx)(i.Button,{onClick:me,size:`sub`,variant:`base-secondary`,children:`全部展開`}),(0,o.jsx)(i.Button,{onClick:L,size:`sub`,variant:`base-secondary`,children:`全部收合`})]}),ge?(0,o.jsx)(d.MiniMap,{pannable:!0,zoomable:!0}):null]})})]})});function oe({data:e,selected:t}){return(0,o.jsxs)(`div`,{className:[v.orgTreeNode,e.isSyntheticRoot?v.orgTreeNodeRoot:``,e.changed?v.orgTreeNodeChanged:``,e.deleted?v.orgTreeNodeDeleted:``,t?v.orgTreeNodeSelected:``].filter(Boolean).join(` `),children:[e.isSyntheticRoot?null:(0,o.jsx)(d.Handle,{id:`target`,isConnectable:e.isEditing,position:d.Position.Top,type:`target`}),(0,o.jsx)(d.Handle,{id:`source`,isConnectable:e.isEditing,position:d.Position.Bottom,type:`source`}),(0,o.jsxs)(`div`,{className:v.orgTreeNodeHeader,children:[(0,o.jsx)(i.Typography,{component:`span`,ellipsis:!0,title:e.name,variant:`label-primary`,children:e.name}),e.changed?(0,o.jsx)(`span`,{className:v.orgTreeNodeBadge,children:`草稿`}):null]}),(0,o.jsx)(i.Typography,{color:`text-neutral`,component:`span`,ellipsis:!0,title:e.code,variant:`caption`,children:e.isSyntheticRoot?`根節點容器`:`${e.typeLabel} · ${e.code}`}),e.isSyntheticRoot?null:(0,o.jsxs)(i.Typography,{color:`text-neutral`,component:`span`,ellipsis:!0,title:e.parentLabel,variant:`caption`,children:[`上層:`,e.parentLabel]}),(0,o.jsxs)(`div`,{className:`${v.orgTreeNodeActions} nodrag nopan`,children:[e.childCount>0?(0,o.jsx)(i.Button,{onClick:t=>{t.stopPropagation(),e.onToggleCollapse(e.orgUnitId??y)},size:`sub`,variant:`base-secondary`,children:e.collapsed?`展開 (${e.childCount})`:`收合 (${e.childCount})`}):null,e.isSyntheticRoot?(0,o.jsx)(i.Button,{icon:l.PlusIcon,iconType:`leading`,onClick:()=>e.onCreateChild(null),size:`sub`,variant:`base-secondary`,children:`新增根節點`}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.Button,{icon:l.EditIcon,iconType:`leading`,onClick:()=>{e.orgUnitId&&e.onEdit(e.orgUnitId)},size:`sub`,variant:`base-secondary`,children:`編輯`}),(0,o.jsx)(i.Button,{icon:l.PlusIcon,iconType:`leading`,onClick:()=>e.onCreateChild(e.orgUnitId),size:`sub`,variant:`base-secondary`,children:`新增子節點`})]})]})]})}function se(e,t){let n=new Map;return e.forEach(e=>{let r=t.get(e.id)??y;n.set(r,[...n.get(r)??[],e.id])}),n}function ce({childrenMap:e,collapsedIds:t}){let n=new Set,r=i=>{t.has(i)||(e.get(i)??[]).forEach(e=>{n.add(e),r(e)})};return r(y),n}function le({collapsedIds:e,isEditing:t,measuredHeights:n,onCreateChild:r,onEditOrgUnit:i,onToggleCollapse:a,orgUnits:o,orgUnitsById:s,parentDraft:c,selectedOrgUnitId:l}){let u=se(o,c),d=ce({childrenMap:u,collapsedIds:e}),p=o.filter(e=>d.has(e.id)),m=e=>u.get(e)?.length??0,h=(e,t)=>Math.max(t,n.get(e)??0),g=new f.graphlib.Graph;g.setDefaultEdgeLabel(()=>({})),g.setGraph({marginx:36,marginy:36,nodesep:44,rankdir:`TB`,ranksep:A}),g.setNode(y,{height:h(y,C),width:S}),p.forEach(e=>{g.setNode(e.id,{height:h(e.id,x),width:b})}),p.forEach(e=>{let t=c.get(e.id)??null;g.setEdge(t??y,e.id)}),f.layout(g);let _=g.graph(),v={height:_.height??0,width:_.width??0},w=g.node(y),T={x:v.width>0?v.width/2:w?.x??0,y:w?.y??0},E={...ue({data:{changed:!1,childCount:m(y),code:y,collapsed:e.has(y),deleted:!1,isEditing:t,isSyntheticRoot:!0,name:`組織根節點`,onCreateChild:r,onEdit:i,onToggleCollapse:a,orgUnitId:null,parentLabel:``,path:``,typeLabel:``},graph:g,height:h(y,C),id:y,selected:l===null,width:S}),position:{x:T.x-S/2,y:T.y-h(y,C)/2}},D=p.map(n=>{let o=c.get(n.id)??null,u=I(o,s);return ue({data:{changed:o!==n.parentId,childCount:m(n.id),code:n.code,collapsed:e.has(n.id),deleted:!!n.deletedAt,isEditing:t,isSyntheticRoot:!1,name:n.name,onCreateChild:r,onEdit:i,onToggleCollapse:a,orgUnitId:n.id,parentLabel:u,path:n.path,typeLabel:me(n.type)},graph:g,height:h(n.id,x),id:n.id,selected:l===n.id,width:b})});return{bounds:v,edges:p.map(e=>{let n=c.get(e.id)??null,r=n!==e.parentId;return{animated:t&&r,data:{},id:`org-tree-edge-${n??`root`}-${e.id}`,source:n??y,sourceHandle:`source`,style:r?{stroke:`var(--mzn-color-primary, #0057ff)`,strokeWidth:2}:void 0,target:e.id,targetHandle:`target`,type:`smoothstep`}}),nodes:[E,...D],rootCenter:T}}function ue({data:e,graph:t,height:n,id:r,selected:i,width:a}){let o=t.node(r);return{data:e,id:r,initialHeight:n,initialWidth:a,position:o?{x:o.x-a/2,y:o.y-n/2}:{x:0,y:0},selected:i,sourcePosition:d.Position.Bottom,targetPosition:d.Position.Top,type:`orgUnit`,width:a}}function de(e,t){let n=P(e);return t.filter(t=>t.id!==e.id).map(e=>({distance:F(n,P(e)),id:e.id})).filter(e=>e.distance<=w).sort((e,t)=>e.distance-t.distance)[0]?.id}function fe(e,t){let n=M(e);if(n)return Array.from(document.querySelectorAll(`.react-flow__node[data-id]`)).map(e=>{let r=e.dataset.id;if(!r||r===t)return null;let i=e.getBoundingClientRect();return{distance:F(n,{x:i.left+i.width/2,y:i.top+i.height/2}),id:r}}).filter(e=>!!e).filter(e=>e.distance<=w).sort((e,t)=>e.distance-t.distance)[0]?.id}function M(e){return N(e)?{x:e.clientX,y:e.clientY}:null}function N(e){return typeof e==`object`&&!!e&&`clientX`in e&&`clientY`in e&&typeof e.clientX==`number`&&typeof e.clientY==`number`}function P(e){return{x:e.position.x+(e.width??b)/2,y:e.position.y+(e.measured?.height??e.initialHeight??x)/2}}function F(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function pe(e,t){return!e.source||!e.target||e.target===y?!1:g({orgUnitId:e.target,parentDraft:t,parentId:e.source===y?null:e.source})===null}function I(e,t){if(!e)return`根節點`;let n=t.get(e);return n?`${n.name} · ${n.code}`:`未知組織`}function me(e){return ie[e.toUpperCase()]??`未知類型`}var L={tableIntroActions:`bpm_tableIntroActions_WO4XU`,modalFields:`bpm_modalFields_juyv6`,tableIntro:`bpm_tableIntro_u3hcm`,tableFrame:`bpm_tableFrame_IdbmB`,orgFilterArea:`bpm_orgFilterArea_Xjbbp`,membershipFilterArea:`bpm_membershipFilterArea_zob-Y`,scopeLabel:`bpm_scopeLabel_TLHMC`},R={hasDraftChanges:!1,isEditing:!1},z=100,B=[{id:`COMPANY`,name:`公司`},{id:`DIVISION`,name:`事業群`},{id:`DEPARTMENT`,name:`部門`},{id:`TEAM`,name:`小組`}],he={id:`ALL`,name:`全部類型`},V=[he,...B],H=[{id:`MEMBER`,name:`指定會員`},{id:`ORG_UNIT`,name:`指定組織`},{id:`POSITION`,name:`指定職位`}],ge={id:`ALL`,name:`全部範圍`},U=[ge,...H],_e={activeOnly:!1,id:`ALL`,name:`全部狀態`},W=[_e,{activeOnly:!0,id:`ACTIVE`,name:`目前有效`}],G=[{id:`true`,name:`主要歸屬`,value:!0},{id:`false`,name:`一般歸屬`,value:!1}],ve=[10,20,50],ye=1368,be=908,xe=1292,Se=1124;function Ce(){let[e,t]=(0,r.useState)(`ORG_UNITS`),[n,s]=(0,r.useState)(null),[l,d]=(0,r.useState)(null),[f,p]=(0,r.useState)(null),[m,h]=(0,r.useState)(!0),[g,_]=(0,r.useState)(null),[v,y]=(0,r.useState)(_e),[b,x]=(0,r.useState)(1),[S,C]=(0,r.useState)(10),[w,T]=(0,r.useState)(ge),[E,D]=(0,r.useState)(0),[ee,te]=(0,r.useState)([]),[O,ne]=(0,r.useState)(null),[re,k]=(0,r.useState)(null),[A,ie]=(0,r.useState)(null),[ae,j]=(0,r.useState)(1),[oe,se]=(0,r.useState)(10),[ce,le]=(0,r.useState)(null),[ue,de]=(0,r.useState)(0),[fe,M]=(0,r.useState)(null),[N,P]=(0,r.useState)(1),[F,pe]=(0,r.useState)(10),[I,me]=(0,r.useState)(``),[L,R]=(0,r.useState)(0),[B,V]=(0,r.useState)(he),[H,U]=(0,r.useState)(`TABLE`),[W,G]=(0,r.useState)([]),[ve,ye]=(0,r.useState)([]),[be,xe]=(0,r.useState)([]),[Se,Ce]=(0,r.useState)(null),[K,Oe]=(0,r.useState)(1),[ke,Ae]=(0,r.useState)(10),[q,J]=(0,r.useState)(``),[Fe,Ue]=(0,r.useState)(0),[We,Ge]=(0,r.useState)([]),[Ke,qe]=(0,r.useState)([]),[Je,Ye]=(0,r.useState)([]),[Y,Xe]=(0,r.useState)(!1);(0,r.useEffect)(()=>{n&&d(n)},[n]);let X=n??l,Z=(0,r.useCallback)(async()=>{h(!0),p(null);try{let e=await(0,u.readOrganizationDashboard)({managerActiveOnly:v.activeOnly,managerPage:b,managerPageSize:S,managerScopeType:w.id===`ALL`?null:w.id,membershipActiveOnly:O?.activeOnly??!1,membershipOrgUnitId:A?.id??null,membershipPage:ae,membershipPageSize:oe,membershipPositionId:ce?.id??null,orgUnitPage:N,orgUnitPageSize:F,orgUnitSearchText:I,orgUnitType:B.id===`ALL`?null:B.id,positionPage:K,positionPageSize:ke,positionSearchText:q});te(await(0,a.resolveMembers)(Ie(e.memberships,e.managerResolutions))),G(e.orgUnits),R(e.orgUnitCount),ye(e.filteredOrgUnits),Ge(e.positions),Ue(e.positionCount),xe(e.filteredPositions),de(e.membershipCount),Ye(e.filteredMemberships),D(e.managerResolutionCount),qe(e.filteredManagerResolutions)}catch(e){p(et(e))}finally{h(!1)}},[v,b,S,w,O,A,ae,oe,ce,N,F,I,B,K,ke,q]);(0,r.useEffect)(()=>{Z()},[Z]);let Q=(0,r.useMemo)(()=>new Map(W.map(e=>[e.id,e])),[W]),Qe=(0,r.useMemo)(()=>new Map(We.map(e=>[e.id,e])),[We]),$=(0,r.useMemo)(()=>new Map(ee.map(e=>[e.memberId,e])),[ee]),$e=(0,r.useMemo)(()=>ve.map(e=>({...e,key:e.id,parentName:e.parentId?ze(Q.get(e.parentId)):`根節點`,typeLabel:Be(e.type)})),[ve,Q]),tt=(0,r.useMemo)(()=>be.map(e=>({...e,key:e.id})),[be]),nt=(0,r.useMemo)(()=>Je.map(e=>({...e,key:e.id,memberName:Re($.get(e.memberId)),orgUnitName:ze(Q.get(e.orgUnitId)),positionName:e.positionId?Ve(Qe.get(e.positionId)):`未指定`})),[$,Je,Q,Qe]),rt=(0,r.useMemo)(()=>Ke.map(e=>({...e,key:e.id,managerName:Re($.get(e.managerMemberId)),scopeLabel:Le(e,{membersById:$,orgUnitsById:Q,positionsById:Qe})})),[Ke,$,Q,Qe]),it=(0,r.useMemo)(()=>({render:e=>[{name:`編輯`,onClick:()=>M({record:e,type:`EDIT`})},{name:`停用`,onClick:()=>s({confirmText:`停用組織`,description:`停用「${e.name}」後,這個組織節點將不再出現在可用組織清單中。`,id:e.id,title:`停用組織節點`,type:`ORG_UNIT`}),variant:`destructive-secondary`}],variant:`base-secondary`,width:128}),[]),at=(0,r.useMemo)(()=>({render:e=>[{name:`編輯`,onClick:()=>Ce({record:e,type:`EDIT`})}],variant:`base-secondary`,width:88}),[]),ot=(0,r.useMemo)(()=>({render:e=>[{name:`編輯`,onClick:()=>k({record:e,type:`EDIT`})},{name:`刪除`,onClick:()=>s({confirmText:`刪除歸屬`,description:`刪除「${e.memberName}」在「${e.orgUnitName}」的會員歸屬。`,id:e.id,title:`刪除會員歸屬`,type:`MEMBERSHIP`}),variant:`destructive-secondary`}],variant:`base-secondary`,width:128}),[]),st=(0,r.useMemo)(()=>({render:e=>[{name:`編輯`,onClick:()=>_({record:e,type:`EDIT`})},{name:`刪除`,onClick:()=>s({confirmText:`刪除主管規則`,description:`刪除「${e.scopeLabel}」指派給「${e.managerName}」的主管解析規則。`,id:e.id,title:`刪除主管解析規則`,type:`MANAGER_RESOLUTION`}),variant:`destructive-secondary`}],variant:`base-secondary`,width:128}),[]);function ct(e){P(1),me(e)}function lt(e){P(1),V(e)}function ut(e){Oe(1),J(e)}function dt(e){j(1),ne(e)}function ft(e){j(1),ie(e)}function pt(e){j(1),le(e)}function mt(e){x(1),y(e)}function ht(e){x(1),T(e)}function gt(){Y||s(null)}async function _t(){n&&await yt(async()=>{n.type===`ORG_UNIT`&&await(0,u.deleteOrgUnit)(n.id),n.type===`MEMBERSHIP`&&await(0,u.deleteMembership)(n.id),n.type===`MANAGER_RESOLUTION`&&await(0,u.deleteManagerResolution)(n.id),s(null)})}async function vt(e){Xe(!0),p(null);try{await(0,u.commitOrgUnitTreeDraft)({moves:e.map(e=>({baseUpdatedAt:Q.get(e.orgUnitId)?.updatedAt??``,id:e.orgUnitId,parentId:e.parentId}))}),await Z()}catch(e){throw p(et(e)),e}finally{Xe(!1)}}async function yt(e){Xe(!0),p(null);try{await e(),await Z()}catch(e){p(et(e))}finally{Xe(!1)}}return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.PageHeader,{children:(0,o.jsx)(c.default,{description:`維護組織樹、職位、會員歸屬與簽核主管解析規則。`,title:`組織管理`})}),(0,o.jsx)(i.SectionGroup,{children:(0,o.jsxs)(i.Section,{tab:(0,o.jsxs)(i.Tab,{activeKey:e,onChange:e=>t(He(e)),children:[(0,o.jsx)(i.TabItem,{children:`組織樹`},`ORG_UNITS`),(0,o.jsx)(i.TabItem,{children:`職位`},`POSITIONS`),(0,o.jsx)(i.TabItem,{children:`會員歸屬`},`MEMBERSHIPS`),(0,o.jsx)(i.TabItem,{children:`簽核主管`},`MANAGERS`)]}),children:[f?(0,o.jsx)(i.Typography,{color:`text-error`,variant:`body`,children:f}):null,e===`ORG_UNITS`?(0,o.jsx)(we,{actions:it,loading:m,onCreate:()=>M({parentId:null,record:null,type:`CREATE`}),onCreateChild:e=>M({parentId:e,record:null,type:`CREATE`}),onEditOrgUnit:e=>M({record:e,type:`EDIT`}),onPageChange:P,onSaveDraft:vt,onPageSizeChange:e=>{P(1),pe(e)},onSearchTextChange:ct,onTypeFilterChange:lt,orgUnits:W,page:N,pageSize:F,rows:$e,searchText:I,saving:Y,total:L,typeFilter:B,viewMode:H,onViewModeChange:U}):null,e===`POSITIONS`?(0,o.jsx)(Te,{actions:at,loading:m,onCreate:()=>Ce({record:null,type:`CREATE`}),onPageChange:Oe,onPageSizeChange:e=>{Oe(1),Ae(e)},onSearchTextChange:ut,page:K,pageSize:ke,rows:tt,searchText:q,total:Fe}):null,e===`MEMBERSHIPS`?(0,o.jsx)(Ee,{actions:ot,loading:m,onCreate:()=>k({record:null,type:`CREATE`}),onActiveFilterChange:dt,onOrgUnitFilterChange:ft,onPageChange:j,onPageSizeChange:e=>{j(1),se(e)},onPositionFilterChange:pt,orgUnitFilter:A,orgUnits:W,page:ae,pageSize:oe,positionFilter:ce,positions:We,rows:nt,statusFilter:O,total:ue}):null,e===`MANAGERS`?(0,o.jsx)(De,{actions:st,loading:m,onCreate:()=>_({record:null,type:`CREATE`}),onActiveFilterChange:mt,onPageChange:x,onPageSizeChange:e=>{x(1),C(e)},onScopeTypeFilterChange:ht,page:b,pageSize:S,rows:rt,scopeTypeFilter:w,statusFilter:v,total:E}):null]})}),(0,o.jsx)(je,{modal:fe,onClose:()=>M(null),onSubmit:e=>yt(async()=>{fe?.type===`EDIT`&&fe.record?await(0,u.updateOrgUnit)({...e,id:fe.record.id,metadataJson:null}):await(0,u.createOrgUnit)({code:e.code??``,metadataJson:`{}`,name:e.name??``,parentId:e.parentId,type:e.type??`DEPARTMENT`}),M(null)}),orgUnits:W,saving:Y}),(0,o.jsx)(Me,{modal:Se,onClose:()=>Ce(null),onSubmit:e=>yt(async()=>{Se?.type===`EDIT`&&Se.record?await(0,u.updatePosition)({...e,id:Se.record.id,metadataJson:null}):await(0,u.createPosition)({code:e.code??``,level:e.level??0,metadataJson:`{}`,name:e.name??``}),Ce(null)}),saving:Y}),(0,o.jsx)(Ne,{membersById:$,modal:re,onClose:()=>k(null),onSubmit:e=>yt(async()=>{re?.type===`EDIT`&&re.record?await(0,u.updateMembership)({...e,id:re.record.id}):await(0,u.createMembership)({effectiveFrom:e.effectiveFrom??Ze(),effectiveTo:e.effectiveTo,isPrimary:e.isPrimary??!1,memberId:e.memberId??``,orgUnitId:e.orgUnitId??``,positionId:e.positionId}),k(null)}),orgUnits:W,positions:We,saving:Y}),(0,o.jsx)(Pe,{membersById:$,modal:g,onClose:()=>_(null),onSubmit:e=>yt(async()=>{g?.type===`EDIT`&&g.record?await(0,u.updateManagerResolution)({...e,id:g.record.id}):await(0,u.createManagerResolution)({effectiveFrom:e.effectiveFrom??Ze(),effectiveTo:e.effectiveTo,managerMemberId:e.managerMemberId??``,priority:e.priority??z,scopeId:e.scopeId??``,scopeType:e.scopeType??`MEMBER`}),_(null)}),orgUnits:W,positions:We,saving:Y}),(0,o.jsx)(i.Modal,{cancelText:`取消`,confirmButtonProps:{variant:`destructive-primary`},confirmText:X?.confirmText??``,loading:Y,modalStatusType:`error`,modalType:`standard`,onCancel:gt,onClose:gt,onConfirm:()=>void _t(),open:!!n,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:`此操作會立即套用,請確認後再繼續。`,title:X?.title??``,children:(0,o.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:X?.description??``})})]})}function we({actions:e,loading:t,onCreate:n,onCreateChild:a,onEditOrgUnit:c,onPageChange:u,onSaveDraft:d,onPageSizeChange:f,onSearchTextChange:p,onTypeFilterChange:m,onViewModeChange:h,orgUnits:g,page:_,pageSize:v,rows:y,searchText:b,saving:x,total:S,typeFilter:C,viewMode:w}){let T=(0,r.useRef)(null),[E,D]=(0,r.useState)(R),ee=w===`TABLE`?`FLOW`:`TABLE`,te=w===`TABLE`?`切換樹狀圖`:`切換表格`,O=w===`FLOW`,ne=Oe({isTreeMode:O,isTreeEditing:E.isEditing}),re=ke({isTreeMode:O,isTreeEditing:E.isEditing}),k=Ae({hasDraftChanges:E.hasDraftChanges,isTreeEditing:E.isEditing,isTreeMode:O,loading:t,saving:x}),A=(0,r.useMemo)(()=>[{dataIndex:`code`,key:`code`,title:`代碼`,width:180},{dataIndex:`name`,key:`name`,title:`名稱`,width:240},{dataIndex:`typeLabel`,key:`typeLabel`,title:`類型`,width:120},{dataIndex:`parentName`,key:`parentName`,title:`上層`,width:280},{dataIndex:`path`,key:`path`,title:`Path`,width:420}],[]);return(0,r.useEffect)(()=>{w===`TABLE`&&D(R)},[w]),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(q,{actionDisabled:k,actionIcon:re,actionLabel:ne,actions:(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.Button,{onClick:()=>h(ee),variant:`base-secondary`,children:te}),O&&E.isEditing?(0,o.jsx)(i.Button,{disabled:x,icon:l.CloseIcon,iconType:`leading`,onClick:()=>T.current?.cancelEditing(),variant:`base-secondary`,children:`取消`}):null]}),description:`組織節點使用 ltree path 維護階層,搬移節點會同步更新子節點 path。`,onCreate:()=>{if(!O){n();return}if(E.isEditing){T.current?.saveDraft();return}T.current?.startEditing()},title:`組織樹`}),w===`TABLE`?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.FilterArea,{className:L.orgFilterArea,size:`sub`,children:(0,o.jsxs)(i.FilterLine,{children:[(0,o.jsx)(i.Filter,{span:3,children:(0,o.jsx)(i.FormField,{fullWidth:!0,layout:s.FormFieldLayout.VERTICAL,name:`orgUnitSearchText`,children:(0,o.jsx)(i.Input,{fullWidth:!0,onChange:e=>p(e.target.value),placeholder:`搜尋組織名稱或代碼`,size:`sub`,value:b,variant:`base`})})}),(0,o.jsx)(i.Filter,{span:2,children:(0,o.jsx)(i.FormField,{fullWidth:!0,layout:s.FormFieldLayout.VERTICAL,name:`orgUnitTypeFilter`,children:(0,o.jsx)(i.Select,{clearable:!1,fullWidth:!0,onChange:e=>m(We(e)),options:[...V],placeholder:`類型`,size:`sub`,value:C})})})]})}),(0,o.jsx)(`div`,{className:L.tableFrame,children:(0,o.jsx)(i.Table,{actions:e,columns:A,dataSource:[...y],fullWidth:!0,loading:t,pagination:K({onPageChange:u,onPageSizeChange:f,page:_,pageSize:v,total:S}),style:{minWidth:ye}})})]}):(0,o.jsx)(j,{ref:T,onCreateChild:a,onCreateRoot:n,onEditOrgUnit:c,onSaveDraft:d,onStateChange:D,orgUnits:g,saving:x})]})}function Te({actions:e,loading:t,onCreate:n,onPageChange:a,onPageSizeChange:c,onSearchTextChange:l,page:u,pageSize:d,rows:f,searchText:p,total:m}){let h=(0,r.useMemo)(()=>[{dataIndex:`code`,key:`code`,title:`代碼`,width:180},{dataIndex:`name`,key:`name`,title:`名稱`,width:280},{dataIndex:`level`,key:`level`,title:`職等`,width:96},{dataIndex:`updatedAt`,key:`updatedAt`,title:`更新時間`,width:220}],[]);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(q,{actionLabel:`新增職位`,description:`職位提供會員歸屬與主管解析規則使用。`,onCreate:n,title:`職位`}),(0,o.jsx)(i.FilterArea,{className:L.orgFilterArea,size:`sub`,children:(0,o.jsx)(i.FilterLine,{children:(0,o.jsx)(i.Filter,{span:3,children:(0,o.jsx)(i.FormField,{fullWidth:!0,layout:s.FormFieldLayout.VERTICAL,name:`positionSearchText`,children:(0,o.jsx)(i.Input,{fullWidth:!0,onChange:e=>l(e.target.value),placeholder:`搜尋職位名稱或代碼`,size:`sub`,value:p,variant:`base`})})})})}),(0,o.jsx)(`div`,{className:L.tableFrame,children:(0,o.jsx)(i.Table,{actions:e,columns:h,dataSource:[...f],fullWidth:!0,loading:t,pagination:K({onPageChange:a,onPageSizeChange:c,page:u,pageSize:d,total:m}),style:{minWidth:be}})})]})}function Ee({actions:e,loading:t,onCreate:a,onActiveFilterChange:c,onOrgUnitFilterChange:l,onPageChange:u,onPageSizeChange:d,onPositionFilterChange:f,orgUnitFilter:p,orgUnits:m,page:h,pageSize:g,positionFilter:_,positions:v,rows:y,statusFilter:b,total:x}){let S=(0,r.useMemo)(()=>[{dataIndex:`memberName`,key:`memberName`,title:`會員`,width:280},{dataIndex:`orgUnitName`,key:`orgUnitName`,title:`組織`,width:280},{dataIndex:`positionName`,key:`positionName`,title:`職位`,width:220},{key:`isPrimary`,render:e=>e.isPrimary?`主要`:`一般`,title:`類型`,width:104},{dataIndex:`effectiveFrom`,key:`effectiveFrom`,title:`生效日`,width:140},{dataIndex:`effectiveTo`,key:`effectiveTo`,title:`結束日`,width:140}],[]),C=(0,r.useMemo)(()=>m.map(n.a),[m]),w=(0,r.useMemo)(()=>v.map(n.o),[v]);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(q,{actionLabel:`新增歸屬`,description:`會員歸屬是 BPM 內部組織權限、主管解析與條件判斷的來源。`,onCreate:a,title:`會員歸屬`}),(0,o.jsx)(i.FilterArea,{className:[L.orgFilterArea,L.membershipFilterArea].join(` `),size:`sub`,children:(0,o.jsxs)(i.FilterLine,{children:[(0,o.jsx)(i.Filter,{span:2,children:(0,o.jsx)(i.FormField,{fullWidth:!0,layout:s.FormFieldLayout.VERTICAL,name:`membershipOrgUnitFilter`,children:(0,o.jsx)(i.AutoComplete,{disabledOptionsFilter:!0,emptyText:`沒有符合的組織`,inputProps:{autoCapitalize:`none`,autoCorrect:`off`,name:`membershipOrgUnitFilter`,spellCheck:!1},mode:`single`,name:`membershipOrgUnitFilter`,onChange:e=>l(Ye(e)),options:[...C],placeholder:`全部組織`,size:`sub`,value:p})})}),(0,o.jsx)(i.Filter,{span:2,children:(0,o.jsx)(i.FormField,{fullWidth:!0,layout:s.FormFieldLayout.VERTICAL,name:`membershipPositionFilter`,children:(0,o.jsx)(i.AutoComplete,{disabledOptionsFilter:!0,emptyText:`沒有符合的職位`,inputProps:{autoCapitalize:`none`,autoCorrect:`off`,name:`membershipPositionFilter`,spellCheck:!1},mode:`single`,name:`membershipPositionFilter`,onChange:e=>f(Y(e)),options:[...w],placeholder:`全部職位`,size:`sub`,value:_})})}),(0,o.jsx)(i.Filter,{span:2,children:(0,o.jsx)(i.FormField,{fullWidth:!0,layout:s.FormFieldLayout.VERTICAL,name:`membershipStatusFilter`,children:(0,o.jsx)(i.AutoComplete,{disabledOptionsFilter:!0,emptyText:`沒有符合的狀態`,inputProps:{autoCapitalize:`none`,autoCorrect:`off`,name:`membershipStatusFilter`,spellCheck:!1},mode:`single`,name:`membershipStatusFilter`,onChange:e=>c(Je(e)),options:[...W],placeholder:`全部狀態`,size:`sub`,value:b})})})]})}),(0,o.jsx)(`div`,{className:L.tableFrame,children:(0,o.jsx)(i.Table,{actions:e,columns:S,dataSource:[...y],fullWidth:!0,loading:t,pagination:K({onPageChange:u,onPageSizeChange:d,page:h,pageSize:g,total:x}),style:{minWidth:xe}})})]})}function De({actions:e,loading:t,onCreate:n,onActiveFilterChange:a,onPageChange:c,onPageSizeChange:l,onScopeTypeFilterChange:u,page:d,pageSize:f,rows:p,scopeTypeFilter:m,statusFilter:h,total:g}){let _=(0,r.useMemo)(()=>[{dataIndex:`scopeLabel`,key:`scopeLabel`,title:`套用範圍`,width:320},{dataIndex:`managerName`,key:`managerName`,title:`簽核主管`,width:300},{dataIndex:`priority`,key:`priority`,title:`優先序`,width:96},{dataIndex:`effectiveFrom`,key:`effectiveFrom`,title:`生效日`,width:140},{dataIndex:`effectiveTo`,key:`effectiveTo`,title:`結束日`,width:140}],[]);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(q,{actionLabel:`新增主管規則`,description:`簽核主管規則獨立於組織樹 parent,解析優先序為會員、組織、職位。`,onCreate:n,title:`簽核主管`}),(0,o.jsx)(i.FilterArea,{className:L.orgFilterArea,size:`sub`,children:(0,o.jsxs)(i.FilterLine,{children:[(0,o.jsx)(i.Filter,{span:3,children:(0,o.jsx)(i.FormField,{fullWidth:!0,layout:s.FormFieldLayout.VERTICAL,name:`managerScopeTypeFilter`,children:(0,o.jsx)(i.Select,{clearable:!1,fullWidth:!0,onChange:e=>u(Ke(e)),options:[...U],placeholder:`套用範圍`,size:`sub`,value:m})})}),(0,o.jsx)(i.Filter,{span:2,children:(0,o.jsx)(i.FormField,{fullWidth:!0,layout:s.FormFieldLayout.VERTICAL,name:`managerStatusFilter`,children:(0,o.jsx)(i.Select,{clearable:!1,fullWidth:!0,onChange:e=>a(qe(e)),options:[...W],placeholder:`狀態`,size:`sub`,value:h})})})]})}),(0,o.jsx)(`div`,{className:L.tableFrame,children:(0,o.jsx)(i.Table,{actions:e,columns:_,dataSource:[...p],fullWidth:!0,loading:t,pagination:K({onPageChange:c,onPageSizeChange:l,page:d,pageSize:f,total:g}),style:{minWidth:Se}})})]})}function K({onPageChange:e,onPageSizeChange:t,page:n,pageSize:r,total:i}){return{current:n,onChange:e,onChangePageSize:t,pageSize:r,pageSizeLabel:`每頁筆數`,pageSizeOptions:[...ve],renderResultSummary:(e,t,n)=>`顯示 ${e}-${t} 筆,共 ${n} 筆`,showPageSizeOptions:!0,total:i}}function Oe({isTreeEditing:e,isTreeMode:t}){return t?e?`儲存`:`開始編輯`:`新增組織`}function ke({isTreeEditing:e,isTreeMode:t}){return t?e?l.SaveIcon:l.EditIcon:l.PlusIcon}function Ae({hasDraftChanges:e,isTreeEditing:t,isTreeMode:n,loading:r,saving:i}){return n?t?!e||i:r:!1}function q({actionDisabled:e=!1,actionIcon:t=l.PlusIcon,actionLabel:n,actions:r,description:a,onCreate:s,title:c}){return(0,o.jsxs)(`div`,{className:L.tableIntro,children:[(0,o.jsxs)(`div`,{children:[(0,o.jsx)(i.Typography,{component:`h2`,variant:`h3`,children:c}),(0,o.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:a})]}),(0,o.jsxs)(`div`,{className:L.tableIntroActions,children:[r,(0,o.jsx)(i.Button,{disabled:e,icon:t,iconType:`leading`,onClick:s,children:n})]})]})}function je({modal:e,onClose:a,onSubmit:s,orgUnits:c,saving:l}){let[u,d]=(0,r.useState)(``),[f,p]=(0,r.useState)(``),[m,h]=(0,r.useState)(null),[g,_]=(0,r.useState)(B[2]);return(0,r.useEffect)(()=>{if(!e)return;let t=e.record,r=t?.parentId??e.parentId??null,i=r?c.find(e=>e.id===r)??null:null;d(t?.code??``),p(t?.name??``),h(i?n.a(i):null),_(B.find(e=>e.id===t?.type)??B[2])},[e,c]),(0,o.jsx)(i.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!u||!f},confirmText:e?.type===`EDIT`?`儲存`:`建立`,loading:l,modalType:`standard`,onCancel:a,onClose:a,onConfirm:()=>void s({code:u,name:f,parentId:m?.id??null,type:g.id}),open:!!e,showModalFooter:!0,showModalHeader:!0,size:`regular`,title:e?.type===`EDIT`?`編輯組織`:`新增組織`,children:(0,o.jsxs)(`div`,{className:L.modalFields,children:[(0,o.jsx)(J,{label:`代碼`,name:`orgCode`,onChange:d,placeholder:`例如 FIN-TW`,value:u}),(0,o.jsx)(J,{label:`名稱`,name:`orgName`,onChange:p,placeholder:`例如 財務部`,value:f}),(0,o.jsx)(t.t,{label:`類型`,name:`orgType`,children:(0,o.jsx)(i.Select,{clearable:!1,fullWidth:!0,onChange:e=>_(Ue(e)),options:[...B],placeholder:`選擇組織類型`,value:g})}),(0,o.jsx)(t.t,{label:`上層組織`,name:`parentId`,children:(0,o.jsx)(n.n,{name:`parentId`,onChange:h,orgUnits:c.filter(t=>t.id!==e?.record?.id),placeholder:`選擇上層組織`,value:m})})]})})}function Me({modal:e,onClose:t,onSubmit:n,saving:a}){let[s,c]=(0,r.useState)(``),[l,u]=(0,r.useState)(`0`),[d,f]=(0,r.useState)(``);return(0,r.useEffect)(()=>{e&&(c(e.record?.code??``),u(String(e.record?.level??0)),f(e.record?.name??``))},[e]),(0,o.jsx)(i.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!s||!d},confirmText:e?.type===`EDIT`?`儲存`:`建立`,loading:a,modalType:`standard`,onCancel:t,onClose:t,onConfirm:()=>void n({code:s,level:Number(l),name:d}),open:!!e,showModalFooter:!0,showModalHeader:!0,size:`regular`,title:e?.type===`EDIT`?`編輯職位`:`新增職位`,children:(0,o.jsxs)(`div`,{className:L.modalFields,children:[(0,o.jsx)(J,{label:`代碼`,name:`positionCode`,onChange:c,placeholder:`例如 FIN-MGR`,value:s}),(0,o.jsx)(J,{label:`名稱`,name:`positionName`,onChange:f,placeholder:`例如 財務主管`,value:d}),(0,o.jsx)(J,{label:`職等`,name:`positionLevel`,onChange:u,placeholder:`例如 5`,value:l})]})})}function Ne({membersById:e,modal:a,onClose:s,onSubmit:c,orgUnits:l,positions:u,saving:d}){let[f,p]=(0,r.useState)(Ze()),[m,h]=(0,r.useState)(``),[g,_]=(0,r.useState)(G[1]),[v,y]=(0,r.useState)(null),[b,x]=(0,r.useState)(null),[S,C]=(0,r.useState)(null);return(0,r.useEffect)(()=>{if(!a)return;let t=a.record,r=t?e.get(t.memberId):null;p(t?.effectiveFrom??Ze()),h(t?.effectiveTo??``),_(G.find(e=>e.value===t?.isPrimary)??G[1]),y(r?n.i(r):null),x(Q(l.find(e=>e.id===t?.orgUnitId),n.a)),C(Q(u.find(e=>e.id===t?.positionId),n.o))},[e,a,l,u]),(0,o.jsx)(i.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!v||!b},confirmText:a?.type===`EDIT`?`儲存`:`建立`,loading:d,modalType:`standard`,onCancel:s,onClose:s,onConfirm:()=>void c({effectiveFrom:f,effectiveTo:m||null,isPrimary:g.value,memberId:v?.id??null,orgUnitId:b?.id??null,positionId:S?.id??null}),open:!!a,showModalFooter:!0,showModalHeader:!0,size:`regular`,title:a?.type===`EDIT`?`編輯會員歸屬`:`新增會員歸屬`,children:(0,o.jsxs)(`div`,{className:L.modalFields,children:[(0,o.jsx)(t.t,{label:`會員`,name:`memberId`,children:(0,o.jsx)(n.t,{name:`memberId`,onChange:y,placeholder:`搜尋會員姓名或信箱`,value:v})}),(0,o.jsx)(t.t,{label:`組織`,name:`orgUnitId`,children:(0,o.jsx)(n.n,{name:`orgUnitId`,onChange:x,orgUnits:l,placeholder:`選擇歸屬組織`,value:b})}),(0,o.jsx)(t.t,{label:`職位`,name:`positionId`,children:(0,o.jsx)(n.r,{name:`positionId`,onChange:C,placeholder:`選擇職位`,positions:u,value:S})}),(0,o.jsx)(t.t,{label:`歸屬類型`,name:`isPrimary`,children:(0,o.jsx)(i.Select,{clearable:!1,fullWidth:!0,onChange:e=>_(Xe(e)),options:[...G],placeholder:`選擇歸屬類型`,value:g})}),(0,o.jsx)(Fe,{label:`生效日`,name:`membershipEffectiveFrom`,onChange:p,placeholder:`YYYY-MM-DD`,value:f}),(0,o.jsx)(Fe,{label:`結束日`,name:`membershipEffectiveTo`,onChange:h,placeholder:`YYYY-MM-DD,未設定代表無期限`,value:m})]})})}function Pe({membersById:e,modal:a,onClose:s,onSubmit:c,orgUnits:l,positions:u,saving:d}){let[f,p]=(0,r.useState)(Ze()),[m,h]=(0,r.useState)(``),[g,_]=(0,r.useState)(null),[v,y]=(0,r.useState)(String(z)),[b,x]=(0,r.useState)(null),[S,C]=(0,r.useState)(null),[w,T]=(0,r.useState)(null),[E,D]=(0,r.useState)(H[0]);(0,r.useEffect)(()=>{if(!a)return;let t=a.record,r=H.find(e=>e.id===t?.scopeType)??H[0];p(t?.effectiveFrom??Ze()),h(t?.effectiveTo??``),_(Q(t?e.get(t.managerMemberId):null,n.i)),y(String(t?.priority??z)),x(r.id===`MEMBER`?Q(t?e.get(t.scopeId):null,n.i):null),C(r.id===`ORG_UNIT`?Q(l.find(e=>e.id===t?.scopeId),n.a):null),T(r.id===`POSITION`?Q(u.find(e=>e.id===t?.scopeId),n.o):null),D(r)},[e,a,l,u]);let ee=E.id===`MEMBER`?b?.id:E.id===`ORG_UNIT`?S?.id:w?.id,te=!!(E.id===`MEMBER`&&b?.id&&g?.id&&b.id===g.id);return(0,o.jsx)(i.Modal,{cancelText:`取消`,confirmButtonProps:{disabled:!g||!ee||te},confirmText:a?.type===`EDIT`?`儲存`:`建立`,loading:d,modalType:`standard`,onCancel:s,onClose:s,onConfirm:()=>void c({effectiveFrom:f,effectiveTo:m||null,managerMemberId:g?.id??null,priority:Number(v),scopeId:ee??null,scopeType:E.id}),open:!!a,showModalFooter:!0,showModalHeader:!0,size:`regular`,title:a?.type===`EDIT`?`編輯主管規則`:`新增主管規則`,children:(0,o.jsxs)(`div`,{className:L.modalFields,children:[(0,o.jsx)(t.t,{label:`套用範圍`,name:`scopeType`,children:(0,o.jsx)(i.Select,{clearable:!1,fullWidth:!0,onChange:e=>D(Ge(e)),options:[...H],placeholder:`選擇套用範圍`,value:E})}),E.id===`MEMBER`?(0,o.jsx)(t.t,{label:`會員`,name:`scopeMemberId`,children:(0,o.jsx)(n.t,{name:`scopeMemberId`,onChange:x,placeholder:`搜尋套用會員`,value:b})}):null,E.id===`ORG_UNIT`?(0,o.jsx)(t.t,{label:`組織`,name:`scopeOrgUnitId`,children:(0,o.jsx)(n.n,{name:`scopeOrgUnitId`,onChange:C,orgUnits:l,placeholder:`選擇套用組織`,value:S})}):null,E.id===`POSITION`?(0,o.jsx)(t.t,{label:`職位`,name:`scopePositionId`,children:(0,o.jsx)(n.r,{name:`scopePositionId`,onChange:T,placeholder:`選擇套用職位`,positions:u,value:w})}):null,(0,o.jsx)(t.t,{label:`簽核主管`,name:`managerMemberId`,children:(0,o.jsx)(n.t,{name:`managerMemberId`,onChange:_,placeholder:`搜尋簽核主管`,value:g})}),te?(0,o.jsx)(i.Typography,{color:`text-error`,variant:`caption`,children:`簽核主管不可設定為套用會員本人。`}):null,(0,o.jsx)(J,{hintText:`數字越大越優先,同一位成員命中多條規則時只會採用最高的那一層。建議:指定到人 200、部門主管 100、全公司通用的墊底規則 10。`,label:`優先序`,name:`managerPriority`,onChange:y,placeholder:`例如 100`,value:v}),(0,o.jsx)(Fe,{label:`生效日`,name:`managerEffectiveFrom`,onChange:p,placeholder:`YYYY-MM-DD`,value:f}),(0,o.jsx)(Fe,{label:`結束日`,name:`managerEffectiveTo`,onChange:h,placeholder:`YYYY-MM-DD,未設定代表無期限`,value:m})]})})}function J({hintText:e,label:n,name:r,onChange:a,placeholder:s,value:c}){return(0,o.jsx)(t.t,{hintText:e,label:n,name:r,children:(0,o.jsx)(i.Input,{fullWidth:!0,name:r,onChange:e=>a(e.target.value),placeholder:s,value:c})})}function Fe({label:e,name:n,onChange:r,placeholder:a,value:s}){return(0,o.jsx)(t.t,{label:e,name:n,children:(0,o.jsx)(i.DatePicker,{format:`YYYY-MM-DD`,fullWidth:!0,inputProps:{name:n},onChange:e=>r(Qe(e)),placeholder:a,value:s.trim()?s:void 0})})}function Ie(e,t){return[...new Set([...e.map(e=>e.memberId),...t.map(e=>e.managerMemberId),...t.filter(e=>e.scopeType===`MEMBER`).map(e=>e.scopeId)])]}function Le(e,t){return e.scopeType===`MEMBER`?`會員:${Re(t.membersById.get(e.scopeId))}`:e.scopeType===`ORG_UNIT`?`組織:${ze(t.orgUnitsById.get(e.scopeId))}`:`職位:${Ve(t.positionsById.get(e.scopeId))}`}function Re(e){return e?`${e.name} · ${e.email}`:`未知會員`}function ze(e){return e?`${e.name} · ${e.code}`:`未知組織`}function Be(e){return B.find(t=>t.id.toLowerCase()===e.toLowerCase())?.name??`未知類型`}function Ve(e){return e?`${e.name} · ${e.code}`:`未指定`}function He(e){return e===`MANAGERS`||e===`MEMBERSHIPS`||e===`POSITIONS`?e:`ORG_UNITS`}function Ue(e){let t=Z(e)?e:null;if(typeof t?.id==`string`){let e=t.id;return B.find(t=>t.id.toLowerCase()===e.toLowerCase())??B[2]}return B[2]}function We(e){let t=Z(e)?e:null;if(typeof t?.id==`string`){let e=t.id;return V.find(t=>t.id.toLowerCase()===e.toLowerCase())??he}return he}function Ge(e){return X(e,H,H[0])}function Ke(e){return X(e,U,ge)}function qe(e){return X(e,W,_e)}function Je(e){let t=Z(e)?e:null,n=typeof t?.id==`string`?t.id:null;return W.find(e=>e.id===n)??null}function Ye(e){let t=Z(e)?e:null,n=typeof t?.id==`string`?t.id:null,r=typeof t?.name==`string`?t.name:null;return n&&r?{id:n,name:r}:null}function Y(e){let t=Z(e)?e:null,n=typeof t?.id==`string`?t.id:null,r=typeof t?.name==`string`?t.name:null;return n&&r?{id:n,name:r}:null}function Xe(e){return X(e,G,G[1])}function X(e,t,n){let r=Z(e)?e:null,i=typeof r?.id==`string`?r.id:null;return t.find(e=>e.id===i)??n}function Z(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Q(e,t){return e?t(e):null}function Ze(){return $(new Date)}function Qe(e){let t=e?new Date(e):null;return t&&!Number.isNaN(t.getTime())?$(t):``}function $(e){return`${e.getFullYear()}-${$e(e.getMonth()+1)}-${$e(e.getDate())}`}function $e(e){return String(e).padStart(2,`0`)}function et(e){return e instanceof Error?e.message:`讀取組織資料失敗。`}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Ce}});
|
|
2
|
-
//# sourceMappingURL=orgs-Ni22buHs.cjs.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";const e=require("./chunk-CMqjfN_6.cjs"),t=require("./router-adapter--gYs13E8.cjs"),n=require("./auth-provider-4BeCw7cI.cjs"),r=require("./routes-config-fDVHmvXi.cjs"),i=require("./bpm-form-field-Bc6k4ZEO.cjs");let a=require("react"),o=require("@mezzanine-ui/react"),s=require("react/jsx-runtime"),c=require("@rytass/bpm-core-client/workflow"),l=require("@mezzanine-ui/react/moment"),u=require("@mezzanine-ui/react/Drawer");u=e.t(u,1);let d=require("@mezzanine-ui/react/Modal");d=e.t(d,1);let f=require("@mezzanine-ui/react/NotificationCenter");f=e.t(f,1);let p=require("@mezzanine-ui/react/Textarea");p=e.t(p,1);var m=(0,a.createContext)(null);function h({children:e}){let[t,n]=(0,a.useState)(!1),r=(0,a.useCallback)(()=>{n(!0)},[]),i=(0,a.useCallback)(()=>{n(!1)},[]),o=(0,a.useCallback)(()=>{n(e=>!e)},[]),c=(0,a.useMemo)(()=>({close:i,isOpen:t,open:r,toggle:o}),[i,t,r,o]);return(0,s.jsx)(m.Provider,{value:c,children:e})}function ee(){return(0,a.useContext)(m)||{close:()=>void 0,isOpen:!1,open:()=>void 0,toggle:()=>void 0}}var g=(0,a.createContext)(null);function _({children:e}){let{member:t}=n.n(),r=t?.memberId??null,[i,o]=(0,a.useState)(0),l=(0,a.useCallback)(async()=>{if(!r)return o(0),0;let e=await(0,c.readUnreadNotificationCount)(r);return o(e),e},[r]);(0,a.useEffect)(()=>{let e=!0;return(async()=>{try{let t=await l();e&&o(t)}catch{e&&o(0)}})(),()=>{e=!1}},[l]);let u=(0,a.useMemo)(()=>({refreshUnreadCount:l,unreadCount:i}),[l,i]);return(0,s.jsx)(g.Provider,{value:u,children:e})}function v(){return(0,a.useContext)(g)||{refreshUnreadCount:async()=>0,unreadCount:0}}var y=[`today`,`yesterday`,`past7Days`,`earlier`],te={earlier:`更早`,past7Days:`過去七天`,today:`今天`,yesterday:`昨天`},ne=50,re=`toggleArchived`;function ie(e){let t=se(e)!==!1;return[...e.actionable?[{id:`approve`,name:`同意`},...t?[{id:`reject`,name:`拒絕`}]:[]]:[],...e.instanceId?[{id:`view`,name:`查看案件`}]:[],...e.status===`READ`?[]:[{id:`read`,name:`標為已讀`}],e.archivedAt?{id:`unarchive`,name:`取消封存`}:{id:`archive`,name:`封存`}]}var b={APPROVED:`簽核任務已同意`,REJECTED:`簽核任務已拒絕`,RETURNED:`簽核任務已退回`,SUPERSEDED:`簽核任務已結束`,TRANSFERRED:`簽核任務已轉派`};function x(e){return e.resolution?b[e.resolution]:e.title}function ae(e){return e.resolution===`APPROVED`?`success`:e.resolution===`REJECTED`?`error`:e.resolution?`info`:C(e.type)}function S(){let e=t.r(),l=r.r(),{member:m}=n.n(),{close:h,isOpen:g}=ee(),{refreshUnreadCount:_}=v(),b=m?.memberId??null,[S,C]=(0,a.useState)([]),[se,T]=(0,a.useState)(0),[E,ce]=(0,a.useState)(1),[D,le]=(0,a.useState)(!1),[O,k]=(0,a.useState)(!1),[A,j]=(0,a.useState)(null),[M,N]=(0,a.useState)(null),[P,ue]=(0,a.useState)(`all`),[F,de]=(0,a.useState)(!1),[I,L]=(0,a.useState)(null),[R,z]=(0,a.useState)(``),[B,V]=(0,a.useState)(null),[H,U]=(0,a.useState)(``),[W,G]=(0,a.useState)(!1),K=R.trim(),q=H.trim(),J=(0,a.useCallback)(async(e,t)=>{if(!b)return!1;le(!0),j(null);try{let n=await(0,c.listNotifications)({includeArchived:F,includeRead:!0,page:e,pageSize:ne,recipientMemberId:b});return C(e=>t?[...e,...n.notifications]:n.notifications),T(n.totalCount),ce(e),await _(),!0}catch(e){return j(w(e)),!1}finally{le(!1)}},[b,F,_]);(0,a.useEffect)(()=>{!g||!b||(j(null),N(null),J(1,!1))},[g,b,J]);let fe=(0,a.useCallback)(e=>{let t=e.target.value;(t===`all`||t===`read`||t===`unread`)&&ue(t)},[]),pe=(0,a.useCallback)(async()=>{if(!(!b||O)){k(!0),j(null);try{await(0,c.markAllNotificationsRead)({recipientMemberId:b}),await J(1,!1)}catch(e){j(w(e))}finally{k(!1)}}},[O,b,J]),me=(0,a.useCallback)(()=>{D||J(E+1,!0)},[D,J,E]),Y=(0,a.useCallback)(async e=>{if(b)try{await(0,c.markNotificationRead)({id:e,readerMemberId:b}),await J(1,!1)}catch(e){j(w(e))}},[b,J]),he=(0,a.useCallback)(async e=>{if(b){j(null),N(null);try{let t=x(e);e.archivedAt?(await(0,c.unarchiveNotifications)({ids:[e.id]}),N(`已將「${t}」移出封存。`)):(await(0,c.archiveNotifications)({ids:[e.id]}),N(`已封存「${t}」。`)),await J(1,!1)}catch(e){j(w(e))}}},[b,J]),ge=(0,a.useCallback)(e=>{e.id===re&&(N(null),de(e=>!e))},[]),X=(0,a.useCallback)(async t=>{if(!(!t.instanceId||!b))try{t.status!==`READ`&&(await(0,c.markNotificationRead)({id:t.id,readerMemberId:b}),await _()),h(),e.push(l.caseDetail(t.instanceId))}catch(e){j(w(e))}},[h,b,_,e,l]),_e=(0,a.useCallback)(e=>{j(null),L(e),z(``)},[]),ve=(0,a.useCallback)(()=>{W||(L(null),z(``))},[W]),ye=(0,a.useCallback)(async()=>{let e=I;if(!(!e?.taskId||!b||W)){G(!0),j(null),N(null);try{if(await(0,c.decideTask)({action:`APPROVED`,comment:K||null,decidedByMemberId:b,taskId:e.taskId}),!await J(1,!1))return;L(null),z(``),N(`已同意「${e.title}」。`)}catch(e){j(w(e))}finally{G(!1)}}},[I,b,W,J,K]),be=(0,a.useCallback)(e=>{V(e),U(``)},[]),Z=(0,a.useCallback)(()=>{V(null),U(``)},[]),xe=(0,a.useCallback)(async()=>{let e=B;if(!(!e?.taskId||!b||!q||W)){G(!0),j(null),N(null);try{await(0,c.decideTask)({action:`REJECTED`,comment:q,decidedByMemberId:b,taskId:e.taskId}),V(null),U(``),N(`已拒絕「${e.title}」。`),await J(1,!1)}catch(e){j(w(e))}finally{G(!1)}}},[b,W,J,B,q]),Se=(0,a.useCallback)((e,t)=>{let n=t.id;n===`approve`?_e(e):n===`reject`?be(e):n===`view`?X(e):n===`read`?Y(e.id):(n===`archive`||n===`unarchive`)&&he(e)},[he,Y,X,_e,be]),Q=(0,a.useCallback)((e,t)=>!(e instanceof Node)||!t.contains(e)?!1:!(e instanceof Element&&e.closest(`button`)),[]),Ce=(0,a.useCallback)((e,t)=>{Q(t.target,t.currentTarget)&&X(e)},[X,Q]),we=(0,a.useCallback)((e,t)=>{t.key!==`Enter`&&t.key!==` `||Q(t.target,t.currentTarget)&&(t.preventDefault(),X(e))},[X,Q]),Te=(0,a.useMemo)(()=>S.filter(e=>P===`all`?!0:P===`read`?e.status===`READ`:e.status!==`READ`),[P,S]),Ee=(0,a.useMemo)(()=>{let e=new Date,t=y.reduce((e,t)=>(e[t]=[],e),{earlier:[],past7Days:[],today:[],yesterday:[]});return Te.forEach(n=>{t[oe(n.createdAt,e)].push(n)}),y.map(e=>[e,t[e]]).filter(([,e])=>e.length>0)},[Te]),$=S.length<se;return b?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(u.default,{bottomGhostActionDisabled:O||D,bottomGhostActionLoading:O,bottomGhostActionText:`全部標為已讀`,bottomOnGhostActionClick:()=>{pe()},bottomOnPrimaryActionClick:()=>{me()},bottomPrimaryActionDisabled:!$||D,bottomPrimaryActionLoading:D&&$,bottomPrimaryActionText:$?`載入更多`:`已顯示全部`,contentKey:`${P}:${F}:${S.length}`,filterAreaAllRadioLabel:`全部`,filterAreaOnRadioChange:fe,filterAreaOnSelect:ge,filterAreaOptions:[{id:re,name:F?`隱藏已封存`:`顯示已封存`}],filterAreaReadRadioLabel:`已讀`,filterAreaShow:!0,filterAreaUnreadRadioLabel:`未讀`,filterAreaValue:P,headerTitle:`通知中心`,isBottomDisplay:!0,isHeaderDisplay:!0,onClose:h,open:g,size:`medium`,children:(0,s.jsxs)(`div`,{role:`list`,children:[A?(0,s.jsx)(`p`,{role:`alert`,style:{color:`var(--mzn-color-text-error, #d92d20)`,padding:`12px 16px`},children:A}):null,M?(0,s.jsx)(`p`,{role:`status`,style:{color:`var(--mzn-color-text-success, #079455)`,padding:`12px 16px`},children:M}):null,Ee.length===0?(0,s.jsx)(`p`,{style:{color:`var(--mzn-color-text-secondary, #6b7280)`,padding:`24px 16px`,textAlign:`center`},children:D?`載入中…`:`目前沒有通知`}):null,Ee.map(([e,t])=>(0,s.jsx)(a.Fragment,{children:t.map((t,n)=>{let r=t.instanceId!==null;return(0,s.jsx)(`div`,{onClick:r?e=>{Ce(t,e)}:void 0,onKeyDown:r?e=>{we(t,e)}:void 0,role:r?`button`:void 0,style:r?{cursor:`pointer`}:void 0,tabIndex:r?0:void 0,children:(0,s.jsx)(f.default,{appendTips:t.archivedAt?`已封存`:void 0,description:t.body,onBadgeSelect:e=>{Se(t,e)},options:[...ie(t)],prependTips:n===0?te[e]:void 0,reference:t.id,severity:ae(t),showBadge:t.status!==`READ`,timeStamp:t.createdAt,title:x(t),type:`drawer`})},t.id)})},e))]})}),(0,s.jsxs)(d.default,{cancelText:`取消`,confirmText:`送出同意`,loading:W,modalType:`standard`,onCancel:ve,onClose:ve,onConfirm:()=>{ye()},open:I!==null,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:`可以留下同意說明,內容會記錄在簽核歷程;不填也可以直接送出。`,title:`簽核意見`,children:[A?(0,s.jsx)(o.Typography,{color:`text-error`,role:`alert`,variant:`body`,children:A}):null,(0,s.jsx)(i.t,{label:`簽核意見`,name:`notificationApproveComment`,children:(0,s.jsx)(p.default,{autoFocus:!0,onChange:e=>{z(e.target.value)},placeholder:`選填,例如補充核准條件或提醒事項`,rows:4,value:R})})]}),(0,s.jsx)(d.default,{cancelText:`取消`,confirmButtonProps:{disabled:!q,variant:`destructive-primary`},confirmText:`送出拒絕`,loading:W,modalStatusType:`error`,modalType:`standard`,onCancel:Z,onClose:Z,onConfirm:()=>{xe()},open:B!==null,showModalFooter:!0,showModalHeader:!0,size:`regular`,supportingText:`拒絕案件時必須留下原因,供發起人與後續追蹤查看。`,title:`拒絕原因`,children:(0,s.jsx)(p.default,{autoFocus:!0,onChange:e=>{U(e.target.value)},placeholder:`請輸入拒絕原因`,rows:4,value:H})})]}):null}function C(e){return e===`SLA_OVERDUE`?`error`:e===`SLA_WARNING`?`warning`:e===`INSTANCE_COMPLETED`?`success`:`info`}function oe(e,t){let n=new Date(e);if(Number.isNaN(n.getTime()))return`earlier`;let r=new Date(t.getFullYear(),t.getMonth(),t.getDate()),i=new Date(n.getFullYear(),n.getMonth(),n.getDate());if(i.getTime()===r.getTime())return`today`;let a=new Date(r);return a.setDate(a.getDate()-1),i.getTime()===a.getTime()?`yesterday`:(t.getTime()-n.getTime())/(1e3*60*60*24)<=7?`past7Days`:`earlier`}function w(e){return e instanceof Error?e.message:`發生未知錯誤`}function se(e){try{let t=JSON.parse(e.payloadJson);return T(t)&&typeof t.allowReject==`boolean`?t.allowReject:e.allowReject}catch{return e.allowReject}}function T(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function E({children:e,locale:t=l.CalendarLocale.ZH_TW,publicPaths:r,loginPath:i}){return(0,s.jsx)(l.CalendarConfigProviderMoment,{locale:t,children:(0,s.jsx)(n.t,{publicPaths:r,loginPath:i,children:(0,s.jsx)(_,{children:(0,s.jsxs)(h,{children:[e,(0,s.jsx)(S,{})]})})})})}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return E}});
|
|
2
|
-
//# sourceMappingURL=providers-D_zTbkQH.cjs.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";require('../users.css');const e=require("./chunk-CMqjfN_6.cjs");let t=require("react"),n=require("@mezzanine-ui/react"),r=require("@rytass/bpm-core-client"),i=require("react/jsx-runtime"),a=require("@mezzanine-ui/core/form"),o=require("@mezzanine-ui/react/ContentHeader");o=e.t(o,1);let s=require("@rytass/bpm-core-client/organization");var c={memberFilterArea:`bpm_memberFilterArea_9RB2k`,header:`bpm_header_sIEtg`,detailFields:`bpm_detailFields_TyKNL`,detailSection:`bpm_detailSection_-iLjy`,membershipList:`bpm_membershipList_5n9iq`},l=[10,20,50];function u(){let[e,u]=(0,t.useState)(null),[f,p]=(0,t.useState)([]),[m,g]=(0,t.useState)(null),[_,v]=(0,t.useState)(null),[y,b]=(0,t.useState)(null),[x,S]=(0,t.useState)(!0),[C,w]=(0,t.useState)(1),[T,E]=(0,t.useState)(10),[D,O]=(0,t.useState)(0),[k,A]=(0,t.useState)([]),[j,M]=(0,t.useState)([]),[N,P]=(0,t.useState)([]),[F,I]=(0,t.useState)(``),L=(0,t.useMemo)(()=>new Map(j.map(e=>[e.id,e])),[j]),R=(0,t.useMemo)(()=>new Map(N.map(e=>[e.id,e])),[N]),z=(0,t.useCallback)(async()=>{S(!0),b(null);try{let[e,t]=await Promise.all([(0,r.listMemberDirectoryPage)({page:C,pageSize:T,searchText:F}),(0,s.readOrganizationDashboard)()]);A(e.members),O(e.totalCount),M(t.orgUnits),P(t.positions)}catch(e){b(h(e))}finally{S(!1)}},[C,T,F]);(0,t.useEffect)(()=>{z()},[z]);let B=(0,t.useMemo)(()=>k.map(e=>({...e,key:e.memberId})),[k]),V=(0,t.useCallback)(async e=>{u(e),g(null),b(null);try{let[t,n]=await Promise.all([(0,s.listMemberships)({memberId:e.memberId}),(0,s.readResolvedManager)(e.memberId)]);p(t),v(n),g((await(0,r.resolveMembers)(n.managerMemberId?[n.managerMemberId]:[]))[0]??null)}catch(e){b(h(e))}},[]),H=(0,t.useMemo)(()=>[{dataIndex:`name`,key:`name`,title:`姓名`,width:160},{dataIndex:`email`,key:`email`,title:`信箱`,width:260}],[]),U=(0,t.useMemo)(()=>({render:()=>[{name:`檢視`,onClick:e=>{V(e)}}],variant:`base-secondary`,width:88}),[V]);function W(){u(null),g(null),p([]),v(null)}return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.PageHeader,{children:(0,i.jsx)(o.default,{description:`會員資料由 host member resolver 提供,BPM 僅維護組織歸屬與主管解析。`,title:`會員對照`})}),(0,i.jsx)(n.SectionGroup,{children:(0,i.jsxs)(n.Section,{filterArea:(0,i.jsx)(n.FilterArea,{className:c.memberFilterArea,children:(0,i.jsx)(n.FilterLine,{children:(0,i.jsx)(n.Filter,{span:3,children:(0,i.jsx)(n.FormField,{fullWidth:!0,layout:a.FormFieldLayout.VERTICAL,name:`memberSearchText`,children:(0,i.jsx)(n.Input,{fullWidth:!0,onChange:e=>{I(e.target.value),w(1)},placeholder:`搜尋姓名或信箱`,size:`sub`,value:F,variant:`base`})})})})}),children:[y?(0,i.jsx)(n.Typography,{color:`text-error`,variant:`body`,children:y}):null,(0,i.jsx)(n.Table,{actions:U,columns:H,dataSource:B,fullWidth:!0,loading:x,pagination:{current:C,onChange:e=>{w(e)},onChangePageSize:e=>{w(1),E(e)},pageSize:T,pageSizeLabel:`每頁筆數`,pageSizeOptions:l,renderResultSummary:(e,t,n)=>`顯示 ${e}-${t} 筆,共 ${n} 筆`,showPageSizeOptions:!0,total:D}})]})}),(0,i.jsx)(d,{managerProfile:m,member:e,memberships:f,onClose:W,orgUnitsById:L,positionsById:R,resolvedManager:_})]})}function d({managerProfile:e,member:t,memberships:r,onClose:a,orgUnitsById:o,positionsById:s,resolvedManager:l}){return(0,i.jsx)(n.Modal,{cancelText:`關閉`,confirmText:`關閉`,modalType:`standard`,onCancel:a,onClose:a,onConfirm:a,open:!!t,showModalFooter:!0,showModalHeader:!0,size:`regular`,title:t?.name??`會員明細`,children:t?(0,i.jsxs)(`div`,{className:c.detailFields,children:[(0,i.jsx)(n.BaseCard,{title:`基本資料`,children:(0,i.jsx)(`div`,{className:c.detailSection,children:(0,i.jsxs)(n.Typography,{variant:`body`,children:[`信箱:`,t.email]})})}),(0,i.jsx)(n.BaseCard,{title:`BPM 組織歸屬`,children:(0,i.jsx)(`div`,{className:c.membershipList,children:r.length?r.map(e=>(0,i.jsxs)(n.Typography,{variant:`body`,children:[f(o.get(e.orgUnitId)),` / `,e.positionId?p(s.get(e.positionId)):`未指定職位`,` / `,e.isPrimary?`主要`:`一般`]},e.id)):(0,i.jsx)(n.Typography,{color:`text-neutral`,variant:`body`,children:`尚未建立 BPM 組織歸屬`})})}),(0,i.jsx)(n.BaseCard,{title:`主管解析`,children:(0,i.jsx)(n.Typography,{variant:`body`,children:l?.managerMemberId?m(e):`尚未解析到主管`})})]}):null})}function f(e){return e?`${e.name} · ${e.code}`:`未知組織`}function p(e){return e?`${e.name} · ${e.code}`:`未知職位`}function m(e){return e?`${e.name} · ${e.email}`:`主管資料尚未載入`}function h(e){return e instanceof Error?e.message:`讀取會員資料失敗。`}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return u}});
|
|
2
|
-
//# sourceMappingURL=users-0HqlM_VQ.cjs.map
|