<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 plain @click="last" :loading="loadingLast"
|
>上一题</el-button
|
> -->
|
<el-button
|
@click="next"
|
class="buttons"
|
:loading="loadingNext"
|
type="primary"
|
>下一题</el-button
|
>
|
<!-- <el-button
|
:disabled="timesIT"
|
type="success"
|
@click="submitExam"
|
:title="
|
timesIT
|
? '根据国家考试要求,30分钟内不可提交! 剩(' +
|
timesITValue +
|
')分钟'
|
: '点击完成考试'
|
"
|
>完成考试 {{ time }}</el-button
|
> -->
|
<el-button
|
type="success"
|
@click="submitExam"
|
:disabled="subjectIndex != 60"
|
>完成考试 {{ 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
|
:class="{ answered: subjectIds[index].answered }"
|
circle
|
v-for="(value, index) in subjectIds"
|
:style="{ background: value.color }"
|
:key="index"
|
@click="toSubject(value.everyID, value.type, index)"
|
> {{ index + 1 }} </el-button> -->
|
<el-button
|
circle
|
v-for="(value, index) in subjectIds"
|
:style="{ background: value.color, color: value.fontColor }"
|
:key="index"
|
> {{ index + 1 }} </el-button
|
>
|
<!-- @click="toSubject(value.everyID, value.type, index)" -->
|
</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")
|
}),
|
time() {
|
var d = [+this.times[0], +this.times[1]];
|
}
|
},
|
created() {
|
var useInfo = this.$store.state.exam.examUserData;
|
|
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;
|
}
|
}
|
|
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 => {
|
// console.log(response, 7777);
|
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 + 60 * 60 * 1000;
|
this.bottonControl(60);
|
}
|
// 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 (var 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 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 60 - (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;
|
}
|
// 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) {
|
this.startLoading(nextType);
|
|
// console.log();
|
|
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;
|
|
if (this.result == 1) {
|
subjectIds.color = "#67C23A";
|
subjectIds.fontColor = "#fff";
|
}
|
if (this.result == 2) {
|
subjectIds.color = "red";
|
subjectIds.fontColor = "#fff";
|
}
|
|
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,
|
type
|
);
|
|
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: greenyellow;
|
}
|
|
#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>
|