Files
aiops/backend/static/assets/ApprovalWorkflowPage-BIrZ7eSW.js
T
attacker b553c7956d refactor(q1): src/api 全量清零 any + types/monitor 扩展输入 DTO
ROADMAP Q1 推进(前端类型安全治理 in_progress):

- src/api/ 整个目录 any 清零(含 monitor/ deploy/ 子目录 12+ 文件)
  create/update 入参 any -> Record<string, unknown> / object
  mock 桩 trace/grafana 对接 types/ 标准类型(Trace/GrafanaDashboard)
  典型接口 LdapFormData/ProbeForm 等强类型表单用 object 接收
- types/monitor.ts 扩展 ~150 行接口:
  ZabbixDatasource / AlertSilence / 7 个输入 DTO
  Trace / TraceSpan / TraceServiceMetrics / GrafanaDashboard / DashboardPanel
  HealthProbeInput

验证:
- 整个 src/api/ 目录 any=0
- ESLint no-explicit-any: 995 -> 937 (本项目此轮贡献 -58)
- tsc -b 零错误, npm run build ✓ (17.06s)
- API 回归 8/8 核心端点通过, Docker 部署 healthy
2026-06-26 03:37:56 +08:00

2 lines
24 KiB
JavaScript

import{f as Q,r as p,u as V,t as C,j as e,L as R,B as $,V as X,W as Y,X as z,v as J,Y as H,Q as K}from"./index-o4rKtKfJ.js";import{C as Z,a as ee}from"./card-6Ae5ROGi.js";import{a as S}from"./approval-CXJJf5q6.js";import{P as F}from"./plus-BXcAPnTg.js";import{S as D}from"./star-nuqYbwAt.js";import{C as se}from"./chevron-up-CZcf1jNw.js";import{P as G}from"./play-BOUTOTLk.js";import{P as ae}from"./pen-Bq7bEvmf.js";import{T as q}from"./trash-2-C2Niwqae.js";import{A as te,a as re}from"./arrow-up-jL4nMkK9.js";const oe={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"},pe={submit:H,audit:J,execute:G},le=[{value:"submit",label:"提交阶段",desc:"工单提交人"},{value:"audit",label:"审核阶段",desc:"审核人员审批"},{value:"execute",label:"执行阶段",desc:"执行人员操作"}];function ce({users:i,selectedIds:g,label:v,onToggle:b,onToggleAll:A,onClear:y,getUserName:_}){const[m,j]=p.useState(!1),k=p.useRef(null),[P,l]=p.useState({top:0,left:0,width:0}),h=()=>{if(k.current){const c=k.current.getBoundingClientRect();l({top:c.bottom+4,left:c.left,width:c.width})}};return e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:113:5",className:"relative",children:[e.jsxs("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:114:7",ref:k,type:"button",onClick:()=>{m||h(),j(!m)},className:`w-full flex items-center justify-between px-3 py-2 rounded-lg text-sm transition-colors ${g.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:124:9",className:"truncate",children:g.length===0?`${v} * 请选择`:`${v} (${g.length}人)`}),e.jsx(Y,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:127:9",className:`w-4 h-4 text-[var(--dg-text-muted)] transition-transform ${m?"rotate-180":""}`})]}),g.length>1&&e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:131:9",className:"flex flex-wrap gap-1 mt-1.5",children:g.map(c=>e.jsxs("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:133: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:[_(c),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:135:15",onClick:()=>b(c),className:"hover:text-red-400",children:e.jsx(z,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:135:84",className:"w-3 h-3"})})]},c))}),m&&e.jsxs(e.Fragment,{children:[e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:143:11",className:"fixed inset-0 z-40",onClick:()=>j(!1)}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:144: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:P.top,left:P.left,width:P.width},children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:146: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:147:15",onClick:A,className:"text-[11px] text-blue-400 hover:text-blue-300",children:g.length===i.length&&i.length>0?"取消全选":"全选"}),g.length>0&&e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:151:17",onClick:y,className:"text-[11px] text-red-400 hover:text-red-300",children:"清空"})]}),i.map(c=>{const u=g.includes(c.id);return e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:157:17",onClick:()=>b(c.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:159:19",className:`w-4 h-4 rounded border flex items-center justify-center flex-shrink-0 ${u?"bg-blue-500 border-blue-500":"border-[var(--dg-border)]"}`,children:u&&e.jsx(K,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:162:33",className:"w-3 h-3 text-white"})}),e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:164:19",className:`text-sm flex-1 ${u?"text-[var(--dg-text-primary)]":"text-[var(--dg-text-secondary)]"}`,children:c.display_name||c.username}),e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:167:19",className:"text-[10px] text-[var(--dg-text-muted)] px-1.5 py-0.5 rounded bg-[var(--dg-bg-tertiary)]",children:c.role})]},c.id)})]})]})]})}function de({workflow:i,users:g,onClose:v,onSaved:b}){const A=!!i,[y,_]=p.useState(i?.name||""),[m,j]=p.useState(i?.description||""),[k,P]=p.useState(i?.category||"resource"),[l,h]=p.useState([]),[c,u]=p.useState(!1),[E,W]=p.useState("");p.useEffect(()=>{i?.steps?.length?h(i.steps.map(s=>({name:s.name,step_type:s.step_type==="serial"||s.step_type==="parallel"?"audit":s.step_type,approver_ids:T(s.approver_ids)}))):h([{name:"提交申请",step_type:"submit",approver_ids:[]},{name:"审核",step_type:"audit",approver_ids:[]}])},[i]);const T=s=>{if(!s)return[];try{const t=JSON.parse(s);return Array.isArray(t)?t:[]}catch{return[]}},U=s=>{const t={submit:"提交",audit:"审核",execute:"执行"},r=l.filter(f=>f.step_type===s).length,x=r>0?` ${r+1}`:"";h([...l,{name:`${t[s]}${x}`,step_type:s,approver_ids:[]}])},a=s=>h(l.filter((t,r)=>r!==s)),d=(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)},o=(s,t)=>{h(l.map((r,x)=>x===s?{...r,...t}:r))},n=(s,t)=>{const r=l[s],x=r.approver_ids.includes(t);o(s,{approver_ids:x?r.approver_ids.filter(f=>f!==t):[...r.approver_ids,t]})},w=s=>{const t=g.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},N=s=>{const t=l[s],r=w(t.step_type),x=t.approver_ids.length===r.length&&r.length>0;o(s,{approver_ids:x?[]:r.map(f=>f.id)})},I=async()=>{if(!y.trim()){W("请输入流程名称");return}if(l.length===0){W("请至少添加一个步骤");return}for(let s=0;s<l.length;s++)if(l[s].step_type!=="submit"&&l[s].approver_ids.length===0){W(`步骤"${l[s].name}"需要关联至少一个审批人`);return}u(!0),W("");try{const s={name:y.trim(),description:m.trim()||null,category:k,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}))};A&&i?await S.update(i.id,s):await S.create(s),b()}catch(s){const t=s?.response?.data?.detail||"保存失败";W(t)}finally{u(!1)}},M=s=>{const t=g.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:315:5",className:"fixed inset-0 z-50 flex items-center justify-center",children:[e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:316:7",className:"absolute inset-0 bg-black/50",onClick:v}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:317: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:318: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:319:11",className:"text-base font-semibold text-[var(--dg-text-primary)]",children:A?"编辑审批流程":"新建审批流程"}),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:322: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(z,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:323:13",className:"w-4 h-4"})})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:327:9",className:"px-5 pb-5 space-y-4 pt-4",children:[E&&e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:328: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:330:11",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:331:13",children:[e.jsx("label",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:332:15",className:"block text-xs font-medium text-[var(--dg-text-secondary)] mb-1",children:"流程名称 *"}),e.jsx("input",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:333:15",className:L,value:y,onChange:s=>_(s.target.value),placeholder:"输入流程名称"})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:335:13",children:[e.jsx("label",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:336:15",className:"block text-xs font-medium text-[var(--dg-text-secondary)] mb-1",children:"所属分类"}),e.jsxs("select",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:337:15",className:L,value:k,onChange:s=>P(s.target.value),children:[e.jsx("option",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:338:17",value:"resource",children:"资源申请"}),e.jsx("option",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:339:17",value:"app",children:"应用申请"}),e.jsx("option",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:340:17",value:"permission",children:"权限审批"})]})]})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:345:11",children:[e.jsx("label",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:346:13",className:"block text-xs font-medium text-[var(--dg-text-secondary)] mb-1",children:"描述"}),e.jsx("input",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:347:13",className:L,value:m,onChange:s=>j(s.target.value),placeholder:"可选"})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:351:11",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:352:13",className:"flex items-center justify-between mb-2",children:[e.jsx("label",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:353:15",className:"text-xs font-medium text-[var(--dg-text-secondary)]",children:"流程步骤"}),e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:354:15",className:"flex items-center gap-1",children:le.map(s=>e.jsxs("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:356:19",onClick:()=>U(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:358:21",className:"w-3 h-3"}),s.label]},s.value))})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:364:13",className:"space-y-2",children:[l.map((s,t)=>{const r=B[s.step_type],x=pe[s.step_type]||J;return e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:369: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:370:21",className:"flex items-center gap-2 mb-2",children:[e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:371: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:372:25",className:`w-3.5 h-3.5 ${r.split(" ")[1]}`})}),e.jsx("input",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:374: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:f=>o(t,{name:f.target.value}),placeholder:"步骤名称"}),e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:379: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:382:23",className:"flex items-center gap-0.5 ml-1",children:[e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:383:25",onClick:()=>d(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(te,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:385:27",className:"w-3.5 h-3.5"})}),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:387:25",onClick:()=>d(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(re,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:389:27",className:"w-3.5 h-3.5"})}),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:391:25",onClick:()=>a(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:393:27",className:"w-3.5 h-3.5"})})]})]}),s.step_type!=="submit"&&e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:399:23",className:"pl-9 mt-2",children:e.jsx(ce,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:400:25",users:w(s.step_type),selectedIds:s.approver_ids,label:s.step_type==="audit"?"审核人":"执行人",onToggle:f=>n(t,f),onToggleAll:()=>N(t),onClear:()=>o(t,{approver_ids:[]}),getUserName:M})})]},t)}),l.length===0&&e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:416:17",className:"text-center py-4 text-sm text-[var(--dg-text-muted)]",children:"请点击上方按钮添加流程步骤"})]})]})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:424: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:425: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($,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:428:11",onClick:I,disabled:c,children:[c&&e.jsx(R,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:429:28",className:"w-4 h-4 animate-spin mr-1"}),A?"保存":"创建"]})]})]})]})}function ke(){const i=Q(),[g,v]=p.useState([]),[b,A]=p.useState([]),[y,_]=p.useState(!0),[m,j]=p.useState(null),[k,P]=p.useState(null),[l,h]=p.useState(void 0),c=p.useCallback(async()=>{try{_(!0),j(null);const a=await S.list(),o=(Array.isArray(a?.list)?a.list:Array.isArray(a)?a:[]).map(n=>({...n,steps:n.steps||[]}));v(o)}catch{j("获取审批流程失败")}finally{_(!1)}},[]),u=p.useCallback(async()=>{try{const a=await V.getUsers(),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:"")}));A(o)}catch{}},[]);p.useEffect(()=>{c(),u()},[c,u]);const E=p.useCallback(async a=>{try{await S.update(a.id,{is_active:!a.is_active}),v(d=>d.map(o=>o.id===a.id?{...o,is_active:!o.is_active}:o)),C.success(a.is_active?"已停用":"已启用")}catch{C.error("操作失败")}},[]),W=p.useCallback(async(a,d)=>{if(await i({title:"删除审批流程",description:`确定删除审批流程「${d}」?删除后不可恢复。`,confirmText:"删除",variant:"destructive"}))try{await S.delete(a),v(n=>n.filter(w=>w.id!==a)),C.success("已删除")}catch{C.error("删除失败")}},[i]),T=p.useCallback(async a=>{try{await S.setDefault(a),v(d=>d.map(o=>({...o,is_default:o.id===a}))),C.success("已设为默认")}catch{C.error("操作失败")}},[]),U=p.useCallback(a=>{const d=b.find(o=>o.id===a);return d?d.display_name||d.username:`#${a}`},[b]);return y?e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:525:7",className:"flex items-center justify-center h-64",children:e.jsx(R,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:526:9",className:"w-8 h-8 animate-spin text-blue-400"})}):m?e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:533: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:534:9",className:"text-sm",children:m}),e.jsx($,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:535:9",variant:"outline",onClick:c,className:"mt-3",children:"重试"})]}):e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:541:5",className:"space-y-5",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:543:7",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:544:9",children:[e.jsx("h1",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:545:11",className:"text-2xl font-semibold text-[var(--dg-text-primary)]",children:"审批流程配置"}),e.jsx("p",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:546:11",className:"text-sm text-[var(--dg-text-secondary)] mt-1",children:"为资源申请、应用申请、权限审批配置多级审批流程"})]}),e.jsxs($,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:550:9",onClick:()=>h(null),children:[e.jsx(F,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:551:11",className:"w-4 h-4 mr-1.5"}),"新建流程"]})]}),g.length===0?e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:556:9",className:"dg-card p-12 text-center",children:[e.jsx(X,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:557: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:558:11",className:"text-sm text-[var(--dg-text-muted)] mb-4",children:"暂无审批流程"}),e.jsx($,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:559:11",variant:"outline",onClick:()=>h(null),children:"创建第一个流程"})]}):e.jsx(e.Fragment,{children:e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:564:11",className:"space-y-4",children:g.map(a=>{const d=k===a.id;return e.jsx(Z,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:568:17",className:`dg-card overflow-hidden ${a.is_active?"":"opacity-50"}`,children:e.jsxs(ee,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:569:19",className:"p-5",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:570:21",className:"flex items-start justify-between",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:571:23",className:"flex-1 min-w-0",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:572:25",className:"flex items-center gap-3 mb-2 flex-wrap",children:[e.jsx("h3",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:573: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:574: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:574:154",className:"w-3 h-3"}),"默认"]}),e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:575: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:578:27",className:"text-[10px] px-1.5 py-0.5 rounded bg-blue-500/15 text-blue-400",children:oe[a.category]||a.category})]}),a.description&&e.jsx("p",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:582:44",className:"text-sm text-[var(--dg-text-secondary)] mb-1",children:a.description}),e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:583: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:585:29",className:"flex items-center gap-1",children:[e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:586: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:590:33",className:"text-[var(--dg-text-muted)] text-[10px]",children:"→"})]},n))})]}),e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:597:23",className:"flex items-center gap-1 flex-shrink-0 ml-4",children:[e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:598:25",onClick:()=>P(d?null:a.id),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-muted)] transition-colors",children:d?e.jsx(se,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:600:41",className:"w-4 h-4"}):e.jsx(Y,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:600:77",className:"w-4 h-4"})}),!a.is_default&&e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:603:27",onClick:()=>T(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:605:29",className:"w-4 h-4"})}),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:608:25",onClick:()=>E(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:611:27",className:`w-4 h-4 ${a.is_active?"":"rotate-180"}`})}),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:613:25",onClick:()=>h(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(ae,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:615:27",className:"w-4 h-4"})}),e.jsx("button",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:617:25",onClick:()=>W(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:619:27",className:"w-4 h-4"})})]})]}),d&&e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:625:23",className:"mt-4 pt-4 border-t border-[var(--dg-border)] space-y-3",children:a.steps?.map((o,n)=>{const w=(()=>{try{const N=JSON.parse(o.approver_ids||"[]");return Array.isArray(N)?N:[]}catch{return[]}})();return e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:629: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:630: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:633:31",className:"flex-1 min-w-0",children:[e.jsxs("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:634:33",className:"flex items-center gap-2 mb-1",children:[e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:635:35",className:"text-sm font-medium text-[var(--dg-text-primary)]",children:o.name}),e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:636: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})]}),w.length>0&&e.jsx("div",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:641:35",className:"flex flex-wrap gap-1",children:w.map(N=>e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:643: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(N)},N))}),w.length===0&&o.step_type!=="submit"&&e.jsx("span",{"code-path":"src/pages/ApprovalWorkflowPage.tsx:650:35",className:"text-[11px] text-red-400",children:"未关联审批人"})]})]},n)})})]})},a.id)})})}),l!==void 0&&e.jsx(de,{"code-path":"src/pages/ApprovalWorkflowPage.tsx:667:9",workflow:l,users:b,onClose:()=>h(void 0),onSaved:()=>{h(void 0),c()}})]})}export{ke as default};