feat: knowledge resource management and model resource management
This commit is contained in:
parent
5022b2a872
commit
03fbba0952
@ -3,7 +3,6 @@ import {get, post, postStream, del, put, request, download, exportFile} from '@/
|
||||
import type {pageRequest} from '@/api/type/common'
|
||||
import type {ApplicationFormType} from '@/api/type/application'
|
||||
import {type Ref} from 'vue'
|
||||
import useStore from '@/stores'
|
||||
|
||||
const prefix = '/system/resource/application'
|
||||
|
||||
|
||||
@ -30,9 +30,10 @@ const getModelListPage: (
|
||||
*/
|
||||
const getSelectModelList: (
|
||||
data?: ListModelRequest,
|
||||
workspace_id?: string,
|
||||
loading?: Ref<boolean>,
|
||||
) => Promise<Result<Array<Model>>> = (data, loading) => {
|
||||
return get(`${prefix}/model_list`, data, loading).then((ok) => {
|
||||
) => Promise<Result<Array<Model>>> = (data, workspace_id, loading) => {
|
||||
return get(`${prefix}/workspace/${workspace_id}/model/model_list`, data, loading).then((ok) => {
|
||||
return {
|
||||
...ok,
|
||||
data: [
|
||||
|
||||
@ -288,4 +288,5 @@ export default {
|
||||
putBatchGenerateRelated,
|
||||
putMigrateMulParagraph,
|
||||
putDisassociationProblem,
|
||||
putAdjustPosition,
|
||||
}
|
||||
|
||||
@ -288,4 +288,5 @@ export default {
|
||||
putBatchGenerateRelated,
|
||||
putMigrateMulParagraph,
|
||||
putDisassociationProblem,
|
||||
putAdjustPosition,
|
||||
}
|
||||
|
||||
@ -40,4 +40,24 @@ export default {
|
||||
])
|
||||
},
|
||||
},
|
||||
'app-admin-operation': {
|
||||
iconReader: () => {
|
||||
return h('i', [
|
||||
h(
|
||||
'svg',
|
||||
{
|
||||
viewBox: '0 0 1024 1024',
|
||||
version: '1.1',
|
||||
xmlns: 'http://www.w3.org/2000/svg',
|
||||
},
|
||||
[
|
||||
h('path', {
|
||||
d: 'M805.290667 298.666667a170.752 170.752 0 0 1-330.581334 0H112.682667c-9.514667 0-12.970667-1.024-16.426667-2.858667a19.370667 19.370667 0 0 1-8.106667-8.106667C86.357333 284.330667 85.333333 280.832 85.333333 271.36V240.64c0-9.472 0.981333-12.928 2.858667-16.426667a19.370667 19.370667 0 0 1 8.064-8.064C99.712 214.314667 103.168 213.333333 112.64 213.333333h362.026667a170.752 170.752 0 0 1 330.581333 0h106.026667c9.514667 0 12.970667 0.981333 16.426666 2.816a19.370667 19.370667 0 0 1 8.106667 8.106667c1.834667 3.413333 2.816 6.912 2.816 16.384v30.677333c0 9.472-0.981333 12.928-2.858667 16.426667a19.370667 19.370667 0 0 1-8.064 8.064c-3.456 1.834667-6.912 2.858667-16.426666 2.858667h-106.026667zM640 341.333333a85.333333 85.333333 0 1 0 0-170.666666 85.333333 85.333333 0 0 0 0 170.666666zM549.290667 810.666667a170.752 170.752 0 0 1-330.581334 0H112.682667c-9.514667 0-12.970667-1.024-16.426667-2.858667a19.370667 19.370667 0 0 1-8.106667-8.106667c-1.834667-3.413333-2.816-6.912-2.816-16.384v-30.677333c0-9.472 0.981333-12.928 2.858667-16.426667a19.370667 19.370667 0 0 1 8.064-8.064c3.456-1.834667 6.912-2.816 16.426667-2.816h106.026666a170.752 170.752 0 0 1 330.581334 0h362.026666c9.514667 0 12.970667 0.981333 16.426667 2.816a19.370667 19.370667 0 0 1 8.106667 8.106667c1.834667 3.413333 2.816 6.912 2.816 16.384v30.634667c0 9.514667-0.981333 12.970667-2.858667 16.469333a19.370667 19.370667 0 0 1-8.064 8.064c-3.456 1.834667-6.912 2.858667-16.426667 2.858667h-362.026666zM384 853.333333a85.333333 85.333333 0 1 0 0-170.666666 85.333333 85.333333 0 0 0 0 170.666666z',
|
||||
fill: 'currentColor',
|
||||
}),
|
||||
],
|
||||
),
|
||||
])
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@ -77,6 +77,7 @@ import { groupBy } from 'lodash'
|
||||
import { MsgSuccess } from '@/utils/message'
|
||||
import { t } from '@/locales'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import modelResourceApi from '@/api/system-resource-management/model'
|
||||
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
|
||||
|
||||
const props = defineProps<{
|
||||
@ -104,7 +105,7 @@ const stateMap = {
|
||||
error: ['0', '1', '3', '4', '5', 'n'],
|
||||
}
|
||||
const FormRef = ref()
|
||||
const knowledgeId = ref<string>()
|
||||
const currentKnowledge = ref<any>(null)
|
||||
const userId = user.userInfo?.id as string
|
||||
const form = ref(prompt.get(userId))
|
||||
const rules = reactive({
|
||||
@ -131,8 +132,8 @@ watch(dialogVisible, (bool) => {
|
||||
}
|
||||
})
|
||||
|
||||
const open = (ids: string[], type: string, _knowledgeId?: string) => {
|
||||
knowledgeId.value = _knowledgeId
|
||||
const open = (ids: string[], type: string, _knowledge?: any) => {
|
||||
currentKnowledge.value = _knowledge
|
||||
getModelFn()
|
||||
idList.value = ids
|
||||
apiSubmitType.value = type
|
||||
@ -178,7 +179,7 @@ const submitHandle = async (formEl: FormInstance) => {
|
||||
state_list: stateMap[state.value],
|
||||
}
|
||||
loadSharedApi({ type: 'knowledge', systemType: props.apiType })
|
||||
.putGenerateRelated(id ? id : knowledgeId.value, data, loading)
|
||||
.putGenerateRelated(id ? id : currentKnowledge.value?.id, data, loading)
|
||||
.then(() => {
|
||||
MsgSuccess(t('views.document.generateQuestion.successMessage'))
|
||||
dialogVisible.value = false
|
||||
@ -190,6 +191,17 @@ const submitHandle = async (formEl: FormInstance) => {
|
||||
|
||||
function getModelFn() {
|
||||
loading.value = true
|
||||
if (props.apiType === 'systemManage') {
|
||||
modelResourceApi
|
||||
.getSelectModelList({ model_type: 'LLM' }, currentKnowledge.value?.workspace_id)
|
||||
.then((res: any) => {
|
||||
modelOptions.value = groupBy(res?.data, 'provider')
|
||||
loading.value = false
|
||||
})
|
||||
.catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
} else {
|
||||
loadSharedApi({ type: 'model', systemType: props.apiType })
|
||||
.getSelectModelList({ model_type: 'LLM' })
|
||||
.then((res: any) => {
|
||||
@ -199,6 +211,7 @@ function getModelFn() {
|
||||
.catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
defineExpose({ open, dialogVisible })
|
||||
|
||||
@ -36,13 +36,13 @@ const route = useRoute()
|
||||
const {
|
||||
meta: { activeMenu },
|
||||
params: { id, folderId },
|
||||
query: { isShared },
|
||||
query: { isShared, type },
|
||||
} = route as any
|
||||
|
||||
const apiType = computed(() => {
|
||||
if (route.path.includes('shared')) {
|
||||
return 'systemShare'
|
||||
} else if (route.path.includes('resource-management')) {
|
||||
} else if (route.path.includes('resource-management') || type === 'systemManage') {
|
||||
return 'systemManage'
|
||||
} else {
|
||||
return 'workspace'
|
||||
@ -71,7 +71,7 @@ const isKnowledge = computed(() => {
|
||||
const toBackPath = computed(() => {
|
||||
if (route.path.includes('shared')) {
|
||||
return '/system/shared' + activeMenu
|
||||
} else if (route.path.includes('resource-management')) {
|
||||
} else if (route.path.includes('resource-management') || type === 'systemManage') {
|
||||
return '/system/resource-management' + activeMenu
|
||||
} else {
|
||||
return activeMenu
|
||||
|
||||
@ -36,7 +36,7 @@ const {
|
||||
query: { type },
|
||||
} = route as any
|
||||
const isShared = computed(() => {
|
||||
return folderId === 'shared' || type === 'systemShare'
|
||||
return folderId === 'shared' || type === 'systemShare' || type === 'systemManage'
|
||||
})
|
||||
const { theme, user } = useStore()
|
||||
const isDefaultTheme = computed(() => {
|
||||
|
||||
@ -15,7 +15,7 @@ const {
|
||||
query: { type },
|
||||
} = route as any
|
||||
const isShared = computed(() => {
|
||||
return folderId === 'shared' || type === 'systemShare'
|
||||
return folderId === 'shared' || type === 'systemShare' || type === 'systemManage'
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@ -114,7 +114,7 @@ export default {
|
||||
member: 'Member',
|
||||
permissionSetting: 'Permission Setting',
|
||||
setting: {
|
||||
management: ' management',
|
||||
management: 'management',
|
||||
check: 'check',
|
||||
authorization: 'authorization',
|
||||
},
|
||||
@ -126,5 +126,6 @@ export default {
|
||||
resource_management: {
|
||||
label: 'Resource Management',
|
||||
type: 'Type',
|
||||
management: 'management',
|
||||
},
|
||||
}
|
||||
|
||||
@ -126,5 +126,6 @@ export default {
|
||||
resource_management: {
|
||||
label: '资源管理',
|
||||
type: '类型',
|
||||
management: '管理',
|
||||
},
|
||||
}
|
||||
|
||||
@ -125,6 +125,7 @@ export default {
|
||||
},
|
||||
resource_management: {
|
||||
label: '資源管理',
|
||||
type: '类型',
|
||||
type: '類型',
|
||||
management: '管理',
|
||||
},
|
||||
}
|
||||
|
||||
@ -34,7 +34,7 @@ const ModelRouter = {
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
path: '/knowledge/import',
|
||||
path: '/knowledge/import/:folderId',
|
||||
name: 'ImportLarkDocument',
|
||||
meta: { activeMenu: '/knowledge' },
|
||||
component: () => import('@/views/document/ImportLarkDocument.vue'),
|
||||
|
||||
@ -16,6 +16,11 @@ import chatUserSystemShareApi from '@/api/system-shared/chat-user'
|
||||
import workspaceApi from '@/api/workspace/workspace'
|
||||
import systemUserApi from '@/api/user/user'
|
||||
import ToolResourceApi from '@/api/system-resource-management/tool'
|
||||
import knowledgeResourceApi from '@/api/system-resource-management/knowledge'
|
||||
import documentResourceApi from '@/api/system-resource-management/document'
|
||||
import paragraphResourceApi from '@/api/system-resource-management/paragraph'
|
||||
import problemResourceApi from '@/api/system-resource-management/problem'
|
||||
import modelResourceApi from '@/api/system-resource-management/model'
|
||||
|
||||
// 普通 API
|
||||
const workspaceApiMap = {
|
||||
@ -43,8 +48,11 @@ const systemShareApiMap = {
|
||||
|
||||
// 资源管理 API
|
||||
const systemManageApiMap = {
|
||||
// knowledge: knowledgeWorkspaceApi,
|
||||
// model: modelWorkspaceApi,
|
||||
knowledge: knowledgeResourceApi,
|
||||
document: documentResourceApi,
|
||||
paragraph: paragraphResourceApi,
|
||||
problem: problemResourceApi,
|
||||
model: modelResourceApi,
|
||||
tool: ToolResourceApi,
|
||||
} as any
|
||||
|
||||
@ -52,7 +60,7 @@ const data = {
|
||||
systemShare: systemShareApiMap,
|
||||
workspace: workspaceApiMap,
|
||||
systemManage: systemManageApiMap,
|
||||
workspaceShare: workspaceApiMap
|
||||
workspaceShare: workspaceApiMap,
|
||||
}
|
||||
/** 动态导入 API 模块的函数
|
||||
* loadSharedApi('knowledge', true,'systemShare')
|
||||
|
||||
@ -219,7 +219,7 @@ const submit = async (formEl: FormInstance | undefined) => {
|
||||
...{
|
||||
source_url: form.value.source_url,
|
||||
selector: form.value.selector,
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
loadSharedApi({ type: 'document', systemType: apiType.value })
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
type="primary"
|
||||
@click="
|
||||
router.push({
|
||||
path: `/knowledge/import`,
|
||||
path: `/knowledge/import/${folderId}`,
|
||||
query: {
|
||||
id: id,
|
||||
folder_token: knowledgeDetail?.meta.folder_token,
|
||||
@ -56,9 +56,7 @@
|
||||
v-if="permissionPrecise.doc_migrate(id)"
|
||||
>{{ $t('views.document.setting.migration') }}
|
||||
</el-button>
|
||||
<el-dropdown
|
||||
v-if="MoreFilledPermission0(id)"
|
||||
>
|
||||
<el-dropdown v-if="MoreFilledPermission0(id)">
|
||||
<el-button class="ml-12 mr-12">
|
||||
<el-icon><MoreFilled /></el-icon>
|
||||
</el-button>
|
||||
@ -422,9 +420,7 @@
|
||||
</span>
|
||||
</el-tooltip>
|
||||
<span @click.stop>
|
||||
<el-dropdown trigger="click"
|
||||
v-if="MoreFilledPermission1(id)"
|
||||
>
|
||||
<el-dropdown trigger="click" v-if="MoreFilledPermission1(id)">
|
||||
<el-button text type="primary">
|
||||
<el-icon><MoreFilled /></el-icon>
|
||||
</el-button>
|
||||
@ -535,9 +531,7 @@
|
||||
</span>
|
||||
</el-tooltip>
|
||||
<span @click.stop>
|
||||
<el-dropdown trigger="click"
|
||||
v-if="MoreFilledPermission2(id)"
|
||||
>
|
||||
<el-dropdown trigger="click" v-if="MoreFilledPermission2(id)">
|
||||
<el-button text type="primary">
|
||||
<el-icon><MoreFilled /></el-icon>
|
||||
</el-button>
|
||||
@ -704,22 +698,32 @@ const permissionPrecise = computed(() => {
|
||||
})
|
||||
|
||||
const MoreFilledPermission0 = (id: string) => {
|
||||
return permissionPrecise.value.doc_edit(id) ||
|
||||
return (
|
||||
permissionPrecise.value.doc_edit(id) ||
|
||||
(knowledgeDetail?.value.type === 1 && permissionPrecise.value.doc_sync(id)) ||
|
||||
(knowledgeDetail?.value.type === 2 && permissionPrecise.value.doc_sync(id)) ||
|
||||
permissionPrecise.value.doc_delete(id)
|
||||
)
|
||||
}
|
||||
|
||||
const MoreFilledPermission1 = (id: string) => {
|
||||
return permissionPrecise.value.doc_generate(id) || permissionPrecise.value.doc_migrate(id) ||
|
||||
permissionPrecise.value.doc_export(id) || permissionPrecise.value.doc_download(id) ||
|
||||
return (
|
||||
permissionPrecise.value.doc_generate(id) ||
|
||||
permissionPrecise.value.doc_migrate(id) ||
|
||||
permissionPrecise.value.doc_export(id) ||
|
||||
permissionPrecise.value.doc_download(id) ||
|
||||
permissionPrecise.value.doc_delete(id)
|
||||
)
|
||||
}
|
||||
|
||||
const MoreFilledPermission2 = (id: string) => {
|
||||
return permissionPrecise.value.doc_edit(id) || permissionPrecise.value.doc_generate(id) ||
|
||||
permissionPrecise.value.doc_migrate(id) || permissionPrecise.value.doc_export(id) ||
|
||||
return (
|
||||
permissionPrecise.value.doc_edit(id) ||
|
||||
permissionPrecise.value.doc_generate(id) ||
|
||||
permissionPrecise.value.doc_migrate(id) ||
|
||||
permissionPrecise.value.doc_export(id) ||
|
||||
permissionPrecise.value.doc_delete(id)
|
||||
)
|
||||
}
|
||||
|
||||
const getTaskState = (status: string, taskType: number) => {
|
||||
|
||||
@ -17,12 +17,19 @@
|
||||
</template>
|
||||
<template #extra>
|
||||
<el-button
|
||||
v-if="apiType === 'workspace'"
|
||||
@click="
|
||||
router.push({
|
||||
path: `/knowledge`,
|
||||
query: {
|
||||
type: apiType,
|
||||
},
|
||||
})
|
||||
"
|
||||
>{{ $t('views.knowledge.ResultSuccess.buttons.toknowledge') }}</el-button
|
||||
>
|
||||
<el-button
|
||||
v-else
|
||||
@click="
|
||||
router.push({
|
||||
path: `/system/${folderId}/knowledge`,
|
||||
})
|
||||
"
|
||||
>{{ $t('views.knowledge.ResultSuccess.buttons.toknowledge') }}</el-button
|
||||
|
||||
@ -131,7 +131,7 @@ const documentsFiles = computed(() => knowledge.documentsFiles)
|
||||
const splitPatternList = ref<Array<KeyValue<string, string>>>([])
|
||||
const route = useRoute()
|
||||
const {
|
||||
query: { id }, // id为knowledgeID
|
||||
query: { id}, // id为knowledgeID
|
||||
} = route as any
|
||||
|
||||
const apiType = computed(() => {
|
||||
|
||||
@ -307,7 +307,7 @@ const onExceed = () => {
|
||||
MsgError(
|
||||
t('views.document.tip.fileLimitCountTip1') +
|
||||
file_count_limit.value +
|
||||
t('views.document.tip.fileLimitCountTip2')
|
||||
t('views.document.tip.fileLimitCountTip2'),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@ -192,12 +192,13 @@ import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
|
||||
const route = useRoute()
|
||||
const {
|
||||
params: { id, folderId },
|
||||
query: { type },
|
||||
} = route as any
|
||||
|
||||
const apiType = computed(() => {
|
||||
if (route.path.includes('shared')) {
|
||||
return 'systemShare'
|
||||
} else if (route.path.includes('resource-management')) {
|
||||
} else if (route.path.includes('resource-management') || type === 'systemManage') {
|
||||
return 'systemManage'
|
||||
} else {
|
||||
return 'workspace'
|
||||
|
||||
@ -446,7 +446,7 @@ const search_type_change = () => {
|
||||
const GenerateRelatedDialogRef = ref<InstanceType<typeof GenerateRelatedDialog>>()
|
||||
function openGenerateDialog(row: any) {
|
||||
if (GenerateRelatedDialogRef.value) {
|
||||
GenerateRelatedDialogRef.value.open([], 'knowledge', row.id)
|
||||
GenerateRelatedDialogRef.value.open([], 'knowledge', row)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -42,10 +42,13 @@ import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
|
||||
import { t } from '@/locales'
|
||||
|
||||
const route = useRoute()
|
||||
const {
|
||||
query: { type },
|
||||
} = route
|
||||
const apiType = computed(() => {
|
||||
if (route.path.includes('shared')) {
|
||||
return 'systemShare'
|
||||
} else if (route.path.includes('resource-management')) {
|
||||
} else if (route.path.includes('resource-management') || type === 'systemManage') {
|
||||
return 'systemManage'
|
||||
} else {
|
||||
return 'workspace'
|
||||
|
||||
@ -128,7 +128,6 @@ import type { FormField } from '@/components/dynamics-form/type'
|
||||
import DynamicsForm from '@/components/dynamics-form/index.vue'
|
||||
import type { FormRules } from 'element-plus'
|
||||
import { MsgSuccess } from '@/utils/message'
|
||||
import { PermissionType, PermissionDesc } from '@/enums/model'
|
||||
import { t } from '@/locales'
|
||||
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
|
||||
|
||||
|
||||
@ -64,9 +64,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template #mouseEnter
|
||||
v-if="MoreFilledPermission(model.id)"
|
||||
>
|
||||
<template #mouseEnter v-if="MoreFilledPermission(model.id)">
|
||||
<el-dropdown trigger="click" v-if="!isShared">
|
||||
<el-button text @click.stop>
|
||||
<el-icon>
|
||||
@ -117,7 +115,7 @@
|
||||
</el-dropdown>
|
||||
</template>
|
||||
<EditModel ref="editModelRef" @submit="emit('change')"></EditModel>
|
||||
<ParamSettingDialog ref="paramSettingRef" :model="model" />
|
||||
<ParamSettingDialog ref="paramSettingRef" />
|
||||
<AuthorizedWorkspace
|
||||
ref="AuthorizedWorkspaceDialogRef"
|
||||
v-if="isSystemShare"
|
||||
@ -152,7 +150,7 @@ const props = defineProps<{
|
||||
const apiType = props.apiType
|
||||
|
||||
const isSystemShare = computed(() => {
|
||||
return apiType==='systemShare'
|
||||
return apiType === 'systemShare'
|
||||
})
|
||||
|
||||
const permissionPrecise = computed(() => {
|
||||
@ -160,8 +158,9 @@ const permissionPrecise = computed(() => {
|
||||
})
|
||||
|
||||
const MoreFilledPermission = (id: any) => {
|
||||
return permissionPrecise.value.modify(id) ||
|
||||
permissionPrecise.value.delete(id) || isSystemShare.value
|
||||
return (
|
||||
permissionPrecise.value.modify(id) || permissionPrecise.value.delete(id) || isSystemShare.value
|
||||
)
|
||||
}
|
||||
|
||||
const downModel = ref<Model>()
|
||||
@ -255,7 +254,7 @@ const closeInterval = () => {
|
||||
|
||||
const paramSettingRef = ref<InstanceType<typeof ParamSettingDialog>>()
|
||||
const openParamSetting = () => {
|
||||
paramSettingRef.value?.open()
|
||||
paramSettingRef.value?.open(props.model)
|
||||
}
|
||||
|
||||
const AuthorizedWorkspaceDialogRef = ref()
|
||||
|
||||
@ -89,9 +89,6 @@ import { MsgError, MsgSuccess } from '@/utils/message'
|
||||
import { input_type_list } from '@/components/dynamics-form/constructor/data'
|
||||
import { t } from '@/locales'
|
||||
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
|
||||
const props = defineProps<{
|
||||
model: Model
|
||||
}>()
|
||||
|
||||
const route = useRoute()
|
||||
|
||||
@ -108,12 +105,14 @@ const loading = ref<boolean>(false)
|
||||
const dialogVisible = ref<boolean>(false)
|
||||
const modelParamsForm = ref<any[]>([])
|
||||
const AddParamRef = ref()
|
||||
const currentModel = ref<Model | null>(null)
|
||||
|
||||
const open = () => {
|
||||
const open = (model: Model) => {
|
||||
currentModel.value = model
|
||||
dialogVisible.value = true
|
||||
loading.value = true
|
||||
loadSharedApi({ type: 'model', systemType: apiType.value })
|
||||
.getModelParamsForm(props.model.id, loading)
|
||||
.getModelParamsForm(model.id, loading)
|
||||
.then((ok: any) => {
|
||||
loading.value = false
|
||||
modelParamsForm.value = ok.data
|
||||
@ -164,8 +163,11 @@ function refresh(data: any, index: any) {
|
||||
}
|
||||
|
||||
function submit() {
|
||||
if (!currentModel.value) {
|
||||
return
|
||||
}
|
||||
loadSharedApi({ type: 'model', systemType: apiType.value })
|
||||
.updateModelParamsForm(props.model.id, modelParamsForm.value, loading)
|
||||
.updateModelParamsForm(currentModel.value.id, modelParamsForm.value, loading)
|
||||
.then((ok: any) => {
|
||||
MsgSuccess(t('views.model.tip.saveSuccessMessage'))
|
||||
close()
|
||||
|
||||
@ -30,7 +30,10 @@
|
||||
:content="$t('views.problem.setting.cancelRelated')"
|
||||
placement="top"
|
||||
>
|
||||
<el-button type="primary" text @click.stop="disassociation(item)"
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
@click.stop="disassociation(item)"
|
||||
v-if="permissionPrecise.doc_edit(id as string)"
|
||||
>
|
||||
<AppIcon iconName="app-quxiaoguanlian"></AppIcon>
|
||||
@ -67,9 +70,7 @@
|
||||
</div>
|
||||
<template #footer>
|
||||
<div>
|
||||
<el-button @click="relateProblem"
|
||||
v-if="permissionPrecise.doc_edit(id as string)"
|
||||
>{{
|
||||
<el-button @click="relateProblem" v-if="permissionPrecise.doc_edit(id as string)">{{
|
||||
$t('views.problem.relateParagraph.title')
|
||||
}}</el-button>
|
||||
<el-button @click="pre" :disabled="pre_disable || loading">{{
|
||||
|
||||
@ -51,7 +51,7 @@
|
||||
<el-table-column width="220" :label="$t('common.name')" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<div class="flex align-center">
|
||||
<KnowledgeIcon :type="row.type" />
|
||||
<KnowledgeIcon :type="row.type" :size="24" />
|
||||
<span class="ml-8">
|
||||
{{ row.name }}
|
||||
</span>
|
||||
@ -139,22 +139,131 @@
|
||||
{{ datetimeFormat(row.create_time) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="$t('common.operation')" align="left" width="120" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-tooltip
|
||||
effect="dark"
|
||||
:content="$t('views.system.resource_management.management')"
|
||||
placement="top"
|
||||
>
|
||||
<span class="mr-8">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
:title="$t('views.system.resource_management.management')"
|
||||
@click="
|
||||
router.push({
|
||||
path: `/knowledge/${row.id}/resource-management/document`,
|
||||
})
|
||||
"
|
||||
>
|
||||
<AppIcon iconName="app-admin-operation"></AppIcon>
|
||||
</el-button>
|
||||
</span>
|
||||
</el-tooltip>
|
||||
<el-tooltip
|
||||
effect="dark"
|
||||
:content="$t('views.knowledge.setting.vectorization')"
|
||||
placement="top"
|
||||
>
|
||||
<span class="mr-8">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
:title="$t('views.knowledge.setting.vectorization')"
|
||||
@click.stop="reEmbeddingKnowledge(row)"
|
||||
v-if="permissionPrecise.vector(row.id)"
|
||||
>
|
||||
<AppIcon iconName="app-vectorization"></AppIcon>
|
||||
</el-button>
|
||||
</span>
|
||||
</el-tooltip>
|
||||
<el-dropdown trigger="click">
|
||||
<el-button text @click.stop>
|
||||
<el-icon>
|
||||
<MoreFilled />
|
||||
</el-icon>
|
||||
</el-button>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item
|
||||
icon="Refresh"
|
||||
@click.stop="syncKnowledge(row)"
|
||||
v-if="row.type === 1 && permissionPrecise.sync(row.id)"
|
||||
>{{ $t('views.knowledge.setting.sync') }}
|
||||
</el-dropdown-item>
|
||||
|
||||
<el-dropdown-item
|
||||
icon="Connection"
|
||||
@click.stop="openGenerateDialog(row)"
|
||||
v-if="permissionPrecise.generate(row.id)"
|
||||
>{{ $t('views.document.generateQuestion.title') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
icon="Setting"
|
||||
@click="
|
||||
router.push({
|
||||
path: `/knowledge/${row.id}/resource-management/setting`,
|
||||
})
|
||||
"
|
||||
v-if="permissionPrecise.edit(row.id)"
|
||||
>
|
||||
{{ $t('common.setting') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
@click.stop="exportKnowledge(row)"
|
||||
v-if="permissionPrecise.export(row.id)"
|
||||
>
|
||||
<AppIcon iconName="app-export"></AppIcon
|
||||
>{{ $t('views.document.setting.export') }} Excel
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
@click.stop="exportZipKnowledge(row)"
|
||||
v-if="permissionPrecise.export(row.id)"
|
||||
>
|
||||
<AppIcon iconName="app-export"></AppIcon
|
||||
>{{ $t('views.document.setting.export') }} ZIP</el-dropdown-item
|
||||
>
|
||||
<el-dropdown-item
|
||||
icon="Delete"
|
||||
type="danger"
|
||||
@click.stop="deleteKnowledge(row)"
|
||||
v-if="permissionPrecise.delete(row.id)"
|
||||
>
|
||||
{{ $t('common.delete') }}</el-dropdown-item
|
||||
>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</app-table>
|
||||
</el-card>
|
||||
<SyncWebDialog ref="SyncWebDialogRef" />
|
||||
<GenerateRelatedDialog ref="GenerateRelatedDialogRef" apiType="systemManage" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref, reactive, computed } from 'vue'
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import KnowledgeResourceApi from '@/api/system-resource-management/knowledge'
|
||||
import { t } from '@/locales'
|
||||
import useStore from '@/stores'
|
||||
import UserApi from '@/api/user/user'
|
||||
import SyncWebDialog from '@/views/knowledge/component/SyncWebDialog.vue'
|
||||
import GenerateRelatedDialog from '@/components/generate-related-dialog/index.vue'
|
||||
import { datetimeFormat } from '@/utils/time'
|
||||
import { loadPermissionApi } from '@/utils/dynamics-api/permission-api.ts'
|
||||
import UserApi from '@/api/user/user'
|
||||
|
||||
import permissionMap from '@/permission'
|
||||
import { MsgSuccess, MsgConfirm } from '@/utils/message'
|
||||
import { t } from '@/locales'
|
||||
import useStore from '@/stores'
|
||||
const router = useRouter()
|
||||
const { user } = useStore()
|
||||
|
||||
const permissionPrecise = computed(() => {
|
||||
return permissionMap['knowledge']['systemManage']
|
||||
})
|
||||
|
||||
const search_type = ref('name')
|
||||
const search_form = ref<any>({
|
||||
name: '',
|
||||
@ -169,6 +278,54 @@ const paginationConfig = reactive({
|
||||
page_size: 20,
|
||||
total: 0,
|
||||
})
|
||||
|
||||
const exportKnowledge = (item: any) => {
|
||||
KnowledgeResourceApi.exportKnowledge(item.name, item.id, loading).then(() => {
|
||||
MsgSuccess(t('common.exportSuccess'))
|
||||
})
|
||||
}
|
||||
const exportZipKnowledge = (item: any) => {
|
||||
KnowledgeResourceApi.exportZipKnowledge(item.name, item.id, loading).then(() => {
|
||||
MsgSuccess(t('common.exportSuccess'))
|
||||
})
|
||||
}
|
||||
|
||||
function deleteKnowledge(row: any) {
|
||||
MsgConfirm(
|
||||
`${t('views.knowledge.delete.confirmTitle')}${row.name} ?`,
|
||||
`${t('views.knowledge.delete.confirmMessage1')} ${row.application_mapping_count} ${t('views.knowledge.delete.confirmMessage2')}`,
|
||||
{
|
||||
confirmButtonText: t('common.confirm'),
|
||||
confirmButtonClass: 'danger',
|
||||
},
|
||||
)
|
||||
.then(() => {
|
||||
KnowledgeResourceApi.delKnowledge(row.id, loading).then(() => {
|
||||
getList()
|
||||
MsgSuccess(t('common.deleteSuccess'))
|
||||
})
|
||||
})
|
||||
.catch(() => {})
|
||||
}
|
||||
|
||||
const GenerateRelatedDialogRef = ref<InstanceType<typeof GenerateRelatedDialog>>()
|
||||
function openGenerateDialog(row: any) {
|
||||
if (GenerateRelatedDialogRef.value) {
|
||||
GenerateRelatedDialogRef.value.open([], 'knowledge', row)
|
||||
}
|
||||
}
|
||||
|
||||
const SyncWebDialogRef = ref()
|
||||
function syncKnowledge(row: any) {
|
||||
SyncWebDialogRef.value.open(row.id)
|
||||
}
|
||||
|
||||
function reEmbeddingKnowledge(row: any) {
|
||||
KnowledgeResourceApi.putReEmbeddingKnowledge(row.id).then(() => {
|
||||
MsgSuccess(t('common.submitSuccess'))
|
||||
})
|
||||
}
|
||||
|
||||
const workspaceOptions = ref<any[]>([])
|
||||
const workspaceVisible = ref(false)
|
||||
const workspaceArr = ref<any[]>([])
|
||||
|
||||
@ -161,14 +161,71 @@
|
||||
{{ datetimeFormat(row.create_time) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="$t('common.operation')" align="left" width="120" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-tooltip effect="dark" :content="$t('common.modify')" placement="top">
|
||||
<span class="mr-8">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
:title="$t('common.modify')"
|
||||
v-if="permissionPrecise.modify(row.id)"
|
||||
@click.stop="openEditModel(row)"
|
||||
>
|
||||
<el-icon><EditPen /></el-icon>
|
||||
</el-button>
|
||||
</span>
|
||||
</el-tooltip>
|
||||
<el-tooltip
|
||||
effect="dark"
|
||||
:content="$t('views.model.modelForm.title.paramSetting')"
|
||||
placement="top"
|
||||
>
|
||||
<span class="mr-8">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
:title="$t('views.model.modelForm.title.paramSetting')"
|
||||
v-if="
|
||||
(row.model_type === 'TTS' ||
|
||||
row.model_type === 'LLM' ||
|
||||
row.model_type === 'IMAGE' ||
|
||||
row.model_type === 'TTI') &&
|
||||
permissionPrecise.paramSetting(row.id)
|
||||
"
|
||||
@click.stop="openParamSetting(row)"
|
||||
>
|
||||
<el-icon><Delete /></el-icon>
|
||||
</el-button>
|
||||
</span>
|
||||
</el-tooltip>
|
||||
<el-tooltip effect="dark" :content="$t('common.delete')" placement="top">
|
||||
<span class="mr-8">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
:title="$t('common.delete')"
|
||||
v-if="permissionPrecise.delete(row.id)"
|
||||
@click.stop="deleteModel(row)"
|
||||
>
|
||||
<el-icon><Delete /></el-icon>
|
||||
</el-button>
|
||||
</span>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</app-table>
|
||||
</el-card>
|
||||
<EditModel ref="editModelRef" @submit="getList"></EditModel>
|
||||
<ParamSettingDialog ref="paramSettingRef" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onBeforeMount, onMounted, ref, reactive, nextTick, computed } from 'vue'
|
||||
import type { Provider, Model } from '@/api/type/model'
|
||||
import EditModel from '@/views/model/component/EditModel.vue'
|
||||
import ParamSettingDialog from '@/views/model/component/ParamSettingDialog.vue'
|
||||
import ModelResourceApi from '@/api/system-resource-management/model'
|
||||
import { modelTypeList } from '@/views/model/component/data'
|
||||
import { modelType } from '@/enums/model'
|
||||
@ -177,6 +234,8 @@ import useStore from '@/stores'
|
||||
import { datetimeFormat } from '@/utils/time'
|
||||
import { loadPermissionApi } from '@/utils/dynamics-api/permission-api.ts'
|
||||
import UserApi from '@/api/user/user.ts'
|
||||
import permissionMap from '@/permission'
|
||||
import { MsgConfirm, MsgSuccess } from '@/utils/message'
|
||||
|
||||
const { user, model } = useStore()
|
||||
|
||||
@ -192,7 +251,6 @@ const model_search_form = ref<{
|
||||
})
|
||||
|
||||
const loading = ref(false)
|
||||
const changeStateloading = ref(false)
|
||||
const modelList = ref<Array<Model>>([])
|
||||
const user_options = ref<any[]>([])
|
||||
const provider_list = ref<Array<Provider>>([])
|
||||
@ -203,6 +261,41 @@ const paginationConfig = reactive({
|
||||
total: 0,
|
||||
})
|
||||
|
||||
const deleteModel = (row: any) => {
|
||||
MsgConfirm(
|
||||
`${t('views.model.delete.confirmTitle')}${row.name} ?`,
|
||||
t('views.model.delete.confirmMessage'),
|
||||
{
|
||||
confirmButtonText: t('common.confirm'),
|
||||
confirmButtonClass: 'danger',
|
||||
},
|
||||
)
|
||||
.then(() => {
|
||||
ModelResourceApi.deleteModel(row.id).then(() => {
|
||||
getList()
|
||||
MsgSuccess(t('common.deleteSuccess'))
|
||||
})
|
||||
})
|
||||
.catch(() => {})
|
||||
}
|
||||
|
||||
const paramSettingRef = ref<InstanceType<typeof ParamSettingDialog>>()
|
||||
const openParamSetting = (row: any) => {
|
||||
paramSettingRef.value?.open(row)
|
||||
}
|
||||
|
||||
const editModelRef = ref<InstanceType<typeof EditModel>>()
|
||||
const openEditModel = (row: any) => {
|
||||
const provider = provider_list.value.find((p) => p.provider === row.provider)
|
||||
if (provider) {
|
||||
editModelRef.value?.open(provider, row)
|
||||
}
|
||||
}
|
||||
|
||||
const permissionPrecise = computed(() => {
|
||||
return permissionMap['model']['systemManage']
|
||||
})
|
||||
|
||||
const workspaceOptions = ref<any[]>([])
|
||||
const workspaceVisible = ref(false)
|
||||
const workspaceArr = ref<any[]>([])
|
||||
|
||||
Loading…
Reference in New Issue
Block a user