diff --git a/packages/service/support/permission/schema.ts b/packages/service/support/permission/schema.ts
index 1eebfceb2..dd94c8952 100644
--- a/packages/service/support/permission/schema.ts
+++ b/packages/service/support/permission/schema.ts
@@ -78,6 +78,11 @@ ResourcePermissionSchema.virtual('org', {
});
try {
+ ResourcePermissionSchema.index({
+ resourceType: 1,
+ teamId: 1
+ });
+
// Indexes for resourceId-based resources
ResourcePermissionSchema.index(
{
diff --git a/projects/app/src/components/core/ai/ModelTable/index.tsx b/projects/app/src/components/core/ai/ModelTable/index.tsx
index 104f16205..719ea1dc8 100644
--- a/projects/app/src/components/core/ai/ModelTable/index.tsx
+++ b/projects/app/src/components/core/ai/ModelTable/index.tsx
@@ -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 = () => {
{item.priceLabel} |
{userInfo?.team.permission.hasManagePer && (
- getModelCollaborators(item.model)}
@@ -335,12 +335,10 @@ const ModelTable = () => {
size="1rem"
hoverColor={'blue.500'}
w="min-content"
- onClick={() => {
- onOpenManageModal();
- }}
+ onClick={onOpenManageModal}
/>
)}
-
+
|
)}
@@ -351,7 +349,7 @@ const ModelTable = () => {
@@ -368,16 +366,11 @@ const ModelTable = () => {
permission={userInfo?.team.permission!}
>
{({ onOpenManageModal }) => (
-
diff --git a/projects/app/src/components/support/permission/MemberManager/context.tsx b/projects/app/src/components/support/permission/MemberManager/context.tsx
index 0325ec853..6c6322e6b 100644
--- a/projects/app/src/components/support/permission/MemberManager/context.tsx
+++ b/projects/app/src/components/support/permission/MemberManager/context.tsx
@@ -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) => {
+ const [isProviderMounted, setIsProviderMounted] = useState(false);
+
+ const handleOpen = useCallback(() => {
+ setIsProviderMounted(true);
+ }, []);
+
+ // 如果还未挂载 Provider,只渲染触发按钮
+ if (!isProviderMounted) {
+ return <>{children({ onOpenManageModal: handleOpen })}>;
+ }
+
+ // Provider 已挂载,渲染完整的协作者管理功能
+ return (
+
+ {({ onOpenManageModal }) => {
+ // 组件挂载后自动打开模态框
+ useEffect(() => {
+ onOpenManageModal();
+ }, [onOpenManageModal]);
+
+ return <>{children({ onOpenManageModal })}>;
+ }}
+
+ );
+};