Explorar o código

feat: api-评卷管理整理

zhangjie hai 1 semana
pai
achega
ddaf6a9400

+ 7 - 5
src/api/mark.ts

@@ -19,7 +19,7 @@ import {
   MarkStatInfo,
   MarkStatListPageParam,
   MarkStatListPageRes,
-  MarkRejectTaskParam,
+  MarkRejectResetTaskParam,
 } from './types/mark';
 
 // 质量监控
@@ -27,19 +27,19 @@ import {
 export function getQualityMonitorList(
   params: MarkQualityMonitorListPageParam
 ): Promise<MarkQualityMonitorListPageRes> {
-  return axios.post('/api/mark/quality/monitor/list', {}, { params });
+  return axios.post('/api/admin/exam/quality/list/group', {}, { params });
 }
 // 重新计算
 export function qualityMonitorCalculate(
   params: MarkQualityMonitorListFilter
 ): Promise<boolean> {
-  return axios.post('/api/mark/re-calculate', {}, { params });
+  return axios.post('/api/admin/exam/quality/update', {}, { params });
 }
 // 给分曲线
 export function qualityMonitorScoreList(
   params: QMScoreListParam
 ): Promise<QMScoreItem[]> {
-  return axios.post('/api/mark/re-calculate', {}, { params });
+  return axios.post('/api/admin/exam/quality/chart', {}, { params });
 }
 
 // 仲裁管理
@@ -59,7 +59,9 @@ export function getMarkTaskList(
 }
 
 // 任务打回
-export function markTaskReject(params: MarkRejectTaskParam): Promise<boolean> {
+export function markTaskReject(
+  params: MarkRejectResetTaskParam
+): Promise<boolean> {
   return axios.post('/api/mark/task/reject', {}, { params });
 }
 

+ 4 - 4
src/api/types/check.ts

@@ -6,7 +6,7 @@ export interface ResultCheckDataListFilter {
   // 是否缺考
   isMissing: boolean | undefined;
   // 准考证号
-  examCardNo: string;
+  examNumber: string;
   // 科目
   subject: string;
   // 科目范围模式
@@ -34,7 +34,7 @@ export interface ImageCheckDataListFilter {
   // 姓名
   name: string;
   // 准考证号
-  examCardNo: string;
+  examNumber: string;
   // 学号
   studentNo: string;
   // 科目
@@ -49,7 +49,7 @@ export interface ImageCheckDataListItem {
   // 姓名
   name: string;
   // 准考证号
-  examCardNo: string;
+  examNumber: string;
   // 学号
   studentNo: string;
   // 科目
@@ -79,7 +79,7 @@ export interface ManualConfirmDataListItem {
   // 姓名
   name: string;
   // 准考证号
-  examCardNo: string;
+  examNumber: string;
   // 学号
   studentNo: string;
   // 科目

+ 113 - 102
src/api/types/mark.ts

@@ -9,39 +9,41 @@ import { PageResult, PageParams, CoverArea } from './common';
 // 质量监控列表:分组	评卷员	姓名	完成任务数	仲裁任务数	仲裁率	打回次数	评卷采用率	评卷速度(秒)	平均分	标准差
 export interface MarkQualityMonitorItem {
   // 分组
-  group: string;
-  // 评卷员ID
-  markerId: string;
+  groupNumber: string;
+  groupName: string;
+  groupText: string;
+  // 评卷员
+  markLogin: string;
   // 评卷员姓名
-  name: string;
+  markerName: string;
   // 完成任务数
-  completedTasks: number;
+  finishCount: number;
   // 仲裁任务数
-  arbitrationTasks: number;
+  arbitrateCount: number;
   // 仲裁率
-  arbitrationRate: number;
+  arbitrateRatio: number;
   // 打回次数
-  returnCount: number;
+  rejectCount: number;
   // 评卷采用率
   adoptionRate: number;
   // 评卷速度(秒)
-  markingSpeed: number;
+  avgSpeed: number;
   // 平均分
-  averageScore: number;
+  avgScore: number;
   // 标准差
-  standardDeviation: number;
+  stdevScore: number;
 }
 export type MarkQualityMonitorListPageRes = PageResult<MarkQualityMonitorItem>;
 
 export interface MarkQualityMonitorListFilter {
   // 科目
-  subject: string | null;
+  subjectCode: string | null;
   // 分组
-  group?: string;
+  groupNumber?: string;
   // 已评卷
   marked?: boolean;
   // 不含仲裁
-  noArbitration?: boolean;
+  noArbitrate?: boolean;
 }
 export type MarkQualityMonitorListPageParam =
   PageParams<MarkQualityMonitorListFilter>;
@@ -49,17 +51,17 @@ export type MarkQualityMonitorListPageParam =
 // 给分曲线列表: 评卷员	姓名 给分
 export interface QMScoreItem {
   // 评卷员
-  marker: string;
+  markLogin: string;
   // 姓名
-  name: string;
+  markerName: string;
   // 给分
   scores: Array<{ score: number; count: number }>;
 }
 export type QMScoreListParam = {
   // 科目
-  subject: string | null;
+  subjectCode: string;
   // 分组
-  group: string;
+  groupNumber: string;
 };
 
 // 仲裁管理
@@ -68,95 +70,102 @@ export interface MarkArbitrationItem {
   id: number;
   // 科目代码
   subjectCode: string;
+  // 科目名称
+  subjectName: string;
   // 分组序号
   groupNumber: number;
   // 准考证号
-  examCardNo: string;
+  examNumber: string;
   // 状态
   status: string;
+  statusText: string;
   // 创建时间
   createTime: string;
   // 处理时间
-  handleTime: string;
+  updateTime: string;
   // 处理人
-  handler: string;
+  arbitrateName: string;
 }
 export type MarkArbitrationListPageRes = PageResult<MarkArbitrationItem>;
 export interface MarkArbitrationListFilter {
   // 科目
-  subject: string | null;
+  subjectCode: string | null;
   // 分组
-  group?: string;
+  groupNumber?: string;
   // 状态
   status?: string;
-  // 选做题
-  optional?: boolean;
+  // 选做题,未选做
+  unselective?: boolean;
   // 准考证号
-  examCardNo?: string;
+  examNumber?: string;
 }
 export type MarkArbitrationListPageParam =
   PageParams<MarkArbitrationListFilter>;
 
 // 任务管理
-// 任务管理列表:科目代码	分组序号	准考证号	密号	状态	打回原因	评卷员	评卷总分	给分明细	评卷时间	复核人	复核时间
+// 任务管理列表:科目代码	分组序号	准考证号	密号	状态	状态文本	处理时间	处理人	打回原因	评卷员	评卷总分	给分明细	评卷时间	复核人	复核时间
 export interface MarkTaskItem {
-  // 任务ID
   id: number;
   // 科目代码
   subjectCode: string;
+  // 科目名称
+  subjectName: string;
   // 分组序号
   groupNumber: number;
   // 准考证号
-  examCardNo: string;
+  examNumber: string;
   // 密号
   secretNumber: string;
   // 状态
   status: string;
   // 打回原因
-  returnReason: string;
+  rejectReason: string;
   // 评卷员
-  marker: string;
+  markerLoginName: string;
   // 评卷总分
-  totalScore: number;
+  markerScore: number;
   // 给分明细
-  giveScoreDetail: string;
+  markerScoreList: string;
   // 评卷时间
-  markingTime: string;
+  markerTime: string;
   // 复核人
-  reviewer: string;
+  headerLoginName: string;
   // 复核时间
-  reviewTime: string;
+  headerTime: string;
 }
 export type MarkTaskListPageRes = PageResult<MarkTaskItem>;
 export interface MarkTaskListFilter {
   // 科目
-  subject: string | null;
+  subjectCode: string | null;
   // 分组
-  group?: string;
+  groupNumber?: string;
   // 状态
   status?: string;
   // 评卷员
   markerId?: number;
-  // 选做题
-  optional?: boolean;
+  // 选做题,未选做
+  unselective?: boolean;
   // 准考证号
-  examCardNo?: string;
+  examNumber?: string;
   // 密号
   secretNumber?: string;
   // 总分
-  totalStartScore?: number;
-  totalEndScore?: number;
+  startScore?: number;
+  endScore?: number;
   // 小题得分
-  smallQuestionScore?: number;
+  questionScore?: number;
 }
 export type MarkTaskListPageParam = PageParams<MarkTaskListFilter>;
 
-export interface MarkRejectTaskParam {
+// 任务打回或重置参数
+export interface MarkRejectResetTaskParam {
   id: number;
   // 打回类型
-  rejectType: string;
+  rejectType?: string;
   // 打回原因
-  rejectReason: string;
+  reason?: string;
+  // 是否重置
+  isRest?: boolean;
 }
 
 // 试评管理
@@ -169,26 +178,26 @@ export interface MarkTrialItem {
   // 分组序号
   groupNumber: number;
   // 准考证号
-  examCardNo: string;
+  examNumber: string;
   // 密号
   secretNumber: string;
   // 评卷员
-  marker: string;
+  markerLoginName: string;
   // 评卷总分
-  totalScore: number;
+  markerScore: number;
   // 给分明细
-  giveScoreDetail: string;
+  markerScoreList: string;
   // 评卷时间
-  markingTime: string;
+  markerTime: string;
 }
 export type MarkTrialListPageRes = PageResult<MarkTrialItem>;
 export interface MarkTrialListFilter {
   // 科目
-  subject: string | null;
+  subjectCode: string | null;
   // 分组
-  group?: string;
+  groupNumber?: string;
   // 准考证号
-  examCardNo?: string;
+  examNumber?: string;
   // 密号
   secretNumber?: string;
 }
@@ -203,19 +212,21 @@ export interface MarkMarkerItem {
   // 姓名
   name: string;
   // 科目
-  subject: string;
-  // 分组
-  group: string;
+  subjectCode: string;
+  // 科目名称
+  subjectName: string;
+  // 分组序号
+  groupNumber: string;
   // 状态
   status: string;
   // 已评数量
-  completedCount: number;
+  markedCount: number;
   // 正在评卷
-  marking: boolean;
+  currentCount: number;
   // 任务数
-  taskCount: number;
-  // 绑定班级
-  bindClass: string;
+  topCount: number;
+  // 绑定班级数量
+  classCount: number;
 }
 export type MarkMarkerListPageRes = PageResult<MarkMarkerItem>;
 export interface MarkMarkerListFilter {
@@ -224,9 +235,9 @@ export interface MarkMarkerListFilter {
   // 姓名
   name?: string;
   // 科目
-  subject: string | null;
+  subjectCode?: string | null;
   // 分组
-  group?: string;
+  groupNumber?: string;
   // 已评卷
   marked?: boolean;
 }
@@ -239,34 +250,34 @@ export interface MarkGroupItem {
   // 分组序号
   groupNumber: number;
   // 大题号
-  questionNo: string;
+  mainNumber: string;
   // 大题名称
-  questionName: string;
+  title: string;
   // 步骤分
-  stepScore: number;
+  scoreList: string;
   // 包含选做题
-  optional: boolean;
+  selective: boolean;
   // 评卷员人数
   markerCount: number;
   // 任务总数
-  totalTaskCount: number;
+  libraryCount: number;
   // 完成总数
-  completedTaskCount: number;
+  markedCount: number;
   // 剩余总数
-  remainingTaskCount: number;
+  leftCount: number;
   // 正在评卷
-  marking: boolean;
+  currentCount: number;
   // 进度
-  progress: number;
+  percent: number;
   // 评卷区设置
-  markingAreaSetting: string;
+  picList: string;
   // 状态
   status: string;
 }
 export type MarkGroupListPageRes = MarkGroupItem[];
 export interface MarkGroupListFilter {
   // 科目
-  subject: string | null;
+  subjectCode: string | null;
 }
 export type MarkGroupListPageParam = PageParams<MarkGroupListFilter>;
 
@@ -277,71 +288,71 @@ export interface MarkGroupUpdateParams {
   // 分组序号
   groupNumber: number;
   // 名称
-  name: string;
+  groupName: string;
   // 题目
   questions: Array<{
     // 大题号
-    bigQuestionNo: string;
+    mainNumber: string;
     // 小题号
-    smallQuestionNo: string;
+    subNumber: string;
     // 间隔分
     intervalScore: number;
     // 仲裁阀值
-    arbitrationThreshold?: number;
+    arbitrateThreshold?: number;
   }>;
   // 评卷图
-  markingArea?: CoverArea[];
+  picList?: CoverArea[];
   // 双评
-  doubleMarking: boolean;
+  openDouble: boolean;
   // 仲裁方式
-  arbitrationType?: ArbitrationType;
+  arbitrateType?: ArbitrationType;
   // 双评比例
-  doubleMarkingRatio?: number;
+  doubleRate?: number;
   // 仲裁阀值
-  arbitrationThreshold?: number;
+  arbitrateThreshold?: number;
   // 合分策略
-  combinationStrategy?: CombineScoreStrategy;
+  scorePolicy?: CombineScoreStrategy;
   // 三评规则
-  threeMarkingRule?: ThreeEvaluationRule;
+  thirdPolicy?: ThreeEvaluationRule;
 }
 
 // 评卷进度
 // 评卷进度统计信息
 export interface MarkStatInfo {
   // 任务已完成数
-  taskFinishedCount: number;
+  markedCount: number;
   // 任务待完成数
-  taskUnfinishedCount: number;
+  unMarkedCount: number;
   // 科目已完成数
-  courseFinishedCount: number;
+  finishCount: number;
   // 科目待完成数
-  courseUnfinishedCount: number;
+  unFinishCount: number;
 }
 
 // 评卷进度统计列表:科目	选做异常	上传人数	主观总分	分组总数	完成进度	待复核量
 export interface MarkStatItem {
-  // 科目ID
-  courseId: number;
-  // 科目
-  courseName: string;
+  // 科目名称
+  subjectName: string;
+  // 科目代码
+  subjectCode: string;
   // 选做异常
-  isOptionalException: boolean;
+  selectiveError: boolean;
   // 上传人数
   uploadCount: number;
   // 主观总分
-  subjectiveTotalScore: number;
+  subjectiveScore: number;
   // 分组总数
   groupCount: number;
   // 完成进度
-  progress: number;
+  percent: number;
   // 待复核量
-  unReviewedCount: number;
+  markedCount: number;
 }
 export type MarkStatListPageRes = PageResult<MarkStatItem>;
 export interface MarkStatListFilter {
   // 科目
-  subject: string | null;
-  // 完成进度
-  progress?: string;
+  subjectCode: string | null;
+  // 完成状态
+  finished?: boolean;
 }
 export type MarkStatListPageParam = PageParams<MarkStatListFilter>;

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

@@ -11,7 +11,7 @@
       </el-form-item>
       <el-form-item label="准考证号">
         <el-input
-          v-model.trim="searchModel.examCardNo"
+          v-model.trim="searchModel.examNumber"
           placeholder="请输入"
           clearable
           style="width: 120px"
@@ -47,7 +47,7 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column prop="examCardNo" label="准考证号" width="120" />
+      <el-table-column prop="examNumber" 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" />
@@ -81,7 +81,7 @@
 
   const searchModel = reactive<ImageCheckDataListFilter>({
     name: '',
-    examCardNo: '',
+    examNumber: '',
     studentNo: '',
     subject: null,
   });

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

@@ -40,7 +40,7 @@
       stripe
     >
       <el-table-column type="index" label="序号" width="60" />
-      <el-table-column prop="examCardNo" label="准考证号" width="120" />
+      <el-table-column prop="examNumber" 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" />

+ 2 - 2
src/views/check/ResultCheck.vue

@@ -14,7 +14,7 @@
       </el-form-item>
       <el-form-item label="准考证号">
         <el-input
-          v-model.trim="searchModel.examCardNo"
+          v-model.trim="searchModel.examNumber"
           placeholder="多个准考证号用英文逗号分隔"
           :rows="4"
           type="textarea"
@@ -165,7 +165,7 @@
 
   const searchModel = reactive<ResultCheckDataListFilter>({
     isMissing: undefined,
-    examCardNo: '',
+    examNumber: '',
     subject: '',
     subjectRangeMode: 'BELONG',
     examPoint: '',

+ 13 - 13
src/views/mark/ArbitrationManage.vue

@@ -2,11 +2,11 @@
   <div class="part-box is-border">
     <el-form inline>
       <el-form-item label="科目">
-        <select-subject v-model="searchModel.subject"></select-subject>
+        <select-subject v-model="searchModel.subjectCode"></select-subject>
       </el-form-item>
       <el-form-item label="分组">
         <el-input
-          v-model.trim="searchModel.group"
+          v-model.trim="searchModel.groupNumber"
           placeholder="请输入分组"
           clearable
           style="width: 120px"
@@ -27,7 +27,7 @@
       </el-form-item>
       <el-form-item label="准考证号">
         <el-input
-          v-model.trim="searchModel.examCardNo"
+          v-model.trim="searchModel.examNumber"
           placeholder="请输入准考证号"
           clearable
           style="width: 150px"
@@ -64,7 +64,7 @@
         width="110"
         sortable
       />
-      <el-table-column prop="examCardNo" label="准考证号" width="150" />
+      <el-table-column prop="examNumber" label="准考证号" width="150" />
       <el-table-column label="状态" width="100" sortable>
         <template #default="scope">
           <el-tag :type="getStatusType(scope.row.status)" size="small">
@@ -78,14 +78,14 @@
         width="180"
         sortable
       />
-      <el-table-column prop="handleTime" label="处理时间" width="180" sortable>
+      <el-table-column prop="updateTime" label="处理时间" width="180" sortable>
         <template #default="scope">
-          {{ scope.row.handleTime || '-' }}
+          {{ scope.row.updateTime || '-' }}
         </template>
       </el-table-column>
-      <el-table-column prop="handler" label="处理人" width="120">
+      <el-table-column prop="arbitrateName" label="处理人" width="120">
         <template #default="scope">
-          {{ scope.row.handler || '-' }}
+          {{ scope.row.arbitrateName || '-' }}
         </template>
       </el-table-column>
       <el-table-column label="操作" width="120" fixed="right">
@@ -127,11 +127,11 @@
   });
 
   const searchModel = reactive<MarkArbitrationListFilter>({
-    subject: null,
-    group: '',
+    subjectCode: null,
+    groupNumber: '',
     status: '',
     optional: undefined,
-    examCardNo: '',
+    examNumber: '',
   });
 
   const {
@@ -167,7 +167,7 @@
 
   // 处理仲裁
   function onHandle(row: MarkArbitrationItem) {
-    ElMessage.info(`处理仲裁:${row.examCardNo}`);
+    ElMessage.info(`处理仲裁:${row.examNumber}`);
     // TODO: 实现处理仲裁的逻辑
   }
 
@@ -178,7 +178,7 @@
     }
 
     ElMessage.info(
-      `批量处理仲裁:${selectedRows.map((row) => row.examCardNo).join(',')}`
+      `批量处理仲裁:${selectedRows.map((row) => row.examNumber).join(',')}`
     );
     // TODO: 实现批量处理仲裁的逻辑
   }

+ 24 - 31
src/views/mark/GroupManage.vue

@@ -2,7 +2,7 @@
   <div class="part-box is-border">
     <el-form inline>
       <el-form-item label="科目">
-        <select-subject v-model="searchModel.subject"></select-subject>
+        <select-subject v-model="searchModel.subjectCode"></select-subject>
       </el-form-item>
     </el-form>
     <el-divider class="form-divider" />
@@ -26,49 +26,42 @@
     >
       <el-table-column type="selection" width="55" />
       <el-table-column prop="groupNumber" label="分组序号" width="100" />
-      <el-table-column prop="questionNo" label="大题号" width="100" />
+      <el-table-column prop="mainNumber" label="大题号" width="100" />
       <el-table-column
-        prop="questionName"
+        prop="title"
         label="大题名称"
         min-width="150"
         show-overflow-tooltip
       />
-      <el-table-column prop="stepScore" label="步骤分" width="100" />
+      <el-table-column prop="scoreList" label="步骤分" width="100" />
       <el-table-column label="包含选做题" width="120">
         <template #default="scope">
-          <el-tag
-            :type="scope.row.hasOptional ? 'success' : 'info'"
-            size="small"
-          >
-            {{ scope.row.hasOptional ? '是' : '否' }}
+          <el-tag :type="scope.row.selective ? 'success' : 'info'" size="small">
+            {{ scope.row.selective ? '是' : '否' }}
           </el-tag>
         </template>
       </el-table-column>
       <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">
-            {{ scope.row.isMarking ? '是' : '否' }}
-          </el-tag>
-        </template>
-      </el-table-column>
+      <el-table-column prop="libraryCount" label="任务总数" width="100" />
+      <el-table-column prop="markedCount" label="完成总数" width="100" />
+      <el-table-column prop="leftCount" label="剩余总数" width="100" />
+      <el-table-column prop="currentCount" label="正在评卷" width="100" />
       <el-table-column label="进度" width="120">
         <template #default="scope">
           <el-progress
-            :percentage="scope.row.progress"
-            :color="scope.row.progress === 100 ? '#67c23a' : '#409eff'"
+            :percentage="scope.row.percent"
+            :color="scope.row.percent === 100 ? '#67c23a' : '#409eff'"
           />
         </template>
       </el-table-column>
-      <el-table-column
-        prop="markingAreaSetting"
-        label="评卷区设置"
-        min-width="150"
-        show-overflow-tooltip
-      />
+      <el-table-column prop="picList" label="评卷区设置" min-width="150">
+        <template #default="scope">
+          <el-tag :type="scope.row.picList ? 'success' : 'info'" size="small">
+            {{ scope.row.picList ? '是' : '否' }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="status" label="状态" width="80" />
       <el-table-column label="操作" width="120" fixed="right">
         <template #default="scope">
           <el-button
@@ -94,7 +87,7 @@
 
   <SetTrialCountDialog
     ref="setTrialCountDialogRef"
-    :subject-id="searchModel.subject"
+    :subject-id="searchModel.subjectCode"
   />
 </template>
 
@@ -117,7 +110,7 @@
   });
 
   const searchModel = reactive<MarkGroupListFilter>({
-    subject: null,
+    subjectCode: null,
   });
 
   const setTrialCountDialogRef =
@@ -153,13 +146,13 @@
 
   // 数量校对
   async function onDataCheck() {
-    if (!searchModel.subject) {
+    if (!searchModel.subjectCode) {
       ElMessage.warning('请选择科目');
       return;
     }
 
     try {
-      await markGroupDataCheck(searchModel.subject);
+      await markGroupDataCheck(searchModel.subjectCode);
       ElMessage.success('数量校对成功');
       getList();
     } catch (error) {

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

@@ -16,17 +16,17 @@
   <div class="part-box is-border">
     <el-form inline>
       <el-form-item label="科目">
-        <select-subject v-model="searchModel.subject"></select-subject>
+        <select-subject v-model="searchModel.subjectCode"></select-subject>
       </el-form-item>
       <el-form-item label="完成进度">
         <el-select
-          v-model="searchModel.progress"
+          v-model="searchModel.finished"
           placeholder="请选择"
           clearable
           style="width: 120px"
         >
-          <el-option label="已完成" value="100" />
-          <el-option label="未完成" value="0-99" />
+          <el-option label="已完成" :value="true" />
+          <el-option label="未完成" :value="false" />
         </el-select>
       </el-form-item>
     </el-form>
@@ -66,11 +66,11 @@
       @sort-change="handleSortChange"
     >
       <el-table-column type="selection" width="55" />
-      <el-table-column prop="courseName" label="科目" min-width="200" />
+      <el-table-column prop="subjectName" label="科目" min-width="200" />
       <el-table-column label="选做异常" sortable min-width="110">
         <template #default="scope">
-          <el-tag :type="scope.row.isOptionalException ? 'danger' : 'success'">
-            {{ scope.row.isOptionalException ? '是' : '否' }}
+          <el-tag :type="scope.row.selectiveError ? 'danger' : 'success'">
+            {{ scope.row.selectiveError ? '是' : '否' }}
           </el-tag>
         </template>
       </el-table-column>
@@ -81,7 +81,7 @@
         sortable
       />
       <el-table-column
-        prop="subjectiveTotalScore"
+        prop="subjectiveScore"
         label="主观总分"
         min-width="110"
         sortable
@@ -95,13 +95,13 @@
       <el-table-column label="完成进度" min-width="120">
         <template #default="scope">
           <el-progress
-            :percentage="scope.row.progress"
-            :color="scope.row.progress === 100 ? '#67c23a' : '#409eff'"
+            :percentage="scope.row.percent"
+            :color="scope.row.percent === 100 ? '#67c23a' : '#409eff'"
           />
         </template>
       </el-table-column>
       <el-table-column
-        prop="unReviewedCount"
+        prop="markedCount"
         label="待复核量"
         min-width="110"
         sortable
@@ -144,8 +144,8 @@
   const appStore = useAppStore();
 
   const searchModel = reactive<MarkStatListFilter>({
-    subject: null,
-    progress: null,
+    subjectCode: null,
+    finished: undefined,
   });
 
   const {
@@ -186,12 +186,12 @@
         center: ['50%', '40%'],
         data: [
           {
-            value: statInfo.value.taskUnfinishedCount,
+            value: statInfo.value.markedCount,
             name: '任务待完成',
             itemStyle: { color: '#5470c6' },
           },
           {
-            value: statInfo.value.taskFinishedCount,
+            value: statInfo.value.unMarkedCount,
             name: '任务已完成',
             itemStyle: { color: '#ff7875' },
           },
@@ -226,12 +226,12 @@
         center: ['50%', '40%'],
         data: [
           {
-            value: statInfo.value.courseUnfinishedCount,
+            value: statInfo.value.unFinishCount,
             name: '科目待完成',
             itemStyle: { color: '#5470c6' },
           },
           {
-            value: statInfo.value.courseFinishedCount,
+            value: statInfo.value.finishCount,
             name: '科目已完成',
             itemStyle: { color: '#ff7875' },
           },
@@ -261,7 +261,7 @@
 
     try {
       setLoading(true);
-      const ids = selectedRows.value.map((item) => item.courseId);
+      const ids = selectedRows.value.map((item) => item.subjectCode);
       await markSubjectClose(ids);
       ElMessage.success('关闭成功');
       toPage(1);

+ 12 - 22
src/views/mark/MarkerManage.vue

@@ -2,11 +2,11 @@
   <div class="part-box is-border">
     <el-form inline>
       <el-form-item label="科目">
-        <select-subject v-model="searchModel.subject"></select-subject>
+        <select-subject v-model="searchModel.subjectCode"></select-subject>
       </el-form-item>
       <el-form-item label="分组">
         <el-input
-          v-model.trim="searchModel.group"
+          v-model.trim="searchModel.groupNumber"
           placeholder="请输入分组"
           clearable
           style="width: 120px"
@@ -60,8 +60,8 @@
       <el-table-column type="selection" width="55" />
       <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 prop="subjectCode" label="科目" width="120" />
+      <el-table-column prop="groupNumber" label="分组" width="100" sortable />
       <el-table-column label="状态" width="100">
         <template #default="scope">
           <el-tag :type="getStatusType(scope.row.status)" size="small">
@@ -69,15 +69,10 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column
-        prop="completedCount"
-        label="已评数量"
-        width="120"
-        sortable
-      >
+      <el-table-column prop="markedCount" label="已评数量" width="120" sortable>
         <template #default="scope">
           <span>
-            {{ scope.row.completedCount }}
+            {{ scope.row.markedCount }}
           </span>
           <el-button
             type="danger"
@@ -88,22 +83,17 @@
           >
         </template>
       </el-table-column>
-      <el-table-column label="正在评卷" width="100">
-        <template #default="scope">
-          <el-tag :type="scope.row.marking ? 'success' : 'info'" size="small">
-            {{ scope.row.marking ? '是' : '否' }}
-          </el-tag>
-        </template>
+      <el-table-column prop="currentCount" label="正在评卷" width="100">
       </el-table-column>
-      <el-table-column prop="taskCount" label="任务数" width="100" sortable />
+      <el-table-column prop="topCount" label="任务数" width="100" sortable />
       <el-table-column
-        prop="bindClass"
+        prop="classCount"
         label="绑定班级"
         min-width="150"
         show-overflow-tooltip
       >
         <template #default="scope">
-          {{ scope.row.bindClass || '-' }}
+          {{ scope.row.classCount || '-' }}
         </template>
       </el-table-column>
       <el-table-column label="操作" width="300" fixed="right">
@@ -210,8 +200,8 @@
   });
 
   const searchModel = reactive<MarkMarkerListFilter>({
-    subject: null,
-    group: '',
+    subjectCode: null,
+    groupNumber: '',
     loginName: '',
     name: '',
     marked: false,

+ 19 - 24
src/views/mark/QualityMonitor.vue

@@ -2,11 +2,11 @@
   <div class="part-box is-border">
     <el-form inline>
       <el-form-item label="科目">
-        <select-subject v-model="searchModel.subject"></select-subject>
+        <select-subject v-model="searchModel.subjectCode"></select-subject>
       </el-form-item>
       <el-form-item label="分组">
         <el-input
-          v-model.trim="searchModel.group"
+          v-model.trim="searchModel.groupNumber"
           placeholder="请输入分组"
           clearable
           style="width: 120px"
@@ -39,28 +39,28 @@
       stripe
       @sort-change="handleSortChange"
     >
-      <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 prop="groupNumber" label="分组" width="80" sortable />
+      <el-table-column prop="markerLoginName" label="评卷员" min-width="120" />
+      <el-table-column prop="markerName" label="姓名" min-width="100" />
       <el-table-column
-        prop="completedTasks"
+        prop="finishCount"
         label="完成任务数"
         width="120"
         sortable
       />
       <el-table-column
-        prop="arbitrationTasks"
+        prop="arbitrateCount"
         label="仲裁任务数"
         width="120"
         sortable
       />
       <el-table-column label="仲裁率" width="100" sortable>
         <template #default="scope">
-          {{ (scope.row.arbitrationRate * 100).toFixed(1) }}%
+          {{ (scope.row.arbitrateRatio * 100).toFixed(1) }}%
         </template>
       </el-table-column>
       <el-table-column
-        prop="returnCount"
+        prop="rejectCount"
         label="打回次数"
         width="110"
         sortable
@@ -71,24 +71,19 @@
         </template>
       </el-table-column>
       <el-table-column
-        prop="markingSpeed"
+        prop="avgSpeed"
         label="评卷速度(秒)"
         width="130"
         sortable
       />
-      <el-table-column prop="averageScore" label="平均分" width="100" sortable>
+      <el-table-column prop="avgScore" label="平均分" width="100" sortable>
         <template #default="scope">
-          {{ scope.row.averageScore.toFixed(2) }}
+          {{ scope.row.avgScore.toFixed(2) }}
         </template>
       </el-table-column>
-      <el-table-column
-        prop="standardDeviation"
-        label="标准差"
-        width="100"
-        sortable
-      >
+      <el-table-column prop="stdevScore" label="标准差" width="100" sortable>
         <template #default="scope">
-          {{ scope.row.standardDeviation.toFixed(2) }}
+          {{ scope.row.stdevScore.toFixed(2) }}
         </template>
       </el-table-column>
     </el-table>
@@ -122,8 +117,8 @@
   const router = useRouter();
 
   const searchModel = reactive<MarkQualityMonitorListFilter>({
-    subject: null,
-    group: '',
+    subjectCode: null,
+    groupNumber: '',
     marked: undefined,
     noArbitration: undefined,
   });
@@ -147,7 +142,7 @@
   async function onRecalculate() {
     try {
       setrecalLoading(true);
-      await qualityMonitorCalculate({ subject: searchModel.subject });
+      await qualityMonitorCalculate({ subjectCode: searchModel.subjectCode });
       ElMessage.success('重新计算成功');
       getList();
     } catch (error) {
@@ -162,8 +157,8 @@
     router.push({
       path: '/quality-monitor/score-curve',
       query: {
-        subject: searchModel.subject?.toString() || '',
-        group: searchModel.group || '',
+        subjectCode: searchModel.subjectCode || '',
+        groupNumber: searchModel.groupNumber || '',
       },
     });
   }

+ 6 - 4
src/views/mark/ScoreCurve.vue

@@ -57,8 +57,10 @@
 
   // 从路由参数初始化筛选条件
   const searchModel = reactive<QMScoreListParam>({
-    subject: route.query.subject ? Number(route.query.subject) : null,
-    group: (route.query.group as string) || '',
+    subjectCode: route.query.subjectCode
+      ? Number(route.query.subjectCode)
+      : null,
+    groupNumber: (route.query.groupNumber as string) || '',
   });
 
   const dataList = ref<QMScoreItem[]>([]);
@@ -163,7 +165,7 @@
 
   // 加载数据
   async function loadData() {
-    if (!searchModel.subject) {
+    if (!searchModel.subjectCode) {
       ElMessage.warning('请选择科目');
       return;
     }
@@ -187,7 +189,7 @@
 
   onMounted(() => {
     // 如果有默认科目,自动加载数据
-    if (searchModel.subject) {
+    if (searchModel.subjectCode) {
       loadData();
     }
   });

+ 48 - 31
src/views/mark/TaskManage.vue

@@ -2,11 +2,11 @@
   <div class="part-box is-border">
     <el-form inline>
       <el-form-item label="科目">
-        <select-subject v-model="searchModel.subject"></select-subject>
+        <select-subject v-model="searchModel.subjectCode"></select-subject>
       </el-form-item>
       <el-form-item label="分组">
         <el-input
-          v-model.trim="searchModel.group"
+          v-model.trim="searchModel.groupNumber"
           placeholder="请输入分组"
           clearable
           style="width: 120px"
@@ -27,16 +27,26 @@
       </el-form-item>
       <el-form-item label="评卷员">
         <el-input
-          v-model.number="searchModel.markerId"
-          placeholder="请输入评卷员ID"
+          v-model="searchModel.markerId"
+          placeholder="请输入评卷员登录名"
           clearable
           style="width: 150px"
         >
         </el-input>
       </el-form-item>
+      <el-form-item label="选做题">
+        <el-select
+          v-model="searchModel.unselective"
+          placeholder="请选择"
+          clearable
+          style="width: 120px"
+        >
+          <el-option label="未选做" :value="true" />
+        </el-select>
+      </el-form-item>
       <el-form-item label="准考证号">
         <el-input
-          v-model.trim="searchModel.examCardNo"
+          v-model.trim="searchModel.examNumber"
           placeholder="请输入准考证号"
           clearable
           style="width: 150px"
@@ -52,11 +62,11 @@
         >
         </el-input>
       </el-form-item>
-      <el-form-item label="分">
+      <el-form-item label="分">
         <el-space>
           <span>从</span>
           <el-input-number
-            v-model="searchModel.totalStartScore"
+            v-model="searchModel.startScore"
             placeholder="低分"
             :min="0"
             :max="999"
@@ -68,7 +78,7 @@
           />
           <span>到</span>
           <el-input-number
-            v-model="searchModel.totalEndScore"
+            v-model="searchModel.endScore"
             placeholder="高分"
             :min="0"
             :max="999"
@@ -82,7 +92,7 @@
       </el-form-item>
       <el-form-item label="小题得分">
         <el-input-number
-          v-model="searchModel.smallQuestionScore"
+          v-model="searchModel.questionScore"
           placeholder=""
           :min="0"
           :max="999"
@@ -93,9 +103,6 @@
           style="width: 120px"
         />
       </el-form-item>
-      <el-form-item>
-        <el-checkbox v-model="searchModel.optional"> 选做题 </el-checkbox>
-      </el-form-item>
     </el-form>
     <el-divider class="form-divider" />
     <div class="part-action">
@@ -121,7 +128,7 @@
         width="110"
         sortable
       />
-      <el-table-column prop="examCardNo" label="准考证号" width="150" />
+      <el-table-column prop="examNumber" label="准考证号" width="150" />
       <el-table-column prop="secretNumber" label="密号" width="120" />
       <el-table-column label="状态" width="100" sortable>
         <template #default="scope">
@@ -131,37 +138,47 @@
         </template>
       </el-table-column>
       <el-table-column
-        prop="returnReason"
+        prop="rejectReason"
         label="打回原因"
         min-width="150"
         show-overflow-tooltip
       >
         <template #default="scope">
-          {{ scope.row.returnReason || '-' }}
+          {{ scope.row.rejectReason || '-' }}
         </template>
       </el-table-column>
-      <el-table-column prop="marker" label="评卷员" width="120" sortable />
-      <el-table-column prop="totalScore" label="评卷总分" width="100" />
       <el-table-column
-        prop="giveScoreDetail"
+        prop="markerLoginName"
+        label="评卷员"
+        width="120"
+        sortable
+      />
+      <el-table-column prop="markerScore" label="评卷总分" width="100" />
+      <el-table-column
+        prop="markerScoreList"
         label="给分明细"
         min-width="200"
         show-overflow-tooltip
       />
       <el-table-column
-        prop="markingTime"
+        prop="markerTime"
         label="评卷时间"
         width="180"
         sortable
       />
-      <el-table-column prop="reviewer" label="复核人" width="120" sortable>
+      <el-table-column
+        prop="headerLoginName"
+        label="复核人"
+        width="120"
+        sortable
+      >
         <template #default="scope">
-          {{ scope.row.reviewer || '-' }}
+          {{ scope.row.headerLoginName || '-' }}
         </template>
       </el-table-column>
-      <el-table-column prop="reviewTime" label="复核时间" width="180" sortable>
+      <el-table-column prop="headerTime" label="复核时间" width="180" sortable>
         <template #default="scope">
-          {{ scope.row.reviewTime || '-' }}
+          {{ scope.row.headerTime || '-' }}
         </template>
       </el-table-column>
       <el-table-column label="操作" width="120" fixed="right">
@@ -217,16 +234,16 @@
   });
 
   const searchModel = reactive<MarkTaskListFilter>({
-    subject: null,
-    group: '',
+    subjectCode: null,
+    groupNumber: '',
     status: '',
     markerId: undefined,
-    optional: undefined,
-    examCardNo: '',
+    unselective: undefined,
+    examNumber: '',
     secretNumber: '',
-    totalStartScore: undefined,
-    totalEndScore: undefined,
-    smallQuestionScore: undefined,
+    startScore: undefined,
+    endScore: undefined,
+    questionScore: undefined,
   });
 
   const curRow = ref<MarkTaskItem>({});
@@ -264,7 +281,7 @@
 
   // 查看详情
   function onView(row: MarkTaskItem) {
-    ElMessage.info(`查看任务:${row.examCardNo}`);
+    ElMessage.info(`查看任务:${row.examNumber}`);
     // TODO: 实现查看任务详情的逻辑
   }
 

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

@@ -2,11 +2,11 @@
   <div class="part-box is-border">
     <el-form inline>
       <el-form-item label="科目">
-        <select-subject v-model="searchModel.subject"></select-subject>
+        <select-subject v-model="searchModel.subjectCode"></select-subject>
       </el-form-item>
       <el-form-item label="分组">
         <el-input
-          v-model.trim="searchModel.group"
+          v-model.trim="searchModel.groupNumber"
           placeholder="请输入分组"
           clearable
           style="width: 120px"
@@ -15,7 +15,7 @@
       </el-form-item>
       <el-form-item label="准考证号">
         <el-input
-          v-model.trim="searchModel.examCardNo"
+          v-model.trim="searchModel.examNumber"
           placeholder="请输入准考证号"
           clearable
           style="width: 150px"
@@ -55,23 +55,28 @@
         width="110"
         sortable
       />
-      <el-table-column prop="examCardNo" label="准考证号" width="150" />
+      <el-table-column prop="examNumber" label="准考证号" width="150" />
       <el-table-column prop="secretNumber" label="密号" width="120" />
-      <el-table-column prop="marker" label="评卷员" width="120" sortable />
       <el-table-column
-        prop="totalScore"
+        prop="markerLoginName"
+        label="评卷员"
+        width="120"
+        sortable
+      />
+      <el-table-column
+        prop="markerScore"
         label="评卷总分"
         width="110"
         sortable
       />
       <el-table-column
-        prop="giveScoreDetail"
+        prop="markerScoreList"
         label="给分明细"
         min-width="200"
         show-overflow-tooltip
       />
       <el-table-column
-        prop="markingTime"
+        prop="markerTime"
         label="评卷时间"
         width="200"
         sortable
@@ -112,9 +117,9 @@
   });
 
   const searchModel = reactive<MarkTrialListFilter>({
-    subject: null,
-    group: '',
-    examCardNo: '',
+    subjectCode: null,
+    groupNumber: '',
+    examNumber: '',
     secretNumber: '',
   });
 
@@ -129,7 +134,7 @@
 
   // 查看详情
   function onView(row: MarkTrialItem) {
-    ElMessage.info(`查看试卷:${row.examCardNo}`);
+    ElMessage.info(`查看试卷:${row.examNumber}`);
     // TODO: 实现查看试卷详情的逻辑
   }
 

+ 3 - 2
src/views/mark/components/RejectTaskDialog.vue

@@ -32,7 +32,7 @@
       </el-form-item>
       <el-form-item label="详情描述">
         <el-input
-          v-model="formModel.rejectReason"
+          v-model="formModel.reason"
           type="textarea"
           :rows="4"
           placeholder="请输入详情描述"
@@ -88,7 +88,8 @@
   const initialFormState: MarkRejectTaskParam = {
     id: 0,
     rejectType: '',
-    rejectReason: '',
+    reason: '',
+    isRest: false,
   };
 
   const formModel = reactive<MarkRejectTaskParam>({ ...initialFormState });

+ 2 - 2
src/views/mark/components/SetTrialCountDialog.vue

@@ -56,7 +56,7 @@
   defineExpose({ open, close });
 
   interface Props {
-    subjectCode: string; // 科目ID
+    subjectCode: number; // 科目ID
   }
 
   const props = defineProps<Props>();
@@ -65,7 +65,7 @@
   const formRef = ref<FormInstance>();
 
   interface FormModel {
-    subjectCode: string;
+    subjectCode: number;
     count: number;
   }
 

+ 9 - 9
src/views/mark/group-edit/GroupEdit.vue

@@ -10,7 +10,7 @@
       <GroupQuestionSelect
         ref="questionSelectRef"
         v-model="ruleFormData.questions"
-        :subject-id="props.rowData?.subjectCode"
+        :subject-code="props.rowData?.subjectCode"
       />
     </div>
     <!-- 第二步:设置规则 -->
@@ -94,15 +94,15 @@
       id: route.params?.groupId,
       subjectCode: route.params.subjectCode,
       groupNumber: 0,
-      name: '',
-      markingArea: [],
+      groupName: '',
+      picList: [],
       questions: [],
-      doubleMarking: false,
-      arbitrationType: 'GROUP',
-      doubleMarkingRatio: undefined,
-      arbitrationThreshold: undefined,
-      combinationStrategy: 'AVG_SCORE',
-      threeMarkingRule: 'CLOSE',
+      openDouble: false,
+      arbitrateType: 'GROUP',
+      doubleRate: undefined,
+      arbitrateThreshold: undefined,
+      scorePolicy: 'AVG_SCORE',
+      thirdPolicy: 'CLOSE',
     };
   };
   const ruleFormData = reactive(getInitialRuleFormData());

+ 4 - 4
src/views/mark/group-edit/GroupQuestionSelect.vue

@@ -70,7 +70,7 @@
   const setSelectedRows = () => {
     if (!tableRef.value || !props.modelValue.length) return;
     const selectedIds = props.modelValue.map(
-      (item) => `${item.bigQuestionNo}-${item.smallQuestionNo}`
+      (item) => `${item.mainNumber}-${item.subNumber}`
     );
 
     dataList.value.forEach((row) => {
@@ -104,10 +104,10 @@
   const handleSelectionChange = (selection: OptionalQuestionItem[]) => {
     const selectedQuestions = selection.map((item) => {
       return {
-        bigQuestionNo: item.bigQuestionNo,
-        smallQuestionNo: item.smallQuestionNo,
+        mainNumber: item.bigQuestionNo,
+        subNumber: item.smallQuestionNo,
         intervalScore: item.intervalScore,
-        arbitrationThreshold: item.arbitrationThreshold,
+        arbitrateThreshold: item.arbitrateThreshold,
       };
     });
     emit('update:modelValue', selectedQuestions);

+ 34 - 38
src/views/mark/group-edit/GroupRuleForm.vue

@@ -20,7 +20,7 @@
     </el-form-item>
 
     <el-form-item v-if="isEdit" label="名称">
-      <el-input v-model="formModel.name" :readonly="isEdit"></el-input>
+      <el-input v-model="formModel.groupName" :readonly="isEdit"></el-input>
     </el-form-item>
 
     <el-form-item label="图片显示">
@@ -30,15 +30,15 @@
     <template v-if="isReset || isAdd">
       <el-form-item label="双评">
         <el-checkbox
-          v-model="formModel.doubleMarking"
+          v-model="formModel.openDouble"
           @change="onDoubleMarkingChange"
         ></el-checkbox>
       </el-form-item>
 
-      <template v-if="formModel.doubleMarking">
-        <el-form-item label="仲裁方式" prop="arbitrationType">
+      <template v-if="formModel.openDouble">
+        <el-form-item label="仲裁方式" prop="arbitrateType">
           <el-select
-            v-model="formModel.arbitrationType"
+            v-model="formModel.arbitrateType"
             placeholder="请选择"
             clearable
             style="width: 200px"
@@ -52,9 +52,9 @@
           </el-select>
         </el-form-item>
 
-        <el-form-item label="双评比例" prop="doubleMarkingRatio">
+        <el-form-item label="双评比例" prop="doubleRate">
           <el-input-number
-            v-model="formModel.doubleMarkingRatio"
+            v-model="formModel.doubleRate"
             :min="0"
             :max="1"
             :step="0.01"
@@ -66,12 +66,12 @@
         </el-form-item>
         <!-- 按组仲裁 阀值 -->
         <el-form-item
-          v-if="formModel.arbitrationType === 'GROUP'"
+          v-if="formModel.arbitrateType === 'GROUP'"
           label="仲裁阀值"
-          prop="arbitrationThreshold"
+          prop="arbitrateThreshold"
         >
           <el-input-number
-            v-model="formModel.arbitrationThreshold"
+            v-model="formModel.arbitrateThreshold"
             :min="0"
             :max="9999"
             :step="0.1"
@@ -82,14 +82,14 @@
           />
         </el-form-item>
         <!-- 小题仲裁 阀值 -->
-        <template v-if="formModel.arbitrationType === 'QUESTION'">
+        <template v-if="formModel.arbitrateType === 'QUESTION'">
           <template
             v-for="(question, qindex) in formModel.questions"
             :key="`a${qindex}`"
           >
             <el-form-item
-              :label="`${question.bigQuestionNo}-${question.smallQuestionNo}仲裁阀值`"
-              :prop="'questions.' + qindex + '.arbitrationThreshold'"
+              :label="`${question.mainNumber}-${question.subNumber}仲裁阀值`"
+              :prop="'questions.' + qindex + '.arbitrateThreshold'"
               :rules="{
                 required: true,
                 message: '请输入仲裁阀值',
@@ -97,7 +97,7 @@
               }"
             >
               <el-input-number
-                v-model="question.arbitrationThreshold"
+                v-model="question.arbitrateThreshold"
                 :min="1"
                 :max="999"
                 :step="0.1"
@@ -110,9 +110,9 @@
           </template>
         </template>
 
-        <el-form-item label="合分策略" prop="combinationStrategy">
+        <el-form-item label="合分策略" prop="scorePolicy">
           <el-select
-            v-model="formModel.combinationStrategy"
+            v-model="formModel.scorePolicy"
             placeholder="请选择"
             clearable
             style="width: 200px"
@@ -126,9 +126,9 @@
           </el-select>
         </el-form-item>
 
-        <el-form-item label="三评规则" prop="threeMarkingRule">
+        <el-form-item label="三评规则" prop="thirdPolicy">
           <el-select
-            v-model="formModel.threeMarkingRule"
+            v-model="formModel.thirdPolicy"
             placeholder="请选择"
             clearable
             style="width: 200px"
@@ -158,7 +158,7 @@
         :key="`i${qindex}`"
       >
         <el-form-item
-          :label="`${question.bigQuestionNo}-${question.smallQuestionNo}间隔分`"
+          :label="`${question.mainNumber}-${question.subNumber}间隔分`"
           :prop="'questions.' + qindex + '.intervalScore'"
           :rules="{
             required: true,
@@ -229,31 +229,27 @@
     groupNumber: [
       { required: true, message: '请输入分组序号', trigger: 'change' },
     ],
-    name: [{ required: true, message: '请输入分组名称', trigger: 'change' }],
-    arbitrationType: [{ required: true, message: '请选择', trigger: 'change' }],
-    combinationStrategy: [
-      { required: true, message: '请选择', trigger: 'change' },
+    groupName: [
+      { required: true, message: '请输入分组名称', trigger: 'change' },
     ],
-    threeMarkingRule: [
-      { required: true, message: '请选择', trigger: 'change' },
-    ],
-    doubleMarkingRatio: [
-      { required: true, message: '请输入', trigger: 'change' },
-    ],
-    arbitrationThreshold: [
+    arbitrateType: [{ required: true, message: '请选择', trigger: 'change' }],
+    scorePolicy: [{ required: true, message: '请选择', trigger: 'change' }],
+    thirdPolicy: [{ required: true, message: '请选择', trigger: 'change' }],
+    doubleRate: [{ required: true, message: '请输入', trigger: 'change' }],
+    arbitrateThreshold: [
       { required: true, message: '请输入', trigger: 'change' },
     ],
   };
 
   function onDoubleMarkingChange(val: boolean) {
     if (!val) {
-      formModel.value.arbitrationType = 'GROUP';
-      formModel.value.combinationStrategy = 'AVG_SCORE';
-      formModel.value.threeMarkingRule = 'CLOSE';
-      formModel.value.doubleMarkingRatio = undefined;
-      formModel.value.arbitrationThreshold = undefined;
+      formModel.value.arbitrateType = 'GROUP';
+      formModel.value.scorePolicy = 'AVG_SCORE';
+      formModel.value.thirdPolicy = 'CLOSE';
+      formModel.value.doubleRate = undefined;
+      formModel.value.arbitrateThreshold = undefined;
       formModel.value.questions.forEach((item) => {
-        item.arbitrationThreshold = undefined;
+        item.arbitrateThreshold = undefined;
       });
     }
   }
@@ -263,11 +259,11 @@
   // TODO:获取imgList
   const imgList = ref([]);
   function onSetMarkingArea() {
-    selectedAreas.value = formModel.value.markingArea || [];
+    selectedAreas.value = formModel.value.picList || [];
     imgAreaRef.value.open();
   }
   function onImgAreaChange(areas: CoverArea[]) {
-    formModel.value.markingArea = areas;
+    formModel.value.picList = areas;
   }
 
   // 监听表单数据变化,同步到父组件