<template>
|
<el-row class="morpheus-box">
|
<el-col :span="24">
|
<el-card>
|
<div class="exam-card-body">
|
<div class="subject-box">
|
<el-row :gutter="30">
|
<el-col :span="5">
|
<div class="tool-bar">
|
<div class="time-remain">
|
<div class="time-remain_title">剩余时间 :</div>
|
|
<div class="time">
|
<count-down v-on:start_callback="countDownS_cb(1)"
|
v-on:end_callback="countDownE_cb(1)" :current-time="currentTime"
|
:start-time="startTime" :end-time="endTime" :tip-text="'距离考试开始'"
|
:tip-text-end="'距离考试结束'" :end-text="'考试结束'" :hourTxt="':'" :minutesTxt="':'"
|
:secondsTxt="''">
|
</count-down>
|
</div>
|
</div>
|
<div class="current-progress">
|
当前进度: {{ subjectIndex }}/{{ subjectIds.length }}
|
</div>
|
<div class="answer-card">
|
<el-button type="text" icon="el-icon-date el-dates" class="el-dates"
|
@click="answerCard">答题卡</el-button>
|
</div>
|
<!-- <el-button
|
type="success"
|
icon="el-icon-date"
|
@click="submitExam"
|
v-bind:disabled="disableSubmit"
|
>提交</el-button
|
> -->
|
</div>
|
</el-col>
|
<el-col :span="18">
|
<div class="subject-box-card">
|
<div class="subject-exam-title">
|
{{ exam.examinationName }}(共{{
|
subjectIds.length
|
}}题,合计100分)
|
</div>
|
<div class="subject_main">
|
<!-- 题目内容 -->
|
<choices ref="choices" v-show="this.query.type === 0" />
|
|
<multiple-choices ref="multipleChoices" v-show="this.query.type === 1" />
|
|
<judgement ref="judgement" v-show="this.query.type === 2" />
|
|
<practical-operation ref="practicalOperation" v-show="this.query.type === 3" />
|
|
<short-answer ref="shortAnswer" v-show="this.query.type === 4" />
|
|
<div class="subject-buttons" v-if="query.subjectId !== ''">
|
<el-button type="primary" @click="last" :loading="loadingLast">上一题</el-button>
|
<el-button type="primary" @click="next" class="buttons"
|
:loading="loadingNext">下一题</el-button>
|
<!-- <el-button
|
:disabled="timesIT"
|
type="success"
|
@click="submitExam"
|
:title="
|
timesIT
|
? '根据国家考试要求,30分钟内不可提交! 剩(' +
|
timesITValue +
|
')分钟'
|
: '点击完成考试'
|
"
|
>完成考试 {{ time }}</el-button
|
> -->
|
<el-button type="success" @click="submitExam" :disabled="completeTest">完成考试 {{
|
time }}
|
</el-button>
|
</div>
|
</div>
|
</div>
|
</el-col>
|
</el-row>
|
<el-dialog title="答题卡" :visible.sync="dialogVisible" width="50%" top="10vh" :modal="false" center
|
class="datika">
|
<div class="answer-card-title">
|
{{ exam.examinationName }}(共{{
|
subjectIds.length
|
}}题,合计100分)
|
</div>
|
<div class="answer-card-split"></div>
|
<el-row class="answer-card-content">
|
<el-button circle v-for="(value, index) in subjectIds" :style="completeColor(value)"
|
:key="index" @click="toSubject(value.everyID, value.type, index)">
|
<span style="color: #fff;">{{ index + 1 }}</span>
|
</el-button>
|
|
<!-- @click="toSubject(value.everyID, value.type, index)" -->
|
|
<!-- <el-button circle v-for="(value, index) in subjectIds"
|
:style="{ background: value.color, color: value.fontColor }" :key="index"> {{ index
|
+ 1
|
}} </el-button> -->
|
</el-row>
|
</el-dialog>
|
</div>
|
</div>
|
</el-card>
|
</el-col>
|
</el-row>
|
</template>
|
<script>
|
import { mapState } from "vuex"
|
import CountDown from "vue2-countdown"
|
import { saveAndNext } from "@/api/exam/answer"
|
import { getSubjectIds, getSubjectRefresh } from "@/api/exam/exam"
|
import { getCurrentTime } from "@/api/exam/examRecord"
|
import { getSubjectResultInfo } from "@/api/exam/subject"
|
|
import moment from "moment"
|
import {
|
messageSuccess,
|
messageFail,
|
messageWarn,
|
isNotEmpty
|
} from "@/util/util"
|
import Tinymce from "@/components/Tinymce"
|
import Choices from "@/components/Subjects/Choices"
|
|
import MultipleChoices from "@/components/Subjects/MultipleChoices"
|
import PracticalOperation from "@/components/Subjects/PracticalOperation"
|
|
// import ShortAnswer from '@/components/Subjects/ShortAnswer'
|
import Judgement from "@/components/Subjects/Judgement"
|
|
import { nextSubjectType } from "@/const/constant"
|
|
export default {
|
components: {
|
CountDown,
|
Tinymce,
|
Choices,
|
MultipleChoices,
|
PracticalOperation,
|
Judgement
|
// ShortAnswer,
|
},
|
data () {
|
return {
|
loadingLast: false,
|
loadingNext: false,
|
//1:绿色 2:红色 3:无色
|
result: 3,
|
currentTime: 0,
|
startTime: 0,
|
endTime: 0,
|
disableSubmit: true,
|
subjectIndex: 1,
|
query: {
|
examinationId: undefined,
|
examRecordId: undefined,
|
subjectId: undefined,
|
userId: undefined,
|
type: 0
|
},
|
subject: {},
|
answer: "",
|
dialogVisible: false,
|
subjectIds: [],
|
subjectStartTime: undefined,
|
exam: {
|
id: "590969316204220416",
|
creator: "admin",
|
createDate: 1560939664000,
|
modifier: "preview",
|
modifyDate: 1609835214000,
|
|
delFlag: 0,
|
|
examinationName: "",
|
|
startTime: null,
|
endTime: null,
|
|
totalScore: 50,
|
|
status: 0,
|
|
remark: "全国计算机统考练习题10道",
|
|
newRecord: false
|
},
|
firstFlag: true,
|
times: ["30", "00"],
|
timeOut: null,
|
timeOTiv: null,
|
timesIT: true,
|
timesITValue: 0,
|
first: true
|
}
|
},
|
computed: {
|
...mapState({
|
userInfo: state => state.user.userInfo,
|
scoreId: state =>
|
state.exam.scoreId
|
? state.exam.scoreId
|
: window.localStorage.getItem("scoreId")
|
}),
|
|
completeTest () {
|
return this.subjectIds.find(item => item.answer == "")
|
},
|
|
completeColor () {
|
return (item) => {
|
if (item.answer == '') {
|
return {
|
background: "#666",
|
}
|
} else {
|
return {
|
background: "#097FFE",
|
}
|
}
|
}
|
}
|
// time() {
|
// var d = [+this.times[0], +this.times[1]];
|
// }
|
},
|
created () {
|
var useInfo = this.$store.state.exam.examUserData
|
|
var scoreType = this.$store.state.exam.scoreType
|
|
if (useInfo.isExam == 3) {
|
window.name = "first"
|
this.first = false
|
} else {
|
if (window.name == "") {
|
// console.log("首次被加载");
|
window.name = "first" // 在首次进入页面时我们可以给window.name设置一个固定值
|
this.first = true
|
} else if (window.name == "first") {
|
// console.log("页面被刷新");
|
this.first = false
|
}
|
}
|
|
if (scoreType == 1) {
|
this.first = false
|
}
|
|
const examInfo = this.$route.params.id
|
|
if (isNotEmpty(examInfo)) {
|
// 试卷ID
|
this.query.examinationId = this.$route.params.id
|
|
// 考场ID
|
this.query.examRecordId = this.userInfo.user_id
|
|
this.query.userId = this.userInfo.user_id
|
|
this.exam.id = this.userInfo.user_id + "" + this.$route.params.id
|
|
this.exam.examinationName = this.$route.query.examName
|
// this.exam.startTime = this.$route.query.startTime
|
// this.exam.endTime = this.$route.query.endTime
|
// this.exam.totalScore = this.$route.query.totalScore
|
// this.exam.status = this.$route.query.examStatus
|
// this.exam.remark = this.$route.query.remark
|
this.validateExamTime()
|
}
|
},
|
methods: {
|
countDownS_cb: function () {
|
// console.log(12456);
|
messageSuccess(this, "考试开始")
|
this.startTime = this.getCurrentTimes()
|
},
|
countDownE_cb: function () {
|
messageWarn(this, "考试结束")
|
// this.disableSubmit = true;
|
this.submitExam("over")
|
},
|
bottonControl (time) {
|
//倒计时循环
|
let times = time * 60
|
var setTime = function (time) {
|
let a, b, d
|
a = parseInt(time / 60)
|
b = time - a * 60
|
d = a + ":" + b
|
return d
|
}
|
if (this.timeOTiv == null) {
|
this.timeOTiv = setInterval(res => {
|
times--
|
this.timesITValue = setTime(times)
|
}, 1000)
|
} else {
|
clearTimeout(this.timeOTiv)
|
this.timeOTiv = null
|
this.timeOTiv = setInterval(res => {
|
times--
|
this.timesITValue = setTime(times)
|
}, 1000)
|
}
|
//倒计时定时
|
if (this.timeOut == null) {
|
this.timeOut = setTimeout(res => {
|
this.timesIT = false
|
this.timesITValue--
|
}, time * 3600)
|
} else {
|
clearTimeout(this.timeOut)
|
this.timeOut = null
|
this.timeOut = setTimeout(res => {
|
this.timesIT = false
|
}, time * 3600)
|
}
|
},
|
validateExamTime () {
|
getCurrentTime()
|
.then(response => {
|
const currentTime = moment(response.data.data)
|
if (currentTime.isAfter(this.exam.endTime)) {
|
messageWarn(this, "考试已结束")
|
} else if (currentTime.isBefore(this.exam.startTime)) {
|
messageWarn(this, "考试未开始")
|
} else {
|
//判断是否是答过题
|
this.startExam(currentTime)
|
//判断是否是答过题
|
if (this.first) {
|
const current = currentTime.valueOf()
|
// console.log(current, "首次");
|
this.currentTime = current
|
this.startTime = current
|
this.subjectStartTime = current
|
// // this.endTime = moment(this.exam.endTime).valueOf()
|
this.endTime = current + 90 * 60 * 1000
|
this.bottonControl(90)
|
}
|
// this.disableSubmit = false;
|
}
|
})
|
.catch(() => {
|
messageFail(this, "开始考试失败!15")
|
})
|
},
|
startExam (currentTime) {
|
var scoreId = window.localStorage.getItem("scoreId")
|
// console.log(scoreId, this.first, "scoreIdscoreIdscoreIdscoreId")
|
this.subjectIds = []
|
// if (this.first) {
|
// const current = currentTime.valueOf();
|
// console.log(current, "首次");
|
// this.currentTime = current;
|
// this.startTime = current;
|
// this.subjectStartTime = current;
|
// // // this.endTime = moment(this.exam.endTime).valueOf()
|
// this.endTime = current + 60 * 60 * 1000;
|
// }
|
if (!this.first) {
|
getSubjectRefresh(scoreId).then(obj => {
|
const objs = obj.data.data
|
// console.log(objs, "objobjobjobjobjobj");
|
const subjectData = objs.examSubjectChoicesVOSList
|
if (subjectData.length > 0) {
|
//重载题目
|
for (let i = 0; i < subjectData.length; i++) {
|
this.subjectIds.push({
|
subjectId: 1,
|
everyID: subjectData[i].id,
|
type: subjectData[i].choicesType,
|
index: i + 1,
|
answered: false,
|
answer: "",
|
score: subjectData[i].score,
|
color: "#fff",
|
fontColor: "#000",
|
title: subjectData[i].subjectName
|
})
|
}
|
|
//重载到当前题目
|
let nowObj = objs.examSubjectChoicesVO
|
nowObj.answer = "" //清除答案
|
// console.log(nowObj, "nowObj");
|
for (var i = 0; i < this.subjectIds.length; i++) {
|
if (nowObj.id == this.subjectIds[i].everyID) {
|
//定位显示题目
|
this.subjectIndex = i + 1
|
//题目类型
|
this.query.type = parseInt(this.subjectIds[i].type)
|
// 题目id
|
this.query.subjectId = this.subjectIds[i].everyID
|
this.setSubjectInfo(nowObj)
|
}
|
}
|
// 添加到答题卡
|
const anSwer = objs.examAnswerRecordList
|
for (let i = 0; i < this.subjectIds.length; i++) {
|
for (var n = 0; n < anSwer.length; n++) {
|
// console.log(anSwer[i].subjectChoicesId);
|
if (anSwer[n].subjectChoicesId == this.subjectIds[i].everyID) {
|
if (anSwer[n].answerResult == 1) {
|
this.subjectIds[i].color = "#67C23A"
|
this.subjectIds[i].fontColor = "#fff"
|
}
|
if (anSwer[n].answerResult == 2) {
|
this.subjectIds[i].color = "red"
|
this.subjectIds[i].fontColor = "#fff"
|
}
|
var test = /,/g
|
if (test.test(anSwer[n].answerOption)) {
|
let ans = anSwer[n].answerOption.split(","),
|
anw = []
|
for (var k = 0; k < ans.length; k++) {
|
anw.push({
|
key: k + 1,
|
value: ans[k]
|
})
|
}
|
this.subjectIds[i].answer = anw
|
} else {
|
this.subjectIds[i].answer = anSwer[n].answerOption
|
}
|
// console.log(anSwer[n].answerOption, 1);
|
// console.log(this.subjectIds[i].answer, 2);
|
}
|
}
|
}
|
//适应时间
|
const datyTime = objs.examScore.examTime
|
|
// console.log(objs, "datyTimedatyTimedatyTime");
|
var duibiTime = function (newTime, oldTime) {
|
var newtimes = new Date(newTime.replace(/-/g, '/')).getTime()
|
var oldtimes = new Date(oldTime.replace(/-/g, '/')).getTime()
|
|
var dif = Math.ceil((newtimes - oldtimes) / (1000 * 60))
|
return 90 - dif
|
// var newYear = newTime.split(" ")[0],
|
// newDat = newTime.split(" ")[1],
|
// oldYear = oldTime.split(" ")[0],
|
// oldDat = oldTime.split(" ")[1];
|
// if (newYear !== oldYear) {
|
// return false;
|
// } else {
|
// let newD = {
|
// s: +newDat.split(":")[0],
|
// f: +newDat.split(":")[1],
|
// m: +newDat.split(":")[2]
|
// };
|
// let oldD = {
|
// s: +oldDat.split(":")[0],
|
// f: +oldDat.split(":")[1],
|
// m: +oldDat.split(":")[2]
|
// };
|
// if (newD.s - oldD.s > 1) {
|
// return false;
|
// } else if (newD.s - oldD.s == 1) {
|
// if (newD.f < oldD.f) {
|
// return oldD.f - newD.f;
|
// } else {
|
// return false;
|
// }
|
// } else if (newD.s == oldD.s) {
|
// return 90 - (newD.f - oldD.f);
|
// }
|
// return [newD, oldD];
|
// }
|
// return false;
|
}
|
var listTime = duibiTime(currentTime._i, datyTime)
|
const current = currentTime.valueOf()
|
this.currentTime = current
|
this.startTime = current
|
this.subjectStartTime = current
|
// // this.endTime = moment(this.exam.endTime).valueOf()
|
if (listTime) {
|
this.endTime = current + listTime * 60 * 1000
|
this.bottonControl(listTime - 30)
|
} else {
|
this.endTime = current + 0 * 60 * 1000
|
this.bottonControl(0)
|
}
|
// console.log(datyTime, currentTime, "刷新");
|
}
|
})
|
// this.first = true;
|
return
|
}
|
// console.log(this.subjectIds);
|
// 获取题目ID列表
|
// console.log("subjectResponsesubjectResponsesubjectResponse");
|
getSubjectIds(scoreId)
|
.then(subjectResponse => {
|
const subjectData = subjectResponse.data.data
|
// console.log(
|
// subjectResponse,
|
// "subjectResponsesubjectResponsesubjectResponse"
|
// );
|
// console.log(subjectData, "subjectDatasubjectDatasubjectData");
|
if (subjectData.length > 0) {
|
for (let i = 0; i < subjectData.length; i++) {
|
this.subjectIds.push({
|
subjectId: 1,
|
everyID: subjectData[i].id,
|
type: subjectData[i].choicesType,
|
index: i + 1,
|
answered: false,
|
answer: "",
|
score: subjectData[i].score,
|
color: "#fff",
|
fontColor: "#000"
|
})
|
}
|
|
this.query.type = parseInt(this.subjectIds[0].type)
|
|
// 准考证号
|
this.query.subjectId = this.subjectIds[0].everyID
|
|
this.updateSubjectIndex()
|
// 获取当前题目信息
|
getSubjectResultInfo({
|
id: this.subjectIds[0].everyID
|
})
|
.then(response => {
|
if (isNotEmpty(response.data.data)) {
|
response.data.data.answer = ""
|
this.setSubjectInfo(response.data.data)
|
}
|
})
|
.catch(() => {
|
messageFail(this, "获取题目失败!")
|
})
|
}
|
})
|
.catch(() => {
|
messageFail(this, "开始考试失败!4646549888*8*")
|
})
|
},
|
|
last () {
|
for (let i = 0; i < this.subjectIds.length; i++) {
|
if (this.subjectIds[i].everyID == this.query.subjectId) {
|
this.subjectIds[i].answer = this.getAnswer()
|
|
this.markAnswered(this.subjectIds[i].answer, i)
|
|
if (i === 0) {
|
messageSuccess(this, "已经是第一题了")
|
break
|
}
|
|
let { everyID, type, index } = this.subjectIds[--i]
|
|
this.subjectIndex = index
|
|
this.saveCurrentSubjectAndGetNextSubjectLast(
|
nextSubjectType.last,
|
everyID,
|
type
|
)
|
|
break
|
}
|
}
|
},
|
|
next () {
|
for (let i = 0; i < this.subjectIds.length; i++) {
|
if (this.subjectIds[i].everyID == this.query.subjectId) {
|
// if (this.getAnswer() == "") {
|
// this.$message({
|
// message: "请选择答案",
|
// type: "warning",
|
// });
|
// return;
|
// }
|
// console.log(this.getAnswer(), this.query.type);
|
if (this.query.type == 3) {
|
let goShiCao = true
|
const answer = this.getAnswer()
|
for (let k in answer) {
|
if (answer[k].value == "") {
|
goShiCao = false
|
}
|
}
|
if (!goShiCao) {
|
this.$message({
|
message: "实操题目请选择完整顺序!",
|
type: "warning"
|
})
|
return
|
}
|
}
|
|
this.subjectIds[i].answer = this.getAnswer()
|
|
this.markAnswered(this.subjectIds[i].answer, i)
|
|
if (i === this.subjectIds.length - 1) {
|
messageSuccess(this, "已经是最后一题了")
|
break
|
}
|
|
let { everyID, index } = this.subjectIds[++i]
|
|
this.subjectIndex = index
|
|
this.saveCurrentSubjectAndGetNextSubject(
|
nextSubjectType.next,
|
everyID,
|
this.subjectIds[i - 1]
|
)
|
|
break
|
}
|
}
|
},
|
// 保存当前题目,同时根据序号加载下一题
|
saveCurrentSubjectAndGetNextSubject (nextType, nextSubjectId, subjectIds) {
|
// console.log(nextType, nextSubjectId, subjectIds, '2222222')
|
this.startLoading(nextType)
|
|
var answerData = this.getAnswer()
|
|
var str = ""
|
|
if (Array.isArray(answerData)) {
|
answerData.forEach(item => {
|
str += item.value + ","
|
})
|
|
str = str.substr(0, str.length - 1)
|
|
answerData = str
|
}
|
|
var data = {
|
id: nextSubjectId,
|
preSubJectId: this.query.subjectId,
|
preResult: answerData,
|
scoreId: this.scoreId
|
}
|
getSubjectResultInfo(data)
|
.then(response => {
|
if (response.data.data !== null) {
|
// 保存成功后更新答题卡状态
|
const subject = response.data.data
|
// console.log(subject.answer, 123456);
|
//结果
|
this.result = response.data.data.result
|
|
// console.log(response.data.data.result, subjectIds, '----1----1----')
|
|
const { id, choicesType } = subject
|
|
this.query.subjectId = id
|
|
this.query.type = choicesType
|
|
for (let i = 0; i < this.subjectIds.length; i++) {
|
if (this.subjectIds[i].everyID == nextSubjectId) {
|
subject.answer = this.subjectIds[i].answer
|
|
break
|
}
|
}
|
|
this.setSubjectInfo(subject)
|
// console.log(subject);
|
this.$store.commit("setWindowSizeHeightAdd")
|
|
// store.dispatch('SetSubjectInfo', subject).then(() => { })
|
}
|
// 更新时间
|
getCurrentTime().then(response => {
|
this.subjectStartTime = moment(response.data.data)
|
})
|
this.endLoading(nextType)
|
})
|
.catch(error => {
|
console.log(error)
|
this.$store.commit("setWindowSizeHeightAdd")
|
messageFail(this, "获取题目失败!")
|
this.endLoading(nextType)
|
})
|
},
|
// 保存当前题目,同时根据序号加载上一题
|
saveCurrentSubjectAndGetNextSubjectLast (nextType, nextSubjectId) {
|
this.startLoading(nextType)
|
|
var data = {
|
id: nextSubjectId
|
}
|
getSubjectResultInfo(data)
|
.then(response => {
|
if (response.data.data !== null) {
|
// 保存成功后更新答题卡状态
|
const subject = response.data.data
|
|
//结果
|
this.result = response.data.data.result
|
|
// if(this.result==1){
|
// subjectIds.color = "#67C23A"
|
// }
|
// if(this.result==2){
|
// subjectIds.color = "red"
|
// }
|
|
const { id, choicesType } = subject
|
|
this.query.subjectId = id
|
|
this.query.type = choicesType
|
|
for (let i = 0; i < this.subjectIds.length; i++) {
|
if (this.subjectIds[i].everyID == nextSubjectId) {
|
subject.answer = this.subjectIds[i].answer
|
|
break
|
}
|
}
|
|
this.setSubjectInfo(subject)
|
|
// store.dispatch('SetSubjectInfo', subject).then(() => { })
|
}
|
// 更新时间
|
getCurrentTime().then(response => {
|
this.subjectStartTime = moment(response.data.data)
|
})
|
this.endLoading(nextType)
|
})
|
.catch(error => {
|
console.log(error)
|
messageFail(this, "获取题目失败!")
|
this.endLoading(nextType)
|
})
|
},
|
markAnswered (answer, index) {
|
if (answer && answer !== null) {
|
this.subjectIds[index].answered = true
|
}
|
},
|
// 答题卡
|
answerCard () {
|
this.dialogVisible = true
|
},
|
// 跳转题目
|
toSubject (everyID, type, index) {
|
var ind = this.subjectIndex
|
|
if (this.firstFlag == false) {
|
ind = this.subjectIndex
|
} else {
|
ind = this.subjectIndex - 1
|
}
|
|
this.subjectIds[ind].answer = this.getAnswer()
|
|
this.markAnswered(this.subjectIds[ind].answer, ind)
|
|
this.subjectIndex = index + 1
|
this.firstFlag = true
|
// 保存当前题目,同时加载下一题
|
// console.log(nextSubjectType.next, 111);
|
// console.log(everyID, 222);
|
// console.log(type, 333);
|
|
this.saveCurrentSubjectAndGetNextSubject(
|
nextSubjectType.next,
|
everyID,
|
this.subjectIds[ind]
|
)
|
|
this.dialogVisible = false
|
},
|
// 提交
|
submitExam (val) {
|
// console.log(val);
|
var ind = this.subjectIndex
|
|
if (this.firstFlag == false) {
|
ind = this.subjectIndex
|
} else {
|
ind = this.subjectIndex - 1
|
}
|
|
this.subjectIds[ind].answer = this.getAnswer()
|
|
this.markAnswered(this.subjectIds[ind].answer, ind)
|
|
if (val == "over") {
|
//时间到了情况 自动提交
|
this.disableSubmit = true
|
this.doSubmitExam()
|
return
|
}
|
|
this.$confirm("确定要提交吗?", "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning"
|
})
|
.then(() => {
|
this.disableSubmit = true
|
this.doSubmitExam()
|
})
|
.catch(() => { })
|
},
|
doSubmitExam () {
|
var obj = {
|
id: this.$route.query.examScoreId,
|
examName: this.$route.query.examName,
|
candidateNo: this.$route.query.candidateNo,
|
securityName: this.userInfo.user_name,
|
userId: this.userInfo.user_id,
|
allScore: this.$route.query.totalScore,
|
company: this.userInfo.dept_id,
|
examTime: this.startTime,
|
papersId: this.$route.query.id,
|
examEndTime: this.getCurrentTimes(),
|
examResultVOS: null
|
}
|
var arr = []
|
// console.log(this.subjectIds);
|
// debugger;
|
// console.log(this.subjectIds.length, 111);
|
for (var i = 0; i < this.subjectIds.length; i++) {
|
let item = this.subjectIds[i]
|
// console.log(item.answer, i);
|
if (item.type == 3 || item.type == 1) {
|
var str = ""
|
if (item.answer.length > 0) {
|
//如果是数组
|
if (item.answer instanceof Array) {
|
item.answer.forEach(it => {
|
if (it.value != "") {
|
str += it.value + ","
|
}
|
})
|
|
var a = str.substr(0, str.length - 1)
|
|
arr.push({
|
subjectChoicesId: item.everyID,
|
value: a,
|
grade: item.score
|
})
|
} else {
|
arr.push({
|
subjectChoicesId: item.everyID,
|
value: item.answer,
|
grade: item.score
|
})
|
}
|
}
|
} else {
|
arr.push({
|
subjectChoicesId: item.everyID,
|
value: item.answer,
|
grade: item.score
|
})
|
}
|
}
|
// console.log(arr, 123);
|
// return;
|
obj.examResultVOS = arr
|
// console.log(this.subjectIds, 456);
|
// console.log(obj.examResultVOS, 789);
|
|
saveAndNext(obj)
|
.then(response => {
|
messageSuccess(this, "提交成功")
|
if (response) {
|
this.$store.commit("DEL_TAG", this.$store.state.tags.tag)
|
var obj = {
|
userId: this.userInfo.user_id,
|
examId: this.$route.query.id
|
}
|
this.$router.push({
|
path: `/singleperformance/index`,
|
query: obj
|
})
|
}
|
})
|
.catch(() => {
|
this.disableSubmit = false
|
messageFail(this, "提交题目失败")
|
})
|
},
|
// 选中选项
|
toggleOption (answer) {
|
this.answer = answer
|
},
|
// 根据题目类型返回填写的答案
|
getAnswer () {
|
const ref = this.getSubjectRef()
|
if (isNotEmpty(ref)) {
|
const answer = ref.getAnswer()
|
this.answer = answer
|
return answer
|
// {
|
// id: answerId,
|
// userId: this.userInfo.id,
|
// examinationId: this.query.examinationId,
|
// examRecordId: this.query.examRecordId,
|
// subjectId: this.query.subjectId,
|
// answer: answer,
|
// type: this.query.type,
|
// startTime: this.subjectStartTime
|
// }
|
}
|
return {}
|
},
|
// 获取题目索引
|
getSubjectIndex (targetId) {
|
for (let subject of this.subjectIds) {
|
let { subjectId, index } = subject
|
if (subjectId === targetId) {
|
return index
|
}
|
}
|
return 1
|
},
|
// 更新题目索引
|
updateSubjectIndex () {
|
this.subjectIndex = this.getSubjectIndex(this.query.subjectId)
|
},
|
startLoading (nextType) {
|
if (nextType === nextSubjectType.next) {
|
this.loadingNext = true
|
} else if (nextType === nextSubjectType.last) {
|
this.loadingLast = true
|
} else {
|
this.loadingNext = true
|
}
|
},
|
endLoading (nextType) {
|
if (nextType === nextSubjectType.next) {
|
this.loadingNext = false
|
} else if (nextType === nextSubjectType.last) {
|
this.loadingLast = false
|
} else {
|
this.loadingNext = false
|
}
|
},
|
//获取当前时间
|
getCurrentTimes () {
|
let date = new Date()
|
let dateYear = date.getFullYear() //获取年
|
let dateMonth =
|
date.getMonth() + 1 < 10
|
? "0" + (date.getMonth() + 1)
|
: date.getMonth() + 1 //获取月
|
let dateDate =
|
date.getDate() < 10 ? "0" + date.getDate() : date.getDate() //获取当日
|
let dateDay = date.getDay() //获取当日星期数
|
let dateHours =
|
date.getHours() < 10 ? "0" + date.getHours() : date.getHours() //获取小时
|
let dateMinutes =
|
date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes() //获取分钟
|
let dateSeconds =
|
date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds() //获取秒
|
|
return (
|
dateYear +
|
"-" +
|
dateMonth +
|
"-" +
|
dateDate +
|
" " +
|
dateHours +
|
":" +
|
dateMinutes +
|
":" +
|
dateSeconds
|
)
|
},
|
|
getSubjectRef () {
|
let ref
|
|
switch (this.query.type) {
|
case 0:
|
ref = this.$refs.choices
|
break
|
case 1:
|
ref = this.$refs.multipleChoices
|
|
break
|
case 2:
|
ref = this.$refs.judgement
|
break
|
case 3:
|
ref = this.$refs.practicalOperation
|
break
|
case 4:
|
ref = this.$refs.shortAnswer
|
break
|
}
|
return ref
|
},
|
setSubjectInfo (subject) {
|
const ref = this.getSubjectRef()
|
// console.log(subject, "subject");
|
if (isNotEmpty(ref)) {
|
try {
|
ref.setSubjectInfo(
|
subject,
|
this.subjectIds.length,
|
this.subjectIndex
|
)
|
} catch (error) {
|
console.error(error)
|
}
|
}
|
}
|
}
|
}
|
</script>
|
|
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
<style lang="scss" rel="stylesheet/scss" scoped>
|
$fontSize1: 18px;
|
$fontSize2: 20px;
|
$fontSize3: 40px;
|
|
.subject-box {
|
margin-top: 25px;
|
margin-left: 20px;
|
height: 100%;
|
}
|
|
.subject-box-card {
|
font-size: 28px;
|
width: 80%;
|
margin-bottom: 30px;
|
min-height: 400px;
|
}
|
|
.subject-buttons {
|
text-align: left;
|
position: relative;
|
top: 70px;
|
left: 390px;
|
|
// top: 70%;
|
// right: 30%;
|
.buttons {
|
// border: 1px solid green;
|
}
|
}
|
|
.tool-bar {
|
margin-left: 20px;
|
}
|
|
.time-remain_title {
|
font-size: $fontSize2;
|
}
|
|
.time-remain .time {
|
display: block;
|
font-size: $fontSize3;
|
line-height: $fontSize3;
|
color: #ff0000;
|
font-weight: 400;
|
position: relative;
|
// top: -20px;
|
}
|
|
.current-progress {
|
font-size: $fontSize2;
|
}
|
|
.answer-card {
|
margin: 15px 0;
|
}
|
|
.el-dates {
|
font-size: $fontSize1;
|
}
|
|
.subject-exam-title {
|
margin-bottom: 25px;
|
}
|
|
/* 答题卡 */
|
.answer-card-title {
|
font-size: 24px;
|
color: #3a3e51;
|
line-height: 17px;
|
padding: 10px 0;
|
}
|
|
.answer-card-split {
|
width: 100%;
|
border-bottom: 1px solid #e6e6e6;
|
}
|
|
.answer-card-content {
|
padding-bottom: 10px;
|
font-size: 0;
|
margin-right: -15px;
|
|
>button {
|
margin-top: 5px;
|
}
|
}
|
|
.answered {
|
background-color: #097FFE;
|
}
|
|
#avue-view>.morpheus-box {
|
position: absolute;
|
width: calc(100% - 100px);
|
height: 85%;
|
border-radius: 4px;
|
top: 10%;
|
left: 50px;
|
padding: 10px !important;
|
box-sizing: border-box;
|
}
|
|
.exam-card-body {
|
// border-top: 5px solid #ffa820 !important;
|
}
|
|
$sizeBut: 50px;
|
|
.el-button.is-circle {
|
text-align: center;
|
width: $sizeBut !important;
|
height: $sizeBut !important;
|
border-radius: $sizeBut !important;
|
margin-left: 0 !important;
|
margin-right: 10px !important;
|
margin-top: 10px !important;
|
// display: flex;
|
// justify-content: center;
|
}
|
</style>
|