From 82c63a7f2212bb1fd9ffca6ad1a72398359a790e Mon Sep 17 00:00:00 2001 From: Jun Zhang Date: Sat, 30 Nov 2024 20:03:41 +0800 Subject: [PATCH] [improvement][headless-fe] Revamped the interaction for semantic modeling routing and successfully implemented the switching between dimension and dataset management. (#1934) Co-authored-by: tristanliu --- .../packages/supersonic-fe/config/routes.ts | 115 +---- webapp/packages/supersonic-fe/src/app.tsx | 13 +- .../supersonic-fe/src/common/constants.ts | 2 + .../pages/SemanticModel/Dimension/Detail.tsx | 101 +++++ .../src/pages/SemanticModel/DomainManager.tsx | 9 +- .../Insights/components/TagInfoCreateForm.tsx | 1 - .../src/pages/SemanticModel/Metric/Detail.tsx | 29 +- .../src/pages/SemanticModel/Metric/Edit.tsx | 74 +++- .../src/pages/SemanticModel/Metric/Edit2.tsx | 57 --- .../src/pages/SemanticModel/Metric/Market.tsx | 2 - .../Metric/MetricInfoEditSider.tsx | 162 ------- .../SemanticModel/Metric/MetricInfoSider.tsx | 9 - .../Metric/components/MetricFilter.tsx | 2 +- .../components/MetricInfoCreateForm.tsx | 399 +++++++++--------- .../src/pages/SemanticModel/Metric/index.tsx | 2 +- .../src/pages/SemanticModel/Metric/style.less | 326 +------------- .../src/pages/SemanticModel/ModelManager.tsx | 9 +- .../pages/SemanticModel/OverviewContainer.tsx | 56 +-- .../pages/SemanticModel/PageBreadcrumb.tsx | 61 ++- .../View/components/DataSetTable.tsx | 15 +- .../View/components/DatasetCreateForm.tsx | 202 +++++++++ .../SemanticModel/View/components/Detail.tsx | 122 ++++++ .../View/components/ViewCreateFormModal.tsx | 2 - .../components/ViewModelConfigTransfer.tsx | 2 +- .../components/ClassDimensionTable.tsx | 31 +- .../components/ClassMetricTable.tsx | 19 +- .../DetailContainer/DetailFormWrapper.tsx | 55 +++ .../DetailContainer/DetailSider.tsx | 154 +++++++ .../components/DetailContainer/index.tsx | 22 + .../components/DetailContainer/style.less | 338 +++++++++++++++ .../components/DetailContainer/type.ts | 5 + .../components/DimensionInfoForm.tsx | 343 +++++++++++++++ .../SemanticModel/components/ModelTable.tsx | 5 +- .../components/TableColumnRender.tsx | 37 +- .../pages/SemanticModel/components/style.less | 2 +- .../src/pages/SemanticModel/index.tsx | 7 + .../SemanticModel/models/dimensionData.ts | 8 +- .../pages/SemanticModel/models/domainData.ts | 25 +- .../pages/SemanticModel/models/modelData.ts | 14 +- .../src/pages/SemanticModel/service.ts | 9 +- .../src/pages/SemanticModel/utils.tsx | 34 ++ .../packages/supersonic-fe/src/utils/utils.ts | 6 + 42 files changed, 1889 insertions(+), 997 deletions(-) create mode 100644 webapp/packages/supersonic-fe/src/pages/SemanticModel/Dimension/Detail.tsx delete mode 100644 webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Edit2.tsx delete mode 100644 webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/MetricInfoEditSider.tsx create mode 100644 webapp/packages/supersonic-fe/src/pages/SemanticModel/View/components/DatasetCreateForm.tsx create mode 100644 webapp/packages/supersonic-fe/src/pages/SemanticModel/View/components/Detail.tsx create mode 100644 webapp/packages/supersonic-fe/src/pages/SemanticModel/components/DetailContainer/DetailFormWrapper.tsx create mode 100644 webapp/packages/supersonic-fe/src/pages/SemanticModel/components/DetailContainer/DetailSider.tsx create mode 100644 webapp/packages/supersonic-fe/src/pages/SemanticModel/components/DetailContainer/index.tsx create mode 100644 webapp/packages/supersonic-fe/src/pages/SemanticModel/components/DetailContainer/style.less create mode 100644 webapp/packages/supersonic-fe/src/pages/SemanticModel/components/DetailContainer/type.ts create mode 100644 webapp/packages/supersonic-fe/src/pages/SemanticModel/components/DimensionInfoForm.tsx diff --git a/webapp/packages/supersonic-fe/config/routes.ts b/webapp/packages/supersonic-fe/config/routes.ts index 04a8413d8..03f2cd484 100644 --- a/webapp/packages/supersonic-fe/config/routes.ts +++ b/webapp/packages/supersonic-fe/config/routes.ts @@ -91,6 +91,17 @@ const ROUTES = [ }, ], }, + { + path: '/model/dataset/:domainId/:datasetId', + component: './SemanticModel/View/components/Detail', + envEnableList: [ENV_KEY.SEMANTIC], + routes: [ + { + path: '/model/dataset/:domainId/:datasetId/:menuKey', + component: './SemanticModel/View/components/Detail', + }, + ], + }, { path: '/model/metric/:domainId/:modelId/:metricId', component: './SemanticModel/Metric/Edit', @@ -102,101 +113,19 @@ const ROUTES = [ // }, // ], }, - // { - // path: '/model/manager/', - // component: './SemanticModel/OverviewContainer', - // routes: [ - // { - // path: '/model/manager/:domainId/:modelId', - // component: './SemanticModel/ModelManager', - // routes: [ - // { - // path: '/model/manager/:domainId/:modelId/:menuKey', - // component: './SemanticModel/ModelManager', - // }, - // ], - // }, - // ], - // }, - // { - // path: '/model/:domainId', - // component: './SemanticModel/DomainManager', - // envEnableList: [ENV_KEY.SEMANTIC], - // routes: [ - // { - // path: '/model/:domainId/:menuKey', - // component: './SemanticModel/DomainManager', - // }, - // ], - // }, - // { - // path: '/model/manager/:domainId/:modelId', - // component: './SemanticModel/ModelManager', - // envEnableList: [ENV_KEY.SEMANTIC], - // routes: [ - // { - // path: '/model/manager/:domainId/:modelId/:menuKey', - // component: './SemanticModel/ModelManager', - // }, - // ], - // }, - - // { - // path: '/model/:domainId/:modelId/:menuKey', - // component: './SemanticModel/DomainManager', - // envEnableList: [ENV_KEY.SEMANTIC], - // }, - // { - // path: '/model/:domainId/:modelId/metric', - // component: './SemanticModel/components/ModelMetric', - // envEnableList: [ENV_KEY.SEMANTIC], - // routes: [ - // { - // path: '/model/:domainId/:modelId/metric/list', - // component: './SemanticModel/components/ClassMetricTable', - // envEnableList: [ENV_KEY.SEMANTIC], - // }, - // ], - // }, + { + path: '/model/dimension/:domainId/:modelId/:dimensionId', + component: './SemanticModel/Dimension/Detail', + envEnableList: [ENV_KEY.SEMANTIC], + // routes: [ + // { + // path: '/model/manager/:domainId/:modelId/:menuKey', + // component: './SemanticModel/ModelManager', + // }, + // ], + }, ], }, - // { - // path: '/model/', - // component: './SemanticModel/DomainManager', - // name: 'semanticModel', - // envEnableList: [ENV_KEY.SEMANTIC], - // routes: [ - // { - // path: '/model/:domainId/:modelId', - // component: './SemanticModel/DomainManager', - // envEnableList: [ENV_KEY.SEMANTIC], - // }, - // { - // path: '/model/:domainId/:modelId/:menuKey', - // component: './SemanticModel/DomainManager', - // envEnableList: [ENV_KEY.SEMANTIC], - // }, - // { - // path: '/model/:domainId/:modelId/metric', - // component: './SemanticModel/components/ModelMetric', - // envEnableList: [ENV_KEY.SEMANTIC], - // routes: [ - // { - // path: '/model/:domainId/:modelId/metric/list', - // component: './SemanticModel/components/ClassMetricTable', - // envEnableList: [ENV_KEY.SEMANTIC], - // }, - // ], - // }, - // ], - // }, - - // { - // path: '/model/:domainId/:modelId/:menuKey', - // component: './SemanticModel/DomainManager', - // name: 'semanticModel', - // envEnableList: [ENV_KEY.SEMANTIC], - // }, { path: '/metric', diff --git a/webapp/packages/supersonic-fe/src/app.tsx b/webapp/packages/supersonic-fe/src/app.tsx index 107a7ea68..bcc5d7a69 100644 --- a/webapp/packages/supersonic-fe/src/app.tsx +++ b/webapp/packages/supersonic-fe/src/app.tsx @@ -12,6 +12,7 @@ import { publicPath } from '../config/defaultSettings'; import { Copilot } from 'supersonic-chat-sdk'; import { configProviderTheme } from '../config/themeSettings'; export { request } from './services/request'; +import { BASE_TITLE } from '@/common/constants'; import { ROUTE_AUTH_CODES } from '../config/routes'; import AppPage from './pages/index'; @@ -106,12 +107,12 @@ export async function getInitialState(): Promise<{ // } export function onRouteChange() { - const title = window.document.title.split('-SuperSonic')[0]; - if (!title.includes('SuperSonic')) { - window.document.title = `${title}-SuperSonic`; - } else { - window.document.title = 'SuperSonic'; - } + setTimeout(() => { + let title = window.document.title; + if (!title.toLowerCase().endsWith(BASE_TITLE.toLowerCase())) { + window.document.title = `${title}-${BASE_TITLE}`; + } + }, 100); } export const layout: RunTimeLayoutConfig = (params) => { diff --git a/webapp/packages/supersonic-fe/src/common/constants.ts b/webapp/packages/supersonic-fe/src/common/constants.ts index 0b4f2a520..c3beadcb3 100644 --- a/webapp/packages/supersonic-fe/src/common/constants.ts +++ b/webapp/packages/supersonic-fe/src/common/constants.ts @@ -3,6 +3,8 @@ export const AUTH_TOKEN_KEY = process.env.APP_TARGET === 'inner' ? 'TME_TOKEN' : // 记录上次访问页面 export const FROM_URL_KEY = 'FROM_URL'; +export const BASE_TITLE = 'Supersonic'; + export const PRIMARY_COLOR = '#f87653'; export const CHART_BLUE_COLOR = '#446dff'; export const CHAT_BLUE = '#1b4aef'; diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Dimension/Detail.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Dimension/Detail.tsx new file mode 100644 index 000000000..56ec85a1c --- /dev/null +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Dimension/Detail.tsx @@ -0,0 +1,101 @@ +import { message } from 'antd'; +import React, { useState, useEffect, useRef } from 'react'; +import { useParams, useModel, Helmet } from '@umijs/max'; +import { BASE_TITLE } from '@/common/constants'; +import { ISemantic } from '../data'; +import { getDimensionList } from '../service'; +import DetailContainer from '@/pages/SemanticModel/components/DetailContainer'; +import DetailSider from '@/pages/SemanticModel/components/DetailContainer/DetailSider'; +import { ProjectOutlined, ConsoleSqlOutlined } from '@ant-design/icons'; +import DimensionInfoForm from '../components/DimensionInfoForm'; +import DetailFormWrapper from '@/pages/SemanticModel/components/DetailContainer/DetailFormWrapper'; + +type Props = Record; + +const DataSetDetail: React.FC = () => { + const settingList = [ + { + icon: , + key: 'basic', + text: '基本信息', + }, + ]; + const params: any = useParams(); + const detailId = params.dimensionId; + const modelId = params.modelId; + const domainId = params.domainId; + const menuKey = params.menuKey; + const [detailData, setDetailData] = useState(); + const dimensionModel = useModel('SemanticModel.dimensionData'); + const { setSelectDimension } = dimensionModel; + const [activeMenu, setActiveMenu] = useState(() => { + if (menuKey) { + const target = settingList.find((item) => item.key === menuKey); + if (target) { + return target; + } + } + + return settingList[0]; + }); + const detailFormRef = useRef(); + + useEffect(() => { + return () => { + setSelectDimension(undefined); + }; + }, []); + + useEffect(() => { + if (!detailId) { + return; + } + queryDetailData(detailId); + }, [detailId]); + + const queryDetailData = async (id: number) => { + const { code, data, msg } = await getDimensionList({ ids: [id] }); + if (code === 200) { + const target = data?.list?.[0]; + setDetailData(target); + setSelectDimension(target); + return; + } + message.error(msg); + }; + + return ( + <> + + { + setActiveMenu(menu); + }} + /> + } + containerNode={ + { + detailFormRef.current.onSave(); + }} + > + + + } + /> + + ); +}; + +export default DataSetDetail; diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/DomainManager.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/DomainManager.tsx index d278a710b..677b3b561 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/DomainManager.tsx +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/DomainManager.tsx @@ -1,6 +1,7 @@ import React, { useState } from 'react'; -import { history, useParams, useModel } from '@umijs/max'; +import { useParams, useModel } from '@umijs/max'; import DomainManagerTab from './components/DomainManagerTab'; +import { toDomainList } from '@/pages/SemanticModel/utils'; type Props = {}; @@ -14,16 +15,12 @@ const DomainManager: React.FC = ({}) => { const [activeKey, setActiveKey] = useState(menuKey); - const pushUrlMenu = (domainId: number, menuKey: string) => { - history.push(`/model/domain/${domainId}/${menuKey}`); - }; - return ( { setActiveKey(menuKey); - pushUrlMenu(selectDomainId, menuKey); + toDomainList(selectDomainId, menuKey); }} /> ); diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Insights/components/TagInfoCreateForm.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Insights/components/TagInfoCreateForm.tsx index 89a02cd43..8601f28e5 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Insights/components/TagInfoCreateForm.tsx +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Insights/components/TagInfoCreateForm.tsx @@ -540,7 +540,6 @@ const TagInfoCreateForm: React.FC = ({ forceRender width={800} style={{ top: 48 }} - // styles={{ padding: '32px 40px 48px' }} destroyOnClose title={`${isEdit ? '编辑' : '新建'}标签`} maskClosable={false} diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Detail.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Detail.tsx index f3b7a8137..d927eb203 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Detail.tsx +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Detail.tsx @@ -1,7 +1,8 @@ import { message, Tabs, Button, Space } from 'antd'; import React, { useState, useEffect } from 'react'; import { getMetricData, getDimensionList, getDrillDownDimension } from '../service'; -import { useParams, history } from '@umijs/max'; +import { useParams, history, Helmet } from '@umijs/max'; +import { BASE_TITLE } from '@/common/constants'; import styles from './style.less'; import { ArrowLeftOutlined } from '@ant-design/icons'; import MetricTrendSection from '@/pages/SemanticModel/Metric/components/MetricTrendSection'; @@ -32,6 +33,9 @@ const MetricDetail: React.FC = () => { }, [metricId]); const queryMetricData = async (metricId: string) => { + if (!metricId) { + return; + } const { code, data, msg } = await getMetricData(metricId); if (code === 200) { setMetircData({ ...data }); @@ -80,7 +84,7 @@ const MetricDetail: React.FC = () => { { key: 'metricCaliberInput', label: '基础信息', - children: , + children: , }, { key: 'metricTrend', @@ -103,8 +107,20 @@ const MetricDetail: React.FC = () => { return ( <> +
+
+ { + setMetricRelationModalOpenState(true); + }} + /> +
= () => { className={styles.metricDetailTab} />
-
- { - setMetricRelationModalOpenState(true); - }} - /> -
; const MetricDetail: React.FC = () => { const params: any = useParams(); - const metricId = params.metricId; + const metricId = +params.metricId; + const modelId = +params.modelId; + const domainId = +params.domainId; const [metircData, setMetircData] = useState(); const metricModel = useModel('SemanticModel.metricData'); - const { selectMetric, setSelectMetric } = metricModel; + const { setSelectMetric } = metricModel; const [settingKey, setSettingKey] = useState(MetricSettingKey.BASIC); useEffect(() => { @@ -31,7 +35,10 @@ const MetricDetail: React.FC = () => { }; }, []); - const queryMetricData = async (metricId: string) => { + const queryMetricData = async (metricId: number) => { + if (!metricId) { + return; + } const { code, data, msg } = await getMetricData(metricId); if (code === 200) { setMetircData({ ...data }); @@ -41,23 +48,46 @@ const MetricDetail: React.FC = () => { message.error(msg); }; + const settingList = [ + { + icon: , + key: MetricSettingKey.BASIC, + text: MetricSettingWording[MetricSettingKey.BASIC], + }, + { + icon: , + key: MetricSettingKey.SQL_CONFIG, + text: MetricSettingWording[MetricSettingKey.SQL_CONFIG], + }, + ]; + return ( <> -
-
-
- { - setSettingKey(key); - }} - metircData={metircData} - /> -
-
- -
-
-
+ + { + setSettingKey(key); + }} + /> + } + containerNode={ + + } + /> ); }; diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Edit2.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Edit2.tsx deleted file mode 100644 index f81b3bba7..000000000 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Edit2.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { message } from 'antd'; -import React, { useState, useEffect } from 'react'; -import { getMetricData } from '../service'; -import { useParams } from '@umijs/max'; -import styles from './style.less'; -import { ISemantic } from '../data'; -import MetricInfoEditSider from './MetricInfoEditSider'; -import MetricInfoCreateForm from './components/MetricInfoCreateForm'; -import { MetricSettingKey } from './constants'; - -type Props = Record; - -const MetricDetail: React.FC = () => { - const params: any = useParams(); - const metricId = params.metricId; - const [metircData, setMetircData] = useState(); - - const [settingKey, setSettingKey] = useState(MetricSettingKey.BASIC); - - useEffect(() => { - if (!metricId) { - return; - } - queryMetricData(metricId); - }, [metricId]); - - const queryMetricData = async (metricId: string) => { - const { code, data, msg } = await getMetricData(metricId); - if (code === 200) { - setMetircData({ ...data }); - return; - } - message.error(msg); - }; - - return ( - <> -
-
- {/*
- { - setSettingKey(key); - }} - metircData={metircData} - /> -
*/} -
- -
-
-
- - ); -}; - -export default MetricDetail; diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Market.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Market.tsx index 606c3ec09..11700f26f 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Market.tsx +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/Market.tsx @@ -152,8 +152,6 @@ const ClassMetricTable: React.FC = ({}) => { }; const handleMetricEdit = (metricItem: ISemantic.IMetricItem) => { - // setMetricItem(metricItem); - // setCreateModalVisible(true); history.push(`/model/metric/edit/${metricItem.id}`); }; diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/MetricInfoEditSider.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/MetricInfoEditSider.tsx deleted file mode 100644 index 8a0e5ff4a..000000000 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/MetricInfoEditSider.tsx +++ /dev/null @@ -1,162 +0,0 @@ -import { Tag, Space, Tooltip } from 'antd'; -import React, { useState } from 'react'; -import dayjs from 'dayjs'; -import { MetricSettingKey, MetricSettingWording } from './constants'; -import { basePath } from '../../../../config/defaultSettings'; -import { - ExportOutlined, - SolutionOutlined, - PartitionOutlined, - ProjectOutlined, - ConsoleSqlOutlined, - SettingOutlined, -} from '@ant-design/icons'; -import styles from './style.less'; -import { ISemantic } from '../data'; -import IndicatorStar from '../components/IndicatorStar'; - -type Props = { - metircData: ISemantic.IMetricItem; - onSettingKeyChange?: (key: MetricSettingKey) => void; -}; - -const MetricInfoEditSider: React.FC = ({ metircData, onSettingKeyChange }) => { - const [settingKey, setSettingKey] = useState(MetricSettingKey.BASIC); - - const settingList = [ - { - icon: , - key: MetricSettingKey.BASIC, - text: MetricSettingWording[MetricSettingKey.BASIC], - }, - { - icon: , - key: MetricSettingKey.SQL_CONFIG, - text: MetricSettingWording[MetricSettingKey.SQL_CONFIG], - }, - // { - // icon: , - // key: MetricSettingKey.DIMENSION_CONFIG, - // text: MetricSettingWording[MetricSettingKey.DIMENSION_CONFIG], - // }, - ]; - - return ( -
-
- {metircData?.id ? ( -
-
- - - {metircData?.name} - {metircData?.hasAdminRes && ( - { - window.open(`${basePath}model/${metircData.domainId}/${metircData.modelId}/`); - }} - > - - - - - )} - -
- {metircData?.bizName &&
{metircData.bizName}
} -
- ) : ( -
- - - 新建指标 - -
- )} - -
-
-
    - {settingList.map((item) => { - return ( -
  • { - onSettingKeyChange?.(item.key); - setSettingKey(item.key); - }} - > -
    {item.icon}
    -
    - {item.text} -
    -
  • - ); - })} -
-
- {/*
*/} - {metircData?.id && ( -
-
- - - - 创建信息 - - -
-
- 所属模型: - - - } color="#3b5999"> - {metircData?.modelName || '模型名为空'} - - {metircData?.hasAdminRes && ( - { - window.open(`${basePath}model/${metircData.domainId}/0/overview`); - }} - > - - - - - )} - - -
-
- 创建人: - {metircData?.createdBy} -
-
- 创建时间: - - {metircData?.createdAt - ? dayjs(metircData?.createdAt).format('YYYY-MM-DD HH:mm:ss') - : ''} - -
-
- 更新时间: - - {metircData?.createdAt - ? dayjs(metircData?.updatedAt).format('YYYY-MM-DD HH:mm:ss') - : ''} - -
-
- )} - - {/*
*/} -
-
- ); -}; - -export default MetricInfoEditSider; diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/MetricInfoSider.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/MetricInfoSider.tsx index 9ce982bef..3f9d92d38 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/MetricInfoSider.tsx +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/MetricInfoSider.tsx @@ -59,15 +59,6 @@ const MetricInfoSider: React.FC = ({

- {/*
- - - - 基本信息 - - -
*/} -
敏感度: diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/components/MetricFilter.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/components/MetricFilter.tsx index 26385eda9..075c3c1d8 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/components/MetricFilter.tsx +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/components/MetricFilter.tsx @@ -1,4 +1,4 @@ -import { Form, Input, Space, Row, Col, Switch, Flex, Tag } from 'antd'; +import { Form, Input, Space, Row, Col } from 'antd'; import StandardFormRow from '@/components/StandardFormRow'; import TagSelect from '@/components/TagSelect'; import React, { ReactNode, useEffect } from 'react'; diff --git a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/components/MetricInfoCreateForm.tsx b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/components/MetricInfoCreateForm.tsx index 217b25e05..46a0b14f1 100644 --- a/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/components/MetricInfoCreateForm.tsx +++ b/webapp/packages/supersonic-fe/src/pages/SemanticModel/Metric/components/MetricInfoCreateForm.tsx @@ -29,7 +29,6 @@ import { batchCreateTag, batchDeleteTag, } from '../../service'; -import { ArrowLeftOutlined } from '@ant-design/icons'; import MetricMetricFormTable from '../../components/MetricMetricFormTable'; import MetricFieldFormTable from '../../components/MetricFieldFormTable'; import DimensionAndMetricRelationModal from '../../components/DimensionAndMetricRelationModal'; @@ -38,9 +37,12 @@ import { createMetric, updateMetric, mockMetricAlias, getMetricTags } from '../. import { MetricSettingKey, MetricSettingWording } from '../constants'; import { ISemantic } from '../../data'; import { history } from '@umijs/max'; +import { toDomainList, toModelList } from '@/pages/SemanticModel/utils'; import globalStyles from '@/global.less'; export type CreateFormProps = { + modelId: number; + domainId: number; datasourceId?: number; metricItem: any; settingKey: MetricSettingKey; @@ -59,6 +61,8 @@ const queryParamsTypeParamsKey = { }; const MetricInfoCreateForm: React.FC = ({ + modelId, + domainId, datasourceId, onCancel, settingKey, @@ -66,9 +70,6 @@ const MetricInfoCreateForm: React.FC = ({ onSubmit, }) => { const isEdit = !!metricItem?.id; - const domainId = metricItem?.domainId; - const modelId = metricItem?.modelId; - const [currentStep, setCurrentStep] = useState(0); const formValRef = useRef({} as any); const [form] = Form.useForm(); const updateFormVal = (val: any) => { @@ -383,6 +384,9 @@ const MetricInfoCreateForm: React.FC = ({ } message.success('编辑指标成功'); onSubmit?.(queryParams); + if (!isEdit) { + toModelList(domainId, modelId!, 'metric'); + } return; } message.error(msg); @@ -482,10 +486,11 @@ const MetricInfoCreateForm: React.FC = ({ }; const renderContent = () => { - if (settingKey === MetricSettingKey.SQL_CONFIG) { - return ( + return ( + <>
@@ -609,211 +614,211 @@ const MetricInfoCreateForm: React.FC = ({ )}
- ); - } - return ( - <> - - - - - - - - - - - - - - - - - - - - - -