Commit 22e3fe67 by 冷斌

fix bug

parent 54c6aa94
<include file="__THEME__/public_header_w3g" /> <include file="__THEME__/public_header_w3g"/>
<style type="text/css"> <style type="text/css">
/*比较多用到的*/ /*比较多用到的*/
.box { .box {
...@@ -125,9 +125,6 @@ ...@@ -125,9 +125,6 @@
} }
body { body {
background-color: #fff; background-color: #fff;
} }
...@@ -327,20 +324,24 @@ ...@@ -327,20 +324,24 @@
<div class="testPaperTop box"> <div class="testPaperTop box">
<p class="testPaperTop_time flex1">{{countDown}}</p> <p class="testPaperTop_time flex1">{{countDown}}</p>
<span v-show="!review" class="testPaperTop_da">答题卡</span> <span v-show="!review" class="testPaperTop_da">答题卡</span>
<img v-show="!review" @click="onCounting" class="testPaperTop_pau" :src="counting ? '__THEME__/img/pau.png' : '__THEME__/img/right_arrow.png'"> <img v-show="!review" @click="onCounting" class="testPaperTop_pau"
:src="counting ? '__THEME__/img/pau.png' : '__THEME__/img/right_arrow.png'">
</div> </div>
<div class="testPaperBotm"> <div class="testPaperBotm">
<div class="box"> <div class="box">
<span class="testPaperNum">{{current}}/{{totalQuestion}}</span> <span class="testPaperNum">{{current}}/{{totalQuestion}}</span>
<p class="testPaperLei flex1">({{currentQuestionTypeName}})</p> <p class="testPaperLei flex1">({{currentQuestionTypeName}})</p>
<img v-if="currentQuestion.is_collect == 0" @click="onCollect(1)" class="testPaperColl" src="__THEME__/img/share_unstar.png"> <img v-if="currentQuestion.is_collect == 0" @click="onCollect(1)" class="testPaperColl"
<img v-if="currentQuestion.is_collect == 1" @click="onCollect(0)" class="testPaperColl" src="__THEME__/img/share_star.png"> src="__THEME__/img/share_unstar.png">
<img v-if="currentQuestion.is_collect == 1" @click="onCollect(0)" class="testPaperColl"
src="__THEME__/img/share_star.png">
</div> </div>
<template v-if="showChoiceQuestion"> <template v-if="showChoiceQuestion">
<div v-html="currentQuestion.content" class="testPaperInfo"></div> <div v-html="currentQuestion.content" class="testPaperInfo"></div>
<ul> <ul>
<li v-for="(opt, index) in currentOptions" :key="index" class="testPaperAnswer box"> <li v-for="(opt, index) in currentOptions" :key="index" class="testPaperAnswer box">
<span @click="onChoose(opt)" class="testPaperAnswer_num" :class="opt.selected ? 'testPaperAnswer_numAt' : ''">{{opt.key}}</span> <span @click="onChoose(opt)" class="testPaperAnswer_num"
:class="opt.selected ? 'testPaperAnswer_numAt' : ''">{{opt.key}}</span>
<div v-html="opt.value" class="testPaperAnswer_desc flex1" style="margin-top: 0.625rem;"></div> <div v-html="opt.value" class="testPaperAnswer_desc flex1" style="margin-top: 0.625rem;"></div>
</li> </li>
</ul> </ul>
...@@ -356,11 +357,15 @@ ...@@ -356,11 +357,15 @@
<!-- 解析 --> <!-- 解析 -->
<div class="testPaperJiedaPage"> <div class="testPaperJiedaPage">
<div class="box testPaperJiedaBox"> <div class="box testPaperJiedaBox">
<span @click="expand = !expand" class="testPaperJiedaBtn box">{{expand ? '收起解析' : '查看解析'}}<img class="testPaperJiedaBtn_icon" src="__THEME__/img/openBtn.png"></span> <span @click="expand = !expand" class="testPaperJiedaBtn box">{{expand ? '收起解析' : '查看解析'}}<img
class="testPaperJiedaBtn_icon" src="__THEME__/img/openBtn.png"></span>
</div> </div>
<ul v-if="expand" class="testPaperAnswers"> <ul v-if="expand" class="testPaperAnswers">
<li class="testPaperAnswer">正确答案:<span v-for="(answer, index) in currentRightOptions" :key="index" class="testPaperAnswer_n">{{answer}}</span></li> <li class="testPaperAnswer">正确答案:<span v-for="(answer, index) in currentRightOptions" :key="index"
<li class="testPaperAnswer">我的答案:<span v-for="(answer, index) in currentMyOptions" :key="index" :class="answer.right ? 'testPaperAnswer_n' : 'testPaperAnswer_e'">{{answer.key}}</span></li> class="testPaperAnswer_n">{{answer}}</span></li>
<li class="testPaperAnswer">我的答案:<span v-for="(answer, index) in currentMyOptions" :key="index"
:class="answer.right ? 'testPaperAnswer_n' : 'testPaperAnswer_e'">{{answer.key}}</span>
</li>
</ul> </ul>
<div v-if="expand" class="testPaperAnswer_infoBox"> <div v-if="expand" class="testPaperAnswer_infoBox">
<p class="testPaperAnswer_infoTitle">解析</p> <p class="testPaperAnswer_infoTitle">解析</p>
...@@ -389,12 +394,12 @@ ...@@ -389,12 +394,12 @@
</div> </div>
<include file="__THEME__/public_footer_w3g" /> <include file="__THEME__/public_footer_w3g"/>
<script type="text/javascript"> <script type="text/javascript">
new Vue({ new Vue({
el: "#app", el: "#app",
data: function() { data: function () {
return { return {
info: {}, info: {},
temp: {}, temp: {},
...@@ -414,60 +419,60 @@ ...@@ -414,60 +419,60 @@
}, },
computed: { computed: {
//computed //computed
nextButton: function() { nextButton: function () {
if(this.review) { if (this.review) {
return this.current == this.totalQuestion ? '返回' : '下一题' return this.current == this.totalQuestion ? '返回' : '下一题'
} else { } else {
return this.current == this.totalQuestion ? '交卷' : '下一题' return this.current == this.totalQuestion ? '交卷' : '下一题'
} }
}, },
totalQuestion: function() { totalQuestion: function () {
let count = 0 let count = 0
let data = this.paperOptions.options_questions_data let data = this.paperOptions.options_questions_data
this.paperOptions.options_type.forEach( r => { this.paperOptions.options_type.forEach(r => {
count += data[r.question_type].length count += data[r.question_type].length
}) })
return count return count
}, },
currentTypeIndex: function() { currentTypeIndex: function () {
let count = 0 let count = 0
let data = this.paperOptions.options_questions_data let data = this.paperOptions.options_questions_data
let current = this.current let current = this.current
for(let i = 0; i < this.paperOptions.options_type.length; i++) { for (let i = 0; i < this.paperOptions.options_type.length; i++) {
let r = this.paperOptions.options_type[i] let r = this.paperOptions.options_type[i]
let next = count + data[r.question_type].length let next = count + data[r.question_type].length
if(current > count && current <= next) { if (current > count && current <= next) {
return i return i
} else { } else {
count = next count = next
} }
} }
}, },
currentQuestions: function() { currentQuestions: function () {
let optionType = this.currentQuestionType let optionType = this.currentQuestionType
let questionType = optionType.question_type let questionType = optionType.question_type
let questionData = this.paperOptions.options_questions_data let questionData = this.paperOptions.options_questions_data
let questions = questionData[questionType] let questions = questionData[questionType]
return questions return questions
}, },
currentQuestionType: function() { currentQuestionType: function () {
return this.paperOptions.options_type[this.currentTypeIndex] return this.paperOptions.options_type[this.currentTypeIndex]
}, },
currentQuestionTypeName: function() { currentQuestionTypeName: function () {
return this.currentQuestionType.type_info.question_type_title return this.currentQuestionType.type_info.question_type_title
}, },
currentQuestionTypeKey: function() { currentQuestionTypeKey: function () {
return this.currentQuestionType.question_type_key return this.currentQuestionType.question_type_key
}, },
currentQuestion: function() { currentQuestion: function () {
let count = 0 let count = 0
let data = this.paperOptions.options_questions_data let data = this.paperOptions.options_questions_data
let current = this.current let current = this.current
for(let i = 0; i < this.paperOptions.options_type.length; i++) { for (let i = 0; i < this.paperOptions.options_type.length; i++) {
let r = this.paperOptions.options_type[i] let r = this.paperOptions.options_type[i]
let next = count + data[r.question_type].length let next = count + data[r.question_type].length
if(current > count && current <= next) { if (current > count && current <= next) {
return data[r.question_type][current - count - 1] return data[r.question_type][current - count - 1]
} else { } else {
count = next count = next
...@@ -475,37 +480,53 @@ ...@@ -475,37 +480,53 @@
} }
}, },
//选择题答案 //选择题答案
currentRightOptions: function() { currentRightOptions: function () {
return this.currentQuestion.answer_true_option return this.currentQuestion.answer_true_option
}, },
//我的答案 //我的答案
currentMyOptions: function() { currentMyOptions: function () {
let cur = this.currentRightOptions let cur = this.currentRightOptions
return this.currentOptions.filter( r => { return r.selected }).map( r => { return this.currentOptions.filter(r => {
return r.selected
}).map(r => {
return { return {
right: cur.hx_indexOf( k => { return k == r.key }) != -1, right: cur.hx_indexOf(k => {
return k == r.key
}) != -1,
key: r.key key: r.key
} }
}) })
}, },
//解析 //解析
currentAnalyze: function() { currentAnalyze: function () {
return this.currentQuestion.analyze return this.currentQuestion.analyze
}, },
//Helper //Helper
showChoiceQuestion: function() { showChoiceQuestion: function () {
let key = this.currentQuestionTypeKey let key = this.currentQuestionTypeKey
return key == 'radio' || key == 'multiselect' || key == 'judge' return key == 'radio' || key == 'multiselect' || key == 'judge'
} }
}, },
created: function() { created: function () {
this.info = {:json_encode($paper)}; this.info = {
this.temp = {:json_encode($tempData)}; :
this.paperOptions = {:json_encode($paper_options)}; json_encode($paper)
}
;
this.temp = {
:
json_encode($tempData)
}
;
this.paperOptions = {
:
json_encode($paper_options)
}
;
this.review = "{$review}" this.review = "{$review}"
this.initAnswerMode() this.initAnswerMode()
this.doCountDown() this.doCountDown()
if(this.review) { if (this.review) {
this.countDown = this.computeTime(this.info.reply_time * 60) this.countDown = this.computeTime(this.info.reply_time * 60)
this.expand = true this.expand = true
} }
...@@ -515,19 +536,21 @@ ...@@ -515,19 +536,21 @@
console.log(this.paperOptions) console.log(this.paperOptions)
}, },
watch: { watch: {
current: function(o, n) { current: function (o, n) {
this.initAnswerMode() this.initAnswerMode()
} }
}, },
methods: { methods: {
initAnswerMode: function() { initAnswerMode: function () {
let q = this.currentQuestionTypeKey let q = this.currentQuestionTypeKey
switch(q) { switch (q) {
case "radio": case "radio":
this.currentOptions = [] this.currentOptions = []
let Q = this.currentQuestion let Q = this.currentQuestion
let old = this.finished.hx_firstOf( r => { return r.qId == Q.exams_question_id }) let old = this.finished.hx_firstOf(r => {
for(let k in Q.answer_options) { return r.qId == Q.exams_question_id
})
for (let k in Q.answer_options) {
let value = Q.answer_options[k] let value = Q.answer_options[k]
let select = old ? old.option == k : false let select = old ? old.option == k : false
this.currentOptions.push({ this.currentOptions.push({
...@@ -539,7 +562,7 @@ ...@@ -539,7 +562,7 @@
break break
} }
}, },
recordData: function() { recordData: function () {
return { return {
paperId: this.info.exams_paper_id, paperId: this.info.exams_paper_id,
timeConsumed: this.timeConsumed, timeConsumed: this.timeConsumed,
...@@ -547,19 +570,19 @@ ...@@ -547,19 +570,19 @@
finished: this.finished finished: this.finished
} }
}, },
computeTime: function(time) { computeTime: function (time) {
let hours = Math.floor(time / 3600) let hours = Math.floor(time / 3600)
let minutes = Math.floor((time % 3600) / 60) let minutes = Math.floor((time % 3600) / 60)
let seconds = Math.round(time % 60) let seconds = Math.round(time % 60)
return (hours < 10 ? '0' + hours : hours) + ":" + (minutes < 10 ? '0' + minutes : minutes) + ":" + (seconds < 10 ? '0' + seconds : seconds) return (hours < 10 ? '0' + hours : hours) + ":" + (minutes < 10 ? '0' + minutes : minutes) + ":" + (seconds < 10 ? '0' + seconds : seconds)
}, },
doCountDown: function() { doCountDown: function () {
if(!this.counting || this.review) { if (!this.counting || this.review) {
return return
} }
if(this.info.reply_time) { if (this.info.reply_time) {
let time = this.info.reply_time * 60 - this.timeConsumed let time = this.info.reply_time * 60 - this.timeConsumed
if(time <= 0) { if (time <= 0) {
this.showFinish = true this.showFinish = true
} else { } else {
this.countDown = this.computeTime(time) this.countDown = this.computeTime(time)
...@@ -570,27 +593,27 @@ ...@@ -570,27 +593,27 @@
this.countDown = "不限时" this.countDown = "不限时"
} }
}, },
onCollect: function(collect) { onCollect: function (collect) {
let that = this let that = this
$.post(U('exams/Index/collect'), { $.post(U('exams/Index/collect'), {
action: collect, action: collect,
source_id: that.currentQuestion.exams_question_id source_id: that.currentQuestion.exams_question_id
}, function(res) { }, function (res) {
let r = JSON.parse(res) let r = JSON.parse(res)
if(r.status == 1) { if (r.status == 1) {
that.currentQuestion.is_collect = collect that.currentQuestion.is_collect = collect
} }
}) })
}, },
onChoose: function(opt) { onChoose: function (opt) {
if(this.currentQuestionTypeKey == 'radio') { if (this.currentQuestionTypeKey == 'radio') {
this.currentOptions.forEach( r => { this.currentOptions.forEach(r => {
r.selected = opt.key == r.key r.selected = opt.key == r.key
}) })
} }
}, },
onCounting: function() { onCounting: function () {
if(this.counting) { if (this.counting) {
this.counting = false this.counting = false
this.showPause = true this.showPause = true
} else { } else {
...@@ -598,62 +621,64 @@ ...@@ -598,62 +621,64 @@
this.doCountDown() this.doCountDown()
} }
}, },
onContinue: function() { onContinue: function () {
this.showPause = false this.showPause = false
this.onCounting() this.onCounting()
}, },
onQuit: function() { onQuit: function () {
this.showPause = false this.showPause = false
this.saveProgress() this.saveProgress()
}, },
onCancel: function() { onCancel: function () {
this.showFinish = false this.showFinish = false
window.history.back() window.history.back()
}, },
onSure: function() { onSure: function () {
this.showFinish = false this.showFinish = false
this.submitPaper() this.submitPaper()
}, },
onNextQuestion: function() { onNextQuestion: function () {
if(this.current < this.totalQuestion) { if (this.current < this.totalQuestion) {
this.cacheQuestion() this.cacheQuestion()
if(!this.review) { if (!this.review) {
this.expand = false this.expand = false
} }
this.current += 1 this.current += 1
} else { } else {
if(!this.review) { if (!this.review) {
this.showFinish = true this.showFinish = true
} else { } else {
window.history.back() window.history.back()
} }
} }
}, },
onPreviousQuestion: function() { onPreviousQuestion: function () {
if(this.current > 1) { if (this.current > 1) {
this.current -= 1 this.current -= 1
} }
}, },
cacheQuestion: function() { cacheQuestion: function () {
if(this.review) { if (this.review) {
return return
} }
let q = this.currentQuestion let q = this.currentQuestion
let mode = this.finished.hx_firstOf( r => { return r.qId == q.exams_question_id }) let mode = this.finished.hx_firstOf(r => {
if(mode) { return r.qId == q.exams_question_id
switch(this.currentQuestionTypeKey) { })
if (mode) {
switch (this.currentQuestionTypeKey) {
case "radio": case "radio":
let my = this.currentMyOptions let my = this.currentMyOptions
if(my.length > 0) { if (my.length > 0) {
mode.option = my[0].key mode.option = my[0].key
} }
break break
} }
} else { } else {
switch(this.currentQuestionTypeKey) { switch (this.currentQuestionTypeKey) {
case "radio": case "radio":
let my = this.currentMyOptions let my = this.currentMyOptions
if(my.length > 0) { if (my.length > 0) {
this.finished.push({ this.finished.push({
qId: q.exams_question_id, qId: q.exams_question_id,
option: my[0].key, option: my[0].key,
...@@ -666,7 +691,7 @@ ...@@ -666,7 +691,7 @@
}, },
//Request //Request
//Collect Params //Collect Params
collectParam: function() { collectParam: function () {
let that = this let that = this
let time = that.info.reply_time * 60 - that.timeConsumed let time = that.info.reply_time * 60 - that.timeConsumed
let param = { let param = {
...@@ -678,9 +703,9 @@ ...@@ -678,9 +703,9 @@
is_timeout: time <= 0 ? 1 : 0, is_timeout: time <= 0 ? 1 : 0,
paper_options_id: that.paperOptions.exams_paper_options_id, paper_options_id: that.paperOptions.exams_paper_options_id,
} }
that.finished.forEach( r => { that.finished.forEach(r => {
let key = 'user_answer[' + r.qId + ']' let key = 'user_answer[' + r.qId + ']'
switch(r.key) { switch (r.key) {
case "radio": case "radio":
param[key] = r.option param[key] = r.option
break break
...@@ -688,17 +713,17 @@ ...@@ -688,17 +713,17 @@
}) })
return param return param
}, },
saveProgress: function() { saveProgress: function () {
let that = this let that = this
that.cacheQuestion() that.cacheQuestion()
let param = this.collectParam() let param = this.collectParam()
$.post( $.post(
U('exams/Index/doProgressExams'), U('exams/Index/doProgressExams'),
param, param,
function(res) { function (res) {
if (typeof(res) != 'object') { if (typeof (res) != 'object') {
try { try {
// let res = JSON.parse(res) let res = JSON.parse(res)
} catch (e) { } catch (e) {
ui.error("处理异常,请重新尝试") ui.error("处理异常,请重新尝试")
} }
...@@ -711,14 +736,14 @@ ...@@ -711,14 +736,14 @@
} }
}, 'json') }, 'json')
}, },
submitPaper: function() { submitPaper: function () {
let that = this let that = this
that.cacheQuestion() that.cacheQuestion()
let param = this.collectParam() let param = this.collectParam()
$.post( $.post(
U('exams/Index/doHaddleExams'), U('exams/Index/doHaddleExams'),
param, param,
function(r) { function (r) {
let res = JSON.parse(r) let res = JSON.parse(r)
if (res.status == 1) { if (res.status == 1) {
ui.success(res.data.info) ui.success(res.data.info)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment