-
选择top范围
+ 选择 top 范围
{
-
{scopeName}
+
{scopeLabel}
@@ -136,9 +136,7 @@ const NodeScope = ({ nodeScopeModule, change }: propsType) => {
- }
+ suffix={
}
size="small"
placeholder={searchPlaceholder}
onChange={(e) => setScopeSearchValue(e.target.value)}
@@ -148,7 +146,7 @@ const NodeScope = ({ nodeScopeModule, change }: propsType) => {
{customList
- .filter((item) => !showSearch || item.label.includes(scopeSearchValue))
+ .filter((item) => item.label.includes(scopeSearchValue))
.map((item) => (
{item.label}
@@ -180,6 +178,7 @@ const NodeScope = ({ nodeScopeModule, change }: propsType) => {
return (
<>
+
{scopeName}筛选:
void;
}
@@ -138,9 +138,13 @@ const SingleChartHeader = ({
};
const reloadRangeTime = () => {
- const timeLen = rangeTime[1] - rangeTime[0] || 0;
- const curTimeStamp = moment().valueOf();
- setRangeTime([curTimeStamp - timeLen, curTimeStamp]);
+ if (isRelativeRangeTime) {
+ const timeLen = rangeTime[1] - rangeTime[0] || 0;
+ const curTimeStamp = moment().valueOf();
+ setRangeTime([curTimeStamp - timeLen, curTimeStamp]);
+ } else {
+ setRangeTime([...rangeTime]);
+ }
};
const openIndicatorDrawer = () => {
@@ -174,12 +178,10 @@ const SingleChartHeader = ({
{!hideGridSelect && (
)}
-
-
-
-
-
-
+ {(!hideNodeScope || !hideGridSelect) && }
+
diff --git a/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/style/node-scope.less b/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/style/node-scope.less
index bf8ddd34..9d53b523 100644
--- a/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/style/node-scope.less
+++ b/km-console/packages/layout-clusters-fe/src/components/SingleChartHeader/style/node-scope.less
@@ -3,8 +3,13 @@
@import '~knowdesign/es/basic/style/mixins/index';
#d-node-scope {
+ display: flex;
+ align-items: center;
position: relative;
- display: inline-block;
+ .scope-title {
+ font-size: 14px;
+ color: #74788d;
+ }
.input-span {
cursor: pointer;
}
@@ -29,10 +34,10 @@
box-shadow: none;
}
&.relativeTime {
- width: 160px;
+ width: 200px;
}
&.absoluteTime {
- width: 300px;
+ width: 200px;
}
input {
diff --git a/km-console/packages/layout-clusters-fe/src/components/TopicJob/ReplicaChange.tsx b/km-console/packages/layout-clusters-fe/src/components/TopicJob/ReplicaChange.tsx
index f54b2179..16637b9c 100644
--- a/km-console/packages/layout-clusters-fe/src/components/TopicJob/ReplicaChange.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/TopicJob/ReplicaChange.tsx
@@ -30,8 +30,8 @@ const { TextArea } = Input;
const { Option } = Select;
const jobNameMap: any = {
- expandAndReduce: '批量扩缩副本',
- transfer: '批量迁移副本',
+ expandAndReduce: '扩缩副本',
+ transfer: '迁移副本',
};
interface DefaultConfig {
@@ -325,8 +325,7 @@ export default (props: DefaultConfig) => {
!jobId &&
Utils.request(Api.getTopicMetaData(+routeParams.clusterId))
.then((res: any) => {
- const filterRes = res.filter((item: any) => item.type !== 1);
- const topics = (filterRes || []).map((item: any) => {
+ const topics = (res || []).map((item: any) => {
return {
label: item.topicName,
value: item.topicName,
diff --git a/km-console/packages/layout-clusters-fe/src/components/TopicJob/ReplicaMove.tsx b/km-console/packages/layout-clusters-fe/src/components/TopicJob/ReplicaMove.tsx
index 892e2586..c8c939dd 100644
--- a/km-console/packages/layout-clusters-fe/src/components/TopicJob/ReplicaMove.tsx
+++ b/km-console/packages/layout-clusters-fe/src/components/TopicJob/ReplicaMove.tsx
@@ -19,6 +19,7 @@ import {
Divider,
Transfer,
IconFont,
+ Tooltip,
} from 'knowdesign';
import './index.less';
import Api, { MetricType } from '@src/api/index';
@@ -31,8 +32,8 @@ const { TextArea } = Input;
const { Option } = Select;
const jobNameMap: any = {
- expandAndReduce: '批量扩缩副本',
- transfer: '批量迁移副本',
+ expandAndReduce: '扩缩副本',
+ transfer: '迁移副本',
};
interface DefaultConfig {
@@ -56,6 +57,7 @@ export default (props: DefaultConfig) => {
const [topicNewReplicas, setTopicNewReplicas] = useState([]);
const [needMovePartitions, setNeedMovePartitions] = useState([]);
const [moveDataTimeRanges, setMoveDataTimeRanges] = useState([]);
+ const [moveDataTimeRangesType, setMoveDataTimeRangesType] = useState([]);
const [form] = Form.useForm();
const [global] = AppContainer.useGlobalValue();
const [loadingTopic, setLoadingTopic] = useState
(true);
@@ -142,8 +144,23 @@ export default (props: DefaultConfig) => {
title: '迁移数据时间范围',
dataIndex: 'newRetentionMs',
render: (v: any, r: any, i: number) => {
+ const selectAfter = (
+
+ );
return (
{
moveDataTimeRangesCopy[i] = n;
setMoveDataTimeRanges(moveDataTimeRangesCopy);
}}
- formatter={(value) => (value ? `${value} h` : '')}
- parser={(value) => value.replace('h', '')}
+ className={'move-dete-time-tanges'}
+ // formatter={(value) => (value ? `${value} h` : '')}
+ // parser={(value) => value.replace('h', '')}
+ addonAfter={selectAfter}
>
);
},
@@ -319,8 +338,7 @@ export default (props: DefaultConfig) => {
drawerVisible &&
Utils.request(Api.getTopicMetaData(+routeParams.clusterId))
.then((res: any) => {
- const filterRes = res.filter((item: any) => item.type !== 1);
- const topics = (filterRes || []).map((item: any) => {
+ const topics = (res || []).map((item: any) => {
return {
label: item.topicName,
value: item.topicName,
@@ -402,7 +420,7 @@ export default (props: DefaultConfig) => {
originalBrokerIdList: taskPlanData[index].currentBrokerIdList,
reassignBrokerIdList: taskPlanData[index].reassignBrokerIdList,
originalRetentionTimeUnitMs: topicData[index].retentionMs,
- reassignRetentionTimeUnitMs: moveDataTimeRanges[index] * 60 * 60 * 1000,
+ reassignRetentionTimeUnitMs: (moveDataTimeRanges[index] * 60 * 60 * 1000) / (moveDataTimeRangesType[index] || 1),
latestDaysAvgBytesInList: topicData[index].latestDaysAvgBytesInList,
latestDaysMaxBytesInList: topicData[index].latestDaysMaxBytesInList,
partitionPlanList: taskPlanData[index].partitionPlanList,
@@ -476,6 +494,19 @@ export default (props: DefaultConfig) => {
setTopicSelectValue(v);
}}
options={topicMetaData}
+ // 点击Tooltip会触发Select的下拉
+ // maxTagPlaceholder={(v) => {
+ // const tooltipValue = v
+ // .map((item) => {
+ // return item.value;
+ // })
+ // .join('、');
+ // return (
+ //
+ // {'+' + v.length + '...'}
+ //
+ // );
+ // }}
>
diff --git a/km-console/packages/layout-clusters-fe/src/components/TopicJob/index.less b/km-console/packages/layout-clusters-fe/src/components/TopicJob/index.less
index 7576f159..794a252e 100644
--- a/km-console/packages/layout-clusters-fe/src/components/TopicJob/index.less
+++ b/km-console/packages/layout-clusters-fe/src/components/TopicJob/index.less
@@ -64,11 +64,6 @@
.task-form {
margin-top: 16px;
}
-
- .dcloud-select-selector {
- max-height: 100px;
- overflow: scroll;
- }
}
.preview-task-plan-drawer {
@@ -80,4 +75,18 @@
background: #F8F9FA;
}
}
+}
+
+.move-dete-time-tanges{
+ .dcloud-input-number-input-wrap{
+ width: 80px;
+ }
+ .dcloud-input-number-wrapper{
+ .dcloud-select-selector{
+ border-top-left-radius: 0 !important;
+ border-bottom-left-radius: 0 !important;
+ background-color: inherit !important;
+ background: #F8F9FA;
+ }
+ }
}
\ No newline at end of file
diff --git a/km-console/packages/layout-clusters-fe/src/components/TourGuide/steps.ts b/km-console/packages/layout-clusters-fe/src/components/TourGuide/steps.ts
index 69fb2ba4..8add261a 100644
--- a/km-console/packages/layout-clusters-fe/src/components/TourGuide/steps.ts
+++ b/km-console/packages/layout-clusters-fe/src/components/TourGuide/steps.ts
@@ -70,7 +70,7 @@ const ClusterDetailSteps = {
},
},
{
- target: '.single-cluster-detail .ks-chart-container-header .header-right .icon-box',
+ target: '.single-cluster-detail .ks-chart-container-header .header-right .dcloud-btn',
title: '指标筛选',
content: '点击这里可以对展示的图表进行筛选',
placement: 'left-start' as const,
diff --git a/km-console/packages/layout-clusters-fe/src/constants/chartConfig.ts b/km-console/packages/layout-clusters-fe/src/constants/chartConfig.ts
index aa1ef52e..a4874d98 100644
--- a/km-console/packages/layout-clusters-fe/src/constants/chartConfig.ts
+++ b/km-console/packages/layout-clusters-fe/src/constants/chartConfig.ts
@@ -1,29 +1,19 @@
import moment from 'moment';
export const CHART_COLOR_LIST = [
- '#657DFC',
- '#A7B1EB',
- '#2AC8E4',
- '#9DDEEB',
- '#3991FF',
+ '#556ee6',
'#94BEF2',
+ '#95e7ff',
+ '#9DDEEB',
+ '#A7B1EB',
'#C2D0E3',
- '#F5B6B3',
- '#85C80D',
- '#C9E795',
- '#A76CEC',
'#CCABF1',
- '#FF9C1B',
- '#F5C993',
- '#FFC300',
'#F9D77B',
- '#12CA7A',
- '#8BA3C4',
- '#FF7066',
+ '#F5C993',
'#A7E6C7',
'#F19FC9',
- '#AEAEAE',
- '#D1D1D1',
+ '#F5B6B3',
+ '#C9E795',
];
export const UNIT_MAP = {
diff --git a/km-console/packages/layout-clusters-fe/src/constants/menu.ts b/km-console/packages/layout-clusters-fe/src/constants/menu.ts
index 3feb2d9a..8891be10 100755
--- a/km-console/packages/layout-clusters-fe/src/constants/menu.ts
+++ b/km-console/packages/layout-clusters-fe/src/constants/menu.ts
@@ -12,20 +12,6 @@ export const leftMenus = (clusterId?: string) => ({
name: 'cluster',
path: 'cluster',
icon: 'icon-Cluster',
- children: [
- {
- name: 'overview',
- path: '',
- icon: '#icon-luoji',
- },
- process.env.BUSINESS_VERSION
- ? {
- name: 'balance',
- path: 'balance',
- icon: '#icon-luoji',
- }
- : undefined,
- ].filter((m) => m),
},
{
name: 'broker',
@@ -83,6 +69,25 @@ export const leftMenus = (clusterId?: string) => ({
// },
// ],
},
+ {
+ name: 'operation',
+ path: 'operation',
+ icon: 'icon-Jobs',
+ children: [
+ process.env.BUSINESS_VERSION
+ ? {
+ name: 'balance',
+ path: 'balance',
+ icon: '#icon-luoji',
+ }
+ : undefined,
+ {
+ name: 'jobs',
+ path: 'jobs',
+ icon: 'icon-Jobs',
+ },
+ ].filter((m) => m),
+ },
process.env.BUSINESS_VERSION
? {
name: 'produce-consume',
@@ -127,11 +132,6 @@ export const leftMenus = (clusterId?: string) => ({
// path: 'acls',
// icon: 'icon-wodegongzuotai',
// },
- {
- name: 'jobs',
- path: 'jobs',
- icon: 'icon-Jobs',
- },
].filter((m) => m),
});
diff --git a/km-console/packages/layout-clusters-fe/src/index.less b/km-console/packages/layout-clusters-fe/src/index.less
index 88a90644..52f048f1 100644
--- a/km-console/packages/layout-clusters-fe/src/index.less
+++ b/km-console/packages/layout-clusters-fe/src/index.less
@@ -258,3 +258,25 @@ li {
}
}
}
+
+.empty-panel {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin-bottom: 18px;
+
+ .img {
+ width: 51px;
+ height: 34px;
+ margin-bottom: 7px;
+ background-size: cover;
+ background-image: url('./assets/empty.png');
+ }
+
+ .text {
+ font-size: 10px;
+ color: #919aac;
+ line-height: 20px;
+ }
+}
diff --git a/km-console/packages/layout-clusters-fe/src/locales/zh.tsx b/km-console/packages/layout-clusters-fe/src/locales/zh.tsx
index 04c3d705..db190ffc 100755
--- a/km-console/packages/layout-clusters-fe/src/locales/zh.tsx
+++ b/km-console/packages/layout-clusters-fe/src/locales/zh.tsx
@@ -44,6 +44,10 @@ export default {
[`menu.${systemKey}.consumer-group.operating-state`]: 'Operating State',
[`menu.${systemKey}.consumer-group.group-list`]: 'GroupList',
+ [`menu.${systemKey}.operation`]: 'Operation',
+ [`menu.${systemKey}.operation.balance`]: 'Load Rebalance',
+ [`menu.${systemKey}.operation.jobs`]: 'Job',
+
[`menu.${systemKey}.acls`]: 'ACLs',
[`menu.${systemKey}.jobs`]: 'Job',
diff --git a/km-console/packages/layout-clusters-fe/src/pages/BrokerDetail/ConfigurationEdit.tsx b/km-console/packages/layout-clusters-fe/src/pages/BrokerDetail/ConfigurationEdit.tsx
index c968ca47..ba7cb3fc 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/BrokerDetail/ConfigurationEdit.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/BrokerDetail/ConfigurationEdit.tsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useEffect } from 'react';
import { Drawer, Form, Input, Space, Button, Checkbox, Utils, Row, Col, IconFont, Divider, message } from 'knowdesign';
import { useParams } from 'react-router-dom';
import Api from '@src/api';
@@ -31,6 +31,10 @@ export const ConfigurationEdit = (props: any) => {
});
};
+ React.useEffect(() => {
+ form.setFieldsValue(props.record);
+ }, [props.record]);
+
return (
{
visible={props.visible}
onClose={() => props.setVisible(false)}
maskClosable={false}
+ destroyOnClose
extra={
- {global.hasPermission && global.hasPermission(ClustersPermissionMap.CLUSTER_DEL) ? (
+ {global.hasPermission ? (
-
onClickDeleteBtn(event, itemData)}>
-
-
+ {global.hasPermission(ClustersPermissionMap.CLUSTER_CHANGE_INFO) && (
+
{
+ e.stopPropagation();
+ showAccessCluster(itemData);
+ }}
+ >
+
+
+ )}
+ {global.hasPermission(ClustersPermissionMap.CLUSTER_DEL) && (
+
{
+ e.stopPropagation();
+ deleteModalRef.current.onOpen(itemData, () => {
+ getPhyClusterState();
+ getExistKafkaVersion(true);
+ reloadClusterList(pagination.pageNo * pagination.pageSize);
+ });
+ }}
+ >
+
+
+ )}
) : (
<>>
@@ -239,45 +420,21 @@ const ListScroll = (props: { loadMoreData: any; list: any; pagination: any; getP
);
};
- const onFinish = () => {
- form.validateFields().then((formData) => {
- Utils.delete(api.phyCluster, {
- params: {
- clusterPhyId: clusterInfo.id,
- },
- }).then((res) => {
- message.success('删除成功');
- setVisible(false);
- props?.getPhyClusterState();
- const fliterList: any = list.filter((item: any) => {
- return item?.id !== clusterInfo.id;
- });
- setList(fliterList || []);
- });
- });
- };
-
- const onClickDeleteBtn = (event: any, clusterInfo: any) => {
- event.stopPropagation();
- setClusterInfo(clusterInfo);
- setVisible(true);
- };
-
return (
- <>
+
{useMemo(
() => (
}
+ loader={}
endMessage={
!pagination.total ? (
''
) : (
- 加载完成 共{pagination.total}条
+ 加载完成 共 {pagination.total} 条
)
}
@@ -293,81 +450,11 @@ const ListScroll = (props: { loadMoreData: any; list: any; pagination: any; getP
/>
),
- [list, pagination, loading]
+ [list, pagination, isLoadingMore]
)}
- setVisible(false)}
- okButtonProps={{
- style: {
- width: 56,
- },
- danger: true,
- size: 'small',
- }}
- cancelButtonProps={{
- style: {
- width: 56,
- },
- size: 'small',
- }}
- >
-
-
-
- {intl.formatMessage({
- id: 'delete.cluster.confirm.tip',
- })}
-
-
-
- {clusterInfo.name}
-
- {
- value = value || '';
- if (!value.trim() || value.trim() !== clusterInfo.name)
- return Promise.reject(
- intl.formatMessage({
- id: 'delete.cluster.confirm.cluster',
- })
- );
- return Promise.resolve();
- },
- },
- ]}
- >
-
-
-
-
- >
+
+
);
};
-
-export default ListScroll;
+export default ClusterList;
diff --git a/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/index.less b/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/index.less
index 1d79b7db..3108c4c0 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/index.less
+++ b/km-console/packages/layout-clusters-fe/src/pages/MutliClusterPage/index.less
@@ -364,8 +364,12 @@
.multi-cluster-list-item-btn {
opacity: 1;
.icon {
+ width: 24px;
+ background: rgba(33, 37, 41, 0.04);
+ border-radius: 12px;
color: #74788d;
font-size: 14px;
+ margin-left: 10px;
}
.icon:hover {
@@ -375,16 +379,14 @@
}
.multi-cluster-list-item-btn {
+ display: flex;
opacity: 0;
position: absolute;
right: 20px;
top: 8px;
z-index: 10;
text-align: right;
- width: 24px;
height: 24px;
- background: rgba(33, 37, 41, 0.04);
- border-radius: 14px;
text-align: center;
line-height: 24px;
}
diff --git a/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/ChangeLog.tsx b/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/ChangeLog.tsx
index d451ca22..270205c9 100644
--- a/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/ChangeLog.tsx
+++ b/km-console/packages/layout-clusters-fe/src/pages/SingleClusterDetail/ChangeLog.tsx
@@ -7,6 +7,7 @@ import moment from 'moment';
import { timeFormat } from '../../constants/common';
import { DownOutlined } from '@ant-design/icons';
import { renderToolTipValue } from './config';
+import RenderEmpty from '@src/components/RenderEmpty';
const { Panel } = Collapse;
@@ -51,17 +52,6 @@ const ChangeLog = () => {
);
}, []);
- const renderEmpty = () => {
- return (
- <>
-
- >
- );
- };
-
const getHref = (item: any) => {
if (item.resTypeName.toLowerCase().includes('topic')) return `/cluster/${clusterId}/topic/list#topicName=${item.resName}`;
if (item.resTypeName.toLowerCase().includes('broker')) return `/cluster/${clusterId}/broker/list#brokerId=${item.resName}`;
@@ -73,7 +63,7 @@ const ChangeLog = () => {
历史变更记录
{!loading && !data.length ? (
- renderEmpty()
+
) : (