|
|
@@ -16,11 +16,18 @@
|
|
|
</el-button>
|
|
|
</div>
|
|
|
<div class="flex">
|
|
|
- <el-button v-permission="{ buttonCode: 'import_qa', menuCode: 'sys_ai_knowledge_base' }" @click="openImportModal">
|
|
|
+ <el-button
|
|
|
+ v-permission="{ buttonCode: 'import_qa', menuCode: 'sys_ai_knowledge_base' }"
|
|
|
+ @click="openImportModal"
|
|
|
+ >
|
|
|
<el-icon><Upload /></el-icon>
|
|
|
{{ t('pages.knowledge.qa.templateImport') }}
|
|
|
</el-button>
|
|
|
- <el-button v-permission="{ buttonCode: 'add_qa', menuCode: 'sys_ai_knowledge_base' }" type="primary" @click="openCreateDrawer">
|
|
|
+ <el-button
|
|
|
+ v-permission="{ buttonCode: 'add_qa', menuCode: 'sys_ai_knowledge_base' }"
|
|
|
+ type="primary"
|
|
|
+ @click="openCreateDrawer"
|
|
|
+ >
|
|
|
<el-icon><Plus /></el-icon>
|
|
|
{{ t('pages.knowledge.qa.addQa') }}
|
|
|
</el-button>
|
|
|
@@ -36,7 +43,11 @@
|
|
|
</template>
|
|
|
|
|
|
<el-table v-if="faqList.length || loading" :data="faqList" v-loading="loading" border>
|
|
|
- <el-table-column prop="standard_question" :label="t('pages.knowledge.qa.standardQuestion')" min-width="260" />
|
|
|
+ <el-table-column
|
|
|
+ prop="standard_question"
|
|
|
+ :label="t('pages.knowledge.qa.standardQuestion')"
|
|
|
+ min-width="260"
|
|
|
+ />
|
|
|
<el-table-column :label="t('pages.knowledge.qa.answer')" min-width="260">
|
|
|
<template #default="{ row }">
|
|
|
<span class="answers-preview">{{ formatAnswers(row.answers) }}</span>
|
|
|
@@ -57,12 +68,30 @@
|
|
|
<el-switch :model-value="!!row.is_enabled" @change="toggleFaqStatus(row, $event)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="creationTime" :label="t('pages.knowledge.qa.creationTime')" width="180" />
|
|
|
+ <el-table-column
|
|
|
+ prop="creationTime"
|
|
|
+ :label="t('pages.knowledge.qa.creationTime')"
|
|
|
+ width="180"
|
|
|
+ />
|
|
|
<el-table-column :label="t('pages.knowledge.qa.actions')" width="160" fixed="right">
|
|
|
<template #default="{ row }">
|
|
|
- <el-button link type="primary" @click="openDetailDialog(row.id)">{{ t('pages.knowledge.qa.detail') }}</el-button>
|
|
|
- <el-button v-permission="{ buttonCode: 'edit_qa', menuCode: 'sys_ai_knowledge_base' }" link type="primary" @click="openEditDrawer(row)">{{ t('common.edit') }}</el-button>
|
|
|
- <el-button v-permission="{ buttonCode: 'del_qa', menuCode: 'sys_ai_knowledge_base' }" link type="danger" @click="removeFaq(row.id)">{{ t('common.delete') }}</el-button>
|
|
|
+ <el-button link type="primary" @click="openDetailDialog(row.id)">{{
|
|
|
+ t('pages.knowledge.qa.detail')
|
|
|
+ }}</el-button>
|
|
|
+ <el-button
|
|
|
+ v-permission="{ buttonCode: 'edit_qa', menuCode: 'sys_ai_knowledge_base' }"
|
|
|
+ link
|
|
|
+ type="primary"
|
|
|
+ @click="openEditDrawer(row)"
|
|
|
+ >{{ t('common.edit') }}</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ v-permission="{ buttonCode: 'del_qa', menuCode: 'sys_ai_knowledge_base' }"
|
|
|
+ link
|
|
|
+ type="danger"
|
|
|
+ @click="removeFaq(row.id)"
|
|
|
+ >{{ t('common.delete') }}</el-button
|
|
|
+ >
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<template #empty>{{ t('pages.knowledge.qa.noContent') }}</template>
|
|
|
@@ -89,8 +118,14 @@
|
|
|
size="680px"
|
|
|
>
|
|
|
<el-form ref="formRef" :model="form" :rules="rules" label-position="top" label-width="100%">
|
|
|
- <el-form-item :label="t('pages.knowledge.qa.standardQuestionLabel')" prop="standard_question">
|
|
|
- <el-input v-model="form.standard_question" :placeholder="t('pages.knowledge.qa.standardQuestionPlaceholder')" />
|
|
|
+ <el-form-item
|
|
|
+ :label="t('pages.knowledge.qa.standardQuestionLabel')"
|
|
|
+ prop="standard_question"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-model="form.standard_question"
|
|
|
+ :placeholder="t('pages.knowledge.qa.standardQuestionPlaceholder')"
|
|
|
+ />
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item>
|
|
|
@@ -201,7 +236,9 @@
|
|
|
<template #footer>
|
|
|
<div class="drawer-footer">
|
|
|
<el-button @click="drawerVisible = false">{{ t('common.cancel') }}</el-button>
|
|
|
- <el-button type="primary" :loading="submitLoading" @click="submitForm">{{ t('common.save') }}</el-button>
|
|
|
+ <el-button type="primary" :loading="submitLoading" @click="submitForm">{{
|
|
|
+ t('common.save')
|
|
|
+ }}</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-drawer>
|
|
|
@@ -267,7 +304,11 @@
|
|
|
<div class="detail-item__label">{{ t('pages.knowledge.qa.enabledStatus') }}</div>
|
|
|
<div class="detail-item__value">
|
|
|
<el-tag :type="detailData.is_enabled ? 'success' : 'warning'">
|
|
|
- {{ detailData.is_enabled ? t('pages.knowledge.qa.enabledOn') : t('pages.knowledge.qa.enabledOff') }}
|
|
|
+ {{
|
|
|
+ detailData.is_enabled
|
|
|
+ ? t('pages.knowledge.qa.enabledOn')
|
|
|
+ : t('pages.knowledge.qa.enabledOff')
|
|
|
+ }}
|
|
|
</el-tag>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -286,7 +327,11 @@
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
<!-- 导入弹窗 -->
|
|
|
- <el-dialog v-model="importDialogVisible" :title="t('pages.knowledge.qa.importTitle')" width="500px">
|
|
|
+ <el-dialog
|
|
|
+ v-model="importDialogVisible"
|
|
|
+ :title="t('pages.knowledge.qa.importTitle')"
|
|
|
+ width="500px"
|
|
|
+ >
|
|
|
<el-form> </el-form>
|
|
|
<div class="import-modal-content">
|
|
|
<div class="import-step">
|
|
|
@@ -301,7 +346,10 @@
|
|
|
|
|
|
<div class="import-step">
|
|
|
<div class="step-title">{{ t('pages.knowledge.qa.importMode') }}</div>
|
|
|
- <el-select v-model="importFormData.mode" :placeholder="t('pages.knowledge.qa.selectPlaceholder')">
|
|
|
+ <el-select
|
|
|
+ v-model="importFormData.mode"
|
|
|
+ :placeholder="t('pages.knowledge.qa.selectPlaceholder')"
|
|
|
+ >
|
|
|
<el-option :label="t('pages.knowledge.qa.importAppend')" value="append"></el-option>
|
|
|
<el-option :label="t('pages.knowledge.qa.importReplace')" value="replace"></el-option>
|
|
|
</el-select>
|
|
|
@@ -354,12 +402,16 @@
|
|
|
<el-tag :type="getImportTaskStatusTag(importTaskInfo?.status)">
|
|
|
{{ getImportTaskStatusText(importTaskInfo?.status) }}
|
|
|
</el-tag>
|
|
|
- <span class="import-task__progress"> {{ t('pages.knowledge.qa.progress') }}:{{ importTaskInfo?.progress || '-' }} </span>
|
|
|
+ <span class="import-task__progress">
|
|
|
+ {{ t('pages.knowledge.qa.progress') }}:{{ importTaskInfo?.progress || '-' }}
|
|
|
+ </span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<template #footer>
|
|
|
<div class="drawer-footer">
|
|
|
- <el-button @click="handleImportTaskDialogClose">{{ t('pages.knowledge.qa.close') }}</el-button>
|
|
|
+ <el-button @click="handleImportTaskDialogClose">{{
|
|
|
+ t('pages.knowledge.qa.close')
|
|
|
+ }}</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
@@ -452,7 +504,9 @@ const createDefaultForm = (): FaqForm => ({
|
|
|
const form = reactive<FaqForm>(createDefaultForm())
|
|
|
|
|
|
const rules = {
|
|
|
- standard_question: [{ required: true, message: t('pages.knowledge.qa.standardQuestionRequired'), trigger: 'blur' }],
|
|
|
+ standard_question: [
|
|
|
+ { required: true, message: t('pages.knowledge.qa.standardQuestionRequired'), trigger: 'blur' }
|
|
|
+ ],
|
|
|
answers: [
|
|
|
{
|
|
|
validator: (_rule: unknown, value: string[], callback: (error?: Error) => void) => {
|
|
|
@@ -587,13 +641,15 @@ async function submitForm() {
|
|
|
is_enabled: form.is_enabled
|
|
|
}
|
|
|
if (form.id) {
|
|
|
- await knowledge.postAiFaqUpdate({ id: form.id, ...payload })
|
|
|
+ const res = await knowledge.postAiFaqUpdate({ id: form.id, ...payload })
|
|
|
+ if (!res.isSuccess) return
|
|
|
ElMessage.success(t('pages.knowledge.qa.updateSuccess'))
|
|
|
} else {
|
|
|
- await knowledge.postAiFaqCreate({
|
|
|
+ const res = await knowledge.postAiFaqCreate({
|
|
|
knowledge_base_id: props.currentBaseId,
|
|
|
...payload
|
|
|
})
|
|
|
+ if (!res.isSuccess) return
|
|
|
ElMessage.success(t('pages.knowledge.qa.createSuccess'))
|
|
|
}
|
|
|
drawerVisible.value = false
|
|
|
@@ -615,7 +671,7 @@ async function toggleFaqStatus(row: FaqItem, value: string | number | boolean) {
|
|
|
ElMessage.error(t('pages.knowledge.qa.detailLoadFailed'))
|
|
|
return
|
|
|
}
|
|
|
- await knowledge.postAiFaqUpdate({
|
|
|
+ const res = await knowledge.postAiFaqUpdate({
|
|
|
id: row.id,
|
|
|
standard_question: detail.standard_question || '',
|
|
|
similar_questions: normalizeStringArray(detail.similar_questions),
|
|
|
@@ -623,20 +679,26 @@ async function toggleFaqStatus(row: FaqItem, value: string | number | boolean) {
|
|
|
answers: normalizeStringArray(detail.answers),
|
|
|
is_enabled: Boolean(value)
|
|
|
})
|
|
|
+ if (!res.isSuccess) return
|
|
|
ElMessage.success(t('pages.knowledge.qa.statusUpdated'))
|
|
|
await fetchFaqList()
|
|
|
}
|
|
|
|
|
|
async function removeFaq(id?: string) {
|
|
|
if (!id) return
|
|
|
- const confirmed = await ElMessageBox.confirm(t('pages.knowledge.qa.confirmDelete'), t('pages.knowledge.qa.deleteTitle'), {
|
|
|
- type: 'warning'
|
|
|
- })
|
|
|
+ const confirmed = await ElMessageBox.confirm(
|
|
|
+ t('pages.knowledge.qa.confirmDelete'),
|
|
|
+ t('pages.knowledge.qa.deleteTitle'),
|
|
|
+ {
|
|
|
+ type: 'warning'
|
|
|
+ }
|
|
|
+ )
|
|
|
.then(() => true)
|
|
|
.catch(() => false)
|
|
|
if (!confirmed) return
|
|
|
|
|
|
- await knowledge.postAiFaqOpenApiDelete({ id })
|
|
|
+ const res = await knowledge.postAiFaqOpenApiDelete({ id })
|
|
|
+ if (!res.isSuccess) return
|
|
|
ElMessage.success(t('pages.knowledge.qa.deleteSuccess'))
|
|
|
await refreshFaqList()
|
|
|
}
|