Skip to content

Commit 4b9ba3a

Browse files
authored
Develop/dataset detail perf (#407)
* 🎨 perf dataset detail page * 🐛 fix dataset detail page edit button
1 parent 5acb190 commit 4b9ba3a

File tree

5 files changed

+114
-92
lines changed

5 files changed

+114
-92
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@
277277
"description": "Create, import and manage datasets",
278278
"actions": {
279279
"createDataset": "Create Dataset",
280+
"detail": "Details",
280281
"edit": "Edit",
281282
"import": "Import",
282283
"importData": "Import Data",
@@ -394,7 +395,8 @@
394395
"previewTitle": "File Preview: {{name}}",
395396
"previewEmpty": "No preview available or unsupported file type.",
396397
"previewInfoTitle": "File Info",
397-
"editTitle": "Edit Dataset - {{name}}"
398+
"editTitle": "Edit Dataset - {{name}}",
399+
"datasetDetail": "Dataset Details"
398400
},
399401
"labels": {
400402
"id": "ID",

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@
277277
"description": "创建、导入和管理数据集",
278278
"actions": {
279279
"createDataset": "创建数据集",
280+
"detail": "详情",
280281
"edit": "编辑",
281282
"import": "导入",
282283
"importData": "导入数据",
@@ -394,7 +395,8 @@
394395
"previewTitle": "文件预览:{{name}}",
395396
"previewEmpty": "暂无预览内容,或当前文件类型暂不支持预览。",
396397
"previewInfoTitle": "文件信息",
397-
"editTitle": "编辑数据集 - {{name}}"
398+
"editTitle": "编辑数据集 - {{name}}",
399+
"datasetDetail": "数据集详细信息"
398400
},
399401
"labels": {
400402
"id": "ID",

frontend/src/pages/DataManagement/Create/EditDataset.tsx

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,26 +29,21 @@ export default function EditDataset({
2929
datasetType: DatasetType.TEXT,
3030
tags: [],
3131
});
32-
const fetchDataset = async () => {
33-
if (!open) return;
34-
// 如果有id,说明是编辑模式
35-
if (data && data.id) {
36-
const { data: newData } = await queryDatasetByIdUsingGet(data.id);
32+
33+
// 当对话框打开时,使用传入的 data 初始化表单
34+
useEffect(() => {
35+
if (open && data && data.id) {
3736
const updatedDataset = {
38-
...newData,
39-
type: newData.type,
40-
tags: (newData.tags || []).map((tag) =>
37+
...data,
38+
type: data.type,
39+
tags: (data.tags || []).map((tag) =>
4140
typeof tag === "string" ? tag : tag.name
4241
),
4342
};
4443
setNewDataset(updatedDataset);
4544
form.setFieldsValue(updatedDataset);
4645
}
47-
};
48-
49-
useEffect(() => {
50-
fetchDataset();
51-
}, [data]);
46+
}, [open, data, form]);
5247

5348
const handleValuesChange = (_, allValues) => {
5449
setNewDataset({ ...newDataset, ...allValues });

frontend/src/pages/DataManagement/Detail/DatasetDetail.tsx

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { useEffect, useMemo, useState } from "react";
2-
import { Breadcrumb, App, Tabs } from "antd";
2+
import { Breadcrumb, App, Tabs, Drawer, Descriptions } from "antd";
33
import {
44
ReloadOutlined,
55
DownloadOutlined,
66
UploadOutlined,
77
EditOutlined,
88
DeleteOutlined,
9+
InfoCircleOutlined,
910
} from "@ant-design/icons";
1011
import DetailHeader from "@/components/DetailHeader";
1112
import { getDatasetTypeMap, mapDataset } from "../dataset.const";
@@ -36,6 +37,7 @@ export default function DatasetDetail() {
3637
const { t } = useTranslation();
3738
const datasetTypeMap = getDatasetTypeMap(t);
3839
const [showEditDialog, setShowEditDialog] = useState(false);
40+
const [showDetailDrawer, setShowDetailDrawer] = useState(false);
3941

4042
const [dataset, setDataset] = useState<Dataset>({} as Dataset);
4143
const filesOperation = useFilesOperation(dataset);
@@ -135,6 +137,14 @@ export default function DatasetDetail() {
135137

136138
// 数据集操作列表
137139
const operations = [
140+
{
141+
key: "detail",
142+
label: t("dataManagement.actions.detail"),
143+
icon: <InfoCircleOutlined />,
144+
onClick: () => {
145+
setShowDetailDrawer(true);
146+
},
147+
},
138148
{
139149
key: "edit",
140150
label: t("dataManagement.actions.edit"),
@@ -266,6 +276,70 @@ export default function DatasetDetail() {
266276
onClose={() => setShowEditDialog(false)}
267277
onRefresh={handleRefresh}
268278
/>
279+
<Drawer
280+
title={t("dataManagement.detail.datasetDetail")}
281+
open={showDetailDrawer}
282+
onClose={() => setShowDetailDrawer(false)}
283+
width={600}
284+
>
285+
<Descriptions
286+
layout="vertical"
287+
size="small"
288+
column={1}
289+
items={[
290+
{
291+
key: "id",
292+
label: t("dataManagement.labels.id"),
293+
children: dataset.id,
294+
},
295+
{
296+
key: "name",
297+
label: t("dataManagement.labels.name"),
298+
children: dataset.name,
299+
},
300+
{
301+
key: "description",
302+
label: t("dataManagement.labels.description"),
303+
children: dataset.description || t("dataManagement.defaults.none"),
304+
},
305+
{
306+
key: "datasetType",
307+
label: t("dataManagement.labels.type"),
308+
children: datasetTypeMap[dataset?.datasetType]?.label || t("dataManagement.defaults.unknown"),
309+
},
310+
{
311+
key: "status",
312+
label: t("dataManagement.labels.status"),
313+
children: dataset?.status?.label || t("dataManagement.defaults.unknown"),
314+
},
315+
{
316+
key: "createdBy",
317+
label: t("dataManagement.labels.creator"),
318+
children: dataset.createdBy || t("dataManagement.defaults.unknown"),
319+
},
320+
{
321+
key: "targetLocation",
322+
label: t("dataManagement.labels.storagePath"),
323+
children: dataset.targetLocation || t("dataManagement.defaults.unknown"),
324+
},
325+
{
326+
key: "pvcName",
327+
label: t("dataManagement.labels.storageName"),
328+
children: dataset.pvcName || t("dataManagement.defaults.unknown"),
329+
},
330+
{
331+
key: "createdAt",
332+
label: t("dataManagement.labels.createdAt"),
333+
children: dataset.createdAt,
334+
},
335+
{
336+
key: "updatedAt",
337+
label: t("dataManagement.labels.updatedAt"),
338+
children: dataset.updatedAt,
339+
},
340+
]}
341+
/>
342+
</Drawer>
269343
</div>
270344
);
271345
}

frontend/src/pages/DataManagement/Detail/components/Overview.tsx

Lines changed: 25 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { App, Button, Descriptions, DescriptionsProps, Modal, Table, Input, Spin } from "antd";
1+
import { App, Button, Modal, Table, Input, Spin } from "antd";
22
import { formatBytes, formatDateTime } from "@/utils/unit";
33
import { Download, Trash2, Folder, File } from "lucide-react";
44
import { getDatasetTypeMap } from "../../dataset.const";
@@ -59,70 +59,6 @@ export default function Overview({ dataset, filesOperation, fetchDataset }) {
5959
);
6060
},
6161
};
62-
// 基本信息
63-
const items: DescriptionsProps["items"] = [
64-
{
65-
key: "id",
66-
label: t("dataManagement.labels.id"),
67-
children: dataset.id,
68-
},
69-
{
70-
key: "name",
71-
label: t("dataManagement.labels.name"),
72-
children: dataset.name,
73-
},
74-
{
75-
key: "fileCount",
76-
label: t("dataManagement.labels.fileCount"),
77-
children: dataset.fileCount || 0,
78-
},
79-
{
80-
key: "size",
81-
label: t("dataManagement.labels.dataSize"),
82-
children: dataset.size || "0 B",
83-
},
84-
85-
{
86-
key: "datasetType",
87-
label: t("dataManagement.labels.type"),
88-
children: datasetTypeMap[dataset?.datasetType]?.label || t("dataManagement.defaults.unknown"),
89-
},
90-
{
91-
key: "status",
92-
label: t("dataManagement.labels.status"),
93-
children: dataset?.status?.label || t("dataManagement.defaults.unknown"),
94-
},
95-
{
96-
key: "createdBy",
97-
label: t("dataManagement.labels.creator"),
98-
children: dataset.createdBy || t("dataManagement.defaults.unknown"),
99-
},
100-
{
101-
key: "targetLocation",
102-
label: t("dataManagement.labels.storagePath"),
103-
children: dataset.targetLocation || t("dataManagement.defaults.unknown"),
104-
},
105-
{
106-
key: "pvcName",
107-
label: t("dataManagement.labels.storageName"),
108-
children: dataset.pvcName || t("dataManagement.defaults.unknown"),
109-
},
110-
{
111-
key: "createdAt",
112-
label: t("dataManagement.labels.createdAt"),
113-
children: dataset.createdAt,
114-
},
115-
{
116-
key: "updatedAt",
117-
label: t("dataManagement.labels.updatedAt"),
118-
children: dataset.updatedAt,
119-
},
120-
{
121-
key: "description",
122-
label: t("dataManagement.labels.description"),
123-
children: dataset.description || t("dataManagement.defaults.none"),
124-
},
125-
];
12662

12763
// 显示删除确认弹窗
12864
const showDeleteConfirm = (
@@ -183,8 +119,19 @@ export default function Overview({ dataset, filesOperation, fetchDataset }) {
183119
const newPath = `${currentPath}${record.fileName}/`;
184120
filesOperation.fetchFiles(newPath, 1, filesOperation.pagination.pageSize);
185121
}}
122+
className="hover:text-blue-600 transition-colors duration-200"
123+
style={{
124+
padding: 0,
125+
height: 'auto',
126+
fontWeight: 500
127+
}}
186128
>
187-
{content}
129+
<div className="flex items-center group">
130+
<Folder className="mr-2 text-blue-500 group-hover:text-blue-600 transition-colors" size={iconSize} />
131+
<span className="truncate underline-transparent group-hover:underline group-hover:text-blue-600 transition-all">
132+
{displayName}
133+
</span>
134+
</div>
188135
</Button>
189136
);
190137
}
@@ -193,8 +140,19 @@ export default function Overview({ dataset, filesOperation, fetchDataset }) {
193140
<Button
194141
type="link"
195142
onClick={() => handlePreviewFile(record)}
143+
className="hover:text-blue-600 transition-colors duration-200"
144+
style={{
145+
padding: 0,
146+
height: 'auto',
147+
fontWeight: 500
148+
}}
196149
>
197-
{content}
150+
<div className="flex items-center group">
151+
<File className="mr-2 text-black group-hover:text-blue-600 transition-colors" size={iconSize} />
152+
<span className="truncate underline-transparent group-hover:underline group-hover:text-blue-600 transition-all">
153+
{displayName}
154+
</span>
155+
</div>
198156
</Button>
199157
);
200158
},
@@ -434,15 +392,6 @@ export default function Overview({ dataset, filesOperation, fetchDataset }) {
434392
return (
435393
<>
436394
<div className=" flex flex-col gap-4">
437-
{/* 基本信息 */}
438-
<Descriptions
439-
title={t("dataManagement.detail.sectionBasicInfo")}
440-
layout="vertical"
441-
size="small"
442-
items={items}
443-
column={5}
444-
/>
445-
446395
{/* 文件列表 */}
447396
<div className="flex items-center justify-between mt-8 mb-2">
448397
<h2 className="text-base font-semibold">

0 commit comments

Comments
 (0)