Procházet zdrojové kódy

feat: api-科目选做题

zhangjie před 1 týdnem
rodič
revize
efd61afd26

+ 12 - 7
src/api/subject.ts

@@ -106,7 +106,7 @@ export function getPaperStructureList(
 // 新增/编辑试卷结构
 export function savePaperStructure(
   data: PaperStructureUpdateParams
-): Promise<PaperStructureItem> {
+): Promise<boolean> {
   if (data.id) {
     return axios.post('/api/admin/question/update', data);
   }
@@ -130,7 +130,7 @@ export function getOptionalQuestionList(
   subjectCode: string
 ): Promise<OptionalQuestionItem[]> {
   return axios.post(
-    '/api/subject/optional-question/list',
+    '/api/admin/selective/question',
     {},
     {
       params: { subjectCode },
@@ -143,7 +143,7 @@ export function getOptionalQuestionRuleList(
   subjectCode: string
 ): Promise<OptionalRuleItem[]> {
   return axios.post(
-    '/api/subject/optional-question/rule/list',
+    '/api/admin/selective/group',
     {},
     {
       params: { subjectCode },
@@ -155,16 +155,21 @@ export function getOptionalQuestionRuleList(
 export function saveOptionalQuestionRule(
   params: OptionalRuleUpdateParam
 ): Promise<boolean> {
-  return axios.post('/api/subject/optional-question/rule', params);
+  const nparams = { ...params };
+  nparams.parts = JSON.stringify(nparams.parts);
+  return axios.post('/api/admin/selective/group/save', nparams);
 }
 
 // 删除选做题规则
-export function deleteOptionalQuestionRule(id: number): Promise<boolean> {
+export function deleteOptionalQuestionRule(
+  subjectCode: string,
+  selectiveIndex: number
+): Promise<boolean> {
   return axios.post(
-    '/api/subject/optional-question/rule/delete',
+    '/api/admin/selective/group/delete',
     {},
     {
-      params: { id },
+      params: { subjectCode, selectiveIndex },
     }
   );
 }

+ 20 - 12
src/api/types/subject.ts

@@ -1,5 +1,5 @@
 import {
-  OptionalScoreRule,
+  OptionalScorePolicy,
   ObjectiveQuestionType,
   ObjectivePolicy,
 } from '@/constants/enumerate';
@@ -138,6 +138,8 @@ export interface OptionalQuestionItem {
   selectiveIndex: string;
   // 选做题区
   selectivePart: string;
+  // 选做题取分规则
+  scorePolicy: OptionalScorePolicy;
 }
 
 // 选做题规则列表:选做题组	规则	大题名称	分值
@@ -145,25 +147,31 @@ export interface OptionalRuleItem {
   id: number;
   subjectCode: string;
   // 选做题规则: 几选几
-  ruleSelecCount: number;
-  ruleTotalCount: number;
+  selectivePart: number;
+  selectiveCount: number;
   // 取分规则
-  scorePolicy: OptionalScoreRule;
+  scorePolicy: OptionalScorePolicy;
   // 大题名称
-  mainTitle: string;
+  title: string;
   // 分值
-  score: number;
+  partScore: number;
   // 试题结构ids
   questionStructureIds: number[];
 }
 
+export interface OptionalRulePart {
+  selectivePart: string;
+  // selectivePart: '${selectivePartNo}';
+  mainNumbers: number[];
+}
+
 export interface OptionalRuleUpdateParam {
   id?: number;
   // 选做题规则: 几选几
-  ruleSelecCount: number;
-  ruleTotalCount: number;
-  // 区分规则
-  scorePolicy: OptionalScoreRule;
-  // 试题结构ids
-  questionStructureIds: number[];
+  selectivePart: number;
+  selectiveCount: number;
+  // 分规则
+  scorePolicy: OptionalScorePolicy;
+  // 结构
+  parts: OptionalRulePart[];
 }

+ 6 - 6
src/constants/enumerate.ts

@@ -95,13 +95,13 @@ export const OPTIONAL_EXCEPTION_TYPE = {
 };
 export type OptionalExceptionType = keyof typeof OPTIONAL_EXCEPTION_TYPE;
 
-// 选做题取分规则:最高分、最低分、最低分(去掉0分)
-export const OPTIONAL_SCORE_RULE = {
-  MAX_SCORE: '最高分',
-  MIN_SCORE: '最低分',
-  MIN_SCORE_NO_ZERO: '最低分(去掉0分)',
+// 选做题取分规则:最高分、最低分、最低分(去掉0分) scorePolicy
+export const OPTIONAL_SCORE_POLICY = {
+  2: '最高分',
+  3: '最低分',
+  4: '最低分(去掉0分)',
 };
-export type OptionalScoreRule = keyof typeof OPTIONAL_SCORE_RULE;
+export type OptionalScorePolicy = keyof typeof OPTIONAL_SCORE_POLICY;
 
 // 仲裁方式:按小题、按分组
 export const ARBITRATION_TYPE = {

+ 3 - 3
src/utils/filter.ts

@@ -5,7 +5,7 @@ import {
   EXAM_TYPE,
   MARKING_MODE,
   LOG_TYPE,
-  OPTIONAL_SCORE_RULE,
+  OPTIONAL_SCORE_POLICY,
   USER_SOURCE,
   EXAM_STATUS,
   ISSUE_PAPER_STATUS,
@@ -24,8 +24,8 @@ export const dictFilter = {
     MARKING_MODE[val as keyof typeof MARKING_MODE] || DEFAULT_LABEL,
   logType: (val: string) =>
     LOG_TYPE[val as keyof typeof LOG_TYPE] || DEFAULT_LABEL,
-  optionalScoreRule: (val: string) =>
-    OPTIONAL_SCORE_RULE[val as keyof typeof OPTIONAL_SCORE_RULE] ||
+  optionalScorePolicy: (val: string) =>
+    OPTIONAL_SCORE_POLICY[val as keyof typeof OPTIONAL_SCORE_POLICY] ||
     DEFAULT_LABEL,
   userSource: (val: string) =>
     USER_SOURCE[val as keyof typeof USER_SOURCE] || DEFAULT_LABEL,

+ 31 - 12
src/views/subject/OptionalRuleEdit.vue

@@ -31,16 +31,30 @@
       <el-table-column prop="subNumber" label="小题号" width="80" />
       <el-table-column prop="totalScore" label="满分" width="80" />
       <el-table-column prop="intervalScore" label="间隔分" width="80" />
-      <el-table-column prop="type" label="选做题分组" width="100" />
-      <el-table-column prop="answer" label="选做题区" width="100" />
+      <el-table-column prop="selectiveIndex" label="选做题分组" width="100">
+        <template #default="scope">
+          {{ scope.row.selectiveIndex }}-
+          {{ dictFilter.optionalScorePolicy(scope.row.scorePolicy) }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="selectivePart" label="选做题区" width="100">
+        <template #default="scope">
+          {{ scope.row.selectiveIndex }} - {{ scope.row.selectivePart }}
+        </template>
+      </el-table-column>
     </el-table>
   </div>
 
-  <!-- 新增/编辑试卷结构弹窗 -->
-  <ModifyPaperStructure
-    ref="modifyPaperStructureRef"
-    :row-data="curRow"
-    :subject-id="subjectCode"
+  <!-- 选做题规则 -->
+  <OptionalRuleDialog
+    ref="optionalRuleDialogRef"
+    :subject-code="subjectCode"
+    @modified="getList"
+  />
+  <!-- 新增选做题规则 -->
+  <ModifyOptionalQuestionRule
+    ref="modifyOptionalQuestionRuleRef"
+    :row-data="{}"
     @modified="getList"
   />
 </template>
@@ -49,10 +63,12 @@
   import { reactive, ref, computed, onMounted } from 'vue';
   import { useRoute, useRouter } from 'vue-router';
   import { getSubjectDetail, getOptionalQuestionList } from '@/api/subject';
-  import type { PaperStructureItem } from '@/api/types/subject';
+  import type { OptionalQuestionItem } from '@/api/types/subject';
   import useLoading from '@/hooks/loading';
+  import { dictFilter } from '@/utils/filter';
 
-  import ModifyPaperStructure from './components/ModifyPaperStructure.vue';
+  import OptionalRuleDialog from './components/OptionalRuleDialog.vue';
+  import ModifyOptionalQuestionRule from './components/ModifyOptionalQuestionRule.vue';
 
   defineOptions({
     name: 'OptionalRuleEdit',
@@ -83,7 +99,7 @@
 
   // 获取试卷结构列表
   const { loading, setLoading } = useLoading();
-  const dataList = ref<PaperStructureItem[]>([]);
+  const dataList = ref<OptionalQuestionItem[]>([]);
   // 获取试卷结构列表
   const getList = async () => {
     setLoading(true);
@@ -94,12 +110,15 @@
     dataList.value = res || [];
   };
 
+  const modifyOptionalQuestionRuleRef =
+    ref<InstanceType<typeof ModifyOptionalQuestionRule>>();
   const onAdd = () => {
-    // modifyPaperStructureRef.value?.open();
+    modifyOptionalQuestionRuleRef.value?.open();
   };
 
+  const optionalRuleDialogRef = ref<InstanceType<typeof OptionalRuleDialog>>();
   const onEdit = () => {
-    // modifyPaperStructureRef.value?.open();
+    optionalRuleDialogRef.value?.open();
   };
 
   const onReturn = () => {

+ 67 - 20
src/views/subject/components/ModifyOptionalQuestionRule.vue

@@ -12,7 +12,11 @@
   >
     <el-steps :active="currentStep" finish-status="success">
       <el-step title="设置规则" />
-      <el-step title="选择试题" />
+      <el-step
+        v-for="(step, index) in ruleFormData.selectiveCount"
+        :key="index"
+        :title="`选择试题组${index + 1}`"
+      />
     </el-steps>
 
     <div style="margin-top: 20px">
@@ -21,12 +25,17 @@
         <OptionalRuleForm ref="ruleFormRef" v-model="ruleFormData" />
       </div>
 
-      <!-- 第二步:选择试题 -->
-      <div v-if="currentStep === 1">
+      <!-- 选择试题步骤 -->
+      <div v-if="currentStep > 0">
+        <div style="margin-bottom: 16px; font-weight: bold">
+          选择试题组{{ currentStep }}(第{{ currentStep }}个选做题区)
+        </div>
         <OptionalQuestionSelect
           ref="questionSelectRef"
-          v-model="selectedQuestions"
-          :subject-id="props.rowData?.subjectCode"
+          v-model="currentStepSelection"
+          :subject-code="props.rowData?.subjectCode"
+          :current-step="currentStep"
+          :selected-parts="selectedParts"
         />
       </div>
     </div>
@@ -35,11 +44,15 @@
       <div class="dialog-footer">
         <el-button @click="close">取消</el-button>
         <el-button v-if="currentStep > 0" @click="prevStep">上一步</el-button>
-        <el-button v-if="currentStep < 1" type="primary" @click="nextStep">
+        <el-button
+          v-if="currentStep < ruleFormData.selectiveCount"
+          type="primary"
+          @click="nextStep"
+        >
           下一步
         </el-button>
         <el-button
-          v-if="currentStep === 1"
+          v-if="currentStep === ruleFormData.selectiveCount"
           type="primary"
           :loading="loading"
           @click="confirm"
@@ -58,6 +71,7 @@
   import type {
     OptionalRuleItem,
     OptionalRuleUpdateParam,
+    OptionalRulePart,
   } from '@/api/types/subject';
   import useModal from '@/hooks/modal';
   import useLoading from '@/hooks/loading';
@@ -92,19 +106,22 @@
 
   // 规则表单数据
   const initialRuleFormData = {
-    ruleSelecCount: 1,
-    ruleTotalCount: 1,
-    scoreRule: 'MAX_SCORE' as const,
+    selectivePart: 1,
+    selectiveCount: 1,
+    scorePolicy: 2 as const,
   };
   const ruleFormData = reactive({ ...initialRuleFormData });
 
-  // 选中的试题
-  const selectedQuestions = ref<number[]>([]);
+  // 选中的结构
+  const selectedParts = ref<OptionalRulePart[]>([]);
+  // 当前步骤选择的试题
+  const currentStepSelection = ref<number[]>([]);
 
   const handleClose = () => {
     currentStep.value = 0;
     objModifyAssign(ruleFormData, initialRuleFormData);
-    selectedQuestions.value = [];
+    selectedParts.value = [];
+    currentStepSelection.value = [];
   };
 
   // 下一步
@@ -113,26 +130,55 @@
       // 验证第一步表单
       const valid = await ruleFormRef.value?.validate().catch(() => false);
       if (!valid) return;
+    } else {
+      // 验证当前步骤的试题选择
+      const valid = await questionSelectRef.value
+        ?.validate()
+        .catch(() => false);
+      if (!valid) return;
+
+      // 构建当前步骤的OptionalRulePart数据
+      const currentPart: OptionalRulePart = {
+        selectivePart: currentStep.value.toString(),
+        mainNumbers: currentStepSelection.value,
+      };
+      selectedParts.value.push(currentPart);
     }
+
     currentStep.value++;
+    currentStepSelection.value = [];
   };
 
   // 上一步
   const prevStep = () => {
+    if (currentStep.value > 1) {
+      // 清除当前步骤的OptionalRulePart数据
+      selectedParts.value.pop();
+      currentStepSelection.value = selectedParts.value.slice(-1)[0].mainNumbers;
+    } else {
+      currentStepSelection.value = [];
+    }
     currentStep.value--;
   };
 
   // 提交
   const { loading, setLoading } = useLoading();
   const confirm = async () => {
-    // 验证第二步
+    // 验证最后一
     const valid = await questionSelectRef.value?.validate().catch(() => false);
     if (!valid) return;
 
+    // 构建最后一步的OptionalRulePart数据
+    const lastPart: OptionalRulePart = {
+      selectivePart: currentStep.value.toString(),
+      mainNumbers: currentStepSelection.value,
+    };
+    selectedParts.value.push(lastPart);
+
     setLoading(true);
     const params: OptionalRuleUpdateParam = {
       ...ruleFormData,
-      questionStructureIds: selectedQuestions.value,
+      parts: selectedParts.value,
     };
 
     if (props.rowData?.id) {
@@ -156,16 +202,17 @@
     if (props.rowData?.id) {
       // 编辑模式
       objModifyAssign(ruleFormData, {
-        ruleSelecCount: props.rowData.ruleSelecCount,
-        ruleTotalCount: props.rowData.ruleTotalCount,
-        scoreRule: props.rowData.scoreRule,
+        selectivePart: props.rowData.selectivePart || 1,
+        selectiveCount: props.rowData.selectiveCount || 1,
+        scorePolicy: props.rowData.scorePolicy || 2,
       });
-      selectedQuestions.value = props.rowData.questionStructureIds || [];
+      selectedParts.value = props.rowData.parts || [];
     } else {
       // 新增模式
       objModifyAssign(ruleFormData, initialRuleFormData);
-      selectedQuestions.value = [];
+      selectedParts.value = [];
     }
     currentStep.value = 0;
+    currentStepSelection.value = [];
   }
 </script>

+ 52 - 15
src/views/subject/components/OptionalQuestionSelect.vue

@@ -8,18 +8,27 @@
     stripe
     @selection-change="handleSelectionChange"
   >
-    <el-table-column type="selection" width="55" />
+    <el-table-column
+      type="selection"
+      width="55"
+      :selectable="isRowSelectable"
+    />
     <el-table-column prop="mainTitle" label="大题名称" width="120" />
     <el-table-column prop="mainNumber" label="大题号" width="80" />
     <el-table-column prop="subNumber" label="小题号" width="80" />
     <el-table-column prop="totalScore" label="满分" width="80" />
     <el-table-column prop="intervalScore" label="间隔分" width="80" />
-    <el-table-column
-      prop="optionalQuestionGroup"
-      label="选做题分组"
-      width="100"
-    />
-    <el-table-column prop="optionalQuestionArea" label="选做题区" width="100" />
+    <el-table-column prop="selectiveIndex" label="选做题分组" width="100">
+      <template #default="scope">
+        {{ scope.row.selectiveIndex }}-
+        {{ dictFilter.optionalScorePolicy(scope.row.scorePolicy) }}
+      </template>
+    </el-table-column>
+    <el-table-column prop="selectivePart" label="选做题区" width="100">
+      <template #default="scope">
+        {{ scope.row.selectiveIndex }} - {{ scope.row.selectivePart }}
+      </template>
+    </el-table-column>
   </el-table>
 </template>
 
@@ -27,8 +36,12 @@
   import { ref, watch, onMounted, nextTick } from 'vue';
   import { ElMessage } from 'element-plus';
   import { getOptionalQuestionList } from '@/api/subject';
-  import type { OptionalQuestionItem } from '@/api/types/subject';
+  import type {
+    OptionalQuestionItem,
+    OptionalRulePart,
+  } from '@/api/types/subject';
   import useLoading from '@/hooks/loading';
+  import { dictFilter } from '@/utils/filter';
 
   defineOptions({
     name: 'OptionalQuestionSelect',
@@ -37,6 +50,8 @@
   interface Props {
     modelValue: number[];
     subjectCode: string;
+    currentStep: number;
+    selectedParts: OptionalRulePart[];
   }
 
   const props = defineProps<Props>();
@@ -48,7 +63,22 @@
   const dataList = ref<OptionalQuestionItem[]>([]);
   const { loading, setLoading } = useLoading();
 
-  // 设置已选中的行
+  // 获取已被其他步骤选择的试题ID
+  const getSelectedQuestionIds = () => {
+    const selectedIds: number[] = [];
+    props.selectedParts.forEach((part) => {
+      selectedIds.push(...part.mainNumbers);
+    });
+    return selectedIds;
+  };
+
+  // 判断行是否可选择
+  const isRowSelectable = (row: OptionalQuestionItem) => {
+    const alreadySelectedIds = getSelectedQuestionIds();
+    return !alreadySelectedIds.includes(row.id);
+  };
+
+  // 设置已选中的行,TODO:注意排除被其他选做题方案选中的题
   const setSelectedRows = () => {
     if (!tableRef.value || !props.modelValue.length) return;
 
@@ -81,7 +111,14 @@
   // 处理选择变化
   const handleSelectionChange = (selection: OptionalQuestionItem[]) => {
     const selectedIds = selection.map((item) => item.id);
-    emit('update:modelValue', selectedIds);
+    const alreadySelectedIds = getSelectedQuestionIds();
+
+    // 过滤掉已被其他步骤选择的试题
+    const validSelectedIds = selectedIds.filter(
+      (id) => !alreadySelectedIds.includes(id)
+    );
+
+    emit('update:modelValue', validSelectedIds);
   };
 
   // 监听父组件数据变化
@@ -98,8 +135,10 @@
   // 暴露验证方法
   const validate = () => {
     if (props.modelValue.length === 0) {
-      ElMessage.warning('请至少选择一个试题');
-      return Promise.reject(new Error('请至少选择一个试题'));
+      ElMessage.warning(`请为试题组${props.currentStep}至少选择一个试题`);
+      return Promise.reject(
+        new Error(`请为试题组${props.currentStep}至少选择一个试题`)
+      );
     }
     return Promise.resolve(true);
   };
@@ -109,8 +148,6 @@
   });
 
   onMounted(() => {
-    if (props.subjectCode) {
-      getList();
-    }
+    getList();
   });
 </script>

+ 4 - 4
src/views/subject/components/OptionalRuleDialog.vue

@@ -14,21 +14,21 @@
     <el-table v-loading="loading" :data="ruleList" border stripe>
       <el-table-column label="选做题组" width="120">
         <template #default="{ row }">
-          {{ `${row.ruleSelecCount}选${row.ruleTotalCount}` }}
+          {{ `${row.selectivePart}选${row.selectiveCount}` }}
         </template>
       </el-table-column>
 
       <el-table-column label="规则" width="150">
         <template #default="{ row }">
-          {{ dictFilter.optionalScoreRule(row.scoreRule) }}
+          {{ dictFilter.optionalScorePolicy(row.scorePolicy) }}
         </template>
       </el-table-column>
 
-      <el-table-column label="大题名称" prop="mainTitle"> </el-table-column>
+      <el-table-column label="大题名称" prop="title"> </el-table-column>
 
       <el-table-column label="分值" width="100">
         <template #default="{ row }">
-          {{ row.score }}
+          {{ row.partScore * row.selectiveCount }}
         </template>
       </el-table-column>
 

+ 18 - 22
src/views/subject/components/OptionalRuleForm.vue

@@ -5,11 +5,11 @@
     :rules="formRules"
     label-width="120px"
   >
-    <el-form-item label="选做题规则" prop="ruleSelecCount">
+    <el-form-item label="选做题规则" prop="selectivePart">
       <el-input-number
-        v-model="formModel.ruleSelecCount"
+        v-model="formModel.selectivePart"
         :min="1"
-        :max="formModel.ruleTotalCount"
+        :max="99"
         :step="1"
         :precision="0"
         :controls="false"
@@ -19,9 +19,9 @@
       />
       <span>选</span>
       <el-input-number
-        v-model="formModel.ruleTotalCount"
-        :min="formModel.ruleSelecCount"
-        :max="99"
+        v-model="formModel.selectiveCount"
+        :min="1"
+        :max="formModel.selectivePart"
         :step="1"
         :precision="0"
         :controls="false"
@@ -31,8 +31,8 @@
       />
     </el-form-item>
 
-    <el-form-item label="取分规则" prop="scoreRule">
-      <el-radio-group v-model="formModel.scoreRule">
+    <el-form-item label="取分规则" prop="scorePolicy">
+      <el-radio-group v-model="formModel.scorePolicy">
         <el-radio value="MAX_SCORE">最高分</el-radio>
         <el-radio value="MIN_SCORE">最低分</el-radio>
         <el-radio value="MIN_SCORE_NO_ZERO">最低分(去掉0分)</el-radio>
@@ -41,9 +41,7 @@
 
     <div class="rule-description">
       <p><strong>规则说明:</strong></p>
-      <p>• 选做题数量:学生需要选择作答的题目数量</p>
-      <p>• 总题数:该选做题组包含的题目总数</p>
-      <p>• 取分规则:当学生作答题目数量超过选做题数量时的计分方式</p>
+      <p>*如选做为5选3,则系统会校验后续选做题总量为5,合分数量为3。</p>
     </div>
   </el-form>
 </template>
@@ -51,7 +49,7 @@
 <script setup lang="ts">
   import { ref, watch, nextTick } from 'vue';
   import type { FormInstance, FormRules } from 'element-plus';
-  import type { OptionalScoreRule } from '@/api/types/subject';
+  import type { OptionalScorePolicy } from '@/api/types/subject';
   import { isEmpty } from '@/utils/utils';
 
   defineOptions({
@@ -59,9 +57,9 @@
   });
 
   interface FormData {
-    ruleSelecCount: number;
-    ruleTotalCount: number;
-    scoreRule: OptionalScoreRule;
+    selectivePart: number;
+    selectiveCount: number;
+    scorePolicy: OptionalScorePolicy;
   }
 
   interface Props {
@@ -102,19 +100,17 @@
   );
 
   const formRules: FormRules<keyof FormData> = {
-    ruleSelecCount: [
+    selectiveCount: [
       {
         validator: (rule, value, callback) => {
           if (
-            !isEmpty(formModel.value.ruleTotalCount) ||
-            !isEmpty(formModel.value.ruleSelecCount)
+            !isEmpty(formModel.value.selectivePart) ||
+            !isEmpty(formModel.value.selectiveCount)
           ) {
             return callback(new Error('请完成数量输入'));
           }
 
-          if (
-            formModel.value.ruleSelecCount >= formModel.value.ruleTotalCount
-          ) {
+          if (formModel.value.selectiveCount > formModel.value.selectivePart) {
             return callback(new Error('选做题数量不能大于总题数'));
           }
 
@@ -123,7 +119,7 @@
         trigger: 'change',
       },
     ],
-    scoreRule: [
+    scorePolicy: [
       { required: true, message: '请选择取分规则', trigger: 'change' },
     ],
   };

+ 2 - 10
src/views/subject/components/SubjectSettingDialog.vue

@@ -60,22 +60,14 @@
       </el-form-item>
 
       <el-form-item label="评卷提交自动定位">
-        <el-radio-group v-model="formModel.autoScroll">
-          <el-radio :value="3">设置以考试为准</el-radio>
-          <el-radio :value="6">是</el-radio>
-          <el-radio :value="9">否</el-radio>
-        </el-radio-group>
+        <el-checkbox v-model="formModel.autoScroll"></el-checkbox>
         <p>
           *开启后,当前试卷评完后,下份试卷自动定位到上份试卷的第一个轨迹点
         </p>
       </el-form-item>
 
       <el-form-item label="自动对切题卡">
-        <el-radio-group v-model="formModel.enableSplit">
-          <el-radio :value="3">设置以考试为准</el-radio>
-          <el-radio :value="6">是</el-radio>
-          <el-radio :value="9">否</el-radio>
-        </el-radio-group>
+        <el-checkbox v-model="formModel.enableSplit"></el-checkbox>
         <p>
           *选持自动对切题卡后,在阅卷端自动按照题卡的55%的比例进行对切,纸张大小A4时不生效
         </p>