import { forwardRef, useImperativeHandle, useState, useEffect } from 'react'; import { Form, Input, App, Select } from 'antd'; import { useTranslation } from 'react-i18next'; import type { SpaceModalData, SpaceModalRef, Space } from '../types' import RbModal from '@/components/RbModal' import { createWorkspace } from '@/api/workspaces' import RadioGroupCard from '@/components/RadioGroupCard' import { getModelListUrl, getModelList } from '@/api/models' import CustomSelect from '@/components/CustomSelect' import type { ModelListItem } from '@/views/ModelManagement/types' const FormItem = Form.Item; interface SpaceModalProps { refresh: () => void; } const types = [ 'rag', 'neo4j', ] const SpaceModal = forwardRef(({ refresh }, ref) => { const { t } = useTranslation(); const { message } = App.useApp(); const [visible, setVisible] = useState(false); const [form] = Form.useForm(); const [loading, setLoading] = useState(false) const [editVo, setEditVo] = useState(null) const [modelList, setModelList] = useState([]) const values = Form.useWatch([], form); // 封装取消方法,添加关闭弹窗逻辑 const handleClose = () => { setVisible(false); form.resetFields(); setLoading(false) setEditVo(null) }; const handleOpen = (space?: Space) => { if (space) { setEditVo(space || null) form.setFieldsValue({ name: space.name, icon: space.icon }) } else { form.resetFields(); } setVisible(true); }; // 封装保存方法,添加提交逻辑 const handleSave = () => { form .validateFields() .then(() => { setLoading(true) createWorkspace(values as SpaceModalData) .then(() => { setLoading(false) refresh() handleClose() message.success(t('common.createSuccess')) }) .catch(() => { setLoading(false) }); }) .catch((err) => { console.log('err', err) }); } useEffect(() => { getModels() }, []) const getModels = () => { getModelList({ type: 'llm,chat', pagesize: 100, page: 1, is_active: true }) .then(res => { const response = res as { items: ModelListItem[] } setModelList(response.items) }) } // 暴露给父组件的方法 useImperativeHandle(ref, () => ({ handleOpen, handleClose })); return (