fix(knowledge base): knowledge base lark upload (#3255)
This commit is contained in:
parent
67ec3c15f8
commit
ac6716b29b
@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
4
ui/src/assets/knowledge/icon_file-folder_colorful.svg
Normal file
4
ui/src/assets/knowledge/icon_file-folder_colorful.svg
Normal 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 |
@ -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>
|
||||||
|
|||||||
@ -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')
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user