Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
eduline
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
冷斌
eduline
Commits
590dda13
Commit
590dda13
authored
Jun 04, 2020
by
Administrator
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
781e3943
c9ca28ae
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
240 additions
and
719 deletions
+240
-719
apps/exams/Tpl/default/Index/examsroom_w3g.html
+240
-719
No files found.
apps/exams/Tpl/default/Index/examsroom_w3g.html
View file @
590dda13
<include
file=
"__THEME__/public_header_w3g"
/>
<style
type=
"text/css"
>
/*比较多用到的*/
.box
{
display
:
flex
;
display
:
-webkit-flex
;
align-items
:
center
;
}
.boxCn
{
display
:
flex
!important
;
display
:
-webkit-flex
;
align-items
:
center
;
justify-content
:
center
!important
;
}
.flex1
{
flex
:
1
;
}
/*遮罩层*/
.mask
{
position
:
fixed
!important
;
top
:
0
;
left
:
0
;
right
:
0
;
bottom
:
0
;
background
:
rgba
(
0
,
0
,
0
,
0.5
);
transition
:
all
.3s
ease-in-out
;
z-index
:
8
;
}
.popUp
{
background-color
:
#FFFFFF
;
z-index
:
10
;
width
:
16.875rem
;
border-radius
:
0.5rem
;
overflow
:
hidden
;
position
:
fixed
;
top
:
50%
;
left
:
50%
;
-webkit-transform
:
translate
(
-50%
,
-50%
);
-moz-transform
:
translate
(
-50%
,
-50%
);
transform
:
translate
(
-50%
,
-50%
);
}
.popUp_title
{
font-family
:
PingFangSC-Semibold
,
PingFang
SC
;
font-weight
:
600
;
font-size
:
1.125rem
;
height
:
1.5625rem
;
line-height
:
1.5625rem
;
margin-top
:
0.9375rem
;
padding
:
0
1rem
;
box-sizing
:
border-box
;
text-align
:
center
;
}
.popUp_content
{
padding
:
1rem
1rem
;
box-sizing
:
border-box
;
text-align
:
center
;
font-size
:
0.875rem
;
color
:
#333333
;
}
.popUp_btns
{
border-top
:
1px
solid
#eeeeee
;
}
.popUp_btn
{
flex
:
1
;
text-align
:
center
;
line-height
:
3.125rem
;
height
:
3.125rem
;
font-family
:
PingFangSC-Semibold
,
PingFang
SC
;
font-weight
:
600
;
font-size
:
1rem
;
box-sizing
:
border-box
;
background-color
:
#FFFFFF
;
}
.popUp_btn0
{
color
:
#999999
;
border-right
:
1px
solid
#eeeeee
;
}
.popUp_btn1
{
color
:
#65C000
;
}
/*jixu*/
.stopBox
{
width
:
100%
;
position
:
fixed
;
top
:
50%
;
left
:
50%
;
z-index
:
10
;
-webkit-transform
:
translate
(
-50%
,
-50%
);
-moz-transform
:
translate
(
-50%
,
-50%
);
transform
:
translate
(
-50%
,
-50%
);
}
.stopBtn
{
width
:
10rem
;
height
:
3rem
;
line-height
:
3rem
;
display
:
block
;
margin
:
2rem
auto
;
color
:
#FFFFFF
;
font-size
:
1rem
;
font-family
:
PingFangSC-Semibold
,
PingFang
SC
;
font-weight
:
600
;
box-sizing
:
border-box
;
text-align
:
center
;
border-radius
:
1.5rem
;
}
.stopBtn_on
{
background-color
:
#A3E460
;
}
.stopBtn_out
{
border
:
1px
solid
rgba
(
204
,
204
,
204
,
1
);
}
body
{
background-color
:
#fff
;
}
.testPaperTop
{
height
:
2.25rem
;
padding
:
0
0.75rem
;
box-sizing
:
border-box
;
border-bottom
:
1px
solid
#F5F5F5
;
width
:
100%
;
position
:
fixed
;
top
:
0
;
left
:
0
;
z-index
:
1
;
background-color
:
#FFFFFF
;
}
.testPaperTop_time
{
font-size
:
0.75rem
}
.testPaperTop_da
{
font-size
:
0.75rem
;
color
:
#999999
;
}
.testPaperTop_pau
{
margin-left
:
1.875rem
;
width
:
0.75rem
;
height
:
0.75rem
;
}
.testPaperBotm
{
padding
:
0.75rem
0.75rem
0.75rem
;
box-sizing
:
border-box
;
margin-top
:
2.25rem
;
}
.testPaperNum
{
margin-right
:
0.75rem
;
color
:
#999999
;
font-size
:
0.75rem
;
}
.testPaperLei
{
font-size
:
0.75rem
;
color
:
#333333
;
}
.testPaperColl
{
width
:
1rem
;
height
:
1rem
;
}
.testPaperInfo
{
margin-top
:
0.5rem
;
font-size
:
1rem
;
line-height
:
1.875rem
;
color
:
#333333
;
}
.testPaperAnswer
{
margin-top
:
1rem
;
align-items
:
flex-start
;
}
.testPaperAnswer_num
{
display
:
inline-block
;
width
:
2.25rem
;
height
:
2.25rem
;
border-radius
:
100%
;
border
:
1px
solid
rgba
(
163
,
228
,
96
,
1
);
text-align
:
center
;
line-height
:
2.25rem
;
color
:
#65C000
;
font-family
:
PingFangSC-Semibold
,
PingFang
SC
;
font-weight
:
600
;
font-size
:
0.875rem
;
margin-right
:
0.75rem
;
}
.testPaperAnswer_numAt
{
background-color
:
#A3E460
;
color
:
#FFFFFF
;
}
.testPaperAnswer_desc
{
line-height
:
1.25rem
;
margin
:
0
;
}
.testPaperBtns
{
justify-content
:
space-between
;
padding
:
3rem
0.75rem
1rem
;
box-sizing
:
border-box
;
width
:
100%
;
}
.testPaperBtn
{
width
:
10rem
;
height
:
3rem
;
line-height
:
3rem
;
text-align
:
center
;
border
:
1px
solid
rgba
(
163
,
228
,
96
,
1
);
border-radius
:
1.5rem
;
box-sizing
:
border-box
;
font-size
:
1rem
;
font-family
:
PingFangSC-Semibold
,
PingFang
SC
;
font-weight
:
600
;
color
:
#65C000
;
}
.testPaperBtn1
{
color
:
#FFFFFF
;
background
:
rgba
(
163
,
228
,
96
,
1
);
}
.testPaperJiedaPage
{
padding
:
0
0.75rem
;
box-sizing
:
border-box
;
}
.testPaperJiedaBox
{
padding
:
1rem
0
;
}
.testPaperJiedaBtn
{
color
:
#65C000
;
font-size
:
0.875rem
;
font-family
:
PingFangSC-Semibold
,
PingFang
SC
;
font-weight
:
600
;
}
.testPaperJiedaBtn_icon
{
margin-left
:
0.5rem
;
width
:
0.75rem
;
height
:
0.75rem
;
}
.testPaperAnswers
{
padding
:
0.5rem
0
0.25rem
;
}
.testPaperAnswer
{
padding
:
0.5rem
0
;
color
:
#333333
;
font-size
:
1rem
;
margin
:
0
;
}
.testPaperAnswer_n
{
color
:
#65C000
;
}
.testPaperAnswer_e
{
color
:
red
;
}
.testPaperAnswer_infoBox
{
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
;
color
:
#333333
;
font-size
:
1rem
;
padding
:
0.75rem
0
0.75rem
0.75rem
;
box-sizing
:
border-box
;
position
:
relative
;
margin
:
0
;
}
.testPaperAnswer_infoTitle
::before
{
content
:
""
;
position
:
absolute
;
left
:
0
;
top
:
50%
;
width
:
4px
;
height
:
4px
;
border-radius
:
100%
;
background-color
:
#A3E460
;
margin-top
:
-2px
;
}
.testPaperAnswer_info
{
color
:
#333333
;
font-size
:
1rem
;
line-height
:
1.875rem
;
}
</style>
<div
id=
"app"
>
<div
v-show=
"!review"
class=
"testPaperTop box"
>
<p
class=
"testPaperTop_time flex1"
>
{{countDown}}
</p>
<span
class=
"testPaperTop_da"
>
答题卡
</span>
<img
@
click=
"onCounting"
class=
"testPaperTop_pau"
:src=
"counting ? '__THEME__/img/pau.png' : '__THEME__/img/right_arrow.png'"
>
</div>
<div
class=
"testPaperBotm"
>
<div
class=
"box"
>
<span
class=
"testPaperNum"
>
{{current}}/{{totalQuestion}}
</span>
<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 == 1"
@
click=
"onCollect(0)"
class=
"testPaperColl"
src=
"__THEME__/img/share_star.png"
>
<include
file=
"__THEME__/public_header_w3g"
/>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"__APP__/css/public.css"
>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"__APP__/icon/iconfont.css"
>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"__APP__/css/public_header_footer_media.css"
>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"__APP__/css/exam_2.0.css"
>
<div
class=
"cover"
></div>
<div
class=
"min-height-wrap"
>
<div
class=
"exam-header"
>
<div
class=
"back-date"
>
<i
class=
"icon icon-fanhui1"
style=
"display: none;"
></i>
<small>
<php>
if($paper['reply_time']){
</php>
<span
id=
"time_hh"
>
-
</span>
:
<span
id=
"time_mm"
>
-
</span>
:
<span
id=
"time_ss"
>
-
</span>
<php>
}else{
</php>
<span>
不限时
</span>
<php>
}
</php>
</small>
</div>
<template
v-if=
"showChoiceQuestion"
>
<div
v-html=
"currentQuestion.content"
class=
"testPaperInfo"
></div>
<ul>
<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>
<div
v-html=
"opt.value"
class=
"testPaperAnswer_desc flex1"
style=
"margin-top: 0.625rem;"
></div>
</li>
</ul>
</template>
</div>
<div
v-if=
"current == 1"
class=
"testPaperBtns boxCn"
>
<p
@
click=
"onNextQuestion"
class=
"testPaperBtn testPaperBtn1"
style=
"width: 15rem;"
>
下一题
</p>
</div>
<div
v-if=
"current > 1"
class=
"testPaperBtns box"
>
<p
@
click=
"onPreviousQuestion"
class=
"testPaperBtn"
>
上一题
</p>
<p
@
click=
"onNextQuestion"
class=
"testPaperBtn testPaperBtn1"
>
{{nextButton}}
</p>
</div>
<!-- 解析 -->
<div
v-if=
"review"
class=
"testPaperJiedaPage"
>
<div
class=
"box testPaperJiedaBox"
>
<span
@
click=
"expand = !expand"
class=
"testPaperJiedaBtn box"
>
{{expand ? '收起解析' : '查看解析'}}
<img
class=
"testPaperJiedaBtn_icon"
src=
"__THEME__/img/openBtn.png"
></span>
</div>
<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 currentMyOptions"
:key=
"index"
:class=
"answer.right ? 'testPaperAnswer_n' : 'testPaperAnswer_e'"
>
{{answer.key}}
</span></li>
</ul>
<div
v-if=
"expand"
class=
"testPaperAnswer_infoBox"
>
<p
class=
"testPaperAnswer_infoTitle"
>
解析
</p>
<div
v-html=
"currentAnalyze"
class=
"testPaperAnswer_info"
>
</div>
<div
class=
"view-stop"
>
<neq
name=
"Think.get.joinType"
value=
"2"
><i
class=
"icon icon-zanting"
></i></neq>
<a
href=
"javascript:;"
id=
"show-answer-card"
><i
class=
"icon icon-datiqia"
></i></a>
</div>
<neq
name=
"Think.get.joinType"
value=
"2"
>
<ul
class=
"the-stop"
>
<li>
继续
</li>
<if
condition=
"$paper['assembly_type'] neq 1"
><li
id=
"progressExams"
>
下次再做
</li></if>
</ul>
</neq>
</div>
<!-- 交卷 -->
<div
class=
"mask"
v-if=
"showFinish"
>
<div
class=
"popUp"
>
<p
class=
"popUp_title"
>
提示
</p>
<div
class=
"popUp_content"
>
是否交卷并退出考试?
</div>
<div
class=
"popUp_btns box"
>
<span
@
click=
"onCancel"
class=
"popUp_btn popUp_btn0 flex1"
>
取消
</span>
<span
@
click=
"onSure"
class=
"popUp_btn popUp_btn1 flex1"
>
确定
</span>
</div>
<div
class=
"answer-card"
>
<php>
$question_num = 1;
</php>
<volist
name=
"paper_options.options_type"
id=
"options_type"
>
<php>
if(!$paper_options['options_questions_data'][$options_type['question_type']]){
break;
}
</php>
<dl>
<dt><h6>
{$options_type.type_info.question_type_title}
</h6></dt>
<dd>
<volist
name=
"paper_options['options_questions_data'][$options_type['question_type']]"
id=
"question"
>
<a
id=
"card{$question_num}"
<
php
>
if(isset($tempData['content'][$question['exams_question_id']])){ echo "class='on go_question'";}
</php>
href="javascript:;" data-question_num="{$question_num}" class="go_question">{$question_num}
</a>
<php>
$question_num++;
</php>
</volist>
</dd>
</dl>
</volist>
<div
class=
"btns-complete"
>
<a
href=
"javascript:void(0)"
style=
"color:#fff;"
class=
"assignment"
>
交卷
</a>
</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>
<input
type=
"hidden"
name=
"reply_time"
value=
"{$paper.reply_time|default='0'}"
/>
<form
name=
"answers"
method=
"POST"
action=
"{:U('exams/Index/doHaddleExams')}"
>
<input
type=
"hidden"
name=
"anser_time"
id=
"anser_time"
value=
"{$tempData.anser_time|default='0'}"
>
<input
type=
"hidden"
name=
"exams_mode"
value=
"{$Think.get.joinType|default=1}"
>
<input
type=
"hidden"
name=
"paper_id"
value=
"{$paper.exams_paper_id}"
>
<input
type=
"hidden"
name=
"ch_id"
value=
"{$_GET['s_id']}"
>
<input
type=
"hidden"
name=
"view_url"
value=
"{$_GET['view']}"
>
<input
type=
"hidden"
name=
"is_timeout"
value=
"0"
>
<php>
if($tempData){
</php>
<input
type=
"hidden"
name=
"exams_users_id"
value=
"{$tempData.exams_users_id}"
>
<php>
}
</php>
<input
type=
"hidden"
name=
"paper_options_id"
value=
"{$paper_options.exams_paper_options_id}"
>
<div
class=
"static-exam"
>
<php>
$question_num = 1;
</php>
<volist
name=
"paper_options.options_type"
id=
"options_type"
>
<switch
name=
"options_type.question_type_key"
>
<case
value=
"radio|judge|multiselect"
>
<!-- 单选题 -->
<volist
name=
"paper_options['options_questions_data'][$options_type['question_type']]"
id=
"question"
>
<dl
id=
"ex{$question_num}"
data-type=
"{$options_type.question_type_key}"
data-question_num=
"{$question_num}"
>
<dt>
<h5><small>
{$question_num}
</small>
/{$paper_options.questions_count}
<strong>
{$options_type.type_info.question_type_title}
</strong></h5>
<h3>
{$question.content}
</h3>
</dt>
<dd>
<php>
if($tempData){
$content = isset($tempData['content'][$question['exams_question_id']]) ? $tempData['content'][$question['exams_question_id']] : [];
}else{
$content = [];
}
</php>
<volist
name=
"question.answer_options"
id=
"answer"
>
<div
class=
"answer_box"
>
<p
class=
"answer_p<php>if(in_array($key,$content)){</php> on<php>}</php>"
data-answer=
"{$key}"
><em>
{$key}
</em>
{$answer}
</p>
</div>
</volist>
<div
class=
"user_answer_hidden"
>
<input
type=
"hidden"
name=
"user_answer[{$question.exams_question_id}]"
value=
"{:implode(',',$content)}"
>
</div>
</dd>
<a
href=
"javascript:;"
data-question_num=
"{$question_num}"
class=
"next next_question"
>
下一题
</a>
<div
class=
"operation"
>
<div
class=
"operation-tit"
>
<eq
name=
"isPractice"
value=
"1"
><strong><small>
查看解析
</small><i
class=
"icon icon-arrowDown"
></i></strong></eq>
<php>
if($question['is_collect'] == 1){
</php>
<b
data-question_id=
"{$question.exams_question_id}"
data-action=
"0"
>
<i
class=
"icon icon-shoucang2"
style=
"color:#F7B659;"
></i><small>
已收藏
</small>
</b>
<php>
}else{
</php>
<b
data-question_id=
"{$question.exams_question_id}"
data-action=
"1"
>
<i
class=
"icon icon-area1"
></i><span>
考点:{$question.exams_point_title}
</span>
<i
class=
"icon icon-shoucang2"
></i><small>
收藏习题
</small>
</b>
<php>
}
</php>
</div>
<eq
name=
"isPractice"
value=
"1"
>
<!--答案解析-->
<div
class=
"analysis"
>
<div
class=
"analysis-pic"
>
<h6>
正确答案
</h6><abbr><volist
name=
"question.answer_true_option"
id=
"answer_true"
>
{$answer_true}
</volist></abbr>
</div>
<div
class=
"analysis-txt"
>
<h6>
解析
</h6>
<p>
{$question.analyze}
</p>
</div>
</div>
</eq>
</div>
</dl>
<php>
$question_num++;
</php>
</volist>
</case>
<case
value=
"completion"
>
<!-- 填空题 -->
<volist
name=
"paper_options['options_questions_data'][$options_type['question_type']]"
id=
"question"
>
<dl
id=
"ex{$question_num}"
data-type=
"{$options_type.question_type_key}"
data-question_num=
"{$question_num}"
>
<dt>
<h5><small>
{$question_num}
</small>
/{$paper_options.questions_count}
<strong>
{$options_type.type_info.question_type_title}
</strong></h5>
<h3>
{$question.content}
</h3>
</dt>
<dd>
<php>
if($tempData){
$content = isset($tempData['content'][$question['exams_question_id']]) ? $tempData['content'][$question['exams_question_id']] : [];
}else{
$content = [];
}
</php>
<volist
name=
"question.answer_true_option"
id=
"answer"
>
<label>
{$i}、
<input
type=
"text"
class=
"anserItem"
<
php
>
if($content){
</php>
value="{$content[$i-1]}"
<php>
}
</php>
name="user_answer[{$question.exams_question_id}][]">
</label>
</volist>
</dd>
<a
href=
"javascript:;"
data-question_num=
"{$question_num}"
class=
"next next_question"
>
下一题
</a>
<div
class=
"operation"
>
<div
class=
"operation-tit"
>
<eq
name=
"isPractice"
value=
"1"
><strong><small>
查看解析
</small><i
class=
"icon icon-arrowDown"
></i></strong></eq>
<php>
if($question['is_collect'] == 1){
</php>
<b
data-question_id=
"{$question.exams_question_id}"
data-action=
"0"
><i
class=
"icon icon-shoucang2"
style=
"color:#F7B659;"
></i><small>
已收藏
</small></b>
<php>
}else{
</php>
<b
data-question_id=
"{$question.exams_question_id}"
data-action=
"1"
>
<i
class=
"icon icon-area1"
></i><span>
考点:{$question.exams_point_title}
</span>
<i
class=
"icon icon-shoucang2"
></i><small>
收藏习题
</small>
</b>
<php>
}
</php>
</div>
<eq
name=
"isPractice"
value=
"1"
>
<!--答案解析-->
<div
class=
"analysis"
>
<div
class=
"analysis-pic"
>
<h5>
正确答案
</h5>
<ul>
<volist
name=
"question.answer_true_option"
id=
"answer_true"
>
<li>
{$i}、{$answer_true}
</li>
</volist>
</ul>
</div>
<div
class=
"analysis-txt"
>
<h6>
解析
</h6>
<p>
{$question.analyze}
</p>
</div>
</div>
</eq>
</div>
</dl>
<php>
$question_num++;
</php>
</volist>
</case>
<case
value=
"essays"
>
<!-- 简述题-->
<volist
name=
"paper_options['options_questions_data'][$options_type['question_type']]"
id=
"question"
>
<dl
id=
"ex{$question_num}"
data-type=
"{$options_type.question_type_key}"
data-question_num=
"{$question_num}"
>
<dt>
<h5><small>
{$question_num}
</small>
/{$paper_options.questions_count}
<strong>
{$options_type.type_info.question_type_title}
</strong></h5>
<h3>
{$question.content}
</h3>
</dt>
<dd>
<php>
if($tempData){
$content = isset($tempData['content'][$question['exams_question_id']]) ? $tempData['content'][$question['exams_question_id']] : [];
}else{
$content = [];
}
</php>
<textarea
class=
"anserItem"
name=
"user_answer[{$question.exams_question_id}]"
>
{$content[0]|default=''}
</textarea>
</dd>
<a
href=
"javascript:;"
data-question_num=
"{$question_num}"
class=
"next next_question"
>
下一题
</a>
<div
class=
"operation"
>
<div
class=
"operation-tit"
>
<eq
name=
"isPractice"
value=
"1"
><strong><small>
查看解析
</small><i
class=
"icon icon-arrowDown"
></i></strong></eq>
<php>
if($question['is_collect'] == 1){
</php>
<b
data-question_id=
"{$question.exams_question_id}"
data-action=
"0"
><i
class=
"icon icon-shoucang2"
style=
"color:#F7B659;"
></i><small>
已收藏
</small></b>
<php>
}else{
</php>
<b
data-question_id=
"{$question.exams_question_id}"
data-action=
"1"
>
<i
class=
"icon icon-area1"
></i><span>
考点:{$question.exams_point_title}
</span>
<i
class=
"icon icon-shoucang2"
></i><small>
收藏习题
</small>
</b>
<php>
}
</php>
</div>
<eq
name=
"isPractice"
value=
"1"
>
<!--答案解析-->
<div
class=
"analysis"
>
<div
class=
"analysis-txt"
>
<h6>
解析
</h6>
<p>
{$question.analyze}
</p>
</div>
</div>
</eq>
</div>
</dl>
<php>
$question_num++;
</php>
</volist>
</case>
</switch>
</volist>
</div>
</div>
</form>
</div>
<
include
file=
"__THEME__/public_footer_w3g"
/
>
<include
file=
"__THEME__/public_footer_w3g"
/>
<
script
src=
"__APP__/js/public_header_footer_media.js"
></script
>
<script
src=
"__APP__/js/public_exam_3g.js"
></script>
<script
type=
"text/javascript"
>
new
Vue
({
el
:
"#app"
,
data
:
function
()
{
return
{
info
:
{},
temp
:
{},
current
:
1
,
paperOptions
:
{},
counting
:
true
,
review
:
false
,
countDown
:
"00:00:00"
,
timeConsumed
:
0
,
expand
:
false
,
showPause
:
false
,
showFinish
:
false
,
//选项
currentOptions
:
[],
finished
:
[]
if
(
"{$_GET['examsresult']}"
){
var
re
=
"{:jiemi($_GET['examsresult'])}"
,
ve
=
"{:jiemi($_GET['view'])}"
;
layer
.
open
({
content
:
'课时考试'
,
btn
:
[
'查看结果'
,
'返回课程'
],
yes
:
function
(){
window
.
location
.
href
=
re
;
},
no
:
function
(){
window
.
location
.
href
=
ve
;
}
},
computed
:
{
//computed
nextButton
:
function
()
{
if
(
this
.
review
)
{
return
this
.
current
==
this
.
totalQuestion
?
'返回'
:
'下一题'
}
else
{
return
this
.
current
==
this
.
totalQuestion
?
'交卷'
:
'下一题'
}
},
});
totalQuestion
:
function
()
{
let
count
=
0
let
data
=
this
.
paperOptions
.
options_questions_data
this
.
paperOptions
.
options_type
.
forEach
(
r
=>
{
count
+=
data
[
r
.
question_type
].
length
})
return
count
},
currentTypeIndex
:
function
()
{
let
count
=
0
let
data
=
this
.
paperOptions
.
options_questions_data
let
current
=
this
.
current
for
(
let
i
=
0
;
i
<
this
.
paperOptions
.
options_type
.
length
;
i
++
)
{
let
r
=
this
.
paperOptions
.
options_type
[
i
]
let
next
=
count
+
data
[
r
.
question_type
].
length
if
(
current
>
count
&&
current
<=
next
)
{
return
i
}
else
{
count
=
next
}
}
},
currentQuestions
:
function
()
{
let
optionType
=
this
.
currentQuestionType
let
questionType
=
optionType
.
question_type
let
questionData
=
this
.
paperOptions
.
options_questions_data
let
questions
=
questionData
[
questionType
]
return
questions
},
currentQuestionType
:
function
()
{
return
this
.
paperOptions
.
options_type
[
this
.
currentTypeIndex
]
},
currentQuestionTypeName
:
function
()
{
return
this
.
currentQuestionType
.
type_info
.
question_type_title
},
currentQuestionTypeKey
:
function
()
{
return
this
.
currentQuestionType
.
question_type_key
},
currentQuestion
:
function
()
{
let
count
=
0
let
data
=
this
.
paperOptions
.
options_questions_data
let
current
=
this
.
current
for
(
let
i
=
0
;
i
<
this
.
paperOptions
.
options_type
.
length
;
i
++
)
{
let
r
=
this
.
paperOptions
.
options_type
[
i
]
let
next
=
count
+
data
[
r
.
question_type
].
length
if
(
current
>
count
&&
current
<=
next
)
{
return
data
[
r
.
question_type
][
current
-
count
-
1
]
}
else
{
count
=
next
}
}
},
//选择题答案
currentRightOptions
:
function
()
{
return
this
.
currentQuestion
.
answer_true_option
},
//我的答案
currentMyOptions
:
function
()
{
let
cur
=
this
.
currentRightOptions
return
this
.
currentOptions
.
filter
(
r
=>
{
return
r
.
selected
}).
map
(
r
=>
{
return
{
right
:
cur
.
hx_indexOf
(
k
=>
{
return
k
==
r
.
key
})
!=
-
1
,
key
:
r
.
key
}
})
},
//解析
currentAnalyze
:
function
()
{
return
this
.
currentQuestion
.
analyze
},
//Helper
showChoiceQuestion
:
function
()
{
let
key
=
this
.
currentQuestionTypeKey
return
key
==
'radio'
||
key
==
'multiselect'
||
key
==
'judge'
}
},
created
:
function
()
{
this
.
info
=
{:
json_encode
(
$paper
)};
this
.
temp
=
{:
json_encode
(
$tempData
)};
this
.
paperOptions
=
{:
json_encode
(
$paper_options
)};
this
.
review
=
"{$review}"
this
.
initAnswerMode
()
this
.
doCountDown
()
if
(
this
.
review
)
{
this
.
countDown
=
""
this
.
expand
=
true
}
console
.
log
(
"Review = "
+
this
.
review
)
console
.
log
(
this
.
info
)
console
.
log
(
this
.
temp
)
console
.
log
(
this
.
paperOptions
)
},
watch
:
{
current
:
function
(
o
,
n
)
{
this
.
initAnswerMode
()
}
},
methods
:
{
initAnswerMode
:
function
()
{
let
q
=
this
.
currentQuestionTypeKey
switch
(
q
)
{
case
"radio"
:
this
.
currentOptions
=
[]
let
Q
=
this
.
currentQuestion
let
old
=
this
.
finished
.
hx_firstOf
(
r
=>
{
return
r
.
qId
==
Q
.
exams_question_id
})
for
(
let
k
in
Q
.
answer_options
)
{
let
value
=
Q
.
answer_options
[
k
]
let
select
=
old
?
old
.
option
==
k
:
false
this
.
currentOptions
.
push
({
key
:
k
,
value
:
value
,
selected
:
select
})
}
break
}
},
recordData
:
function
()
{
return
{
paperId
:
this
.
info
.
exams_paper_id
,
timeConsumed
:
this
.
timeConsumed
,
questionIndex
:
this
.
current
,
finished
:
this
.
finished
}
},
doCountDown
:
function
()
{
if
(
!
this
.
counting
||
this
.
review
)
{
return
}
if
(
this
.
info
.
reply_time
)
{
let
time
=
this
.
info
.
reply_time
*
60
-
this
.
timeConsumed
if
(
time
<=
0
)
{
this
.
showFinish
=
true
}
else
{
let
hours
=
Math
.
floor
(
time
/
3600
)
let
minutes
=
Math
.
floor
((
time
%
3600
)
/
60
)
let
seconds
=
Math
.
round
(
time
%
60
)
this
.
countDown
=
(
hours
<
10
?
'0'
+
hours
:
hours
)
+
":"
+
(
minutes
<
10
?
'0'
+
minutes
:
minutes
)
+
":"
+
(
seconds
<
10
?
'0'
+
seconds
:
seconds
)
setTimeout
(
this
.
doCountDown
,
1000
)
this
.
timeConsumed
+=
1
}
}
else
{
this
.
countDown
=
"不限时"
}
},
onCollect
:
function
(
collect
)
{
let
that
=
this
$
.
post
(
U
(
'exams/Index/collect'
),
{
action
:
collect
,
source_id
:
that
.
currentQuestion
.
exams_question_id
},
function
(
res
)
{
let
r
=
JSON
.
parse
(
res
)
if
(
r
.
status
==
1
)
{
that
.
currentQuestion
.
is_collect
=
collect
}
})
},
onChoose
:
function
(
opt
)
{
if
(
this
.
currentQuestionTypeKey
==
'radio'
)
{
this
.
currentOptions
.
forEach
(
r
=>
{
r
.
selected
=
opt
.
key
==
r
.
key
})
}
},
onCounting
:
function
()
{
if
(
this
.
counting
)
{
this
.
counting
=
false
this
.
showPause
=
true
}
else
{
this
.
counting
=
true
this
.
doCountDown
()
}
},
onContinue
:
function
()
{
this
.
showPause
=
false
this
.
onCounting
()
},
onQuit
:
function
()
{
this
.
showPause
=
false
this
.
saveProgress
()
},
onCancel
:
function
()
{
this
.
showFinish
=
false
window
.
history
.
back
()
},
onSure
:
function
()
{
this
.
showFinish
=
false
this
.
submitPaper
()
},
onNextQuestion
:
function
()
{
if
(
this
.
current
<
this
.
totalQuestion
)
{
this
.
cacheQuestion
()
if
(
!
this
.
review
)
{
this
.
expand
=
false
}
this
.
current
+=
1
}
else
{
if
(
!
this
.
review
)
{
this
.
showFinish
=
true
}
else
{
window
.
history
.
back
()
}
}
},
onPreviousQuestion
:
function
()
{
if
(
this
.
current
>
1
)
{
this
.
current
-=
1
}
},
cacheQuestion
:
function
()
{
if
(
this
.
review
)
{
return
}
let
q
=
this
.
currentQuestion
let
mode
=
this
.
finished
.
hx_firstOf
(
r
=>
{
return
r
.
qId
==
q
.
exams_question_id
})
if
(
mode
)
{
switch
(
this
.
currentQuestionTypeKey
)
{
case
"radio"
:
let
my
=
this
.
currentMyOptions
if
(
my
.
length
>
0
)
{
mode
.
option
=
my
[
0
].
key
}
break
}
}
else
{
switch
(
this
.
currentQuestionTypeKey
)
{
case
"radio"
:
let
my
=
this
.
currentMyOptions
if
(
my
.
length
>
0
)
{
this
.
finished
.
push
({
qId
:
q
.
exams_question_id
,
option
:
my
[
0
].
key
,
key
:
"radio"
})
}
break
}
}
},
//Request
//Collect Params
collectParam
:
function
()
{
let
that
=
this
let
time
=
that
.
info
.
reply_time
*
60
-
that
.
timeConsumed
let
param
=
{
anser_time
:
that
.
timeConsumed
,
exams_mode
:
1
,
paper_id
:
that
.
info
.
exams_paper_id
,
ch_id
:
"{$_GET['s_id']}"
,
view_url
:
"{$_GET['view']}"
,
is_timeout
:
time
<=
0
?
1
:
0
,
paper_options_id
:
that
.
paperOptions
.
exams_paper_options_id
,
}
that
.
finished
.
forEach
(
r
=>
{
let
key
=
'user_answer['
+
r
.
qId
+
']'
switch
(
r
.
key
)
{
case
"radio"
:
param
[
key
]
=
r
.
option
break
}
})
return
param
},
saveProgress
:
function
()
{
let
that
=
this
that
.
cacheQuestion
()
let
param
=
this
.
collectParam
()
$
.
post
(
U
(
'exams/Index/doProgressExams'
),
param
,
function
(
res
)
{
if
(
typeof
(
res
)
!=
'object'
)
{
try
{
let
res
=
JSON
.
parse
(
res
)
}
catch
(
e
)
{
ui
.
error
(
"处理异常,请重新尝试"
)
}
}
if
(
res
.
status
==
1
)
{
ui
.
success
(
res
.
data
.
info
)
window
.
location
.
href
=
res
.
data
.
jumpurl
}
else
{
ui
.
error
(
res
.
message
)
}
})
},
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>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment