Explorar el Código

feat: api-考试管理

zhangjie hace 3 días
padre
commit
9bd725716b
Se han modificado 40 ficheros con 379 adiciones y 515 borrados
  1. 11 4
      src/api/exam.ts
  2. 25 25
      src/api/types/exam.ts
  3. 10 3
      src/constants/enumerate.ts
  4. 3 0
      src/utils/filter.ts
  5. 6 10
      src/views/admin/school-manage/SchoolManage.vue
  6. 10 14
      src/views/analysis/BigQuestionAnalysis.vue
  7. 8 20
      src/views/analysis/ClassAnalysis.vue
  8. 8 20
      src/views/analysis/CollegeAnalysis.vue
  9. 7 15
      src/views/analysis/ObjectiveQuestionAnalysis.vue
  10. 2 2
      src/views/analysis/SegmentAnalysis.vue
  11. 7 15
      src/views/analysis/SubjectiveQuestionAnalysis.vue
  12. 9 21
      src/views/analysis/TeacherAnalysis.vue
  13. 10 22
      src/views/analysis/TotalAnalysis.vue
  14. 6 6
      src/views/check/ImageCheck.vue
  15. 7 7
      src/views/check/ManualConfirm.vue
  16. 61 33
      src/views/exam/ExamEdit.vue
  17. 26 38
      src/views/exam/ExamManage.vue
  18. 3 3
      src/views/exam/IssuePaperTypeDialog.vue
  19. 3 3
      src/views/exam/RejectTypeDialog.vue
  20. 11 11
      src/views/issue-paper/IssuePaper.vue
  21. 7 7
      src/views/log/LogManage.vue
  22. 6 20
      src/views/mark/ArbitrationManage.vue
  23. 9 9
      src/views/mark/GroupManage.vue
  24. 5 5
      src/views/mark/MarkProgress.vue
  25. 7 17
      src/views/mark/MarkerManage.vue
  26. 9 14
      src/views/mark/QualityMonitor.vue
  27. 2 2
      src/views/mark/ScoreCurve.vue
  28. 11 25
      src/views/mark/TaskManage.vue
  29. 8 17
      src/views/mark/TrialManage.vue
  30. 8 16
      src/views/reject/RejectManage.vue
  31. 8 16
      src/views/reject/RejectRecord.vue
  32. 6 11
      src/views/reject/RejectStatistics.vue
  33. 8 17
      src/views/review/AllReview.vue
  34. 5 5
      src/views/review/ScoreQuery.vue
  35. 6 6
      src/views/review/ScoreReviewStatistics.vue
  36. 5 10
      src/views/scan/ScanCourseStats.vue
  37. 4 4
      src/views/scan/ScanPointStats.vue
  38. 2 2
      src/views/scan/SignPaperStats.vue
  39. 14 24
      src/views/score/ScoreQuery.vue
  40. 16 16
      src/views/student/StudentManage.vue

+ 11 - 4
src/api/exam.ts

@@ -11,21 +11,28 @@ import {
 export function getExamList(
   params: ExamListPageParam
 ): Promise<ExamListPageRes> {
-  return axios.post('/api/exam/list', {}, { params });
+  return axios.post('/api/admin/exam/listt', {}, { params });
 }
 // 考试详情
 export function getExamDetail(examId: number): Promise<ExamItem> {
-  return axios.post('/api/exam/detail', {}, { examId });
+  return axios.post('/api/admin/exam/find', {}, { examId });
 }
 
 // 新增或编辑考试
 export function updateExam(data: ExamUpdateParam): Promise<ExamItem> {
-  return axios.post('/api/exam/update', data);
+  const ndata = { ...data };
+  if (ndata.sheetConfig) {
+    ndata.sheetConfig = JSON.stringify(ndata.sheetConfig);
+  }
+  if (ndata.id) {
+    return axios.post('/api/admin/exam/update', ndata);
+  }
+  return axios.post('/api/admin/exam/save', ndata);
 }
 
 // 获取考试统计详情信息
 export function getExamStatisticInfo(
   examId: number
 ): Promise<ExamStatDetailInfo> {
-  return axios.post('/api/exam/statistic', {}, { params: { examId } });
+  return axios.post('/api/admin/exam/detail', {}, { params: { examId } });
 }

+ 25 - 25
src/api/types/exam.ts

@@ -1,5 +1,5 @@
 import { ExamType, MarkingMode } from '@/constants/enumerate';
-import { PageResult, PageParams } from './common';
+import { PageResult, PageParams, CoverArea } from './common';
 
 export interface ExamBaseItem {
   id: number;
@@ -7,40 +7,40 @@ export interface ExamBaseItem {
   name: string;
   // 类型
   type: ExamType;
-  // 扫描图片类型
-  scanImageType: number;
   // 考试日期
-  examDate: string;
+  examTime: string;
   // 评卷开始日期
-  markingStartDate: string;
+  startTime: string;
   // 评卷结束日期
-  markingEndDate: string;
+  endTime: string;
   // 评卷模式
-  markingMode: MarkingMode;
+  markMode: MarkingMode;
   // 强制标记
-  forceMark: boolean;
+  forceSpecialTag: boolean;
   // 禁止其他人查看考生信息
-  forbidViewStudentInfo: boolean;
+  forbiddenInfo: boolean;
   // 禁止科组长成绩查询
-  forbidLeaderScoreQuery: boolean;
+  forbiddenScore: boolean;
   // 全卷多次复核不能同一账号
-  preventSameAccountRecheck: boolean;
+  inspectUnrepeated: boolean;
   // 全卷复核强制试卷拉到底部
-  forceScrollToBottom: boolean;
+  inspectScrollBottom: boolean;
   // 全卷复核进度100%时才能再次复核
-  requireFullProgressForRecheck: boolean;
+  inspectRoundLimit: boolean;
   // 评卷端是否显示客观分
   showObjectiveScore: boolean;
+  // 原图遮盖
+  sheetConfig?: CoverArea[];
   // 打回后显示原分值
-  showOriginalScoreAfterReturn: boolean;
+  showReject: boolean;
   // 回评卷数
-  recheckCount: number;
+  remarkCount: number;
   // 及格分
-  passingScore: number;
+  passScore: number;
   // 优秀分
   excellentScore: number;
   // 原卷显示
-  showOriginalPaper: boolean;
+  sheetView: boolean;
   // 评卷提交自动定位
   autoPositionAfterSubmit: boolean;
   // 自动对切题卡
@@ -48,7 +48,7 @@ export interface ExamBaseItem {
   // 描述
   description: string;
   // 状态
-  status: string;
+  status: 'START' | 'FINISH';
   // 创建时间
   createTime: string;
 }
@@ -62,7 +62,7 @@ export interface ExamAdvancedConfig {
   // 单卷回评次数
   singlePaperRecheckCount: number | undefined;
   // 给分次数限制类型:等于 小于等于
-  scoringLimitType: 'eq' | 'le' | null;
+  trackCountPolicy: 'EQ' | 'LE' | null;
   // 启用条码粘贴AI检测
   enableBarcodeAIDetection: boolean;
   // 启用题卡作答AI检测
@@ -87,11 +87,11 @@ export type ExamListPageRes = PageResult<ExamQueryItem>;
 
 export interface ExamListFilter {
   // 考试名称
-  name: string;
+  name?: string;
   // 类型
-  type: string;
+  type?: ExamType;
   // 状态
-  status: string;
+  status?: ExamStatus;
 }
 export type ExamListPageParam = PageParams<ExamListFilter>;
 
@@ -105,9 +105,9 @@ export interface ExamStatDetailInfo {
   // 科目数量
   subjectCount: number;
   // 扫描进度
-  scanProgress: number;
+  scanCount: number;
   // 扫描张数量
-  scanImageCount: number;
+  paperCount: number;
   // 评卷进度
-  markingProgress: number;
+  markedCount: number;
 }

+ 10 - 3
src/constants/enumerate.ts

@@ -40,10 +40,10 @@ export const USER_SOURCE = {
 };
 export type UserSource = keyof typeof USER_SOURCE;
 
-// 考试类型
+// 考试类型:SCAN_IMAGE,MULTI_MEDIA
 export const EXAM_TYPE = {
-  SCAN: '扫描图片类型',
-  MULTIMEDIA: '多媒体类型',
+  SCAN_IMAGE: '扫描图片类型',
+  MULTI_MEDIA: '多媒体类型',
 };
 export type ExamType = keyof typeof EXAM_TYPE;
 
@@ -124,3 +124,10 @@ export const THREE_EVALUATION_RULE = {
   LOW_DIFF_HIGH_AVG: '低差值高均分',
 };
 export type ThreeEvaluationRule = keyof typeof THREE_EVALUATION_RULE;
+
+// 考试状态
+export const EXAM_STATUS = {
+  START: '开始考试',
+  FINISH: '已结束',
+};
+export type ExamStatus = keyof typeof EXAM_STATUS;

+ 3 - 0
src/utils/filter.ts

@@ -7,6 +7,7 @@ import {
   LOG_TYPE,
   OPTIONAL_SCORE_RULE,
   USER_SOURCE,
+  EXAM_STATUS,
 } from '@/constants/enumerate';
 import { formatDate } from './utils';
 
@@ -27,6 +28,8 @@ export const dictFilter = {
     DEFAULT_LABEL,
   userSource: (val: string) =>
     USER_SOURCE[val as keyof typeof USER_SOURCE] || DEFAULT_LABEL,
+  examStatus: (val: string) =>
+    EXAM_STATUS[val as keyof typeof EXAM_STATUS] || DEFAULT_LABEL,
 };
 
 // 时间戳过滤器

+ 6 - 10
src/views/admin/school-manage/SchoolManage.vue

@@ -19,16 +19,12 @@
   </div>
   <div class="part-box">
     <el-table class="page-table" :data="dataList" border stripe>
-      <el-table-column property="name" label="名称" />
-      <el-table-column property="code" label="代码" />
-      <el-table-column property="subOrgCode" label="子机构代码" width="100" />
-      <el-table-column
-        property="enableDoubleTrack"
-        label="双评轨迹"
-        width="100"
-      />
-      <el-table-column property="province" label="省份" />
-      <el-table-column property="city" label="城市" />
+      <el-table-column prop="name" label="名称" />
+      <el-table-column prop="code" label="代码" />
+      <el-table-column prop="subOrgCode" label="子机构代码" width="100" />
+      <el-table-column prop="enableDoubleTrack" label="双评轨迹" width="100" />
+      <el-table-column prop="province" label="省份" />
+      <el-table-column prop="city" label="城市" />
       <el-table-column label="操作">
         <template #default="scope">
           <el-button size="small" link @click="onEdit(scope.row)">

+ 10 - 14
src/views/analysis/BigQuestionAnalysis.vue

@@ -22,30 +22,26 @@
     >
       <el-table-column type="index" label="序号" width="60" />
       <el-table-column
-        property="bigQuestionName"
+        prop="bigQuestionName"
         label="大题名称"
         min-width="150"
       />
-      <el-table-column property="bigQuestionNo" label="大题号" min-width="80" />
-      <el-table-column property="totalScore" label="满分" min-width="80" />
-      <el-table-column property="highestScore" label="最高分" min-width="100" />
-      <el-table-column property="lowestScore" label="最低分" min-width="100" />
-      <el-table-column property="averageScore" label="平均分" min-width="100">
+      <el-table-column prop="bigQuestionNo" label="大题号" min-width="80" />
+      <el-table-column prop="totalScore" label="满分" min-width="80" />
+      <el-table-column prop="highestScore" label="最高分" min-width="100" />
+      <el-table-column prop="lowestScore" label="最低分" min-width="100" />
+      <el-table-column prop="averageScore" label="平均分" min-width="100">
         <template #default="scope">
           {{ scope.row.averageScore?.toFixed(2) }}
         </template>
       </el-table-column>
-      <el-table-column
-        property="standardDeviation"
-        label="标准差"
-        min-width="100"
-      >
+      <el-table-column prop="standardDeviation" label="标准差" min-width="100">
         <template #default="scope">
           {{ scope.row.standardDeviation?.toFixed(2) }}
         </template>
       </el-table-column>
       <el-table-column
-        property="differenceCoefficient"
+        prop="differenceCoefficient"
         label="差异系数"
         min-width="100"
       >
@@ -59,12 +55,12 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="zeroScoreStudents"
+        prop="zeroScoreStudents"
         label="零分人数"
         min-width="100"
       />
       <el-table-column
-        property="fullScoreStudents"
+        prop="fullScoreStudents"
         label="满分人数"
         min-width="100"
       />

+ 8 - 20
src/views/analysis/ClassAnalysis.vue

@@ -29,36 +29,24 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column property="className" label="班级" min-width="150" />
-      <el-table-column
-        property="totalStudents"
-        label="报考人数"
-        min-width="100"
-      />
-      <el-table-column
-        property="validStudents"
-        label="有效人数"
-        min-width="100"
-      />
-      <el-table-column property="averageScore" label="平均分" min-width="100">
+      <el-table-column prop="className" label="班级" min-width="150" />
+      <el-table-column prop="totalStudents" label="报考人数" min-width="100" />
+      <el-table-column prop="validStudents" label="有效人数" min-width="100" />
+      <el-table-column prop="averageScore" label="平均分" min-width="100">
         <template #default="scope">
           {{ scope.row.averageScore?.toFixed(2) }}
         </template>
       </el-table-column>
-      <el-table-column property="highestScore" label="最高分" min-width="100" />
-      <el-table-column property="lowestScore" label="最低分" min-width="100" />
-      <el-table-column
-        property="passStudents"
-        label="及格人数"
-        min-width="100"
-      />
+      <el-table-column prop="highestScore" label="最高分" min-width="100" />
+      <el-table-column prop="lowestScore" label="最低分" min-width="100" />
+      <el-table-column prop="passStudents" label="及格人数" min-width="100" />
       <el-table-column label="及格率" min-width="100">
         <template #default="scope">
           {{ (scope.row.passRate * 100).toFixed(2) }}%
         </template>
       </el-table-column>
       <el-table-column
-        property="excellentStudents"
+        prop="excellentStudents"
         label="优秀人数"
         min-width="100"
       />

+ 8 - 20
src/views/analysis/CollegeAnalysis.vue

@@ -29,36 +29,24 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column property="college" label="学生院系" min-width="150" />
-      <el-table-column
-        property="totalStudents"
-        label="报考人数"
-        min-width="100"
-      />
-      <el-table-column
-        property="validStudents"
-        label="有效人数"
-        min-width="100"
-      />
-      <el-table-column property="averageScore" label="平均分" min-width="100">
+      <el-table-column prop="college" label="学生院系" min-width="150" />
+      <el-table-column prop="totalStudents" label="报考人数" min-width="100" />
+      <el-table-column prop="validStudents" label="有效人数" min-width="100" />
+      <el-table-column prop="averageScore" label="平均分" min-width="100">
         <template #default="scope">
           {{ scope.row.averageScore?.toFixed(2) }}
         </template>
       </el-table-column>
-      <el-table-column property="highestScore" label="最高分" min-width="100" />
-      <el-table-column property="lowestScore" label="最低分" min-width="100" />
-      <el-table-column
-        property="passStudents"
-        label="及格人数"
-        min-width="100"
-      />
+      <el-table-column prop="highestScore" label="最高分" min-width="100" />
+      <el-table-column prop="lowestScore" label="最低分" min-width="100" />
+      <el-table-column prop="passStudents" label="及格人数" min-width="100" />
       <el-table-column label="及格率" min-width="100">
         <template #default="scope">
           {{ (scope.row.passRate * 100).toFixed(2) }}%
         </template>
       </el-table-column>
       <el-table-column
-        property="excellentStudents"
+        prop="excellentStudents"
         label="优秀人数"
         min-width="100"
       />

+ 7 - 15
src/views/analysis/ObjectiveQuestionAnalysis.vue

@@ -33,24 +33,16 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
+      <el-table-column prop="questionName" label="题目名称" min-width="150" />
+      <el-table-column prop="bigQuestionNo" label="大题号" min-width="80" />
+      <el-table-column prop="smallQuestionNo" label="小题号" min-width="80" />
       <el-table-column
-        property="questionName"
-        label="题目名称"
-        min-width="150"
-      />
-      <el-table-column property="bigQuestionNo" label="大题号" min-width="80" />
-      <el-table-column
-        property="smallQuestionNo"
-        label="小题号"
-        min-width="80"
-      />
-      <el-table-column
-        property="singleQuestionScore"
+        prop="singleQuestionScore"
         label="单题分数"
         min-width="100"
       />
       <el-table-column
-        property="singleQuestionAverageScore"
+        prop="singleQuestionAverageScore"
         label="单题平均分"
         min-width="120"
       >
@@ -59,7 +51,7 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="singleQuestionStandardDeviation"
+        prop="singleQuestionStandardDeviation"
         label="单题标准差"
         min-width="120"
       >
@@ -77,7 +69,7 @@
           {{ (scope.row.fullScoreRate * 100).toFixed(2) }}%
         </template>
       </el-table-column>
-      <el-table-column property="paperType" label="试卷类型" min-width="100" />
+      <el-table-column prop="paperType" label="试卷类型" min-width="100" />
     </el-table>
     <el-pagination
       v-model:current-page="pagination.pageNumber"

+ 2 - 2
src/views/analysis/SegmentAnalysis.vue

@@ -33,8 +33,8 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column property="segment" label="分数段" min-width="120" />
-      <el-table-column property="students" label="人数" min-width="100" />
+      <el-table-column prop="segment" label="分数段" min-width="120" />
+      <el-table-column prop="students" label="人数" min-width="100" />
       <el-table-column label="频率" min-width="100">
         <template #default="scope"> {{ scope.row.rate.toFixed(2) }}% </template>
       </el-table-column>

+ 7 - 15
src/views/analysis/SubjectiveQuestionAnalysis.vue

@@ -21,24 +21,16 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
+      <el-table-column prop="questionName" label="题目名称" min-width="150" />
+      <el-table-column prop="bigQuestionNo" label="大题号" min-width="80" />
+      <el-table-column prop="smallQuestionNo" label="小题号" min-width="80" />
       <el-table-column
-        property="questionName"
-        label="题目名称"
-        min-width="150"
-      />
-      <el-table-column property="bigQuestionNo" label="大题号" min-width="80" />
-      <el-table-column
-        property="smallQuestionNo"
-        label="小题号"
-        min-width="80"
-      />
-      <el-table-column
-        property="singleQuestionScore"
+        prop="singleQuestionScore"
         label="单题分数"
         min-width="100"
       />
       <el-table-column
-        property="singleQuestionAverageScore"
+        prop="singleQuestionAverageScore"
         label="单题平均分"
         min-width="120"
       >
@@ -47,7 +39,7 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="singleQuestionStandardDeviation"
+        prop="singleQuestionStandardDeviation"
         label="单题标准差"
         min-width="120"
       >
@@ -65,7 +57,7 @@
           {{ (scope.row.fullScoreRate * 100).toFixed(2) }}%
         </template>
       </el-table-column>
-      <el-table-column property="paperType" label="试卷类型" min-width="100" />
+      <el-table-column prop="paperType" label="试卷类型" min-width="100" />
     </el-table>
     <el-pagination
       v-model:current-page="pagination.pageNumber"

+ 9 - 21
src/views/analysis/TeacherAnalysis.vue

@@ -29,29 +29,17 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column property="teacher" label="任课老师" min-width="120" />
+      <el-table-column prop="teacher" label="任课老师" min-width="120" />
+      <el-table-column prop="totalStudents" label="报考人数" min-width="100" />
+      <el-table-column prop="validStudents" label="有效人数" min-width="100" />
+      <el-table-column prop="passStudents" label="及格人数" min-width="100" />
       <el-table-column
-        property="totalStudents"
-        label="报考人数"
-        min-width="100"
-      />
-      <el-table-column
-        property="validStudents"
-        label="有效人数"
-        min-width="100"
-      />
-      <el-table-column
-        property="passStudents"
-        label="及格人数"
-        min-width="100"
-      />
-      <el-table-column
-        property="excellentStudents"
+        prop="excellentStudents"
         label="优秀人数"
         min-width="100"
       />
-      <el-table-column property="highestScore" label="最高分" min-width="100" />
-      <el-table-column property="lowestScore" label="最低分" min-width="100" />
+      <el-table-column prop="highestScore" label="最高分" min-width="100" />
+      <el-table-column prop="lowestScore" label="最低分" min-width="100" />
       <el-table-column label="及格率" min-width="100">
         <template #default="scope">
           {{ (scope.row.passRate * 100).toFixed(2) }}%
@@ -62,13 +50,13 @@
           {{ (scope.row.excellentRate * 100).toFixed(2) }}%
         </template>
       </el-table-column>
-      <el-table-column property="averageScore" label="平均分" min-width="100">
+      <el-table-column prop="averageScore" label="平均分" min-width="100">
         <template #default="scope">
           {{ scope.row.averageScore?.toFixed(2) }}
         </template>
       </el-table-column>
       <el-table-column
-        property="averageRelativeScore"
+        prop="averageRelativeScore"
         label="平均相对分"
         min-width="120"
       >

+ 10 - 22
src/views/analysis/TotalAnalysis.vue

@@ -21,46 +21,34 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column property="subject" label="科目名称" min-width="120" />
+      <el-table-column prop="subject" label="科目名称" min-width="120" />
+      <el-table-column prop="totalStudents" label="报考人数" min-width="100" />
+      <el-table-column prop="absentStudents" label="缺考人数" min-width="100" />
       <el-table-column
-        property="totalStudents"
-        label="报考人数"
-        min-width="100"
-      />
-      <el-table-column
-        property="absentStudents"
-        label="缺考人数"
-        min-width="100"
-      />
-      <el-table-column
-        property="violationStudents"
+        prop="violationStudents"
         label="违纪人数"
         min-width="100"
       />
       <el-table-column
-        property="validStudents"
+        prop="validStudents"
         label="有效考试人数"
         min-width="120"
       />
-      <el-table-column property="averageScore" label="平均分" min-width="100">
+      <el-table-column prop="averageScore" label="平均分" min-width="100">
         <template #default="scope">
           {{ scope.row.averageScore?.toFixed(2) }}
         </template>
       </el-table-column>
-      <el-table-column property="highestScore" label="最高分" min-width="100" />
-      <el-table-column property="lowestScore" label="最低分" min-width="100" />
-      <el-table-column
-        property="passStudents"
-        label="及格人数"
-        min-width="100"
-      />
+      <el-table-column prop="highestScore" label="最高分" min-width="100" />
+      <el-table-column prop="lowestScore" label="最低分" min-width="100" />
+      <el-table-column prop="passStudents" label="及格人数" min-width="100" />
       <el-table-column label="及格率" min-width="100">
         <template #default="scope">
           {{ (scope.row.passRate * 100).toFixed(2) }}%
         </template>
       </el-table-column>
       <el-table-column
-        property="excellentStudents"
+        prop="excellentStudents"
         label="优秀人数"
         min-width="100"
       />

+ 6 - 6
src/views/check/ImageCheck.vue

@@ -47,12 +47,12 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column property="examCardNo" label="准考证号" width="120" />
-      <el-table-column property="name" label="姓名" min-width="100" />
-      <el-table-column property="studentNo" label="学号" width="120" />
-      <el-table-column property="subject" label="科目" min-width="100" />
-      <el-table-column property="scanBatch" label="扫描批次" width="120" />
-      <el-table-column property="uploadTime" label="上传时间" width="160" />
+      <el-table-column prop="examCardNo" label="准考证号" width="120" />
+      <el-table-column prop="name" label="姓名" min-width="100" />
+      <el-table-column prop="studentNo" label="学号" width="120" />
+      <el-table-column prop="subject" label="科目" min-width="100" />
+      <el-table-column prop="scanBatch" label="扫描批次" width="120" />
+      <el-table-column prop="uploadTime" label="上传时间" width="160" />
     </el-table>
     <el-pagination
       v-model:current-page="pagination.pageNumber"

+ 7 - 7
src/views/check/ManualConfirm.vue

@@ -40,13 +40,13 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column property="examCardNo" label="准考证号" width="120" />
-      <el-table-column property="name" label="姓名" min-width="100" />
-      <el-table-column property="studentNo" label="学号" width="120" />
-      <el-table-column property="subject" label="科目" min-width="100" />
-      <el-table-column property="examPoint" label="考点" width="120" />
-      <el-table-column property="scanBatch" label="扫描批次" width="120" />
-      <el-table-column property="uploadTime" label="上传时间" width="160" />
+      <el-table-column prop="examCardNo" label="准考证号" width="120" />
+      <el-table-column prop="name" label="姓名" min-width="100" />
+      <el-table-column prop="studentNo" label="学号" width="120" />
+      <el-table-column prop="subject" label="科目" min-width="100" />
+      <el-table-column prop="examPoint" label="考点" width="120" />
+      <el-table-column prop="scanBatch" label="扫描批次" width="120" />
+      <el-table-column prop="uploadTime" label="上传时间" width="160" />
     </el-table>
     <el-pagination
       v-model:current-page="pagination.pageNumber"

+ 61 - 33
src/views/exam/ExamEdit.vue

@@ -204,7 +204,9 @@
                 </el-form-item>
 
                 <el-form-item label="原图遮盖" label-width="140px">
-                  <el-button type="primary" link>设置</el-button>
+                  <el-button type="primary" link @click="onSetMarkingArea"
+                    >设置</el-button
+                  >
                 </el-form-item>
               </el-space>
               <br />
@@ -321,6 +323,14 @@
       :advanced-config="advancedConfig"
       @confirm="handleAdvancedConfirm"
     />
+
+    <!-- 添加遮盖区域弹窗 -->
+    <SelectImgArea
+      ref="imgAreaRef"
+      v-model="selectedAreas"
+      :img-list="imgList"
+      @change="onImgAreaChange"
+    />
   </div>
 </template>
 
@@ -333,7 +343,9 @@
   import type { ExamUpdateParam, ExamAdvancedConfig } from '@/api/types/exam';
   import useLoading from '@/hooks/loading';
   import { MARKING_MODE, EXAM_TYPE } from '@/constants/enumerate';
+  import { CoverArea } from '@/api/types/common';
 
+  import SelectImgArea from '@/components/select-img-area/index.vue';
   import ExamAdvancedDialog from './ExamAdvancedDialog.vue';
 
   defineOptions({
@@ -351,40 +363,43 @@
   const advancedDialogRef = ref();
 
   // 表单数据
-  const initialFormState: Partial<ExamUpdateParam> = {
-    name: '',
-    type: 'SCAN',
-    scanImageType: 1,
-    examDate: '',
-    markingStartDate: '',
-    markingEndDate: '',
-    status: '',
-    markingMode: 'TRACK',
-    forceMark: false,
-    forbidViewStudentInfo: false,
-    forbidLeaderScoreQuery: false,
-    preventSameAccountRecheck: false,
-    forceScrollToBottom: false,
-    requireFullProgressForRecheck: false,
-    showObjectiveScore: false,
-    showOriginalScoreAfterReturn: false,
-    recheckCount: undefined,
-    passingScore: 60,
-    excellentScore: 90,
-    showOriginalPaper: false,
-    autoPositionAfterSubmit: false,
-    autoAlignAnswerSheet: false,
-    description: '',
-    // 高级配置默认值
-    minMarkingDuration: undefined,
-    singlePaperRecheckCount: undefined,
-    scoringLimitType: null,
-    scoringLimitCount: undefined,
-    enableBarcodeAIDetection: false,
-    enableAnswerSheetAIDetection: false,
+  const getInitialFormState = () => {
+    const initialFormState: Partial<ExamUpdateParam> = {
+      name: '',
+      type: 'SCAN',
+      examDate: '',
+      markingStartDate: '',
+      markingEndDate: '',
+      status: '',
+      markingMode: 'TRACK',
+      forceMark: false,
+      forbidViewStudentInfo: false,
+      forbidLeaderScoreQuery: false,
+      preventSameAccountRecheck: false,
+      forceScrollToBottom: false,
+      requireFullProgressForRecheck: false,
+      showObjectiveScore: false,
+      showOriginalScoreAfterReturn: false,
+      recheckCount: undefined,
+      passingScore: 60,
+      excellentScore: 90,
+      showOriginalPaper: false,
+      sheetConfig: [],
+      autoPositionAfterSubmit: false,
+      autoAlignAnswerSheet: false,
+      description: '',
+      // 高级配置默认值
+      minMarkingDuration: undefined,
+      singlePaperRecheckCount: undefined,
+      scoringLimitType: null,
+      scoringLimitCount: undefined,
+      enableBarcodeAIDetection: false,
+      enableAnswerSheetAIDetection: false,
+    };
+    return initialFormState;
   };
 
-  const formModel = reactive({ ...initialFormState });
+  const formModel = reactive(getInitialFormState());
 
   // 高级配置数据
   const advancedConfig = computed<ExamAdvancedConfig>(() => ({
@@ -430,6 +445,19 @@
     Object.assign(formModel, config);
   }
 
+  // 原图遮盖
+  const imgAreaRef = ref();
+  const selectedAreas = ref<CoverArea[]>([]);
+  // TODO:获取imgList
+  const imgList = ref([]);
+  function onSetMarkingArea() {
+    selectedAreas.value = formModel.sheetConfig || [];
+    imgAreaRef.value.open();
+  }
+  function onImgAreaChange(areas: CoverArea[]) {
+    formModel.sheetConfig = areas;
+  }
+
   // 保存
   async function handleSave() {
     const valid = await formRef.value?.validate().catch(() => false);

+ 26 - 38
src/views/exam/ExamManage.vue

@@ -15,11 +15,14 @@
           v-model="searchModel.type"
           placeholder="不限"
           clearable
-          style="width: 120px"
+          style="width: 140px"
         >
-          <el-option label="类型1" value="1" />
-          <el-option label="类型2" value="2" />
-          <el-option label="类型3" value="3" />
+          <el-option
+            v-for="(val, key) in EXAM_TYPE"
+            :key="key"
+            :label="val"
+            :value="key"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="状态">
@@ -29,8 +32,12 @@
           clearable
           style="width: 120px"
         >
-          <el-option label="已启用" value="1" />
-          <el-option label="已禁用" value="0" />
+          <el-option
+            v-for="(val, key) in EXAM_STATUS"
+            :key="key"
+            :label="val"
+            :value="key"
+          />
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -48,32 +55,30 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column property="id" label="ID" width="80" />
-      <el-table-column property="name" label="考试名称" min-width="200">
+      <el-table-column prop="id" label="ID" width="80" />
+      <el-table-column prop="name" label="考试名称" min-width="200">
         <template #default="scope">
           <el-button type="primary" link @click="onViewDetail(scope.row)">{{
             scope.row.name
           }}</el-button>
         </template>
       </el-table-column>
-      <el-table-column property="type" label="类型" width="100">
+      <el-table-column prop="type" label="类型" width="100">
         <template #default="scope">
-          {{ getTypeLabel(scope.row.type) }}
+          {{ dictFilter.examType(scope.row.type) }}
         </template>
       </el-table-column>
-      <el-table-column property="examDate" label="考试日期" width="120" />
-      <el-table-column property="forceMark" label="强制标记" width="100">
+      <el-table-column prop="examDate" label="考试日期" width="120" />
+      <el-table-column prop="forceMark" label="强制标记" width="100">
         <template #default="scope">
           <el-tag :type="scope.row.forceMark ? 'warning' : 'info'">
             {{ scope.row.forceMark ? '是' : '否' }}
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column property="status" label="状态" width="100">
+      <el-table-column prop="status" label="状态" width="100">
         <template #default="scope">
-          <el-tag :type="scope.row.status === 1 ? 'success' : 'danger'">
-            {{ scope.row.status === 1 ? '已启用' : '已禁用' }}
-          </el-tag>
+          {{ dictFilter.examStatus(scope.row.status) }}
         </template>
       </el-table-column>
 
@@ -119,7 +124,10 @@
   import { useRouter } from 'vue-router';
   import { getExamList } from '@/api/exam';
   import { ExamQueryItem, ExamListFilter } from '@/api/types/exam';
+  import { EXAM_STATUS, EXAM_TYPE } from '@/constants/enumerate';
   import useTable from '@/hooks/table';
+  import { dictFilter } from '@/utils/filter';
+
   import ExamStatDialog from './ExamStatDialog.vue';
   import IssuePaperTypeDialog from './IssuePaperTypeDialog.vue';
   import RejectTypeDialog from './RejectTypeDialog.vue';
@@ -132,33 +140,13 @@
 
   const searchModel = reactive<ExamListFilter>({
     name: '',
-    type: '',
-    status: '',
+    type: undefined,
+    status: undefined,
   });
 
   const { dataList, pagination, loading, toPage, pageSizeChange } =
     useTable<ExamQueryItem>(getExamList, searchModel, false);
 
-  dataList.value = [
-    {
-      id: 1,
-      name: '考试名称1',
-      type: 1,
-      examDate: '2023-01-01',
-      forceMark: true,
-      status: 1,
-    },
-  ];
-
-  function getTypeLabel(type: number): string {
-    const typeMap: Record<number, string> = {
-      1: '类型1',
-      2: '类型2',
-      3: '类型3',
-    };
-    return typeMap[type] || '未知';
-  }
-
   // action相关
   const currentExamId = ref(0);
   // 详情统计弹窗

+ 3 - 3
src/views/exam/IssuePaperTypeDialog.vue

@@ -24,9 +24,9 @@
         border
         stripe
       >
-        <el-table-column property="id" label="编号" width="80" />
-        <el-table-column property="name" label="分类名称" />
-        <el-table-column property="type" label="类型" />
+        <el-table-column prop="id" label="编号" width="80" />
+        <el-table-column prop="name" label="分类名称" />
+        <el-table-column prop="type" label="类型" />
         <el-table-column label="操作" width="120">
           <template #default="scope">
             <el-button size="small" link @click="onEdit(scope.row)">

+ 3 - 3
src/views/exam/RejectTypeDialog.vue

@@ -24,9 +24,9 @@
         border
         stripe
       >
-        <el-table-column property="id" label="编号" width="80" />
-        <el-table-column property="name" label="分类名称" />
-        <el-table-column property="type" label="类型" />
+        <el-table-column prop="id" label="编号" width="80" />
+        <el-table-column prop="name" label="分类名称" />
+        <el-table-column prop="type" label="类型" />
         <el-table-column label="操作" width="120">
           <template #default="scope">
             <el-button size="small" link @click="onEdit(scope.row)">

+ 11 - 11
src/views/issue-paper/IssuePaper.vue

@@ -69,23 +69,23 @@
       @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" width="55" />
-      <el-table-column property="subject" label="科目" min-width="120" />
-      <el-table-column property="groupNo" label="分组序号" min-width="100" />
-      <el-table-column property="status" label="状态" min-width="100">
+      <el-table-column prop="subject" label="科目" min-width="120" />
+      <el-table-column prop="groupNo" label="分组序号" min-width="100" />
+      <el-table-column prop="status" label="状态" min-width="100">
         <template #default="scope">
           <el-tag :type="getStatusType(scope.row.status)">
             {{ scope.row.status }}
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column property="examNo" label="准考证号" min-width="120" />
-      <el-table-column property="secretNo" label="密号" min-width="100" />
-      <el-table-column property="name" label="姓名" min-width="100" />
-      <el-table-column property="reviewer" label="评卷员" min-width="100" />
-      <el-table-column property="submitTime" label="提交时间" min-width="150" />
-      <el-table-column property="issueType" label="问题类型" min-width="120" />
-      <el-table-column property="handler" label="处理人" min-width="100" />
-      <el-table-column property="handleTime" label="处理时间" min-width="150" />
+      <el-table-column prop="examNo" label="准考证号" min-width="120" />
+      <el-table-column prop="secretNo" label="密号" min-width="100" />
+      <el-table-column prop="name" label="姓名" min-width="100" />
+      <el-table-column prop="reviewer" label="评卷员" min-width="100" />
+      <el-table-column prop="submitTime" label="提交时间" min-width="150" />
+      <el-table-column prop="issueType" label="问题类型" min-width="120" />
+      <el-table-column prop="handler" label="处理人" min-width="100" />
+      <el-table-column prop="handleTime" label="处理时间" min-width="150" />
       <el-table-column label="操作" width="120" fixed="right">
         <template #default="scope">
           <el-button

+ 7 - 7
src/views/log/LogManage.vue

@@ -52,13 +52,13 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column property="loginName" label="登录名" min-width="120" />
-      <el-table-column property="userType" label="用户类型" width="100" />
-      <el-table-column property="operationType" label="操作类型" width="100" />
-      <el-table-column property="loginIp" label="登录IP" width="140" />
-      <el-table-column property="function" label="功能模块" min-width="200" />
-      <el-table-column property="operationTime" label="操作时间" width="180" />
-      <el-table-column property="detail" label="详情" width="180" />
+      <el-table-column prop="loginName" label="登录名" min-width="120" />
+      <el-table-column prop="userType" label="用户类型" width="100" />
+      <el-table-column prop="operationType" label="操作类型" width="100" />
+      <el-table-column prop="loginIp" label="登录IP" width="140" />
+      <el-table-column prop="function" label="功能模块" min-width="200" />
+      <el-table-column prop="operationTime" label="操作时间" width="180" />
+      <el-table-column prop="detail" label="详情" width="180" />
     </el-table>
     <el-pagination
       v-model:current-page="pagination.pageNumber"

+ 6 - 20
src/views/mark/ArbitrationManage.vue

@@ -57,18 +57,9 @@
       @sort-change="handleSortChange"
     >
       <el-table-column type="selection" width="55" />
-      <el-table-column
-        property="subjectCode"
-        label="科目代码"
-        min-width="200"
-      />
-      <el-table-column
-        property="groupNo"
-        label="分组序号"
-        width="110"
-        sortable
-      />
-      <el-table-column property="examCardNo" label="准考证号" width="150" />
+      <el-table-column prop="subjectCode" label="科目代码" min-width="200" />
+      <el-table-column prop="groupNo" label="分组序号" width="110" sortable />
+      <el-table-column prop="examCardNo" label="准考证号" width="150" />
       <el-table-column label="状态" width="100" sortable>
         <template #default="scope">
           <el-tag :type="getStatusType(scope.row.status)" size="small">
@@ -77,22 +68,17 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="createTime"
+        prop="createTime"
         label="创建时间"
         width="180"
         sortable
       />
-      <el-table-column
-        property="handleTime"
-        label="处理时间"
-        width="180"
-        sortable
-      >
+      <el-table-column prop="handleTime" label="处理时间" width="180" sortable>
         <template #default="scope">
           {{ scope.row.handleTime || '-' }}
         </template>
       </el-table-column>
-      <el-table-column property="handler" label="处理人" width="120">
+      <el-table-column prop="handler" label="处理人" width="120">
         <template #default="scope">
           {{ scope.row.handler || '-' }}
         </template>

+ 9 - 9
src/views/mark/GroupManage.vue

@@ -25,15 +25,15 @@
       @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" width="55" />
-      <el-table-column property="groupNo" label="分组序号" width="100" />
-      <el-table-column property="questionNo" label="大题号" width="100" />
+      <el-table-column prop="groupNo" label="分组序号" width="100" />
+      <el-table-column prop="questionNo" label="大题号" width="100" />
       <el-table-column
-        property="questionName"
+        prop="questionName"
         label="大题名称"
         min-width="150"
         show-overflow-tooltip
       />
-      <el-table-column property="stepScore" label="步骤分" width="100" />
+      <el-table-column prop="stepScore" label="步骤分" width="100" />
       <el-table-column label="包含选做题" width="120">
         <template #default="scope">
           <el-tag
@@ -44,10 +44,10 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column property="markerCount" label="评卷员人数" width="120" />
-      <el-table-column property="totalTasks" label="任务总数" width="100" />
-      <el-table-column property="completedTasks" label="完成总数" width="100" />
-      <el-table-column property="remainingTasks" label="剩余总数" width="100" />
+      <el-table-column prop="markerCount" label="评卷员人数" width="120" />
+      <el-table-column prop="totalTasks" label="任务总数" width="100" />
+      <el-table-column prop="completedTasks" label="完成总数" width="100" />
+      <el-table-column prop="remainingTasks" label="剩余总数" width="100" />
       <el-table-column label="正在评卷" width="100">
         <template #default="scope">
           <el-tag :type="scope.row.isMarking ? 'success' : 'info'" size="small">
@@ -64,7 +64,7 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="markingAreaSetting"
+        prop="markingAreaSetting"
         label="评卷区设置"
         min-width="150"
         show-overflow-tooltip

+ 5 - 5
src/views/mark/MarkProgress.vue

@@ -66,7 +66,7 @@
       @sort-change="handleSortChange"
     >
       <el-table-column type="selection" width="55" />
-      <el-table-column property="courseName" label="科目" min-width="200" />
+      <el-table-column prop="courseName" label="科目" min-width="200" />
       <el-table-column label="选做异常" sortable min-width="110">
         <template #default="scope">
           <el-tag :type="scope.row.isOptionalException ? 'danger' : 'success'">
@@ -75,19 +75,19 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="uploadCount"
+        prop="uploadCount"
         label="上传人数"
         min-width="110"
         sortable
       />
       <el-table-column
-        property="subjectiveTotalScore"
+        prop="subjectiveTotalScore"
         label="主观总分"
         min-width="110"
         sortable
       />
       <el-table-column
-        property="groupCount"
+        prop="groupCount"
         label="分组总数"
         sortable
         min-width="110"
@@ -101,7 +101,7 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="unReviewedCount"
+        prop="unReviewedCount"
         label="待复核量"
         min-width="110"
         sortable

+ 7 - 17
src/views/mark/MarkerManage.vue

@@ -58,15 +58,10 @@
       @sort-change="handleSortChange"
     >
       <el-table-column type="selection" width="55" />
-      <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" sortable />
+      <el-table-column prop="loginName" label="登录名" width="120" sortable />
+      <el-table-column prop="name" label="姓名" width="100" />
+      <el-table-column prop="subject" label="科目" width="120" />
+      <el-table-column prop="group" label="分组" width="100" sortable />
       <el-table-column label="状态" width="100">
         <template #default="scope">
           <el-tag :type="getStatusType(scope.row.status)" size="small">
@@ -75,7 +70,7 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="completedCount"
+        prop="completedCount"
         label="已评数量"
         width="120"
         sortable
@@ -100,14 +95,9 @@
           </el-tag>
         </template>
       </el-table-column>
+      <el-table-column prop="taskCount" label="任务数" width="100" sortable />
       <el-table-column
-        property="taskCount"
-        label="任务数"
-        width="100"
-        sortable
-      />
-      <el-table-column
-        property="bindClass"
+        prop="bindClass"
         label="绑定班级"
         min-width="150"
         show-overflow-tooltip

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

@@ -39,17 +39,17 @@
       stripe
       @sort-change="handleSortChange"
     >
-      <el-table-column property="group" label="分组" width="80" sortable />
-      <el-table-column property="markerId" label="评卷员" min-width="120" />
-      <el-table-column property="name" label="姓名" min-width="100" />
+      <el-table-column prop="group" label="分组" width="80" sortable />
+      <el-table-column prop="markerId" label="评卷员" min-width="120" />
+      <el-table-column prop="name" label="姓名" min-width="100" />
       <el-table-column
-        property="completedTasks"
+        prop="completedTasks"
         label="完成任务数"
         width="120"
         sortable
       />
       <el-table-column
-        property="arbitrationTasks"
+        prop="arbitrationTasks"
         label="仲裁任务数"
         width="120"
         sortable
@@ -60,7 +60,7 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="returnCount"
+        prop="returnCount"
         label="打回次数"
         width="110"
         sortable
@@ -71,23 +71,18 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="markingSpeed"
+        prop="markingSpeed"
         label="评卷速度(秒)"
         width="130"
         sortable
       />
-      <el-table-column
-        property="averageScore"
-        label="平均分"
-        width="100"
-        sortable
-      >
+      <el-table-column prop="averageScore" label="平均分" width="100" sortable>
         <template #default="scope">
           {{ scope.row.averageScore.toFixed(2) }}
         </template>
       </el-table-column>
       <el-table-column
-        property="standardDeviation"
+        prop="standardDeviation"
         label="标准差"
         width="100"
         sortable

+ 2 - 2
src/views/mark/ScoreCurve.vue

@@ -21,8 +21,8 @@
         border
         stripe
       >
-        <el-table-column property="marker" label="评卷员" width="120" />
-        <el-table-column property="name" label="姓名" min-width="100" />
+        <el-table-column prop="marker" label="评卷员" width="120" />
+        <el-table-column prop="name" label="姓名" min-width="100" />
         <!-- 动态分数列 -->
         <el-table-column
           v-for="scoreRange in scoreRanges"

+ 11 - 25
src/views/mark/TaskManage.vue

@@ -114,19 +114,10 @@
       stripe
       @sort-change="handleSortChange"
     >
-      <el-table-column
-        property="subjectCode"
-        label="科目代码"
-        min-width="200"
-      />
-      <el-table-column
-        property="groupNo"
-        label="分组序号"
-        width="110"
-        sortable
-      />
-      <el-table-column property="examCardNo" label="准考证号" width="150" />
-      <el-table-column property="secretNo" label="密号" width="120" />
+      <el-table-column prop="subjectCode" label="科目代码" min-width="200" />
+      <el-table-column prop="groupNo" label="分组序号" width="110" sortable />
+      <el-table-column prop="examCardNo" label="准考证号" width="150" />
+      <el-table-column prop="secretNo" label="密号" width="120" />
       <el-table-column label="状态" width="100" sortable>
         <template #default="scope">
           <el-tag :type="getStatusType(scope.row.status)" size="small">
@@ -135,7 +126,7 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="returnReason"
+        prop="returnReason"
         label="打回原因"
         min-width="150"
         show-overflow-tooltip
@@ -144,31 +135,26 @@
           {{ scope.row.returnReason || '-' }}
         </template>
       </el-table-column>
-      <el-table-column property="marker" label="评卷员" width="120" sortable />
-      <el-table-column property="totalScore" label="评卷总分" width="100" />
+      <el-table-column prop="marker" label="评卷员" width="120" sortable />
+      <el-table-column prop="totalScore" label="评卷总分" width="100" />
       <el-table-column
-        property="giveScoreDetail"
+        prop="giveScoreDetail"
         label="给分明细"
         min-width="200"
         show-overflow-tooltip
       />
       <el-table-column
-        property="markingTime"
+        prop="markingTime"
         label="评卷时间"
         width="180"
         sortable
       />
-      <el-table-column property="reviewer" label="复核人" width="120" sortable>
+      <el-table-column prop="reviewer" label="复核人" width="120" sortable>
         <template #default="scope">
           {{ scope.row.reviewer || '-' }}
         </template>
       </el-table-column>
-      <el-table-column
-        property="reviewTime"
-        label="复核时间"
-        width="180"
-        sortable
-      >
+      <el-table-column prop="reviewTime" label="复核时间" width="180" sortable>
         <template #default="scope">
           {{ scope.row.reviewTime || '-' }}
         </template>

+ 8 - 17
src/views/mark/TrialManage.vue

@@ -48,34 +48,25 @@
       stripe
       @sort-change="handleSortChange"
     >
+      <el-table-column prop="subjectCode" label="科目代码" min-width="200" />
+      <el-table-column prop="groupNo" label="分组序号" width="110" sortable />
+      <el-table-column prop="examCardNo" label="准考证号" width="150" />
+      <el-table-column prop="secretNo" label="密号" width="120" />
+      <el-table-column prop="marker" label="评卷员" width="120" sortable />
       <el-table-column
-        property="subjectCode"
-        label="科目代码"
-        min-width="200"
-      />
-      <el-table-column
-        property="groupNo"
-        label="分组序号"
-        width="110"
-        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" sortable />
-      <el-table-column
-        property="totalScore"
+        prop="totalScore"
         label="评卷总分"
         width="110"
         sortable
       />
       <el-table-column
-        property="giveScoreDetail"
+        prop="giveScoreDetail"
         label="给分明细"
         min-width="200"
         show-overflow-tooltip
       />
       <el-table-column
-        property="markingTime"
+        prop="markingTime"
         label="评卷时间"
         width="200"
         sortable

+ 8 - 16
src/views/reject/RejectManage.vue

@@ -59,22 +59,14 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column property="subject" label="科目" min-width="100" />
-      <el-table-column property="groupNo" label="分组序号" width="100" />
-      <el-table-column property="examNo" label="准考证号" width="120" />
-      <el-table-column property="secretNo" label="密号" width="100" />
-      <el-table-column
-        property="rejectReason"
-        label="打回原因"
-        min-width="150"
-      />
-      <el-table-column property="marker" label="评卷员" width="100" />
-      <el-table-column
-        property="scoreDetails"
-        label="给分明细"
-        min-width="120"
-      />
-      <el-table-column property="rejectBy" label="打回人" width="100" />
+      <el-table-column prop="subject" label="科目" min-width="100" />
+      <el-table-column prop="groupNo" label="分组序号" width="100" />
+      <el-table-column prop="examNo" label="准考证号" width="120" />
+      <el-table-column prop="secretNo" label="密号" width="100" />
+      <el-table-column prop="rejectReason" label="打回原因" min-width="150" />
+      <el-table-column prop="marker" label="评卷员" width="100" />
+      <el-table-column prop="scoreDetails" label="给分明细" min-width="120" />
+      <el-table-column prop="rejectBy" label="打回人" width="100" />
       <el-table-column label="打回时间" width="180">
         <template #default="scope">
           {{ timestampFilter(scope.row.rejectTime) }}

+ 8 - 16
src/views/reject/RejectRecord.vue

@@ -60,22 +60,14 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column property="subject" label="科目" min-width="100" />
-      <el-table-column property="groupNo" label="分组序号" width="100" />
-      <el-table-column property="examNo" label="准考证号" width="120" />
-      <el-table-column property="secretNo" label="密号" width="100" />
-      <el-table-column
-        property="rejectReason"
-        label="打回原因"
-        min-width="150"
-      />
-      <el-table-column property="marker" label="评卷员" width="100" />
-      <el-table-column
-        property="scoreDetails"
-        label="给分明细"
-        min-width="120"
-      />
-      <el-table-column property="rejectBy" label="打回人" width="100" />
+      <el-table-column prop="subject" label="科目" min-width="100" />
+      <el-table-column prop="groupNo" label="分组序号" width="100" />
+      <el-table-column prop="examNo" label="准考证号" width="120" />
+      <el-table-column prop="secretNo" label="密号" width="100" />
+      <el-table-column prop="rejectReason" label="打回原因" min-width="150" />
+      <el-table-column prop="marker" label="评卷员" width="100" />
+      <el-table-column prop="scoreDetails" label="给分明细" min-width="120" />
+      <el-table-column prop="rejectBy" label="打回人" width="100" />
       <el-table-column label="打回时间" width="180">
         <template #default="scope">
           {{ timestampFilter(scope.row.rejectTime) }}

+ 6 - 11
src/views/reject/RejectStatistics.vue

@@ -22,38 +22,33 @@
       stripe
       @sort-change="handleSortChange"
     >
-      <el-table-column
-        property="subject"
-        label="科目"
-        min-width="200"
-        sortable
-      />
+      <el-table-column prop="subject" label="科目" min-width="200" sortable />
       <el-table-column
         v-if="searchModel.showGroupNo"
-        property="groupNo"
+        prop="groupNo"
         label="分组"
         min-width="100"
       />
       <el-table-column
-        property="totalTasks"
+        prop="totalTasks"
         label="任务总数"
         min-width="100"
         sortable
       />
       <el-table-column
-        property="completedTasks"
+        prop="completedTasks"
         label="已完成"
         min-width="100"
         sortable
       />
       <el-table-column
-        property="rejectCount"
+        prop="rejectCount"
         label="打回数量"
         min-width="100"
         sortable
       />
       <el-table-column
-        property="rejectRate"
+        prop="rejectRate"
         label="打回率"
         min-width="100"
         sortable

+ 8 - 17
src/views/review/AllReview.vue

@@ -195,12 +195,12 @@
     >
       <el-table-column type="selection" width="55" />
       <el-table-column
-        property="courseName"
+        prop="courseName"
         label="科目"
         min-width="200"
         sortable
       />
-      <el-table-column property="secretNo" label="密号" width="120" />
+      <el-table-column prop="secretNo" label="密号" width="120" />
       <el-table-column label="选做异常" width="100">
         <template #default="scope">
           <el-tag :type="scope.row.isOptionalException ? 'warning' : 'success'">
@@ -208,19 +208,15 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column property="objectiveScore" label="客观分" width="100" />
-      <el-table-column property="subjectiveScore" label="主观分" width="100" />
+      <el-table-column prop="objectiveScore" label="客观分" width="100" />
+      <el-table-column prop="subjectiveScore" label="主观分" width="100" />
       <el-table-column
-        property="totalScore"
+        prop="totalScore"
         label="试卷总分"
         width="110"
         sortable
       />
-      <el-table-column
-        property="scoreDetail"
-        label="得分明细"
-        min-width="200"
-      />
+      <el-table-column prop="scoreDetail" label="得分明细" min-width="200" />
       <el-table-column label="操作" width="100" fixed="right">
         <template #default="scope">
           <el-button size="small" link @click="onTrackView(scope.row)">
@@ -235,14 +231,9 @@
         </template>
       </el-table-column>
       <!-- TODO:复核人,复核时间  sortable -->
+      <el-table-column prop="reviewer" label="复核人" width="120" sortable />
       <el-table-column
-        property="reviewer"
-        label="复核人"
-        width="120"
-        sortable
-      />
-      <el-table-column
-        property="reviewTime"
+        prop="reviewTime"
         label="复核时间"
         width="180"
         sortable

+ 5 - 5
src/views/review/ScoreQuery.vue

@@ -16,9 +16,9 @@
       stripe
     >
       <el-table-column type="selection" width="55" />
-      <el-table-column property="studentNo" label="考生编号" width="150" />
-      <el-table-column property="courseName" label="科目" width="200" />
-      <el-table-column property="totalScore" label="满分" width="100" />
+      <el-table-column prop="studentNo" label="考生编号" width="150" />
+      <el-table-column prop="courseName" label="科目" width="200" />
+      <el-table-column prop="totalScore" label="满分" width="100" />
       <el-table-column label="状态" width="120">
         <template #default="scope">
           <el-tag :type="getStatusType(scope.row.status)">
@@ -26,8 +26,8 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column property="paperScore" label="试卷总分" width="100" />
-      <el-table-column property="scoreDetail" label="得分明细" min-width="200">
+      <el-table-column prop="paperScore" label="试卷总分" width="100" />
+      <el-table-column prop="scoreDetail" label="得分明细" min-width="200">
       </el-table-column>
     </el-table>
     <el-pagination

+ 6 - 6
src/views/review/ScoreReviewStatistics.vue

@@ -54,7 +54,7 @@
       stripe
       @sort-change="handleSortChange"
     >
-      <el-table-column property="courseName" label="科目" min-width="200" />
+      <el-table-column prop="courseName" label="科目" min-width="200" />
       <el-table-column label="选做科目" min-width="110" sortable>
         <template #default="scope">
           <el-tag :type="scope.row.isOptional ? 'success' : 'info'">
@@ -63,25 +63,25 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="paperCount"
+        prop="paperCount"
         label="试卷总量"
         min-width="110"
         sortable
       />
       <el-table-column
-        property="taskCount"
+        prop="taskCount"
         label="任务数"
         min-width="100"
         sortable
       />
       <el-table-column
-        property="reviewedCount"
+        prop="reviewedCount"
         label="已复核数"
         width="110"
         sortable
       />
       <el-table-column
-        property="unReviewedCount"
+        prop="unReviewedCount"
         label="待复核数"
         min-width="110"
         sortable
@@ -95,7 +95,7 @@
         </template>
       </el-table-column>
       <el-table-column
-        property="reviewedTimes"
+        prop="reviewedTimes"
         label="已复核次数"
         min-width="120"
         sortable

+ 5 - 10
src/views/scan/ScanCourseStats.vue

@@ -42,32 +42,27 @@
       stripe
       @sort-change="handleSortChange"
     >
+      <el-table-column prop="name" label="考试名称" min-width="200" sortable />
       <el-table-column
-        property="name"
-        label="考试名称"
-        min-width="200"
-        sortable
-      />
-      <el-table-column
-        property="totalStudents"
+        prop="totalStudents"
         label="考生总数"
         min-width="100"
         sortable
       />
       <el-table-column
-        property="scannedSheets"
+        prop="scannedSheets"
         label="已扫张数"
         min-width="100"
         sortable
       />
       <el-table-column
-        property="scannedStudents"
+        prop="scannedStudents"
         label="已扫人数"
         min-width="100"
         sortable
       />
       <el-table-column
-        property="manualAbsent"
+        prop="manualAbsent"
         label="人工指定缺考"
         min-width="100"
         sortable

+ 4 - 4
src/views/scan/ScanPointStats.vue

@@ -28,25 +28,25 @@
       @sort-change="handleSortChange"
     >
       <el-table-column
-        property="totalStudents"
+        prop="totalStudents"
         label="考生总数"
         min-width="100"
         sortable
       />
       <el-table-column
-        property="scannedSheets"
+        prop="scannedSheets"
         label="已扫张数"
         min-width="100"
         sortable
       />
       <el-table-column
-        property="scannedStudents"
+        prop="scannedStudents"
         label="已扫人数"
         min-width="100"
         sortable
       />
       <el-table-column
-        property="manualAbsent"
+        prop="manualAbsent"
         label="人工指定缺考"
         min-width="100"
         sortable

+ 2 - 2
src/views/scan/SignPaperStats.vue

@@ -35,8 +35,8 @@
       border
       stripe
     >
-      <el-table-column property="signPaperNo" label="签到表编号" sortable />
-      <el-table-column property="imageCount" label="图片数量" sortable />
+      <el-table-column prop="signPaperNo" label="签到表编号" sortable />
+      <el-table-column prop="imageCount" label="图片数量" sortable />
       <el-table-column label="操作" width="100" fixed="right">
         <template #default="scope">
           <el-button size="small" link @click="onView(scope.row)">

+ 14 - 24
src/views/score/ScoreQuery.vue

@@ -165,26 +165,26 @@
       stripe
       @sort-change="handleSortChange"
     >
-      <el-table-column property="examNo" label="准考证号" width="120" />
-      <el-table-column property="name" label="姓名" min-width="100" />
-      <el-table-column property="studentNo" label="学号" width="120" sortable />
-      <el-table-column property="subject" label="科目" min-width="200" />
-      <el-table-column property="level" label="层次" min-width="100" />
-      <el-table-column property="majorType" label="专业类型" width="100" />
+      <el-table-column prop="examNo" label="准考证号" width="120" />
+      <el-table-column prop="name" label="姓名" min-width="100" />
+      <el-table-column prop="studentNo" label="学号" width="120" sortable />
+      <el-table-column prop="subject" label="科目" min-width="200" />
+      <el-table-column prop="level" label="层次" min-width="100" />
+      <el-table-column prop="majorType" label="专业类型" width="100" />
       <el-table-column
-        property="objectiveScore"
+        prop="objectiveScore"
         label="客观总分"
         width="110"
         sortable
       />
       <el-table-column
-        property="subjectiveScore"
+        prop="subjectiveScore"
         label="主观总分"
         width="110"
         sortable
       />
       <el-table-column
-        property="totalScore"
+        prop="totalScore"
         label="全卷总分"
         min-width="110"
         sortable
@@ -210,21 +210,11 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column
-        property="college"
-        label="学院"
-        min-width="100"
-        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"
-        sortable
-      />
-      <el-table-column property="examRoom" label="考场" min-width="100" />
+      <el-table-column prop="college" label="学院" min-width="100" sortable />
+      <el-table-column prop="className" label="班级" min-width="100" />
+      <el-table-column prop="teacher" label="任课老师" min-width="100" />
+      <el-table-column prop="examSite" label="考点" min-width="100" sortable />
+      <el-table-column prop="examRoom" label="考场" min-width="100" />
       <el-table-column label="操作" width="100" fixed="right">
         <template #default="scope">
           <el-button

+ 16 - 16
src/views/student/StudentManage.vue

@@ -196,49 +196,49 @@
       <el-table-column type="index" label="序号" width="60" />
       <el-table-column
         v-if="checkFieldVisible('examNo')"
-        property="examNo"
+        prop="examNo"
         label="准考证号"
         width="120"
       />
       <el-table-column
         v-if="checkFieldVisible('secretNo')"
-        property="secretNo"
+        prop="secretNo"
         label="密号"
         min-width="100"
       />
       <el-table-column
         v-if="checkFieldVisible('name')"
-        property="name"
+        prop="name"
         label="姓名"
         min-width="100"
       />
       <el-table-column
         v-if="checkFieldVisible('studentNo')"
-        property="studentNo"
+        prop="studentNo"
         label="学号"
         width="120"
       />
       <el-table-column
         v-if="checkFieldVisible('subject')"
-        property="subject"
+        prop="subject"
         label="科目"
         min-width="100"
       />
       <el-table-column
         v-if="checkFieldVisible('examType')"
-        property="examType"
+        prop="examType"
         label="试卷类型"
         width="100"
       />
       <el-table-column
         v-if="checkFieldVisible('level')"
-        property="level"
+        prop="level"
         label="层次"
         width="80"
       />
       <el-table-column
         v-if="checkFieldVisible('majorType')"
-        property="majorType"
+        prop="majorType"
         label="专业类型"
         width="100"
       />
@@ -263,7 +263,7 @@
       </el-table-column>
       <el-table-column
         v-if="checkFieldVisible('scanPages')"
-        property="scanPages"
+        prop="scanPages"
         label="扫描张数"
         width="100"
       />
@@ -280,43 +280,43 @@
       </el-table-column>
       <el-table-column
         v-if="checkFieldVisible('batchNo')"
-        property="batchNo"
+        prop="batchNo"
         label="批次编号"
         width="100"
       />
       <el-table-column
         v-if="checkFieldVisible('signBookNo')"
-        property="signBookNo"
+        prop="signBookNo"
         label="签到表编号"
         width="120"
       />
       <el-table-column
         v-if="checkFieldVisible('college')"
-        property="college"
+        prop="college"
         label="学院"
         width="120"
       />
       <el-table-column
         v-if="checkFieldVisible('className')"
-        property="className"
+        prop="className"
         label="班级"
         width="100"
       />
       <el-table-column
         v-if="checkFieldVisible('teacher')"
-        property="teacher"
+        prop="teacher"
         label="任课老师"
         width="100"
       />
       <el-table-column
         v-if="checkFieldVisible('examSite')"
-        property="examSite"
+        prop="examSite"
         label="考点"
         width="100"
       />
       <el-table-column
         v-if="checkFieldVisible('examRoom')"
-        property="examRoom"
+        prop="examRoom"
         label="考场"
         width="80"
       />