index.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <template>
  2. <div class="knowledge-error-container layout-pd">
  3. <el-card shadow="never">
  4. <el-form :model="state.queryParams" ref="ruleFormRef" inline @submit.native.prevent>
  5. <el-form-item label="纠错人" prop="CreatorName">
  6. <el-input v-model="state.queryParams.CreatorName" placeholder="请输入纠错人" clearable @keyup.enter="queryList" class="keyword-input" />
  7. </el-form-item>
  8. <el-form-item label="知识分类" prop="KnowledgeTypeId">
  9. <el-cascader
  10. :options="state.typeData"
  11. filterable
  12. :props="{ checkStrictly: true, value: 'id', label: 'name', emitPath: false, children: 'children' }"
  13. placeholder="请选择知识分类"
  14. v-model="state.queryParams.KnowledgeTypeId"
  15. ref="cascadeRef"
  16. >
  17. </el-cascader>
  18. </el-form-item>
  19. <el-form-item>
  20. <el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
  21. <el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
  22. </el-form-item>
  23. </el-form>
  24. </el-card>
  25. <el-card shadow="never">
  26. <!-- 表格 -->
  27. <el-table :data="state.tableData" v-loading="state.loading">
  28. <el-table-column label="知识标题" show-overflow-tooltip width="130">
  29. <template #default="{ row }">
  30. <el-button link type="primary" @click="onPreview(row)">{{ row.knowledge?.title }}</el-button>
  31. </template>
  32. </el-table-column>
  33. <el-table-column prop="knowledgeTypeText" label="知识分类" show-overflow-tooltip width="120"></el-table-column>
  34. <el-table-column prop="knowledge.statusText" label="知识状态" show-overflow-tooltip></el-table-column>
  35. <el-table-column prop="stateText" label="答复状态" show-overflow-tooltip></el-table-column>
  36. <el-table-column prop="creatorName" label="纠错人" show-overflow-tooltip></el-table-column>
  37. <el-table-column prop="creationTime" label="纠错时间" show-overflow-tooltip width="170">
  38. <template #default="{ row }">
  39. <span>{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
  40. </template>
  41. </el-table-column>
  42. <el-table-column prop="content" label="纠错内容" show-overflow-tooltip></el-table-column>
  43. <el-table-column prop="replyContent" label="答复内容" show-overflow-tooltip></el-table-column>
  44. <el-table-column label="答复时间" show-overflow-tooltip width="170">
  45. <template #default="{ row }">
  46. <span>{{ formatDate(row.replyTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
  47. </template>
  48. </el-table-column>
  49. <el-table-column label="操作" width="200" fixed="right" align="center">
  50. <template #default="{ row }">
  51. <el-button link type="primary" @click="onPreview(row)" title="知识详情"> 知识详情 </el-button>
  52. <el-button link type="primary" @click="onReply(row)" v-auth="'knowledge:error:reply'" title="答复" v-if="[0].includes(row.state)">
  53. 答复
  54. </el-button>
  55. <el-button
  56. link
  57. type="primary"
  58. @click="onEdit(row)"
  59. title="编辑"
  60. v-if="[0, 4].includes(row.knowledge?.status)"
  61. v-auth="'knowledge:error:edit'"
  62. >
  63. 编辑
  64. </el-button>
  65. </template>
  66. </el-table-column>
  67. <template #empty>
  68. <Empty />
  69. </template>
  70. </el-table>
  71. <!-- 分页 -->
  72. <pagination
  73. :total="state.total"
  74. v-model:page="state.queryParams.PageIndex"
  75. v-model:limit="state.queryParams.PageSize"
  76. @pagination="queryList"
  77. />
  78. </el-card>
  79. <!-- 知识纠错 -->
  80. <error-add ref="errorAddRef" @submitSuccess="queryList" />
  81. </div>
  82. </template>
  83. <script lang="ts" setup name="knowledgeError">
  84. import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
  85. import { ElMessage, FormInstance } from 'element-plus';
  86. import { formatDate } from '@/utils/formatTime';
  87. import { auth } from '@/utils/authFunction';
  88. import { correctionList } from '@/api/knowledge/error';
  89. import { useRouter } from 'vue-router';
  90. import { treeList } from '@/api/knowledge/type';
  91. // 引入组件
  92. const ErrorAdd = defineAsyncComponent(() => import('@/views/knowledge/error/components/Error-add.vue')); // 知识纠错
  93. // 定义变量内容
  94. const state = reactive<any>({
  95. loading: false, // 加载状态
  96. queryParams: {
  97. // 查询参数
  98. PageIndex: 1,
  99. PageSize: 10,
  100. KnowledgeTypeId: null, // 知识分类
  101. CreatorName: null, // 提问人
  102. },
  103. total: 0, // 总条数
  104. tableData: [], // 表格数据
  105. typeData: [], // 知识分类
  106. });
  107. const ruleFormRef = ref<RefType>(null); // 表单ref
  108. const getBaseData = async () => {
  109. try {
  110. const typeDataRes = await treeList({ IsEnable: true });
  111. state.typeData = typeDataRes.result ?? [];
  112. } catch (error) {
  113. console.log(error);
  114. }
  115. };
  116. // 获取参数列表
  117. const queryList = () => {
  118. state.loading = true;
  119. if (!auth('knowledge:error:query')) ElMessage.error('抱歉,您没有权限获取知识纠错列表!');
  120. else {
  121. correctionList(state.queryParams)
  122. .then((res) => {
  123. state.loading = false;
  124. state.tableData = res.result.items ?? [];
  125. state.total = res.result.total ?? 0;
  126. })
  127. .finally(() => {
  128. state.loading = false;
  129. });
  130. }
  131. };
  132. // 重置表单
  133. const resetQuery = (formEl: FormInstance | undefined) => {
  134. if (!formEl) return;
  135. formEl.resetFields();
  136. queryList();
  137. };
  138. // 知识详情
  139. const router = useRouter();
  140. const onPreview = (row: any) => {
  141. router.push({
  142. name: 'knowledgePreview',
  143. params: {
  144. id: row.knowledge.id,
  145. tagsViewName: '知识详情',
  146. },
  147. });
  148. };
  149. // 答复
  150. const errorAddRef = ref<RefType>();
  151. const onReply = (row: any) => {
  152. errorAddRef.value.openDialog(row, true);
  153. };
  154. // 编辑
  155. const onEdit = (row: any) => {
  156. router.push({
  157. name: 'knowledgeEdit',
  158. params: {
  159. id: row.knowledge.id,
  160. tagsViewName: '编辑知识',
  161. },
  162. });
  163. };
  164. // 页面加载时
  165. onMounted(() => {
  166. getBaseData();
  167. queryList();
  168. });
  169. </script>