import { useEffect, useState } from "react"; import { Button, DatePicker, Form, Input, message, Modal, Select } from "antd"; import { PlusOutlined } from "@ant-design/icons"; import dayjs from "dayjs"; import { createKnowledgeSetUsingPost, updateKnowledgeSetByIdUsingPut, } from "../knowledge-management.api"; import { knowledgeSourceTypeOptions, knowledgeStatusOptions, } from "../knowledge-management.const"; import { KnowledgeSet, KnowledgeStatusType, } from "../knowledge-management.model"; import { queryDatasetTagsUsingGet } from "@/pages/DataManagement/dataset.api"; export default function CreateKnowledgeSet({ isEdit, data, showBtn = true, onUpdate, onClose, }: { isEdit?: boolean; showBtn?: boolean; data?: Partial | null; onUpdate: () => void; onClose: () => void; }) { const [open, setOpen] = useState(false); const [form] = Form.useForm(); const [tagOptions, setTagOptions] = useState<{ label: string; value: string }[]>([]); const fetchTags = async () => { try { const { data: tagData } = await queryDatasetTagsUsingGet(); const options = Array.isArray(tagData) ? tagData.map((tag) => ({ label: tag.name, value: tag.name })) : []; setTagOptions(options); } catch (error) { console.error("获取标签失败", error); } }; useEffect(() => { if (open) { fetchTags(); } }, [open]); useEffect(() => { if (isEdit && data) { setOpen(true); form.setFieldsValue({ name: data.name, description: data.description, status: data.status ?? KnowledgeStatusType.DRAFT, domain: data.domain, businessLine: data.businessLine, owner: data.owner, validFrom: data.validFrom ? dayjs(data.validFrom) : null, validTo: data.validTo ? dayjs(data.validTo) : null, sourceType: data.sourceType, sensitivity: data.sensitivity, tags: data.tags?.map((tag) => tag.name) || [], metadata: data.metadata, }); } }, [isEdit, data, form]); const handleSubmit = async () => { try { const values = await form.validateFields(); const validFrom = values.validFrom ? values.validFrom.format("YYYY-MM-DD") : undefined; const validTo = values.validTo ? values.validTo.format("YYYY-MM-DD") : undefined; if (validFrom && validTo && dayjs(validFrom).isAfter(dayjs(validTo))) { message.warning("有效期开始不能晚于结束时间"); return; } const payload = { ...values, validFrom, validTo, tags: values.tags || [], }; if (isEdit && data?.id) { await updateKnowledgeSetByIdUsingPut(data.id, payload); message.success("知识集更新成功"); } else { await createKnowledgeSetUsingPost(payload); message.success("知识集创建成功"); } setOpen(false); form.resetFields(); onUpdate(); } catch { message.error("操作失败,请重试"); } }; const handleClose = () => { setOpen(false); form.resetFields(); onClose?.(); }; const isReadOnly = data?.status === KnowledgeStatusType.ARCHIVED || data?.status === KnowledgeStatusType.DEPRECATED; return ( <> {showBtn && ( )}
); }