@@ -14,7 +14,7 @@ import {
1414 Tr ,
1515 VStack
1616} from '@chakra-ui/react' ;
17- import type { OrgType } from '@fastgpt/global/support/user/team/org/type' ;
17+ import type { OrgListItemType , OrgType } from '@fastgpt/global/support/user/team/org/type' ;
1818import Avatar from '@fastgpt/web/components/common/Avatar' ;
1919import MyIcon from '@fastgpt/web/components/common/Icon' ;
2020import type { IconNameType } from '@fastgpt/web/components/common/Icon/type' ;
@@ -23,9 +23,7 @@ import { useConfirm } from '@fastgpt/web/hooks/useConfirm';
2323import { useRequest2 } from '@fastgpt/web/hooks/useRequest' ;
2424import { useTranslation } from 'next-i18next' ;
2525import { useMemo , useState } from 'react' ;
26- import { useContextSelector } from 'use-context-selector' ;
2726import MemberTag from '@/components/support/user/team/Info/MemberTag' ;
28- import { TeamContext } from '../context' ;
2927import {
3028 deleteOrg ,
3129 deleteOrgMember ,
@@ -39,10 +37,10 @@ import { defaultOrgForm, type OrgFormType } from './OrgInfoModal';
3937import dynamic from 'next/dynamic' ;
4038import MyBox from '@fastgpt/web/components/common/MyBox' ;
4139import Path from '@/components/common/folder/Path' ;
42- import { ParentTreePathItemType } from '@fastgpt/global/common/parentFolder/type' ;
40+ import { ParentIdType , ParentTreePathItemType } from '@fastgpt/global/common/parentFolder/type' ;
4341import { getOrgChildrenPath } from '@fastgpt/global/support/user/team/org/constant' ;
4442import { useSystemStore } from '@/web/common/system/useSystemStore' ;
45- import { delRemoveMember , getTeamMembers } from '@/web/support/user/team/api' ;
43+ import { delRemoveMember } from '@/web/support/user/team/api' ;
4644import SearchInput from '@fastgpt/web/components/common/Input/SearchInput' ;
4745import { useScrollPagination } from '@fastgpt/web/hooks/useScrollPagination' ;
4846
@@ -82,68 +80,52 @@ function ActionButton({
8280function OrgTable ( { Tabs } : { Tabs : React . ReactNode } ) {
8381 const { t } = useTranslation ( ) ;
8482 const { userInfo, isTeamAdmin } = useUserStore ( ) ;
85- const [ searchOrg , setSearchOrg ] = useState ( '' ) ;
86- const [ orgStack , setOrgStack ] = useState < OrgType [ ] > ( [ ] ) ;
87- const currentOrg = useMemo ( ( ) => orgStack [ orgStack . length - 1 ] , [ orgStack ] ) ;
88-
89- const [ rootOrg , setRootOrg ] = useState < OrgType > ( ) ;
83+ const { feConfigs } = useSystemStore ( ) ;
84+ const isSyncMember = feConfigs . register_method ?. includes ( 'sync' ) ;
9085
91- const { data : members = [ ] , ScrollData : MemberScrollData } = useScrollPagination ( getOrgMembers , {
92- pageSize : 20 ,
93- params : {
94- orgId : currentOrg ?. _id ?? rootOrg ?. _id
95- } ,
96- refreshDeps : [ currentOrg ?. _id , rootOrg ?. _id ]
97- } ) ;
86+ const [ searchOrg , setSearchOrg ] = useState ( '' ) ;
9887
99- const { feConfigs } = useSystemStore ( ) ;
88+ const [ parentId , setParentId ] = useState < ParentIdType > ( ) ;
89+ const [ currentOrg , setCurrentOrg ] = useState < OrgListItemType > ( ) ;
10090
101- const isSyncMember = feConfigs . register_method ?. includes ( 'sync' ) ;
102- const [ path , setPath ] = useState ( '' ) ;
91+ // 用于 org 层级
92+ const [ orgStack , setOrgStack ] = useState < OrgListItemType [ ] > ( [ ] ) ;
10393
10494 const {
10595 data : orgs = [ ] ,
10696 loading : isLoadingOrgs ,
10797 refresh : refetchOrgs
10898 } = useRequest2 (
10999 ( ) => {
110- // sync path to orgStack
111- const splitPath = path . split ( '/' ) . filter ( Boolean ) ;
112- const orgs = orgStack . filter ( ( o ) => splitPath . includes ( o . pathId ) ) ;
113- setOrgStack ( orgs ) ;
114- return getOrgList ( path ) ;
100+ return getOrgList ( parentId ) ;
115101 } ,
116102 {
117103 manual : false ,
118- refreshDeps : [ userInfo ?. team ?. teamId , path ] ,
119- onSuccess : ( data ) => {
120- if ( ! rootOrg ) {
121- setRootOrg ( data [ 0 ] ) ;
122- }
123- }
104+ refreshDeps : [ userInfo ?. team ?. teamId , parentId ]
124105 }
125106 ) ;
126107
127108 const paths = useMemo ( ( ) => {
109+ if ( ! currentOrg ) return [ ] ;
128110 return orgStack
129111 . map ( ( org ) => {
130- if ( org ?. path === '' ) return ;
131112 return {
132113 parentId : getOrgChildrenPath ( org ) ,
133114 parentName : org . name
134115 } ;
135116 } )
136117 . filter ( Boolean ) as ParentTreePathItemType [ ] ;
137- } , [ orgStack ] ) ;
118+ } , [ currentOrg , orgStack ] ) ;
138119
139- const onClickOrg = ( org : OrgType ) => {
120+ const onClickOrg = ( org : OrgListItemType ) => {
121+ setParentId ( currentOrg ?. _id ) ;
140122 setOrgStack ( [ ...orgStack , org ] ) ;
141- setPath ( getOrgChildrenPath ( org ) ) ;
123+ setCurrentOrg ( org ) ;
142124 } ;
143125
144126 const [ editOrg , setEditOrg ] = useState < OrgFormType > ( ) ;
145- const [ manageMemberOrg , setManageMemberOrg ] = useState < OrgType > ( ) ;
146- const [ movingOrg , setMovingOrg ] = useState < OrgType > ( ) ;
127+ const [ manageMemberOrg , setManageMemberOrg ] = useState < OrgListItemType > ( ) ;
128+ const [ movingOrg , setMovingOrg ] = useState < OrgListItemType > ( ) ;
147129
148130 // Delete org
149131 const { ConfirmModal : ConfirmDeleteOrgModal , openConfirm : openDeleteOrgModal } = useConfirm ( {
@@ -157,6 +139,14 @@ function OrgTable({ Tabs }: { Tabs: React.ReactNode }) {
157139 }
158140 } ) ;
159141
142+ const { data : members = [ ] , ScrollData : MemberScrollData } = useScrollPagination ( getOrgMembers , {
143+ pageSize : 20 ,
144+ params : {
145+ orgId : currentOrg ?. _id
146+ } ,
147+ refreshDeps : [ currentOrg ?. _id ]
148+ } ) ;
149+
160150 // Delete member
161151 const { ConfirmModal : ConfirmDeleteMemberFromOrg , openConfirm : openDeleteMemberFromOrgModal } =
162152 useConfirm ( {
@@ -183,11 +173,7 @@ function OrgTable({ Tabs }: { Tabs: React.ReactNode }) {
183173 const searchedOrgs = useMemo ( ( ) => {
184174 if ( ! searchOrg ) return [ ] ;
185175
186- return orgs
187- . filter ( ( org ) => org . name . includes ( searchOrg ) )
188- . map ( ( org ) => ( {
189- ...org
190- } ) ) ;
176+ return orgs . filter ( ( org ) => org . name . includes ( searchOrg ) ) ;
191177 } , [ orgs , searchOrg ] ) ;
192178
193179 return (
@@ -231,7 +217,7 @@ function OrgTable({ Tabs }: { Tabs: React.ReactNode }) {
231217 < Tr key = { org . _id } overflow = { 'unset' } onClick = { ( ) => onClickOrg ( org ) } >
232218 < Td >
233219 < HStack cursor = { 'pointer' } onClick = { ( ) => onClickOrg ( org ) } >
234- < MemberTag name = { org . name } avatar = { org . avatar } />
220+ < MemberTag name = { org . name } avatar = { org . avatar ! } />
235221 < Tag size = "sm" > { org . total } </ Tag >
236222 < MyIcon
237223 name = "core/chat/chevronRight"
@@ -427,7 +413,7 @@ function OrgTable({ Tabs }: { Tabs: React.ReactNode }) {
427413 onClick = { ( ) => {
428414 setEditOrg ( {
429415 ...defaultOrgForm ,
430- parentId : currentOrg ?. _id ?? rootOrg ?. _id
416+ parentId : currentOrg ?. _id
431417 } ) ;
432418 } }
433419 />
0 commit comments