Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
赵月辉
/
fastgpt-migrated
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Unverified
Commit
9d29b471
authored
Jun 24, 2024
by
Finley Ge
Committed by
GitHub
Jun 24, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: dataset fe adjusting (#1833)
parent
4a33e04a
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
285 additions
and
38 deletions
+285
-38
projects/app/src/pages/api/core/dataset/list.ts
+15
-2
projects/app/src/pages/dataset/list/component/List.tsx
+0
-0
projects/app/src/pages/dataset/list/context.tsx
+57
-12
projects/app/src/pages/dataset/list/index.tsx
+211
-22
projects/app/src/web/core/dataset/api.ts
+2
-2
No files found.
projects/app/src/pages/api/core/dataset/list.ts
View file @
9d29b471
...
@@ -11,11 +11,12 @@ import {
...
@@ -11,11 +11,12 @@ import {
ReadPermissionVal
ReadPermissionVal
}
from
'@fastgpt/global/support/permission/constant'
;
}
from
'@fastgpt/global/support/permission/constant'
;
import
{
MongoResourcePermission
}
from
'@fastgpt/service/support/permission/schema'
;
import
{
MongoResourcePermission
}
from
'@fastgpt/service/support/permission/schema'
;
import
{
parseParentIdInMongo
}
from
'@fastgpt/global/common/parentFolder/utils'
;
import
{
DatasetDefaultPermission
}
from
'@fastgpt/global/support/permission/dataset/constant'
;
import
{
DatasetDefaultPermission
}
from
'@fastgpt/global/support/permission/dataset/constant'
;
import
{
ParentIdType
}
from
'@fastgpt/global/common/parentFolder/type'
;
import
{
parseParentIdInMongo
}
from
'@fastgpt/global/common/parentFolder/utils'
;
async
function
handler
(
req
:
NextApiRequest
)
{
async
function
handler
(
req
:
NextApiRequest
)
{
const
{
parentId
,
type
}
=
req
.
query
as
{
parentId
?:
string
;
type
?:
DatasetTypeEnum
};
const
{
parentId
,
type
}
=
req
.
body
as
{
parentId
:
ParentIdType
;
type
?:
DatasetTypeEnum
};
// 凭证校验
// 凭证校验
const
{
const
{
teamId
,
teamId
,
...
@@ -27,6 +28,18 @@ async function handler(req: NextApiRequest) {
...
@@ -27,6 +28,18 @@ async function handler(req: NextApiRequest) {
authApiKey
:
true
,
authApiKey
:
true
,
per
:
ReadPermissionVal
per
:
ReadPermissionVal
});
});
console
.
log
(
'parentId'
,
parentId
,
'type'
,
type
,
'teamId'
,
teamId
,
'tmbId'
,
tmbId
,
'tmbPer'
,
tmbPer
);
const
[
myDatasets
,
rpList
]
=
await
Promise
.
all
([
const
[
myDatasets
,
rpList
]
=
await
Promise
.
all
([
MongoDataset
.
find
({
MongoDataset
.
find
({
...
...
projects/app/src/pages/dataset/list/component/List.tsx
View file @
9d29b471
This diff is collapsed.
Click to expand it.
projects/app/src/pages/dataset/list/context.tsx
View file @
9d29b471
import
{
getDatasetPaths
,
putDatasetById
}
from
'@/web/core/dataset/api'
;
import
{
getDatasetPaths
,
putDatasetById
,
getDatasets
,
getDatasetById
,
delDatasetById
}
from
'@/web/core/dataset/api'
;
import
{
useDatasetStore
}
from
'@/web/core/dataset/store/dataset'
;
import
{
useDatasetStore
}
from
'@/web/core/dataset/store/dataset'
;
import
{
import
{
GetResourceFolderListProps
,
GetResourceFolderListProps
,
...
@@ -9,18 +15,28 @@ import { useRouter } from 'next/router';
...
@@ -9,18 +15,28 @@ import { useRouter } from 'next/router';
import
React
,
{
useCallback
,
useState
}
from
'react'
;
import
React
,
{
useCallback
,
useState
}
from
'react'
;
import
{
createContext
}
from
'use-context-selector'
;
import
{
createContext
}
from
'use-context-selector'
;
import
{
useI18n
}
from
'@/web/context/I18n'
;
import
{
useI18n
}
from
'@/web/context/I18n'
;
import
{
useRequest2
}
from
'@fastgpt/web/hooks/useRequest'
;
import
{
useRequest
,
useRequest
2
}
from
'@fastgpt/web/hooks/useRequest'
;
import
{
DatasetUpdateBody
}
from
'@fastgpt/global/core/dataset/api'
;
import
{
DatasetUpdateBody
}
from
'@fastgpt/global/core/dataset/api'
;
import
dynamic
from
'next/dynamic'
;
import
dynamic
from
'next/dynamic'
;
import
{
DatasetTypeEnum
}
from
'@fastgpt/global/core/dataset/constants'
;
import
{
DatasetItemType
}
from
'@fastgpt/global/core/dataset/type'
;
import
{
EditResourceInfoFormType
}
from
'@/components/common/Modal/EditResourceModal'
;
import
{
useSystemStore
}
from
'@/web/common/system/useSystemStore'
;
import
{
useTranslation
}
from
'react-i18next'
;
const
MoveModal
=
dynamic
(()
=>
import
(
'@/components/common/folder/MoveModal'
));
const
MoveModal
=
dynamic
(()
=>
import
(
'@/components/common/folder/MoveModal'
));
export
type
DatasetContextType
=
{
export
type
DatasetContextType
=
{
refetchDatasets
:
()
=>
void
;
refetchDatasets
:
()
=>
void
;
refetchPaths
:
()
=>
void
;
refetchPaths
:
()
=>
void
;
refetchFolderDetail
:
()
=>
void
;
isFetchingDatasets
:
boolean
;
isFetchingDatasets
:
boolean
;
setMoveDatasetId
:
(
id
:
string
)
=>
void
;
setMoveDatasetId
:
(
id
:
string
)
=>
void
;
paths
:
ParentTreePathItemType
[];
paths
:
ParentTreePathItemType
[];
folderDetail
?:
DatasetItemType
;
editedDataset
?:
EditResourceInfoFormType
;
setEditedDataset
:
(
data
?:
EditResourceInfoFormType
)
=>
void
;
onDelDataset
:
(
id
:
string
)
=>
Promise
<
void
>
;
};
};
export
const
DatasetContext
=
createContext
<
DatasetContextType
>
({
export
const
DatasetContext
=
createContext
<
DatasetContextType
>
({
...
@@ -28,22 +44,39 @@ export const DatasetContext = createContext<DatasetContextType>({
...
@@ -28,22 +44,39 @@ export const DatasetContext = createContext<DatasetContextType>({
isFetchingDatasets
:
false
,
isFetchingDatasets
:
false
,
setMoveDatasetId
:
()
=>
{},
setMoveDatasetId
:
()
=>
{},
refetchPaths
:
()
=>
{},
refetchPaths
:
()
=>
{},
paths
:
[]
paths
:
[],
refetchFolderDetail
:
()
=>
{},
folderDetail
:
{}
as
any
,
editedDataset
:
{}
as
any
,
setEditedDataset
:
()
=>
{},
onDelDataset
:
()
=>
Promise
.
resolve
()
});
});
function
DatasetContextProvider
({
children
}:
{
children
:
React
.
ReactNode
})
{
function
DatasetContextProvider
({
children
}:
{
children
:
React
.
ReactNode
})
{
const
router
=
useRouter
();
const
router
=
useRouter
();
const
{
commonT
}
=
useI18n
();
const
{
commonT
}
=
useI18n
();
const
{
t
}
=
useTranslation
();
const
{
parentId
=
null
}
=
router
.
query
as
{
parentId
?:
string
|
null
};
const
{
parentId
=
null
}
=
router
.
query
as
{
parentId
?:
string
|
null
};
const
{
loadMyDatasets
}
=
useDatasetStore
();
const
{
myDatasets
,
loadMyDatasets
}
=
useDatasetStore
();
const
getDatasetFolderList
=
useCallback
(
async
({
parentId
}:
GetResourceFolderListProps
)
=>
{
const
{
data
:
folderDetail
,
runAsync
:
refetchFolderDetail
}
=
useRequest2
(
const
res
=
await
getDatasetPaths
(
parentId
);
()
=>
(
parentId
?
getDatasetById
(
parentId
)
:
Promise
.
resolve
(
undefined
)),
return
res
.
map
((
item
)
=>
({
{
id
:
item
.
parentId
,
manual
:
false
,
name
:
item
.
parentName
refreshDeps
:
[
parentId
,
myDatasets
]
}));
}
);
const
getDatasetFolderList
=
useCallback
(({
parentId
}:
GetResourceFolderListProps
)
=>
{
return
getDatasets
({
parentId
,
type
:
DatasetTypeEnum
.
folder
}).
then
((
res
)
=>
{
return
res
.
map
((
item
)
=>
({
id
:
item
.
_id
,
name
:
item
.
name
}));
});
},
[]);
},
[]);
const
{
data
:
paths
=
[],
runAsync
:
refetchPaths
}
=
useRequest2
(
const
{
data
:
paths
=
[],
runAsync
:
refetchPaths
}
=
useRequest2
(
...
@@ -82,12 +115,24 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) {
...
@@ -82,12 +115,24 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) {
[
moveDatasetId
,
onUpdateDataset
]
[
moveDatasetId
,
onUpdateDataset
]
);
);
const
[
editedDataset
,
setEditedDataset
]
=
useState
<
EditResourceInfoFormType
>
();
const
{
runAsync
:
onDelDataset
}
=
useRequest2
(
delDatasetById
,
{
successToast
:
t
(
'common.Delete Success'
),
errorToast
:
t
(
'dataset.Delete Dataset Error'
)
});
const
contextValue
=
{
const
contextValue
=
{
refetchDatasets
,
refetchDatasets
,
isFetchingDatasets
,
isFetchingDatasets
,
setMoveDatasetId
,
setMoveDatasetId
,
paths
,
paths
,
refetchPaths
refetchPaths
,
refetchFolderDetail
,
folderDetail
,
editedDataset
,
setEditedDataset
,
onDelDataset
};
};
return
(
return
(
...
...
projects/app/src/pages/dataset/list/index.tsx
View file @
9d29b471
import
React
from
'react'
;
import
React
,
{
useState
}
from
'react'
;
import
{
Box
,
Flex
,
Image
}
from
'@chakra-ui/react'
;
import
{
Box
,
Flex
,
Image
,
Button
,
useDisclosure
}
from
'@chakra-ui/react'
;
import
{
useRouter
}
from
'next/router'
;
import
{
useRouter
}
from
'next/router'
;
import
PageContainer
from
'@/components/PageContainer'
;
import
PageContainer
from
'@/components/PageContainer'
;
import
{
useTranslation
}
from
'next-i18next'
;
import
{
useTranslation
}
from
'next-i18next'
;
...
@@ -10,41 +10,230 @@ import List from './component/List';
...
@@ -10,41 +10,230 @@ import List from './component/List';
import
{
DatasetContext
}
from
'./context'
;
import
{
DatasetContext
}
from
'./context'
;
import
DatasetContextProvider
from
'./context'
;
import
DatasetContextProvider
from
'./context'
;
import
{
useContextSelector
}
from
'use-context-selector'
;
import
{
useContextSelector
}
from
'use-context-selector'
;
import
MyMenu
from
'@fastgpt/web/components/common/MyMenu'
;
import
{
AddIcon
}
from
'@chakra-ui/icons'
;
import
{
useUserStore
}
from
'@/web/support/user/useUserStore'
;
import
MyIcon
from
'@fastgpt/web/components/common/Icon'
;
import
{
FolderIcon
,
FolderImgUrl
}
from
'@fastgpt/global/common/file/image/constants'
;
import
{
EditFolderFormType
}
from
'@fastgpt/web/components/common/MyModal/EditFolderModal'
;
import
dynamic
from
'next/dynamic'
;
import
{
postCreateDataset
,
putDatasetById
}
from
'@/web/core/dataset/api'
;
import
{
DatasetTypeEnum
}
from
'@fastgpt/global/core/dataset/constants'
;
import
FolderSlideCard
from
'@/components/common/folder/SlideCard'
;
import
{
useSystemStore
}
from
'@/web/common/system/useSystemStore'
;
import
{
DatasetDefaultPermission
,
DatasetPermissionList
}
from
'@fastgpt/global/support/permission/dataset/constant'
;
import
{
postUpdateDatasetCollaborators
,
deleteDatasetCollaborators
,
getCollaboratorList
}
from
'@/web/core/dataset/api/collaborator'
;
const
EditFolderModal
=
dynamic
(
()
=>
import
(
'@fastgpt/web/components/common/MyModal/EditFolderModal'
)
);
const
CreateModal
=
dynamic
(()
=>
import
(
'./component/CreateModal'
));
const
Dataset
=
()
=>
{
const
Dataset
=
()
=>
{
const
{
isPc
}
=
useSystemStore
();
const
{
t
}
=
useTranslation
();
const
{
t
}
=
useTranslation
();
const
router
=
useRouter
();
const
router
=
useRouter
();
const
{
parentId
}
=
router
.
query
as
{
parentId
:
string
};
const
{
myDatasets
}
=
useDatasetStore
();
const
{
myDatasets
}
=
useDatasetStore
();
const
{
paths
,
isFetchingDatasets
}
=
useContextSelector
(
DatasetContext
,
(
v
)
=>
v
);
const
{
paths
,
isFetchingDatasets
,
refetchPaths
,
refetchDatasets
,
folderDetail
,
setEditedDataset
,
setMoveDatasetId
,
onDelDataset
}
=
useContextSelector
(
DatasetContext
,
(
v
)
=>
v
);
const
{
userInfo
}
=
useUserStore
();
const
[
editFolderData
,
setEditFolderData
]
=
useState
<
EditFolderFormType
>
();
const
{
isOpen
:
isOpenCreateModal
,
onOpen
:
onOpenCreateModal
,
onClose
:
onCloseCreateModal
}
=
useDisclosure
();
return
(
return
(
<
PageContainer
<
PageContainer
isLoading=
{
myDatasets
.
length
===
0
&&
isFetchingDatasets
}
isLoading=
{
myDatasets
.
length
===
0
&&
isFetchingDatasets
}
insertProps=
{
{
px
:
[
5
,
'48px'
]
}
}
insertProps=
{
{
px
:
[
5
,
'48px'
]
}
}
>
>
<
Flex
pt=
{
[
4
,
'30px'
]
}
alignItems=
{
'center'
}
justifyContent=
{
'space-between'
}
>
<
Flex
pt=
{
[
8
,
10
]
}
pr=
{
folderDetail
?
[
4
,
6
]
:
[
4
,
10
]
}
>
{
/* url path */
}
<
Flex
flexGrow=
{
1
}
flexDirection=
"column"
>
<
ParentPaths
<
Flex
alignItems=
{
'center'
}
justifyContent=
{
'space-between'
}
>
paths=
{
paths
}
<
ParentPaths
FirstPathDom=
{
paths=
{
paths
}
<
Flex
flex=
{
1
}
alignItems=
{
'center'
}
>
FirstPathDom=
{
<
Image
src=
{
'/imgs/workflow/db.png'
}
alt=
{
''
}
mr=
{
2
}
h=
{
'24px'
}
/>
<
Flex
flex=
{
1
}
alignItems=
{
'center'
}
>
<
Box
className=
"textlg"
letterSpacing=
{
1
}
fontSize=
{
'24px'
}
fontWeight=
{
'bold'
}
>
<
Image
src=
{
'/imgs/workflow/db.png'
}
alt=
{
''
}
mr=
{
2
}
h=
{
'24px'
}
/>
{
t
(
'core.dataset.My Dataset'
)
}
<
Box
className=
"textlg"
letterSpacing=
{
1
}
fontSize=
{
'24px'
}
fontWeight=
{
'bold'
}
>
</
Box
>
{
t
(
'core.dataset.My Dataset'
)
}
</
Flex
>
</
Box
>
}
</
Flex
>
onClick=
{
(
e
)
=>
{
router
.
push
({
query
:
{
parentId
:
e
}
}
});
onClick=
{
(
e
)
=>
{
router
.
push
({
query
:
{
parentId
:
e
}
});
}
}
/>
{
userInfo
?.
team
?.
permission
.
hasWritePer
&&
(
<
MyMenu
offset=
{
[
-
30
,
5
]
}
width=
{
120
}
Button=
{
<
Button
variant=
{
'primary'
}
px=
"0"
>
<
Flex
alignItems=
{
'center'
}
px=
{
'20px'
}
>
<
AddIcon
mr=
{
2
}
/>
<
Box
>
{
t
(
'common.Create New'
)
}
</
Box
>
</
Flex
>
</
Button
>
}
menuList=
{
[
{
children
:
[
{
label
:
(
<
Flex
>
<
MyIcon
name=
{
FolderIcon
}
w=
{
'20px'
}
mr=
{
1
}
/>
{
t
(
'Folder'
)
}
</
Flex
>
),
onClick
:
()
=>
setEditFolderData
({})
},
{
label
:
(
<
Flex
>
<
Image
src=
{
'/imgs/workflow/db.png'
}
alt=
{
''
}
w=
{
'20px'
}
mr=
{
1
}
/>
{
t
(
'core.dataset.Dataset'
)
}
</
Flex
>
),
onClick
:
onOpenCreateModal
}
]
}
]
}
/>
)
}
</
Flex
>
<
Box
flexGrow=
{
1
}
>
<
List
/>
</
Box
>
</
Flex
>
{
!!
folderDetail
&&
isPc
&&
(
<
Box
ml=
"6"
>
<
FolderSlideCard
refreshDeps=
{
[
folderDetail
.
_id
]
}
name=
{
folderDetail
.
name
}
intro=
{
folderDetail
.
intro
}
onEdit=
{
()
=>
{
setEditedDataset
({
id
:
folderDetail
.
_id
,
name
:
folderDetail
.
name
,
intro
:
folderDetail
.
intro
});
}
}
onMove=
{
()
=>
setMoveDatasetId
(
folderDetail
.
_id
)
}
deleteTip=
{
t
(
'dataset.deleteFolderTips'
)
}
onDelete=
{
()
=>
onDelDataset
(
folderDetail
.
_id
).
then
(()
=>
{
router
.
replace
({
query
:
{
...
router
.
query
,
parentId
:
folderDetail
.
parentId
}
});
})
}
defaultPer=
{
{
value
:
folderDetail
.
defaultPermission
,
defaultValue
:
DatasetDefaultPermission
,
onChange
:
(
e
)
=>
{
return
putDatasetById
({
id
:
folderDetail
.
_id
,
defaultPermission
:
e
});
}
}
}
managePer=
{
{
permission
:
folderDetail
.
permission
,
onGetCollaboratorList
:
()
=>
getCollaboratorList
(
folderDetail
.
_id
),
permissionList
:
DatasetPermissionList
,
onUpdateCollaborators
:
({
tmbIds
,
permission
}:
{
tmbIds
:
string
[];
permission
:
number
;
})
=>
{
return
postUpdateDatasetCollaborators
({
tmbIds
,
permission
,
datasetId
:
folderDetail
.
_id
});
},
onDelOneCollaborator
:
(
tmbId
:
string
)
=>
deleteDatasetCollaborators
({
datasetId
:
folderDetail
.
_id
,
tmbId
})
}
}
/>
</
Box
>
)
}
</
Flex
>
{
!!
editFolderData
&&
(
<
EditFolderModal
onClose=
{
()
=>
setEditFolderData
(
undefined
)
}
onCreate=
{
async
({
name
})
=>
{
try
{
await
postCreateDataset
({
parentId
:
parentId
||
undefined
,
name
,
type
:
DatasetTypeEnum
.
folder
,
avatar
:
FolderImgUrl
,
intro
:
''
});
refetchDatasets
();
refetchPaths
();
}
catch
(
error
)
{
return
Promise
.
reject
(
error
);
}
}
}
onEdit=
{
async
({
name
,
intro
,
id
})
=>
{
try
{
await
putDatasetById
({
id
,
name
,
intro
});
refetchDatasets
();
refetchPaths
();
}
catch
(
error
)
{
return
Promise
.
reject
(
error
);
}
}
}
}
}
/>
/>
</
Flex
>
)
}
<
List
/>
{
isOpenCreateModal
&&
(
<
CreateModal
onClose=
{
onCloseCreateModal
}
parentId=
{
parentId
||
undefined
}
/>
)
}
</
PageContainer
>
</
PageContainer
>
);
);
};
};
...
...
projects/app/src/web/core/dataset/api.ts
View file @
9d29b471
...
@@ -51,8 +51,8 @@ import type {
...
@@ -51,8 +51,8 @@ import type {
import
type
{
readCollectionSourceResponse
}
from
'@/pages/api/core/dataset/collection/read'
;
import
type
{
readCollectionSourceResponse
}
from
'@/pages/api/core/dataset/collection/read'
;
/* ======================== dataset ======================= */
/* ======================== dataset ======================= */
export
const
getDatasets
=
(
data
:
{
parentId
?:
string
;
type
?:
DatasetTypeEnum
})
=>
export
const
getDatasets
=
(
data
:
{
parentId
?:
ParentIdType
;
type
?:
DatasetTypeEnum
})
=>
GE
T
<
DatasetListItemType
[]
>
(
`/core/dataset/list`
,
data
);
POS
T
<
DatasetListItemType
[]
>
(
`/core/dataset/list`
,
data
);
/**
/**
* get type=dataset list
* get type=dataset list
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment