浏览代码

refactor(评价模块): 重构评价列表组件,使用useTable组合式函数

- 在list-referee.vue和course-evaluate.vue中使用useTable替代手动管理表格状态
- 统一处理disqualificationItem和isOperated字段的字符串转换
- 修改referee.api.ts接口定义,支持number或string类型
- 优化导出功能使用request.download方法
zhanghaijun 11 月之前
父节点
当前提交
5fa030b5c0

+ 29 - 26
src/views/train/course/detail/course-evaluate.vue

@@ -32,22 +32,10 @@
   import { ref } from 'vue'
   import ArtTable from '@/components/core/tables/art-table/index.vue'
   import request from '@/api'
-  import { ColumnOption } from '@/types/component'
+  import { useTable } from '@/composables/useTable'
 
   const props = withDefaults(defineProps<{ courseId: string }>(), {})
 
-  const tableRef = ref<typeof ArtTable>()
-  const loading = ref<boolean>(false)
-  const columns: ColumnOption[] = [
-    { prop: 'seqNo', label: '序号' },
-    { prop: 'roleName', label: '评价目标角色' },
-    { prop: 'evaName', label: '节点名称' },
-    { prop: 'evaType', label: '评价类型', formatter: (row: Datum) => (row.evaType === 0 ? '主观评价' : row.evaType === 1 ? '客观评价' : '未知') },
-    { prop: 'evaScore', label: '评价赋分', useSlot: true },
-    { prop: 'evaDeduction', label: '评价失分', useSlot: true },
-    { prop: 'disqualificationItem', label: '是否失格项', useSlot: true }
-  ]
-
   export interface Datum {
     seqNo: number /** 序号 */
     courseID: number /** 课程ID */
@@ -59,16 +47,35 @@
     evaType: number /** 评价类型 */
     evaScore: number /** 评价赋分 */
     evaDeduction: number /** 评价失分 */
-    disqualificationItem: number /** 是否失格项  0 不是失格项,1失格项 */
-  }
-
-  const tableData = ref<Datum[]>([])
-  const listEvaluate = async () => {
-    loading.value = true
-    const { data } = await request.post<Datum[]>('/eva/list', { courseId: Number(props.courseId) })
-    tableData.value = data || []
-    loading.value = false
+    disqualificationItem: number | string /** 是否失格项  0 不是失格项,1失格项 */
   }
+  const tableRef = ref<typeof ArtTable>()
+  const {
+    data: tableData,
+    columns: columns,
+    loading: loading
+  } = useTable({
+    core: {
+      apiFn: () => request.post<Datum[]>('/eva/list', { courseId: Number(props.courseId) }),
+      columnsFactory: () => [
+        { prop: 'seqNo', label: '序号' },
+        { prop: 'roleName', label: '评价目标角色' },
+        { prop: 'evaName', label: '节点名称' },
+        { prop: 'evaType', label: '评价类型', formatter: (row: Datum) => (row.evaType === 0 ? '主观评价' : row.evaType === 1 ? '客观评价' : '未知') },
+        { prop: 'evaScore', label: '评价赋分', useSlot: true },
+        { prop: 'evaDeduction', label: '评价失分', useSlot: true },
+        { prop: 'disqualificationItem', label: '是否失格项', useSlot: true }
+      ]
+    },
+    transform: {
+      dataTransformer: (data: never[] = []) => {
+        data.forEach((item) => {
+          ;(item as Datum).disqualificationItem = String((item as Datum).disqualificationItem)
+        })
+        return data
+      }
+    }
+  })
 
   const saveRefereeRow = async (row: Datum, prop: string, tip: string = '修改成功') => {
     console.log('数据变更:', row.seqNo, prop, tip)
@@ -84,8 +91,4 @@
     })
     ElMessage.success(tip)
   }
-
-  onMounted(() => {
-    listEvaluate()
-  })
 </script>

+ 9 - 0
src/views/train/evaluation/list-referee.vue

@@ -70,6 +70,15 @@
         { prop: 'disqualificationItem', label: '是否失格项', useSlot: true },
         { prop: 'isOperated', label: '是否操作', useSlot: true }
       ]
+    },
+    transform: {
+      dataTransformer: (data: never[] = []) => {
+        data.forEach((item) => {
+          ;(item as RefereeData).disqualificationItem = String((item as RefereeData).disqualificationItem)
+          ;(item as RefereeData).isOperated = String((item as RefereeData).isOperated)
+        })
+        return data
+      }
     }
   })
 

+ 4 - 4
src/views/train/evaluation/referee.api.ts

@@ -9,7 +9,7 @@ export interface RefereeAddRequest {
   evaTargetRole: number /** 评价目标角色 */
   evaScore: number /** 评价赋分 */
   evaDeduction: number /** 评价失分 */
-  disqualificationItem: number /** 失格项字段 1是0否 */
+  disqualificationItem: number | string /** 失格项字段 1是0否 */
 }
 export interface RefereeData extends RefereeAddRequest {
   runOperID: number /** 运行操作ID */
@@ -17,14 +17,14 @@ export interface RefereeData extends RefereeAddRequest {
   evaMapID: number
   targetRoleName: string /** 评价目标角色名称 */
   evaSource: number /** 评价来源 // 0来自流程图,1.来自教员自定义 */
-  isOperated: number /** 是否操作 0 未操作,1已操作 */
+  isOperated: number | string /** 是否操作 0 未操作,1已操作 */
   operScore: number /** 操作得分 */
   operTime: number /** 操作时间 */
 }
 
 export class RefereeServer {
-  public static list = (runLogID: number = 0) => request.post<RefereeData[]>('/eva/record/list', { runLogID: Number(runLogID) })
-  public static export = (runLogID: number = 0) => request.post('/evalog/export', { runLogID: Number(runLogID) })
+  public static list = (runLogID: number = 0) => request.post<any[]>('/eva/record/list', { runLogID: Number(runLogID) })
+  public static export = (runLogID: number = 0) => request.download('/evalog/export', '', { runLogID: Number(runLogID) })
   public static add = (data: RefereeAddRequest) => request.post('/evalog/add', data)
   public static remove = (runLogID: number, runOperID: number) => request.post('/evalog/delete', { runLogID, runOperID })
   public static update = (data: RefereeAddRequest) => request.post('/evalog/update', data)