import React, { useEffect, useState } from 'react'; import { Button, Form, Input, Modal, Select } from 'antd'; import { formLayout } from '@/components/FormHelper/utils'; import { ISemantic } from '../../data'; import { saveCommonDimension, getDimensionList } from '../../service'; import FormItemTitle from '@/components/FormHelper/FormItemTitle'; import { message } from 'antd'; export type CreateFormProps = { domainId: number; dimensionItem?: ISemantic.IDimensionItem; onCancel: () => void; bindModalVisible: boolean; dimensionList: ISemantic.IDimensionItem[]; onSubmit: (values?: any) => void; }; const FormItem = Form.Item; const { TextArea } = Input; const CommonDimensionInfoModal: React.FC = ({ domainId, onCancel, bindModalVisible, dimensionItem, onSubmit: handleUpdate, }) => { const isEdit = !!dimensionItem?.id; const [form] = Form.useForm(); const { setFieldsValue, resetFields } = form; const [saveLoading, setSaveLoading] = useState(false); const [dimensionOptions, setDimensionOptions] = useState([]); useEffect(() => { queryDimensionList(); }, []); const queryDimensionList = async () => { setSaveLoading(true); const { code, data, msg } = await getDimensionList({ domainId }); setSaveLoading(false); const dimensionList = data?.list; if (code === 200 && Array.isArray(dimensionList)) { const dimensionMap = dimensionList.reduce( ( dataMap: Record< string, { label: string; options: { label: string; value: number; disabled?: boolean }[] } >, item: ISemantic.IDimensionItem, ) => { const { modelId, modelName, name, id, commonDimensionId } = item; const target = dataMap[modelId]; if (target) { target.options.push({ label: name, value: id, disabled: !!commonDimensionId, }); } else { dataMap[modelId] = { label: modelName || `${modelId}`, options: [ { label: name, value: id, disabled: !!commonDimensionId, }, ], }; } return dataMap; }, {}, ); setDimensionOptions(Object.values(dimensionMap)); } else { message.error(msg); } }; const handleSubmit = async (isSilenceSubmit = false) => { const fieldsValue = await form.validateFields(); await saveDimension( { ...fieldsValue, }, isSilenceSubmit, ); }; const saveDimension = async (fieldsValue: any, isSilenceSubmit = false) => { const queryParams = { domainId: isEdit ? dimensionItem.domainId : domainId, type: 'categorical', ...fieldsValue, }; const { code, msg } = await saveCommonDimension(queryParams); if (code === 200) { if (!isSilenceSubmit) { message.success('编辑公共维度成功'); handleUpdate(fieldsValue); } return; } message.error(msg); }; useEffect(() => { if (dimensionItem) { setFieldsValue({ ...dimensionItem }); } else { resetFields(); } }, [dimensionItem]); const renderFooter = () => { return ( <> ); }; const renderContent = () => { return ( <> } name="dimensionIds" // rules={[{ required: true, message: '请选择所要关联的维度' }]} >