mirror of
https://github.com/didi/KnowStreaming.git
synced 2026-01-12 11:02:37 +08:00
前端优化
This commit is contained in:
@@ -46,7 +46,7 @@
|
|||||||
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.04), 0 6px 12px 12px rgba(0, 0, 0, 0.04), 0 6px 10px 0 rgba(0, 0, 0, 0.08);
|
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.04), 0 6px 12px 12px rgba(0, 0, 0, 0.04), 0 6px 10px 0 rgba(0, 0, 0, 0.08);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
&-content {
|
&-content {
|
||||||
padding: 10px 8px 4px 8px;
|
padding: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.dcloud-popover-arrow-content {
|
.dcloud-popover-arrow-content {
|
||||||
@@ -56,6 +56,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: row wrap;
|
flex-flow: row wrap;
|
||||||
max-width: 560px;
|
max-width: 560px;
|
||||||
|
padding: 10px 8px 4px 8px;
|
||||||
.container-item {
|
.container-item {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
|
|||||||
@@ -31,10 +31,10 @@ export interface PermissionNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const CommonConfig = (): JSX.Element => {
|
const CommonConfig = (): JSX.Element => {
|
||||||
const [global, setGlobal] = AppContainer.useGlobalValue();
|
const [, setGlobal] = AppContainer.useGlobalValue();
|
||||||
|
|
||||||
// 获取权限树
|
// 获取权限树
|
||||||
const getPermissionTree = (userId: number) => {
|
const getPermissionTree = (userInfo, userId: number) => {
|
||||||
const getUserInfo = Utils.request(`/logi-security/api/v1/user/${userId}`);
|
const getUserInfo = Utils.request(`/logi-security/api/v1/user/${userId}`);
|
||||||
const getPermissionTree = Utils.request('/logi-security/api/v1/permission/tree');
|
const getPermissionTree = Utils.request('/logi-security/api/v1/permission/tree');
|
||||||
|
|
||||||
@@ -55,18 +55,16 @@ const CommonConfig = (): JSX.Element => {
|
|||||||
|
|
||||||
useLayoutEffect(() => {
|
useLayoutEffect(() => {
|
||||||
// 如果未登录,直接跳转到登录页
|
// 如果未登录,直接跳转到登录页
|
||||||
const userInfo = localStorage.getItem('userInfo');
|
const userInfoStorage = localStorage.getItem('userInfo');
|
||||||
let userId: number;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
userId = JSON.parse(userInfo).id;
|
const userInfo = JSON.parse(userInfoStorage);
|
||||||
|
const userId = userInfo.id;
|
||||||
if (!userId) throw 'err';
|
if (!userId) throw 'err';
|
||||||
|
getPermissionTree(userInfo, userId);
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
goLogin();
|
goLogin();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getPermissionTree(userId);
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return <></>;
|
return <></>;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { Button, Form, Input, Select, ProTable, DatePicker, Utils } from 'knowdesign';
|
import { Button, Form, Input, Select, ProTable, DatePicker, Utils, Tooltip } from 'knowdesign';
|
||||||
import api from 'api';
|
import api from 'api';
|
||||||
import { defaultPagination } from 'constants/common';
|
import { defaultPagination } from 'constants/common';
|
||||||
import TypicalListCard from '../../components/TypicalListCard';
|
import TypicalListCard from '../../components/TypicalListCard';
|
||||||
@@ -39,6 +39,13 @@ export default () => {
|
|||||||
dataIndex: 'detail',
|
dataIndex: 'detail',
|
||||||
width: 350,
|
width: 350,
|
||||||
lineClampOne: true,
|
lineClampOne: true,
|
||||||
|
render(content) {
|
||||||
|
return (
|
||||||
|
<Tooltip placement="bottomLeft" title={content}>
|
||||||
|
{content}
|
||||||
|
</Tooltip>
|
||||||
|
);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '操作时间',
|
title: '操作时间',
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ const api = {
|
|||||||
getPhyClusterBasic: (clusterPhyId: number) => getApi(`/physical-clusters/${clusterPhyId}/basic`),
|
getPhyClusterBasic: (clusterPhyId: number) => getApi(`/physical-clusters/${clusterPhyId}/basic`),
|
||||||
getPhyClusterMetrics: (clusterPhyId: number) => getApi(`/physical-clusters/${clusterPhyId}/latest-metrics`),
|
getPhyClusterMetrics: (clusterPhyId: number) => getApi(`/physical-clusters/${clusterPhyId}/latest-metrics`),
|
||||||
getClusterBasicExit: (clusterPhyName: string) => getApi(`/physical-clusters/${clusterPhyName}/basic-combine-exist`),
|
getClusterBasicExit: (clusterPhyName: string) => getApi(`/physical-clusters/${clusterPhyName}/basic-combine-exist`),
|
||||||
|
getClustersVersion: getApi('/physical-clusters/exist-version'),
|
||||||
|
|
||||||
kafkaValidator: getApi(`/utils/kafka-validator`),
|
kafkaValidator: getApi(`/utils/kafka-validator`),
|
||||||
|
|
||||||
|
|||||||
@@ -144,9 +144,10 @@ const seriesCallback = (lines: { name: string; data: [number, string | number][]
|
|||||||
},
|
},
|
||||||
symbol: 'emptyCircle',
|
symbol: 'emptyCircle',
|
||||||
symbolSize: 4,
|
symbolSize: 4,
|
||||||
// emphasis: {
|
smooth: 0.25,
|
||||||
// focus: 'self',
|
areaStyle: {
|
||||||
// },
|
opacity: 0.02,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -181,6 +182,7 @@ export const getDetailChartConfig = (title: string, sliderPos: readonly [number,
|
|||||||
legend: {
|
legend: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
color: CHART_COLOR_LIST,
|
||||||
dataZoom: [
|
dataZoom: [
|
||||||
{
|
{
|
||||||
type: 'inside',
|
type: 'inside',
|
||||||
|
|||||||
@@ -7,6 +7,9 @@
|
|||||||
&-container {
|
&-container {
|
||||||
height: calc(100% - 40px);
|
height: calc(100% - 40px);
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
.no-group-con {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
.drag-sort-item:last-child {
|
.drag-sort-item:last-child {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ const DashboardDragChart = (props: PropsType): JSX.Element => {
|
|||||||
const [selectedMetricNames, setSelectedMetricNames] = useState<(string | number)[]>([]); // 默认选中的指标的列表
|
const [selectedMetricNames, setSelectedMetricNames] = useState<(string | number)[]>([]); // 默认选中的指标的列表
|
||||||
const [curHeaderOptions, setCurHeaderOptions] = useState<ChartFilterOptions>();
|
const [curHeaderOptions, setCurHeaderOptions] = useState<ChartFilterOptions>();
|
||||||
const [metricChartData, setMetricChartData] = useState<MetricChartDataType[]>([]); // 指标图表数据列表
|
const [metricChartData, setMetricChartData] = useState<MetricChartDataType[]>([]); // 指标图表数据列表
|
||||||
const [gridNum, setGridNum] = useState<number>(8); // 图表列布局
|
const [gridNum, setGridNum] = useState<number>(12); // 图表列布局
|
||||||
const chartDetailRef = useRef(null);
|
const chartDetailRef = useRef(null);
|
||||||
const chartDragOrder = useRef([]);
|
const chartDragOrder = useRef([]);
|
||||||
const curFetchingTimestamp = useRef(0);
|
const curFetchingTimestamp = useRef(0);
|
||||||
@@ -49,13 +49,13 @@ const DashboardDragChart = (props: PropsType): JSX.Element => {
|
|||||||
const list = res.map((item: any) => {
|
const list = res.map((item: any) => {
|
||||||
return dashboardType === MetricType.Broker
|
return dashboardType === MetricType.Broker
|
||||||
? {
|
? {
|
||||||
label: item.host,
|
label: item.host,
|
||||||
value: item.brokerId,
|
value: item.brokerId,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
label: item.topicName,
|
label: item.topicName,
|
||||||
value: item.topicName,
|
value: item.topicName,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
setScopeList(list);
|
setScopeList(list);
|
||||||
};
|
};
|
||||||
@@ -145,7 +145,7 @@ const DashboardDragChart = (props: PropsType): JSX.Element => {
|
|||||||
const ksHeaderChange = (ksOptions: KsHeaderOptions) => {
|
const ksHeaderChange = (ksOptions: KsHeaderOptions) => {
|
||||||
// 重新渲染图表
|
// 重新渲染图表
|
||||||
if (gridNum !== ksOptions.gridNum) {
|
if (gridNum !== ksOptions.gridNum) {
|
||||||
setGridNum(ksOptions.gridNum || 8);
|
setGridNum(ksOptions.gridNum || 12);
|
||||||
busInstance.emit('chartResize');
|
busInstance.emit('chartResize');
|
||||||
} else {
|
} else {
|
||||||
// 如果为相对时间,则当前时间减去 1 分钟,避免最近一分钟的数据还没采集到时前端多补一个点
|
// 如果为相对时间,则当前时间减去 1 分钟,避免最近一分钟的数据还没采集到时前端多补一个点
|
||||||
|
|||||||
@@ -85,10 +85,10 @@ const SingleChartHeader = ({
|
|||||||
hideGridSelect = false,
|
hideGridSelect = false,
|
||||||
onChange: onChangeCallback,
|
onChange: onChangeCallback,
|
||||||
}: PropsType): JSX.Element => {
|
}: PropsType): JSX.Element => {
|
||||||
const [gridNum, setGridNum] = useState<number>(GRID_SIZE_OPTIONS[0].value);
|
const [gridNum, setGridNum] = useState<number>(GRID_SIZE_OPTIONS[1].value);
|
||||||
const [rangeTime, setRangeTime] = useState<[number, number]>(() => {
|
const [rangeTime, setRangeTime] = useState<[number, number]>(() => {
|
||||||
const curTimeStamp = moment().valueOf();
|
const curTimeStamp = moment().valueOf();
|
||||||
return [curTimeStamp - 15 * 60 * 1000, curTimeStamp];
|
return [curTimeStamp - 60 * 60 * 1000, curTimeStamp];
|
||||||
});
|
});
|
||||||
const [isRelativeRangeTime, setIsRelativeRangeTime] = useState(true);
|
const [isRelativeRangeTime, setIsRelativeRangeTime] = useState(true);
|
||||||
const [isAutoReload, setIsAutoReload] = useState(false);
|
const [isAutoReload, setIsAutoReload] = useState(false);
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ const LINE_CONFIG = {
|
|||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: '#556EE6',
|
color: '#556EE6',
|
||||||
width: 1,
|
width: 1,
|
||||||
|
smooth: 0.25,
|
||||||
},
|
},
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
color: {
|
color: {
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
||||||
// @ts-nocheck
|
|
||||||
|
|
||||||
import { notification, Utils } from 'knowdesign';
|
import { notification, Utils } from 'knowdesign';
|
||||||
const { EventBus } = Utils;
|
const { EventBus } = Utils;
|
||||||
export const licenseEventBus = new EventBus();
|
export const licenseEventBus = new EventBus();
|
||||||
@@ -14,7 +11,7 @@ export const goLogin = () => {
|
|||||||
const serviceInstance = Utils.service;
|
const serviceInstance = Utils.service;
|
||||||
|
|
||||||
// 清除 axios 实例默认的响应拦截
|
// 清除 axios 实例默认的响应拦截
|
||||||
serviceInstance.interceptors.response.handlers = [];
|
(serviceInstance.interceptors.response as any).handlers = [];
|
||||||
|
|
||||||
// 请求拦截
|
// 请求拦截
|
||||||
serviceInstance.interceptors.request.use(
|
serviceInstance.interceptors.request.use(
|
||||||
@@ -26,8 +23,8 @@ serviceInstance.interceptors.request.use(
|
|||||||
} else {
|
} else {
|
||||||
config.headers['X-SSO-USER'] = user; // 请求携带token
|
config.headers['X-SSO-USER'] = user; // 请求携带token
|
||||||
config.headers['X-SSO-USER-ID'] = id;
|
config.headers['X-SSO-USER-ID'] = id;
|
||||||
return config;
|
|
||||||
}
|
}
|
||||||
|
return config;
|
||||||
},
|
},
|
||||||
(err: any) => {
|
(err: any) => {
|
||||||
return err;
|
return err;
|
||||||
@@ -54,8 +51,8 @@ serviceInstance.interceptors.response.use(
|
|||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
(err: any) => {
|
(err: any) => {
|
||||||
const config = err.config;
|
const config = err?.config;
|
||||||
if (!config || !config.retryTimes) return dealResponse(err, config.customNotification);
|
if (!config || !config.retryTimes) return dealResponse(err);
|
||||||
const { __retryCount = 0, retryDelay = 300, retryTimes } = config;
|
const { __retryCount = 0, retryDelay = 300, retryTimes } = config;
|
||||||
config.__retryCount = __retryCount;
|
config.__retryCount = __retryCount;
|
||||||
if (__retryCount >= retryTimes) {
|
if (__retryCount >= retryTimes) {
|
||||||
|
|||||||
@@ -3,25 +3,24 @@ import moment from 'moment';
|
|||||||
export const CHART_COLOR_LIST = [
|
export const CHART_COLOR_LIST = [
|
||||||
'#657DFC',
|
'#657DFC',
|
||||||
'#A7B1EB',
|
'#A7B1EB',
|
||||||
'#85C80D',
|
|
||||||
'#C9E795',
|
|
||||||
'#FFC300',
|
|
||||||
'#F9D77B',
|
|
||||||
'#8BA3C4',
|
|
||||||
'#C2D0E3',
|
|
||||||
'#FF7066',
|
|
||||||
'#F5B6B3',
|
|
||||||
'#2AC8E4',
|
'#2AC8E4',
|
||||||
'#9DDEEB',
|
'#9DDEEB',
|
||||||
|
'#3991FF',
|
||||||
|
'#94BEF2',
|
||||||
|
'#C2D0E3',
|
||||||
|
'#F5B6B3',
|
||||||
|
'#85C80D',
|
||||||
|
'#C9E795',
|
||||||
'#A76CEC',
|
'#A76CEC',
|
||||||
'#CCABF1',
|
'#CCABF1',
|
||||||
'#FF9C1B',
|
'#FF9C1B',
|
||||||
'#F5C993',
|
'#F5C993',
|
||||||
'#3991FF',
|
'#FFC300',
|
||||||
'#94BEF2',
|
'#F9D77B',
|
||||||
'#12CA7A',
|
'#12CA7A',
|
||||||
|
'#8BA3C4',
|
||||||
|
'#FF7066',
|
||||||
'#A7E6C7',
|
'#A7E6C7',
|
||||||
'#FF5AB2',
|
|
||||||
'#F19FC9',
|
'#F19FC9',
|
||||||
'#AEAEAE',
|
'#AEAEAE',
|
||||||
'#D1D1D1',
|
'#D1D1D1',
|
||||||
@@ -132,11 +131,10 @@ export const getBasicChartConfig = (props: any = {}) => {
|
|||||||
itemWidth: 8,
|
itemWidth: 8,
|
||||||
itemGap: 8,
|
itemGap: 8,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
width: 85,
|
// width: 85,
|
||||||
overflow: 'truncate',
|
// overflow: 'truncate',
|
||||||
ellipsis: '...',
|
// ellipsis: '...',
|
||||||
fontSize: 11,
|
fontSize: 11,
|
||||||
lineHeight: 12,
|
|
||||||
color: '#74788D',
|
color: '#74788D',
|
||||||
},
|
},
|
||||||
pageIcons: {
|
pageIcons: {
|
||||||
@@ -148,6 +146,7 @@ export const getBasicChartConfig = (props: any = {}) => {
|
|||||||
pageIconColor: '#495057',
|
pageIconColor: '#495057',
|
||||||
pageIconInactiveColor: '#ADB5BC',
|
pageIconInactiveColor: '#ADB5BC',
|
||||||
pageIconSize: 6,
|
pageIconSize: 6,
|
||||||
|
tooltip: false,
|
||||||
...legend,
|
...legend,
|
||||||
},
|
},
|
||||||
// 横坐标配置
|
// 横坐标配置
|
||||||
|
|||||||
@@ -478,6 +478,7 @@ export default (props: any) => {
|
|||||||
lineStyle: {
|
lineStyle: {
|
||||||
width: 1.5,
|
width: 1.5,
|
||||||
},
|
},
|
||||||
|
smooth: 0.25,
|
||||||
symbol: 'emptyCircle',
|
symbol: 'emptyCircle',
|
||||||
symbolSize: 4,
|
symbolSize: 4,
|
||||||
emphasis: {
|
emphasis: {
|
||||||
|
|||||||
@@ -7,18 +7,18 @@ const CheckboxGroup = Checkbox.Group;
|
|||||||
|
|
||||||
interface IVersion {
|
interface IVersion {
|
||||||
firstLine: string[];
|
firstLine: string[];
|
||||||
leftVersion: string[];
|
leftVersions: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const CustomCheckGroup = (props: { kafkaVersion: string[]; onChangeCheckGroup: any }) => {
|
const CustomCheckGroup = (props: { kafkaVersions: string[]; onChangeCheckGroup: any }) => {
|
||||||
const { kafkaVersion, onChangeCheckGroup } = props;
|
const { kafkaVersions, onChangeCheckGroup } = props;
|
||||||
const [checkedKafkaVersion, setCheckedKafkaVersion] = React.useState<IVersion>({
|
const [checkedKafkaVersion, setCheckedKafkaVersion] = React.useState<IVersion>({
|
||||||
firstLine: [],
|
firstLine: [],
|
||||||
leftVersion: [],
|
leftVersions: [],
|
||||||
});
|
});
|
||||||
const [allVersion, setAllVersion] = React.useState<IVersion>({
|
const [allVersion, setAllVersion] = React.useState<IVersion>({
|
||||||
firstLine: [],
|
firstLine: [],
|
||||||
leftVersion: [],
|
leftVersions: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
const [indeterminate, setIndeterminate] = React.useState(false);
|
const [indeterminate, setIndeterminate] = React.useState(false);
|
||||||
@@ -30,27 +30,27 @@ const CustomCheckGroup = (props: { kafkaVersion: string[]; onChangeCheckGroup: a
|
|||||||
document.addEventListener('click', handleDocumentClick);
|
document.addEventListener('click', handleDocumentClick);
|
||||||
return () => {
|
return () => {
|
||||||
document.removeEventListener('click', handleDocumentClick);
|
document.removeEventListener('click', handleDocumentClick);
|
||||||
}
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleDocumentClick = (e: Event) => {
|
const handleDocumentClick = (e: Event) => {
|
||||||
setShowMore(false);
|
setShowMore(false);
|
||||||
}
|
};
|
||||||
|
|
||||||
const setCheckAllStauts = (list: string[], otherList: string[]) => {
|
const setCheckAllStauts = (list: string[], otherList: string[]) => {
|
||||||
onChangeCheckGroup([...list, ...otherList]);
|
onChangeCheckGroup([...list, ...otherList]);
|
||||||
setIndeterminate(!!list.length && list.length + otherList.length < kafkaVersion.length);
|
setIndeterminate(!!list.length && list.length + otherList.length < kafkaVersions.length);
|
||||||
setCheckAll(list.length + otherList.length === kafkaVersion.length);
|
setCheckAll(list.length + otherList.length === kafkaVersions.length);
|
||||||
};
|
};
|
||||||
|
|
||||||
const getTwoPanelVersion = () => {
|
const getTwoPanelVersion = () => {
|
||||||
const width = (document.getElementsByClassName('custom-check-group')[0] as any)?.offsetWidth;
|
const width = (document.getElementsByClassName('custom-check-group')[0] as any)?.offsetWidth;
|
||||||
const checkgroupWidth = width - 100 - 86;
|
const checkgroupWidth = width - 100 - 86;
|
||||||
const num = (checkgroupWidth / 108) | 0;
|
const num = (checkgroupWidth / 108) | 0;
|
||||||
const firstLine = Array.from(kafkaVersion).splice(0, num);
|
const firstLine = Array.from(kafkaVersions).splice(0, num);
|
||||||
setMoreGroupWidth(num * 108 + 88 + 66);
|
setMoreGroupWidth(num * 108 + 88 + 66);
|
||||||
const leftVersion = Array.from(kafkaVersion).splice(num);
|
const leftVersions = Array.from(kafkaVersions).splice(num);
|
||||||
return { firstLine, leftVersion };
|
return { firstLine, leftVersions };
|
||||||
};
|
};
|
||||||
|
|
||||||
const onFirstVersionChange = (list: []) => {
|
const onFirstVersionChange = (list: []) => {
|
||||||
@@ -59,13 +59,13 @@ const CustomCheckGroup = (props: { kafkaVersion: string[]; onChangeCheckGroup: a
|
|||||||
firstLine: list,
|
firstLine: list,
|
||||||
});
|
});
|
||||||
|
|
||||||
setCheckAllStauts(list, checkedKafkaVersion.leftVersion);
|
setCheckAllStauts(list, checkedKafkaVersion.leftVersions);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onLeftVersionChange = (list: []) => {
|
const onLeftVersionChange = (list: []) => {
|
||||||
setCheckedKafkaVersion({
|
setCheckedKafkaVersion({
|
||||||
...checkedKafkaVersion,
|
...checkedKafkaVersion,
|
||||||
leftVersion: list,
|
leftVersions: list,
|
||||||
});
|
});
|
||||||
setCheckAllStauts(list, checkedKafkaVersion.firstLine);
|
setCheckAllStauts(list, checkedKafkaVersion.firstLine);
|
||||||
};
|
};
|
||||||
@@ -77,11 +77,11 @@ const CustomCheckGroup = (props: { kafkaVersion: string[]; onChangeCheckGroup: a
|
|||||||
e.target.checked
|
e.target.checked
|
||||||
? versions
|
? versions
|
||||||
: {
|
: {
|
||||||
firstLine: [],
|
firstLine: [],
|
||||||
leftVersion: [],
|
leftVersions: [],
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
onChangeCheckGroup(e.target.checked ? [...versions.firstLine, ...versions.leftVersion] : []);
|
onChangeCheckGroup(e.target.checked ? [...versions.firstLine, ...versions.leftVersions] : []);
|
||||||
|
|
||||||
setIndeterminate(false);
|
setIndeterminate(false);
|
||||||
setCheckAll(e.target.checked);
|
setCheckAll(e.target.checked);
|
||||||
@@ -112,16 +112,20 @@ const CustomCheckGroup = (props: { kafkaVersion: string[]; onChangeCheckGroup: a
|
|||||||
<CheckboxGroup
|
<CheckboxGroup
|
||||||
style={{ width: moreGroupWidth }}
|
style={{ width: moreGroupWidth }}
|
||||||
className="more-check-group"
|
className="more-check-group"
|
||||||
options={allVersion.leftVersion}
|
options={allVersion.leftVersions}
|
||||||
value={checkedKafkaVersion.leftVersion}
|
value={checkedKafkaVersion.leftVersions}
|
||||||
onChange={onLeftVersionChange}
|
onChange={onLeftVersionChange}
|
||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
<div className="more-btn" onClick={() => setShowMore(!showMore)}>
|
{allVersion.leftVersions.length ? (
|
||||||
<a>
|
<div className="more-btn" onClick={() => setShowMore(!showMore)}>
|
||||||
{!showMore ? '展开更多' : '收起更多'} <DoubleRightOutlined style={{ transform: `rotate(${showMore ? '270' : '90'}deg)` }} />
|
<a>
|
||||||
</a>
|
{!showMore ? '展开更多' : '收起更多'} <DoubleRightOutlined style={{ transform: `rotate(${showMore ? '270' : '90'}deg)` }} />
|
||||||
</div>
|
</a>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<></>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -17,11 +17,12 @@ const MultiClusterPage = () => {
|
|||||||
const [run, setRun] = useState<boolean>(false);
|
const [run, setRun] = useState<boolean>(false);
|
||||||
const [global] = AppContainer.useGlobalValue();
|
const [global] = AppContainer.useGlobalValue();
|
||||||
const [statusList, setStatusList] = React.useState([1, 0]);
|
const [statusList, setStatusList] = React.useState([1, 0]);
|
||||||
const [kafkaVersion, setKafkaVersion] = React.useState({});
|
const [kafkaVersions, setKafkaVersions] = React.useState<string[]>([]);
|
||||||
|
const [existKafkaVersion, setExistKafkaVersion] = React.useState<string[]>([]);
|
||||||
const [visible, setVisible] = React.useState(false);
|
const [visible, setVisible] = React.useState(false);
|
||||||
const [list, setList] = useState<[]>([]);
|
const [list, setList] = useState<[]>([]);
|
||||||
const [healthScoreRange, setHealthScoreRange] = React.useState([0, 100]);
|
const [healthScoreRange, setHealthScoreRange] = React.useState([0, 100]);
|
||||||
const [checkedKafkaVersion, setCheckedKafkaVersion] = React.useState({});
|
const [checkedKafkaVersions, setCheckedKafkaVersions] = React.useState<string[]>([]);
|
||||||
const [sortInfo, setSortInfo] = React.useState({
|
const [sortInfo, setSortInfo] = React.useState({
|
||||||
sortField: 'HealthScore',
|
sortField: 'HealthScore',
|
||||||
sortType: 'asc',
|
sortType: 'asc',
|
||||||
@@ -59,7 +60,7 @@ const MultiClusterPage = () => {
|
|||||||
preciseFilterDTOList: [
|
preciseFilterDTOList: [
|
||||||
{
|
{
|
||||||
fieldName: 'kafkaVersion',
|
fieldName: 'kafkaVersion',
|
||||||
fieldValueList: checkedKafkaVersion,
|
fieldValueList: checkedKafkaVersions as (string | number)[],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
rangeFilterDTOList: [
|
rangeFilterDTOList: [
|
||||||
@@ -83,12 +84,18 @@ const MultiClusterPage = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const getSupportKafkaVersion = () => {
|
const getSupportKafkaVersion = () => {
|
||||||
|
Utils.request(API.supportKafkaVersion).then((res) => {
|
||||||
|
setKafkaVersions(Object.keys(res || {}));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const getExistKafkaVersion = () => {
|
||||||
setVersionLoading(true);
|
setVersionLoading(true);
|
||||||
Utils.request(API.supportKafkaVersion)
|
Utils.request(API.getClustersVersion)
|
||||||
.then((res) => {
|
.then((versions: string[]) => {
|
||||||
setKafkaVersion(res || {});
|
setExistKafkaVersion(versions || []);
|
||||||
setVersionLoading(false);
|
setVersionLoading(false);
|
||||||
setCheckedKafkaVersion(res ? Object.keys(res) : []);
|
setCheckedKafkaVersions(versions || []);
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
setVersionLoading(false);
|
setVersionLoading(false);
|
||||||
@@ -108,6 +115,7 @@ const MultiClusterPage = () => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getPhyClusterState();
|
getPhyClusterState();
|
||||||
getSupportKafkaVersion();
|
getSupportKafkaVersion();
|
||||||
|
getExistKafkaVersion();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -128,7 +136,7 @@ const MultiClusterPage = () => {
|
|||||||
.finally(() => {
|
.finally(() => {
|
||||||
setClusterLoading(false);
|
setClusterLoading(false);
|
||||||
});
|
});
|
||||||
}, [sortInfo, checkedKafkaVersion, healthScoreRange, statusList, searchKeywords, isReload]);
|
}, [sortInfo, checkedKafkaVersions, healthScoreRange, statusList, searchKeywords, isReload]);
|
||||||
|
|
||||||
const onSilderChange = (value: number[]) => {
|
const onSilderChange = (value: number[]) => {
|
||||||
setHealthScoreRange(value);
|
setHealthScoreRange(value);
|
||||||
@@ -151,7 +159,7 @@ const MultiClusterPage = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onChangeCheckGroup = (list: []) => {
|
const onChangeCheckGroup = (list: []) => {
|
||||||
setCheckedKafkaVersion(list);
|
setCheckedKafkaVersions(list);
|
||||||
};
|
};
|
||||||
|
|
||||||
const afterSubmitSuccessAccessClusters = () => {
|
const afterSubmitSuccessAccessClusters = () => {
|
||||||
@@ -247,10 +255,10 @@ const MultiClusterPage = () => {
|
|||||||
|
|
||||||
<div className="header-filter-bottom">
|
<div className="header-filter-bottom">
|
||||||
<div className="header-filter-bottom-item header-filter-bottom-item-checkbox">
|
<div className="header-filter-bottom-item header-filter-bottom-item-checkbox">
|
||||||
<h3 className="header-filter-bottom-item-title">版本选择</h3>
|
<h3 className="header-filter-bottom-item-title">版本分布</h3>
|
||||||
<div className="header-filter-bottom-item-content flex">
|
<div className="header-filter-bottom-item-content flex">
|
||||||
{Object.keys(kafkaVersion).length ? (
|
{existKafkaVersion.length ? (
|
||||||
<CustomCheckGroup kafkaVersion={Object.keys(kafkaVersion)} onChangeCheckGroup={onChangeCheckGroup} />
|
<CustomCheckGroup kafkaVersions={existKafkaVersion} onChangeCheckGroup={onChangeCheckGroup} />
|
||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -307,7 +315,7 @@ const MultiClusterPage = () => {
|
|||||||
<AccessClusters
|
<AccessClusters
|
||||||
visible={visible}
|
visible={visible}
|
||||||
setVisible={setVisible}
|
setVisible={setVisible}
|
||||||
kafkaVersion={Object.keys(kafkaVersion)}
|
kafkaVersion={kafkaVersions}
|
||||||
afterSubmitSuccess={afterSubmitSuccessAccessClusters}
|
afterSubmitSuccess={afterSubmitSuccessAccessClusters}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -295,6 +295,7 @@
|
|||||||
|
|
||||||
.more-btn {
|
.more-btn {
|
||||||
height: 30px;
|
height: 30px;
|
||||||
|
line-height: 23px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -652,7 +653,7 @@
|
|||||||
display: -webkit-inline-box;
|
display: -webkit-inline-box;
|
||||||
margin-right: 16px;
|
margin-right: 16px;
|
||||||
|
|
||||||
&.adjust-height-style{
|
&.adjust-height-style {
|
||||||
.dcloud-form-item-label {
|
.dcloud-form-item-label {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
label {
|
label {
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ export const getChartConfig = (props: any) => {
|
|||||||
lineStyle: {
|
lineStyle: {
|
||||||
width: 1,
|
width: 1,
|
||||||
},
|
},
|
||||||
|
smooth: 0.25,
|
||||||
symbol: 'emptyCircle',
|
symbol: 'emptyCircle',
|
||||||
symbolSize: 4,
|
symbolSize: 4,
|
||||||
// 面积图样式
|
// 面积图样式
|
||||||
|
|||||||
@@ -1,18 +1,6 @@
|
|||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { useParams } from 'react-router-dom';
|
import { useParams } from 'react-router-dom';
|
||||||
import {
|
import { AppContainer, Button, Divider, Drawer, Form, InputNumber, notification, SingleChart, Space, Spin, Utils } from 'knowdesign';
|
||||||
AppContainer,
|
|
||||||
Button,
|
|
||||||
Divider,
|
|
||||||
Drawer,
|
|
||||||
Form,
|
|
||||||
InputNumber,
|
|
||||||
notification,
|
|
||||||
SingleChart,
|
|
||||||
Space,
|
|
||||||
Spin,
|
|
||||||
Utils,
|
|
||||||
} from 'knowdesign';
|
|
||||||
import Api, { MetricType } from '@src/api/index';
|
import Api, { MetricType } from '@src/api/index';
|
||||||
import { getBasicChartConfig, getUnit } from '@src/constants/chartConfig';
|
import { getBasicChartConfig, getUnit } from '@src/constants/chartConfig';
|
||||||
import { formatChartData, MetricDefaultChartDataType } from '@src/components/DashboardDragChart/config';
|
import { formatChartData, MetricDefaultChartDataType } from '@src/components/DashboardDragChart/config';
|
||||||
@@ -193,6 +181,7 @@ const ExpandPartition = (props: { record: any; onConfirm: () => void }) => {
|
|||||||
lineStyle: {
|
lineStyle: {
|
||||||
width: 1,
|
width: 1,
|
||||||
},
|
},
|
||||||
|
smooth: 0.25,
|
||||||
symbol: 'emptyCircle',
|
symbol: 'emptyCircle',
|
||||||
symbolSize: 4,
|
symbolSize: 4,
|
||||||
emphasis: {
|
emphasis: {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ export const getChartConfig = (title: string) => {
|
|||||||
lineStyle: {
|
lineStyle: {
|
||||||
width: 1,
|
width: 1,
|
||||||
},
|
},
|
||||||
|
smooth: 0.25,
|
||||||
symbol: 'emptyCircle',
|
symbol: 'emptyCircle',
|
||||||
symbolSize: 4,
|
symbolSize: 4,
|
||||||
emphasis: {
|
emphasis: {
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
@import '~knowdesign/es/style/index.less';
|
@import '~knowdesign/es/style/index.less';
|
||||||
|
|
||||||
|
@height-base: 36px;
|
||||||
|
@height-lg: 42px;
|
||||||
|
@height-sm: 27px;
|
||||||
|
|
||||||
// 全局变量替换
|
// 全局变量替换
|
||||||
@body-background: #ebebf3;
|
@body-background: #ebebf3;
|
||||||
@input-color: #495057;
|
@input-color: #495057;
|
||||||
|
|||||||
Reference in New Issue
Block a user