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
22e3fe67
Commit
22e3fe67
authored
May 30, 2020
by
冷斌
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix bug
parent
54c6aa94
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
749 additions
and
724 deletions
+749
-724
apps/exams/Tpl/default/Index/examsroom_w3g.html
+749
-724
No files found.
apps/exams/Tpl/default/Index/examsroom_w3g.html
View file @
22e3fe67
<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>
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