@@ -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