Эх сурвалжийг харах

批次复制;批次编辑后返回到编辑前的批次列表页面(缓存)

Michael Wang 4 жил өмнө
parent
commit
c1fb089453

+ 85 - 0
src/features/examwork/ExamManagement/CopyExamDialog.vue

@@ -0,0 +1,85 @@
+<template>
+  <el-dialog
+    ref="dialog"
+    title="复制考试批次"
+    width="450px"
+    :visible.sync="visible"
+    @close="closeDialog"
+  >
+    <el-form
+      :model="form"
+      ref="form"
+      :rules="rules"
+      label-position="right"
+      label-width="120px"
+    >
+      <el-row>
+        <el-form-item label="批次名称" prop="name">
+          <el-input
+            class="pull_length"
+            v-model="form.name"
+            placeholder="批次名称"
+          />
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item label="批次编码" prop="code">
+          <el-input
+            class="pull_length"
+            v-model="form.code"
+            placeholder="批次编码"
+            disabled
+          />
+        </el-form-item>
+      </el-row>
+      <el-row class="d-flex justify-content-center">
+        <el-button type="primary" @click="submitForm">保 存</el-button>
+        <el-button @click="closeDialog">取 消</el-button>
+      </el-row>
+    </el-form>
+  </el-dialog>
+</template>
+
+<script>
+import { copyExam } from "@/api/examwork-exam";
+export default {
+  name: "CopyExamDialog",
+  props: {
+    exam: Object,
+  },
+  data() {
+    return {
+      visible: false,
+      form: {
+        name: "",
+        code: "",
+      },
+      rules: {},
+    };
+  },
+  watch: {
+    "form.name"(val) {
+      this.form.code = val;
+    },
+  },
+  methods: {
+    openDialog() {
+      this.visible = true;
+    },
+    closeDialog() {
+      this.visible = false;
+    },
+    async submitForm() {
+      await copyExam({
+        sourceId: this.exam.id,
+        code: this.form.code,
+        name: this.form.name,
+      });
+      this.$emit("reload");
+      this.closeDialog();
+    },
+  },
+};
+</script>
+
+<style></style>

+ 307 - 192
src/features/examwork/ExamManagement/ExamEdit.vue

@@ -2,210 +2,322 @@
   <div>
     <el-tabs v-model="activeName" type="card">
       <el-tab-pane label="考试规则设置" name="first">
-        <el-form :model="form" inline>
-          <el-form-item label="考试模式">
-            <ExamTypeSelect v-model="form.mode"></ExamTypeSelect>
-          </el-form-item>
-          <el-form-item label="批次编码">
-            <el-input v-model.trim="form.code"></el-input>
-          </el-form-item>
-          <el-form-item label="批次名称">
-            <el-input v-model.trim="form.name"></el-input>
-          </el-form-item>
-          <el-form-item label="考试时间">
-            <el-date-picker
-              v-model="form.startEndTimeProxy"
-              type="datetimerange"
-              range-separator="至"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期"
-            >
-            </el-date-picker>
-          </el-form-item>
-          <el-form-item label="候考时长(分钟)">
-            <MinuteInput v-model.trim="form.prepareSeconds"> </MinuteInput>
-          </el-form-item>
-          <el-form-item label="考试次数限制">
-            <el-input v-model.number.trim="form.examCount"></el-input>
-          </el-form-item>
-          <el-form-item label="考试时长(分钟)">
-            <el-input v-model.trim="form.maxDurationSeconds"></el-input>
-          </el-form-item>
-          <el-form-item label="迟到时长(分钟)">
-            <el-input v-model.trim="form.openingSeconds"></el-input>
-          </el-form-item>
-          <el-form-item label="冻结时间(分钟)">
-            <el-input v-model.trim="form.minDurationSeconds"></el-input>
-          </el-form-item>
-          <el-form-item label="启用集中收卷">
-            <el-radio v-model="form.forceFinish" :label="1">是</el-radio>
-            <el-radio v-model="form.forceFinish" :label="0">否</el-radio>
-          </el-form-item>
-          <el-form-item label="启用开考口令">
-            <el-radio v-model="form.enableShortCode" :label="1">是</el-radio>
-            <el-radio v-model="form.enableShortCode" :label="0">否</el-radio>
-            <el-input v-model.trim="form.shortCode"></el-input>
-          </el-form-item>
-          <el-form-item label="是否允许断点续考">
-            <el-radio v-model="form.enableBreak" :label="1">是</el-radio>
-            <el-radio v-model="form.enableBreak" :label="0">否</el-radio>
-          </el-form-item>
-          <el-form-item label="断点次数">
-            <el-input v-model.trim="form.breakResumeCount"></el-input>
-          </el-form-item>
-          <el-form-item label="断点时长(分钟)">
-            <el-input v-model.trim="form.breakExpireSeconds"></el-input>
-          </el-form-item>
-          <el-form-item label="重考是否需要审核">
-            <el-radio v-model="form.reexamAuditing" :label="1">是</el-radio>
-            <el-radio v-model="form.reexamAuditing" :label="0">否</el-radio>
-          </el-form-item>
-          <el-form-item label="取分策略">
-            <el-radio
-              v-model="form.recordSelectStrategy"
-              label="HIGHEST_TOTAL_SCORE"
-            >
-              全部阅卷后取最高分
-            </el-radio>
-            <el-radio
-              v-model="form.recordSelectStrategy"
-              label="HIGHEST_OBJECTIVE_SCORE"
-            >
-              客观分最高
-            </el-radio>
-            <el-radio v-model="form.recordSelectStrategy" label="LATEST">
-              最后一次提交
-            </el-radio>
-          </el-form-item>
-          <el-form-item label="多选题给分规则">
-            <el-radio v-model="form.objectiveScorePolicy" label="EQUAL">
-              全对给分
-            </el-radio>
-            <el-radio v-model="form.objectiveScorePolicy" label="PARTIAL">
-              漏选给一半分
-            </el-radio>
-          </el-form-item>
-          <el-form-item label="是否显示客观分">
-            <el-radio v-model="form.showObjectiveScore" :label="1">是</el-radio>
-            <el-radio v-model="form.showObjectiveScore" :label="0">否</el-radio>
-          </el-form-item>
-          <el-form-item label="是否允许摄像头拍照作答">
-            <el-radio v-model="form.cameraPhotoUpload" :label="1">是</el-radio>
-            <el-radio v-model="form.cameraPhotoUpload" :label="0">否</el-radio>
-          </el-form-item>
-          <el-form-item label="是否允许小程序作答">
-            <el-radio v-model="form.mobilePhotoUpload" :label="1">是</el-radio>
-            <el-radio v-model="form.mobilePhotoUpload" :label="0">否</el-radio>
-          </el-form-item>
+        <el-form :model="form" label-width="170px" inline>
+          <el-row>
+            <el-form-item label="考试模式">
+              <ExamTypeSelect v-model="form.mode"></ExamTypeSelect>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="批次编码">
+              <el-input v-model.trim="form.code"></el-input>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="批次名称">
+              <el-input v-model.trim="form.name"></el-input>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="考试时间">
+              <el-date-picker
+                v-model="form.startEndTimeProxy"
+                type="datetimerange"
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="候考时长(分钟)">
+              <MinuteInput v-model.trim="form.prepareSeconds"> </MinuteInput>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="考试次数限制">
+              <el-input v-model.number.trim="form.examCount"></el-input>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="考试时长(分钟)">
+              <MinuteInput v-model.trim="form.maxDurationSeconds">
+              </MinuteInput>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="迟到时长(分钟)">
+              <MinuteInput v-model.trim="form.openingSeconds"> </MinuteInput>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="冻结时间(分钟)">
+              <MinuteInput v-model.trim="form.minDurationSeconds">
+              </MinuteInput>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="启用集中收卷">
+              <el-radio v-model="form.forceFinish" :label="1">是</el-radio>
+              <el-radio v-model="form.forceFinish" :label="0">否</el-radio>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="启用开考口令">
+              <el-radio v-model="form.enableShortCode" :label="1">是</el-radio>
+              <el-radio v-model="form.enableShortCode" :label="0">否</el-radio>
+              <el-input v-model.trim="form.shortCode"></el-input>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="是否允许断点续考">
+              <el-radio v-model="form.enableBreak" :label="1">是</el-radio>
+              <el-radio v-model="form.enableBreak" :label="0">否</el-radio>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item v-if="form.enableBreak" label="断点次数">
+              <el-input v-model.trim="form.breakResumeCount"></el-input>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item v-if="form.enableBreak" label="断点时长(分钟)">
+              <MinuteInput v-model.trim="form.breakExpireSeconds">
+              </MinuteInput>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="重考是否需要审核">
+              <el-radio v-model="form.reexamAuditing" :label="1">是</el-radio>
+              <el-radio v-model="form.reexamAuditing" :label="0">否</el-radio>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="取分策略">
+              <el-radio
+                v-model="form.recordSelectStrategy"
+                label="HIGHEST_TOTAL_SCORE"
+              >
+                全部阅卷后取最高分
+              </el-radio>
+              <el-radio
+                v-model="form.recordSelectStrategy"
+                label="HIGHEST_OBJECTIVE_SCORE"
+              >
+                客观分最高
+              </el-radio>
+              <el-radio v-model="form.recordSelectStrategy" label="LATEST">
+                最后一次提交
+              </el-radio>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="多选题给分规则">
+              <el-radio v-model="form.objectiveScorePolicy" label="EQUAL">
+                全对给分
+              </el-radio>
+              <el-radio v-model="form.objectiveScorePolicy" label="PARTIAL">
+                漏选给一半分
+              </el-radio>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="是否显示客观分">
+              <el-radio v-model="form.showObjectiveScore" :label="1">
+                是
+              </el-radio>
+              <el-radio v-model="form.showObjectiveScore" :label="0">
+                否
+              </el-radio>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="是否允许摄像头拍照作答">
+              <el-radio v-model="form.cameraPhotoUpload" :label="1">
+                是
+              </el-radio>
+              <el-radio v-model="form.cameraPhotoUpload" :label="0">
+                否
+              </el-radio>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="是否允许小程序作答">
+              <el-radio v-model="form.mobilePhotoUpload" :label="1">
+                是
+              </el-radio>
+              <el-radio v-model="form.mobilePhotoUpload" :label="0">
+                否
+              </el-radio>
+            </el-form-item>
+          </el-row>
         </el-form>
       </el-tab-pane>
 
       <el-tab-pane label="监考设置" name="second">
-        <el-form :model="form" inline>
-          <el-form-item label="开考检测">
-            <el-radio v-model="form.entryAuthenticationPolicy" label="OFF"
-              >安全级别:无</el-radio
-            >
-            <el-radio
-              v-model="form.entryAuthenticationPolicy"
-              label="FACE_VERIFY_OPTIONAL"
-              >安全级别:低</el-radio
-            >
-            <el-radio
-              v-model="form.entryAuthenticationPolicy"
-              label="FACE_VERIFY_FORCE"
-              >安全级别:中</el-radio
-            >
-            <el-radio v-model="form.entryAuthenticationPolicy" label="LIVENESS"
-              >安全级别:高</el-radio
-            >
-          </el-form-item>
+        <el-form :model="form" label-width="180px" inline>
+          <el-row>
+            <h2>开考检测</h2>
+            <el-form-item label="">
+              <el-radio v-model="form.entryAuthenticationPolicy" label="OFF">
+                安全级别:无
+              </el-radio>
+              <el-radio
+                v-model="form.entryAuthenticationPolicy"
+                label="FACE_VERIFY_OPTIONAL"
+              >
+                安全级别:低
+              </el-radio>
+              <el-radio
+                v-model="form.entryAuthenticationPolicy"
+                label="FACE_VERIFY_FORCE"
+              >
+                安全级别:中
+              </el-radio>
+              <el-radio
+                v-model="form.entryAuthenticationPolicy"
+                label="LIVENESS"
+              >
+                安全级别:高
+              </el-radio>
+            </el-form-item>
+          </el-row>
           <h2>过程监控</h2>
-          <el-form-item label="是否考中人脸识别">
-            <el-radio v-model="form.inProcessFaceVerify" :label="1"
-              >是</el-radio
-            >
-            <el-radio v-model="form.inProcessFaceVerify" :label="0"
-              >否</el-radio
-            >
-          </el-form-item>
-          <el-form-item label="是否考中陌生人脸识别">
-            <el-radio v-model="form.inProcessFaceStrangerIgnore" :label="0"
-              >是</el-radio
-            >
-            <el-radio v-model="form.inProcessFaceStrangerIgnore" :label="1"
-              >否</el-radio
-            >
-          </el-form-item>
-          <el-form-item label="是否考中活体检测">
-            <el-radio v-model="form.inProcessLivenessVerify" :label="0"
-              >是</el-radio
-            >
-            <el-radio v-model="form.inProcessLivenessVerify" :label="1"
-              >否</el-radio
-            >
-          </el-form-item>
-          <el-form-item label="活体验证弹出时间段">
-            <el-input
-              v-model.number.trim="form.inProcessLivenessFixedRange[0]"
-            ></el-input>
-            ~
-            <el-input
-              v-model.number.trim="form.inProcessLivenessFixedRange[1]"
-            ></el-input>
-            分钟
-          </el-form-item>
-          <el-form-item label="活体验证结果的判定方案">
-            <el-radio v-model="form.inProcessLivenessJudgePolicy" label="ANY">
-              单条成功则通过</el-radio
-            >
-            <el-radio v-model="form.inProcessLivenessJudgePolicy" label="ALL"
-              >所有验证成功则通过</el-radio
-            >
-            <el-radio v-model="form.inProcessLivenessJudgePolicy" label="MORE"
-              >成功次数大于失败则通过</el-radio
-            >
-            <h2>监考直播</h2>
-            <el-form-item label="是否开启考生端监考直播">
-              <el-radio v-model="form.monitorProxy" :label="true">是</el-radio>
-              <el-radio v-model="form.monitorProxy" :label="false">否</el-radio>
+          <el-row>
+            <el-form-item label="是否考中人脸识别">
+              <el-radio v-model="form.inProcessFaceVerify" :label="1"
+                >是
+              </el-radio>
+              <el-radio v-model="form.inProcessFaceVerify" :label="0"
+                >否
+              </el-radio>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="是否考中陌生人脸识别">
+              <el-radio v-model="form.inProcessFaceStrangerIgnore" :label="0"
+                >是
+              </el-radio>
+              <el-radio v-model="form.inProcessFaceStrangerIgnore" :label="1"
+                >否
+              </el-radio>
             </el-form-item>
-            <el-form-item v-if="form.monitorProxy" label="是否需要视频转录">
-              <el-radio v-model="form.monitorRecord" :label="1">是</el-radio>
-              <el-radio v-model="form.monitorRecord" :label="0">否</el-radio>
+          </el-row>
+          <el-row>
+            <el-form-item label="是否考中活体检测">
+              <el-radio v-model="form.inProcessLivenessVerify" :label="0"
+                >是
+              </el-radio>
+              <el-radio v-model="form.inProcessLivenessVerify" :label="1"
+                >否
+              </el-radio>
             </el-form-item>
-            <el-form-item v-if="form.monitorProxy" label="电脑&手机监控方案">
-              <el-checkbox-group v-model="form.monitorVideoSource">
-                <el-checkbox label="client_camera"
-                  >电脑摄像头为主机位</el-checkbox
+          </el-row>
+          <el-row>
+            <el-form-item label="活体验证弹出时间段">
+              <MinuteInput
+                v-model.trim="form.inProcessLivenessFixedRange[0]"
+                style="width: 150px;"
+              />
+              ~
+              <MinuteInput
+                v-model.trim="form.inProcessLivenessFixedRange[1]"
+                style="width: 150px;"
+              />
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="活体验证结果的判定方案">
+              <el-radio v-model="form.inProcessLivenessJudgePolicy" label="ANY">
+                单条成功则通过
+              </el-radio>
+              <el-radio v-model="form.inProcessLivenessJudgePolicy" label="ALL">
+                所有验证成功则通过
+              </el-radio>
+              <el-radio
+                v-model="form.inProcessLivenessJudgePolicy"
+                label="MORE"
+              >
+                成功次数大于失败则通过
+              </el-radio>
+              <h2>监考直播</h2>
+              <el-row>
+                <el-form-item label="是否开启考生端监考直播">
+                  <el-radio v-model="form.monitorProxy" :label="true"
+                    >是
+                  </el-radio>
+                  <el-radio v-model="form.monitorProxy" :label="false"
+                    >否
+                  </el-radio>
+                </el-form-item>
+              </el-row>
+              <el-row>
+                <el-form-item v-if="form.monitorProxy" label="是否需要视频转录">
+                  <el-radio v-model="form.monitorRecord" :label="1"
+                    >是
+                  </el-radio>
+                  <el-radio v-model="form.monitorRecord" :label="0"
+                    >否
+                  </el-radio>
+                </el-form-item>
+              </el-row>
+              <el-row>
+                <el-form-item
+                  v-if="form.monitorProxy"
+                  label="电脑&手机监控方案"
                 >
-                <el-checkbox label="client_screen">电脑开启录频</el-checkbox>
-                <el-checkbox label="mobile_first">手机监考机位1</el-checkbox>
-                <el-checkbox label="mobile_second">手机监考机位2</el-checkbox>
-              </el-checkbox-group>
+                  <el-checkbox-group v-model="form.monitorVideoSource">
+                    <el-checkbox label="client_camera"
+                      >电脑摄像头为主机位</el-checkbox
+                    >
+                    <el-checkbox label="client_screen"
+                      >电脑开启录频</el-checkbox
+                    >
+                    <el-checkbox label="mobile_first"
+                      >手机监考机位1</el-checkbox
+                    >
+                    <el-checkbox label="mobile_second"
+                      >手机监考机位2</el-checkbox
+                    >
+                  </el-checkbox-group>
+                </el-form-item>
+              </el-row>
             </el-form-item>
-          </el-form-item>
+          </el-row>
         </el-form>
       </el-tab-pane>
 
       <el-tab-pane label="其他设置" name="third">
-        <el-form :model="form" inline>
-          <el-form-item label="考试须知">
-            <el-input v-model.trim="form.preNotice"></el-input>
-          </el-form-item>
-          <el-form-item label="须知强制阅读时长(秒)">
-            <el-input v-model.trim="form.preNoticeStaySeconds"></el-input>
-          </el-form-item>
-          <el-form-item label="考后说明">
-            <el-input v-model.trim="form.postNotice"></el-input>
-          </el-form-item>
-          <el-form-item label="IP限制">
-            <el-radio v-model="form.enableIpLimit" :label="1">是</el-radio>
-            <el-radio v-model="form.enableIpLimit" :label="0">否</el-radio>
-          </el-form-item>
-          <el-form-item label="IP段(*表示任意):">
-            <el-input v-model.trim="form.ipAllow"></el-input>
-          </el-form-item>
+        <el-form :model="form" label-width="170px" inline>
+          <el-row>
+            <el-form-item label="考试须知">
+              <el-input v-model.trim="form.preNotice"></el-input>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="须知强制阅读时长">
+              <el-input v-model.trim="form.preNoticeStaySeconds">
+                <template slot="append">秒</template>
+              </el-input>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="考后说明">
+              <el-input v-model.trim="form.postNotice"></el-input>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="IP限制">
+              <el-radio v-model="form.enableIpLimit" :label="1">是</el-radio>
+              <el-radio v-model="form.enableIpLimit" :label="0">否</el-radio>
+            </el-form-item>
+          </el-row>
+          <el-row>
+            <el-form-item label="IP段(*表示任意):">
+              <el-input v-model.trim="form.ipAllow"></el-input>
+            </el-form-item>
+          </el-row>
         </el-form>
       </el-tab-pane>
     </el-tabs>
@@ -303,8 +415,11 @@ export default {
     async save() {
       await saveExam(this.form);
       this.$notify({ title: "保存成功", type: "success" });
+      this.$router.back();
+    },
+    cancel() {
+      this.$router.back();
     },
-    cancel() {},
   },
 };
 </script>

+ 33 - 16
src/features/examwork/ExamManagement/ExamManagement.vue

@@ -27,7 +27,7 @@
         <span slot-scope="scope">{{ scope.row.name }}</span>
       </el-table-column>
       <el-table-column label="模式">
-        <span slot-scope="scope">{{ scope.row.mode }}</span>
+        <span slot-scope="scope">{{ scope.row.mode | modeFilter }}</span>
       </el-table-column>
       <el-table-column width="120" label="状态">
         <span slot-scope="scope">{{
@@ -68,6 +68,7 @@
           <el-button size="mini" type="primary" plain @click="edit(scope.row)">
             编辑
           </el-button>
+          <div class="mb-2"></div>
           <el-button
             size="mini"
             type="primary"
@@ -93,19 +94,22 @@
         :total="total"
       />
     </div>
+    <CopyExamDialog ref="theDialog" :exam="selected" @reload="searchForm" />
   </div>
 </template>
 
 <script>
 import StateSelect from "@/components/StateSelect";
 import ExamTypeSelect from "@/components/ExamTypeSelect";
-import { searchExams, toggleEnableExam, copyExam } from "@/api/examwork-exam";
+import { searchExams, toggleEnableExam } from "@/api/examwork-exam";
+import CopyExamDialog from "./CopyExamDialog";
 
 export default {
   name: "ExamManagement",
   components: {
     StateSelect,
     ExamTypeSelect,
+    CopyExamDialog,
   },
   data() {
     return {
@@ -123,6 +127,26 @@ export default {
       selected: null,
     };
   },
+  // activated() {
+  //   console.log("im activated");
+  // },
+  // deactivated() {
+  //   console.log("im deactivated");
+  // },
+  beforeRouteEnter(to, from, next) {
+    if (from.name === "ExamEdit") {
+      next((vm) => vm.$nextTick(() => vm.searchForm()));
+    } else {
+      next();
+    }
+  },
+  beforeRouteLeave(to, from, next) {
+    if (to.name !== "ExamEdit") {
+      // 仅仅在编辑考试时保持alive
+      this.$destroy();
+    }
+    next();
+  },
   methods: {
     async searchForm() {
       const res = await searchExams({
@@ -157,23 +181,16 @@ export default {
       this.searchForm();
     },
     async copy() {
-      console.log(this.$refs.table.selection);
       let rows = this.$refs.table.selection;
-      if (rows.length === 0) {
-        this.$notify({ type: "warning", title: "请选择一个批次" });
-        return;
-      }
-      if (rows.length > 1) {
-        this.$notify({ type: "warning", title: "请仅选择一个批次" });
+      if (rows.length !== 1) {
+        this.$notify({
+          type: "warning",
+          title: rows.length === 0 ? "请选择一个批次" : "请仅选择一个批次",
+        });
         return;
       }
-      const exam = rows[0];
-      await copyExam({
-        sourceId: exam.id,
-        code: exam.code,
-        name: exam.name,
-      });
-      this.searchForm();
+      this.selected = rows[0];
+      this.$refs.theDialog.openDialog();
     },
     editActivities(exam) {
       this.$router.push({

+ 5 - 0
src/filters/index.js

@@ -44,3 +44,8 @@ Vue.filter("scoreStatusFilter", function (val) {
     FINISH: "算分完成",
   }[val];
 });
+
+Vue.filter("modeFilter", function (val) {
+  if (val === null) return "无";
+  return { TOGETHER: "集中统一", ANYTIME: "随到随考" }[val];
+});

+ 3 - 1
src/views/Layout/components/AppMain.vue

@@ -2,7 +2,9 @@
   <section class="app-main">
     <transition name="fade" mode="out-in">
       <!-- <router-view :key="key"></router-view> -->
-      <router-view />
+      <keep-alive include="ExamManagement">
+        <router-view />
+      </keep-alive>
     </transition>
   </section>
 </template>