UnisKB/ui/src/views/knowledge/KnowledgeSetting.vue

286 lines
9.6 KiB
Vue
Raw Normal View History

2025-06-05 12:15:55 +00:00
<template>
<div class="p-16-24">
<h2 class="mb-16">{{ $t('common.setting') }}</h2>
<el-card style="--el-card-padding: 0">
<div class="knowledge-setting main-calc-height">
<el-scrollbar>
<div class="p-24" v-loading="loading">
<h4 class="title-decoration-1 mb-16">
{{ $t('common.info') }}
</h4>
2025-06-06 08:32:03 +00:00
<BaseForm ref="BaseFormRef" :data="detail" />
2025-06-05 12:15:55 +00:00
<el-form
ref="webFormRef"
:rules="rules"
:model="form"
label-position="top"
require-asterisk-position="right"
>
<el-form-item :label="$t('views.knowledge.knowledgeType.label')" required>
2025-06-06 08:32:03 +00:00
<el-card
shadow="never"
class="mb-8 w-full"
style="line-height: 22px"
v-if="detail.type === 0"
>
2025-06-05 12:15:55 +00:00
<div class="flex align-center">
<el-avatar class="mr-8 avatar-blue" shape="square" :size="32">
2025-06-06 08:32:03 +00:00
<img src="@/assets/knowledge/icon_document.svg" style="width: 58%" alt="" />
2025-06-05 12:15:55 +00:00
</el-avatar>
<div>
<div>{{ $t('views.knowledge.knowledgeType.generalKnowledge') }}</div>
<el-text type="info"
2025-06-06 08:32:03 +00:00
>{{ $t('views.knowledge.knowledgeType.generalInfo') }}
2025-06-05 12:15:55 +00:00
</el-text>
</div>
</div>
</el-card>
2025-06-06 08:32:03 +00:00
<el-card
shadow="never"
class="mb-8 w-full"
style="line-height: 22px"
v-if="detail?.type === 1"
>
2025-06-05 12:15:55 +00:00
<div class="flex align-center">
<el-avatar class="mr-8 avatar-purple" shape="square" :size="32">
2025-06-06 08:32:03 +00:00
<img src="@/assets/knowledge/icon_web.svg" style="width: 58%" alt="" />
2025-06-05 12:15:55 +00:00
</el-avatar>
<div>
<div>{{ $t('views.knowledge.knowledgeType.webKnowledge') }}</div>
<el-text type="info">
{{ $t('views.knowledge.knowledgeType.webInfo') }}
</el-text>
</div>
</div>
</el-card>
2025-06-06 08:32:03 +00:00
<el-card
shadow="never"
class="mb-8 w-full"
style="line-height: 22px"
v-if="detail?.type === 2"
>
2025-06-05 12:15:55 +00:00
<div class="flex align-center">
<el-avatar shape="square" :size="32" style="background: none">
2025-06-06 08:32:03 +00:00
<img src="@/assets/knowledge/logo_lark.svg" style="width: 100%" alt="" />
2025-06-05 12:15:55 +00:00
</el-avatar>
<div>
<p>
<el-text>{{ $t('views.knowledge.knowledgeType.larkKnowledge') }}</el-text>
</p>
<el-text type="info"
2025-06-06 08:32:03 +00:00
>{{ $t('views.knowledge.knowledgeType.larkInfo') }}
2025-06-05 12:15:55 +00:00
</el-text>
</div>
</div>
</el-card>
</el-form-item>
<el-form-item
:label="$t('views.knowledge.form.source_url.label')"
prop="source_url"
v-if="detail.type === 1"
>
<el-input
v-model="form.source_url"
:placeholder="$t('views.knowledge.form.source_url.placeholder')"
@blur="form.source_url = form.source_url.trim()"
/>
</el-form-item>
<el-form-item
:label="$t('views.knowledge.form.selector.label')"
v-if="detail.type === 1"
>
<el-input
v-model="form.selector"
:placeholder="$t('views.knowledge.form.selector.placeholder')"
@blur="form.selector = form.selector.trim()"
/>
</el-form-item>
<el-form-item label="App ID" prop="app_id" v-if="detail.type === 2">
<el-input
v-model="form.app_id"
:placeholder="
$t('views.application.applicationAccess.larkSetting.appIdPlaceholder')
"
/>
</el-form-item>
<el-form-item label="App Secret" prop="app_id" v-if="detail.type === 2">
<el-input
v-model="form.app_secret"
type="password"
show-password
:placeholder="
$t('views.application.applicationAccess.larkSetting.appSecretPlaceholder')
"
/>
</el-form-item>
<el-form-item label="Folder Token" prop="folder_token" v-if="detail.type === 2">
<el-input
v-model="form.folder_token"
:placeholder="
$t('views.application.applicationAccess.larkSetting.folderTokenPlaceholder')
"
/>
</el-form-item>
2025-06-06 08:32:03 +00:00
<div v-if="detail.type === 0">
<h4 class="title-decoration-1 mb-16">
{{ $t('common.otherSetting') }}
</h4>
</div>
<el-form-item :label="$t('上传的每个文档最大限制')">
<el-slider
2025-06-16 12:18:01 +00:00
v-model="form.file_count_limit"
2025-06-06 08:32:03 +00:00
show-input
:show-input-controls="false"
2025-06-16 12:18:01 +00:00
:min="1"
:max="1000"
2025-06-06 08:32:03 +00:00
class="custom-slider"
/>
</el-form-item>
</el-form>
2025-06-05 12:15:55 +00:00
<div class="text-right">
<el-button @click="submit" type="primary"> {{ $t('common.save') }}</el-button>
</div>
</div>
</el-scrollbar>
</div>
</el-card>
</div>
</template>
<script setup lang="ts">
2025-06-06 08:32:03 +00:00
import { ref, onMounted, reactive } from 'vue'
import { useRoute } from 'vue-router'
2025-06-05 12:15:55 +00:00
import BaseForm from '@/views/knowledge/component/BaseForm.vue'
import KnowledgeApi from '@/api/knowledge/knowledge'
2025-06-06 08:32:03 +00:00
import type { ApplicationFormType } from '@/api/type/application'
import { MsgSuccess, MsgConfirm } from '@/utils/message'
import { isAppIcon } from '@/utils/common'
2025-06-05 12:15:55 +00:00
import useStore from '@/stores'
2025-06-06 08:32:03 +00:00
import { t } from '@/locales'
2025-06-05 12:15:55 +00:00
const route = useRoute()
const {
2025-06-06 08:32:03 +00:00
params: { id },
2025-06-05 12:15:55 +00:00
} = route as any
2025-06-06 08:32:03 +00:00
const { knowledge } = useStore()
2025-06-05 12:15:55 +00:00
const webFormRef = ref()
const BaseFormRef = ref()
const loading = ref(false)
const detail = ref<any>({})
const cloneModelId = ref('')
const form = ref<any>({
source_url: '',
selector: '',
app_id: '',
app_secret: '',
folder_token: '',
2025-06-16 12:18:01 +00:00
file_count_limit: 100,
2025-06-05 12:15:55 +00:00
})
const rules = reactive({
source_url: [
{
required: true,
message: t('views.knowledge.form.source_url.requiredMessage'),
trigger: 'blur',
},
],
app_id: [
{
required: true,
message: t('views.application.applicationAccess.larkSetting.appIdPlaceholder'),
trigger: 'blur',
},
],
app_secret: [
{
required: true,
message: t('views.application.applicationAccess.larkSetting.appSecretPlaceholder'),
trigger: 'blur',
},
],
folder_token: [
{
required: true,
message: t('views.application.applicationAccess.larkSetting.folderTokenPlaceholder'),
trigger: 'blur',
},
],
})
async function submit() {
if (await BaseFormRef.value?.validate()) {
await webFormRef.value.validate((valid: any) => {
if (valid) {
const obj =
2025-06-09 09:44:07 +00:00
detail.value.type === 1 || detail.value.type === 2
2025-06-05 12:15:55 +00:00
? {
2025-06-06 08:32:03 +00:00
meta: form.value,
...BaseFormRef.value.form,
}
2025-06-05 12:15:55 +00:00
: {
2025-06-06 08:32:03 +00:00
...BaseFormRef.value.form,
}
2025-06-05 12:15:55 +00:00
if (cloneModelId.value !== BaseFormRef.value.form.embedding_mode_id) {
MsgConfirm(t('common.tip'), t('views.knowledge.tip.updateModeMessage'), {
confirmButtonText: t('views.knowledge.setting.vectorization'),
})
.then(() => {
if (detail.value.type === 2) {
2025-06-13 09:17:01 +00:00
// KnowledgeApi.putLarkKnowledge(id, obj, loading).then((res) => {
// KnowledgeApi.putReEmbeddingKnowledge(id).then(() => {
// MsgSuccess(t('common.saveSuccess'))
// })
// })
2025-06-05 12:15:55 +00:00
} else {
2025-06-06 01:39:01 +00:00
KnowledgeApi.putKnowledge(id, obj, loading).then((res) => {
2025-06-09 09:44:07 +00:00
KnowledgeApi.putReEmbeddingKnowledge(id).then(() => {
2025-06-05 12:15:55 +00:00
MsgSuccess(t('common.saveSuccess'))
})
})
}
})
2025-06-06 08:32:03 +00:00
.catch(() => {})
2025-06-05 12:15:55 +00:00
} else {
if (detail.value.type === 2) {
2025-06-13 09:17:01 +00:00
// KnowledgeApi.putLarkKnowledge(id, obj, loading).then((res) => {
// KnowledgeApi.putReEmbeddingKnowledge(id).then(() => {
// MsgSuccess(t('common.saveSuccess'))
// })
// })
2025-06-05 12:15:55 +00:00
} else {
2025-06-06 01:39:01 +00:00
KnowledgeApi.putKnowledge(id, obj, loading).then((res) => {
2025-06-05 12:15:55 +00:00
MsgSuccess(t('common.saveSuccess'))
})
}
}
}
})
}
}
function getDetail() {
2025-06-09 09:44:07 +00:00
knowledge.asyncGetKnowledgeDetail(id, loading).then((res: any) => {
2025-06-05 12:15:55 +00:00
detail.value = res.data
cloneModelId.value = res.data?.embedding_mode_id
if (detail.value.type === '1' || detail.value.type === '2') {
form.value = res.data.meta
}
})
}
onMounted(() => {
getDetail()
})
</script>
<style lang="scss" scoped>
.knowledge-setting {
width: 70%;
margin: 0 auto;
}
</style>