refactor: 迁移 UI 组件库从 Ant Design 至 TDesign
- 替换 antd 为 tdesign-react 作为主要 UI 组件库 - 引入 Recharts 替代 @ant-design/charts 实现图表功能 - 移除主题系统相关代码(ThemeContext、themes 目录) - 更新所有组件以适配 TDesign 组件 API - 更新测试用例以匹配新的组件实现 - 新增 TDesign 和 Recharts 集成规范文档
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { useEffect } from 'react';
|
||||
import { Modal, Form, Input, Select, Switch } from 'antd';
|
||||
import { Dialog, Form, Input, Select, Switch } from 'tdesign-react';
|
||||
import type { Provider, Model } from '@/types';
|
||||
import type { SubmitContext } from 'tdesign-react/es/form/type';
|
||||
|
||||
interface ModelFormValues {
|
||||
id: string;
|
||||
@@ -28,12 +29,14 @@ export function ModelForm({
|
||||
onCancel,
|
||||
loading,
|
||||
}: ModelFormProps) {
|
||||
const [form] = Form.useForm<ModelFormValues>();
|
||||
const [form] = Form.useForm();
|
||||
const isEdit = !!model;
|
||||
|
||||
// 当弹窗打开或model变化时,设置表单值
|
||||
useEffect(() => {
|
||||
if (open) {
|
||||
if (open && form) {
|
||||
if (model) {
|
||||
// 编辑模式:设置现有值
|
||||
form.setFieldsValue({
|
||||
id: model.id,
|
||||
providerId: model.providerId,
|
||||
@@ -41,29 +44,40 @@ export function ModelForm({
|
||||
enabled: model.enabled,
|
||||
});
|
||||
} else {
|
||||
form.resetFields();
|
||||
form.setFieldsValue({ providerId });
|
||||
// 新增模式:重置表单并设置默认providerId
|
||||
form.reset();
|
||||
form.setFieldsValue({
|
||||
providerId,
|
||||
enabled: true
|
||||
});
|
||||
}
|
||||
}
|
||||
}, [open, model, providerId, form]);
|
||||
}, [open, model, providerId]); // 移除form依赖,避免循环
|
||||
|
||||
const handleSubmit = (context: SubmitContext) => {
|
||||
if (context.validateResult === true && form) {
|
||||
const values = form.getFieldsValue(true) as ModelFormValues;
|
||||
onSave(values);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<Modal
|
||||
title={isEdit ? '编辑模型' : '添加模型'}
|
||||
open={open}
|
||||
onOk={() => form.submit()}
|
||||
onCancel={onCancel}
|
||||
<Dialog
|
||||
header={isEdit ? '编辑模型' : '添加模型'}
|
||||
visible={open}
|
||||
onConfirm={() => { form?.submit(); return false; }}
|
||||
onClose={onCancel}
|
||||
confirmLoading={loading}
|
||||
okText="保存"
|
||||
cancelText="取消"
|
||||
destroyOnHidden
|
||||
confirmBtn="保存"
|
||||
cancelBtn="取消"
|
||||
destroyOnClose
|
||||
>
|
||||
<Form form={form} layout="vertical" onFinish={onSave} initialValues={{ enabled: true }}>
|
||||
<Form.Item label="ID" name="id" rules={[{ required: true, message: '请输入模型 ID' }]}>
|
||||
<Form form={form} layout="vertical" onSubmit={handleSubmit}>
|
||||
<Form.FormItem label="ID" name="id" rules={[{ required: true, message: '请输入模型 ID' }]}>
|
||||
<Input disabled={isEdit} placeholder="例如: gpt-4o" />
|
||||
</Form.Item>
|
||||
</Form.FormItem>
|
||||
|
||||
<Form.Item
|
||||
<Form.FormItem
|
||||
label="供应商"
|
||||
name="providerId"
|
||||
rules={[{ required: true, message: '请选择供应商' }]}
|
||||
@@ -71,20 +85,20 @@ export function ModelForm({
|
||||
<Select
|
||||
options={providers.map((p) => ({ label: p.name, value: p.id }))}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Form.FormItem>
|
||||
|
||||
<Form.Item
|
||||
<Form.FormItem
|
||||
label="模型名称"
|
||||
name="modelName"
|
||||
rules={[{ required: true, message: '请输入模型名称' }]}
|
||||
>
|
||||
<Input placeholder="例如: gpt-4o" />
|
||||
</Form.Item>
|
||||
</Form.FormItem>
|
||||
|
||||
<Form.Item label="启用" name="enabled" valuePropName="checked">
|
||||
<Form.FormItem label="启用" name="enabled">
|
||||
<Switch />
|
||||
</Form.Item>
|
||||
</Form.FormItem>
|
||||
</Form>
|
||||
</Modal>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user