|
@@ -1,36 +1,33 @@
|
|
|
<template>
|
|
|
<div>
|
|
|
-
|
|
|
<el-steps :active="step" simple>
|
|
|
<el-step title="创建/选择试卷" icon="el-icon-s-claim" />
|
|
|
<el-step title="考试配置" icon="el-icon-s-ticket" />
|
|
|
<el-step title="发布考试" icon="el-icon-s-promotion" />
|
|
|
</el-steps>
|
|
|
|
|
|
- <div v-if="step===1">
|
|
|
-
|
|
|
+ <div v-if="step === 1">
|
|
|
<h3>选择/创建试卷</h3>
|
|
|
<el-card>
|
|
|
-
|
|
|
<el-radio v-model="checkType" :label="1">选择已有试卷创建考试</el-radio>
|
|
|
|
|
|
- <div v-if="checkType===1">
|
|
|
+ <div v-if="checkType === 1">
|
|
|
<tmpl-list :select-mode="true" @select="handleBack" />
|
|
|
</div>
|
|
|
-
|
|
|
</el-card>
|
|
|
|
|
|
<el-card style="margin-top: 20px">
|
|
|
<el-radio v-model="checkType" :label="2">新建试卷并创建考试</el-radio>
|
|
|
- <div v-if="checkType===2" style="padding-top: 20px">
|
|
|
+ <div v-if="checkType === 2" style="padding-top: 20px">
|
|
|
<tmpl-pre-create @confirm="handleCreate" />
|
|
|
</div>
|
|
|
</el-card>
|
|
|
-
|
|
|
</div>
|
|
|
|
|
|
- <div v-if="step===2" style="margin-left: -20px; margin-right: -20px; padding-top: 20px">
|
|
|
-
|
|
|
+ <div
|
|
|
+ v-if="step === 2"
|
|
|
+ style="margin-left: -20px; margin-right: -20px; padding-top: 20px"
|
|
|
+ >
|
|
|
<join1-form
|
|
|
:title="createForm.title"
|
|
|
:cat-id="createForm.catId"
|
|
@@ -38,20 +35,21 @@
|
|
|
:time-type="createForm.timeType"
|
|
|
@back="handleBack"
|
|
|
/>
|
|
|
-
|
|
|
</div>
|
|
|
|
|
|
- <div v-if="step===3">
|
|
|
-
|
|
|
- <el-form ref="postForm" :model="postForm" :rules="rules" label-position="left" label-width="100px">
|
|
|
-
|
|
|
+ <div v-if="step === 3">
|
|
|
+ <el-form
|
|
|
+ ref="postForm"
|
|
|
+ :model="postForm"
|
|
|
+ :rules="rules"
|
|
|
+ label-position="left"
|
|
|
+ label-width="100px"
|
|
|
+ >
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="18">
|
|
|
-
|
|
|
<h3>考试设置</h3>
|
|
|
|
|
|
<el-card>
|
|
|
-
|
|
|
<el-row :gutter="50">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="考试名称" prop="title">
|
|
@@ -60,13 +58,19 @@
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="考试类型" prop="examType">
|
|
|
- <dic-list-select v-model="postForm.examType" dic-code="exam_type" />
|
|
|
+ <dic-list-select
|
|
|
+ v-model="postForm.examType"
|
|
|
+ dic-code="exam_type"
|
|
|
+ />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="及格分" prop="qualifyScore">
|
|
|
- <el-input-number v-model="postForm.qualifyScore" :max="tmplData.totalScore" />
|
|
|
+ <el-input-number
|
|
|
+ v-model="postForm.qualifyScore"
|
|
|
+ :max="tmplData.totalScore"
|
|
|
+ />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
|
|
@@ -94,7 +98,9 @@
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="最低交卷时长">
|
|
|
<el-input-number v-model="postForm.handMin" />
|
|
|
- <tool-tip msg="最低答题分钟数,未达到不允许交卷,0为不开启" />
|
|
|
+ <tool-tip
|
|
|
+ msg="最低答题分钟数,未达到不允许交卷,0为不开启"
|
|
|
+ />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
|
|
@@ -111,9 +117,7 @@
|
|
|
</el-col>
|
|
|
|
|
|
<el-col v-if="postForm.timeLimit" :span="12">
|
|
|
-
|
|
|
<el-form-item label="考试时间设置">
|
|
|
-
|
|
|
<el-date-picker
|
|
|
v-model="dateValues"
|
|
|
style="margin-left: 10px"
|
|
@@ -124,14 +128,48 @@
|
|
|
start-placeholder="开始时间"
|
|
|
end-placeholder="结束时间"
|
|
|
/>
|
|
|
-
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
|
|
|
<el-col v-if="postForm.timeLimit" :span="12">
|
|
|
<el-form-item label="允许迟到时长">
|
|
|
<el-input-number v-model="postForm.lateMax" />
|
|
|
- <tool-tip msg="允许迟到的分钟数,注意:某段时间都可以考试的长期考试请设置为0" />
|
|
|
+ <tool-tip
|
|
|
+ msg="允许迟到的分钟数,注意:某段时间都可以考试的长期考试请设置为0"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="是否关联培训">
|
|
|
+ <div class="flex">
|
|
|
+ <el-select
|
|
|
+ style="width: 75%"
|
|
|
+ v-model="postForm.courseId"
|
|
|
+ placeholder="可选择或输入关键字搜索培训课程"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ @change="getTreeEnableArray"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in courseArray"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.title"
|
|
|
+ :value="item.id"
|
|
|
+ >
|
|
|
+ <span style="float: left">{{ item.title }}</span>
|
|
|
+ <span
|
|
|
+ style="
|
|
|
+ float: right;
|
|
|
+ color: #8492a6;
|
|
|
+ font-size: 13px;
|
|
|
+ "
|
|
|
+ >{{ item.catId_dictText }}</span
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ <tool-tip msg="关联培训后,未完成学习将无法开始考试" />
|
|
|
+ </div>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
|
|
@@ -156,7 +194,7 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
|
|
|
- <el-col v-if="postForm.resultType!==3" :span="24">
|
|
|
+ <el-col v-if="postForm.resultType !== 3" :span="24">
|
|
|
<el-form-item label="考后感谢文字">
|
|
|
<el-input
|
|
|
v-model="postForm.thanks"
|
|
@@ -168,56 +206,57 @@
|
|
|
</el-col>
|
|
|
|
|
|
<el-col :span="24">
|
|
|
-
|
|
|
- <div style="background: #fbfbfb; padding: 10px; line-height: 36px; font-size: 14px">
|
|
|
-
|
|
|
- <div style="font-weight: 700">
|
|
|
- 考试权限
|
|
|
- </div>
|
|
|
+ <div
|
|
|
+ style="
|
|
|
+ background: #fbfbfb;
|
|
|
+ padding: 10px;
|
|
|
+ line-height: 36px;
|
|
|
+ font-size: 14px;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <div style="font-weight: 700">考试权限</div>
|
|
|
|
|
|
<el-radio-group v-model="postForm.openType" size="small">
|
|
|
- <el-radio :label="1">完全公开</el-radio>
|
|
|
+ <!-- <el-radio :label="1">完全公开</el-radio> -->
|
|
|
<el-radio :label="2">部门开放</el-radio>
|
|
|
<el-radio :label="3">指定人员</el-radio>
|
|
|
<el-radio :label="9">口令密码</el-radio>
|
|
|
</el-radio-group>
|
|
|
|
|
|
<div style="padding-top: 20px">
|
|
|
-
|
|
|
- <div v-if="postForm.openType==1">
|
|
|
+ <div v-if="postForm.openType == 1">
|
|
|
<el-alert
|
|
|
title="开放的,任何人都可以进行考试!"
|
|
|
type="warning"
|
|
|
/>
|
|
|
</div>
|
|
|
|
|
|
- <div v-if="postForm.openType==2">
|
|
|
- <depart-refs v-model="postForm.deptCodes" />
|
|
|
+ <div v-if="postForm.openType == 2">
|
|
|
+ <depart-refs
|
|
|
+ v-model="postForm.deptCodes"
|
|
|
+ :enableArray="treeEnableArray"
|
|
|
+ />
|
|
|
</div>
|
|
|
|
|
|
- <div v-if="postForm.openType==3">
|
|
|
+ <div v-if="postForm.openType == 3">
|
|
|
<user-refs v-model="postForm.personList" />
|
|
|
</div>
|
|
|
|
|
|
- <div v-if="postForm.openType==9">
|
|
|
- <el-input v-model="postForm.password" placeholder="输入考试密码" />
|
|
|
+ <div v-if="postForm.openType == 9">
|
|
|
+ <el-input
|
|
|
+ v-model="postForm.password"
|
|
|
+ placeholder="输入考试密码"
|
|
|
+ />
|
|
|
</div>
|
|
|
-
|
|
|
</div>
|
|
|
-
|
|
|
</div>
|
|
|
-
|
|
|
</el-col>
|
|
|
-
|
|
|
</el-row>
|
|
|
-
|
|
|
</el-card>
|
|
|
|
|
|
<h3>防作弊选项</h3>
|
|
|
<el-card>
|
|
|
-
|
|
|
<el-row>
|
|
|
-
|
|
|
<el-col>
|
|
|
<el-form-item label="学员答题设备设置" label-width="200px">
|
|
|
<el-radio-group v-model="postForm.answerDevice">
|
|
@@ -229,7 +268,6 @@
|
|
|
</el-col>
|
|
|
|
|
|
<el-col>
|
|
|
-
|
|
|
<el-form-item label="人脸认证进入考试" label-width="200px">
|
|
|
<el-switch
|
|
|
v-model="postForm.faceOn"
|
|
@@ -239,42 +277,57 @@
|
|
|
|
|
|
开启后,需要人脸认证通过才可以进入考试
|
|
|
</el-form-item>
|
|
|
-
|
|
|
</el-col>
|
|
|
|
|
|
<el-col>
|
|
|
-
|
|
|
- <el-form-item label="答题时摄像头拍照监考" label-width="200px">
|
|
|
+ <el-form-item
|
|
|
+ label="答题时摄像头拍照监考"
|
|
|
+ label-width="200px"
|
|
|
+ >
|
|
|
<el-switch
|
|
|
v-model="postForm.camOn"
|
|
|
active-color="#13ce66"
|
|
|
inactive-color="#ff4949"
|
|
|
/>
|
|
|
|
|
|
- <span v-if="postForm.camOn"> 学员开始答题后,每
|
|
|
- <el-input-number v-model="postForm.camInterval" :min="1" :max="30" label="秒数" size="mini" />
|
|
|
+ <span v-if="postForm.camOn"
|
|
|
+ > 学员开始答题后,每
|
|
|
+ <el-input-number
|
|
|
+ v-model="postForm.camInterval"
|
|
|
+ :min="1"
|
|
|
+ :max="30"
|
|
|
+ label="秒数"
|
|
|
+ size="mini"
|
|
|
+ />
|
|
|
分钟抓拍一张学员答题照片
|
|
|
</span>
|
|
|
</el-form-item>
|
|
|
-
|
|
|
</el-col>
|
|
|
|
|
|
<el-col v-if="postForm.camOn">
|
|
|
-
|
|
|
- <el-form-item label="考试过程定时人脸识别" label-width="200px">
|
|
|
+ <el-form-item
|
|
|
+ label="考试过程定时人脸识别"
|
|
|
+ label-width="200px"
|
|
|
+ >
|
|
|
<el-switch
|
|
|
v-model="postForm.faceCheck"
|
|
|
active-color="#13ce66"
|
|
|
inactive-color="#ff4949"
|
|
|
/>
|
|
|
- 对抓拍图片进行人脸识别,如果连续识别失败超过 <el-input-number v-model="postForm.faceChance" :min="0" :max="postForm.totalTime/postForm.camInterval" label="次数" size="mini" /> 次就强制交卷
|
|
|
+ 对抓拍图片进行人脸识别,如果连续识别失败超过
|
|
|
+ <el-input-number
|
|
|
+ v-model="postForm.faceChance"
|
|
|
+ :min="0"
|
|
|
+ :max="postForm.totalTime / postForm.camInterval"
|
|
|
+ label="次数"
|
|
|
+ size="mini"
|
|
|
+ />
|
|
|
+ 次就强制交卷
|
|
|
</el-form-item>
|
|
|
-
|
|
|
</el-col>
|
|
|
|
|
|
<el-col>
|
|
|
<el-form-item label="切屏后强制交卷" label-width="200px">
|
|
|
-
|
|
|
<el-switch
|
|
|
v-model="postForm.leaveOn"
|
|
|
active-color="#13ce66"
|
|
@@ -282,14 +335,25 @@
|
|
|
/>
|
|
|
<span v-if="postForm.leaveOn">
|
|
|
学员切换页面超过
|
|
|
- <el-input-number v-model="postForm.leaveCount" :min="1" :max="999" label="秒数" size="mini" /> 次后将被强制交卷,切换到其他页面
|
|
|
- <el-input-number v-model="postForm.leaveCheck" :min="5" :max="999" label="秒数" size="mini" /> 秒后即判定为切屏
|
|
|
+ <el-input-number
|
|
|
+ v-model="postForm.leaveCount"
|
|
|
+ :min="1"
|
|
|
+ :max="999"
|
|
|
+ label="秒数"
|
|
|
+ size="mini"
|
|
|
+ /> 次后将被强制交卷,切换到其他页面
|
|
|
+ <el-input-number
|
|
|
+ v-model="postForm.leaveCheck"
|
|
|
+ :min="5"
|
|
|
+ :max="999"
|
|
|
+ label="秒数"
|
|
|
+ size="mini"
|
|
|
+ /> 秒后即判定为切屏
|
|
|
</span>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
|
|
|
<el-col>
|
|
|
-
|
|
|
<el-form-item label="无操作强制交卷" label-width="200px">
|
|
|
<el-switch
|
|
|
v-model="postForm.actionOn"
|
|
@@ -299,90 +363,92 @@
|
|
|
|
|
|
<span v-if="postForm.actionOn">
|
|
|
答题时超过
|
|
|
- <el-input-number v-model="postForm.actionInterval" :min="1" :max="999" label="秒数" size="mini" />
|
|
|
+ <el-input-number
|
|
|
+ v-model="postForm.actionInterval"
|
|
|
+ :min="1"
|
|
|
+ :max="999"
|
|
|
+ label="秒数"
|
|
|
+ size="mini"
|
|
|
+ />
|
|
|
秒没有新操作会强制交卷
|
|
|
</span>
|
|
|
-
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
-
|
|
|
</el-row>
|
|
|
-
|
|
|
</el-card>
|
|
|
-
|
|
|
</el-col>
|
|
|
|
|
|
<el-col :span="6">
|
|
|
<h3>试卷信息</h3>
|
|
|
<el-card style="font-size: 14px; line-height: 28px">
|
|
|
-
|
|
|
- <div>
|
|
|
- 试卷标题:<el-link :href="`/#/admin/tmpl/preview/${tmplData.id}`" type="primary" target="_blank">{{ tmplData.title }}</el-link>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- 试卷总分:{{ tmplData.totalScore }}
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- 试题数量: {{ tmplData.quCount }}
|
|
|
- </div>
|
|
|
<div>
|
|
|
- 出卷人员:{{ tmplData.createBy_dictText }}
|
|
|
+ 试卷标题:<el-link
|
|
|
+ :href="`/#/admin/tmpl/preview/${tmplData.id}`"
|
|
|
+ type="primary"
|
|
|
+ target="_blank"
|
|
|
+ >{{ tmplData.title }}</el-link
|
|
|
+ >
|
|
|
</div>
|
|
|
- <div>
|
|
|
- 创建时间:{{ tmplData.createTime }}
|
|
|
- </div>
|
|
|
-
|
|
|
+ <div>试卷总分:{{ tmplData.totalScore }}</div>
|
|
|
+ <div>试题数量: {{ tmplData.quCount }}</div>
|
|
|
+ <div>出卷人员:{{ tmplData.createBy_dictText }}</div>
|
|
|
+ <div>创建时间:{{ tmplData.createTime }}</div>
|
|
|
</el-card>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
|
|
|
- <el-button type="primary" style="margin-top: 20px" @click="nextStep">保存</el-button>
|
|
|
-
|
|
|
+ <el-button type="primary" style="margin-top: 20px" @click="nextStep"
|
|
|
+ >保存</el-button
|
|
|
+ >
|
|
|
</el-form>
|
|
|
-
|
|
|
</div>
|
|
|
-
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { fetchDetail, saveData } from '@/api/exam/exam'
|
|
|
-import DicListSelect from '@/components/DicListSelect'
|
|
|
-import ToolTip from '@/components/ToolTip'
|
|
|
-import TmplPreCreate from '@/views/admin/tmpl/components/components/TmplPreCreate'
|
|
|
-import Join1Form from '@/views/admin/tmpl/components/Join1Form'
|
|
|
-import TmplList from '@/views/admin/tmpl'
|
|
|
-import { apiFindSimple } from '@/api/tmpl/tmpl'
|
|
|
-import UserRefs from '@/components/UserRefs'
|
|
|
-import DepartRefs from '@/components/DepartRefs'
|
|
|
+import { fetchDetail, saveData } from "@/api/exam/exam";
|
|
|
+import { getTableData, getTreeEnable } from "@/api/exam/form";
|
|
|
+import DicListSelect from "@/components/DicListSelect";
|
|
|
+import ToolTip from "@/components/ToolTip";
|
|
|
+import TmplPreCreate from "@/views/admin/tmpl/components/components/TmplPreCreate";
|
|
|
+import Join1Form from "@/views/admin/tmpl/components/Join1Form";
|
|
|
+import TmplList from "@/views/admin/tmpl";
|
|
|
+import { apiFindSimple } from "@/api/tmpl/tmpl";
|
|
|
+import UserRefs from "@/components/UserRefs";
|
|
|
+import DepartRefs from "@/components/DepartRefs";
|
|
|
|
|
|
export default {
|
|
|
- name: 'ExamDetail',
|
|
|
- components: { DepartRefs, UserRefs, TmplList, Join1Form, TmplPreCreate, ToolTip, DicListSelect },
|
|
|
+ name: "ExamDetail",
|
|
|
+ components: {
|
|
|
+ DepartRefs,
|
|
|
+ UserRefs,
|
|
|
+ TmplList,
|
|
|
+ Join1Form,
|
|
|
+ TmplPreCreate,
|
|
|
+ ToolTip,
|
|
|
+ DicListSelect,
|
|
|
+ },
|
|
|
data() {
|
|
|
return {
|
|
|
-
|
|
|
step: 1,
|
|
|
checkType: 1,
|
|
|
|
|
|
- tmplData: {
|
|
|
-
|
|
|
- },
|
|
|
+ tmplData: {},
|
|
|
|
|
|
createForm: {
|
|
|
data: {
|
|
|
- totalScore: 0
|
|
|
+ totalScore: 0,
|
|
|
},
|
|
|
title: null,
|
|
|
joinType: 0,
|
|
|
catId: null,
|
|
|
- timeType: 0
|
|
|
+ timeType: 0,
|
|
|
},
|
|
|
|
|
|
dateValues: [],
|
|
|
|
|
|
postForm: {
|
|
|
- title: '',
|
|
|
+ title: "",
|
|
|
// 试卷ID
|
|
|
tmplId: null,
|
|
|
// 考试部门列表
|
|
@@ -405,161 +471,167 @@ export default {
|
|
|
// 是否截屏
|
|
|
isCapture: true,
|
|
|
resultType: 2,
|
|
|
- thanks: '感谢您的作答!',
|
|
|
+ thanks: "感谢您的作答!",
|
|
|
personList: [],
|
|
|
faceOn: false,
|
|
|
faceCheck: false,
|
|
|
faceInterval: 0,
|
|
|
- faceChance: 0
|
|
|
-
|
|
|
+ faceChance: 0,
|
|
|
+ courseId: "",
|
|
|
},
|
|
|
rules: {
|
|
|
- title: [
|
|
|
- { required: true, message: '考试名称不能为空!' }
|
|
|
- ],
|
|
|
-
|
|
|
- open: [
|
|
|
- { required: true, message: '考试权限不能为空!' }
|
|
|
- ],
|
|
|
-
|
|
|
- qualifyScore: [
|
|
|
- { required: true, message: '及格分不能为空!' }
|
|
|
- ],
|
|
|
-
|
|
|
- totalTime: [
|
|
|
- { required: true, message: '考试时间不能为空!' }
|
|
|
- ],
|
|
|
-
|
|
|
- password: [
|
|
|
- { required: true, message: '考试口令不能为空!' }
|
|
|
- ],
|
|
|
- chance: [
|
|
|
- { required: true, message: '考试次数不能为空,0为不限制!' }
|
|
|
- ],
|
|
|
- examType: [
|
|
|
- { required: true, message: '考试类型必须选择' }
|
|
|
- ]
|
|
|
- }
|
|
|
- }
|
|
|
+ title: [{ required: true, message: "考试名称不能为空!" }],
|
|
|
+
|
|
|
+ open: [{ required: true, message: "考试权限不能为空!" }],
|
|
|
+
|
|
|
+ qualifyScore: [{ required: true, message: "及格分不能为空!" }],
|
|
|
+
|
|
|
+ totalTime: [{ required: true, message: "考试时间不能为空!" }],
|
|
|
+
|
|
|
+ password: [{ required: true, message: "考试口令不能为空!" }],
|
|
|
+ chance: [{ required: true, message: "考试次数不能为空,0为不限制!" }],
|
|
|
+ examType: [{ required: true, message: "考试类型必须选择" }],
|
|
|
+ },
|
|
|
+ courseArray: [],
|
|
|
+ treeEnableArray: [],
|
|
|
+ };
|
|
|
},
|
|
|
|
|
|
watch: {
|
|
|
dateValues: {
|
|
|
handler() {
|
|
|
- this.postForm.startTime = this.dateValues[0]
|
|
|
- this.postForm.endTime = this.dateValues[1]
|
|
|
- }
|
|
|
- }
|
|
|
+ this.postForm.startTime = this.dateValues[0];
|
|
|
+ this.postForm.endTime = this.dateValues[1];
|
|
|
+ },
|
|
|
+ },
|
|
|
},
|
|
|
created() {
|
|
|
// 选定创建试卷
|
|
|
- const tmplId = this.$route.params.tmplId
|
|
|
- if (tmplId !== undefined && tmplId !== '0') {
|
|
|
- this.handleBack(tmplId)
|
|
|
- return
|
|
|
+ const tmplId = this.$route.params.tmplId;
|
|
|
+ if (tmplId !== undefined && tmplId !== "0") {
|
|
|
+ this.handleBack(tmplId);
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
- const id = this.$route.params.id
|
|
|
+ const id = this.$route.params.id;
|
|
|
if (id !== undefined) {
|
|
|
- this.fetchData(id)
|
|
|
+ this.fetchData(id);
|
|
|
} else {
|
|
|
- this.postForm.openType = 1
|
|
|
- this.postForm.joinType = 1
|
|
|
+ this.postForm.openType = 1;
|
|
|
+ this.postForm.joinType = 1;
|
|
|
}
|
|
|
+
|
|
|
+ getTableData().then(({ data }) => {
|
|
|
+ this.courseArray = data.records;
|
|
|
+ });
|
|
|
},
|
|
|
methods: {
|
|
|
-
|
|
|
+ getTreeEnableArray(courseId) {
|
|
|
+ getTreeEnable({ courseId }).then((res) => {
|
|
|
+ let treeEnableArray = [];
|
|
|
+ res.data.forEach((ele) => {
|
|
|
+ treeEnableArray.push(ele.deptCode);
|
|
|
+ });
|
|
|
+ this.treeEnableArray = treeEnableArray;
|
|
|
+ });
|
|
|
+ },
|
|
|
nextStep() {
|
|
|
this.$refs.postForm.validate((valid) => {
|
|
|
if (!valid) {
|
|
|
- return
|
|
|
+ return;
|
|
|
}
|
|
|
- this.$confirm('确实要提交保存吗?', '提示', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- type: 'warning'
|
|
|
+ this.$confirm("确实要提交保存吗?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
}).then(() => {
|
|
|
- this.submitForm()
|
|
|
- })
|
|
|
- })
|
|
|
+ this.submitForm();
|
|
|
+ });
|
|
|
+ });
|
|
|
},
|
|
|
|
|
|
fetchData(id) {
|
|
|
- fetchDetail(id).then(response => {
|
|
|
- this.postForm = response.data
|
|
|
- this.dateValues[0] = this.postForm.startTime
|
|
|
- this.dateValues[1] = this.postForm.endTime
|
|
|
- this.handleBack(this.postForm.tmplId)
|
|
|
- })
|
|
|
+ fetchDetail(id).then((response) => {
|
|
|
+ this.postForm = response.data;
|
|
|
+ this.dateValues[0] = this.postForm.startTime;
|
|
|
+ this.dateValues[1] = this.postForm.endTime;
|
|
|
+ this.handleBack(this.postForm.tmplId);
|
|
|
+ if(response.data.courseId){
|
|
|
+ this.getTreeEnableArray(response.data.courseId);
|
|
|
+ }
|
|
|
+ });
|
|
|
},
|
|
|
|
|
|
submitForm() {
|
|
|
saveData(this.postForm).then(() => {
|
|
|
this.$notify({
|
|
|
- title: '成功',
|
|
|
- message: '考试保存成功!',
|
|
|
- type: 'success',
|
|
|
- duration: 2000
|
|
|
- })
|
|
|
-
|
|
|
- this.$router.push({ name: 'ListExam' })
|
|
|
- })
|
|
|
+ title: "成功",
|
|
|
+ message: "考试保存成功!",
|
|
|
+ type: "success",
|
|
|
+ duration: 2000,
|
|
|
+ });
|
|
|
+
|
|
|
+ this.$router.push({ name: "ListExam" });
|
|
|
+ });
|
|
|
},
|
|
|
|
|
|
handleCreate(data) {
|
|
|
- this.createForm = data
|
|
|
- this.step = 2
|
|
|
+ this.createForm = data;
|
|
|
+ this.step = 2;
|
|
|
},
|
|
|
|
|
|
handleBack(id) {
|
|
|
- this.step = 3
|
|
|
- this.postForm.tmplId = id
|
|
|
- apiFindSimple(id).then(res => {
|
|
|
- this.tmplData = res.data
|
|
|
+ this.step = 3;
|
|
|
+ this.postForm.tmplId = id;
|
|
|
+ apiFindSimple(id).then((res) => {
|
|
|
+ this.tmplData = res.data;
|
|
|
if (!this.postForm.title) {
|
|
|
- this.postForm.title = res.data.title + ' - 考试'
|
|
|
+ this.postForm.title = res.data.title + " - 考试";
|
|
|
}
|
|
|
|
|
|
if (!this.postForm.qualifyScore) {
|
|
|
- this.postForm.qualifyScore = res.data.totalScore * 0.6
|
|
|
+ this.postForm.qualifyScore = res.data.totalScore * 0.6;
|
|
|
}
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-}
|
|
|
+ });
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
|
+.score {
|
|
|
+ float: right;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #ff0000;
|
|
|
+}
|
|
|
|
|
|
- .score{
|
|
|
- float: right; font-weight: bold; color: #ff0000
|
|
|
- }
|
|
|
-
|
|
|
- small{
|
|
|
- color: #666;
|
|
|
- line-height: 30px;
|
|
|
- margin-left: 10px;
|
|
|
- }
|
|
|
-
|
|
|
- ::v-deep
|
|
|
- .left-box{
|
|
|
- height: calc(100vh - 170px);
|
|
|
- position: fixed;
|
|
|
- overflow: auto;
|
|
|
- clear: both;
|
|
|
- }
|
|
|
-
|
|
|
- ::v-deep
|
|
|
- .left-box-normal{
|
|
|
- top: 170px;
|
|
|
- }
|
|
|
-
|
|
|
- ::v-deep
|
|
|
- .left-box-scrolled{
|
|
|
- top: 20px;
|
|
|
- height: calc(100vh - 20px);
|
|
|
- }
|
|
|
+small {
|
|
|
+ color: #666;
|
|
|
+ line-height: 30px;
|
|
|
+ margin-left: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.flex {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-start;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
|
|
|
+::v-deep .left-box {
|
|
|
+ height: calc(100vh - 170px);
|
|
|
+ position: fixed;
|
|
|
+ overflow: auto;
|
|
|
+ clear: both;
|
|
|
+}
|
|
|
+
|
|
|
+::v-deep .left-box-normal {
|
|
|
+ top: 170px;
|
|
|
+}
|
|
|
+
|
|
|
+::v-deep .left-box-scrolled {
|
|
|
+ top: 20px;
|
|
|
+ height: calc(100vh - 20px);
|
|
|
+}
|
|
|
</style>
|
|
|
|