Browse Source

feat: 所有页面表格排序

zhangjie 1 ngày trước cách đây
mục cha
commit
cebba7afc5

+ 12 - 10
src/views/mark/ArbitrationManage.vue

@@ -53,12 +53,18 @@
       :data="dataList"
       :loading="loading"
       @selection-change="handleSelectionChange"
+      @sort-change="handleSortChange"
     >
       <el-table-column type="selection" width="55" />
       <el-table-column property="subjectCode" label="科目代码" width="120" />
-      <el-table-column property="groupNo" label="分组序号" width="100" />
+      <el-table-column
+        property="groupNo"
+        label="分组序号"
+        width="100"
+        sortable
+      />
       <el-table-column property="examCardNo" label="准考证号" width="150" />
-      <el-table-column label="状态" width="100">
+      <el-table-column label="状态" width="100" sortable>
         <template #default="scope">
           <el-tag :type="getStatusType(scope.row.status)" size="small">
             {{ getStatusText(scope.row.status) }}
@@ -69,24 +75,19 @@
         property="createTime"
         label="创建时间"
         width="180"
-        show-overflow-tooltip
+        sortable
       />
       <el-table-column
         property="handleTime"
         label="处理时间"
         width="180"
-        show-overflow-tooltip
+        sortable
       >
         <template #default="scope">
           {{ scope.row.handleTime || '-' }}
         </template>
       </el-table-column>
-      <el-table-column
-        property="handler"
-        label="处理人"
-        width="120"
-        show-overflow-tooltip
-      >
+      <el-table-column property="handler" label="处理人" width="120">
         <template #default="scope">
           {{ scope.row.handler || '-' }}
         </template>
@@ -145,6 +146,7 @@
     toPage,
     pageSizeChange,
     handleSelectionChange,
+    handleSortChange,
   } = useTable<MarkArbitrationItem>(getArbitrationList, searchModel, false);
 
   // 获取状态类型

+ 21 - 4
src/views/mark/MarkerManage.vue

@@ -54,12 +54,18 @@
       :data="dataList"
       :loading="loading"
       @selection-change="handleSelectionChange"
+      @sort-change="handleSortChange"
     >
       <el-table-column type="selection" width="55" />
-      <el-table-column property="loginName" label="登录名" width="120" />
+      <el-table-column
+        property="loginName"
+        label="登录名"
+        width="120"
+        sortable
+      />
       <el-table-column property="name" label="姓名" width="100" />
       <el-table-column property="subject" label="科目" width="120" />
-      <el-table-column property="group" label="分组" width="100" />
+      <el-table-column property="group" label="分组" width="100" sortable />
       <el-table-column label="状态" width="100">
         <template #default="scope">
           <el-tag :type="getStatusType(scope.row.status)" size="small">
@@ -67,7 +73,12 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column property="completedCount" label="已评数量" width="100">
+      <el-table-column
+        property="completedCount"
+        label="已评数量"
+        width="100"
+        sortable
+      >
         <template #default="scope">
           <span>
             {{ scope.row.completedCount }}
@@ -88,7 +99,12 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column property="taskCount" label="任务数" width="100" />
+      <el-table-column
+        property="taskCount"
+        label="任务数"
+        width="100"
+        sortable
+      />
       <el-table-column
         property="bindClass"
         label="绑定班级"
@@ -222,6 +238,7 @@
     getList,
     pageSizeChange,
     handleSelectionChange,
+    handleSortChange,
   } = useTable<MarkMarkerItem>(getMarkMarkerList, searchModel, false);
 
   // 计算选中的评卷员ID列表

+ 43 - 9
src/views/mark/QualityMonitor.vue

@@ -32,27 +32,39 @@
   </div>
 
   <div class="part-box">
-    <el-table class="page-table" :data="dataList" :loading="loading">
-      <el-table-column property="group" label="分组" width="100" />
+    <el-table
+      class="page-table"
+      :data="dataList"
+      :loading="loading"
+      @sort-change="handleSortChange"
+    >
+      <el-table-column property="group" label="分组" width="100" sortable />
       <el-table-column property="markerId" label="评卷员" width="120" />
       <el-table-column property="name" label="姓名" min-width="100" />
       <el-table-column
         property="completedTasks"
         label="完成任务数"
         width="120"
+        sortable
       />
       <el-table-column
         property="arbitrationTasks"
         label="仲裁任务数"
         width="120"
+        sortable
       />
-      <el-table-column label="仲裁率" width="100">
+      <el-table-column label="仲裁率" width="100" sortable>
         <template #default="scope">
           {{ (scope.row.arbitrationRate * 100).toFixed(1) }}%
         </template>
       </el-table-column>
-      <el-table-column property="returnCount" label="打回次数" width="100" />
-      <el-table-column label="评卷采用率" width="120">
+      <el-table-column
+        property="returnCount"
+        label="打回次数"
+        width="100"
+        sortable
+      />
+      <el-table-column label="评卷采用率" width="120" sortable>
         <template #default="scope">
           {{ (scope.row.adoptionRate * 100).toFixed(1) }}%
         </template>
@@ -61,13 +73,24 @@
         property="markingSpeed"
         label="评卷速度(秒)"
         width="120"
+        sortable
       />
-      <el-table-column property="averageScore" label="平均分" width="100">
+      <el-table-column
+        property="averageScore"
+        label="平均分"
+        width="100"
+        sortable
+      >
         <template #default="scope">
           {{ scope.row.averageScore.toFixed(2) }}
         </template>
       </el-table-column>
-      <el-table-column property="standardDeviation" label="标准差" width="100">
+      <el-table-column
+        property="standardDeviation"
+        label="标准差"
+        width="100"
+        sortable
+      >
         <template #default="scope">
           {{ scope.row.standardDeviation.toFixed(2) }}
         </template>
@@ -109,8 +132,19 @@
     noArbitration: undefined,
   });
 
-  const { dataList, pagination, loading, getList, toPage, pageSizeChange } =
-    useTable<MarkQualityMonitorItem>(getQualityMonitorList, searchModel, false);
+  const {
+    dataList,
+    pagination,
+    loading,
+    getList,
+    toPage,
+    pageSizeChange,
+    handleSortChange,
+  } = useTable<MarkQualityMonitorItem>(
+    getQualityMonitorList,
+    searchModel,
+    false
+  );
 
   // 重新计算
   const { loading: recalLoading, setLoading: setrecalLoading } = useLoading();

+ 26 - 14
src/views/mark/TaskManage.vue

@@ -107,12 +107,22 @@
   </div>
 
   <div class="part-box">
-    <el-table class="page-table" :data="dataList" :loading="loading">
+    <el-table
+      class="page-table"
+      :data="dataList"
+      :loading="loading"
+      @sort-change="handleSortChange"
+    >
       <el-table-column property="subjectCode" label="科目代码" width="120" />
-      <el-table-column property="groupNo" label="分组序号" width="100" />
+      <el-table-column
+        property="groupNo"
+        label="分组序号"
+        width="100"
+        sortable
+      />
       <el-table-column property="examCardNo" label="准考证号" width="150" />
       <el-table-column property="secretNo" label="密号" width="120" />
-      <el-table-column label="状态" width="100">
+      <el-table-column label="状态" width="100" sortable>
         <template #default="scope">
           <el-tag :type="getStatusType(scope.row.status)" size="small">
             {{ getStatusText(scope.row.status) }}
@@ -129,7 +139,7 @@
           {{ scope.row.returnReason || '-' }}
         </template>
       </el-table-column>
-      <el-table-column property="marker" label="评卷员" width="120" />
+      <el-table-column property="marker" label="评卷员" width="120" sortable />
       <el-table-column property="totalScore" label="评卷总分" width="100" />
       <el-table-column
         property="giveScoreDetail"
@@ -141,14 +151,9 @@
         property="markingTime"
         label="评卷时间"
         width="180"
-        show-overflow-tooltip
+        sortable
       />
-      <el-table-column
-        property="reviewer"
-        label="复核人"
-        width="120"
-        show-overflow-tooltip
-      >
+      <el-table-column property="reviewer" label="复核人" width="120" sortable>
         <template #default="scope">
           {{ scope.row.reviewer || '-' }}
         </template>
@@ -157,7 +162,7 @@
         property="reviewTime"
         label="复核时间"
         width="180"
-        show-overflow-tooltip
+        sortable
       >
         <template #default="scope">
           {{ scope.row.reviewTime || '-' }}
@@ -231,8 +236,15 @@
   const curRow = ref<MarkTaskItem>({});
   const rejectTaskDialogRef = ref<InstanceType<typeof RejectTaskDialog>>();
 
-  const { dataList, pagination, loading, toPage, getList, pageSizeChange } =
-    useTable<MarkTaskItem>(getMarkTaskList, searchModel, false);
+  const {
+    dataList,
+    pagination,
+    loading,
+    toPage,
+    getList,
+    pageSizeChange,
+    handleSortChange,
+  } = useTable<MarkTaskItem>(getMarkTaskList, searchModel, false);
 
   // 获取状态类型
   function getStatusType(status: string) {

+ 28 - 7
src/views/mark/TrialManage.vue

@@ -41,13 +41,28 @@
   </div>
 
   <div class="part-box">
-    <el-table class="page-table" :data="dataList" :loading="loading">
+    <el-table
+      class="page-table"
+      :data="dataList"
+      :loading="loading"
+      @sort-change="handleSortChange"
+    >
       <el-table-column property="subjectCode" label="科目代码" width="120" />
-      <el-table-column property="groupNo" label="分组序号" width="100" />
+      <el-table-column
+        property="groupNo"
+        label="分组序号"
+        width="100"
+        sortable
+      />
       <el-table-column property="examCardNo" label="准考证号" width="150" />
       <el-table-column property="secretNo" label="密号" width="120" />
-      <el-table-column property="marker" label="评卷员" width="120" />
-      <el-table-column property="totalScore" label="评卷总分" width="100" />
+      <el-table-column property="marker" label="评卷员" width="120" sortable />
+      <el-table-column
+        property="totalScore"
+        label="评卷总分"
+        width="100"
+        sortable
+      />
       <el-table-column
         property="giveScoreDetail"
         label="给分明细"
@@ -58,7 +73,7 @@
         property="markingTime"
         label="评卷时间"
         width="180"
-        show-overflow-tooltip
+        sortable
       />
       <el-table-column label="操作" width="120" fixed="right">
         <template #default="scope">
@@ -102,8 +117,14 @@
     secretNo: '',
   });
 
-  const { dataList, pagination, loading, toPage, pageSizeChange } =
-    useTable<MarkTrialItem>(getMarkTrialList, searchModel, false);
+  const {
+    dataList,
+    pagination,
+    loading,
+    toPage,
+    pageSizeChange,
+    handleSortChange,
+  } = useTable<MarkTrialItem>(getMarkTrialList, searchModel, false);
 
   // 查看详情
   function onView(row: MarkTrialItem) {

+ 18 - 3
src/views/reject/RejectStatistics.vue

@@ -14,7 +14,12 @@
     </el-form>
   </div>
   <div class="part-box">
-    <el-table class="page-table" :data="dataList" :loading="loading">
+    <el-table
+      class="page-table"
+      :data="dataList"
+      :loading="loading"
+      @sort-change="handleSortChange"
+    >
       <el-table-column
         property="subject"
         label="科目"
@@ -85,8 +90,18 @@
     showGroupNo: false,
   });
 
-  const { dataList, pagination, loading, toPage, pageSizeChange } =
-    useTable<RejectStatisticsItem>(getRejectStatisticsList, searchModel, false);
+  const {
+    dataList,
+    pagination,
+    loading,
+    toPage,
+    pageSizeChange,
+    handleSortChange,
+  } = useTable<RejectStatisticsItem>(
+    getRejectStatisticsList,
+    searchModel,
+    false
+  );
 
   function formatPercentage(rate: number): string {
     if (rate === 0) return '0%';

+ 39 - 3
src/views/review/AllReview.vue

@@ -185,9 +185,15 @@
       :data="dataList"
       :loading="loading"
       @selection-change="handleSelectionChange"
+      @sort-change="handleSortChange"
     >
       <el-table-column type="selection" width="55" />
-      <el-table-column property="courseName" label="科目" width="150" />
+      <el-table-column
+        property="courseName"
+        label="科目"
+        width="150"
+        sortable
+      />
       <el-table-column property="secretNo" label="密号" width="120" />
       <el-table-column label="选做异常" width="100">
         <template #default="scope">
@@ -198,7 +204,12 @@
       </el-table-column>
       <el-table-column property="objectiveScore" label="客观分" width="100" />
       <el-table-column property="subjectiveScore" label="主观分" width="100" />
-      <el-table-column property="totalScore" label="试卷总分" width="100" />
+      <el-table-column
+        property="totalScore"
+        label="试卷总分"
+        width="100"
+        sortable
+      />
       <el-table-column
         property="scoreDetail"
         label="得分明细"
@@ -217,6 +228,19 @@
           </el-button>
         </template>
       </el-table-column>
+      <!-- TODO:复核人,复核时间  sortable -->
+      <el-table-column
+        property="reviewer"
+        label="复核人"
+        width="120"
+        sortable
+      />
+      <el-table-column
+        property="reviewTime"
+        label="复核时间"
+        width="180"
+        sortable
+      />
     </el-table>
     <el-pagination
       v-model:current-page="pagination.pageNumber"
@@ -230,7 +254,8 @@
 </template>
 
 <script setup lang="ts">
-  import { reactive, ref } from 'vue';
+  import { reactive } from 'vue';
+  import { ElMessage } from 'element-plus';
   import { ArrowDown } from '@element-plus/icons-vue';
   import { getFullReviewList } from '@/api/review';
   import { FullReviewItem, FullReviewListFilter } from '@/api/types/review';
@@ -267,15 +292,26 @@
     toPage,
     pageSizeChange,
     handleSelectionChange,
+    handleSortChange,
   } = useTable<FullReviewItem>(getFullReviewList, searchModel, false);
 
   // 批量复核
   function onBatchReview() {
+    if (selectedRows.length === 0) {
+      ElMessage.warning('请选择要复核的试卷');
+      return;
+    }
     // TODO: 批量复核
+    console.log('批量复核:', selectedRows);
   }
   // 批量取消复核
   function onBatchCancelReview() {
+    if (selectedRows.length === 0) {
+      ElMessage.warning('请选择要取消复核的试卷');
+      return;
+    }
     // TODO: 批量取消复核
+    console.log('批量复核:', selectedRows);
   }
 
   // 轨迹图

+ 36 - 8
src/views/review/ScoreReviewStatistics.vue

@@ -47,24 +47,45 @@
   </div>
 
   <div class="part-box">
-    <el-table class="page-table" :data="dataList" :loading="loading">
+    <el-table
+      class="page-table"
+      :data="dataList"
+      :loading="loading"
+      @sort-change="handleSortChange"
+    >
       <el-table-column property="courseName" label="科目" min-width="200" />
-      <el-table-column label="选做科目" min-width="100">
+      <el-table-column label="选做科目" min-width="100" sortable>
         <template #default="scope">
           <el-tag :type="scope.row.isOptional ? 'success' : 'info'">
             {{ scope.row.isOptional ? '是' : '否' }}
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column property="paperCount" label="试卷总量" min-width="100" />
-      <el-table-column property="taskCount" label="任务数" min-width="80" />
-      <el-table-column property="reviewedCount" label="已复核数" width="100" />
+      <el-table-column
+        property="paperCount"
+        label="试卷总量"
+        min-width="100"
+        sortable
+      />
+      <el-table-column
+        property="taskCount"
+        label="任务数"
+        min-width="80"
+        sortable
+      />
+      <el-table-column
+        property="reviewedCount"
+        label="已复核数"
+        width="100"
+        sortable
+      />
       <el-table-column
         property="unReviewedCount"
         label="待复核数"
         min-width="100"
+        sortable
       />
-      <el-table-column label="完成进度" min-width="100">
+      <el-table-column label="完成进度" min-width="100" sortable>
         <template #default="scope">
           <el-progress
             :percentage="scope.row.progress"
@@ -76,6 +97,7 @@
         property="reviewedTimes"
         label="已复核次数"
         min-width="100"
+        sortable
       />
     </el-table>
     <el-pagination
@@ -110,8 +132,14 @@
     isFinished: null,
   });
 
-  const { dataList, pagination, loading, toPage, pageSizeChange } =
-    useTable<ReviewStatItem>(getReviewStatList, searchModel, false);
+  const {
+    dataList,
+    pagination,
+    loading,
+    toPage,
+    pageSizeChange,
+    handleSortChange,
+  } = useTable<ReviewStatItem>(getReviewStatList, searchModel, false);
 
   // 统计信息
   const statInfo = ref<ReviewStatInfo>({

+ 24 - 4
src/views/scan/ScanCourseStats.vue

@@ -33,27 +33,41 @@
     </el-form>
   </div>
   <div class="part-box">
-    <el-table class="page-table" :data="dataList" :loading="loading">
-      <el-table-column property="name" label="考试名称" min-width="200" />
+    <el-table
+      class="page-table"
+      :data="dataList"
+      :loading="loading"
+      @sort-change="handleSortChange"
+    >
+      <el-table-column
+        property="name"
+        label="考试名称"
+        min-width="200"
+        sortable
+      />
       <el-table-column
         property="totalStudents"
         label="考生总数"
         min-width="100"
+        sortable
       />
       <el-table-column
         property="scannedSheets"
         label="已扫张数"
         min-width="100"
+        sortable
       />
       <el-table-column
         property="scannedStudents"
         label="已扫人数"
         min-width="100"
+        sortable
       />
       <el-table-column
         property="manualAbsent"
         label="人工指定缺考"
         min-width="100"
+        sortable
       />
       <el-table-column label="进度" width="100">
         <template #default="scope">
@@ -91,8 +105,14 @@
     majorType: '',
   });
 
-  const { dataList, pagination, loading, toPage, pageSizeChange } =
-    useTable<ScanItem>(getScanCourseList, searchModel, false);
+  const {
+    dataList,
+    pagination,
+    loading,
+    toPage,
+    pageSizeChange,
+    handleSortChange,
+  } = useTable<ScanItem>(getScanCourseList, searchModel, false);
 
   function getProgressColor(progress: number) {
     if (progress < 30) return '#f56c6c';

+ 19 - 5
src/views/scan/ScanPointStats.vue

@@ -19,29 +19,37 @@
     </el-form>
   </div>
   <div class="part-box">
-    <el-table class="page-table" :data="dataList" :loading="loading">
-      <el-table-column type="index" label="序号" width="60" />
+    <el-table
+      class="page-table"
+      :data="dataList"
+      :loading="loading"
+      @sort-change="handleSortChange"
+    >
       <el-table-column
         property="totalStudents"
         label="考生总数"
         min-width="100"
+        sortable
       />
       <el-table-column
         property="scannedSheets"
         label="已扫张数"
         min-width="100"
+        sortable
       />
       <el-table-column
         property="scannedStudents"
         label="已扫人数"
         min-width="100"
+        sortable
       />
       <el-table-column
         property="manualAbsent"
         label="人工指定缺考"
         min-width="100"
+        sortable
       />
-      <el-table-column label="扫描进度" width="120">
+      <el-table-column label="扫描进度" width="120" sortable>
         <template #default="scope">
           <el-progress
             :percentage="scope.row.progress"
@@ -75,8 +83,14 @@
     point: '',
   });
 
-  const { dataList, pagination, loading, toPage, pageSizeChange } =
-    useTable<ScanItem>(getScanPointList, searchModel, false);
+  const {
+    dataList,
+    pagination,
+    loading,
+    toPage,
+    pageSizeChange,
+    handleSortChange,
+  } = useTable<ScanItem>(getScanPointList, searchModel, false);
 
   function getProgressColor(progress: number) {
     if (progress < 30) return '#f56c6c';

+ 12 - 3
src/views/scan/SignPaperStats.vue

@@ -30,9 +30,18 @@
   </div>
   <div class="part-box">
     <el-table class="page-table" :data="dataList" :loading="loading">
-      <el-table-column type="index" label="序号" width="60" />
-      <el-table-column property="signPaperNo" label="签到表编号" width="150" />
-      <el-table-column property="imageCount" label="图片数量" width="100" />
+      <el-table-column
+        property="signPaperNo"
+        label="签到表编号"
+        width="150"
+        sortable
+      />
+      <el-table-column
+        property="imageCount"
+        label="图片数量"
+        width="100"
+        sortable
+      />
       <el-table-column label="操作" width="100" fixed="right">
         <template #default="scope">
           <el-button size="small" link @click="onView(scope.row)">

+ 33 - 6
src/views/score/ScoreQuery.vue

@@ -157,10 +157,20 @@
     </el-form>
   </div>
   <div class="part-box">
-    <el-table class="page-table" :data="dataList" :loading="loading">
+    <el-table
+      class="page-table"
+      :data="dataList"
+      :loading="loading"
+      @sort-change="handleSortChange"
+    >
       <el-table-column property="examNo" label="准考证号" min-width="120" />
       <el-table-column property="name" label="姓名" min-width="100" />
-      <el-table-column property="studentNo" label="学号" min-width="120" />
+      <el-table-column
+        property="studentNo"
+        label="学号"
+        min-width="120"
+        sortable
+      />
       <el-table-column property="subject" label="科目" min-width="120" />
       <el-table-column property="level" label="层次" min-width="100" />
       <el-table-column property="majorType" label="专业类型" min-width="120" />
@@ -168,14 +178,21 @@
         property="objectiveScore"
         label="客观总分"
         min-width="100"
+        sortable
       />
       <el-table-column
         property="subjectiveScore"
         label="主观总分"
         min-width="100"
+        sortable
+      />
+      <el-table-column
+        property="totalScore"
+        label="全卷总分"
+        min-width="100"
+        sortable
       />
-      <el-table-column property="totalScore" label="全卷总分" min-width="100" />
-      <el-table-column label="是否缺考" min-width="100">
+      <el-table-column label="是否缺考" min-width="100" sortable>
         <template #default="scope">
           <el-tag :type="scope.row.isAbsent ? 'danger' : 'success'">
             {{ scope.row.isAbsent ? '是' : '否' }}
@@ -196,10 +213,20 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column property="college" label="学院" min-width="120" />
+      <el-table-column
+        property="college"
+        label="学院"
+        min-width="120"
+        sortable
+      />
       <el-table-column property="className" label="班级" min-width="100" />
       <el-table-column property="teacher" label="任课老师" min-width="100" />
-      <el-table-column property="examSite" label="考点" min-width="100" />
+      <el-table-column
+        property="examSite"
+        label="考点"
+        min-width="100"
+        sortable
+      />
       <el-table-column property="examRoom" label="考场" min-width="100" />
       <el-table-column label="操作" width="100" fixed="right">
         <template #default="scope">