Skip to content

Commit a797104

Browse files
authored
💄 change delete prompt Notification to Modal (#382)
1 parent e0273dc commit a797104

File tree

3 files changed

+44
-22
lines changed

3 files changed

+44
-22
lines changed

frontend/src/i18n/locales/en/common.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
"stopSuccess": "Task stop request sent",
9191
"deleteSuccess": "Task deleted",
9292
"deleteConfirm": "Are you sure you want to delete this task? This action cannot be undone.",
93+
"deleteConfirmMessage": "Are you sure you want to delete task \"{{taskName}}\"? This action cannot be undone.",
9394
"confirmDelete": "Delete",
9495
"cancel": "Cancel"
9596
}

frontend/src/i18n/locales/zh/common.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
"stopSuccess": "任务停止请求已发送",
9191
"deleteSuccess": "任务已删除",
9292
"deleteConfirm": "确定要删除该任务吗?此操作不可撤销。",
93+
"deleteConfirmMessage": "确定要删除任务「{{taskName}}」吗?删除后将无法恢复。",
9394
"confirmDelete": "删除",
9495
"cancel": "取消"
9596
}

frontend/src/pages/DataCollection/Home/TaskManagement.tsx

Lines changed: 42 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { App, Button, Card, Popconfirm, Table, Tag, Tooltip } from "antd";
1+
import { App, Button, Card, Modal, Table, Tag, Tooltip } from "antd";
22
import {
33
DeleteOutlined,
44
PauseCircleOutlined,
@@ -17,13 +17,24 @@ import { getStatusMap, mapCollectionTask } from "../collection.const";
1717
import useFetchData from "@/hooks/useFetchData";
1818
import { useNavigate } from "react-router";
1919
import { useTranslation } from "react-i18next";
20-
import { useEffect } from "react";
20+
import { useEffect, useState } from "react";
2121

2222
export default function TaskManagement() {
2323
const { message } = App.useApp();
2424
const navigate = useNavigate();
2525
const { t } = useTranslation();
2626
const statusMap = getStatusMap(t);
27+
28+
// 删除确认弹窗状态
29+
const [deleteModal, setDeleteModal] = useState<{
30+
visible: boolean;
31+
taskId: string;
32+
taskName: string;
33+
}>({
34+
visible: false,
35+
taskId: "",
36+
taskName: "",
37+
});
2738
const filters = [
2839
{
2940
key: "status",
@@ -78,9 +89,18 @@ export default function TaskManagement() {
7889
const handleDeleteTask = async (taskId: string) => {
7990
await deleteTaskByIdUsingDelete(taskId);
8091
message.success(t("dataCollection.taskManagement.messages.deleteSuccess"));
92+
setDeleteModal({ visible: false, taskId: "", taskName: "" });
8193
fetchData();
8294
};
8395

96+
const showDeleteConfirm = (taskId: string, taskName: string) => {
97+
setDeleteModal({ visible: true, taskId, taskName });
98+
};
99+
100+
const handleCancelDelete = () => {
101+
setDeleteModal({ visible: false, taskId: "", taskName: "" });
102+
};
103+
84104
const taskOperations = (record: CollectionTask) => {
85105
const isStopped = record.status === TaskStatus.STOPPED;
86106
const startButton = {
@@ -110,13 +130,13 @@ export default function TaskManagement() {
110130
label: t("dataCollection.taskManagement.actions.delete"),
111131
danger: true,
112132
icon: <DeleteOutlined />,
113-
confirm: {
133+
modal: {
114134
title: t("dataCollection.taskManagement.messages.deleteConfirm"),
115135
okText: t("dataCollection.taskManagement.messages.confirmDelete"),
116136
cancelText: t("dataCollection.taskManagement.messages.cancel"),
117137
okType: "danger",
118138
},
119-
onClick: () => handleDeleteTask(record.id),
139+
onClick: () => showDeleteConfirm(record.id, record.name),
120140
},
121141
];
122142
};
@@ -203,7 +223,7 @@ export default function TaskManagement() {
203223
fixed: "right" as const,
204224
render: (_: any, record: CollectionTask) => {
205225
return taskOperations(record).map((op) => {
206-
const button = (
226+
return (
207227
<Tooltip key={op.key} title={op.label}>
208228
<Button
209229
type="text"
@@ -213,23 +233,6 @@ export default function TaskManagement() {
213233
/>
214234
</Tooltip>
215235
);
216-
if (op.confirm) {
217-
return (
218-
<Popconfirm
219-
key={op.key}
220-
title={op.confirm.title}
221-
okText={op.confirm.okText}
222-
cancelText={op.confirm.cancelText}
223-
okType={op.danger ? "danger" : "primary"}
224-
onConfirm={() => op.onClick()}
225-
>
226-
<Tooltip key={op.key} title={op.label}>
227-
<Button type="text" icon={op.icon} danger={op?.danger} />
228-
</Tooltip>
229-
</Popconfirm>
230-
);
231-
}
232-
return button;
233236
});
234237
},
235238
},
@@ -279,6 +282,23 @@ export default function TaskManagement() {
279282
scroll={{ x: "max-content", y: "calc(100vh - 25rem)" }}
280283
/>
281284
</Card>
285+
286+
{/* 删除确认弹窗 */}
287+
<Modal
288+
title={t("dataCollection.taskManagement.messages.deleteConfirm")}
289+
open={deleteModal.visible}
290+
onOk={() => handleDeleteTask(deleteModal.taskId)}
291+
onCancel={handleCancelDelete}
292+
okType="danger"
293+
okText={t("dataCollection.taskManagement.messages.confirmDelete")}
294+
cancelText={t("dataCollection.taskManagement.messages.cancel")}
295+
>
296+
<p>
297+
{t("dataCollection.taskManagement.messages.deleteConfirmMessage", {
298+
taskName: deleteModal.taskName,
299+
})}
300+
</p>
301+
</Modal>
282302
</div>
283303
);
284304
}

0 commit comments

Comments
 (0)