update:Dialog替换

This commit is contained in:
xiaozhu
2026-09-02 10:10:41 +08:00
committed by tao.chen
parent ed58344add
commit d0f0fd2922
16 changed files with 738 additions and 675 deletions
@@ -4,6 +4,7 @@ import { Plus, Search } from "lucide-react";
import { ApiRequestError, type Employee, type Workspace, type WorkspaceMember } from "../../services/api";
import { useApi, useAuth } from "../../context/AuthContext";
import { Button } from "~/components/ui/button";
import { ConfirmDialog } from "~/components/common/ConfirmDialog";
import {
Table,
TableBody,
@@ -52,6 +53,7 @@ export function ProjectManagementPage({
const [membersDrawerOpen, setMembersDrawerOpen] = useState(false);
const [currentProjectMembers, setCurrentProjectMembers] = useState<WorkspaceMember[]>([]);
const [membersLoading, setMembersLoading] = useState(false);
const [deleteTarget, setDeleteTarget] = useState<Workspace | null>(null);
const canManage = user?.role_code === "admin";
@@ -138,8 +140,7 @@ export function ProjectManagementPage({
}
};
const deleteProject = async (project: Workspace): Promise<void> => {
if (!window.confirm(`确定要删除项目"${project.workspace_name}"吗?此操作将级联软删所有成员。`)) return;
const executeDeleteProject = async (project: Workspace): Promise<void> => {
try {
await api.deleteWorkspace(project.workspace_id);
setProjects((current) => current.filter((p) => p.workspace_id !== project.workspace_id));
@@ -332,7 +333,7 @@ export function ProjectManagementPage({
className="is-danger"
disabled={!canManage || project.status === "disabled"}
title={project.status === "disabled" ? "已删除的项目不能操作" : "删除项目"}
onClick={() => void deleteProject(project)}
onClick={() => setDeleteTarget(project)}
>
</button>
@@ -382,6 +383,26 @@ export function ProjectManagementPage({
onRemoveMember={(userId) => void removeMember(userId)}
onNotify={onNotify}
/>
<ConfirmDialog
open={deleteTarget !== null}
onOpenChange={(nextOpen) => {
if (!nextOpen) setDeleteTarget(null);
}}
title="确定删除项目?"
description={
deleteTarget
? `确定要删除项目"${deleteTarget.workspace_name}"吗?此操作将级联软删所有成员。`
: ""
}
confirmLabel="删除"
destructive
onConfirm={async () => {
if (!deleteTarget) return;
await executeDeleteProject(deleteTarget);
setDeleteTarget(null);
}}
/>
</section>
);
}