fix(knowledge base): knowledge base lark upload (#3255)

This commit is contained in:
dataeaseShu 2025-06-13 17:12:31 +08:00 committed by GitHub
parent 67ec3c15f8
commit ac6716b29b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 285 additions and 122 deletions

View File

@ -275,6 +275,13 @@ const importLarkDocument: (
return post(`${prefix}/lark/${knowledge_id}/import`, data, null, loading) return post(`${prefix}/lark/${knowledge_id}/import`, data, null, loading)
} }
const postLarkKnowledge: (data: any, loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (
data,
loading,
) => {
return post(`${prefix}/knowledge/lark/save`, data, null, loading)
}
export default { export default {
getKnowledgeByFolder, getKnowledgeByFolder,
getKnowledgeList, getKnowledgeList,
@ -294,4 +301,5 @@ export default {
getLarkDocumentList, getLarkDocumentList,
importLarkDocument, importLarkDocument,
postLarkKnowledge,
} }

View File

@ -333,6 +333,13 @@ const importLarkDocument: (
return post(`${prefix}/lark/${knowledge_id}/import`, data, null, loading) return post(`${prefix}/lark/${knowledge_id}/import`, data, null, loading)
} }
const postLarkKnowledge: (data: any, loading?: Ref<boolean>) => Promise<Result<Array<any>>> = (
data,
loading,
) => {
return post(`${prefix}/knowledge/lark/save`, data, null, loading)
}
export default { export default {
getKnowledgeByFolder, getKnowledgeByFolder,
getKnowledgeList, getKnowledgeList,
@ -349,9 +356,6 @@ export default {
postKnowledge, postKnowledge,
getKnowledgeModel, getKnowledgeModel,
postWebKnowledge, postWebKnowledge,
getLarkDocumentList,
importLarkDocument,
getSharedWorkspaceKnowledge, getSharedWorkspaceKnowledge,
getSharedWorkspaceKnowledgePage, getSharedWorkspaceKnowledgePage,
getSharedAuthorizationKnowledgeGet, getSharedAuthorizationKnowledgeGet,
@ -360,4 +364,8 @@ export default {
getSharedAuthorizationToolPost, getSharedAuthorizationToolPost,
getSharedAuthorizationModelGet, getSharedAuthorizationModelGet,
getSharedAuthorizationModelPost, getSharedAuthorizationModelPost,
getLarkDocumentList,
importLarkDocument,
postLarkKnowledge,
} }

View File

@ -0,0 +1,4 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0.833496 3.33333C0.833496 2.8731 1.20659 2.5 1.66683 2.5H8.6518C8.96744 2.5 9.256 2.67834 9.39716 2.96066L10.0002 4.16667H18.3335C18.7937 4.16667 19.1668 4.53976 19.1668 5V16.6667C19.1668 17.1269 18.7937 17.5 18.3335 17.5H1.66683C1.20659 17.5 0.833496 17.1269 0.833496 16.6667V3.33333Z" fill="#FFA53D"/>
<path d="M0.833496 4.99999C0.833496 4.53975 1.20659 4.16666 1.66683 4.16666H18.3335C18.7937 4.16666 19.1668 4.53975 19.1668 4.99999V16.6667C19.1668 17.1269 18.7937 17.5 18.3335 17.5H1.66683C1.20659 17.5 0.833496 17.1269 0.833496 16.6667V4.99999Z" fill="#FFC60A"/>
</svg>

After

Width:  |  Height:  |  Size: 681 B

View File

@ -1,17 +1,17 @@
<template> <template>
<el-avatar v-if="type === 1" class="avatar-purple" shape="square" :size="32"> <el-avatar v-if="type === 1" class="avatar-purple" shape="square" :size="size">
<img src="@/assets/knowledge/icon_web.svg" style="width: 58%" alt="" /> <img src="@/assets/knowledge/icon_web.svg" style="width: 58%" alt="" />
</el-avatar> </el-avatar>
<el-avatar <el-avatar
v-else-if="type === 2" v-else-if="type === 2"
class="avatar-purple" class="avatar-purple"
shape="square" shape="square"
:size="32" :size="size"
style="background: none" style="background: none"
> >
<img src="@/assets/knowledge/logo_lark.svg" style="width: 100%" alt="" /> <img src="@/assets/knowledge/logo_lark.svg" style="width: 100%" alt="" />
</el-avatar> </el-avatar>
<el-avatar v-else class="avatar-blue" shape="square" :size="32"> <el-avatar v-else class="avatar-blue" shape="square" :size="size">
<img src="@/assets/knowledge/icon_document.svg" style="width: 58%" alt="" /> <img src="@/assets/knowledge/icon_document.svg" style="width: 58%" alt="" />
</el-avatar> </el-avatar>
</template> </template>
@ -22,5 +22,9 @@ const props = defineProps({
type: [String, Number], type: [String, Number],
default: '', default: '',
}, },
size: {
type: [String, Number],
default: 32,
},
}) })
</script> </script>

View File

@ -54,8 +54,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, watch, reactive } from 'vue' import { ref, watch, reactive } from 'vue'
import { useRouter, useRoute } from 'vue-router' import { useRouter, useRoute } from 'vue-router'
import BaseForm from '@/views/knowledge/component/BaseForm.vue' import BaseForm from '@/views/knowledge-shared-system/component/BaseForm.vue'
import KnowledgeApi from '@/api/knowledge/knowledge' import KnowledgeApi from '@/api/shared/knowledge'
import { MsgSuccess, MsgAlert } from '@/utils/message' import { MsgSuccess, MsgAlert } from '@/utils/message'
import { t } from '@/locales' import { t } from '@/locales'
import { ComplexPermission } from '@/utils/permission/type' import { ComplexPermission } from '@/utils/permission/type'
@ -142,7 +142,7 @@ const submitHandle = async () => {
await DatasetFormRef.value.validate((valid: any) => { await DatasetFormRef.value.validate((valid: any) => {
if (valid) { if (valid) {
const obj = { ...BaseFormRef.value.form, ...datasetForm.value } const obj = { ...BaseFormRef.value.form, ...datasetForm.value }
KnowledgeApi.postLarkKnowledge(obj, loading).then((res) => { KnowledgeApi.postLarkKnowledge({...obj, embedding_model_id: obj.embedding }, loading).then((res) => {
MsgSuccess(t('common.createSuccess')) MsgSuccess(t('common.createSuccess'))
router.push({ path: `/knowledge/${res.data.id}/document` }) router.push({ path: `/knowledge/${res.data.id}/document` })
emit('refresh') emit('refresh')

View File

@ -165,6 +165,7 @@ function refreshMigrateParagraph() {}
border: 1px solid #ffffff; border: 1px solid #ffffff;
box-shadow: none !important; box-shadow: none !important;
position: relative; position: relative;
overflow: inherit;
&:hover { &:hover {
background: rgba(31, 35, 41, 0.1); background: rgba(31, 35, 41, 0.1);
border: 1px solid #dee0e3; border: 1px solid #dee0e3;
@ -173,7 +174,9 @@ function refreshMigrateParagraph() {}
position: absolute; position: absolute;
right: 0; right: 0;
top: 0; top: 0;
overflow: inherit;
border: 1px solid #dee0e3; border: 1px solid #dee0e3;
z-index: 10;
} }
} }
</style> </style>

View File

@ -65,38 +65,39 @@
<div v-else> <div v-else>
<el-scrollbar class="paragraph-scollbar"> <el-scrollbar class="paragraph-scollbar">
<div class="paragraph-detail"> <div class="paragraph-detail">
<InfiniteScroll <el-checkbox-group v-model="multipleSelection">
:size="paragraphDetail.length" <InfiniteScroll
:total="paginationConfig.total" :size="paragraphDetail.length"
:page_size="paginationConfig.page_size" :total="paginationConfig.total"
v-model:current_page="paginationConfig.current_page" :page_size="paginationConfig.page_size"
@load="getParagraphList" v-model:current_page="paginationConfig.current_page"
:loading="loading" @load="getParagraphList"
> :loading="loading"
<VueDraggable
ref="el"
v-bind:modelValue="paragraphDetail"
:disabled="isBatch === true"
handle=".handle"
:animation="150"
ghostClass="ghost"
@end="onEnd"
> >
<el-checkbox-group v-model="multipleSelection"> <VueDraggable
ref="el"
v-model="paragraphDetail"
:disabled="isBatch === true"
handle=".handle"
:animation="150"
ghostClass="ghost"
>
<template v-for="(item, index) in paragraphDetail" :key="item.id"> <template v-for="(item, index) in paragraphDetail" :key="item.id">
<!-- 批量操作 --> <div style="display: flex; margin-bottom: 16px">
<div class="paragraph-card flex" :id="item.id" v-if="isBatch === true"> <!-- 批量操作 -->
<el-checkbox :value="item.id" /> <div class="paragraph-card flex" :id="item.id" v-if="isBatch === true">
<ParagraphCard :data="item" class="mb-8 w-full" /> <el-checkbox :value="item.id" />
</div> <ParagraphCard :data="item" class="mb-8 w-full" />
<!-- 非批量操作 --> </div>
<div class="handle paragraph-card flex" :id="item.id" v-else> <!-- 非批量操作 -->
<img <div class="handle paragraph-card flex" :id="item.id" v-else>
src="@/assets/sort.svg" <img
alt="" src="@/assets/sort.svg"
height="15" alt=""
class="handle-img mr-8 mt-24 cursor" height="15"
/> class="handle-img mr-8 mt-24 cursor"
/>
</div>
<ParagraphCard <ParagraphCard
:data="item" :data="item"
class="mb-8 w-full" class="mb-8 w-full"
@ -105,9 +106,9 @@
/> />
</div> </div>
</template> </template>
</el-checkbox-group> </VueDraggable>
</VueDraggable> </InfiniteScroll>
</InfiniteScroll> </el-checkbox-group>
</div> </div>
</el-scrollbar> </el-scrollbar>
</div> </div>
@ -341,6 +342,10 @@ onMounted(() => {
height: calc(100vh - 215px); height: calc(100vh - 215px);
max-width: 1000px; max-width: 1000px;
margin: 16px auto; margin: 16px auto;
// .el-checkbox-group {
// display: flex;
// }
} }
&__main { &__main {

View File

@ -3,12 +3,12 @@
v-model="filterText" v-model="filterText"
:placeholder="$t('common.search')" :placeholder="$t('common.search')"
prefix-icon="Search" prefix-icon="Search"
class="mb-16 mt-4" class="mb-16 mt-4 1"
clearable clearable
/> />
<div class="pt-0"> <div class="pt-0">
<el-table :data="filterData" :max-height="tableHeight"> <el-table row-key="id" :data="filterData" :max-height="tableHeight">
<el-table-column prop="name" :label="$t('common.name')"> <el-table-column class-name="folder-flex" prop="name" :label="$t('common.name')">
<template #default="{ row }"> <template #default="{ row }">
<div class="flex align-center"> <div class="flex align-center">
<el-avatar <el-avatar
@ -16,7 +16,7 @@
style="background: none" style="background: none"
class="mr-12" class="mr-12"
shape="square" shape="square"
:size="24" :size="20"
> >
<img :src="row?.icon" alt="" /> <img :src="row?.icon" alt="" />
</el-avatar> </el-avatar>
@ -26,10 +26,23 @@
:name="row?.name" :name="row?.name"
pinyinColor pinyinColor
shape="square" shape="square"
:size="24" :size="20"
class="mr-12" class="mr-12"
/> />
<KnowledgeIcon v-if="isKnowledge" :type="row.icon" /> <el-avatar
v-if="row.isFolder"
class="mr-12"
shape="square"
:size="20"
style="background: none"
>
<img
src="@/assets/knowledge/icon_file-folder_colorful.svg"
style="width: 100%"
alt=""
/>
</el-avatar>
<KnowledgeIcon class="mr-12" :size="20" v-else-if="isKnowledge" :type="row.icon" />
<auto-tooltip :content="row?.name"> <auto-tooltip :content="row?.name">
{{ row?.name }} {{ row?.name }}
@ -43,16 +56,24 @@
width="100" width="100"
fixed="right" fixed="right"
> >
<template #header> <!-- <template #header>
<el-checkbox <el-checkbox
:disabled="props.manage" :disabled="props.manage"
v-model="allChecked[AuthorizationEnum.MANAGE]" v-model="allChecked[AuthorizationEnum.MANAGE]"
:indeterminate="allIndeterminate[AuthorizationEnum.MANAGE]" :indeterminate="allIndeterminate[AuthorizationEnum.MANAGE]"
:label="$t('views.resourceAuthorization.setting.management')" :label="$t('views.resourceAuthorization.setting.management')"
/> />
</template> </template> -->
<template #default="{ row }"> <template #default="{ row }">
<el-checkbox <el-checkbox
v-if="row.isFolder"
:disabled="props.manage"
v-model="row.permission[AuthorizationEnum.MANAGE]"
:indeterminate="row.permissionHalf[AuthorizationEnum.MANAGE]"
@change="(e: boolean) => checkedOperateChange(AuthorizationEnum.MANAGE, row, e)"
/>
<el-checkbox
v-else
:disabled="props.manage" :disabled="props.manage"
v-model="row.permission[AuthorizationEnum.MANAGE]" v-model="row.permission[AuthorizationEnum.MANAGE]"
@change="(e: boolean) => checkedOperateChange(AuthorizationEnum.MANAGE, row, e)" @change="(e: boolean) => checkedOperateChange(AuthorizationEnum.MANAGE, row, e)"
@ -65,16 +86,24 @@
width="100" width="100"
fixed="right" fixed="right"
> >
<template #header> <!-- <template #header>
<el-checkbox <el-checkbox
:disabled="props.manage" :disabled="props.manage"
v-model="allChecked[AuthorizationEnum.VIEW]" v-model="allChecked[AuthorizationEnum.VIEW]"
:indeterminate="allIndeterminate[AuthorizationEnum.VIEW]" :indeterminate="allIndeterminate[AuthorizationEnum.VIEW]"
:label="$t('views.resourceAuthorization.setting.check')" :label="$t('views.resourceAuthorization.setting.check')"
/> />
</template> </template> -->
<template #default="{ row }"> <template #default="{ row }">
<el-checkbox <el-checkbox
v-if="row.isFolder"
:disabled="props.manage"
v-model="row.permission[AuthorizationEnum.VIEW]"
:indeterminate="row.permissionHalf[AuthorizationEnum.VIEW]"
@change="(e: boolean) => checkedOperateChange(AuthorizationEnum.VIEW, row, e)"
/>
<el-checkbox
v-else
:disabled="props.manage" :disabled="props.manage"
v-model="row.permission[AuthorizationEnum.VIEW]" v-model="row.permission[AuthorizationEnum.VIEW]"
@change="(e: boolean) => checkedOperateChange(AuthorizationEnum.VIEW, row, e)" @change="(e: boolean) => checkedOperateChange(AuthorizationEnum.VIEW, row, e)"
@ -103,74 +132,9 @@ const props = defineProps({
const isKnowledge = computed(() => props.type === AuthorizationEnum.KNOWLEDGE) const isKnowledge = computed(() => props.type === AuthorizationEnum.KNOWLEDGE)
const isApplication = computed(() => props.type === AuthorizationEnum.APPLICATION) const isApplication = computed(() => props.type === AuthorizationEnum.APPLICATION)
const emit = defineEmits(['update:data']) const dfsPermission = (arr: any = [], Name: string | number, e: boolean, idArr: any[]) => {
const allChecked: any = ref({ arr.map((item: any) => {
[AuthorizationEnum.MANAGE]: computed({ if (idArr.includes(item.id)) {
get: () => {
return filterData.value.some((item: any) => item.permission[AuthorizationEnum.MANAGE])
},
set: (val: boolean) => {
if (val) {
filterData.value.map((item: any) => {
item.permission[AuthorizationEnum.MANAGE] = true
item.permission[AuthorizationEnum.VIEW] = true
})
} else {
filterData.value.map((item: any) => {
item.permission[AuthorizationEnum.MANAGE] = false
})
}
},
}),
[AuthorizationEnum.VIEW]: computed({
get: () => {
return filterData.value.some((item: any) => item.permission[AuthorizationEnum.VIEW])
},
set: (val: boolean) => {
if (val) {
filterData.value.map((item: any) => {
item.permission[AuthorizationEnum.VIEW] = true
})
} else {
filterData.value.map((item: any) => {
item.permission[AuthorizationEnum.VIEW] = false
item.permission[AuthorizationEnum.MANAGE] = false
})
}
},
}),
})
const filterText = ref('')
const filterData = computed(() =>
props.data.filter((v: any) => v.name.toLowerCase().includes(filterText.value.toLowerCase())),
)
const allIndeterminate: any = ref({
[AuthorizationEnum.MANAGE]: computed(() => {
const all_not_checked = filterData.value.every(
(item: any) => !item.permission[AuthorizationEnum.MANAGE],
)
if (all_not_checked) {
return false
}
return !filterData.value.every((item: any) => item.permission[AuthorizationEnum.MANAGE])
}),
[AuthorizationEnum.VIEW]: computed(() => {
const all_not_checked = filterData.value.every(
(item: any) => !item.permission[AuthorizationEnum.VIEW],
)
if (all_not_checked) {
return false
}
return !filterData.value.every((item: any) => item.permission[AuthorizationEnum.VIEW])
}),
})
function checkedOperateChange(Name: string | number, row: any, e: boolean) {
props.data.map((item: any) => {
if (item.id === row.id) {
item.permission[Name] = e item.permission[Name] = e
if (Name === AuthorizationEnum.MANAGE && e) { if (Name === AuthorizationEnum.MANAGE && e) {
item.permission[AuthorizationEnum.VIEW] = true item.permission[AuthorizationEnum.VIEW] = true
@ -178,7 +142,36 @@ function checkedOperateChange(Name: string | number, row: any, e: boolean) {
item.permission[AuthorizationEnum.MANAGE] = false item.permission[AuthorizationEnum.MANAGE] = false
} }
} }
if (item.children?.length) {
dfsPermission(
item.children,
Name,
e,
idArr.includes(item.id) ? item.children.map((ele: any) => ele.id) : idArr,
)
}
}) })
} }
const emit = defineEmits(['update:data', 'refreshData'])
const filterText = ref('')
const filterData = computed(() =>
props.data.filter((v: any) => v.name.toLowerCase().includes(filterText.value.toLowerCase())),
)
function checkedOperateChange(Name: string | number, row: any, e: boolean) {
dfsPermission(props.data, Name, e, [row.id])
emit('refreshData')
}
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped>
:deep(.folder-flex) {
.cell {
display: flex;
align-items: center;
}
}
</style>

View File

@ -52,6 +52,7 @@
:type="item.value" :type="item.value"
:tableHeight="tableHeight" :tableHeight="tableHeight"
:manage="isManage(currentType)" :manage="isManage(currentType)"
@refreshData="refreshData"
></PermissionSetting> ></PermissionSetting>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
@ -73,6 +74,8 @@ import PermissionSetting from './component/PermissionSetting.vue'
import { MsgSuccess, MsgConfirm } from '@/utils/message' import { MsgSuccess, MsgConfirm } from '@/utils/message'
import { AuthorizationEnum } from '@/enums/system' import { AuthorizationEnum } from '@/enums/system'
import { t } from '@/locales' import { t } from '@/locales'
import useStore from '@/stores'
import { cloneDeep } from 'lodash'
const loading = ref(false) const loading = ref(false)
const rLoading = ref(false) const rLoading = ref(false)
@ -84,6 +87,7 @@ const filterText = ref('')
const activeName = ref(AuthorizationEnum.KNOWLEDGE) const activeName = ref(AuthorizationEnum.KNOWLEDGE)
const tableHeight = ref(0) const tableHeight = ref(0)
const { folder } = useStore()
const settingTags = reactive([ const settingTags = reactive([
{ {
@ -146,15 +150,149 @@ function getMember(id?: string) {
const user = (id && memberList.value.find((p: any) => p.user_id === id)) || null const user = (id && memberList.value.find((p: any) => p.user_id === id)) || null
currentUser.value = user ? user.id : memberList.value[0].id currentUser.value = user ? user.id : memberList.value[0].id
currentType.value = user ? user.type : memberList.value[0].type currentType.value = user ? user.type : memberList.value[0].type
ResourcePermissions(currentUser.value) getWholeTree(currentUser.value)
}) })
} }
const dfsPermissionIndeterminateTrue = (arr: any = [], type: string) => {
return arr.every((item: any) => {
if (item.children?.length) {
item.permission[type] = dfsPermissionIndeterminateTrue(item.children, type)
}
return item.permission[type]
})
}
const dfsPermissionIndeterminate = (
arr: any = [],
type: string,
permissionHalf: any,
permissionHalfMap: any,
id: string,
) => {
arr.forEach((item: any) => {
if (item.isFolder) {
if (!permissionHalfMap[item.id]) {
permissionHalfMap[item.id] = cloneDeep(permissionHalf)
}
}
if (item.children?.length) {
dfsPermissionIndeterminate(item.children, type, permissionHalf, permissionHalfMap, item.id)
}
if (!item.isFolder) {
permissionHalfMap[id][type] = [...permissionHalfMap[id][type], item.permission[type]]
}
if (item.isFolder) {
item.permissionHalf[type] = permissionHalfMap[item.id][type].length
? new Set(permissionHalfMap[item.id][type]).size > 1
: false
if (item.children.some((ele: any) => ele.isFolder && ele.permissionHalf[type])) {
item.permissionHalf[type] = true
}
if (
item.children.some((ele: any) => ele.permission[type]) &&
item.children.some((ele: any) => !ele.permission[type])
) {
item.permissionHalf[type] = true
}
}
})
}
const dfsFolder = (arr: any[] = [], folderIdMap: any) => {
arr.forEach((ele) => {
if (ele.permission) return
if (ele.children?.length) {
if (folderIdMap[ele.id]) {
ele.children = [...ele.children, ...folderIdMap[ele.id]]
}
dfsFolder(ele.children, folderIdMap)
} else {
ele.children = folderIdMap[ele.id] || []
}
ele.isFolder = true
ele.permission = {
VIEW: false,
MANAGE: false,
ROLE: false,
}
ele.permissionHalf = {
VIEW: false,
MANAGE: false,
ROLE: false,
}
})
}
function getFolder() {
return folder.asyncGetFolder('KNOWLEDGE', {}, loading)
}
function getResourcePermissions(user_id: string) {
return AuthorizationApi.getResourceAuthorization(user_id, rLoading)
}
const getWholeTree = async (user_id: string) => {
const [parentRes, childrenRes] = await Promise.all([getFolder(), getResourcePermissions(user_id)])
if (!childrenRes.data || Object.keys(childrenRes.data).length > 0) {
settingTags.map((item: any) => {
let folderIdMap = []
const folderTree = cloneDeep((parentRes as unknown as any).data)
if (Object.keys(childrenRes.data).indexOf(item.value) !== -1) {
folderIdMap = getFolderIdMap(childrenRes.data[item.value])
dfsFolder(folderTree, folderIdMap)
const permissionHalf = {
VIEW: [],
MANAGE: [],
ROLE: [],
}
Object.keys(permissionHalf).forEach((ele) => {
dfsPermissionIndeterminateTrue(folderTree, ele)
dfsPermissionIndeterminate(folderTree, ele, cloneDeep(permissionHalf), {}, 'default')
})
item.data = folderTree
}
})
}
}
const refreshData = () => {
settingTags.map((item: any) => {
if (activeName.value === item.value) {
const permissionHalf = {
VIEW: [],
MANAGE: [],
ROLE: [],
}
Object.keys(permissionHalf).forEach((ele) => {
dfsPermissionIndeterminateTrue(item.data, ele)
dfsPermissionIndeterminate(item.data, ele, cloneDeep(permissionHalf), {}, 'default')
})
}
})
}
const getFolderIdMap = (arr: any = []) => {
return arr.reduce((pre: any, next: any) => {
if (pre[next.folder_id]) {
pre[next.folder_id].push(next)
} else {
pre[next.folder_id] = [next]
}
return pre
}, {})
}
function ResourcePermissions(user_id: string) { function ResourcePermissions(user_id: string) {
AuthorizationApi.getResourceAuthorization(user_id, rLoading).then((res) => { AuthorizationApi.getResourceAuthorization(user_id, rLoading).then((res) => {
if (!res.data || Object.keys(res.data).length > 0) { if (!res.data || Object.keys(res.data).length > 0) {
settingTags.map((item: any) => { settingTags.map((item: any) => {
if (Object.keys(res.data).indexOf(item.value) !== -1) { if (Object.keys(res.data).indexOf(item.value) !== -1) {
item.data = res.data[item.value] item.data = res.data[item.value]
getFolderIdMap(item.data)
} }
}) })
} }