diff --git a/web/config/router.config.js b/web/config/router.config.js index ebeb066e..9cc69ad9 100644 --- a/web/config/router.config.js +++ b/web/config/router.config.js @@ -18,7 +18,7 @@ export default [ authority: ['admin', 'user'], routes: [ // cluster - { path: '/', redirect: '/cluster/overview/' }, + { path: '/', redirect: '/cluster/overview' }, { path: '/cluster', name: 'cluster', @@ -34,10 +34,10 @@ export default [ // ], // }, { - path: '/cluster/overview/:cluster_id', + path: '/cluster/overview', name: 'overview', component: './Cluster/Overview', - hideInMenu: true, + // hideInMenu: true, routes:[ { path: '/', redirect: '/' }, ], diff --git a/web/src/models/global.js b/web/src/models/global.js index 2ada05f1..a7fcea33 100644 --- a/web/src/models/global.js +++ b/web/src/models/global.js @@ -250,6 +250,8 @@ export default { let clusterVisible = true; if(pathname.startsWith("/system")){ clusterVisible = false; + }else if(pathname.startsWith("/cluster/overview")){ + clusterVisible = false; }else{ if(!pathname.startsWith("/exception")){ dispatch({ diff --git a/web/src/pages/Cluster/Overview.js b/web/src/pages/Cluster/Overview.js index befd99da..4be8b364 100644 --- a/web/src/pages/Cluster/Overview.js +++ b/web/src/pages/Cluster/Overview.js @@ -1,102 +1,135 @@ -import React, {Fragment} from 'react'; -import {Card, List, Divider, Popconfirm, Row, Col, Table, Descriptions, Button} from "antd"; -import {Link} from "umi" -import moment from "moment"; +import React from 'react'; +import {List,Card,Row,Icon,Col} from "antd"; import styles from "./Overview.less"; import {connect} from "dva"; -import {ClusterItem} from "./ClusterList"; -import CalendarHeatmap from 'react-calendar-heatmap'; -import 'react-calendar-heatmap/dist/styles.css'; -import { Avatar } from 'antd'; -import { Tabs } from 'antd'; -const { TabPane } = Tabs; -import ClusterLoadMore from "../../components/List/LoadMoreList" -const data = [ +import {formatGigNumber} from "@/utils/utils"; + + +const tabList = [ { - title: 'Ant Design Title 1', + key: 'tabCluster', + tab: '集群', }, { - title: 'Ant Design Title 2', + key: 'tabHost', + tab: '主机', }, { - title: 'Ant Design Title 3', - }, - { - title: 'Ant Design Title 4', + key: 'tabNode', + tab: '节点', }, ]; + @connect(({global}) => ({ - selectedCluster: global.selectedCluster + })) class Overview extends React.Component { + state = { + tabkey: 'tabCluster', + }; - render() { - return ( -
- - - - (value.count > 0 ? 'blue' : 'white') - // } - // onClick={value => alert(`Clicked on value with count: ${value.count}`)} - /> - + onOperationTabChange = key => { + this.setState({ tabkey: key }); + }; - - ( - - } - title={{item.title}} - description="Ant Design, a design language for background applications, is refined by Ant UED Team" - /> - - )} - /> - - - - - - - + render() { - - - Content of Tab Pane 2 - - - - - + const { tabkey } = this.state; + const contentList = { + tabCluster: ( + +
+ + 暂无数据 +
+
+ ), + tabHost: ( + +
+ + 暂无数据 +
+
+ ), + tabNode: ( + +
+ + 暂无数据 +
+
+ ), + }; + return ( +
+ + + + +
+ 1 +
+
+ + + + +
+ 1 +
+
+ + + + +
+ 1 +
+
+ + + + +
+ 100GB +
+
+ +
-
- ) - } + + + + {contentList[tabkey]} + + + +
+ ) + } } export default Overview; diff --git a/web/src/pages/Cluster/Overview.less b/web/src/pages/Cluster/Overview.less index 093d1072..d08c4e12 100644 --- a/web/src/pages/Cluster/Overview.less +++ b/web/src/pages/Cluster/Overview.less @@ -1,27 +1,25 @@ -.overview{ - :global(.ant-descriptions-row){ - border-bottom: none; - } - :global(.ant-descriptions-item-label){ - border-right: none; - background-color: #fff; - font-weight: bold; - } - :global(.ant-descriptions-view){ - border: none; - } - :global(.ant-descriptions-item-content){ - color: #333; - } - .light{ - color: #666; - } -} -.clusterItemCard { - text-align: center; +.tabsCard { + :global { + .ant-card-head { + padding: 0 16px; + } + } } - -.card { - margin-bottom: 24px; +.rowSpace { + margin-bottom: 20px; } +.clusterMeta { + .title { + padding-bottom: 10px; + border-bottom: 1px solid #eef1f4; + } + .total { + font-size: 40px; + } + .unit { + color: #767676; + font-size: 12px; + font-weight: normal; + } +} \ No newline at end of file diff --git a/web/src/pages/Cluster/OverviewV1.js b/web/src/pages/Cluster/OverviewV1.js new file mode 100644 index 00000000..befd99da --- /dev/null +++ b/web/src/pages/Cluster/OverviewV1.js @@ -0,0 +1,102 @@ +import React, {Fragment} from 'react'; +import {Card, List, Divider, Popconfirm, Row, Col, Table, Descriptions, Button} from "antd"; +import {Link} from "umi" +import moment from "moment"; +import styles from "./Overview.less"; +import {connect} from "dva"; +import {ClusterItem} from "./ClusterList"; +import CalendarHeatmap from 'react-calendar-heatmap'; +import 'react-calendar-heatmap/dist/styles.css'; +import { Avatar } from 'antd'; +import { Tabs } from 'antd'; +const { TabPane } = Tabs; +import ClusterLoadMore from "../../components/List/LoadMoreList" +const data = [ + { + title: 'Ant Design Title 1', + }, + { + title: 'Ant Design Title 2', + }, + { + title: 'Ant Design Title 3', + }, + { + title: 'Ant Design Title 4', + }, +]; + +@connect(({global}) => ({ + selectedCluster: global.selectedCluster +})) + + +class Overview extends React.Component { + + render() { + return ( +
+ + + + (value.count > 0 ? 'blue' : 'white') + // } + // onClick={value => alert(`Clicked on value with count: ${value.count}`)} + /> + + + + ( + + } + title={{item.title}} + description="Ant Design, a design language for background applications, is refined by Ant UED Team" + /> + + )} + /> + + + + + + + + + + + Content of Tab Pane 2 + + + + + + + + +
+ ) + } +} + +export default Overview; diff --git a/web/src/pages/Cluster/OverviewV1.less b/web/src/pages/Cluster/OverviewV1.less new file mode 100644 index 00000000..093d1072 --- /dev/null +++ b/web/src/pages/Cluster/OverviewV1.less @@ -0,0 +1,27 @@ +.overview{ + :global(.ant-descriptions-row){ + border-bottom: none; + } + :global(.ant-descriptions-item-label){ + border-right: none; + background-color: #fff; + font-weight: bold; + } + :global(.ant-descriptions-view){ + border: none; + } + :global(.ant-descriptions-item-content){ + color: #333; + } + .light{ + color: #666; + } +} + +.clusterItemCard { + text-align: center; +} + +.card { + margin-bottom: 24px; +} diff --git a/web/src/utils/utils.js b/web/src/utils/utils.js index f65ac6fe..f94b6c5e 100644 --- a/web/src/utils/utils.js +++ b/web/src/utils/utils.js @@ -180,4 +180,51 @@ export function formatWan(val) { export function isAntdPro() { return window.location.hostname === 'preview.pro.ant.design'; +} + +/** + * 大数字转换,将大额数字转换为万、千万、亿等 + * @param value 数字值 + */ +export function formatGigNumber (value) { + const newValue = ['', '', ''] + let fr = 1000 + let num = 3 + let text1 = '' + let fm = 1 + while (value / fr >= 1) { + fr *= 10 + num += 1 + // console.log('数字', value / fr, 'num:', num) + } + if (num <= 4) { // 千 + newValue[0] = value + '' + newValue[1] = '' + } else if (num <= 8) { // 万 + fm = 10000 + newValue[0] = parseFloat(value / fm).toFixed(2) + '' + newValue[1] = '万' + } else if (num <= 16) { // 亿 + text1 = (num - 8) / 3 > 1 ? '千亿' : '亿' + text1 = (num - 8) / 4 > 1 ? '万亿' : text1 + text1 = (num - 8) / 7 > 1 ? '千万亿' : text1 + // tslint:disable-next-line:no-shadowed-variable + fm = 1 + if (text1 === '亿') { + fm = 100000000 + } else if (text1 === '千亿') { + fm = 100000000000 + } else if (text1 === '万亿') { + fm = 1000000000000 + } else if (text1 === '千万亿') { + fm = 1000000000000000 + } + if (value % fm === 0) { + newValue[0] = parseInt(value / fm) + '' + } else { + newValue[0] = parseFloat(value / fm).toFixed(2) + '' + } + newValue[1] = text1 + } + return newValue } \ No newline at end of file