[improvement][headless-fe] Migrating scaffold version to @umi/max (#1030)

* [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.

* [improvement][semantic-fe] Adding the ability to filter dimensions based on whether they are tags or not.

* [improvement][semantic-fe] Adding the ability to edit relationships between models in the canvas.

* [improvement][semantic-fe] Updating the datePicker component to use dayjs instead.

* [improvement][semantic-fe] Fixing the issue with passing the model ID for dimensions in the indicator market.

* [improvement][semantic-fe] Fixing the abnormal state of the popup when creating a model.

* [improvement][semantic-fe] Adding permission logic for bulk operations in the indicator market.

* [improvement][semantic-fe] Adding the ability to download and transpose data.

* [improvement][semantic-fe] Fixing the initialization issue with the date selection component in the indicator details page when switching time granularity.

* [improvement][semantic-fe] Fixing the logic error in the dimension value setting.

* [improvement][semantic-fe] Fixing the synchronization issue with the question and answer settings information.

* [improvement][semantic-fe] Optimizing the canvas functionality for better performance and user experience.

* [improvement][semantic-fe] Optimizing the update process for drawing model relationship edges in the canvas.

* [improvement][semantic-fe] Changing the line type for canvas connections.

* [improvement][semantic-fe] Replacing the initialization variable from "semantic" to "headless".

* [improvement][semantic-fe] Fixing the missing migration issue for default drill-down dimension configuration in model editing. Additionally, optimizing the data retrieval method for initializing fields in the model.

* [improvement][semantic-fe] Updating the logic for the fieldName.

* [improvement][semantic-fe] Adjusting the position of the metrics tab.

* [improvement][semantic-fe] Changing the 字段名称 to 英文名称.

* [improvement][semantic-fe] Fix metric measurement deletion.

* [improvement][semantic-fe] UI optimization for metric details page.

* [improvement][semantic-fe] UI optimization for metric details page.

* [improvement][semantic-fe] UI adjustment for metric details page.

* [improvement][semantic-fe] The granularity field in the time type of model editing now supports setting it as empty.

* [improvement][semantic-fe] Added field type and metric type to the metric creation options.

* [improvement][semantic-fe] The organization structure selection feature has been added to the permission management.

* [improvement][semantic-fe] Improved user experience for the metric list.

* [improvement][semantic-fe] fix update the metric list.

* [improvement][headless-fe] Added view management functionality.

* [improvement][headless-fe] The view management functionality has been added. This feature allows users to create, edit, and manage different views within the system.

* [improvement][headless-fe] Added model editing side effect detection.

* [improvement][headless-fe] Fixed the logic error in view editing.

* [improvement][headless-fe] Fixed the issue with initializing dimension associations in metric settings.

* [improvement][headless-fe] Added the ability to hide the Q&A settings entry point.

* [improvement][headless-fe] Fixed the issue with selecting search results in metric field creation.

* [improvement][headless-fe] Added search functionality to the field list in model editing.

* [improvement][headless-fe] fix the field list in model editing

* [improvement][headless-fe] Restructured the data for the dimension value settings interface.

* [improvement][headless-fe] Added dynamic variable functionality to model creation based on SQL scripts.

* [improvement][headless-fe] Added support for passing dynamic variables as parameters in the executeSql function.

* [improvement][headless-fe] Resolved the issue where users were unable to select all options for dimensions, metrics, and fields in the metric generation process.

* [improvement][headless-fe] Replaced the term "view" with "dataset"

* [improvement][headless-fe] Added the ability to export metrics and dimensions to a specific target.

* [improvement][headless-fe] Enhanced dataset creation to support the tag mode.

* [improvement][headless-fe] Added tag value setting.

* [improvement][headless-fe] Optimized the tag setting system.

* [improvement][headless-fe] Optimized the tag setting system.

* [improvement][headless-fe] Updated the data initialization for model editing to use API requests instead.

* [improvement][headless-fe] Added search functionality to model management.

* [improvement][headless-fe] Removed field null validation during model editing.

* [improvement][headless-fe] Updated the batch operation button component.

* [improvement][headless-fe] Optimized the logic for initializing indicators in dimension value settings.

* [improvement][headless-fe] Adjusted the length of the input field for model editing names.

* [improvement][headless-fe]  Lock the version of the @ant-design/pro-table component and replace it with @ant-design/pro-components.

* [improvement][headless-fe] Optimized the style of the metrics market and tags market.

* [improvement][headless-fe] The quick creation of model fields now defaults to using the "comment" field for filling.

* [improvement][headless-fe] The quick creation of model fields now defaults to using the "comment" field for filling

* [improvement][headless-fe] The quick creation of model fields now defaults to using the "comment" field for filling.

* [improvement][headless-fe] Fixed the issue where the conditions for metric measurement creation were not being saved correctly.

* [improvement][headless-fe] Default value setting for hiding dimensions.

* [improvement][headless-fe] Updated the file imports in the project.

* [improvement][headless-fe] Adjusted the logic for displaying the tab in the theme domain.

* [improvement][headless-fe] Added term management functionality.

* [improvement][headless-fe] When creating a model, the current metric operator now allows for clearance.

* [improvement][headless-fe] Term management interface transformation

* [improvement][headless-fe] Migrating scaffold version to @umi/max
This commit is contained in:
tristanliu
2024-05-24 17:08:10 +08:00
committed by GitHub
parent 67b69768df
commit 5a332f6abf
133 changed files with 21767 additions and 31559 deletions

View File

@@ -2,9 +2,7 @@ import type { ActionType, ProColumns } from '@ant-design/pro-components';
import { ProTable } from '@ant-design/pro-components';
import { message, Button, Space, Popconfirm, Input, Tag, Select } from 'antd';
import React, { useRef, useState, useEffect } from 'react';
import type { Dispatch } from 'umi';
import { connect } from 'umi';
import type { StateType } from '../model';
import { useModel } from '@umijs/max';
import { StatusEnum } from '../enum';
import { SENSITIVE_LEVEL_ENUM, SENSITIVE_LEVEL_OPTIONS, TAG_DEFINE_TYPE } from '../constant';
import {
@@ -22,13 +20,15 @@ import BatchCtrlDropDownButton from '@/components/BatchCtrlDropDownButton';
import { ColumnsConfig } from './TableColumnRender';
import styles from './style.less';
type Props = {
dispatch: Dispatch;
domainManger: StateType;
};
type Props = {};
const ClassDimensionTable: React.FC<Props> = ({ domainManger, dispatch }) => {
const { selectModelId: modelId, selectDomainId: domainId } = domainManger;
const ClassDimensionTable: React.FC<Props> = ({}) => {
const domainModel = useModel('SemanticModel.domainData');
const modelModel = useModel('SemanticModel.modelData');
const dimensionModel = useModel('SemanticModel.dimensionData');
const { selectDomainId: domainId } = domainModel;
const { selectModelId: modelId } = modelModel;
const { MrefreshDimensionList } = dimensionModel;
const [createModalVisible, setCreateModalVisible] = useState<boolean>(false);
const [dimensionItem, setDimensionItem] = useState<ISemantic.IDimensionItem>();
const [dataSourceList, setDataSourceList] = useState<IDataSource.IDataSourceItem[]>([]);
@@ -103,12 +103,7 @@ const ClassDimensionTable: React.FC<Props> = ({ domainManger, dispatch }) => {
setLoading(false);
if (code === 200) {
queryDimensionList({ ...filterParams, ...pagination });
dispatch({
type: 'domainManger/queryDimensionList',
payload: {
modelId,
},
});
MrefreshDimensionList({ modelId });
return;
}
message.error(msg);
@@ -131,12 +126,7 @@ const ClassDimensionTable: React.FC<Props> = ({ domainManger, dispatch }) => {
setLoading(false);
if (code === 200) {
queryDimensionList({ ...filterParams, ...pagination });
dispatch({
type: 'domainManger/queryDimensionList',
payload: {
modelId,
},
});
MrefreshDimensionList({ modelId });
return;
}
message.error(msg);
@@ -447,12 +437,7 @@ const ClassDimensionTable: React.FC<Props> = ({ domainManger, dispatch }) => {
onSubmit={() => {
setCreateModalVisible(false);
queryDimensionList({ ...filterParams, ...defaultPagination });
dispatch({
type: 'domainManger/queryDimensionList',
payload: {
modelId,
},
});
MrefreshDimensionList({ modelId });
return;
}}
onCancel={() => {
@@ -466,22 +451,13 @@ const ClassDimensionTable: React.FC<Props> = ({ domainManger, dispatch }) => {
open={dimensionValueSettingModalVisible}
dimensionItem={dimensionItem}
onCancel={() => {
dispatch({
type: 'domainManger/queryDimensionList',
payload: {
modelId,
},
});
MrefreshDimensionList({ modelId });
setDimensionValueSettingModalVisible(false);
}}
onSubmit={() => {
queryDimensionList({ ...filterParams, ...defaultPagination });
dispatch({
type: 'domainManger/queryDimensionList',
payload: {
modelId,
},
});
MrefreshDimensionList({ modelId });
setDimensionValueSettingModalVisible(false);
}}
/>
@@ -489,6 +465,4 @@ const ClassDimensionTable: React.FC<Props> = ({ domainManger, dispatch }) => {
</>
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(ClassDimensionTable);
export default ClassDimensionTable;

View File

@@ -2,10 +2,8 @@ import type { ActionType, ProColumns } from '@ant-design/pro-components';
import { ProTable } from '@ant-design/pro-components';
import { message, Button, Space, Popconfirm, Input, Select, Tag } from 'antd';
import React, { useRef, useState, useEffect } from 'react';
import type { Dispatch } from 'umi';
import { StatusEnum } from '../enum';
import { connect, history } from 'umi';
import type { StateType } from '../model';
import { useModel } from '@umijs/max';
import { SENSITIVE_LEVEL_ENUM, SENSITIVE_LEVEL_OPTIONS, TAG_DEFINE_TYPE } from '../constant';
import {
queryMetric,
@@ -25,12 +23,16 @@ import { ColumnsConfig } from './TableColumnRender';
type Props = {
onEmptyMetricData?: () => void;
dispatch: Dispatch;
domainManger: StateType;
};
const ClassMetricTable: React.FC<Props> = ({ onEmptyMetricData, domainManger, dispatch }) => {
const { selectModelId: modelId, selectDomainId } = domainManger;
const ClassMetricTable: React.FC<Props> = ({ onEmptyMetricData }) => {
const domainModel = useModel('SemanticModel.domainData');
const modelModel = useModel('SemanticModel.modelData');
const metricModel = useModel('SemanticModel.metricData');
const { selectDomainId } = domainModel;
const { selectModelId: modelId } = modelModel;
const { MrefreshMetricList } = metricModel;
const [createModalVisible, setCreateModalVisible] = useState<boolean>(false);
const [metricItem, setMetricItem] = useState<ISemantic.IMetricItem>();
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
@@ -60,12 +62,7 @@ const ClassMetricTable: React.FC<Props> = ({ onEmptyMetricData, domainManger, di
});
if (code === 200) {
queryMetricList({ ...filterParams, ...defaultPagination });
dispatch({
type: 'domainManger/queryMetricList',
payload: {
modelId,
},
});
MrefreshMetricList({ modelId });
return;
}
message.error(msg);
@@ -87,12 +84,7 @@ const ClassMetricTable: React.FC<Props> = ({ onEmptyMetricData, domainManger, di
setLoading(false);
if (code === 200) {
queryMetricList({ ...filterParams, ...defaultPagination });
dispatch({
type: 'domainManger/queryMetricList',
payload: {
modelId,
},
});
MrefreshMetricList({ modelId });
return;
}
message.error(msg);
@@ -108,12 +100,7 @@ const ClassMetricTable: React.FC<Props> = ({ onEmptyMetricData, domainManger, di
});
if (code === 200) {
queryMetricList({ ...filterParams, ...defaultPagination });
dispatch({
type: 'domainManger/queryMetricList',
payload: {
modelId,
},
});
MrefreshMetricList({ modelId });
return;
}
message.error(msg);
@@ -151,7 +138,7 @@ const ClassMetricTable: React.FC<Props> = ({ onEmptyMetricData, domainManger, di
}
};
const columnsConfig = ColumnsConfig();
const columnsConfig = ColumnsConfig({ indicatorInfo: { url: '/model/metric/edit/' } });
const columns: ProColumns[] = [
{
@@ -481,12 +468,7 @@ const ClassMetricTable: React.FC<Props> = ({ onEmptyMetricData, domainManger, di
onSubmit={() => {
setCreateModalVisible(false);
queryMetricList({ ...filterParams, ...defaultPagination });
dispatch({
type: 'domainManger/queryMetricList',
payload: {
modelId,
},
});
MrefreshMetricList({ modelId });
}}
onCancel={() => {
setCreateModalVisible(false);
@@ -496,6 +478,4 @@ const ClassMetricTable: React.FC<Props> = ({ onEmptyMetricData, domainManger, di
</>
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(ClassMetricTable);
export default ClassMetricTable;

View File

@@ -1,11 +1,8 @@
import { Drawer, Modal, Card, Row, Col, message } from 'antd';
import { ConsoleSqlOutlined, CoffeeOutlined } from '@ant-design/icons';
import React, { useState, useEffect } from 'react';
import type { Dispatch } from 'umi';
import { connect } from 'umi';
import ModelCreateForm from '../Datasource/components/ModelCreateForm';
import { excuteSql, getModelDetail } from '../service';
import type { StateType } from '../model';
import { getModelDetail } from '../service';
import DataSource from '../Datasource';
import { IDataSource, ISemantic } from '../data';
import styles from './style.less';
@@ -17,8 +14,6 @@ type Props = {
onTypeChange?: (type: 'fast' | 'normal') => void;
onSubmit?: () => void;
onCancel?: () => void;
dispatch: Dispatch;
domainManger: StateType;
};
const ClassModelTypeModal: React.FC<Props> = ({
@@ -26,17 +21,12 @@ const ClassModelTypeModal: React.FC<Props> = ({
onTypeChange,
onSubmit,
modelItem: modelBasicItem,
domainManger,
onCancel,
dispatch,
}) => {
const { selectDomainId } = domainManger;
const [createModalVisible, setCreateModalVisible] = useState<boolean>(false);
const [dataSourceModalVisible, setDataSourceModalVisible] = useState(false);
const [fastModeSql, setFastModeSql] = useState<string>('');
const [sql, setSql] = useState<string>('');
const [createDataSourceModalOpen, setCreateDataSourceModalOpen] = useState<boolean>(false);
const [dataSourceEditOpen, setDataSourceEditOpen] = useState<boolean>(false);
const [currentDatabaseId, setCurrentDatabaseId] = useState<number>();
@@ -77,22 +67,12 @@ const ClassModelTypeModal: React.FC<Props> = ({
const queryDataBaseExcuteSql = (tableName: string) => {
const sql = `select * from ${tableName}`;
setFastModeSql(sql);
dispatch({
type: 'domainManger/queryDataBaseExcuteSql',
payload: {
sql,
domainId: selectDomainId,
tableName,
},
});
};
const handleCancel = () => {
onCancel?.();
};
useEffect(() => {
// queryTableColumnListByScript(modelItem);
setSql(modelItem?.modelDetail?.sqlQuery);
const modelDetailFields = modelItem?.modelDetail?.fields;
@@ -135,7 +115,7 @@ const ClassModelTypeModal: React.FC<Props> = ({
cover={
<CoffeeOutlined
width={240}
style={{ paddingTop: '45px', height: 75, fontSize: '48px', color: '#1890ff' }}
style={{ marginTop: '45px', height: 75, fontSize: '48px', color: '#1890ff' }}
/>
}
>
@@ -154,7 +134,7 @@ const ClassModelTypeModal: React.FC<Props> = ({
style={{ height: 220 }}
cover={
<ConsoleSqlOutlined
style={{ paddingTop: '45px', height: 75, fontSize: '48px', color: '#1890ff' }}
style={{ marginTop: '45px', height: 75, fontSize: '48px', color: '#1890ff' }}
/>
}
>
@@ -233,6 +213,4 @@ const ClassModelTypeModal: React.FC<Props> = ({
</>
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(ClassModelTypeModal);
export default ClassModelTypeModal;

View File

@@ -4,8 +4,6 @@ import type { TransferItem } from 'antd/es/transfer';
import type { CheckboxChangeEvent } from 'antd/es/checkbox';
import difference from 'lodash/difference';
import React, { useState, useEffect } from 'react';
import { connect } from 'umi';
import type { StateType } from '../model';
import TransTypeTag from './TransTypeTag';
import TableTitleTooltips from '../components/TableTitleTooltips';
import { ISemantic } from '../data';
@@ -23,7 +21,6 @@ interface RecordType {
type Props = {
metricItem: ISemantic.IMetricItem;
domainManger: StateType;
relationsInitialValue?: ISemantic.IDrillDownDimensionItem[];
onChange: (relations: ISemantic.IDrillDownDimensionItem[]) => void;
};
@@ -31,11 +28,9 @@ type Props = {
const DimensionMetricRelationTableTransfer: React.FC<Props> = ({
metricItem,
relationsInitialValue,
domainManger,
onChange,
}) => {
const [targetKeys, setTargetKeys] = useState<string[]>([]);
const { selectModelId: modelId } = domainManger;
const [checkedMap, setCheckedMap] = useState<Record<string, ISemantic.IDrillDownDimensionItem>>(
{},
);
@@ -47,7 +42,7 @@ const DimensionMetricRelationTableTransfer: React.FC<Props> = ({
}, [metricItem, relationsInitialValue]);
const queryDimensionList = async () => {
const { code, data, msg } = await getDimensionInModelCluster(metricItem?.modelId || modelId);
const { code, data, msg } = await getDimensionInModelCluster(metricItem?.modelId);
if (code === 200 && Array.isArray(data)) {
setDimensionList(data);
} else {
@@ -220,7 +215,7 @@ const DimensionMetricRelationTableTransfer: React.FC<Props> = ({
selectedKeys: listSelectedKeys,
disabled: listDisabled,
}) => {
const columns = direction === 'left' ? leftColumns : rightColumns;
const columns: any = direction === 'left' ? leftColumns : rightColumns;
const rowSelection: TableRowSelection<TransferItem> = {
getCheckboxProps: (item) => ({ disabled: listDisabled || item.disabled }),
onSelectAll(selected, selectedRows) {
@@ -277,6 +272,4 @@ const DimensionMetricRelationTableTransfer: React.FC<Props> = ({
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(DimensionMetricRelationTableTransfer);
export default DimensionMetricRelationTableTransfer;

View File

@@ -4,9 +4,7 @@ import { InfoCircleOutlined } from '@ant-design/icons';
import { ISemantic } from '../data';
import CommonEditTable from './CommonEditTable';
import { updateDimension, mockDimensionValuesAlias } from '../service';
import { connect } from 'umi';
import DimensionValueSettingForm from './Entity/DimensionValueSettingForm';
import type { StateType } from '../model';
export type CreateFormProps = {
dimensionValueSettingList: ISemantic.IDimensionValueSettingItem[];
@@ -14,7 +12,6 @@ export type CreateFormProps = {
dimensionItem: ISemantic.IDimensionItem;
open: boolean;
onSubmit: (values?: any) => void;
domainManger: StateType;
};
type TableDataSource = { techName: string; bizName: string; alias?: string[] };
@@ -24,11 +21,9 @@ const DimensionValueSettingModal: React.FC<CreateFormProps> = ({
open,
dimensionItem,
dimensionValueSettingList,
domainManger,
onSubmit,
}) => {
const [tableDataSource, setTableDataSource] = useState<TableDataSource[]>([]);
const { selectDomainId, selectModelId: modelId } = domainManger;
const [dimValueMaps, setDimValueMaps] = useState<ISemantic.IDimensionValueSettingItem[]>([]);
const [llmLoading, setLlmLoading] = useState<boolean>(false);
const [menuKey, setMenuKey] = useState<string>('default');
@@ -49,7 +44,6 @@ const DimensionValueSettingModal: React.FC<CreateFormProps> = ({
}
const queryParams = {
...dimensionItem,
domainId: selectDomainId,
...fieldsValue,
};
const { code, msg } = await updateDimension(queryParams);
@@ -215,6 +209,4 @@ const DimensionValueSettingModal: React.FC<CreateFormProps> = ({
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(DimensionValueSettingModal);
export default DimensionValueSettingModal;

View File

@@ -1,11 +1,9 @@
import { DownOutlined, PlusOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons';
import { Input, message, Tree, Popconfirm, Space, Tooltip, Row, Col, Button } from 'antd';
import { Input, message, Tree, Popconfirm, Tooltip, Row, Col, Button } from 'antd';
import type { DataNode } from 'antd/lib/tree';
import { useEffect, useState } from 'react';
import type { FC, Key } from 'react';
import { connect } from 'umi';
import type { Dispatch } from 'umi';
import type { StateType } from '../model';
import { useModel } from '@umijs/max';
import { createDomain, updateDomain, deleteDomain } from '../service';
import { treeParentKeyLists } from '../utils';
import DomainInfoForm from './DomainInfoForm';
@@ -17,11 +15,7 @@ import { ISemantic } from '../data';
const { Search } = Input;
type DomainListProps = {
selectDomainId: number;
selectDomainName: string;
domainList: ISemantic.IDomainItem[];
createDomainBtnVisible?: boolean;
dispatch: Dispatch;
onCreateDomainBtnClick?: () => void;
onTreeSelected?: (targetNodeData: ISemantic.IDomainItem) => void;
onTreeDataUpdate?: () => void;
@@ -43,8 +37,6 @@ const projectTreeFlat = (projectTree: DataNode[], filterValue: string): DataNode
};
const DomainListTree: FC<DomainListProps> = ({
selectDomainId,
domainList,
createDomainBtnVisible = true,
onCreateDomainBtnClick,
onTreeSelected,
@@ -56,6 +48,8 @@ const DomainListTree: FC<DomainListProps> = ({
const [filterValue, setFliterValue] = useState<string>('');
const [expandedKeys, setExpandedKeys] = useState<string[]>([]);
const [classList, setClassList] = useState<ISemantic.IDomainItem[]>([]);
const domainModel = useModel('SemanticModel.domainData');
const { selectDomainId, domainList } = domainModel;
useEffect(() => {
const treeData = addPathInTreeData(constructorClassTreeFromList(domainList));
@@ -68,7 +62,7 @@ const DomainListTree: FC<DomainListProps> = ({
setFliterValue(value);
};
const handleSelect = (selectedKeys: string, projectName: string) => {
const handleSelect = (selectedKeys: string) => {
if (`${selectedKeys}` === `${selectDomainId}`) {
return;
}
@@ -135,7 +129,7 @@ const DomainListTree: FC<DomainListProps> = ({
<span
className={styles.projectItemTitle}
onClick={() => {
handleSelect(id, name);
handleSelect(id);
}}
>
{name}
@@ -195,11 +189,11 @@ const DomainListTree: FC<DomainListProps> = ({
<div className={styles.domainList}>
<div className={styles.searchContainer}>
<Row style={{ gap: 10 }}>
<Col flex="1 1 215px">
<Col flex="1 1 150px">
<Search
allowClear
className={styles.search}
placeholder="请输入主题域名称"
placeholder="请输入主题域"
onSearch={onSearch}
/>
</Col>
@@ -245,14 +239,4 @@ const DomainListTree: FC<DomainListProps> = ({
);
};
export default connect(
({
domainManger: { selectDomainId, selectDomainName, domainList },
}: {
domainManger: StateType;
}) => ({
selectDomainId,
selectDomainName,
domainList,
}),
)(DomainListTree);
export default DomainListTree;

View File

@@ -1,26 +1,18 @@
import { Tabs, Breadcrumb, Space, Radio } from 'antd';
import React, { useRef, useEffect, useState } from 'react';
import { connect, history } from 'umi';
import { history, useModel } from '@umijs/max';
import ClassDimensionTable from './ClassDimensionTable';
import ClassMetricTable from './ClassMetricTable';
import PermissionSection from './Permission/PermissionSection';
// import ClassTagTable from '../Insights/components/ClassTagTable';
import TagObjectTable from '../Insights/components/TagObjectTable';
import TermTable from '../components/Term/TermTable';
import OverView from './OverView';
import styles from './style.less';
import type { StateType } from '../model';
import { HomeOutlined, FundViewOutlined } from '@ant-design/icons';
import { ISemantic } from '../data';
import SemanticGraphCanvas from '../SemanticGraphCanvas';
// import HeadlessFlows from '../HeadlessFlows';
// import SemanticFlows from '../SemanticFlows';
import RecommendedQuestionsSection from '../components/Entity/RecommendedQuestionsSection';
import View from '../View';
// import DatabaseTable from '../components/Database/DatabaseTable';
import type { Dispatch } from 'umi';
type Props = {
isModel: boolean;
@@ -29,28 +21,24 @@ type Props = {
handleModelChange: (model?: ISemantic.IModelItem) => void;
onBackDomainBtnClick?: () => void;
onMenuChange?: (menuKey: string) => void;
domainManger: StateType;
dispatch: Dispatch;
};
const DomainManagerTab: React.FC<Props> = ({
isModel,
activeKey,
modelList,
domainManger,
handleModelChange,
onBackDomainBtnClick,
onMenuChange,
}) => {
const initState = useRef<boolean>(false);
const defaultTabKey = 'metric';
const {
selectDomainId,
selectModelId,
selectModelName,
selectDomainName,
domainData,
domainList,
} = domainManger;
const domainModel = useModel('SemanticModel.domainData');
const modelModel = useModel('SemanticModel.modelData');
const { selectDomainId, selectDomainName, selectDomain: domainData, domainList } = domainModel;
const { selectModelId, selectModelName } = modelModel;
useEffect(() => {
initState.current = false;
}, [selectModelId]);
@@ -238,7 +226,7 @@ const DomainManagerTab: React.FC<Props> = ({
</Radio.Group>
) : undefined,
}}
destroyInactiveTabPane
// destroyInactiveTabPane
size="large"
onChange={(menuKey: string) => {
onMenuChange?.(menuKey);
@@ -248,6 +236,4 @@ const DomainManagerTab: React.FC<Props> = ({
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(DomainManagerTab);
export default DomainManagerTab;

View File

@@ -3,8 +3,6 @@ import type { ColumnsType, TableRowSelection } from 'antd/es/table/interface';
import type { TransferItem } from 'antd/es/transfer';
import difference from 'lodash/difference';
import React from 'react';
import { connect } from 'umi';
import type { StateType } from '../../model';
import type { IChatConfig } from '../../data';
import TransTypeTag from '../TransTypeTag';
import { SemanticNodeType, TransType } from '../../enum';
@@ -17,7 +15,6 @@ interface RecordType {
}
type Props = {
domainManger: StateType;
knowledgeInfosMap?: IChatConfig.IKnowledgeInfosItemMap;
onKnowledgeInfosMapChange?: (knowledgeInfosMap: IChatConfig.IKnowledgeInfosItemMap) => void;
[key: string]: any;
@@ -83,7 +80,7 @@ const DimensionMetricVisibleTableTransfer: React.FC<Props> = ({
onItemSelect,
selectedKeys: listSelectedKeys,
}) => {
const columns = direction === 'left' ? leftColumns : rightColumns;
const columns:any = direction === 'left' ? leftColumns : rightColumns;
const rowSelection: TableRowSelection<TransferItem> = {
onSelectAll(selected, selectedRows) {
const treeSelectedKeys = selectedRows.map(({ key }) => key);
@@ -119,6 +116,4 @@ const DimensionMetricVisibleTableTransfer: React.FC<Props> = ({
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(DimensionMetricVisibleTableTransfer);
export default DimensionMetricVisibleTableTransfer;

View File

@@ -1,12 +1,11 @@
import { useState, useEffect, forwardRef, useImperativeHandle } from 'react';
import type { ForwardRefRenderFunction } from 'react';
import { useState, useEffect } from 'react';
import { Form, Switch, Space, Button, Tooltip, message, Select } from 'antd';
import FormItemTitle from '@/components/FormHelper/FormItemTitle';
import { useModel } from '@umijs/max';
import { RedoOutlined, InfoCircleOutlined } from '@ant-design/icons';
import DisabledWheelNumberInput from '@/components/DisabledWheelNumberInput';
import { formLayout } from '@/components/FormHelper/utils';
import { ProCard } from '@ant-design/pro-components';
import { connect } from 'umi';
import { ProCard } from '@ant-design/pro-components';
import {
DictTaskState,
KnowledgeConfigTypeEnum,
@@ -26,7 +25,6 @@ import {
} from '../../service';
import type { ISemantic } from '../../data';
import type { StateType } from '../../model';
import { isString } from 'lodash';
import styles from '../style.less';
import CommonEditList from '../../components/CommonEditList';
@@ -34,7 +32,6 @@ type Props = {
dataItem: ISemantic.IDimensionItem | ISemantic.ITagItem;
type?: KnowledgeConfigTypeEnum;
onSubmit?: () => void;
domainManger: StateType;
};
const FormItem = Form.Item;
@@ -42,11 +39,10 @@ const FormItem = Form.Item;
const DimensionValueSettingForm: React.FC<Props> = ({
dataItem,
type = KnowledgeConfigTypeEnum.DIMENSION,
domainManger,
}) => {
const [form] = Form.useForm();
const { selectDomainId } = domainManger;
const exchangeFields = ['blackList', 'whiteList'];
const domainModel = useModel('SemanticModel.domainData');
const { selectDomainId } = domainModel;
const [dimensionVisible, setDimensionVisible] = useState<boolean>(false);
const [taskItemState, setTaskItemState] = useState<ISemantic.IDictKnowledgeTaskItem>();
const [saveLoading, setSaveLoading] = useState<boolean>(false);
@@ -484,6 +480,4 @@ const DimensionValueSettingForm: React.FC<Props> = ({
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(DimensionValueSettingForm);
export default DimensionValueSettingForm;

View File

@@ -1,18 +1,17 @@
import { message } from 'antd';
import React, { useState, useEffect } from 'react';
import { connect } from 'umi';
import { useModel } from '@umijs/max';
import type { StateType } from '../../model';
import { getDomainExtendConfig, addDomainExtend, editDomainExtend } from '../../service';
import { ProCard } from '@ant-design/pro-components';
import { ProCard } from '@ant-design/pro-components';
import TextAreaCommonEditList from '../../components/CommonEditList/TextArea';
type Props = {
domainManger: StateType;
};
type Props = {};
const RecommendedQuestionsSection: React.FC<Props> = ({ domainManger }) => {
const { selectModelId: modelId } = domainManger;
const RecommendedQuestionsSection: React.FC<Props> = ({}) => {
const modelModel = useModel('SemanticModel.modelData');
const { selectModelId: modelId } = modelModel;
const [questionData, setQuestionData] = useState<string[]>([]);
const [currentRecordId, setCurrentRecordId] = useState<number>(0);
@@ -85,6 +84,4 @@ const RecommendedQuestionsSection: React.FC<Props> = ({ domainManger }) => {
</div>
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(RecommendedQuestionsSection);
export default RecommendedQuestionsSection;

View File

@@ -41,10 +41,10 @@ import { history } from 'umi';
export type CreateFormProps = {
datasourceId?: number;
domainId: number;
modelId: number;
domainId?: number;
modelId?: number;
createModalVisible: boolean;
metricItem: any;
metricItem?: ISemantic.IMetricItem;
onCancel?: () => void;
onSubmit?: (values: any) => void;
};

View File

@@ -1,5 +1,5 @@
import React, { useState, useRef, useEffect } from 'react';
import { Input, Space, Tag } from 'antd';
import { Input, Space, Tag, Divider } from 'antd';
import { ProTable } from '@ant-design/pro-components';
import { ProCard } from '@ant-design/pro-components';
import SqlEditor from '@/components/SqlEditor';
@@ -94,7 +94,7 @@ const MetricMeasuresFormTable: React.FC<Props> = ({
{
dataIndex: 'constraint',
title: '限定条件',
width: 250,
width: 350,
tooltip:
'该限定条件用于在计算指标时限定口径作用于度量所用于过滤的维度必须在创建模型的时候被标记为日期或者维度不需要加where关键字。比如维度A="值1" and 维度B="值2"',
render: (_: any, record: any) => {
@@ -103,6 +103,7 @@ const MetricMeasuresFormTable: React.FC<Props> = ({
<TextArea
placeholder="请输入限定条件"
value={constraint}
style={{ height: 42 }}
disabled={!selectedKeysMap[bizName]}
onChange={(event) => {
const { value } = event.target;
@@ -129,7 +130,7 @@ const MetricMeasuresFormTable: React.FC<Props> = ({
{
dataIndex: 'agg',
title: '聚合函数',
width: 80,
width: 150,
},
];
@@ -201,12 +202,13 @@ const MetricMeasuresFormTable: React.FC<Props> = ({
},
}}
pagination={{ defaultPageSize: 10 }}
size="small"
// size="small"
options={false}
tableAlertRender={false}
scroll={{ y: 500 }}
scroll={{ y: 700 }}
rowSelection={rowSelection}
/>
<Divider style={{ marginBottom: 0 }} />
<ProCard
title={<FormLabelRequire title="表达式" />}
// tooltip="由于度量已自带聚合函数,因此通过度量创建指标时,表达式中无需再写聚合函数,如

View File

@@ -3,10 +3,8 @@ import { ProTable } from '@ant-design/pro-components';
import { message, Button, Space, Popconfirm, Input } from 'antd';
import React, { useRef, useState, useEffect } from 'react';
import { StatusEnum } from '../enum';
import type { Dispatch } from 'umi';
import { connect, history } from 'umi';
import type { StateType } from '../model';
import { deleteModel, updateModel } from '../service';
import { useModel } from '@umijs/max';
import { deleteModel, updateModel, batchUpdateModelStatus } from '../service';
import ClassModelTypeModal from './ClassModelTypeModal';
import { ColumnsConfig } from './TableColumnRender';
import TableHeaderFilter from './TableHeaderFilter';
@@ -18,18 +16,14 @@ type Props = {
disabledEdit?: boolean;
modelList: ISemantic.IModelItem[];
onModelChange?: (model?: ISemantic.IModelItem) => void;
dispatch: Dispatch;
domainManger: StateType;
};
const ModelTable: React.FC<Props> = ({
modelList,
disabledEdit = false,
onModelChange,
dispatch,
domainManger,
}) => {
const { selectDomainId, modelTableHistoryParams } = domainManger;
const ModelTable: React.FC<Props> = ({ modelList, disabledEdit = false, onModelChange }) => {
const domainModel = useModel('SemanticModel.domainData');
const modelModel = useModel('SemanticModel.modelData');
const { selectDomainId } = domainModel;
const { modelTableHistoryParams, setModelTableHistoryParams } = modelModel;
const [modelItem, setModelItem] = useState<ISemantic.IModelItem>();
const [saveLoading, setSaveLoading] = useState<boolean>(false);
const [filterParams, setFilterParams] = useState<Record<string, any>>({});
@@ -63,12 +57,9 @@ const ModelTable: React.FC<Props> = ({
}, []);
const dipatchParams = (params: Record<string, any>) => {
dispatch({
type: 'domainManger/setModelTableHistoryParams',
payload: {
[selectDomainId]: {
...params,
},
setModelTableHistoryParams({
[selectDomainId]: {
...params,
},
});
};
@@ -81,17 +72,19 @@ const ModelTable: React.FC<Props> = ({
}
};
const updateModelStatus = async (modelData: ISemantic.IModelItem) => {
setSaveLoading(true);
const { code, msg } = await updateModel({
...modelData,
const queryBatchUpdateStatus = async (ids: React.Key[], status: StatusEnum) => {
if (Array.isArray(ids) && ids.length === 0) {
return;
}
const { code, msg } = await batchUpdateModelStatus({
ids,
status,
});
setSaveLoading(false);
if (code === 200) {
onModelChange?.();
} else {
message.error(msg);
return;
}
message.error(msg);
};
const columnsConfig = ColumnsConfig();
@@ -178,10 +171,7 @@ const ModelTable: React.FC<Props> = ({
type="link"
key="editStatusOfflineBtn"
onClick={() => {
updateModelStatus({
...record,
status: StatusEnum.OFFLINE,
});
queryBatchUpdateStatus([record.id], StatusEnum.OFFLINE);
}}
>
@@ -191,10 +181,7 @@ const ModelTable: React.FC<Props> = ({
type="link"
key="editStatusOnlineBtn"
onClick={() => {
updateModelStatus({
...record,
status: StatusEnum.ONLINE,
});
queryBatchUpdateStatus([record.id], StatusEnum.ONLINE);
}}
>
@@ -308,6 +295,4 @@ const ModelTable: React.FC<Props> = ({
</>
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(ModelTable);
export default ModelTable;

View File

@@ -1,16 +1,11 @@
import React from 'react';
import { ISemantic } from '../data';
import { connect } from 'umi';
import type { Dispatch } from 'umi';
import type { StateType } from '../model';
import ModelTable from './ModelTable';
type Props = {
disabledEdit?: boolean;
modelList: ISemantic.IModelItem[];
onModelChange?: (model?: ISemantic.IModelItem) => void;
domainManger: StateType;
dispatch: Dispatch;
};
const OverView: React.FC<Props> = ({ modelList, disabledEdit = false, onModelChange }) => {
@@ -21,6 +16,4 @@ const OverView: React.FC<Props> = ({ modelList, disabledEdit = false, onModelCha
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(OverView);
export default OverView

View File

@@ -2,33 +2,27 @@ import React, { useState, useEffect } from 'react';
import { Form, Input, Switch, message } from 'antd';
import SelectPartner from '@/components/SelectPartner';
import SelectTMEPerson from '@/components/SelectTMEPerson';
import { connect } from 'umi';
import type { Dispatch } from 'umi';
import type { StateType } from '../../model';
import { useModel } from '@umijs/max';
import FormItemTitle from '@/components/FormHelper/FormItemTitle';
import { updateDomain, updateModel, getDomainDetail, getModelDetail } from '../../service';
import styles from '../style.less';
type Props = {
permissionTarget: 'model' | 'domain';
dispatch: Dispatch;
domainManger: StateType;
onSubmit?: (data?: any) => void;
onValuesChange?: (value, values) => void;
};
const FormItem = Form.Item;
const PermissionAdminForm: React.FC<Props> = ({
permissionTarget,
domainManger,
onValuesChange,
}) => {
const PermissionAdminForm: React.FC<Props> = ({ permissionTarget, onValuesChange }) => {
const [form] = Form.useForm();
const [isOpenState, setIsOpenState] = useState<boolean>(true);
const [classDetail, setClassDetail] = useState<any>({});
const { selectModelId: modelId, selectDomainId } = domainManger;
const { APP_TARGET } = process.env;
const domainModel = useModel('SemanticModel.domainData');
const modelModel = useModel('SemanticModel.modelData');
const { selectDomainId } = domainModel;
const { selectModelId: modelId } = modelModel;
const queryClassDetail = async () => {
const selectId = permissionTarget === 'model' ? modelId : selectDomainId;
@@ -146,6 +140,4 @@ const PermissionAdminForm: React.FC<Props> = ({
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(PermissionAdminForm);
export default PermissionAdminForm;

View File

@@ -1,7 +1,7 @@
import React, { useEffect, useState, useRef } from 'react';
import { Button, message, Form, Space, Drawer, Input } from 'antd';
import { ProCard } from '@ant-design/pro-components';
import { connect } from 'umi';
import { useModel } from 'umi';
import { createGroupAuth, updateGroupAuth } from '../../service';
import PermissionCreateForm from './PermissionCreateForm';
import type { StateType } from '../../model';
@@ -12,7 +12,6 @@ import { wrapperTransTypeAndId } from '../../utils';
import styles from '../style.less';
type Props = {
domainManger: StateType;
permissonData: any;
onCancel: () => void;
visible: boolean;
@@ -21,13 +20,19 @@ type Props = {
const FormItem = Form.Item;
const TextArea = Input.TextArea;
const PermissionCreateDrawer: React.FC<Props> = ({
domainManger,
visible,
permissonData,
onCancel,
onSubmit,
}) => {
const { dimensionList, metricList, selectModelId: modelId } = domainManger;
const modelModel = useModel('SemanticModel.modelData');
const dimensionModel = useModel('SemanticModel.dimensionData');
const metricModel = useModel('SemanticModel.metricData');
const { selectModelId: modelId } = modelModel;
const { MdimensionList: dimensionList } = dimensionModel;
const { MmetricList: metricList } = metricModel;
const [form] = Form.useForm();
const basicInfoFormRef = useRef<any>(null);
const [selectedDimensionKeyList, setSelectedDimensionKeyList] = useState<string[]>([]);
@@ -217,6 +222,4 @@ const PermissionCreateDrawer: React.FC<Props> = ({
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(PermissionCreateDrawer);
export default PermissionCreateDrawer;

View File

@@ -1,16 +1,11 @@
import { Space } from 'antd';
import React from 'react';
import type { Dispatch } from 'umi';
import { connect } from 'umi';
import type { StateType } from '../../model';
import { ProCard } from '@ant-design/pro-components';
import { ProCard } from '@ant-design/pro-components';
import PermissionTable from './PermissionTable';
import PermissionAdminForm from './PermissionAdminForm';
type Props = {
permissionTarget: 'model' | 'domain';
dispatch: Dispatch;
domainManger: StateType;
};
const PermissionSection: React.FC<Props> = ({ permissionTarget }) => {
@@ -27,6 +22,4 @@ const PermissionSection: React.FC<Props> = ({ permissionTarget }) => {
</>
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(PermissionSection);
export default PermissionSection;

View File

@@ -2,24 +2,29 @@ import type { ActionType, ProColumns } from '@ant-design/pro-components';
import { ProTable } from '@ant-design/pro-components';
import { message, Button, Space, Popconfirm, Tooltip } from 'antd';
import React, { useRef, useState, useEffect } from 'react';
import type { Dispatch } from 'umi';
import { connect } from 'umi';
import type { StateType } from '../../model';
import { useModel } from '@umijs/max';
import { getGroupAuthInfo, removeGroupAuth } from '../../service';
import { getOrganizationTree } from '@/components/SelectPartner/service';
import { getAllUser } from '@/components/SelectTMEPerson/service';
import PermissionCreateDrawer from './PermissionCreateDrawer';
import { findDepartmentTree } from '@/pages/SemanticModel/utils';
type Props = {
dispatch: Dispatch;
domainManger: StateType;
};
type Props = {};
const PermissionTable: React.FC<Props> = ({ domainManger }) => {
const PermissionTable: React.FC<Props> = ({}) => {
const { APP_TARGET } = process.env;
const isInner = APP_TARGET === 'inner';
const { dimensionList, metricList, selectModelId: modelId } = domainManger;
const modelModel = useModel('SemanticModel.modelData');
const dimensionModel = useModel('SemanticModel.dimensionData');
const metricModel = useModel('SemanticModel.metricData');
const allUserModel = useModel('allUserData');
const { allUserList, MrefreshUserList } = allUserModel;
const { selectModelId: modelId } = modelModel;
const { MdimensionList: dimensionList } = dimensionModel;
const { MmetricList: metricList } = metricModel;
const [createModalVisible, setCreateModalVisible] = useState<boolean>(false);
const [permissonData, setPermissonData] = useState<any>({});
@@ -59,16 +64,19 @@ const PermissionTable: React.FC<Props> = ({ domainManger }) => {
};
const queryTmePersonData = async () => {
const { code, data } = await getAllUser();
if (code === 200 || Number(code) === 0) {
setTmePerson(data);
}
const list = await MrefreshUserList();
setTmePerson(list);
};
useEffect(() => {
if (isInner) {
queryDepartmentData();
}
queryTmePersonData();
if (Array.isArray(allUserList) && allUserList.length > 0) {
setTmePerson(allUserList);
} else {
queryTmePersonData();
}
}, []);
const columns: ProColumns[] = [
@@ -273,6 +281,4 @@ const PermissionTable: React.FC<Props> = ({ domainManger }) => {
</>
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(PermissionTable);
export default PermissionTable;

View File

@@ -2,10 +2,9 @@ import type { ActionType, ProColumns } from '@ant-design/pro-components';
import { ProTable } from '@ant-design/pro-components';
import { message, Button, Space, Popconfirm, Typography } from 'antd';
import React, { useRef, useState, useEffect } from 'react';
import { connect } from 'umi';
import type { StateType } from '../../model';
import { useModel } from '@umijs/max';
import { getTermList, saveOrUpdate, deleteTerm } from '../../service';
import dayjs from 'dayjs';
import styles from '../style.less';
import { ISemantic } from '../../data';
import { ColumnsConfig } from '../../components/TableColumnRender';
@@ -13,12 +12,11 @@ import TermCreateForm from './TermCreateForm';
const { Paragraph } = Typography;
type Props = {
domainManger: StateType;
};
type Props = {};
const TermTable: React.FC<Props> = ({ domainManger }) => {
const { selectDomainId } = domainManger;
const TermTable: React.FC<Props> = ({}) => {
const domainModel = useModel('SemanticModel.domainData');
const { selectDomainId } = domainModel;
const [createModalVisible, setCreateModalVisible] = useState<boolean>(false);
const [termItem, setTermItem] = useState<ISemantic.ITermItem>();
@@ -96,7 +94,7 @@ const TermTable: React.FC<Props> = ({ domainManger }) => {
dataIndex: 'alias',
title: '近义词',
search: false,
render: (_: string[]) => {
render: (_) => {
const alias = Array.isArray(_) ? _.join(',') : '-';
return (
<Paragraph ellipsis={{ tooltip: alias, rows: 3 }} style={{ width: 350, marginBottom: 0 }}>
@@ -106,11 +104,24 @@ const TermTable: React.FC<Props> = ({ domainManger }) => {
},
},
{
dataIndex: 'createdBy',
title: '创建人',
search: false,
},
{
dataIndex: 'updatedAt',
title: '更新时间',
search: false,
render: (value: any) => {
return value && value !== '-' ? dayjs(value).format('YYYY-MM-DD HH:mm:ss') : '-';
},
},
{
dataIndex: 'description',
title: '描述',
search: false,
render: columnsConfig.description.render,
},
{
@@ -194,6 +205,4 @@ const TermTable: React.FC<Props> = ({ domainManger }) => {
</>
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(TermTable);
export default TermTable;

View File

@@ -13,7 +13,7 @@
position: relative;
.sider {
flex: 0 0 auto;
width: 285px;
width: 250px;
border-right: 5px solid #eee;
position: relative;
transition: all 0.2s,background 0s;
@@ -81,7 +81,7 @@
}
}
.search {
width: 205px;
width: 175px;
margin: 10px 0 10px 16px;
}
@@ -235,7 +235,7 @@
width: 100%;
overflow: hidden;
.searchContainer {
width: 280px;
width: 250px;
padding:3px 0;
border-bottom: 1px solid #eee;
}
@@ -369,12 +369,12 @@
.desc {
margin: 0;
padding: 25px;
// padding: 25px;
color: #667085;
font-size: 14px;
border-bottom: 1px solid #eee;
border-top: 1px solid #eee;
margin-bottom: 10px;
// border-bottom: 1px solid #eee;
// border-top: 1px solid #eee;
// margin-bottom: 10px;
.markerTag {
color: #2499ef;
font-size: 14px;
@@ -398,4 +398,90 @@
width: max-content;
display: flex;
}
}
}
.infoCard {
min-height: 100%;
background-color: rgb(255, 255, 255);
color: rgb(38, 38, 38);
transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
position: relative;
border: 1px solid rgb(230, 235, 241);
border-radius: 4px;
box-shadow: inherit;
.infoCardTitle {
display: flex;
border-bottom: 1px solid #e6ebf1;
padding: 20px 20px 20px 40px;
align-items: center;
color: rgb(38, 38, 38);
margin: 0px;
font-size: 16px;
font-weight: 600;
line-height: 1.57;
font-family: "tencentFont", sans-serif;
}
.infoCardContainer {
padding: 20px;
height: calc(100vh - 260px);
overflow: scroll;
}
.infoCardFooter {
border-top: 1px solid #e6ebf1;
display: flex;
align-items: center;
justify-content: flex-end;
flex: 0 0 auto;
padding: 20px;
.infoCardFooterContainer {
box-sizing: border-box;
display: flex;
flex-flow: wrap;
// width: 100%;
justify-content: space-between;
align-items: center;
}
}
}
.supersonicForm {
padding: 0 20px;
:global {
.ant-input-search .ant-input-search-button {
height: 42px;
}
.ant-form-item .ant-form-item-label > label {
color:#262626;
}
.ant-form-item-label {
font-family: "tencentFont", sans-serif;
}
.ant-input {
padding: 9px 14px 9px 12px;
}
.ant-select {
&.ant-select-single {
height: auto;
}
&.ant-select-multiple {
.ant-select-selector {
padding: 6px 14px 6px 12px;
}
}
.ant-select-selector {
padding: 5px 14px 5px 12px;
.ant-select-selection-placeholder {
padding: 0px 8px 0px 8px;
}
.ant-select-selection-overflow-item {
.ant-select-selection-item {
color: rgb(22, 119, 255);
background-color: rgb(230, 244, 255);
}
}
}
}
}
}