From 80e670600bf1a1573051e47b765487b5290f3fd2 Mon Sep 17 00:00:00 2001 From: Archer <545436317@qq.com> Date: Tue, 14 Jan 2025 21:14:25 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20load=20members=EF=BC=9Bperf:=20yuque=20?= =?UTF-8?q?load=EF=BC=9Bfix:=20workflow=20llm=20params=20cannot=20close=20?= =?UTF-8?q?(#3594)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chat openapi doc * feat: dataset openapi doc * perf: load members * perf: member load code * perf: yuque load * fix: workflow llm params cannot close --- .../zh-cn/docs/development/openapi/chat.md | 2 +- .../zh-cn/docs/development/openapi/dataset.md | 21 +- .../zh-cn/docs/development/upgrading/4819.md | 6 +- packages/global/core/dataset/apiDataset.d.ts | 2 +- .../global/support/user/team/org/type.d.ts | 3 +- .../service/core/dataset/apiDataset/api.ts | 2 +- .../support/permission/org/orgSchema.ts | 11 +- .../components/common/Avatar/AvatarGroup.tsx | 2 +- packages/web/hooks/useScrollPagination.tsx | 2 +- projects/app/package.json | 2 +- .../permission/MemberManager/MemberModal.tsx | 249 +++++++++--------- .../account/team}/EditInfoModal.tsx | 0 .../team}/GroupManage/GroupInfoModal.tsx | 4 +- .../team}/GroupManage/GroupManageMember.tsx | 88 +++---- .../GroupManage/GroupTransferOwnerModal.tsx | 0 .../account/team}/GroupManage/index.tsx | 70 ++--- .../account/team}/InviteModal.tsx | 0 .../account/team}/MemberTable.tsx | 0 .../account/team}/OrgManage/IconButton.tsx | 0 .../account/team}/OrgManage/OrgInfoModal.tsx | 0 .../team}/OrgManage/OrgMemberManageModal.tsx | 6 +- .../account/team}/OrgManage/OrgMoveModal.tsx | 0 .../account/team}/OrgManage/OrgTree.tsx | 0 .../account/team}/OrgManage/index.tsx | 171 ++++++------ .../account/team}/PermissionManage/index.tsx | 2 +- .../account/team}/SelectMember.tsx | 0 .../account/team}/context.tsx | 0 projects/app/src/pages/account/team/index.tsx | 12 +- .../pages/api/common/system/getInitData.ts | 3 +- .../Import/diffSource/APIDataset.tsx | 4 +- projects/app/src/web/core/workflow/utils.ts | 2 +- 31 files changed, 346 insertions(+), 318 deletions(-) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/EditInfoModal.tsx (100%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/GroupManage/GroupInfoModal.tsx (96%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/GroupManage/GroupManageMember.tsx (80%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/GroupManage/GroupTransferOwnerModal.tsx (100%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/GroupManage/index.tsx (89%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/InviteModal.tsx (100%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/MemberTable.tsx (100%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/OrgManage/IconButton.tsx (100%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/OrgManage/OrgInfoModal.tsx (100%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/OrgManage/OrgMemberManageModal.tsx (97%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/OrgManage/OrgMoveModal.tsx (100%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/OrgManage/OrgTree.tsx (100%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/OrgManage/index.tsx (70%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/PermissionManage/index.tsx (99%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/SelectMember.tsx (100%) rename projects/app/src/{pages/account/team/components => pageComponents/account/team}/context.tsx (100%) diff --git a/docSite/content/zh-cn/docs/development/openapi/chat.md b/docSite/content/zh-cn/docs/development/openapi/chat.md index 25f2c835d..808eccdee 100644 --- a/docSite/content/zh-cn/docs/development/openapi/chat.md +++ b/docSite/content/zh-cn/docs/development/openapi/chat.md @@ -686,7 +686,7 @@ curl --location --request POST 'http://localhost:3000/api/core/chat/getHistories - appId - 应用 Id - offset - 偏移量,即从第几条数据开始取 - pageSize - 记录数量 -- source - 对话源 +- source - 对话源。source=api,表示获取通过 API 创建的对话(不会获取到页面上的对话记录) {{% /alert %}} {{< /markdownify >}} diff --git a/docSite/content/zh-cn/docs/development/openapi/dataset.md b/docSite/content/zh-cn/docs/development/openapi/dataset.md index 09d400463..efe1d6397 100644 --- a/docSite/content/zh-cn/docs/development/openapi/dataset.md +++ b/docSite/content/zh-cn/docs/development/openapi/dataset.md @@ -733,6 +733,21 @@ data 为集合的 ID。 {{< tab tabName="请求示例" >}} {{< markdownify >}} +**4.8.19+** +```bash +curl --location --request POST 'http://localhost:3000/api/core/dataset/collection/listv2' \ +--header 'Authorization: Bearer {{authorization}}' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "offset":0, + "pageSize": 10, + "datasetId":"6593e137231a2be9c5603ba7", + "parentId": null, + "searchText":"" +}' +``` + +**4.8.19-(不再维护)** ```bash curl --location --request POST 'http://localhost:3000/api/core/dataset/collection/list' \ --header 'Authorization: Bearer {{authorization}}' \ @@ -753,7 +768,7 @@ curl --location --request POST 'http://localhost:3000/api/core/dataset/collectio {{< markdownify >}} {{% alert icon=" " context="success" %}} -- pageNum: 页码(选填) +- offset: 偏移量 - pageSize: 每页数量,最大30(选填) - datasetId: 知识库的ID(必填) - parentId: 父级Id(选填) @@ -773,9 +788,7 @@ curl --location --request POST 'http://localhost:3000/api/core/dataset/collectio "statusText": "", "message": "", "data": { - "pageNum": 1, - "pageSize": 10, - "data": [ + "list": [ { "_id": "6593e137231a2be9c5603ba9", "parentId": null, diff --git a/docSite/content/zh-cn/docs/development/upgrading/4819.md b/docSite/content/zh-cn/docs/development/upgrading/4819.md index 6bb5673f8..1038f8215 100644 --- a/docSite/content/zh-cn/docs/development/upgrading/4819.md +++ b/docSite/content/zh-cn/docs/development/upgrading/4819.md @@ -10,4 +10,8 @@ weight: 806 ## 完整更新内容 -1. 新增 - 工作流知识库检索支持按知识库权限进行过滤 +1. 新增 - 工作流知识库检索支持按知识库权限进行过滤。 +2. 优化 - 成员列表分页加载。 +3. 优化 - 统一分页加载代码。 +4. 修复 - 语雀文件库导入时,嵌套文件内容无法展开的问题。 +5. 修复 - 工作流编排中,LLM 参数无法关闭问题。 diff --git a/packages/global/core/dataset/apiDataset.d.ts b/packages/global/core/dataset/apiDataset.d.ts index 3a29d0611..94c036886 100644 --- a/packages/global/core/dataset/apiDataset.d.ts +++ b/packages/global/core/dataset/apiDataset.d.ts @@ -5,7 +5,7 @@ export type APIFileItem = { type: 'file' | 'folder'; updateTime: Date; createTime: Date; - canEnter?: boolean; + hasChild?: boolean; }; export type APIFileServer = { diff --git a/packages/global/support/user/team/org/type.d.ts b/packages/global/support/user/team/org/type.d.ts index ca4a73292..b742ece48 100644 --- a/packages/global/support/user/team/org/type.d.ts +++ b/packages/global/support/user/team/org/type.d.ts @@ -13,6 +13,7 @@ type OrgSchemaType = { }; type OrgMemberSchemaType = { + _id: string; teamId: string; orgId: string; tmbId: string; @@ -20,6 +21,6 @@ type OrgMemberSchemaType = { type OrgType = Omit & { avatar: string; - members: OrgMemberSchemaType[]; permission: TeamPermission; + members: OrgMemberSchemaType[]; }; diff --git a/packages/service/core/dataset/apiDataset/api.ts b/packages/service/core/dataset/apiDataset/api.ts index 6a7c0cd8d..162d685f5 100644 --- a/packages/service/core/dataset/apiDataset/api.ts +++ b/packages/service/core/dataset/apiDataset/api.ts @@ -102,7 +102,7 @@ export const useApiDatasetRequest = ({ apiServer }: { apiServer: APIFileServer } const formattedFiles = files.map((file) => ({ ...file, - canEnter: file.type === 'folder' + hasChild: file.type === 'folder' })); return formattedFiles; diff --git a/packages/service/support/permission/org/orgSchema.ts b/packages/service/support/permission/org/orgSchema.ts index 45030c4a6..94fa531e4 100644 --- a/packages/service/support/permission/org/orgSchema.ts +++ b/packages/service/support/permission/org/orgSchema.ts @@ -47,14 +47,11 @@ export const OrgSchema = new Schema( OrgSchema.virtual('members', { ref: OrgMemberCollectionName, localField: '_id', - foreignField: 'orgId' + foreignField: 'orgId', + match: function (this: OrgSchemaType) { + return { teamId: this.teamId }; + } }); -// OrgSchema.virtual('permission', { -// ref: ResourcePermissionCollectionName, -// localField: '_id', -// foreignField: 'orgId', -// justOne: true -// }); try { OrgSchema.index({ diff --git a/packages/web/components/common/Avatar/AvatarGroup.tsx b/packages/web/components/common/Avatar/AvatarGroup.tsx index 2c26b9a9d..199373f05 100644 --- a/packages/web/components/common/Avatar/AvatarGroup.tsx +++ b/packages/web/components/common/Avatar/AvatarGroup.tsx @@ -23,7 +23,7 @@ function AvatarGroup({ {avatars.slice(0, max).map((avatar, index) => ( 0 ? 'absolute' : 'relative'} left={index > 0 ? `${index * 15}px` : 0} diff --git a/packages/web/hooks/useScrollPagination.tsx b/packages/web/hooks/useScrollPagination.tsx index f16702007..4ecc77c44 100644 --- a/packages/web/hooks/useScrollPagination.tsx +++ b/packages/web/hooks/useScrollPagination.tsx @@ -16,7 +16,7 @@ import MyBox from '../components/common/MyBox'; import { useTranslation } from 'next-i18next'; type ItemHeight = (index: number, data: T) => number; -const thresholdVal = 200; +const thresholdVal = 100; export type ScrollListType = ({ children, diff --git a/projects/app/package.json b/projects/app/package.json index c735c9f6a..86370fcda 100644 --- a/projects/app/package.json +++ b/projects/app/package.json @@ -1,6 +1,6 @@ { "name": "app", - "version": "4.8.18", + "version": "4.8.19", "private": false, "scripts": { "dev": "next dev", diff --git a/projects/app/src/components/support/permission/MemberManager/MemberModal.tsx b/projects/app/src/components/support/permission/MemberManager/MemberModal.tsx index 21b45d4ef..4d77f9ef8 100644 --- a/projects/app/src/components/support/permission/MemberManager/MemberModal.tsx +++ b/projects/app/src/components/support/permission/MemberManager/MemberModal.tsx @@ -237,6 +237,7 @@ function MemberModal({ /> + {/* Entry */} {!searchText && !filterClass && ( <> {entryList.current.map((item) => { @@ -299,133 +300,135 @@ function MemberModal({ )} - - {filterMembers.map((member) => { - const onChange = () => { - setSelectedMembers((state) => { - if (state.includes(member.tmbId)) { - return state.filter((v) => v !== member.tmbId); - } - return [...state, member.tmbId]; - }); - }; - const collaborator = collaboratorList?.find((v) => v.tmbId === member.tmbId); - return ( - - - - - {member.memberName} - - - - ); - })} - {filterOrgs.map((org) => { - const onChange = () => { - setSelectedOrgIdList((state) => { - if (state.includes(org._id)) { - return state.filter((v) => v !== org._id); - } - return [...state, org._id]; - }); - }; - const collaborator = collaboratorList?.find((v) => v.orgId === org._id); - return ( - - - - - {org.name} + {filterClass && ( + + {filterOrgs.map((org) => { + const onChange = () => { + setSelectedOrgIdList((state) => { + if (state.includes(org._id)) { + return state.filter((v) => v !== org._id); + } + return [...state, org._id]; + }); + }; + const collaborator = collaboratorList?.find((v) => v.orgId === org._id); + return ( + + + + + {org.name} + {org.count && ( + <> + + {org.count} + + + )} + + {org.count && ( - <> - - {org.count} - - + { + setParentPath(getOrgChildrenPath(org)); + }} + /> )} - - {org.count && ( - { - setParentPath(getOrgChildrenPath(org)); - }} + ); + })} + {filterMembers.map((member) => { + const onChange = () => { + setSelectedMembers((state) => { + if (state.includes(member.tmbId)) { + return state.filter((v) => v !== member.tmbId); + } + return [...state, member.tmbId]; + }); + }; + const collaborator = collaboratorList?.find((v) => v.tmbId === member.tmbId); + return ( + + - )} - - ); - })} - {filterGroups.map((group) => { - const onChange = () => { - setSelectedGroupIdList((state) => { - if (state.includes(group._id)) { - return state.filter((v) => v !== group._id); - } - return [...state, group._id]; - }); - }; - const collaborator = collaboratorList?.find((v) => v.groupId === group._id); - return ( - - - - - {group.name === DefaultGroupName ? userInfo?.team.teamName : group.name} - - - - ); - })} - + + + {member.memberName} + + + + ); + })} + {filterGroups.map((group) => { + const onChange = () => { + setSelectedGroupIdList((state) => { + if (state.includes(group._id)) { + return state.filter((v) => v !== group._id); + } + return [...state, group._id]; + }); + }; + const collaborator = collaboratorList?.find((v) => v.groupId === group._id); + return ( + + + + + {group.name === DefaultGroupName ? userInfo?.team.teamName : group.name} + + + + ); + })} + + )} diff --git a/projects/app/src/pages/account/team/components/EditInfoModal.tsx b/projects/app/src/pageComponents/account/team/EditInfoModal.tsx similarity index 100% rename from projects/app/src/pages/account/team/components/EditInfoModal.tsx rename to projects/app/src/pageComponents/account/team/EditInfoModal.tsx diff --git a/projects/app/src/pages/account/team/components/GroupManage/GroupInfoModal.tsx b/projects/app/src/pageComponents/account/team/GroupManage/GroupInfoModal.tsx similarity index 96% rename from projects/app/src/pages/account/team/components/GroupManage/GroupInfoModal.tsx rename to projects/app/src/pageComponents/account/team/GroupManage/GroupInfoModal.tsx index c2fb98e06..9fd81a310 100644 --- a/projects/app/src/pages/account/team/components/GroupManage/GroupInfoModal.tsx +++ b/projects/app/src/pageComponents/account/team/GroupManage/GroupInfoModal.tsx @@ -55,7 +55,7 @@ function GroupInfoModal({ onClose, editGroupId }: { onClose: () => void; editGro } ); - const { run: onCreate, loading: isLoadingCreate } = useRequest2( + const { runAsync: onCreate, loading: isLoadingCreate } = useRequest2( (data: GroupFormType) => { return postCreateGroup({ name: data.name, @@ -67,7 +67,7 @@ function GroupInfoModal({ onClose, editGroupId }: { onClose: () => void; editGro } ); - const { run: onUpdate, loading: isLoadingUpdate } = useRequest2( + const { runAsync: onUpdate, loading: isLoadingUpdate } = useRequest2( async (data: GroupFormType) => { if (!editGroupId) return; return putUpdateGroup({ diff --git a/projects/app/src/pages/account/team/components/GroupManage/GroupManageMember.tsx b/projects/app/src/pageComponents/account/team/GroupManage/GroupManageMember.tsx similarity index 80% rename from projects/app/src/pages/account/team/components/GroupManage/GroupManageMember.tsx rename to projects/app/src/pageComponents/account/team/GroupManage/GroupManageMember.tsx index 9325fb76f..95528e7ec 100644 --- a/projects/app/src/pages/account/team/components/GroupManage/GroupManageMember.tsx +++ b/projects/app/src/pageComponents/account/team/GroupManage/GroupManageMember.tsx @@ -32,27 +32,26 @@ export type GroupFormType = { }[]; }; +// 1. Owner can not be deleted, toast +// 2. Owner/Admin can manage members +// 3. Owner can add/remove admins function GroupEditModal({ onClose, editGroupId }: { onClose: () => void; editGroupId?: string }) { - // 1. Owner can not be deleted, toast - // 2. Owner/Admin can manage members - // 3. Owner can add/remove admins const { t } = useTranslation(); const { userInfo } = useUserStore(); const { toast } = useToast(); - const [hoveredMemberId, setHoveredMemberId] = useState(undefined); - const { - members: allMembers, - refetchGroups, - groups, - refetchMembers, - MemberScrollData - } = useContextSelector(TeamContext, (v) => v); + const groups = useContextSelector(TeamContext, (v) => v.groups); + const refetchGroups = useContextSelector(TeamContext, (v) => v.refetchGroups); const group = useMemo(() => { return groups.find((item) => item._id === editGroupId); }, [editGroupId, groups]); + const allMembers = useContextSelector(TeamContext, (v) => v.members); + const refetchMembers = useContextSelector(TeamContext, (v) => v.refetchMembers); + const MemberScrollData = useContextSelector(TeamContext, (v) => v.MemberScrollData); + const [hoveredMemberId, setHoveredMemberId] = useState(); const [members, setMembers] = useState(group?.members || []); + const [searchKey, setSearchKey] = useState(''); const filtered = useMemo(() => { return [ @@ -63,7 +62,7 @@ function GroupEditModal({ onClose, editGroupId }: { onClose: () => void; editGro ]; }, [searchKey, allMembers]); - const { run: onUpdate, loading: isLoadingUpdate } = useRequest2( + const { runAsync: onUpdate, loading: isLoadingUpdate } = useRequest2( async () => { if (!editGroupId || !members.length) return; return putUpdateGroup({ @@ -156,39 +155,37 @@ function GroupEditModal({ onClose, editGroupId }: { onClose: () => void; editGro setSearchKey(e.target.value); }} /> - - - {filtered.map((member) => { - return ( - handleToggleSelect(member.tmbId)} - > - } - /> - - {member.memberName} - - ); - })} - - + + {filtered.map((member) => { + return ( + handleToggleSelect(member.tmbId)} + > + } + /> + + {member.memberName} + + ); + })} + {t('common:chosen') + ': ' + members.length} - + {members.map((member) => { return ( void; editGro ); })} - + - + + diff --git a/projects/app/src/pages/account/team/components/GroupManage/GroupTransferOwnerModal.tsx b/projects/app/src/pageComponents/account/team/GroupManage/GroupTransferOwnerModal.tsx similarity index 100% rename from projects/app/src/pages/account/team/components/GroupManage/GroupTransferOwnerModal.tsx rename to projects/app/src/pageComponents/account/team/GroupManage/GroupTransferOwnerModal.tsx diff --git a/projects/app/src/pages/account/team/components/GroupManage/index.tsx b/projects/app/src/pageComponents/account/team/GroupManage/index.tsx similarity index 89% rename from projects/app/src/pages/account/team/components/GroupManage/index.tsx rename to projects/app/src/pageComponents/account/team/GroupManage/index.tsx index ba25e90b6..bd568d815 100644 --- a/projects/app/src/pages/account/team/components/GroupManage/index.tsx +++ b/projects/app/src/pageComponents/account/team/GroupManage/index.tsx @@ -24,50 +24,43 @@ import { useUserStore } from '@/web/support/user/useUserStore'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import { deleteGroup } from '@/web/support/user/team/group/api'; import { DefaultGroupName } from '@fastgpt/global/support/user/team/group/constant'; -import MemberTag from '../../../../../components/support/user/team/Info/MemberTag'; +import MemberTag from '../../../../components/support/user/team/Info/MemberTag'; import MyTooltip from '@fastgpt/web/components/common/MyTooltip'; import dynamic from 'next/dynamic'; import { useState } from 'react'; import IconButton from '../OrgManage/IconButton'; +import { MemberGroupType } from '@fastgpt/global/support/permission/memberGroup/type'; const ChangeOwnerModal = dynamic(() => import('./GroupTransferOwnerModal')); const GroupInfoModal = dynamic(() => import('./GroupInfoModal')); -const ManageGroupMemberModal = dynamic(() => import('./GroupManageMember')); +const GroupManageMember = dynamic(() => import('./GroupManageMember')); function MemberTable({ Tabs }: { Tabs: React.ReactNode }) { const { t } = useTranslation(); const { userInfo } = useUserStore(); - const [editGroupId, setEditGroupId] = useState(); + const { groups, refetchGroups, members, refetchMembers } = useContextSelector( + TeamContext, + (v) => v + ); + + const [editGroup, setEditGroup] = useState(); const { isOpen: isOpenGroupInfo, onOpen: onOpenGroupInfo, onClose: onCloseGroupInfo } = useDisclosure(); - const { - isOpen: isOpenManageGroupMember, - onOpen: onOpenManageGroupMember, - onClose: onCloseManageGroupMember - } = useDisclosure(); - const onEditGroup = (groupId: string) => { - setEditGroupId(groupId); + + const onEditGroupInfo = (e: MemberGroupType) => { + setEditGroup(e); onOpenGroupInfo(); }; - const onManageMember = (groupId: string) => { - setEditGroupId(groupId); - onOpenManageGroupMember(); - }; const { ConfirmModal: ConfirmDeleteGroupModal, openConfirm: openDeleteGroupModal } = useConfirm({ type: 'delete', content: t('account_team:confirm_delete_group') }); - const { groups, refetchGroups, members, refetchMembers } = useContextSelector( - TeamContext, - (v) => v - ); - const { runAsync: delDeleteGroup } = useRequest2(deleteGroup, { onSuccess: () => { refetchGroups(); @@ -75,12 +68,21 @@ function MemberTable({ Tabs }: { Tabs: React.ReactNode }) { } }); + const { + isOpen: isOpenManageGroupMember, + onOpen: onOpenManageGroupMember, + onClose: onCloseManageGroupMember + } = useDisclosure(); + const onManageMember = (e: MemberGroupType) => { + setEditGroup(e); + onOpenManageGroupMember(); + }; + const hasGroupManagePer = (group: (typeof groups)[0]) => userInfo?.team.permission.hasManagePer || ['admin', 'owner'].includes( group.members.find((item) => item.tmbId === userInfo?.team.tmbId)?.role ?? '' ); - const isGroupOwner = (group: (typeof groups)[0]) => userInfo?.team.permission.hasManagePer || group.members.find((item) => item.role === 'owner')?.tmbId === userInfo?.team.tmbId; @@ -90,8 +92,8 @@ function MemberTable({ Tabs }: { Tabs: React.ReactNode }) { onOpen: onOpenChangeOwner, onClose: onCloseChangeOwner } = useDisclosure(); - const onChangeOwner = (groupId: string) => { - setEditGroupId(groupId); + const onChangeOwner = (e: MemberGroupType) => { + setEditGroup(e); onOpenChangeOwner(); }; @@ -173,7 +175,7 @@ function MemberTable({ Tabs }: { Tabs: React.ReactNode }) { v.avatar)} groupId={group._id} /> ) : hasGroupManagePer(group) ? ( - onManageMember(group._id)}> + onManageMember(group)}> members.find((m) => m.tmbId === v.tmbId)?.avatar ?? '' @@ -202,14 +204,14 @@ function MemberTable({ Tabs }: { Tabs: React.ReactNode }) { label: t('account_team:edit_info'), icon: 'edit', onClick: () => { - onEditGroup(group._id); + onEditGroupInfo(group); } }, { label: t('account_team:manage_member'), icon: 'support/team/group', onClick: () => { - onManageMember(group._id); + onManageMember(group); } }, ...(isGroupOwner(group) @@ -218,7 +220,7 @@ function MemberTable({ Tabs }: { Tabs: React.ReactNode }) { label: t('account_team:transfer_ownership'), icon: 'modal/changePer', onClick: () => { - onChangeOwner(group._id); + onChangeOwner(group); }, type: 'primary' as MenuItemType }, @@ -246,25 +248,25 @@ function MemberTable({ Tabs }: { Tabs: React.ReactNode }) { - {isOpenChangeOwner && editGroupId && ( - + {isOpenChangeOwner && editGroup && ( + )} {isOpenGroupInfo && ( { onCloseGroupInfo(); - setEditGroupId(undefined); + setEditGroup(undefined); }} - editGroupId={editGroupId} + editGroupId={editGroup?._id} /> )} - {isOpenManageGroupMember && ( - { onCloseManageGroupMember(); - setEditGroupId(undefined); + setEditGroup(undefined); }} - editGroupId={editGroupId} + editGroupId={editGroup._id} /> )} diff --git a/projects/app/src/pages/account/team/components/InviteModal.tsx b/projects/app/src/pageComponents/account/team/InviteModal.tsx similarity index 100% rename from projects/app/src/pages/account/team/components/InviteModal.tsx rename to projects/app/src/pageComponents/account/team/InviteModal.tsx diff --git a/projects/app/src/pages/account/team/components/MemberTable.tsx b/projects/app/src/pageComponents/account/team/MemberTable.tsx similarity index 100% rename from projects/app/src/pages/account/team/components/MemberTable.tsx rename to projects/app/src/pageComponents/account/team/MemberTable.tsx diff --git a/projects/app/src/pages/account/team/components/OrgManage/IconButton.tsx b/projects/app/src/pageComponents/account/team/OrgManage/IconButton.tsx similarity index 100% rename from projects/app/src/pages/account/team/components/OrgManage/IconButton.tsx rename to projects/app/src/pageComponents/account/team/OrgManage/IconButton.tsx diff --git a/projects/app/src/pages/account/team/components/OrgManage/OrgInfoModal.tsx b/projects/app/src/pageComponents/account/team/OrgManage/OrgInfoModal.tsx similarity index 100% rename from projects/app/src/pages/account/team/components/OrgManage/OrgInfoModal.tsx rename to projects/app/src/pageComponents/account/team/OrgManage/OrgInfoModal.tsx diff --git a/projects/app/src/pages/account/team/components/OrgManage/OrgMemberManageModal.tsx b/projects/app/src/pageComponents/account/team/OrgManage/OrgMemberManageModal.tsx similarity index 97% rename from projects/app/src/pages/account/team/components/OrgManage/OrgMemberManageModal.tsx rename to projects/app/src/pageComponents/account/team/OrgManage/OrgMemberManageModal.tsx index 3a0d074a8..fd5a990ae 100644 --- a/projects/app/src/pages/account/team/components/OrgManage/OrgMemberManageModal.tsx +++ b/projects/app/src/pageComponents/account/team/OrgManage/OrgMemberManageModal.tsx @@ -97,7 +97,6 @@ function OrgMemberManageModal({ return ( - + + diff --git a/projects/app/src/pages/account/team/components/OrgManage/OrgMoveModal.tsx b/projects/app/src/pageComponents/account/team/OrgManage/OrgMoveModal.tsx similarity index 100% rename from projects/app/src/pages/account/team/components/OrgManage/OrgMoveModal.tsx rename to projects/app/src/pageComponents/account/team/OrgManage/OrgMoveModal.tsx diff --git a/projects/app/src/pages/account/team/components/OrgManage/OrgTree.tsx b/projects/app/src/pageComponents/account/team/OrgManage/OrgTree.tsx similarity index 100% rename from projects/app/src/pages/account/team/components/OrgManage/OrgTree.tsx rename to projects/app/src/pageComponents/account/team/OrgManage/OrgTree.tsx diff --git a/projects/app/src/pages/account/team/components/OrgManage/index.tsx b/projects/app/src/pageComponents/account/team/OrgManage/index.tsx similarity index 70% rename from projects/app/src/pages/account/team/components/OrgManage/index.tsx rename to projects/app/src/pageComponents/account/team/OrgManage/index.tsx index 8d2248657..ddc080ba5 100644 --- a/projects/app/src/pages/account/team/components/OrgManage/index.tsx +++ b/projects/app/src/pageComponents/account/team/OrgManage/index.tsx @@ -75,7 +75,7 @@ function OrgTable({ Tabs }: { Tabs: React.ReactNode }) { const { t } = useTranslation(); const { userInfo, isTeamAdmin } = useUserStore(); - const { members } = useContextSelector(TeamContext, (v) => v); + const { members, MemberScrollData } = useContextSelector(TeamContext, (v) => v); const { feConfigs } = useSystemStore(); const isSyncMember = feConfigs.register_method?.includes('sync'); @@ -174,109 +174,112 @@ function OrgTable({ Tabs }: { Tabs: React.ReactNode }) { - {/* Table */} - - - - - - {!isSyncMember && ( - + + + + ); + })} + +
- {t('common:Name')} - - {t('common:common.Action')} + + {/* Table */} + + + + + - )} - - - - {currentOrgs.map((org) => ( - - - {isTeamAdmin && !isSyncMember && ( - + {!isSyncMember && ( + )} - ))} - {currentOrg?.members.map((member) => { - const memberInfo = members.find((m) => m.tmbId === member.tmbId); - if (!memberInfo) return null; - - return ( - + + + {currentOrgs.map((org) => ( + - + + )} - ); - })} - -
+ {t('common:Name')}
- setParentPath(getOrgChildrenPath(org))} - > - - {org.count} - - - - } - menuList={[ - { - children: [ - { - icon: 'edit', - label: t('account_team:edit_info'), - onClick: () => setEditOrg(org) - }, - { - icon: 'common/file/move', - label: t('common:Move'), - onClick: () => setMovingOrg(org) - }, - { - icon: 'delete', - label: t('account_team:delete'), - type: 'danger', - onClick: () => deleteOrgHandler(org._id) - } - ] - } - ]} - /> - + {t('common:common.Action')} +
- + setParentPath(getOrgChildrenPath(org))} + > + + {org.count} + + - {isTeamAdmin && !isSyncMember && ( + {isTeamAdmin && !isSyncMember && ( + } menuList={[ { children: [ + { + icon: 'edit', + label: t('account_team:edit_info'), + onClick: () => setEditOrg(org) + }, + { + icon: 'common/file/move', + label: t('common:Move'), + onClick: () => setMovingOrg(org) + }, { icon: 'delete', label: t('account_team:delete'), type: 'danger', - onClick: () => - openDeleteMemberModal(() => - deleteMemberReq(currentOrg._id, member.tmbId) - )() + onClick: () => deleteOrgHandler(org._id) } ] } ]} /> - )} -
-
+ ))} + {currentOrg?.members.map((member) => { + const memberInfo = members.find((m) => m.tmbId === member.tmbId); + if (!memberInfo) return null; + + return ( +
+ + + {isTeamAdmin && !isSyncMember && ( + } + menuList={[ + { + children: [ + { + icon: 'delete', + label: t('account_team:delete'), + type: 'danger', + onClick: () => + openDeleteMemberModal(() => + deleteMemberReq(currentOrg._id, member.tmbId) + )() + } + ] + } + ]} + /> + )} +
+
+ + {/* Slider */} {!isSyncMember && ( diff --git a/projects/app/src/pages/account/team/components/PermissionManage/index.tsx b/projects/app/src/pageComponents/account/team/PermissionManage/index.tsx similarity index 99% rename from projects/app/src/pages/account/team/components/PermissionManage/index.tsx rename to projects/app/src/pageComponents/account/team/PermissionManage/index.tsx index 4cf9860d4..b2228a3c3 100644 --- a/projects/app/src/pages/account/team/components/PermissionManage/index.tsx +++ b/projects/app/src/pageComponents/account/team/PermissionManage/index.tsx @@ -24,7 +24,7 @@ import { import { useUserStore } from '@/web/support/user/useUserStore'; import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip'; import Avatar from '@fastgpt/web/components/common/Avatar'; -import MemberTag from '../../../../../components/support/user/team/Info/MemberTag'; +import MemberTag from '../../../../components/support/user/team/Info/MemberTag'; import { DefaultGroupName } from '@fastgpt/global/support/user/team/group/constant'; import { TeamManagePermissionVal, diff --git a/projects/app/src/pages/account/team/components/SelectMember.tsx b/projects/app/src/pageComponents/account/team/SelectMember.tsx similarity index 100% rename from projects/app/src/pages/account/team/components/SelectMember.tsx rename to projects/app/src/pageComponents/account/team/SelectMember.tsx diff --git a/projects/app/src/pages/account/team/components/context.tsx b/projects/app/src/pageComponents/account/team/context.tsx similarity index 100% rename from projects/app/src/pages/account/team/components/context.tsx rename to projects/app/src/pageComponents/account/team/context.tsx diff --git a/projects/app/src/pages/account/team/index.tsx b/projects/app/src/pages/account/team/index.tsx index 6c6a5e185..f8e41ef21 100644 --- a/projects/app/src/pages/account/team/index.tsx +++ b/projects/app/src/pages/account/team/index.tsx @@ -11,13 +11,15 @@ import { useRouter } from 'next/router'; import FillRowTabs from '@fastgpt/web/components/common/Tabs/FillRowTabs'; import MyIcon from '@fastgpt/web/components/common/Icon'; import { TeamMemberRoleEnum } from '@fastgpt/global/support/user/team/constant'; -import { TeamContext, TeamModalContextProvider } from './components/context'; +import { TeamContext, TeamModalContextProvider } from '@/pageComponents/account/team/context'; import dynamic from 'next/dynamic'; -const MemberTable = dynamic(() => import('./components/MemberTable')); -const PermissionManage = dynamic(() => import('./components/PermissionManage/index')); -const GroupManage = dynamic(() => import('./components/GroupManage/index')); -const OrgManage = dynamic(() => import('./components/OrgManage/index')); +const MemberTable = dynamic(() => import('@/pageComponents/account/team/MemberTable')); +const PermissionManage = dynamic( + () => import('@/pageComponents/account/team/PermissionManage/index') +); +const GroupManage = dynamic(() => import('@/pageComponents/account/team/GroupManage/index')); +const OrgManage = dynamic(() => import('@/pageComponents/account/team/OrgManage/index')); export enum TeamTabEnum { member = 'member', diff --git a/projects/app/src/pages/api/common/system/getInitData.ts b/projects/app/src/pages/api/common/system/getInitData.ts index 33cdb4437..85d6413c1 100644 --- a/projects/app/src/pages/api/common/system/getInitData.ts +++ b/projects/app/src/pages/api/common/system/getInitData.ts @@ -8,7 +8,8 @@ async function handler(req: ApiRequestProps<{}, { bufferId?: string }>, res: Nex // If bufferId is the same as the current bufferId, return directly if (bufferId && global.systemInitBufferId && global.systemInitBufferId === bufferId) { return { - bufferId: global.systemInitBufferId + bufferId: global.systemInitBufferId, + systemVersion: global.systemVersion || '0.0.0' }; } diff --git a/projects/app/src/pages/dataset/detail/components/Import/diffSource/APIDataset.tsx b/projects/app/src/pages/dataset/detail/components/Import/diffSource/APIDataset.tsx index a0178823b..e0cdff95c 100644 --- a/projects/app/src/pages/dataset/detail/components/Import/diffSource/APIDataset.tsx +++ b/projects/app/src/pages/dataset/detail/components/Import/diffSource/APIDataset.tsx @@ -127,7 +127,7 @@ const CustomAPIFileInput = () => { const handleItemClick = useCallback( (item: APIFileItem) => { - if (item.canEnter) { + if (item.hasChild) { setPaths((state) => [...state, { parentId: item.id, parentName: item.name }]); return setParent({ parentId: item.id, @@ -250,7 +250,7 @@ const CustomAPIFileInput = () => { {item.name} - {item.canEnter && } + {item.hasChild && }
); })} diff --git a/projects/app/src/web/core/workflow/utils.ts b/projects/app/src/web/core/workflow/utils.ts index 1d5c6f998..209b284f8 100644 --- a/projects/app/src/web/core/workflow/utils.ts +++ b/projects/app/src/web/core/workflow/utils.ts @@ -118,7 +118,7 @@ export const storeNode2FlowNode = ({ toolDescription: t(templateInput.toolDescription ?? (storeInput.toolDescription as any)), selectedTypeIndex: storeInput.selectedTypeIndex ?? templateInput.selectedTypeIndex, - value: storeInput.value ?? templateInput.value, + value: storeInput.value, valueType: storeInput.valueType ?? templateInput.valueType, label: storeInput.label ?? templateInput.label };