优化“知识库模块“--基本完善

This commit is contained in:
Cheng Zhou
2025-12-26 14:07:28 +08:00
parent a1a4964cd2
commit 7c9befc3c9
23 changed files with 1345 additions and 110 deletions
+10 -12
View File
@@ -1,14 +1,14 @@
<template>
<div class="page">
<el-row :gutter="12">
<el-col :span="6">
<el-col :span="5">
<FaqCategoryPanel
v-model="activeCategory"
:categories="categories"
@refresh="loadCategories"
/>
</el-col>
<el-col :span="18">
<el-col :span="19">
<el-card class="mb-12">
<div class="filters">
<el-input
@@ -18,14 +18,9 @@
@keyup.enter="loadFaqs"
style="width: 260px"
/>
<el-select v-model="studyScope" placeholder="范围" clearable style="width: 160px" @change="loadFaqs">
<el-option label="项目 FAQ" value="project" />
<el-option label="全局 FAQ" value="global" />
<el-option label="全部" value="all" />
</el-select>
<el-switch v-model="onlyActive" active-text="仅启用" @change="loadFaqs" />
<div class="spacer" />
<PermissionAction action="faq.edit">
<PermissionAction action="faq.create">
<el-button type="primary" @click="openForm()">新建 FAQ</el-button>
</PermissionAction>
</div>
@@ -37,7 +32,6 @@
:loading="loading"
:can-edit="canEdit"
@refresh="loadFaqs"
@edit="openForm"
/>
<el-pagination
class="pagination"
@@ -55,7 +49,7 @@
</template>
<script setup lang="ts">
import { computed, onMounted, ref } from "vue";
import { computed, onMounted, ref, watch } from "vue";
import { ElMessage } from "element-plus";
import { fetchFaqCategories, fetchFaqItems } from "../api/faqs";
import FaqCategoryPanel from "../components/FaqCategoryPanel.vue";
@@ -77,7 +71,6 @@ const pageSize = 10;
const total = ref(0);
const keyword = ref("");
const onlyActive = ref(true);
const studyScope = ref("project");
const activeCategory = ref("");
const showForm = ref(false);
const editing = ref<any | null>(null);
@@ -89,6 +82,7 @@ const loadCategories = async () => {
try {
const params: Record<string, any> = {};
if (study.currentStudy) params.study_id = study.currentStudy.id;
params.include_global = false;
const { data } = await fetchFaqCategories(params);
categories.value = data.items || data || [];
} catch (e: any) {
@@ -108,7 +102,6 @@ const loadFaqs = async () => {
if (activeCategory.value) params.category_id = activeCategory.value;
if (keyword.value) params.keyword = keyword.value;
if (onlyActive.value) params.is_active = true;
if (studyScope.value) params.study_scope = studyScope.value;
const { data } = await fetchFaqItems(params);
if (Array.isArray(data)) {
faqs.value = data;
@@ -129,6 +122,11 @@ const onPageChange = (p: number) => {
loadFaqs();
};
watch(activeCategory, () => {
page.value = 1;
loadFaqs();
});
const openForm = (row?: any) => {
editing.value = row || null;
showForm.value = true;