fix:修复开场白路由跳转后页面空白

This commit is contained in:
wenjinbo 2025-08-08 15:44:51 +08:00
parent 99fcfd22db
commit a023719e5c
1 changed files with 69 additions and 9 deletions

View File

@ -1,4 +1,5 @@
<template>
<div v-if="isComponentActive" class="prologue-manage-container">
<el-card>
<el-form :model="form" label-width="120px">
<el-form-item>
@ -15,7 +16,7 @@
</el-select>
</el-form-item>
<el-form-item :label="t('vabI18n.prologue.openingContent')">
<el-input type="textarea" v-model="form.content" rows="8"></el-input>
<el-input type="textarea" v-model="form.content" :rows="8"></el-input>
</el-form-item>
<!-- 新增推荐问题 -->
@ -28,8 +29,8 @@
<el-table-column :label="t('vabI18n.prologue.recommendation')" prop="questionContent" />
<el-table-column :label="t('vabI18n.prologue.action')" width="180">
<template v-slot="scope">
<el-button size="mini" @click="editRecommend(scope.row)">{{t('vabI18n.prologue.edit')}}</el-button>
<el-button size="mini" type="danger" @click="deleteRecommend(scope.row)">{{t('vabI18n.prologue.delete')}}</el-button>
<el-button size="small" @click="editRecommend(scope.row)">{{t('vabI18n.prologue.edit')}}</el-button>
<el-button size="small" type="danger" @click="deleteRecommend(scope.row)">{{t('vabI18n.prologue.delete')}}</el-button>
</template>
</el-table-column>
</el-table>
@ -53,7 +54,7 @@
<!-- 编辑推荐问题弹窗 -->
<el-dialog v-model="editdialogVisible" :title="t('vabI18n.prologue.dialog.editTitle')">
<el-form :model="currentRecommendation" label-width="120px">
<el-form-item label="t('vabI18n.prologue.dialog.questionContent')">
<el-form-item :label="t('vabI18n.prologue.dialog.questionContent')">
<el-input v-model="currentRecommendation.questionContent" />
</el-form-item>
</el-form>
@ -63,10 +64,11 @@
</span>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { ref, watch, onMounted } from 'vue'
import { ref, watch, onMounted, onBeforeUnmount, nextTick } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { getRemark, saveRemark, getRecommendations, editRecommendation, deleteRecommendation, addRecommendation } from '@/api/prologue'
import { useI18n } from 'vue-i18n'
@ -75,6 +77,8 @@
defineOptions({
name: 'prologueManage',
//
inheritAttrs: false,
})
const form = ref({
@ -98,7 +102,7 @@
if (res.data) {
form.value.content = res.data.content
ElMessage.success(t('vabI18n.prologue.message.loadSuccess'))
await loadRecommendations() //
await safeLoadRecommendations() //
} else {
form.value.content = ''
ElMessage.error(t('vabI18n.prologue.message.notFound'))
@ -125,7 +129,7 @@
watch(
() => form.value.chatType,
() => {
load()
safeLoad()
}
)
@ -193,13 +197,69 @@
try {
await deleteRecommendation(row.id) // id
ElMessage.success(t('vabI18n.prologue.message.deleteSuccess'))
await loadRecommendations() //
await safeLoadRecommendations() //
} catch (error) {
ElMessage.error(t('vabI18n.prologue.message.deleteFailed'))
}
})
}
//
const isComponentActive = ref(true)
//
const safeAsyncOperation = async (operation: () => Promise<void>) => {
if (!isComponentActive.value) return
try {
await operation()
} catch (error) {
if (isComponentActive.value) {
console.error('Async operation failed:', error)
}
}
}
// 使
const safeLoad = () => safeAsyncOperation(load)
const safeLoadRecommendations = () => safeAsyncOperation(loadRecommendations)
//
onMounted(load)
onMounted(() => {
nextTick(() => {
safeLoad()
})
})
//
onBeforeUnmount(() => {
isComponentActive.value = false
//
form.value = {
chatType: '1',
content: '',
}
recommendations.value = []
dialogVisible.value = false
editdialogVisible.value = false
})
</script>
<style lang="scss" scoped>
.prologue-manage-container {
width: 100%;
min-height: 100vh;
padding: 20px;
.el-card {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
}
.dialog-footer {
text-align: right;
}
.el-table {
margin-top: 20px;
}
}
</style>