From d370e27725ba34c9c3791e67d788feaf4f419f9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E8=B6=85?= Date: Sun, 30 Jul 2023 21:53:46 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E4=B8=8D=E9=80=89=E6=8B=A9=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=82=B9=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= =?UTF-8?q?=202.Connect=E9=85=8D=E7=BD=AE=E9=A1=B9=E9=87=8C=E9=9D=A2?= =?UTF-8?q?=E6=B6=89=E5=8F=8A=E6=95=8F=E6=84=9F=E5=AD=97=E6=AE=B5=E7=9A=84?= =?UTF-8?q?=E5=80=BC=E7=94=A8*=E5=8F=B7=E4=BB=A3=E6=9B=BF=203.Topic?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E3=80=81ConsumerGroup=E8=AF=A6=E6=83=85?= =?UTF-8?q?=EF=BC=8Cconsumer=20group=E8=A1=A8=E6=A0=BC=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=89=8B=E5=8A=A8=E5=88=B7=204.Topic=20message=E9=A2=84?= =?UTF-8?q?=E8=A7=88=EF=BC=8COffset=E4=B8=BA0=E4=B8=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E6=95=B0=E5=80=BC=EF=BC=8C=E6=B7=BB=E5=8A=A0offset=E6=8E=92?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/UserManage/RoleTabContent.tsx | 4 +- .../layout-clusters-fe/config/webpack.dev.js | 4 +- .../src/components/utils.ts | 10 ++++ .../src/pages/Connect/AddConnector.tsx | 2 + .../src/pages/ConsumerGroup/Detail.tsx | 14 ++++- .../src/pages/SecurityACLs/EditDrawer.tsx | 58 +++++++++++++++++++ .../src/pages/TopicDetail/BrokersDetail.tsx | 10 +++- .../src/pages/TopicDetail/config.tsx | 3 +- .../src/pages/TopicDetail/index.less | 1 + .../src/pages/TopicDetail/index.tsx | 42 +++++++++----- 10 files changed, 127 insertions(+), 21 deletions(-) create mode 100644 km-console/packages/layout-clusters-fe/src/components/utils.ts diff --git a/km-console/packages/config-manager-fe/src/pages/UserManage/RoleTabContent.tsx b/km-console/packages/config-manager-fe/src/pages/UserManage/RoleTabContent.tsx index eb0b82e9a..d50c77cfd 100644 --- a/km-console/packages/config-manager-fe/src/pages/UserManage/RoleTabContent.tsx +++ b/km-console/packages/config-manager-fe/src/pages/UserManage/RoleTabContent.tsx @@ -96,7 +96,7 @@ const RoleDetailAndUpdate = forwardRef((props, ref): JSX.Element => { arr.push(permissions[i].id); } }); - formData.permissionIdList = formData.permissionIdList.flat(); + formData.permissionIdList = formData.permissionIdList.flat().filter((item) => item !== undefined); setConfirmLoading(true); request(api.editRole, { method: type === RoleOperate.Add ? 'POST' : 'PUT', @@ -250,7 +250,7 @@ const RoleDetailAndUpdate = forwardRef((props, ref): JSX.Element => { (0); + const forceRefresh: () => void = useCallback(() => { + setRefresh((x) => x + 1); + }, []); + + return [refreshKey, forceRefresh]; +} diff --git a/km-console/packages/layout-clusters-fe/src/pages/Connect/AddConnector.tsx b/km-console/packages/layout-clusters-fe/src/pages/Connect/AddConnector.tsx index 8724a0291..ef6a55bdf 100644 --- a/km-console/packages/layout-clusters-fe/src/pages/Connect/AddConnector.tsx +++ b/km-console/packages/layout-clusters-fe/src/pages/Connect/AddConnector.tsx @@ -816,6 +816,8 @@ const StepFormFifth = (props: SubFormProps) => { ) : type.toUpperCase() === 'BOOLEAN' ? ( + ) : type.toUpperCase() === 'PASSWORD' ? ( + ) : ( )} diff --git a/km-console/packages/layout-clusters-fe/src/pages/ConsumerGroup/Detail.tsx b/km-console/packages/layout-clusters-fe/src/pages/ConsumerGroup/Detail.tsx index 34001fa03..f01bee14d 100644 --- a/km-console/packages/layout-clusters-fe/src/pages/ConsumerGroup/Detail.tsx +++ b/km-console/packages/layout-clusters-fe/src/pages/ConsumerGroup/Detail.tsx @@ -1,12 +1,13 @@ import React, { useState, useEffect } from 'react'; import { useParams, useHistory } from 'react-router-dom'; -import { Drawer, ProTable, Utils } from 'knowdesign'; +import { Button, Space, Divider, Drawer, ProTable, Utils } from 'knowdesign'; import { IconFont } from '@knowdesign/icons'; import API from '@src/api/index'; import { defaultPagination, hashDataParse } from '@src/constants/common'; import { getGtoupTopicColumns } from './config'; import { ExpandedRow } from './ExpandedRow'; import ResetOffsetDrawer from './ResetOffsetDrawer'; +import { useForceRefresh } from '@src/components/utils'; const { request } = Utils; export interface MetricLine { @@ -63,6 +64,7 @@ const GroupDetail = (props: any) => { const [openKeys, setOpenKeys] = useState(); const [resetOffsetVisible, setResetOffsetVisible] = useState(false); const [resetOffsetArg, setResetOffsetArg] = useState({}); + const [refreshKey, forceRefresh] = useForceRefresh(); const genData = async ({ pageNo, pageSize, groupName }: any) => { if (urlParams?.clusterId === undefined) return; @@ -160,7 +162,7 @@ const GroupDetail = (props: any) => { // // 获取Consumer列表 表格模式 // getTopicGroupMetric(hashData); // }); - }, [hashDataParse(location.hash).groupName]); + }, [hashDataParse(location.hash).groupName, refreshKey]); return ( { // // // } + extra={ + + void}> + + + + + } > { if (configType === 'custom') { // 1. 自定义权限 + // TODO: 需要和后端联调 const { resourceType, resourcePatternType, aclPermissionType, aclOperation, aclClientHost } = formData; submitData.push({ clusterId, @@ -281,6 +282,42 @@ const AddDrawer = forwardRef((_, ref) => { {({ getFieldValue }) => { + const SelectFormItems = (props: { type: string }) => { + const { type } = props; + return ( + ({ + validator: (rule: any, value: string) => { + if (!value) { + return Promise.reject(`${type}Name 不能为空`); + } + if (type === 'topic' && getFieldValue(`${type}PatternType`) === ACL_PATTERN_TYPE['Literal']) { + return Utils.request(api.getTopicMetadata(clusterId as any, value)).then((res: any) => { + return res?.exist ? Promise.resolve() : Promise.reject('该 Topic 不存在'); + }); + } + return Promise.resolve(); + }, + }), + ]} + > + { + if (option?.value.includes(value)) { + return true; + } + return false; + }} + options={type === 'topic' ? topicMetaData : groupMetaData} + placeholder={`请输入 ${type}Name`} + /> + + ); + }; const PatternTypeFormItems = (props: { type: string }) => { const { type } = props; const UpperCaseType = type[0].toUpperCase() + type.slice(1); @@ -388,6 +425,27 @@ const AddDrawer = forwardRef((_, ref) => { }))} /> + + {({ getFieldValue }) => { + const type = getFieldValue('resourceType'); + if (type === ACL_RESOURCE_TYPE['Cluster'] || type === ACL_RESOURCE_TYPE['TransactionalId']) { + //TODO需要和后端获取集群和事务接口联调 + return ( + + + + ); + } else if (type === ACL_RESOURCE_TYPE['Topic']) { + return ; + } else if (type === ACL_RESOURCE_TYPE['Group']) { + return ; + } + return null; + }} + {({ getFieldValue }) => { form.resetFields(['aclOperation']); diff --git a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/BrokersDetail.tsx b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/BrokersDetail.tsx index 9b3a12a09..f2bb1713b 100644 --- a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/BrokersDetail.tsx +++ b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/BrokersDetail.tsx @@ -8,6 +8,7 @@ import { useParams } from 'react-router-dom'; import TagsWithHide from '@src/components/TagsWithHide'; import SwitchTab from '@src/components/SwitchTab'; import RenderEmpty from '@src/components/RenderEmpty'; +import { useForceRefresh } from '@src/components/utils'; interface PropsType { hashData: any; @@ -401,11 +402,18 @@ export default (props: PropsType) => { const { hashData } = props; const [showMode, setShowMode] = useState('card'); + const [refreshKey, forceRefresh] = useForceRefresh(); return ( <> -
+
+ void} + > + +
diff --git a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/config.tsx b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/config.tsx index aa1e25d3e..a6cdbc251 100644 --- a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/config.tsx +++ b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/config.tsx @@ -81,7 +81,8 @@ export const getTopicMessagesColmns = () => { title: 'Offset', dataIndex: 'offset', key: 'offset', - render: (t: number) => (t ? t.toLocaleString() : '-'), + sorter: true, + render: (t: number) => (+t ? t.toLocaleString() : '-'), }, { title: 'Timestamp', diff --git a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/index.less b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/index.less index f13249ab0..ea8470f81 100644 --- a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/index.less +++ b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/index.less @@ -26,6 +26,7 @@ .left { display: flex; + align-items: center; .info-box { display: flex; height: 36px; diff --git a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/index.tsx b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/index.tsx index ea009bd44..169f81769 100644 --- a/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/index.tsx +++ b/km-console/packages/layout-clusters-fe/src/pages/TopicDetail/index.tsx @@ -15,9 +15,21 @@ import Replicator from './Replicator'; import './index.less'; import TopicDetailHealthCheck from '@src/components/CardBar/TopicDetailHealthCheck'; import { hashDataParse } from '@src/constants/common'; +import { useForceRefresh } from '@src/components/utils'; const { TabPane } = Tabs; +const Reload = (props: any) => { + return ( + void} + > + + + ); +}; + const OperationsSlot: any = { // eslint-disable-next-line react/display-name // ['Partitions']: (arg: any) => { @@ -70,17 +82,20 @@ const OperationsSlot: any = { // eslint-disable-next-line react/display-name ['ConsumerGroups']: (arg: any) => { return ( - + <> + + + ); }, }; @@ -94,6 +109,7 @@ const TopicDetail = (props: any) => { const [searchValue, setSearchValue] = useState(''); const [visible, setVisible] = useState(false); const [hashData, setHashData] = useState({}); + const [refreshKey, forceRefresh] = useForceRefresh(); const callback = (key: any) => { setSearchValue(''); @@ -184,7 +200,7 @@ const TopicDetail = (props: any) => { onChange={callback} tabBarExtraContent={ OperationsSlot[positionType] && - OperationsSlot[positionType]({ ...props, setSearchKeywords, setSearchValue, searchValue, positionType }) + OperationsSlot[positionType]({ ...props, setSearchKeywords, setSearchValue, searchValue, positionType, forceRefresh }) } destroyInactiveTabPane > @@ -196,7 +212,7 @@ const TopicDetail = (props: any) => { {positionType === 'ConsumerGroups' && ( - + )} From ffde7d434ccafcaac09d9d335e85d8f20b287223 Mon Sep 17 00:00:00 2001 From: EricZeng Date: Tue, 1 Aug 2023 16:15:19 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=8E=BB=E9=99=A4IP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- km-console/packages/layout-clusters-fe/config/webpack.dev.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/km-console/packages/layout-clusters-fe/config/webpack.dev.js b/km-console/packages/layout-clusters-fe/config/webpack.dev.js index 2aac6dd1a..41c28ebbb 100644 --- a/km-console/packages/layout-clusters-fe/config/webpack.dev.js +++ b/km-console/packages/layout-clusters-fe/config/webpack.dev.js @@ -34,11 +34,11 @@ module.exports = { proxy: { '/ks-km/api/v3': { changeOrigin: true, - target: 'http://116.85.33.188/', + target: 'http://127.0.0.1/', }, '/logi-security/api/v1': { changeOrigin: true, - target: 'http://116.85.33.188/', + target: 'http://127.0.0.1/', }, }, },