Files
AIclinicalresearch/frontend/src/components/knowledge/EditKBDialog.tsx
AI Clinical Dev Team 239c7ea85e feat: Day 21-22 - knowledge base frontend completed, fix CORS and file upload issues
- Complete knowledge base list and detail pages
- Complete document upload component
- Fix CORS config (add PUT/DELETE method support)
- Fix file upload issues (disabled state and beforeUpload return value)
- Add detailed debug logs (cleaned up)
- Create Day 21-22 completion summary document
2025-10-11 15:40:12 +08:00

113 lines
2.6 KiB
TypeScript

import React, { useState, useEffect } from 'react';
import { Modal, Form, Input, message } from 'antd';
import type { KnowledgeBase } from '../../api/knowledgeBaseApi';
const { TextArea } = Input;
interface EditKBDialogProps {
open: boolean;
knowledgeBase: KnowledgeBase | null;
onCancel: () => void;
onUpdate: (id: string, name: string, description?: string) => Promise<void>;
}
const EditKBDialog: React.FC<EditKBDialogProps> = ({
open,
knowledgeBase,
onCancel,
onUpdate,
}) => {
const [form] = Form.useForm();
const [loading, setLoading] = useState(false);
// 当知识库数据变化时,更新表单
useEffect(() => {
if (open && knowledgeBase) {
form.setFieldsValue({
name: knowledgeBase.name,
description: knowledgeBase.description || '',
});
}
}, [open, knowledgeBase, form]);
const handleOk = async () => {
if (!knowledgeBase) return;
try {
const values = await form.validateFields();
setLoading(true);
await onUpdate(knowledgeBase.id, values.name, values.description);
message.success('知识库更新成功!');
onCancel();
} catch (error: any) {
if (error.errorFields) {
// 表单验证错误
return;
}
message.error(error.message || '更新失败');
} finally {
setLoading(false);
}
};
const handleCancel = () => {
form.resetFields();
onCancel();
};
return (
<Modal
title="编辑知识库"
open={open}
onOk={handleOk}
onCancel={handleCancel}
okText="保存"
cancelText="取消"
confirmLoading={loading}
destroyOnClose
>
<Form
form={form}
layout="vertical"
autoComplete="off"
>
<Form.Item
name="name"
label="知识库名称"
rules={[
{ required: true, message: '请输入知识库名称' },
{ max: 50, message: '名称不能超过50个字符' },
]}
>
<Input
placeholder="例如:文献综述资料"
maxLength={50}
showCount
/>
</Form.Item>
<Form.Item
name="description"
label="描述(选填)"
rules={[
{ max: 200, message: '描述不能超过200个字符' },
]}
>
<TextArea
placeholder="简要描述该知识库的用途..."
rows={4}
maxLength={200}
showCount
/>
</Form.Item>
</Form>
</Modal>
);
};
export default EditKBDialog;