import React, { useEffect, useState } from 'react'; import { Button, Form, Input, Modal, Select, Row, Col, Space, Tooltip, Switch } from 'antd'; import { SENSITIVE_LEVEL_OPTIONS } from '../constant'; import { formLayout } from '@/components/FormHelper/utils'; import SqlEditor from '@/components/SqlEditor'; import InfoTagList from './InfoTagList'; import { ISemantic } from '../data'; import { InfoCircleOutlined } from '@ant-design/icons'; import { createDimension, updateDimension, mockDimensionAlias } from '../service'; import FormItemTitle from '@/components/FormHelper/FormItemTitle'; import { message } from 'antd'; export type CreateFormProps = { modelId: number; dimensionItem?: ISemantic.IDimensionItem; onCancel: () => void; bindModalVisible: boolean; dataSourceList: any[]; onSubmit: (values?: any) => void; }; const FormItem = Form.Item; const { Option } = Select; const { TextArea } = Input; const DimensionInfoModal: React.FC = ({ modelId, onCancel, bindModalVisible, dimensionItem, dataSourceList, onSubmit: handleUpdate, }) => { const isEdit = !!dimensionItem?.id; const [dimensionValueSettingList, setDimensionValueSettingList] = useState< ISemantic.IDimensionValueSettingItem[] >([]); const [form] = Form.useForm(); const { setFieldsValue, resetFields } = form; const [llmLoading, setLlmLoading] = useState(false); const handleSubmit = async ( isSilenceSubmit = false, dimValueMaps?: ISemantic.IDimensionValueSettingItem[], ) => { const fieldsValue = await form.validateFields(); await saveDimension( { ...fieldsValue, dimValueMaps: dimValueMaps || dimensionValueSettingList, alias: Array.isArray(fieldsValue.alias) ? fieldsValue.alias.join(',') : '', }, isSilenceSubmit, ); }; const saveDimension = async (fieldsValue: any, isSilenceSubmit = false) => { const queryParams = { modelId: isEdit ? dimensionItem.modelId : modelId, type: 'categorical', ...fieldsValue, }; let saveDimensionQuery = createDimension; if (queryParams.id) { saveDimensionQuery = updateDimension; } const { code, msg } = await saveDimensionQuery(queryParams); if (code === 200) { if (!isSilenceSubmit) { message.success('编辑维度成功'); handleUpdate(fieldsValue); } return; } message.error(msg); }; const setFormVal = () => { if (dimensionItem) { const { alias } = dimensionItem; setFieldsValue({ ...dimensionItem, alias: alias && alias.trim() ? alias.split(',') : [] }); } }; useEffect(() => { if (dimensionItem) { setFormVal(); if (Array.isArray(dimensionItem.dimValueMaps)) { setDimensionValueSettingList(dimensionItem.dimValueMaps); } else { setDimensionValueSettingList([]); } } else { resetFields(); } if (!isEdit && Array.isArray(dataSourceList) && dataSourceList[0]?.id) { setFieldsValue({ datasourceId: dataSourceList[0].id }); } }, [dimensionItem, dataSourceList]); const renderFooter = () => { return ( <> ); }; const generatorDimensionAlias = async () => { const fieldsValue = await form.validateFields(); setLlmLoading(true); const { code, data } = await mockDimensionAlias({ ...dimensionItem, ...fieldsValue, alias: fieldsValue.alias?.join(','), }); setLlmLoading(false); const formAlias = form.getFieldValue('alias'); setLlmLoading(false); if (code === 200) { form.setFieldValue('alias', Array.from(new Set([...formAlias, ...data]))); } else { message.error('大语言模型解析异常'); } }; const renderContent = () => { return ( <> {['CATEGORY', 'ID', 'DATE'].map((item) => ( ))} } name="isTag" valuePropName="checked" getValueFromEvent={(value) => { return value === true ? 1 : 0; }} getValueProps={(value) => { return { checked: value === 1, }; }} >