Files
supersonic/webapp/packages/supersonic-fe/src/pages/SemanticModel/components/ProjectInfoForm.tsx
tristanliu 80ad75503b [improvement][semantic-fe] Upgrading antd version to 5.x, extracting the batch operation button component, optimizing the interaction for system settings, and expanding the configuration generation types for list-to-select component. (#404)
* [improvement][semantic-fe] Add model alias setting & Add view permission restrictions to the model permission management tab.
[improvement][semantic-fe] Add permission control to the action buttons for the main domain; apply high sensitivity filtering to the authorization of metrics/dimensions.
[improvement][semantic-fe] Optimize the editing mode in the dimension/metric/datasource components to use the modelId stored in the database for data, instead of relying on the data from the state manager.

* [improvement][semantic-fe] Add time granularity setting in the data source configuration.

* [improvement][semantic-fe] Dictionary import for dimension values supported in Q&A visibility

* [improvement][semantic-fe] Modification of data source creation prompt wording"

* [improvement][semantic-fe] metric market experience optimization

* [improvement][semantic-fe] enhance the analysis of metric trends

* [improvement][semantic-fe] optimize the presentation of metric trend permissions

* [improvement][semantic-fe] add metric trend download functionality

* [improvement][semantic-fe] fix the dimension initialization issue in metric correlation

* [improvement][semantic-fe] Fix the issue of database changes not taking effect when creating based on an SQL data source.

* [improvement][semantic-fe] Optimizing pagination logic and some CSS styles

* [improvement][semantic-fe] Fixing the API for the indicator list by changing "current" to "pageNum"

* [improvement][semantic-fe] Fixing the default value setting for the indicator list

* [improvement][semantic-fe] Adding batch operations for indicators/dimensions/models

* [improvement][semantic-fe] Replacing the single status update API for indicators/dimensions with a batch update API

* [improvement][semantic-fe] Redesigning the indicator homepage to incorporate trend charts and table functionality for indicators

* [improvement][semantic-fe] Optimizing the logic for setting dimension values and editing data sources, and adding system settings functionality

* [improvement][semantic-fe] Upgrading antd version to 5.x, extracting the batch operation button component, optimizing the interaction for system settings, and expanding the configuration generation types for list-to-select component.
2023-11-20 12:04:08 +08:00

111 lines
3.1 KiB
TypeScript

import React, { useState } from 'react';
import { Form, Button, Modal, Input, Switch } from 'antd';
import styles from './style.less';
import { useMounted } from '@/hooks/useMounted';
import { message } from 'antd';
import { formLayout } from '@/components/FormHelper/utils';
import { EnumTransModelType } from '@/enum';
const FormItem = Form.Item;
export type ProjectInfoFormProps = {
basicInfo: any;
onCancel: () => void;
onSubmit: (values: any) => Promise<any>;
};
const ProjectInfoForm: React.FC<ProjectInfoFormProps> = (props) => {
const { basicInfo, onSubmit: handleUpdate, onCancel } = props;
const { type, modelType } = basicInfo;
const isMounted = useMounted();
const [formVals, setFormVals] = useState<any>(basicInfo);
const [saveLoading, setSaveLoading] = useState(false);
const [form] = Form.useForm();
const handleConfirm = async () => {
const fieldsValue = await form.validateFields();
const columnsValue = { ...fieldsValue, isUnique: 1 };
setFormVals({ ...formVals, ...columnsValue });
setSaveLoading(true);
try {
await handleUpdate({ ...formVals, ...columnsValue });
if (isMounted()) {
setSaveLoading(false);
}
} catch (error) {
message.error('接口调用出错');
setSaveLoading(false);
}
};
const footer = (
<>
<Button onClick={onCancel}></Button>
<Button type="primary" loading={saveLoading} onClick={handleConfirm}>
</Button>
</>
);
const titleRender = () => {
let str = EnumTransModelType[modelType];
if (type === 'top') {
str += '顶级';
} else if (modelType === 'add') {
str += '子';
}
str += '主题域';
return str;
};
return (
<Modal
width={640}
styles={{ padding: '32px 40px 48px' }}
destroyOnClose
title={titleRender()}
open={true}
footer={footer}
onCancel={onCancel}
>
<Form
{...formLayout}
form={form}
initialValues={{
...formVals,
}}
className={styles.form}
>
{type !== 'top' && modelType === 'add' && (
<FormItem name="parentName" label="父主题域名称">
<Input disabled placeholder="父主题域名称" />
</FormItem>
)}
<FormItem
name="name"
label="主题域名称"
rules={[{ required: true, message: '请输入主题域名称!' }]}
>
<Input placeholder="主题域名称不可重复" />
</FormItem>
<FormItem
name="bizName"
label="主题域英文名称"
rules={[{ required: true, message: '请输入主题域英文名称!' }]}
>
<Input placeholder="请输入主题域英文名称" />
</FormItem>
<FormItem name="description" label="主题域描述" hidden={true}>
<Input.TextArea placeholder="主题域描述" />
</FormItem>
<FormItem name="isUnique" label="是否唯一" hidden={true}>
<Switch size="small" checked={true} />
</FormItem>
</Form>
</Modal>
);
};
export default ProjectInfoForm;