From 165b783a95f330632b77037cd999317c3a6a4c55 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Fri, 30 May 2025 17:27:21 +0800 Subject: [PATCH] perf: ux --- .../MemberManager/PermissionSelect.tsx | 108 +++++++++--------- .../pageComponents/app/detail/RouteTab.tsx | 33 ++++-- 2 files changed, 79 insertions(+), 62 deletions(-) diff --git a/projects/app/src/components/support/permission/MemberManager/PermissionSelect.tsx b/projects/app/src/components/support/permission/MemberManager/PermissionSelect.tsx index 674394d4a..3d5989aa2 100644 --- a/projects/app/src/components/support/permission/MemberManager/PermissionSelect.tsx +++ b/projects/app/src/components/support/permission/MemberManager/PermissionSelect.tsx @@ -105,7 +105,6 @@ function PermissionSelect({ const per = new Permission({ per: perValue }); per.addPer(...selectedMultipleValues); onChange(per.value); - setIsOpen(false); }; useOutsideClick({ @@ -187,61 +186,60 @@ function PermissionSelect({ ); })} - + {permissionSelectList.multipleCheckBoxList.length > 0 && ( + <> + + {permissionSelectList.multipleCheckBoxList.map((item) => { + const isChecked = selectedMultipleValues.includes(item.value); + const isDisabled = new Permission({ per: selectedSingleValue }).checkPer( + item.value + ); + const change = () => { + if (isDisabled) return; + const per = new Permission({ per: value }); + if (isChecked) { + per.removePer(item.value); + } else { + per.addPer(item.value); + } + onChange(per.value); + }; + return ( + + + + {t(item.name as any)} + + {t(item.description as any)} + + + + ); + })} + + )} - {/* {permissionSelectList.multipleCheckBoxList.length > 0 && ( - 其他权限(多选) - )} */} - - {permissionSelectList.multipleCheckBoxList.map((item) => { - const isChecked = selectedMultipleValues.includes(item.value); - const isDisabled = new Permission({ per: selectedSingleValue }).checkPer(item.value); - const change = () => { - if (isDisabled) return; - const per = new Permission({ per: value }); - if (isChecked) { - per.removePer(item.value); - } else { - per.addPer(item.value); - } - onChange(per.value); - }; - return ( - - - - {t(item.name as any)} - {t(item.description as any)} - - - ); - })} {onDelete && ( <> diff --git a/projects/app/src/pageComponents/app/detail/RouteTab.tsx b/projects/app/src/pageComponents/app/detail/RouteTab.tsx index 2d5bcb468..c1958b70f 100644 --- a/projects/app/src/pageComponents/app/detail/RouteTab.tsx +++ b/projects/app/src/pageComponents/app/detail/RouteTab.tsx @@ -1,5 +1,5 @@ import { Box, HStack } from '@chakra-ui/react'; -import React, { useCallback, useMemo } from 'react'; +import React, { useCallback, useEffect, useMemo } from 'react'; import { AppContext, TabEnum } from './context'; import { useRouter } from 'next/router'; import { useTranslation } from 'next-i18next'; @@ -25,11 +25,17 @@ const RouteTab = () => { const tabList = useMemo( () => [ - { - label: - appDetail.type === AppTypeEnum.plugin ? t('app:setting_plugin') : t('app:setting_app'), - id: TabEnum.appEdit - }, + ...(appDetail.permission.hasWritePer + ? [ + { + label: + appDetail.type === AppTypeEnum.plugin + ? t('app:setting_plugin') + : t('app:setting_app'), + id: TabEnum.appEdit + } + ] + : []), ...(appDetail.permission.hasManagePer ? [ { @@ -40,9 +46,22 @@ const RouteTab = () => { : []), ...(appDetail.permission.hasLogPer ? [{ label: t('app:chat_logs'), id: TabEnum.logs }] : []) ], - [appDetail.permission.hasManagePer, appDetail.type] + [ + appDetail.permission.hasLogPer, + appDetail.permission.hasManagePer, + appDetail.permission.hasWritePer, + appDetail.type, + t + ] ); + useEffect(() => { + // 没找到合适的 id,则自动跳转 + if (!tabList.find((item) => item.id === currentTab)) { + setCurrentTab(tabList[0].id); + } + }, [tabList, currentTab, setCurrentTab]); + return ( {tabList.map((tab) => (