R7E-16E/R7E-16F 高风险操作确认统一

这个提交包含在:
2026-05-15 22:55:00 +08:00
父节点 5c38d810c1
当前提交 bf791d7a67
共修改 18 个文件,包含 979 行新增和 68 行删除
+40 -2
查看文件
@@ -9,6 +9,7 @@ import {
type WorkflowDefinitionEditorModel,
} from "../api/workflowDefinitions";
import { ListWorkspace, WorkspaceHeader } from "../components/patterns/ListWorkspace";
import { ActionConfirmDialog } from "../components/common/ActionConfirmDialog";
import { Button } from "../components/ui/button";
import { Input } from "../components/ui/input";
import { Label } from "../components/ui/label";
@@ -29,6 +30,11 @@ export function WorkflowDefinitionsPage() {
const [name, setName] = useState("");
const [notes, setNotes] = useState("");
const [steps, setSteps] = useState<DraftStep[]>([emptyStep()]);
const [confirmDefinitionAction, setConfirmDefinitionAction] = useState<{
action: "publish" | "archive";
id: string;
name: string;
} | null>(null);
const listQuery = useQuery({ queryKey: ["workflow-definitions"], queryFn: () => fetchWorkflowDefinitions() });
const items = listQuery.data?.items ?? [];
@@ -114,8 +120,21 @@ export function WorkflowDefinitionsPage() {
{selected.status !== "derived_readonly" ? (
<div className="flex gap-2">
<Button type="button" variant="secondary" onClick={() => saveMutation.mutate(selected.id)} disabled={selected.status !== "draft"}>保存</Button>
<Button type="button" onClick={() => publishMutation.mutate(selected.id)} disabled={selected.status === "archived"}>发布</Button>
<Button type="button" variant="secondary" onClick={() => archiveMutation.mutate(selected.id)} disabled={selected.status === "archived"}>归档</Button>
<Button
type="button"
onClick={() => setConfirmDefinitionAction({ action: "publish", id: selected.id, name: selected.name })}
disabled={selected.status === "archived"}
>
发布
</Button>
<Button
type="button"
variant="secondary"
onClick={() => setConfirmDefinitionAction({ action: "archive", id: selected.id, name: selected.name })}
disabled={selected.status === "archived"}
>
归档
</Button>
</div>
) : null}
</div>
@@ -163,6 +182,25 @@ export function WorkflowDefinitionsPage() {
)}
</div>
</div>
<ActionConfirmDialog
open={Boolean(confirmDefinitionAction)}
onOpenChange={(open) => {
if (!open) setConfirmDefinitionAction(null);
}}
kind={confirmDefinitionAction?.action === "archive" ? "archive" : "submit"}
targetName={confirmDefinitionAction?.name}
title={confirmDefinitionAction?.action === "archive" ? "确认归档流程定义" : "确认发布流程定义"}
description={
confirmDefinitionAction?.action === "archive"
? "归档后该流程定义不再用于新流程,历史流程不回写。"
: "发布后该流程定义会参与后续新提交业务的审批解析,历史流程不回写。"
}
onConfirm={async () => {
if (!confirmDefinitionAction) return;
if (confirmDefinitionAction.action === "publish") publishMutation.mutate(confirmDefinitionAction.id);
if (confirmDefinitionAction.action === "archive") archiveMutation.mutate(confirmDefinitionAction.id);
}}
/>
</ListWorkspace>
);
}