mirror of
https://github.com/labring/FastGPT.git
synced 2025-10-13 14:29:40 +00:00
perf: permission index & model table collaborator context lazy mount (#5703)
This commit is contained in:
@@ -78,6 +78,11 @@ ResourcePermissionSchema.virtual('org', {
|
||||
});
|
||||
|
||||
try {
|
||||
ResourcePermissionSchema.index({
|
||||
resourceType: 1,
|
||||
teamId: 1
|
||||
});
|
||||
|
||||
// Indexes for resourceId-based resources
|
||||
ResourcePermissionSchema.index(
|
||||
{
|
||||
|
@@ -26,10 +26,10 @@ import dynamic from 'next/dynamic';
|
||||
import CopyBox from '@fastgpt/web/components/common/String/CopyBox';
|
||||
import MyIconButton from '@fastgpt/web/components/common/Icon/button';
|
||||
import { useTableMultipleSelect } from '@fastgpt/web/hooks/useTableMultipleSelect';
|
||||
import CollaboratorContextProvider from '@/components/support/permission/MemberManager/context';
|
||||
import { ReadRoleVal } from '@fastgpt/global/support/permission/constant';
|
||||
import { getModelCollaborators, updateModelCollaborators } from '@/web/common/system/api';
|
||||
import { useUserStore } from '@/web/support/user/useUserStore';
|
||||
import { LazyCollaboratorProvider } from '@/components/support/permission/MemberManager/context';
|
||||
|
||||
const MyModal = dynamic(() => import('@fastgpt/web/components/common/MyModal'));
|
||||
|
||||
@@ -317,7 +317,7 @@ const ModelTable = () => {
|
||||
<Td fontSize={'sm'}>{item.priceLabel}</Td>
|
||||
{userInfo?.team.permission.hasManagePer && (
|
||||
<Td fontSize={'sm'}>
|
||||
<CollaboratorContextProvider
|
||||
<LazyCollaboratorProvider
|
||||
selectedHint={t('account_model:model_permission_config_hint')}
|
||||
defaultRole={ReadRoleVal}
|
||||
onGetCollaboratorList={() => getModelCollaborators(item.model)}
|
||||
@@ -335,12 +335,10 @@ const ModelTable = () => {
|
||||
size="1rem"
|
||||
hoverColor={'blue.500'}
|
||||
w="min-content"
|
||||
onClick={() => {
|
||||
onOpenManageModal();
|
||||
}}
|
||||
onClick={onOpenManageModal}
|
||||
/>
|
||||
)}
|
||||
</CollaboratorContextProvider>
|
||||
</LazyCollaboratorProvider>
|
||||
</Td>
|
||||
)}
|
||||
</Tr>
|
||||
@@ -351,7 +349,7 @@ const ModelTable = () => {
|
||||
|
||||
<FloatingActionBar
|
||||
Controler={
|
||||
<CollaboratorContextProvider
|
||||
<LazyCollaboratorProvider
|
||||
selectedHint={t('account_model:model_permission_config_hint')}
|
||||
defaultRole={ReadRoleVal}
|
||||
onGetCollaboratorList={() =>
|
||||
@@ -368,16 +366,11 @@ const ModelTable = () => {
|
||||
permission={userInfo?.team.permission!}
|
||||
>
|
||||
{({ onOpenManageModal }) => (
|
||||
<Button
|
||||
variant={'whiteBase'}
|
||||
onClick={() => {
|
||||
onOpenManageModal();
|
||||
}}
|
||||
>
|
||||
<Button variant={'whiteBase'} onClick={onOpenManageModal}>
|
||||
{t('common:permission.Permission config')}
|
||||
</Button>
|
||||
)}
|
||||
</CollaboratorContextProvider>
|
||||
</LazyCollaboratorProvider>
|
||||
}
|
||||
></FloatingActionBar>
|
||||
</Flex>
|
||||
|
@@ -10,7 +10,7 @@ import type {
|
||||
RoleListType,
|
||||
RoleValueType
|
||||
} from '@fastgpt/global/support/permission/type';
|
||||
import { type ReactNode, useCallback, useMemo } from 'react';
|
||||
import { type ReactNode, useCallback, useEffect, useMemo, useState } from 'react';
|
||||
import { createContext } from 'use-context-selector';
|
||||
import dynamic from 'next/dynamic';
|
||||
|
||||
@@ -230,3 +230,35 @@ const CollaboratorContextProvider = ({
|
||||
};
|
||||
|
||||
export default CollaboratorContextProvider;
|
||||
|
||||
export const LazyCollaboratorProvider = ({
|
||||
children,
|
||||
...props
|
||||
}: {
|
||||
children: (params: { onOpenManageModal: () => void }) => React.ReactNode;
|
||||
} & React.ComponentProps<typeof CollaboratorContextProvider>) => {
|
||||
const [isProviderMounted, setIsProviderMounted] = useState(false);
|
||||
|
||||
const handleOpen = useCallback(() => {
|
||||
setIsProviderMounted(true);
|
||||
}, []);
|
||||
|
||||
// 如果还未挂载 Provider,只渲染触发按钮
|
||||
if (!isProviderMounted) {
|
||||
return <>{children({ onOpenManageModal: handleOpen })}</>;
|
||||
}
|
||||
|
||||
// Provider 已挂载,渲染完整的协作者管理功能
|
||||
return (
|
||||
<CollaboratorContextProvider {...props}>
|
||||
{({ onOpenManageModal }) => {
|
||||
// 组件挂载后自动打开模态框
|
||||
useEffect(() => {
|
||||
onOpenManageModal();
|
||||
}, [onOpenManageModal]);
|
||||
|
||||
return <>{children({ onOpenManageModal })}</>;
|
||||
}}
|
||||
</CollaboratorContextProvider>
|
||||
);
|
||||
};
|
||||
|
Reference in New Issue
Block a user