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 {
display: flex; display: flex;
display: -webkit-flex; display: -webkit-flex;
align-items: center; align-items: center;
} }
.boxCn { .boxCn {
display: flex !important; display: flex !important;
display: -webkit-flex; display: -webkit-flex;
align-items: center; align-items: center;
justify-content: center !important; justify-content: center !important;
} }
.flex1 { .flex1 {
flex: 1; flex: 1;
} }
/*遮罩层*/ /*遮罩层*/
.mask { .mask {
position: fixed !important; position: fixed !important;
top: 0; top: 0;
left: 0; left: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
background: rgba(0, 0, 0, 0.5); background: rgba(0, 0, 0, 0.5);
transition: all .3s ease-in-out; transition: all .3s ease-in-out;
z-index: 8; z-index: 8;
} }
.popUp { .popUp {
background-color: #FFFFFF; background-color: #FFFFFF;
z-index: 10; z-index: 10;
width: 16.875rem; width: 16.875rem;
border-radius: 0.5rem; border-radius: 0.5rem;
overflow: hidden; overflow: hidden;
position: fixed; position: fixed;
top: 50%; top: 50%;
left: 50%; left: 50%;
-webkit-transform: translate(-50%, -50%); -webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%);
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
} }
.popUp_title { .popUp_title {
font-family: PingFangSC-Semibold, PingFang SC; font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600; font-weight: 600;
font-size: 1.125rem; font-size: 1.125rem;
height: 1.5625rem; height: 1.5625rem;
line-height: 1.5625rem; line-height: 1.5625rem;
margin-top: 0.9375rem; margin-top: 0.9375rem;
padding: 0 1rem; padding: 0 1rem;
box-sizing: border-box; box-sizing: border-box;
text-align: center; text-align: center;
} }
.popUp_content { .popUp_content {
padding: 1rem 1rem; padding: 1rem 1rem;
box-sizing: border-box; box-sizing: border-box;
text-align: center; text-align: center;
font-size: 0.875rem; font-size: 0.875rem;
color: #333333; color: #333333;
} }
.popUp_btns { .popUp_btns {
border-top: 1px solid #eeeeee; border-top: 1px solid #eeeeee;
} }
.popUp_btn { .popUp_btn {
flex: 1; flex: 1;
text-align: center; text-align: center;
line-height: 3.125rem; line-height: 3.125rem;
height: 3.125rem; height: 3.125rem;
font-family: PingFangSC-Semibold, PingFang SC; font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600; font-weight: 600;
font-size: 1rem; font-size: 1rem;
box-sizing: border-box; box-sizing: border-box;
background-color: #FFFFFF; background-color: #FFFFFF;
} }
.popUp_btn0 { .popUp_btn0 {
color: #999999; color: #999999;
border-right: 1px solid #eeeeee; border-right: 1px solid #eeeeee;
} }
.popUp_btn1 { .popUp_btn1 {
color: #65C000; color: #65C000;
} }
/*jixu*/ /*jixu*/
.stopBox { .stopBox {
width: 100%; width: 100%;
position: fixed; position: fixed;
top: 50%; top: 50%;
left: 50%; left: 50%;
z-index: 10; z-index: 10;
-webkit-transform: translate(-50%, -50%); -webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%);
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
} }
.stopBtn { .stopBtn {
width: 10rem; width: 10rem;
height: 3rem; height: 3rem;
line-height: 3rem; line-height: 3rem;
display: block; display: block;
margin: 2rem auto; margin: 2rem auto;
color: #FFFFFF; color: #FFFFFF;
font-size: 1rem; font-size: 1rem;
font-family: PingFangSC-Semibold, PingFang SC; font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600; font-weight: 600;
box-sizing: border-box; box-sizing: border-box;
text-align: center; text-align: center;
border-radius: 1.5rem; border-radius: 1.5rem;
} }
.stopBtn_on { .stopBtn_on {
background-color: #A3E460; background-color: #A3E460;
} }
.stopBtn_out { .stopBtn_out {
border: 1px solid rgba(204, 204, 204, 1); border: 1px solid rgba(204, 204, 204, 1);
} }
body {
background-color: #fff;
}
body {
background-color: #fff; .testPaperTop {
} height: 2.25rem;
padding: 0 0.75rem;
.testPaperTop { box-sizing: border-box;
height: 2.25rem; border-bottom: 1px solid #F5F5F5;
padding: 0 0.75rem; width: 100%;
box-sizing: border-box; position: fixed;
border-bottom: 1px solid #F5F5F5; top: 0;
width: 100%; left: 0;
position: fixed; z-index: 1;
top: 0; background-color: #FFFFFF;
left: 0; }
z-index: 1;
background-color: #FFFFFF; .testPaperTop_time {
} font-size: 0.75rem
}
.testPaperTop_time {
font-size: 0.75rem .testPaperTop_da {
} font-size: 0.75rem;
color: #999999;
.testPaperTop_da { }
font-size: 0.75rem;
color: #999999; .testPaperTop_pau {
} margin-left: 1.875rem;
width: 0.75rem;
.testPaperTop_pau { height: 0.75rem;
margin-left: 1.875rem; }
width: 0.75rem;
height: 0.75rem; .testPaperBotm {
} padding: 0.75rem 0.75rem 0.75rem;
box-sizing: border-box;
.testPaperBotm { margin-top: 2.25rem;
padding: 0.75rem 0.75rem 0.75rem; }
box-sizing: border-box;
margin-top: 2.25rem; .testPaperNum {
} margin-right: 0.75rem;
color: #999999;
.testPaperNum { font-size: 0.75rem;
margin-right: 0.75rem; }
color: #999999;
font-size: 0.75rem; .testPaperLei {
} font-size: 0.75rem;
color: #333333;
.testPaperLei { }
font-size: 0.75rem;
color: #333333; .testPaperColl {
} width: 1rem;
height: 1rem;
.testPaperColl { }
width: 1rem;
height: 1rem; .testPaperInfo {
} margin-top: 0.5rem;
font-size: 1rem;
.testPaperInfo { line-height: 1.875rem;
margin-top: 0.5rem; color: #333333;
font-size: 1rem; }
line-height: 1.875rem;
color: #333333; .testPaperAnswer {
} margin-top: 1rem;
align-items: flex-start;
.testPaperAnswer { }
margin-top: 1rem;
align-items: flex-start; .testPaperAnswer_num {
} display: inline-block;
width: 2.25rem;
.testPaperAnswer_num { height: 2.25rem;
display: inline-block; border-radius: 100%;
width: 2.25rem; border: 1px solid rgba(163, 228, 96, 1);
height: 2.25rem; text-align: center;
border-radius: 100%; line-height: 2.25rem;
border: 1px solid rgba(163, 228, 96, 1); color: #65C000;
text-align: center; font-family: PingFangSC-Semibold, PingFang SC;
line-height: 2.25rem; font-weight: 600;
color: #65C000; font-size: 0.875rem;
font-family: PingFangSC-Semibold, PingFang SC; margin-right: 0.75rem;
font-weight: 600; }
font-size: 0.875rem;
margin-right: 0.75rem; .testPaperAnswer_numAt {
} background-color: #A3E460;
color: #FFFFFF;
.testPaperAnswer_numAt { }
background-color: #A3E460;
color: #FFFFFF; .testPaperAnswer_desc {
} line-height: 1.25rem;
margin: 0;
.testPaperAnswer_desc { }
line-height: 1.25rem;
margin: 0; .testPaperBtns {
} justify-content: space-between;
padding: 3rem 0.75rem 1rem;
.testPaperBtns { box-sizing: border-box;
justify-content: space-between; width: 100%;
padding: 3rem 0.75rem 1rem;
box-sizing: border-box; }
width: 100%;
.testPaperBtn {
} width: 10rem;
height: 3rem;
.testPaperBtn { line-height: 3rem;
width: 10rem; text-align: center;
height: 3rem; border: 1px solid rgba(163, 228, 96, 1);
line-height: 3rem; border-radius: 1.5rem;
text-align: center; box-sizing: border-box;
border: 1px solid rgba(163, 228, 96, 1); font-size: 1rem;
border-radius: 1.5rem; font-family: PingFangSC-Semibold, PingFang SC;
box-sizing: border-box; font-weight: 600;
font-size: 1rem; color: #65C000;
font-family: PingFangSC-Semibold, PingFang SC; }
font-weight: 600;
color: #65C000; .testPaperBtn1 {
} color: #FFFFFF;
background: rgba(163, 228, 96, 1);
.testPaperBtn1 { }
color: #FFFFFF;
background: rgba(163, 228, 96, 1);
} .testPaperJiedaPage {
padding: 0 0.75rem;
box-sizing: border-box;
.testPaperJiedaPage { }
padding: 0 0.75rem;
box-sizing: border-box; .testPaperJiedaBox {
} padding: 1rem 0;
}
.testPaperJiedaBox {
padding: 1rem 0; .testPaperJiedaBtn {
} color: #65C000;
font-size: 0.875rem;
.testPaperJiedaBtn { font-family: PingFangSC-Semibold, PingFang SC;
color: #65C000; font-weight: 600;
font-size: 0.875rem; }
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600; .testPaperJiedaBtn_icon {
} margin-left: 0.5rem;
width: 0.75rem;
.testPaperJiedaBtn_icon { height: 0.75rem;
margin-left: 0.5rem; }
width: 0.75rem;
height: 0.75rem; .testPaperAnswers {
} padding: 0.5rem 0 0.25rem;
}
.testPaperAnswers {
padding: 0.5rem 0 0.25rem; .testPaperAnswer {
} padding: 0.5rem 0;
color: #333333;
.testPaperAnswer { font-size: 1rem;
padding: 0.5rem 0; margin: 0;
color: #333333; }
font-size: 1rem;
margin: 0; .testPaperAnswer_n {
} color: #65C000;
}
.testPaperAnswer_n {
color: #65C000; .testPaperAnswer_e {
} color: red;
}
.testPaperAnswer_e {
color: red; .testPaperAnswer_infoBox {
} padding: 0.1875rem 0.75rem 0.75rem;
box-sizing: border-box;
.testPaperAnswer_infoBox { border-top: 1px solid #f5f5f5;
padding: 0.1875rem 0.75rem 0.75rem; }
box-sizing: border-box;
border-top: 1px solid #f5f5f5; .testPaperAnswer_infoTitle {
} font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
.testPaperAnswer_infoTitle { color: #333333;
font-family: PingFangSC-Semibold, PingFang SC; font-size: 1rem;
font-weight: 600; padding: 0.75rem 0 0.75rem 0.75rem;
color: #333333; box-sizing: border-box;
font-size: 1rem; position: relative;
padding: 0.75rem 0 0.75rem 0.75rem; margin: 0;
box-sizing: border-box; }
position: relative;
margin: 0; .testPaperAnswer_infoTitle::before {
} content: "";
position: absolute;
.testPaperAnswer_infoTitle::before { left: 0;
content: ""; top: 50%;
position: absolute; width: 4px;
left: 0; height: 4px;
top: 50%; border-radius: 100%;
width: 4px; background-color: #A3E460;
height: 4px; margin-top: -2px;
border-radius: 100%; }
background-color: #A3E460;
margin-top: -2px; .testPaperAnswer_info {
} color: #333333;
font-size: 1rem;
.testPaperAnswer_info { line-height: 1.875rem;
color: #333333; }
font-size: 1rem;
line-height: 1.875rem;
}
</style> </style>
<div id="app"> <div id="app">
<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"
</div> :src="counting ? '__THEME__/img/pau.png' : '__THEME__/img/right_arrow.png'">
<div class="testPaperBotm"> </div>
<div class="box"> <div class="testPaperBotm">
<span class="testPaperNum">{{current}}/{{totalQuestion}}</span> <div class="box">
<p class="testPaperLei flex1">({{currentQuestionTypeName}})</p> <span class="testPaperNum">{{current}}/{{totalQuestion}}</span>
<img v-if="currentQuestion.is_collect == 0" @click="onCollect(1)" class="testPaperColl" src="__THEME__/img/share_unstar.png"> <p class="testPaperLei flex1">({{currentQuestionTypeName}})</p>
<img v-if="currentQuestion.is_collect == 1" @click="onCollect(0)" class="testPaperColl" src="__THEME__/img/share_star.png"> <img v-if="currentQuestion.is_collect == 0" @click="onCollect(1)" class="testPaperColl"
</div> src="__THEME__/img/share_unstar.png">
<template v-if="showChoiceQuestion"> <img v-if="currentQuestion.is_collect == 1" @click="onCollect(0)" class="testPaperColl"
<div v-html="currentQuestion.content" class="testPaperInfo"></div> src="__THEME__/img/share_star.png">
<ul> </div>
<li v-for="(opt, index) in currentOptions" :key="index" class="testPaperAnswer box"> <template v-if="showChoiceQuestion">
<span @click="onChoose(opt)" class="testPaperAnswer_num" :class="opt.selected ? 'testPaperAnswer_numAt' : ''">{{opt.key}}</span> <div v-html="currentQuestion.content" class="testPaperInfo"></div>
<div v-html="opt.value" class="testPaperAnswer_desc flex1" style="margin-top: 0.625rem;"></div> <ul>
</li> <li v-for="(opt, index) in currentOptions" :key="index" class="testPaperAnswer box">
</ul> <span @click="onChoose(opt)" class="testPaperAnswer_num"
</template> :class="opt.selected ? 'testPaperAnswer_numAt' : ''">{{opt.key}}</span>
</div> <div v-html="opt.value" class="testPaperAnswer_desc flex1" style="margin-top: 0.625rem;"></div>
<div v-if="current == 1" class="testPaperBtns boxCn"> </li>
<p @click="onNextQuestion" class="testPaperBtn testPaperBtn1" style="width: 15rem;">下一题</p> </ul>
</div> </template>
<div v-if="current > 1" class="testPaperBtns box"> </div>
<p @click="onPreviousQuestion" class="testPaperBtn">上一题</p> <div v-if="current == 1" class="testPaperBtns boxCn">
<p @click="onNextQuestion" class="testPaperBtn testPaperBtn1">{{nextButton}}</p> <p @click="onNextQuestion" class="testPaperBtn testPaperBtn1" style="width: 15rem;">下一题</p>
</div> </div>
<!-- 解析 --> <div v-if="current > 1" class="testPaperBtns box">
<div class="testPaperJiedaPage"> <p @click="onPreviousQuestion" class="testPaperBtn">上一题</p>
<div class="box testPaperJiedaBox"> <p @click="onNextQuestion" class="testPaperBtn testPaperBtn1">{{nextButton}}</p>
<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"> <div class="testPaperJiedaPage">
<li class="testPaperAnswer">正确答案:<span v-for="(answer, index) in currentRightOptions" :key="index" class="testPaperAnswer_n">{{answer}}</span></li> <div class="box testPaperJiedaBox">
<li class="testPaperAnswer">我的答案:<span v-for="(answer, index) in currentMyOptions" :key="index" :class="answer.right ? 'testPaperAnswer_n' : 'testPaperAnswer_e'">{{answer.key}}</span></li> <span @click="expand = !expand" class="testPaperJiedaBtn box">{{expand ? '收起解析' : '查看解析'}}<img
</ul> class="testPaperJiedaBtn_icon" src="__THEME__/img/openBtn.png"></span>
<div v-if="expand" class="testPaperAnswer_infoBox"> </div>
<p class="testPaperAnswer_infoTitle">解析</p> <ul v-if="expand" class="testPaperAnswers">
<div v-html="currentAnalyze" class="testPaperAnswer_info"> <li class="testPaperAnswer">正确答案:<span v-for="(answer, index) in currentRightOptions" :key="index"
</div> class="testPaperAnswer_n">{{answer}}</span></li>
</div> <li class="testPaperAnswer">我的答案:<span v-for="(answer, index) in currentMyOptions" :key="index"
</div> :class="answer.right ? 'testPaperAnswer_n' : 'testPaperAnswer_e'">{{answer.key}}</span>
<!-- 交卷 --> </li>
<div class="mask" v-if="showFinish"> </ul>
<div class="popUp"> <div v-if="expand" class="testPaperAnswer_infoBox">
<p class="popUp_title">提示</p> <p class="testPaperAnswer_infoTitle">解析</p>
<div class="popUp_content">是否交卷并退出考试?</div> <div v-html="currentAnalyze" class="testPaperAnswer_info">
<div class="popUp_btns box"> </div>
<span @click="onCancel" class="popUp_btn popUp_btn0 flex1">取消</span> </div>
<span @click="onSure" class="popUp_btn popUp_btn1 flex1">确定</span> </div>
</div> <!-- 交卷 -->
</div> <div class="mask" v-if="showFinish">
</div> <div class="popUp">
<!-- 暂停 --> <p class="popUp_title">提示</p>
<div class="mask" v-if="showPause"> <div class="popUp_content">是否交卷并退出考试?</div>
<div class="stopBox"> <div class="popUp_btns box">
<span @click="onContinue" class="stopBtn stopBtn_on">继续</span> <span @click="onCancel" class="popUp_btn popUp_btn0 flex1">取消</span>
<span @click="onQuit" class="stopBtn stopBtn_out">退出</span> <span @click="onSure" class="popUp_btn popUp_btn1 flex1">确定</span>
</div> </div>
</div> </div>
</div>
<!-- 暂停 -->
<div class="mask" v-if="showPause">
<div class="stopBox">
<span @click="onContinue" class="stopBtn stopBtn_on">继续</span>
<span @click="onQuit" class="stopBtn stopBtn_out">退出</span>
</div>
</div>
</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: {},
current: 1, current: 1,
paperOptions: {}, paperOptions: {},
counting: true, counting: true,
review: false, review: false,
countDown: "00:00:00", countDown: "00:00:00",
timeConsumed: 0, timeConsumed: 0,
expand: false, expand: false,
showPause: false, showPause: false,
showFinish: false, showFinish: false,
//选项 //选项
currentOptions: [], currentOptions: [],
finished: [] finished: []
} }
}, },
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
} }
} }
}, },
//选择题答案 //选择题答案
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 { return r.selected
right: cur.hx_indexOf( k => { return k == r.key }) != -1, }).map(r => {
key: r.key return {
} right: cur.hx_indexOf(k => {
}) return k == r.key
}, }) != -1,
//解析 key: r.key
currentAnalyze: function() { }
return this.currentQuestion.analyze })
}, },
//Helper //解析
showChoiceQuestion: function() { currentAnalyze: function () {
let key = this.currentQuestionTypeKey return this.currentQuestion.analyze
return key == 'radio' || key == 'multiselect' || key == 'judge' },
} //Helper
}, showChoiceQuestion: function () {
created: function() { let key = this.currentQuestionTypeKey
this.info = {:json_encode($paper)}; return key == 'radio' || key == 'multiselect' || key == 'judge'
this.temp = {:json_encode($tempData)}; }
this.paperOptions = {:json_encode($paper_options)}; },
this.review = "{$review}" created: function () {
this.initAnswerMode() this.info = {
this.doCountDown() :
if(this.review) { json_encode($paper)
this.countDown = this.computeTime(this.info.reply_time * 60) }
this.expand = true ;
} this.temp = {
console.log("Review = " + this.review) :
console.log(this.info) json_encode($tempData)
console.log(this.temp) }
console.log(this.paperOptions) ;
}, this.paperOptions = {
watch: { :
current: function(o, n) { json_encode($paper_options)
this.initAnswerMode() }
} ;
}, this.review = "{$review}"
methods: { this.initAnswerMode()
initAnswerMode: function() { this.doCountDown()
let q = this.currentQuestionTypeKey if (this.review) {
switch(q) { this.countDown = this.computeTime(this.info.reply_time * 60)
case "radio": this.expand = true
this.currentOptions = [] }
let Q = this.currentQuestion console.log("Review = " + this.review)
let old = this.finished.hx_firstOf( r => { return r.qId == Q.exams_question_id }) console.log(this.info)
for(let k in Q.answer_options) { console.log(this.temp)
let value = Q.answer_options[k] console.log(this.paperOptions)
let select = old ? old.option == k : false },
this.currentOptions.push({ watch: {
key: k, current: function (o, n) {
value: value, this.initAnswerMode()
selected: select }
}) },
} methods: {
break initAnswerMode: function () {
} let q = this.currentQuestionTypeKey
}, switch (q) {
recordData: function() { case "radio":
return { this.currentOptions = []
paperId: this.info.exams_paper_id, let Q = this.currentQuestion
timeConsumed: this.timeConsumed, let old = this.finished.hx_firstOf(r => {
questionIndex: this.current, return r.qId == Q.exams_question_id
finished: this.finished })
} for (let k in Q.answer_options) {
}, let value = Q.answer_options[k]
computeTime: function(time) { let select = old ? old.option == k : false
let hours = Math.floor(time / 3600) this.currentOptions.push({
let minutes = Math.floor((time % 3600) / 60) key: k,
let seconds = Math.round(time % 60) value: value,
return (hours < 10 ? '0' + hours : hours) + ":" + (minutes < 10 ? '0' + minutes : minutes) + ":" + (seconds < 10 ? '0' + seconds : seconds) selected: select
}, })
doCountDown: function() { }
if(!this.counting || this.review) { break
return }
} },
if(this.info.reply_time) { recordData: function () {
let time = this.info.reply_time * 60 - this.timeConsumed return {
if(time <= 0) { paperId: this.info.exams_paper_id,
this.showFinish = true timeConsumed: this.timeConsumed,
} else { questionIndex: this.current,
this.countDown = this.computeTime(time) finished: this.finished
setTimeout(this.doCountDown, 1000) }
this.timeConsumed += 1 },
} computeTime: function (time) {
} else { let hours = Math.floor(time / 3600)
this.countDown = "不限时" let minutes = Math.floor((time % 3600) / 60)
} let seconds = Math.round(time % 60)
}, return (hours < 10 ? '0' + hours : hours) + ":" + (minutes < 10 ? '0' + minutes : minutes) + ":" + (seconds < 10 ? '0' + seconds : seconds)
onCollect: function(collect) { },
let that = this doCountDown: function () {
$.post(U('exams/Index/collect'), { if (!this.counting || this.review) {
action: collect, return
source_id: that.currentQuestion.exams_question_id }
}, function(res) { if (this.info.reply_time) {
let r = JSON.parse(res) let time = this.info.reply_time * 60 - this.timeConsumed
if(r.status == 1) { if (time <= 0) {
that.currentQuestion.is_collect = collect this.showFinish = true
} } else {
}) this.countDown = this.computeTime(time)
}, setTimeout(this.doCountDown, 1000)
onChoose: function(opt) { this.timeConsumed += 1
if(this.currentQuestionTypeKey == 'radio') { }
this.currentOptions.forEach( r => { } else {
r.selected = opt.key == r.key this.countDown = "不限时"
}) }
} },
}, onCollect: function (collect) {
onCounting: function() { let that = this
if(this.counting) { $.post(U('exams/Index/collect'), {
this.counting = false action: collect,
this.showPause = true source_id: that.currentQuestion.exams_question_id
} else { }, function (res) {
this.counting = true let r = JSON.parse(res)
this.doCountDown() if (r.status == 1) {
} that.currentQuestion.is_collect = collect
}, }
onContinue: function() { })
this.showPause = false },
this.onCounting() onChoose: function (opt) {
}, if (this.currentQuestionTypeKey == 'radio') {
onQuit: function() { this.currentOptions.forEach(r => {
this.showPause = false r.selected = opt.key == r.key
this.saveProgress() })
}, }
onCancel: function() { },
this.showFinish = false onCounting: function () {
window.history.back() if (this.counting) {
}, this.counting = false
onSure: function() { this.showPause = true
this.showFinish = false } else {
this.submitPaper() this.counting = true
}, this.doCountDown()
onNextQuestion: function() { }
if(this.current < this.totalQuestion) { },
this.cacheQuestion() onContinue: function () {
if(!this.review) { this.showPause = false
this.expand = false this.onCounting()
} },
this.current += 1 onQuit: function () {
} else { this.showPause = false
if(!this.review) { this.saveProgress()
this.showFinish = true },
} else { onCancel: function () {
window.history.back() this.showFinish = false
} window.history.back()
} },
}, onSure: function () {
onPreviousQuestion: function() { this.showFinish = false
if(this.current > 1) { this.submitPaper()
this.current -= 1 },
} onNextQuestion: function () {
}, if (this.current < this.totalQuestion) {
cacheQuestion: function() { this.cacheQuestion()
if(this.review) { if (!this.review) {
return this.expand = false
} }
let q = this.currentQuestion this.current += 1
let mode = this.finished.hx_firstOf( r => { return r.qId == q.exams_question_id }) } else {
if(mode) { if (!this.review) {
switch(this.currentQuestionTypeKey) { this.showFinish = true
case "radio": } else {
let my = this.currentMyOptions window.history.back()
if(my.length > 0) { }
mode.option = my[0].key }
} },
break onPreviousQuestion: function () {
} if (this.current > 1) {
} else { this.current -= 1
switch(this.currentQuestionTypeKey) { }
case "radio": },
let my = this.currentMyOptions cacheQuestion: function () {
if(my.length > 0) { if (this.review) {
this.finished.push({ return
qId: q.exams_question_id, }
option: my[0].key, let q = this.currentQuestion
key: "radio" let mode = this.finished.hx_firstOf(r => {
}) return r.qId == q.exams_question_id
} })
break if (mode) {
} switch (this.currentQuestionTypeKey) {
} case "radio":
}, let my = this.currentMyOptions
//Request if (my.length > 0) {
//Collect Params mode.option = my[0].key
collectParam: function() { }
let that = this break
let time = that.info.reply_time * 60 - that.timeConsumed }
let param = { } else {
anser_time: that.timeConsumed, switch (this.currentQuestionTypeKey) {
exams_mode: 1, case "radio":
paper_id: that.info.exams_paper_id, let my = this.currentMyOptions
ch_id: "{$_GET['s_id']}", if (my.length > 0) {
view_url: "{$_GET['view']}", this.finished.push({
is_timeout: time <= 0 ? 1 : 0, qId: q.exams_question_id,
paper_options_id: that.paperOptions.exams_paper_options_id, option: my[0].key,
} key: "radio"
that.finished.forEach( r => { })
let key = 'user_answer[' + r.qId + ']' }
switch(r.key) { break
case "radio": }
param[key] = r.option }
break },
} //Request
}) //Collect Params
return param collectParam: function () {
}, let that = this
saveProgress: function() { let time = that.info.reply_time * 60 - that.timeConsumed
let that = this let param = {
that.cacheQuestion() anser_time: that.timeConsumed,
let param = this.collectParam() exams_mode: 1,
$.post( paper_id: that.info.exams_paper_id,
U('exams/Index/doProgressExams'), ch_id: "{$_GET['s_id']}",
param, view_url: "{$_GET['view']}",
function(res) { is_timeout: time <= 0 ? 1 : 0,
if (typeof(res) != 'object') { paper_options_id: that.paperOptions.exams_paper_options_id,
try { }
// let res = JSON.parse(res) that.finished.forEach(r => {
} catch (e) { let key = 'user_answer[' + r.qId + ']'
ui.error("处理异常,请重新尝试") switch (r.key) {
} case "radio":
} param[key] = r.option
if (res.status == 1) { break
ui.success(res.data.info) }
window.location.href = res.data.jumpurl })
} else { return param
ui.error(res.message) },
} saveProgress: function () {
}, 'json') let that = this
}, that.cacheQuestion()
submitPaper: function() { let param = this.collectParam()
let that = this $.post(
that.cacheQuestion() U('exams/Index/doProgressExams'),
let param = this.collectParam() param,
$.post( function (res) {
U('exams/Index/doHaddleExams'), if (typeof (res) != 'object') {
param, try {
function(r) { let res = JSON.parse(res)
let res = JSON.parse(r) } catch (e) {
if (res.status == 1) { ui.error("处理异常,请重新尝试")
ui.success(res.data.info) }
window.location.href = res.data.jumpurl }
} else { if (res.status == 1) {
ui.error(res.message) ui.success(res.data.info)
} window.location.href = res.data.jumpurl
}) } else {
} ui.error(res.message)
} }
}) }, 'json')
},
submitPaper: function () {
let that = this
that.cacheQuestion()
let param = this.collectParam()
$.post(
U('exams/Index/doHaddleExams'),
param,
function (r) {
let res = JSON.parse(r)
if (res.status == 1) {
ui.success(res.data.info)
window.location.href = res.data.jumpurl
} else {
ui.error(res.message)
}
})
}
}
})
</script> </script>
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