Merge remote-tracking branch 'origin/v2' into v2

This commit is contained in:
liqiang-fit2cloud 2025-06-24 19:41:54 +08:00
commit 90249257c6
16 changed files with 325 additions and 263 deletions

View File

@ -70,22 +70,30 @@
</el-dialog>
</template>
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { reactive, ref, watch, computed } from 'vue'
import { useRoute } from 'vue-router'
import documentApi from '@/api/knowledge/document'
import paragraphApi from '@/api/knowledge/paragraph'
import knowledgeApi from '@/api/knowledge/knowledge'
import useStore from '@/stores'
import { groupBy } from 'lodash'
import { MsgSuccess } from '@/utils/message'
import { t } from '@/locales'
import type { FormInstance } from 'element-plus'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
const route = useRoute()
const {
params: { id, documentId }, // idknowledgeID
} = route as any
const type = computed(() => {
if (route.path.includes('shared')) {
return 'systemShare'
} else if (route.path.includes('resource-management')) {
return 'systemManage'
} else {
return 'workspace'
}
})
const { model, prompt, user } = useStore()
const emit = defineEmits(['refresh'])
@ -171,10 +179,12 @@ const submitHandle = async (formEl: FormInstance) => {
...form.value,
state_list: stateMap[state.value],
}
knowledgeApi.putGenerateRelated(id ? id : knowledgeId.value, data, loading).then(() => {
MsgSuccess(t('views.document.generateQuestion.successMessage'))
dialogVisible.value = false
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.putGenerateRelated(id ? id : knowledgeId.value, data, loading)
.then(() => {
MsgSuccess(t('views.document.generateQuestion.successMessage'))
dialogVisible.value = false
})
}
}
})
@ -182,7 +192,7 @@ const submitHandle = async (formEl: FormInstance) => {
function getModel() {
loading.value = true
knowledgeApi
loadSharedApi({ type: 'knowledge', systemType: type.value })
.getKnowledgeModel()
.then((res: any) => {
modelOptions.value = groupBy(res?.data, 'provider')

View File

@ -115,32 +115,35 @@
<script setup lang="ts">
import { ref, onMounted, computed } from 'vue'
import { onBeforeRouteLeave, useRouter, useRoute } from 'vue-router'
import { isWorkFlow } from '@/utils/application'
import { isAppIcon } from '@/utils/common'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
import useStore from '@/stores'
const { common, knowledge, application } = useStore()
const { common, application } = useStore()
const route = useRoute()
const router = useRouter()
const {
meta: { activeMenu },
params: { id },
} = route as any
const type = computed(() => {
if (route.path.includes('shared')) {
return 'systemShare'
} else if (route.path.includes('resource-management')) {
return 'systemManage'
} else {
return 'workspace'
}
})
onBeforeRouteLeave((to, from) => {
common.saveBreadcrumb(null)
})
const CreateKnowledgeDialogRef = ref()
const CreateApplicationDialogRef = ref()
const list = ref<any[]>([])
const loading = ref(false)
const breadcrumbData = computed(() => common.breadcrumb)
const current = ref<any>(null)
// const current = computed(() => {
// return list.value?.filter((v) => v.id === id)?.[0]
// })
const isApplication = computed(() => {
return activeMenu.includes('application')
@ -151,8 +154,8 @@ const isKnowledge = computed(() => {
function getKnowledgeDetail() {
loading.value = true
knowledge
.asyncGetKnowledgeDetail(id)
loadSharedApi({ type: 'knowledge', systemType: type.value })
.getKnowledgeDetail(id)
.then((res: any) => {
current.value = res.data
loading.value = false
@ -175,80 +178,12 @@ function getApplicationDetail() {
})
}
function openCreateDialog() {
if (isKnowledge.value) {
CreateKnowledgeDialogRef.value.open()
} else if (isApplication.value) {
CreateApplicationDialogRef.value.open()
}
}
function changeMenu(id: string) {
const lastMatched = route.matched[route.matched.length - 1]
if (lastMatched) {
if (isKnowledge.value) {
router.push({ name: lastMatched.name, params: { id: id } })
} else if (isApplication.value) {
const type = list.value?.filter((v) => v.id === id)?.[0]?.type
if (
isWorkFlow(type) &&
(lastMatched.name === 'AppSetting' || lastMatched.name === 'AppHitTest')
) {
router.push({ path: `/application/${id}/${type}/overview` })
} else {
router.push({
name: lastMatched.name,
params: { id: id, type: type },
})
}
}
}
}
function getKnowledge() {
loading.value = true
knowledge
.asyncGetFolderKnowledge()
.then((res: any) => {
list.value = res.data
common.saveBreadcrumb(list.value)
loading.value = false
})
.catch(() => {
loading.value = false
})
}
function getApplication() {
loading.value = true
application
.asyncGetAllApplication()
.then((res: any) => {
list.value = res.data
common.saveBreadcrumb(list.value)
loading.value = false
})
.catch(() => {
loading.value = false
})
}
function refresh() {
common.saveBreadcrumb(null)
}
onMounted(() => {
if (isKnowledge.value) {
getKnowledgeDetail()
} else if (isApplication.value) {
getApplicationDetail()
}
// if (!breadcrumbData.value) {
// if (isKnowledge.value) {
// getKnowledge()
// } else if (isApplication.value) {
// getApplication()
// }
// } else {
// list.value = breadcrumbData.value
// }
})
</script>

View File

@ -13,7 +13,7 @@ export interface knowledgeStateTypes {
webInfo: any
documentsType: string
documentsFiles: UploadUserFile[]
knowledgeList: knowledgeData[]
knowledgeList: any[]
}
const useKnowledgeStore = defineStore('knowledge', {
@ -56,7 +56,7 @@ const useKnowledgeStore = defineStore('knowledge', {
...paramsData,
}
loadSharedApi({ type: 'knowledge', isShared, systemType })
.getToolListPage(page, params, loading)
.getKnowledgeListPage(page, params, loading)
.then((res: any) => {
resolve(res)
})
@ -80,18 +80,6 @@ const useKnowledgeStore = defineStore('knowledge', {
})
})
},
async asyncGetKnowledgeDetail(knowledge_id: string, loading?: Ref<boolean>) {
return new Promise((resolve, reject) => {
knowledgeApi
.getKnowledgeDetail(knowledge_id, loading)
.then((data) => {
resolve(data)
})
.catch((error) => {
reject(error)
})
})
},
},
})

View File

@ -94,7 +94,6 @@
</template>
<script setup lang="ts">
import { computed, ref, watch } from 'vue'
import KnowledgeApi from '@/api/knowledge/knowledge'
import useStore from '@/stores'
const props = defineProps({
data: {

View File

@ -56,17 +56,25 @@
</el-dialog>
</template>
<script setup lang="ts">
import { ref, watch } from 'vue'
import { ref, watch, computed } from 'vue'
import { useRoute } from 'vue-router'
import documentApi from '@/api/knowledge/document'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
import useStore from '@/stores'
const { knowledge } = useStore()
const route = useRoute()
const {
params: { id }, // idknowledgeID
} = route as any
const type = computed(() => {
if (route.path.includes('shared')) {
return 'systemShare'
} else if (route.path.includes('resource-management')) {
return 'systemManage'
} else {
return 'workspace'
}
})
const emit = defineEmits(['refresh'])
const loading = ref<boolean>(false)
@ -91,9 +99,11 @@ const loadTree = (node: any, resolve: any) => {
console.log(node)
if (node.isLeaf) return resolve([])
const folder_id = node.level === 0 ? '' : node.data.id
knowledge.asyncGetFolderKnowledge(folder_id, loading).then((res: any) => {
resolve(res.data)
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.getKnowledgeList(folder_id, loading)
.then((res: any) => {
resolve(res.data)
})
}
watch(dialogVisible, (bool) => {

View File

@ -7,9 +7,7 @@
<div class="flex-between">
<div>
<el-button
v-if="knowledgeDetail.type === 0 &&
permissionPrecise.doc_create(id)
"
v-if="knowledgeDetail.type === 0 && permissionPrecise.doc_create(id)"
type="danger"
@click="
router.push({ path: `/knowledge/document/upload/${folderId}`, query: { id: id } })
@ -17,23 +15,20 @@
>{{ $t('views.document.uploadDocument') }}
</el-button>
<el-button
v-if="knowledgeDetail.type === 1 &&
permissionPrecise.doc_create(id)
"
v-if="knowledgeDetail.type === 1 && permissionPrecise.doc_create(id)"
type="primary"
@click="importDoc"
>{{ $t('views.document.importDocument') }}
</el-button>
<el-button
v-if="knowledgeDetail.type === 2 &&
permissionPrecise.doc_create(id)
"
v-if="knowledgeDetail.type === 2 && permissionPrecise.doc_create(id)"
type="primary"
@click="
router.push({
path: `/knowledge/import`,
query: { id: id, folder_token: knowledgeDetail.meta.folder_token },
})"
})
"
>{{ $t('views.document.importDocument') }}
</el-button>
<el-button
@ -55,9 +50,7 @@
>{{ $t('views.document.setting.migration') }}
</el-button>
<el-dropdown>
<el-button
class="ml-12 mr-12"
>
<el-button class="ml-12 mr-12">
<el-icon><MoreFilled /></el-icon>
</el-button>
<template #dropdown>
@ -73,18 +66,14 @@
divided
@click="syncMulDocument"
:disabled="multipleSelection.length === 0"
v-if="
permissionPrecise.doc_sync(id)
"
v-if="permissionPrecise.doc_sync(id)"
>{{ $t('views.document.syncDocument') }}
</el-dropdown-item>
<el-dropdown-item
divided
@click="syncLarkMulDocument"
:disabled="multipleSelection.length === 0"
v-if="knowledgeDetail.type === 2 &&
permissionPrecise.doc_sync(id)
"
v-if="knowledgeDetail.type === 2 && permissionPrecise.doc_sync(id)"
>{{ $t('views.document.syncDocument') }}
</el-dropdown-item>
@ -92,9 +81,7 @@
divided
@click="deleteMulDocument"
:disabled="multipleSelection.length === 0"
v-if="
permissionPrecise.doc_delete(id)
"
v-if="permissionPrecise.doc_delete(id)"
>{{ $t('common.delete') }}
</el-dropdown-item>
</el-dropdown-menu>
@ -116,8 +103,7 @@
class="mt-16"
:data="documentData"
:pagination-config="paginationConfig"
:quick-create="knowledgeDetail.type === 0 &&
permissionPrecise.doc_create(id)"
:quick-create="knowledgeDetail.type === 0 && permissionPrecise.doc_create(id)"
@sizeChange="handleSizeChange"
@changePage="getList"
@cell-mouse-enter="cellMouseEnter"
@ -408,10 +394,7 @@
</span>
<span @click.stop>
<el-dropdown trigger="click">
<el-button
text
type="primary"
>
<el-button text type="primary">
<el-icon><MoreFilled /></el-icon>
</el-button>
<template #dropdown>
@ -420,38 +403,45 @@
v-if="
([State.STARTED, State.PENDING] as Array<string>).includes(
getTaskState(row.status, TaskType.GENERATE_PROBLEM),
)&&
permissionPrecise.doc_generate(id)"
) && permissionPrecise.doc_generate(id)
"
@click="cancelTask(row, TaskType.GENERATE_PROBLEM)"
>
<el-icon><Connection /></el-icon>
{{ $t('views.document.setting.cancelGenerateQuestion') }}
</el-dropdown-item>
<el-dropdown-item v-else @click="openGenerateDialog(row)"
<el-dropdown-item
v-else
@click="openGenerateDialog(row)"
v-if="permissionPrecise.doc_generate(id)"
>
<el-icon><Connection /></el-icon>
{{ $t('views.document.generateQuestion.title') }}
</el-dropdown-item>
<el-dropdown-item @click="openknowledgeDialog(row)"
<el-dropdown-item
@click="openknowledgeDialog(row)"
v-if="permissionPrecise.doc_migrate(id)"
>
<AppIcon iconName="app-migrate"></AppIcon>
{{ $t('views.document.setting.migration') }}
</el-dropdown-item>
<el-dropdown-item @click="exportDocument(row)"
<el-dropdown-item
@click="exportDocument(row)"
v-if="permissionPrecise.doc_export(id)"
>
<AppIcon iconName="app-export"></AppIcon>
{{ $t('views.document.setting.export') }} Excel
</el-dropdown-item>
<el-dropdown-item @click="exportDocumentZip(row)"
<el-dropdown-item
@click="exportDocumentZip(row)"
v-if="permissionPrecise.doc_export(id)"
>
<AppIcon iconName="app-export"></AppIcon>
{{ $t('views.document.setting.export') }} Zip
</el-dropdown-item>
<el-dropdown-item icon="Delete" @click.stop="deleteDocument(row)"
<el-dropdown-item
icon="Delete"
@click.stop="deleteDocument(row)"
v-if="permissionPrecise.doc_delete(id)"
>
{{ $t('common.delete') }}</el-dropdown-item
@ -478,8 +468,7 @@
v-if="
([State.STARTED, State.PENDING] as Array<string>).includes(
getTaskState(row.status, TaskType.EMBEDDING),
) &&
permissionPrecise.doc_vector(id)
) && permissionPrecise.doc_vector(id)
"
type="primary"
text
@ -503,10 +492,7 @@
<span @click.stop>
<el-dropdown trigger="click">
<el-button
text
type="primary"
>
<el-button text type="primary">
<el-icon><MoreFilled /></el-icon>
</el-button>
<template #dropdown>
@ -609,7 +595,7 @@ import { t } from '@/locales'
import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index'
import permissionMap from '@/permission'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
const route = useRoute()
const { folder, user } = useStore()
@ -1018,9 +1004,11 @@ function getList(bool?: boolean) {
}
function getDetail() {
knowledge.asyncGetKnowledgeDetail(id, loading).then((res: any) => {
knowledgeDetail.value = res.data
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.getKnowledgeDetail(id, loading)
.then((res: any) => {
knowledgeDetail.value = res.data
})
}
function refreshMigrate() {

View File

@ -4,7 +4,11 @@
{{ $t('views.application.hitTest.title') }}
<el-text type="info" class="ml-4"> {{ $t('views.application.hitTest.text') }}</el-text>
</h4>
<el-card style="--el-card-padding: 0" class="hit-test__main p-16 mt-16 mb-16" v-loading="loading">
<el-card
style="--el-card-padding: 0"
class="hit-test__main p-16 mt-16 mb-16"
v-loading="loading"
>
<div class="question-title" :style="{ visibility: questionTitle ? 'visible' : 'hidden' }">
<div class="avatar">
<el-avatar>
@ -215,18 +219,26 @@
import { nextTick, ref, onMounted, computed } from 'vue'
import { useRoute } from 'vue-router'
import { cloneDeep } from 'lodash'
import KnowledgeApi from '@/api/knowledge/knowledge'
// import applicationApi from '@/api/application/application'
import ParagraphDialog from '@/views/paragraph/component/ParagraphDialog.vue'
import { arraySort } from '@/utils/common'
import emptyImg from '@/assets/hit-test-empty.png'
import { t } from '@/locales'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
const route = useRoute()
const {
meta: { activeMenu },
params: { id },
} = route as any
const type = computed(() => {
if (route.path.includes('shared')) {
return 'systemShare'
} else if (route.path.includes('resource-management')) {
return 'systemManage'
} else {
return 'workspace'
}
})
const quickInputRef = ref()
const ParagraphDialogRef = ref()
const loading = ref(false)
@ -312,12 +324,14 @@ function getHitTestList() {
...formInline.value,
}
if (isDataset.value) {
KnowledgeApi.putKnowledgeHitTest(id, obj, loading).then((res) => {
paragraphDetail.value = res.data && arraySort(res.data, 'comprehensive_score', true)
questionTitle.value = inputValue.value
inputValue.value = ''
first.value = false
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.putKnowledgeHitTest(id, obj, loading)
.then((res: any) => {
paragraphDetail.value = res.data && arraySort(res.data, 'comprehensive_score', true)
questionTitle.value = inputValue.value
inputValue.value = ''
first.value = false
})
} else if (isApplication.value) {
// applicationApi.getApplicationHitTest(id, obj, loading).then((res) => {
// paragraphDetail.value = res.data && arraySort(res.data, 'comprehensive_score', true)

View File

@ -140,12 +140,18 @@
</el-form-item>
</el-form>
<div class="text-right">
<el-button @click="submit" type="primary"
v-hasPermission="[RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
RoleConst.ADMIN,
PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermissionWorkspaceManageRole,
PermissionConst.KNOWLEDGE_EDIT.getKnowledgeWorkspaceResourcePermission(id)]"
> {{ $t('common.save') }}</el-button>
<el-button
@click="submit"
type="primary"
v-hasPermission="[
RoleConst.WORKSPACE_MANAGE.getWorkspaceRole,
RoleConst.ADMIN,
PermissionConst.KNOWLEDGE_EDIT.getWorkspacePermissionWorkspaceManageRole,
PermissionConst.KNOWLEDGE_EDIT.getKnowledgeWorkspaceResourcePermission(id),
]"
>
{{ $t('common.save') }}</el-button
>
</div>
</div>
</el-scrollbar>
@ -154,24 +160,28 @@
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, reactive } from 'vue'
import { ref, onMounted, reactive, computed } from 'vue'
import { useRoute } from 'vue-router'
import BaseForm from '@/views/knowledge/component/BaseForm.vue'
import KnowledgeApi from '@/api/knowledge/knowledge'
import type { ApplicationFormType } from '@/api/type/application'
import { MsgSuccess, MsgConfirm } from '@/utils/message'
import { isAppIcon } from '@/utils/common'
import useStore from '@/stores'
import { t } from '@/locales'
import { PermissionConst, RoleConst } from '@/utils/permission/data'
import { hasPermission } from '@/utils/permission/index'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
const route = useRoute()
const {
params: { id },
} = route as any
const { knowledge } = useStore()
const type = computed(() => {
if (route.path.includes('shared')) {
return 'systemShare'
} else if (route.path.includes('resource-management')) {
return 'systemManage'
} else {
return 'workspace'
}
})
const webFormRef = ref()
const BaseFormRef = ref()
const loading = ref(false)
@ -238,31 +248,45 @@ async function submit() {
})
.then(() => {
if (detail.value.type === 2) {
// KnowledgeApi.putLarkKnowledge(id, obj, loading).then((res) => {
// KnowledgeApi.putReEmbeddingKnowledge(id).then(() => {
// MsgSuccess(t('common.saveSuccess'))
// })
// })
} else {
KnowledgeApi.putKnowledge(id, obj, loading).then((res) => {
KnowledgeApi.putReEmbeddingKnowledge(id).then(() => {
MsgSuccess(t('common.saveSuccess'))
loadSharedApi({ type: 'knowledge', systemType: type.value })
.putLarkKnowledge(id, obj, loading)
.then(() => {
loadSharedApi({ type: 'knowledge', systemType: type.value })
.putReEmbeddingKnowledge(id)
.then(() => {
MsgSuccess(t('common.saveSuccess'))
})
})
} else {
loadSharedApi({ type: 'knowledge', systemType: type.value })
.putKnowledge(id, obj, loading)
.then(() => {
loadSharedApi({ type: 'knowledge', systemType: type.value })
.putReEmbeddingKnowledge(id)
.then(() => {
MsgSuccess(t('common.saveSuccess'))
})
})
})
}
})
.catch(() => {})
} else {
if (detail.value.type === 2) {
// KnowledgeApi.putLarkKnowledge(id, obj, loading).then((res) => {
// KnowledgeApi.putReEmbeddingKnowledge(id).then(() => {
// MsgSuccess(t('common.saveSuccess'))
// })
// })
loadSharedApi({ type: 'knowledge', systemType: type.value })
.putLarkKnowledge(id, obj, loading)
.then(() => {
loadSharedApi({ type: 'knowledge', systemType: type.value })
.putReEmbeddingKnowledge(id)
.then(() => {
MsgSuccess(t('common.saveSuccess'))
})
})
} else {
KnowledgeApi.putKnowledge(id, obj, loading).then((res) => {
MsgSuccess(t('common.saveSuccess'))
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.putKnowledge(id, obj, loading)
.then(() => {
MsgSuccess(t('common.saveSuccess'))
})
}
}
}
@ -271,13 +295,15 @@ async function submit() {
}
function getDetail() {
knowledge.asyncGetKnowledgeDetail(id, loading).then((res: any) => {
detail.value = res.data
cloneModelId.value = res.data?.embedding_model_id
if (detail.value.type === '1' || detail.value.type === '2') {
form.value = res.data.meta
}
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.getKnowledgeDetail(id, loading)
.then((res: any) => {
detail.value = res.data
cloneModelId.value = res.data?.embedding_model_id
if (detail.value.type === '1' || detail.value.type === '2') {
form.value = res.data.meta
}
})
}
onMounted(() => {

View File

@ -1,5 +1,8 @@
<template>
<ContentContainer :header="currentFolder?.name">
<ContentContainer>
<template #header>
<slot name="header"> </slot>
</template>
<template #search>
<div class="flex">
<div class="flex-between complex-search">
@ -31,8 +34,8 @@
<el-option v-for="u in user_options" :key="u.id" :value="u.id" :label="u.username" />
</el-select>
</div>
<el-dropdown trigger="click" v-if="!isShared">
<el-button type="primary" class="ml-8" v-if="permissionPrecise.create()">
<el-dropdown trigger="click" v-if="!isShared && permissionPrecise.create()">
<el-button type="primary" class="ml-8">
{{ $t('common.create') }}
<el-icon class="el-icon--right">
<arrow-down />
@ -131,15 +134,15 @@
style="max-height: calc(100vh - 140px)"
>
<InfiniteScroll
:size="knowledgeList.length"
:size="knowledge.knowledgeList.length"
:total="paginationConfig.total"
:page_size="paginationConfig.page_size"
v-model:current_page="paginationConfig.current_page"
@load="getList"
:loading="loading"
>
<el-row v-if="knowledgeList.length > 0" :gutter="15" class="w-full">
<template v-for="(item, index) in knowledgeList" :key="index">
<el-row v-if="knowledge.knowledgeList.length > 0" :gutter="15" class="w-full">
<template v-for="(item, index) in knowledge.knowledgeList" :key="index">
<el-col
v-if="item.resource_type === 'folder'"
:xs="24"
@ -172,7 +175,9 @@
:title="item.name"
:description="item.desc"
class="cursor"
@click="router.push({ path: `/knowledge/${item.id}/${currentFolder.id}/document` })"
@click="
router.push({ path: `/knowledge/${item.id}/${folder.currentFolder.id}/document` })
"
>
<template #icon>
<KnowledgeIcon :type="item.type" />
@ -235,11 +240,17 @@
v-if="permissionPrecise.doc_generate(item.id)"
>{{ $t('views.document.generateQuestion.title') }}
</el-dropdown-item>
<el-dropdown-item
v-if="isSystemShare"
icon="Lock"
@click.stop="openAuthorizedWorkspaceDialog(item)"
>{{ $t('views.system.shared.authorized_workspace') }}</el-dropdown-item
>
<el-dropdown-item
icon="Setting"
@click.stop="
router.push({
path: `/knowledge/${item.id}/${currentFolder.value}/setting`,
path: `/knowledge/${item.id}/${folder.currentFolder.id}/setting`,
})
"
v-if="permissionPrecise.setting(item.id)"
@ -283,20 +294,25 @@
</ContentContainer>
<component :is="currentCreateDialog" ref="CreateKnowledgeDialogRef" v-if="!isShared" />
<CreateFolderDialog ref="CreateFolderDialogRef" v-if="!isShared" />
<CreateFolderDialog ref="CreateFolderDialogRef" v-if="!isShared" />
<GenerateRelatedDialog ref="GenerateRelatedDialogRef" />
<SyncWebDialog ref="SyncWebDialogRef" v-if="!isShared" />
<AuthorizedWorkspace
ref="AuthorizedWorkspaceDialogRef"
v-if="isSystemShare"
></AuthorizedWorkspace>
</template>
<script lang="ts" setup>
import { onMounted, ref, reactive, shallowRef, nextTick, computed, watch } from 'vue'
import { cloneDeep, get } from 'lodash'
import CreateKnowledgeDialog from '@/views/knowledge/create-component/CreateKnowledgeDialog.vue'
import CreateWebKnowledgeDialog from '@/views/knowledge/create-component/CreateWebKnowledgeDialog.vue'
import CreateLarkKnowledgeDialog from '@/views/knowledge/create-component/CreateLarkKnowledgeDialog.vue'
import SyncWebDialog from '@/views/knowledge/component/SyncWebDialog.vue'
import CreateFolderDialog from '@/components/folder-tree/CreateFolderDialog.vue'
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
import KnowledgeApi from '@/api/knowledge/knowledge'
import AuthorizedWorkspace from '@/views/system-shared/AuthorizedWorkspaceDialog.vue'
import { MsgSuccess, MsgConfirm } from '@/utils/message'
import useStore from '@/stores'
import { numberFormat } from '@/utils/common'
@ -348,7 +364,6 @@ const paginationConfig = reactive({
total: 0,
})
const folderList = ref<any[]>([])
const knowledgeList = ref<any[]>([])
const currentFolder = ref<any>({})
@ -358,7 +373,7 @@ const currentCreateDialog = shallowRef<any>(null)
function openCreateDialog(data: any) {
currentCreateDialog.value = data
nextTick(() => {
CreateKnowledgeDialogRef.value.open(currentFolder.value)
CreateKnowledgeDialogRef.value.open(folder.currentFolder)
})
// common.asyncGetValid(ValidType.Dataset, ValidCount.Dataset, loading).then(async (res: any) => {
@ -378,9 +393,11 @@ function openCreateDialog(data: any) {
}
function reEmbeddingKnowledge(row: any) {
KnowledgeApi.putReEmbeddingKnowledge(row.id).then(() => {
MsgSuccess(t('common.submitSuccess'))
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.putReEmbeddingKnowledge(row.id)
.then(() => {
MsgSuccess(t('common.submitSuccess'))
})
}
const SyncWebDialogRef = ref()
@ -401,14 +418,18 @@ function openGenerateDialog(row: any) {
}
const exportKnowledge = (item: any) => {
KnowledgeApi.exportKnowledge(item.name, item.id, loading).then((ok) => {
MsgSuccess(t('common.exportSuccess'))
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.exportKnowledge(item.name, item.id, loading)
.then(() => {
MsgSuccess(t('common.exportSuccess'))
})
}
const exportZipKnowledge = (item: any) => {
KnowledgeApi.exportZipKnowledge(item.name, item.id, loading).then((ok) => {
MsgSuccess(t('common.exportSuccess'))
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.exportZipKnowledge(item.name, item.id, loading)
.then(() => {
MsgSuccess(t('common.exportSuccess'))
})
}
function deleteKnowledge(row: any) {
@ -421,19 +442,30 @@ function deleteKnowledge(row: any) {
},
)
.then(() => {
KnowledgeApi.delKnowledge(row.id, loading).then(() => {
const index = knowledgeList.value.findIndex((v) => v.id === row.id)
knowledgeList.value.splice(index, 1)
MsgSuccess(t('common.deleteSuccess'))
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.delKnowledge(row.id, loading)
.then(() => {
const list = cloneDeep(knowledge.knowledgeList)
const index = list.findIndex((v) => v.id === row.id)
list.splice(index, 1)
knowledge.setKnowledgeList(list)
MsgSuccess(t('common.deleteSuccess'))
})
})
.catch(() => {})
}
const AuthorizedWorkspaceDialogRef = ref()
function openAuthorizedWorkspaceDialog(row: any) {
if (AuthorizedWorkspaceDialogRef.value) {
AuthorizedWorkspaceDialogRef.value.open(row)
}
}
//
const CreateFolderDialogRef = ref()
function openCreateFolder() {
CreateFolderDialogRef.value.open(FolderSource.KNOWLEDGE, currentFolder.value.id)
CreateFolderDialogRef.value.open(FolderSource.KNOWLEDGE, folder.currentFolder.id)
}
watch(
() => folder.currentFolder,

View File

@ -35,10 +35,22 @@
</el-dialog>
</template>
<script setup lang="ts">
import { ref, watch } from 'vue'
import knowledgeApi from '@/api/knowledge/knowledge'
import { ref, watch, computed } from 'vue'
import { useRoute } from 'vue-router'
import { MsgSuccess } from '@/utils/message'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
import { t } from '@/locales'
const route = useRoute()
const type = computed(() => {
if (route.path.includes('shared')) {
return 'systemShare'
} else if (route.path.includes('resource-management')) {
return 'systemManage'
} else {
return 'workspace'
}
})
const emit = defineEmits(['refresh'])
const loading = ref<boolean>(false)
const method = ref('replace')
@ -58,11 +70,13 @@ const open = (id: string) => {
}
const submit = () => {
knowledgeApi.putSyncWebKnowledge(knowledgeId.value, method.value, loading).then((res: any) => {
emit('refresh', res.data)
MsgSuccess(t('views.knowledge.tip.syncSuccess'))
dialogVisible.value = false
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.putSyncWebKnowledge(knowledgeId.value, method.value, loading)
.then((res: any) => {
emit('refresh', res.data)
MsgSuccess(t('views.knowledge.tip.syncSuccess'))
dialogVisible.value = false
})
}
defineExpose({ open })

View File

@ -23,15 +23,25 @@
</el-dialog>
</template>
<script setup lang="ts">
import { ref, watch, reactive } from 'vue'
import { ref, watch, computed } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import BaseForm from '@/views/knowledge/component/BaseForm.vue'
import KnowledgeApi from '@/api/knowledge/knowledge'
import { MsgSuccess, MsgAlert } from '@/utils/message'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
import { t } from '@/locales'
const emit = defineEmits(['refresh'])
const router = useRouter()
const route = useRoute()
const type = computed(() => {
if (route.path.includes('shared')) {
return 'systemShare'
} else if (route.path.includes('resource-management')) {
return 'systemManage'
} else {
return 'workspace'
}
})
const BaseFormRef = ref()
const loading = ref(false)
@ -55,11 +65,13 @@ const submitHandle = async () => {
folder_id: currentFolder.value?.id,
...BaseFormRef.value.form,
}
KnowledgeApi.postKnowledge(obj, loading).then((res) => {
MsgSuccess(t('common.createSuccess'))
router.push({ path: `/knowledge/${res.data.id}/${currentFolder.value.id}/document` })
emit('refresh')
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.postKnowledge(obj, loading)
.then((res: any) => {
MsgSuccess(t('common.createSuccess'))
router.push({ path: `/knowledge/${res.data.id}/${currentFolder.value.id}/document` })
emit('refresh')
})
} else {
return false
}

View File

@ -52,16 +52,25 @@
</el-dialog>
</template>
<script setup lang="ts">
import { ref, watch, reactive } from 'vue'
import { ref, watch, reactive, computed } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import BaseForm from '@/views/knowledge/component/BaseForm.vue'
import KnowledgeApi from '@/api/knowledge/knowledge'
import { MsgSuccess, MsgAlert } from '@/utils/message'
import { t } from '@/locales'
import { ComplexPermission } from '@/utils/permission/type'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
const emit = defineEmits(['refresh'])
const router = useRouter()
const route = useRoute()
const type = computed(() => {
if (route.path.includes('shared')) {
return 'systemShare'
} else if (route.path.includes('resource-management')) {
return 'systemManage'
} else {
return 'workspace'
}
})
const BaseFormRef = ref()
const knowledgeFormRef = ref()
@ -148,11 +157,13 @@ const submitHandle = async () => {
...BaseFormRef.value.form,
...knowledgeForm.value,
}
KnowledgeApi.postLarkKnowledge(obj, loading).then((res: any) => {
MsgSuccess(t('common.createSuccess'))
router.push({ path: `/knowledge/${res.data.id}/${currentFolder.value.id}/document` })
emit('refresh')
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.postLarkKnowledge(obj, loading)
.then((res: any) => {
MsgSuccess(t('common.createSuccess'))
router.push({ path: `/knowledge/${res.data.id}/${currentFolder.value.id}/document` })
emit('refresh')
})
} else {
return false
}

View File

@ -44,15 +44,25 @@
</el-dialog>
</template>
<script setup lang="ts">
import { ref, watch, reactive } from 'vue'
import { ref, watch, reactive, computed } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import BaseForm from '@/views/knowledge/component/BaseForm.vue'
import KnowledgeApi from '@/api/knowledge/knowledge'
import { MsgSuccess, MsgAlert } from '@/utils/message'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
import { t } from '@/locales'
const emit = defineEmits(['refresh'])
const router = useRouter()
const route = useRoute()
const type = computed(() => {
if (route.path.includes('shared')) {
return 'systemShare'
} else if (route.path.includes('resource-management')) {
return 'systemManage'
} else {
return 'workspace'
}
})
const BaseFormRef = ref()
const KnowledgeFormRef = ref()
@ -101,11 +111,13 @@ const submitHandle = async () => {
...BaseFormRef.value.form,
...knowledgeForm.value,
}
KnowledgeApi.postWebKnowledge(obj, loading).then((res) => {
MsgSuccess(t('common.createSuccess'))
router.push({ path: `/knowledge/${res.data.id}/${currentFolder.value.id}/document` })
emit('refresh')
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.postWebKnowledge(obj, loading)
.then((res: any) => {
MsgSuccess(t('common.createSuccess'))
router.push({ path: `/knowledge/${res.data.id}/${currentFolder.value.id}/document` })
emit('refresh')
})
} else {
return false
}

View File

@ -24,7 +24,6 @@
<script lang="ts" setup>
import { onMounted, ref, reactive, shallowRef, nextTick, computed } from 'vue'
import KnowledgeListContainer from '@/views/knowledge/component/KnowledgeListContainer.vue'
import KnowledgeApi from '@/api/knowledge/knowledge'
import { FolderSource } from '@/enums/common'
import permissionMap from '@/permission'
import { useRoute } from 'vue-router'

View File

@ -74,7 +74,7 @@
<el-col
:xs="24"
:sm="12"
:md="12"
:md="isSystemShare ? 24 : 12"
:lg="isSystemShare ? 12 : 8"
:xl="isSystemShare ? 12 : 8"
class="mb-16"

View File

@ -76,11 +76,12 @@
</el-dialog>
</template>
<script setup lang="ts">
import { ref, watch, reactive } from 'vue'
import { ref, watch, reactive, computed } from 'vue'
import { useRoute } from 'vue-router'
import type { FormInstance, FormRules } from 'element-plus'
import paragraphApi from '@/api/knowledge/paragraph'
import useStore from '@/stores'
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
import { t } from '@/locales'
const { knowledge, document } = useStore()
@ -89,6 +90,15 @@ const {
params: { id, documentId }, // idknowledgeID
} = route as any
const type = computed(() => {
if (route.path.includes('shared')) {
return 'systemShare'
} else if (route.path.includes('resource-management')) {
return 'systemManage'
} else {
return 'workspace'
}
})
const emit = defineEmits(['refresh'])
const formRef = ref()
@ -137,9 +147,11 @@ const defaultProps = {
const loadTree = (node: any, resolve: any) => {
if (node.isLeaf) return resolve([])
const folder_id = node.level === 0 ? '' : node.data.id
knowledge.asyncGetFolderKnowledge(folder_id, optionLoading).then((res: any) => {
resolve(res.data)
})
loadSharedApi({ type: 'knowledge', systemType: type.value })
.getKnowledgeList(folder_id, optionLoading)
.then((res: any) => {
resolve(res.data)
})
}
function changeKnowledge(id: string) {