import { Tabs, Popover, message } from 'antd'; import React, { useEffect, useState } from 'react'; import { connect, Helmet, history, useParams } from 'umi'; import DomainListTree from './components/DomainList'; import ClassDataSourceTable from './components/ClassDataSourceTable'; import ClassDimensionTable from './components/ClassDimensionTable'; import ClassMetricTable from './components/ClassMetricTable'; import PermissionSection from './components/Permission/PermissionSection'; import DatabaseSection from './components/Database/DatabaseSection'; import EntitySettingSection from './components/Entity/EntitySettingSection'; import OverView from './components/OverView'; import styles from './components/style.less'; import type { StateType } from './model'; import { DownOutlined } from '@ant-design/icons'; import { ISemantic } from './data'; import { findLeafNodesFromDomainList } from './utils'; import SemanticGraphCanvas from './SemanticGraphCanvas'; import { getDomainList } from './service'; import type { Dispatch } from 'umi'; type Props = { domainManger: StateType; dispatch: Dispatch; }; const DomainManger: React.FC = ({ domainManger, dispatch }) => { const defaultTabKey = 'xflow'; const params: any = useParams(); const menuKey = params.menuKey ? params.menuKey : defaultTabKey; const modelId = params.modelId; const { selectDomainId, selectDomainName, domainList } = domainManger; const [modelList, setModelList] = useState([]); const [isModel, setIsModel] = useState(false); const [open, setOpen] = useState(false); const [activeKey, setActiveKey] = useState(menuKey); useEffect(() => { setActiveKey(menuKey); }, [menuKey]); const initSelectedDomain = (domainList: ISemantic.IDomainItem[]) => { const targetNode = domainList.filter((item: any) => { return `${item.id}` === modelId; })[0]; if (!targetNode) { const firstRootNode = domainList.filter((item: any) => { return item.parentId === 0; })[0]; if (firstRootNode) { const { id, name } = firstRootNode; dispatch({ type: 'domainManger/setSelectDomain', selectDomainId: id, selectDomainName: name, domainData: firstRootNode, }); } } else { const { id, name } = targetNode; dispatch({ type: 'domainManger/setSelectDomain', selectDomainId: id, selectDomainName: name, domainData: targetNode, }); } }; const initProjectTree = async () => { const { code, data, msg } = await getDomainList(); if (code === 200) { if (!selectDomainId) { initSelectedDomain(data); } dispatch({ type: 'domainManger/setDomainList', payload: { domainList: data }, }); } else { message.error(msg); } }; useEffect(() => { initProjectTree(); }, []); useEffect(() => { if (!selectDomainId) { return; } const list = findLeafNodesFromDomainList(domainList, selectDomainId); setModelList(list); if (Array.isArray(list) && list.length > 0) { setIsModel(false); pushUrlMenu(selectDomainId, 'overview'); setActiveKey('overview'); } else { setIsModel(true); const currentMenuKey = menuKey === 'overview' ? defaultTabKey : menuKey; pushUrlMenu(selectDomainId, currentMenuKey); setActiveKey(currentMenuKey); } }, [domainList, selectDomainId]); const handleOpenChange = (newOpen: boolean) => { setOpen(newOpen); }; const pushUrlMenu = (domainId: number, menuKey: string) => { history.push(`/semanticModel/${domainId}/${menuKey}`); }; useEffect(() => { if (selectDomainId) { dispatch({ type: 'domainManger/queryDimensionList', payload: { domainId: selectDomainId, }, }); dispatch({ type: 'domainManger/queryMetricList', payload: { domainId: selectDomainId, }, }); dispatch({ type: 'domainManger/queryDatabaseByDomainId', payload: { domainId: selectDomainId, }, }); } }, [selectDomainId]); const tabItem = [ { label: '子主题域', key: 'overview', children: , }, { label: '权限管理', key: 'permissonSetting', children: , }, ]; const isModelItem = [ { label: '画布', key: 'xflow', children: (
), }, { label: '数据库', key: 'dataBase', children: , }, { label: '数据源', key: 'dataSource', children: , }, { label: '维度', key: 'dimenstion', children: , }, { label: '指标', key: 'metric', children: , }, { label: '实体', key: 'entity', children: , }, { label: '权限管理', key: 'permissonSetting', children: , }, ]; return (

{ setOpen(false); }} onTreeDataUpdate={() => { initProjectTree(); }} /> } trigger="click" open={open} onOpenChange={handleOpenChange} >
{selectDomainName ? `当前主题域:${selectDomainName}` : '主题域信息'}

{selectDomainId ? ( <> { setActiveKey(menuKey); pushUrlMenu(selectDomainId, menuKey); }} /> ) : (

请选择项目

)}
); }; export default connect(({ domainManger }: { domainManger: StateType }) => ({ domainManger, }))(DomainManger);