Files
DataMate/frontend/src/pages/DataManagement/Create/EditDataset.tsx
Jerry Yan 88b1383653 fix: 恢复前端发送空字符串以支持清除关联数据集
修改说明:
移除了之前将空字符串转换为 undefined 的逻辑,
现在直接发送表单值,包括空字符串。

配合后端修改(commit cc6415c):
1. 当用户选择"无关联数据集"时,发送空字符串 ""
2. 后端 handleParentChange 方法通过 normalizeParentId 将空字符串转为 null
3. Dataset.parentDatasetId 字段添加了 @TableField(updateStrategy = FieldStrategy.IGNORED)
4. 确保即使值为 null 也会被更新到数据库
2026-02-03 10:57:14 +00:00

105 lines
2.5 KiB
TypeScript

import BasicInformation from "./components/BasicInformation";
import {
queryDatasetByIdUsingGet,
updateDatasetByIdUsingPut,
} from "../dataset.api";
import { useCallback, useEffect, useState } from "react";
import { Dataset, DatasetType } from "../dataset.model";
import { App, Button, Form, Modal } from "antd";
export default function EditDataset({
open,
data,
onClose,
onRefresh,
}: {
open: boolean;
data: Dataset | null;
onClose: () => void;
onRefresh?: (showMessage?: boolean) => void;
}) {
const [form] = Form.useForm();
const { message } = App.useApp();
const [newDataset, setNewDataset] = useState({
name: "",
description: "",
datasetType: DatasetType.TEXT,
tags: [],
parentDatasetId: "",
});
const fetchDataset = useCallback(async () => {
if (!open) return;
// 如果有id,说明是编辑模式
if (data && data.id) {
const { data: newData } = await queryDatasetByIdUsingGet(data.id);
const updatedDataset = {
...newData,
type: newData.type,
tags: newData.tags.map((tag) => tag.name) || [],
parentDatasetId: newData.parentDatasetId || "",
};
setNewDataset(updatedDataset);
form.setFieldsValue(updatedDataset);
}
}, [data, form, open]);
useEffect(() => {
fetchDataset();
}, [fetchDataset]);
const handleValuesChange = (_, allValues) => {
setNewDataset((prev) => ({ ...prev, ...allValues }));
};
const handleSubmit = async () => {
const formValues = await form.validateFields();
const params = {
...formValues,
files: undefined,
};
try {
await updateDatasetByIdUsingPut(data?.id, params);
onClose();
message.success("数据集更新成功");
onRefresh?.(false);
} catch (error) {
console.error(error);
message.error("数据集更新失败,请重试");
return;
}
};
return (
<Modal
title={`编辑数据集${data?.name}`}
onCancel={onClose}
open={open}
width={600}
maskClosable={false}
footer={
<>
<Button onClick={onClose}></Button>
<Button type="primary" onClick={handleSubmit}>
</Button>
</>
}
>
<Form
form={form}
initialValues={newDataset}
onValuesChange={handleValuesChange}
layout="vertical"
>
<BasicInformation
data={newDataset}
setData={setNewDataset}
hidden={["datasetType", "dataSource"]}
/>
</Form>
</Modal>
);
}