Files
aiops/backend/static/assets/ApprovalWorkflowPage-BcexYBCQ.js
T
Logan.Li 0b404b4611 refactor(frontend): API 子模块化、大组件拆分与 TanStack Query hooks
P1: kubernetes/system API 拆为子目录模块,导出工具下沉到 lib/export-utils,
    http 统一 buildApiUrl/getWsBase;HostMonitor、DeploymentEdit* 拆至子组件。

P2: 新增 hooks/api(queryKeys、useTerminalSessions、useHostMonitor),
    TerminalSessionsTab 与 HostMonitor 接入 TanStack Query。

P3: 保留 services/api 路径,未迁移至 api/ 目录。
2026-06-26 00:02:29 +08:00

2 lines
24 KiB
JavaScript

import{r as c,h as j,j as e,L as R,B as T,Q as V,V as z,X as Y,t as J,W as X,P as H}from"./index-Dmami9WE.js";import{C as K,a as Z}from"./card-CIfC-8Rh.js";import{t as C}from"./index-BuEnLCjT.js";import{P as F}from"./plus-O65gX7Qz.js";import{S as D}from"./star-DRCV7Fx2.js";import{C as ee}from"./chevron-up-Cq4GPopa.js";import{P as G}from"./play-0EwQQJX_.js";import{P as se}from"./pen-0lfnZsyH.js";import{T as q}from"./trash-2-DWVnIU6o.js";import{A as ae,a as te}from"./arrow-up-DMuDiHn6.js";const re={resource:"资源申请",app:"应用申请",permission:"权限审批"},O={submit:"提交阶段",audit:"审核阶段",execute:"执行阶段"},B={submit:"bg-blue-500/15 text-blue-400 border-blue-500/30",audit:"bg-purple-500/15 text-purple-400 border-purple-500/30",execute:"bg-green-500/15 text-green-400 border-green-500/30"},oe={submit:X,audit:J,execute:G},pe=[{value:"submit",label:"提交阶段",desc:"工单提交人"},{value:"audit",label:"审核阶段",desc:"审核人员审批"},{value:"execute",label:"执行阶段",desc:"执行人员操作"}],S={list:p=>j.get("/approval-workflows",p),get:p=>j.get(`/approval-workflows/${p}`),create:p=>j.post("/approval-workflows",p),update:(p,i)=>j.put(`/approval-workflows/${p}`,i),delete:p=>j.delete(`/approval-workflows/${p}`),setDefault:p=>j.put(`/approval-workflows/${p}/default`)},le=()=>j.get("/admin/users");function ce({users:p,selectedIds:i,label:v,onToggle:W,onToggleAll:y,onClear:f,getUserName:N}){const[m,_]=c.useState(!1),b=c.useRef(null),[k,l]=c.useState({top:0,left:0,width:0}),h=()=>{if(b.current){const d=b.current.getBoundingClientRect();l({top:d.bottom+4,left:d.left,width:d.width})}};return e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:121:5",className:"relative",children:[e.jsxs("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:122:7",ref:b,type:"button",onClick:()=>{m||h(),_(!m)},className:`w-full flex items-center justify-between px-3 py-2 rounded-lg text-sm transition-colors ${i.length===0?"bg-[var(--dg-bg-tertiary)] border border-red-500/40 text-[var(--dg-text-muted)]":"bg-[var(--dg-bg-tertiary)] border border-[var(--dg-border)] text-[var(--dg-text-primary)]"}`,children:[e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:132:9",className:"truncate",children:i.length===0?`${v} * 请选择`:`${v} (${i.length}人)`}),e.jsx(z,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:135:9",className:`w-4 h-4 text-[var(--dg-text-muted)] transition-transform ${m?"rotate-180":""}`})]}),i.length>1&&e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:139:9",className:"flex flex-wrap gap-1 mt-1.5",children:i.map(d=>e.jsxs("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:141:13",className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] bg-blue-500/15 text-blue-400",children:[N(d),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:143:15",onClick:()=>W(d),className:"hover:text-red-400",children:e.jsx(Y,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:143:84",className:"w-3 h-3"})})]},d))}),m&&e.jsxs(e.Fragment,{children:[e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:151:11",className:"fixed inset-0 z-40",onClick:()=>_(!1)}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:152:11",className:"fixed z-50 bg-[var(--dg-bg-secondary)] border border-[var(--dg-border)] rounded-lg shadow-xl max-h-52 overflow-y-auto",style:{top:k.top,left:k.left,width:k.width},children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:154:13",className:"flex items-center justify-between px-3 py-2 border-b border-[var(--dg-border)]",children:[e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:155:15",onClick:y,className:"text-[11px] text-blue-400 hover:text-blue-300",children:i.length===p.length&&p.length>0?"取消全选":"全选"}),i.length>0&&e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:159:17",onClick:f,className:"text-[11px] text-red-400 hover:text-red-300",children:"清空"})]}),p.map(d=>{const w=i.includes(d.id);return e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:165:17",onClick:()=>W(d.id),className:"flex items-center gap-2.5 px-3 py-2 cursor-pointer hover:bg-[var(--dg-bg-hover)] transition-colors",children:[e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:167:19",className:`w-4 h-4 rounded border flex items-center justify-center flex-shrink-0 ${w?"bg-blue-500 border-blue-500":"border-[var(--dg-border)]"}`,children:w&&e.jsx(H,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:170:33",className:"w-3 h-3 text-white"})}),e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:172:19",className:`text-sm flex-1 ${w?"text-[var(--dg-text-primary)]":"text-[var(--dg-text-secondary)]"}`,children:d.display_name||d.username}),e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:175:19",className:"text-[10px] text-[var(--dg-text-muted)] px-1.5 py-0.5 rounded bg-[var(--dg-bg-tertiary)]",children:d.role})]},d.id)})]})]})]})}function de({workflow:p,users:i,onClose:v,onSaved:W}){const y=!!p,[f,N]=c.useState(p?.name||""),[m,_]=c.useState(p?.description||""),[b,k]=c.useState(p?.category||"resource"),[l,h]=c.useState([]),[d,w]=c.useState(!1),[E,P]=c.useState("");c.useEffect(()=>{p?.steps?.length?h(p.steps.map(s=>({name:s.name,step_type:s.step_type==="serial"||s.step_type==="parallel"?"audit":s.step_type,approver_ids:U(s.approver_ids)}))):h([{name:"提交申请",step_type:"submit",approver_ids:[]},{name:"审核",step_type:"audit",approver_ids:[]}])},[p]);const U=s=>{if(!s)return[];try{const t=JSON.parse(s);return Array.isArray(t)?t:[]}catch{return[]}},a=s=>{const t={submit:"提交",audit:"审核",execute:"执行"},r=l.filter(u=>u.step_type===s).length,x=r>0?` ${r+1}`:"";h([...l,{name:`${t[s]}${x}`,step_type:s,approver_ids:[]}])},g=s=>h(l.filter((t,r)=>r!==s)),o=(s,t)=>{const r=s+t;if(r<0||r>=l.length)return;const x=[...l];[x[s],x[r]]=[x[r],x[s]],h(x)},n=(s,t)=>{h(l.map((r,x)=>x===s?{...r,...t}:r))},$=(s,t)=>{const r=l[s],x=r.approver_ids.includes(t);n(s,{approver_ids:x?r.approver_ids.filter(u=>u!==t):[...r.approver_ids,t]})},A=s=>{const t=i.filter(r=>r.is_active!==!1);return s==="audit"?t:s==="execute"?t.filter(r=>["super_admin","k8s_admin","release_admin","resource_admin"].includes(r.role)):t},I=s=>{const t=l[s],r=A(t.step_type),x=t.approver_ids.length===r.length&&r.length>0;n(s,{approver_ids:x?[]:r.map(u=>u.id)})},M=async()=>{if(!f.trim()){P("请输入流程名称");return}if(l.length===0){P("请至少添加一个步骤");return}for(let s=0;s<l.length;s++)if(l[s].step_type!=="submit"&&l[s].approver_ids.length===0){P(`步骤"${l[s].name}"需要关联至少一个审批人`);return}w(!0),P("");try{const s={name:f.trim(),description:m.trim()||null,category:b,steps:l.map((t,r)=>({step_number:r+1,name:t.name,step_type:t.step_type,approver_ids:t.approver_ids.length>0?JSON.stringify(t.approver_ids):null,is_required:!0,timeout_hours:24,auto_approve_on_timeout:!1}))};y&&p?await S.update(p.id,s):await S.create(s),W()}catch(s){const t=s?.response?.data?.detail||"保存失败";P(t)}finally{w(!1)}},Q=s=>{const t=i.find(r=>r.id===s);return t?t.display_name||t.username:`#${s}`},L="w-full px-3 py-2 bg-[var(--dg-bg-tertiary)] border border-[var(--dg-border)] rounded-lg text-sm focus:border-blue-400 focus:outline-none transition-colors text-[var(--dg-text-primary)]";return e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:323:5",className:"fixed inset-0 z-50 flex items-center justify-center",children:[e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:324:7",className:"absolute inset-0 bg-black/50",onClick:v}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:325:7",className:"relative bg-[var(--dg-bg-secondary)] rounded-xl shadow-2xl w-full max-w-2xl max-h-[90vh] overflow-y-auto m-4",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:326:9",className:"flex items-center justify-between px-5 py-4 border-b border-[var(--dg-border)]",children:[e.jsx("h2",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:327:11",className:"text-base font-semibold text-[var(--dg-text-primary)]",children:y?"编辑审批流程":"新建审批流程"}),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:330:11",onClick:v,className:"p-1.5 rounded-lg hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)] transition-colors",children:e.jsx(Y,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:331:13",className:"w-4 h-4"})})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:335:9",className:"px-5 pb-5 space-y-4 pt-4",children:[E&&e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:336:21",className:"px-3 py-2 text-sm text-red-400 bg-red-500/10 rounded-lg",children:E}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:338:11",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:339:13",children:[e.jsx("label",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:340:15",className:"block text-xs font-medium text-[var(--dg-text-secondary)] mb-1",children:"流程名称 *"}),e.jsx("input",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:341:15",className:L,value:f,onChange:s=>N(s.target.value),placeholder:"输入流程名称"})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:343:13",children:[e.jsx("label",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:344:15",className:"block text-xs font-medium text-[var(--dg-text-secondary)] mb-1",children:"所属分类"}),e.jsxs("select",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:345:15",className:L,value:b,onChange:s=>k(s.target.value),children:[e.jsx("option",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:346:17",value:"resource",children:"资源申请"}),e.jsx("option",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:347:17",value:"app",children:"应用申请"}),e.jsx("option",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:348:17",value:"permission",children:"权限审批"})]})]})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:353:11",children:[e.jsx("label",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:354:13",className:"block text-xs font-medium text-[var(--dg-text-secondary)] mb-1",children:"描述"}),e.jsx("input",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:355:13",className:L,value:m,onChange:s=>_(s.target.value),placeholder:"可选"})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:359:11",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:360:13",className:"flex items-center justify-between mb-2",children:[e.jsx("label",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:361:15",className:"text-xs font-medium text-[var(--dg-text-secondary)]",children:"流程步骤"}),e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:362:15",className:"flex items-center gap-1",children:pe.map(s=>e.jsxs("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:364:19",onClick:()=>a(s.value),className:"flex items-center gap-1 px-2 py-1 text-[11px] font-medium bg-blue-500/10 text-blue-400 hover:bg-blue-500/20 rounded transition-colors",children:[e.jsx(F,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:366:21",className:"w-3 h-3"}),s.label]},s.value))})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:372:13",className:"space-y-2",children:[l.map((s,t)=>{const r=B[s.step_type],x=oe[s.step_type]||J;return e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:377:19",className:"p-3 bg-[var(--dg-bg-primary)] rounded-lg border border-[var(--dg-border)]",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:378:21",className:"flex items-center gap-2 mb-2",children:[e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:379:23",className:`w-7 h-7 rounded-md flex items-center justify-center flex-shrink-0 ${r.split(" ")[0]}`,children:e.jsx(x,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:380:25",className:`w-3.5 h-3.5 ${r.split(" ")[1]}`})}),e.jsx("input",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:382:23",className:"flex-1 px-2 py-1 bg-[var(--dg-bg-tertiary)] border border-[var(--dg-border)] rounded text-sm focus:border-blue-400 focus:outline-none text-[var(--dg-text-primary)]",value:s.name,onChange:u=>n(t,{name:u.target.value}),placeholder:"步骤名称"}),e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:387:23",className:`text-[10px] px-1.5 py-0.5 rounded ${r}`,children:O[s.step_type]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:390:23",className:"flex items-center gap-0.5 ml-1",children:[e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:391:25",onClick:()=>o(t,-1),disabled:t===0,className:"p-1 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-muted)] disabled:opacity-20 transition-colors",children:e.jsx(ae,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:393:27",className:"w-3.5 h-3.5"})}),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:395:25",onClick:()=>o(t,1),disabled:t===l.length-1,className:"p-1 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-muted)] disabled:opacity-20 transition-colors",children:e.jsx(te,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:397:27",className:"w-3.5 h-3.5"})}),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:399:25",onClick:()=>g(t),className:"p-1 rounded hover:bg-red-500/10 text-[var(--dg-text-muted)] hover:text-red-400 transition-colors",children:e.jsx(q,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:401:27",className:"w-3.5 h-3.5"})})]})]}),s.step_type!=="submit"&&e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:407:23",className:"pl-9 mt-2",children:e.jsx(ce,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:408:25",users:A(s.step_type),selectedIds:s.approver_ids,label:s.step_type==="audit"?"审核人":"执行人",onToggle:u=>$(t,u),onToggleAll:()=>I(t),onClear:()=>n(t,{approver_ids:[]}),getUserName:Q})})]},t)}),l.length===0&&e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:424:17",className:"text-center py-4 text-sm text-[var(--dg-text-muted)]",children:"请点击上方按钮添加流程步骤"})]})]})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:432:9",className:"flex items-center justify-end gap-3 px-5 py-4 border-t border-[var(--dg-border)]",children:[e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:433:11",onClick:v,className:"px-4 py-2 text-sm text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-hover)] rounded-lg transition-colors",children:"取消"}),e.jsxs(T,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:436:11",onClick:M,disabled:d,children:[d&&e.jsx(R,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:437:28",className:"w-4 h-4 animate-spin mr-1"}),y?"保存":"创建"]})]})]})]})}function ke(){const[p,i]=c.useState([]),[v,W]=c.useState([]),[y,f]=c.useState(!0),[N,m]=c.useState(null),[_,b]=c.useState(null),[k,l]=c.useState(void 0),h=c.useCallback(async()=>{try{f(!0),m(null);const a=await S.list(),o=(Array.isArray(a?.list)?a.list:Array.isArray(a)?a:[]).map(n=>({...n,steps:n.steps||[]}));i(o)}catch{m("获取审批流程失败")}finally{f(!1)}},[]),d=c.useCallback(async()=>{try{const a=await le(),o=(Array.isArray(a?.list)?a.list:Array.isArray(a)?a:[]).map(n=>({...n,role:n.role||(Array.isArray(n.roles)&&n.roles.length>0?n.roles[0].code:"")}));W(o)}catch{}},[]);c.useEffect(()=>{h(),d()},[h,d]);const w=c.useCallback(async a=>{try{await S.update(a.id,{is_active:!a.is_active}),i(g=>g.map(o=>o.id===a.id?{...o,is_active:!o.is_active}:o)),C.success(a.is_active?"已停用":"已启用")}catch{C.error("操作失败")}},[]),E=c.useCallback(async(a,g)=>{if(window.confirm(`确定删除审批流程「${g}」?删除后不可恢复。`))try{await S.delete(a),i(o=>o.filter(n=>n.id!==a)),C.success("已删除")}catch{C.error("删除失败")}},[]),P=c.useCallback(async a=>{try{await S.setDefault(a),i(g=>g.map(o=>({...o,is_default:o.id===a}))),C.success("已设为默认")}catch{C.error("操作失败")}},[]),U=c.useCallback(a=>{const g=v.find(o=>o.id===a);return g?g.display_name||g.username:`#${a}`},[v]);return y?e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:526:7",className:"flex items-center justify-center h-64",children:e.jsx(R,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:527:9",className:"w-8 h-8 animate-spin text-blue-400"})}):N?e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:534:7",className:"flex flex-col items-center justify-center h-64 text-[var(--dg-text-muted)]",children:[e.jsx("p",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:535:9",className:"text-sm",children:N}),e.jsx(T,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:536:9",variant:"outline",onClick:h,className:"mt-3",children:"重试"})]}):e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:542:5",className:"space-y-5",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:544:7",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:545:9",children:[e.jsx("h1",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:546:11",className:"text-2xl font-semibold text-[var(--dg-text-primary)]",children:"审批流程配置"}),e.jsx("p",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:547:11",className:"text-sm text-[var(--dg-text-secondary)] mt-1",children:"为资源申请、应用申请、权限审批配置多级审批流程"})]}),e.jsxs(T,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:551:9",onClick:()=>l(null),children:[e.jsx(F,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:552:11",className:"w-4 h-4 mr-1.5"}),"新建流程"]})]}),p.length===0?e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:557:9",className:"dg-card p-12 text-center",children:[e.jsx(V,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:558:11",className:"w-12 h-12 mx-auto mb-3 opacity-50 text-[var(--dg-text-muted)]"}),e.jsx("p",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:559:11",className:"text-sm text-[var(--dg-text-muted)] mb-4",children:"暂无审批流程"}),e.jsx(T,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:560:11",variant:"outline",onClick:()=>l(null),children:"创建第一个流程"})]}):e.jsx(e.Fragment,{children:e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:565:11",className:"space-y-4",children:p.map(a=>{const g=_===a.id;return e.jsx(K,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:569:17",className:`dg-card overflow-hidden ${a.is_active?"":"opacity-50"}`,children:e.jsxs(Z,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:570:19",className:"p-5",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:571:21",className:"flex items-start justify-between",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:572:23",className:"flex-1 min-w-0",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:573:25",className:"flex items-center gap-3 mb-2 flex-wrap",children:[e.jsx("h3",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:574:27",className:"text-lg font-semibold text-[var(--dg-text-primary)]",children:a.name}),a.is_default&&e.jsxs("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:575:45",className:"text-[10px] px-1.5 py-0.5 rounded bg-yellow-400/15 text-yellow-400 flex items-center gap-1",children:[e.jsx(D,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:575:154",className:"w-3 h-3"}),"默认"]}),e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:576:27",className:`text-[10px] px-1.5 py-0.5 rounded ${a.is_active?"bg-green-500/15 text-green-400":"bg-red-500/15 text-red-400"}`,children:a.is_active?"启用":"停用"}),e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:579:27",className:"text-[10px] px-1.5 py-0.5 rounded bg-blue-500/15 text-blue-400",children:re[a.category]||a.category})]}),a.description&&e.jsx("p",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:583:44",className:"text-sm text-[var(--dg-text-secondary)] mb-1",children:a.description}),e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:584:25",className:"flex items-center gap-1.5 mt-2 flex-wrap",children:a.steps?.map((o,n)=>e.jsxs("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:586:29",className:"flex items-center gap-1",children:[e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:587:31",className:`text-[10px] px-1.5 py-0.5 rounded ${B[o.step_type]||"bg-gray-500/15 text-gray-400 border-gray-500/30"}`,children:O[o.step_type]||o.step_type}),n<(a.steps?.length||0)-1&&e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:591:33",className:"text-[var(--dg-text-muted)] text-[10px]",children:"→"})]},n))})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:598:23",className:"flex items-center gap-1 flex-shrink-0 ml-4",children:[e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:599:25",onClick:()=>b(g?null:a.id),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-muted)] transition-colors",children:g?e.jsx(ee,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:601:41",className:"w-4 h-4"}):e.jsx(z,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:601:77",className:"w-4 h-4"})}),!a.is_default&&e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:604:27",onClick:()=>P(a.id),className:"p-1.5 rounded hover:bg-yellow-500/10 text-[var(--dg-text-muted)] hover:text-yellow-400 transition-colors",title:"设为默认",children:e.jsx(D,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:606:29",className:"w-4 h-4"})}),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:609:25",onClick:()=>w(a),className:`p-1.5 rounded transition-colors ${a.is_active?"hover:bg-red-500/10 text-green-400 hover:text-red-400":"hover:bg-green-500/10 text-red-400 hover:text-green-400"}`,title:a.is_active?"停用":"启用",children:e.jsx(G,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:612:27",className:`w-4 h-4 ${a.is_active?"":"rotate-180"}`})}),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:614:25",onClick:()=>l(a),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-muted)] hover:text-blue-400 transition-colors",title:"编辑",children:e.jsx(se,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:616:27",className:"w-4 h-4"})}),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:618:25",onClick:()=>E(a.id,a.name),className:"p-1.5 rounded hover:bg-red-500/10 text-[var(--dg-text-muted)] hover:text-red-400 transition-colors",title:"删除",children:e.jsx(q,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:620:27",className:"w-4 h-4"})})]})]}),g&&e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:626:23",className:"mt-4 pt-4 border-t border-[var(--dg-border)] space-y-3",children:a.steps?.map((o,n)=>{const $=(()=>{try{const A=JSON.parse(o.approver_ids||"[]");return Array.isArray(A)?A:[]}catch{return[]}})();return e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:630:29",className:"flex items-start gap-3 p-3 bg-[var(--dg-bg-primary)] rounded-lg",children:[e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:631:31",className:"w-6 h-6 rounded-full bg-[var(--dg-bg-tertiary)] flex items-center justify-center text-xs font-medium text-[var(--dg-text-secondary)] flex-shrink-0 mt-0.5",children:o.step_number}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:634:31",className:"flex-1 min-w-0",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:635:33",className:"flex items-center gap-2 mb-1",children:[e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:636:35",className:"text-sm font-medium text-[var(--dg-text-primary)]",children:o.name}),e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:637:35",className:`text-[10px] px-1.5 py-0.5 rounded ${B[o.step_type]||"bg-gray-500/15 text-gray-400 border-gray-500/30"}`,children:O[o.step_type]||o.step_type})]}),$.length>0&&e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:642:35",className:"flex flex-wrap gap-1",children:$.map(A=>e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:644:39",className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] bg-blue-500/15 text-blue-400",children:U(A)},A))}),$.length===0&&o.step_type!=="submit"&&e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:651:35",className:"text-[11px] text-red-400",children:"未关联审批人"})]})]},n)})})]})},a.id)})})}),k!==void 0&&e.jsx(de,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:668:9",workflow:k,users:v,onClose:()=>l(void 0),onSaved:()=>{l(void 0),h()}})]})}export{ke as default};