Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
students
online-quiz-react
Commits
67f034ae
Commit
67f034ae
authored
Aug 12, 2020
by
김민수
Browse files
No commit message
No commit message
parent
dab3de3f
Changes
4
Show whitespace changes
Inline
Side-by-side
src/Admin.js
View file @
67f034ae
...
...
@@ -54,9 +54,9 @@ function Admin() {
localStorage
.
setItem
(
'
T
'
,
time
*
1000
)
setDone
(
true
)
}
}
function
addSelectOption
()
{
let
list
=
function
()
{
return
<
div
className
=
"
input-group
"
>
...
...
@@ -65,15 +65,14 @@ function Admin() {
<
input
type
=
"
radio
"
id
=
"
option
"
/>
<
/div
>
<
/div
>
<
input
type
=
"
text
"
class
=
"
form-control
"
placeholder
=
"
보기를 입력하세요
"
onChange
=
{
handleChangechoose
}
/
>
<
input
type
=
"
text
"
class
Name
=
"
form-control
"
placeholder
=
"
보기를 입력하세요
"
onChange
=
{
handleChangechoose
}
/
>
<
/div
>
}
setselectOption
(
list
)
}
function
handleClickQuiz
()
{
let
addQuiz
=
function
()
{
return
<
a
className
=
"
nav-link
"
id
=
"
Quiz4-tab
"
data
-
toggle
=
"
pill
"
href
=
"
#Quiz4
"
role
=
"
tab
"
>
Quiz
<
/a
>
return
<
a
className
=
"
nav-link
"
id
=
"
Quiz4-tab
"
data
-
toggle
=
"
pill
"
href
=
"
#Quiz4
"
role
=
"
tab
"
>
Quiz
4
<
/a
>
}
setaddQuiz
(
addQuiz
)
}
...
...
@@ -84,25 +83,26 @@ function Admin() {
<
div
className
=
"
row justify-content-md-center mt-5
"
>
<
div
className
=
"
col-2 text-center border
"
>
<
div
className
=
"
container-fluid
"
>
<
div
className
=
"
navbar-header p-3
"
>
<
p
className
=
"
navbar-brand border-bottom
"
>
관리자
페이지
<
/p
>
<
/div
>
<
div
className
=
"
nav flex-column nav-pills
"
id
=
"
v-pills-tab
"
role
=
"
tablist
"
>
<
p
className
=
"
border-bottom h3
"
>
관리자
페이지
<
/p
>
<
p
className
=
"
border-bottom h5
"
>
관리자
설정
변경하기
<
/p
>
<
p
className
=
"
navbar-text border-bottom
"
>
관리자
설정
변경하기
<
/p
>
<
a
className
=
""
id
=
"
setting-tab
"
data
-
toggle
=
'
pill
'
href
=
"
#setting
"
role
=
"
tab
"
>
Setting
<
/a
>
<
a
className
=
"
nav-link
"
id
=
"
setting-tab
"
data
-
toggle
=
'
pill
'
href
=
"
#setting
"
>
Setting
<
/a
>
<
p
className
=
"
border-bottom
h5
"
>
Quiz
입력하기
<
/p
>
<
p
className
=
"
navbar-text
border-bottom
"
>
Quiz
입력하기
<
/p
>
<
a
className
=
"
nav-link
"
id
=
"
Quiz1-tab
"
data
-
toggle
=
"
pill
"
href
=
"
#Quiz1
"
role
=
"
tab
"
>
Quiz1
<
/a
>
<
a
className
=
"
nav-link
"
id
=
"
Quiz2-tab
"
data
-
toggle
=
"
pill
"
href
=
"
#Quiz2
"
role
=
"
tab
"
>
Quiz2
<
/a
>
<
a
className
=
"
nav-link
"
id
=
"
Quiz3-tab
"
data
-
toggle
=
"
pill
"
href
=
"
#Quiz3
"
role
=
"
tab
"
>
Quiz3
<
/a
>
<
a
className
=
"
nav-link
"
id
=
"
Quiz1-tab
"
data
-
toggle
=
"
pill
"
href
=
"
#Quiz1
"
>
Quiz1
<
/a
>
<
a
className
=
"
nav-link
"
id
=
"
Quiz2-tab
"
data
-
toggle
=
"
pill
"
href
=
"
#Quiz2
"
>
Quiz2
<
/a
>
<
a
className
=
"
nav-link
"
id
=
"
Quiz3-tab
"
data
-
toggle
=
"
pill
"
href
=
"
#Quiz3
"
>
Quiz3
<
/a
>
{
addQuiz
}
<
button
className
=
"
btn btn-danger navbar-btn
"
onClick
=
{
handleClickQuiz
}
>
Quiz
추가
<
/button
>
<
/div
>
<
/div
>
<
/div
>
<
div
className
=
"
col-8
"
>
...
...
@@ -113,20 +113,20 @@ function Admin() {
<
div
className
=
"
row d-flex justify-content-center
"
>
<
div
className
=
"
col-8
"
>
<
h
1
className
=
"
p-3 border
"
>
관리자
설정
변경
창
<
/h
1
>
<
h
2
className
=
"
p-3 border
text-center bg-danger
"
>
관리자
설정변경
<
/h
2
>
<
div
className
=
"
p-3 border
"
>
<
h
2
>
변경할
비밀번호를
입력하세요
<
/h
2
>
<
input
type
=
"
text
"
onChange
=
{
handleChangePassword
}
placeholder
=
"
New Password
"
/>
<
h
3
>
변경할
비밀번호를
입력하세요
<
/h
3
>
<
input
className
=
'
p-2
'
type
=
"
text
"
onChange
=
{
handleChangePassword
}
placeholder
=
"
New Password
"
/>
<
/div
>
<
div
className
=
"
p-3 border
"
>
<
h
2
>
변경할
관리자
비밀번호를
입력하세요
<
/h
2
>
<
input
type
=
"
text
"
onChange
=
{
handleChangeAdminPassword
}
placeholder
=
"
New Admin Password
"
/>
<
h
3
>
변경할
관리자
비밀번호를
입력하세요
<
/h
3
>
<
input
className
=
'
p-2
'
type
=
"
text
"
onChange
=
{
handleChangeAdminPassword
}
placeholder
=
"
New Admin Password
"
/>
<
/div
>
<
div
className
=
"
p-3 border
"
>
<
h
2
>
타이머를
설정하세요
(
초단위
)
<
/h
2
>
<
input
type
=
"
text
"
onChange
=
{
handleChangeTime
}
placeholder
=
"
Set Time
"
/>
<
h
3
>
타이머를
설정하세요
(
초단위
)
<
/h
3
>
<
input
className
=
'
p-2
'
type
=
"
text
"
onChange
=
{
handleChangeTime
}
placeholder
=
"
Set Time
"
/>
<
/div
>
...
...
@@ -149,24 +149,24 @@ function Admin() {
<
div
className
=
"
row d-flex justify-content-center
"
>
<
div
className
=
"
col-8
"
>
<
h2
className
=
"
p-3 border text-center
"
>
문제만들기
<
/h2
>
<
h2
className
=
"
p-3 border text-center
bg-danger
"
>
문제만들기
<
/h2
>
<
div
className
=
"
p-3 borber
"
>
<
div
className
=
"
p-3
"
>
<
span
className
=
"
font-weight-bold mr-2 h3
"
>
1
.
<
/span
>
{
/* <input type="text" onChange={handleChangenumber} placeholder="Number" /> */
}
<
input
type
=
"
text
"
onChange
=
{
handleChangeQuestion
}
placeholder
=
"
문제를 입력하세요
"
/>
<
input
className
=
'
p-2
'
type
=
"
text
"
onChange
=
{
handleChangeQuestion
}
placeholder
=
"
문제를 입력하세요
"
/>
<
/div
>
<
div
className
=
"
p-3
"
>
<
div
className
=
"
input-group
"
>
<
div
className
=
"
input-group-prepend
"
>
<
div
className
=
"
input-group-text
"
>
<
div
className
=
"
input-group-text
p-3
"
>
<
input
type
=
"
radio
"
id
=
"
option
"
/>
<
/div
>
<
/div
>
<
input
type
=
"
text
"
className
=
"
form-control
"
placeholder
=
"
보기를 입력하세요
"
onChange
=
{
handleChangechoose
}
/
>
<
input
type
=
"
text
"
className
=
"
form-control
p-4
"
placeholder
=
"
보기를 입력하세요
"
onChange
=
{
handleChangechoose
}
/
>
<
/div
>
{
selectOption
}
...
...
@@ -176,7 +176,7 @@ function Admin() {
<
div
className
=
"
p-3
"
>
<
span
className
=
"
font-weight-bold mr-2 h3
"
>
정답
:
<
/span
>
<
input
type
=
"
text
"
onChange
=
{
handleChangeanswer
}
placeholder
=
"
정답을 입력하세요
"
/>
<
input
className
=
'
p-2
'
type
=
"
text
"
onChange
=
{
handleChangeanswer
}
placeholder
=
"
정답을 입력하세요
"
/>
<
/div
>
<
label
for
=
"
inputLogin
"
className
=
"
d-flex justify-content-center
"
>
...
...
@@ -187,19 +187,6 @@ function Admin() {
<
/div
>
<
/div
>
<
div
className
=
"
p-3
"
>
<
div
className
=
"
input-group
"
>
<
div
className
=
"
input-group-prepend
"
>
<
div
className
=
"
input-group-text
"
>
<
input
type
=
"
radio
"
id
=
"
option
"
/>
<
/div
>
<
/div
>
<
input
type
=
"
text
"
class
=
"
form-control
"
placeholder
=
"
보기를 입력하세요
"
onChange
=
{
handleChangechoose
}
/
>
<
/div
>
{
selectOption
}
<
button
className
=
"
btn btn-outline-secondary btn-sm
"
onClick
=
{
addSelectOption
}
>+<
/button
>
<
/div
>
<
/div
>
...
...
@@ -209,26 +196,24 @@ function Admin() {
<
div
className
=
"
row d-flex justify-content-center
"
>
<
div
className
=
"
col-8
"
>
<
h2
className
=
"
p-3 border text-center
"
>
문제만들기
<
/h2
>
<
h2
className
=
"
p-3 border text-center
bg-danger
"
>
문제만들기
<
/h2
>
<
div
className
=
"
p-3 borber
"
>
<
div
className
=
"
p-3
"
>
<
span
className
=
"
font-weight-bold mr-2 h3
"
>
1
.
<
/span
>
{
/* <input type="text" onChange={handleChangenumber} placeholder="Number" /> */
}
<
input
type
=
"
text
"
onChange
=
{
handleChangeQuestion
}
placeholder
=
"
문제를 입력하세요
"
/>
<
input
className
=
'
p-2
'
type
=
"
text
"
onChange
=
{
handleChangeQuestion
}
placeholder
=
"
문제를 입력하세요
"
/>
<
/div
>
<
div
className
=
"
p-3
"
>
<
div
className
=
"
input-group
"
>
<
div
className
=
"
input-group-prepend
"
>
<
div
className
=
"
input-group-text
"
>
<
div
className
=
"
input-group-text
p-3
"
>
<
input
type
=
"
radio
"
id
=
"
option
"
/>
<
/div
>
<
/div
>
<
input
type
=
"
text
"
class
=
"
form-control
"
placeholder
=
"
보기를 입력하세요
"
onChange
=
{
handleChangechoose
}
/
>
<
/div
>
<
input
type
=
"
text
"
className
=
"
form-control
"
placeholder
=
"
보기를 입력하세요
"
onChange
=
{
handleChangechoose
}
/
>
<
input
type
=
"
text
"
className
=
"
form-control p-4
"
placeholder
=
"
보기를 입력하세요
"
onChange
=
{
handleChangechoose
}
/
>
<
/div
>
{
selectOption
}
...
...
@@ -238,7 +223,7 @@ function Admin() {
<
div
className
=
"
p-3
"
>
<
span
className
=
"
font-weight-bold mr-2 h3
"
>
정답
:
<
/span
>
<
input
type
=
"
text
"
onChange
=
{
handleChangeanswer
}
placeholder
=
"
정답을 입력하세요
"
/>
<
input
className
=
'
p-2
'
type
=
"
text
"
onChange
=
{
handleChangeanswer
}
placeholder
=
"
정답을 입력하세요
"
/>
<
/div
>
<
label
for
=
"
inputLogin
"
className
=
"
d-flex justify-content-center
"
>
...
...
@@ -250,32 +235,29 @@ function Admin() {
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
className
=
"
tab-pane fade
"
id
=
"
Quiz3
"
role
=
"
tabpanel
"
>
<
div
className
=
"
container
"
>
<
div
className
=
"
row d-flex justify-content-center
"
>
<
div
className
=
"
col-8
"
>
<
h2
className
=
"
p-3 border text-center
"
>
문제만들기
<
/h2
>
<
h2
className
=
"
p-3 border text-center
bg-danger
"
>
문제만들기
<
/h2
>
<
div
className
=
"
p-3 borber
"
>
<
div
className
=
"
p-3
"
>
<
span
className
=
"
font-weight-bold mr-2 h3
"
>
1
.
<
/span
>
{
/* <input type="text" onChange={handleChangenumber} placeholder="Number" /> */
}
<
input
type
=
"
text
"
onChange
=
{
handleChangeQuestion
}
placeholder
=
"
문제를 입력하세요
"
/>
<
input
className
=
'
p-2
'
type
=
"
text
"
onChange
=
{
handleChangeQuestion
}
placeholder
=
"
문제를 입력하세요
"
/>
<
/div
>
<
div
className
=
"
p-3
"
>
<
div
className
=
"
input-group
"
>
<
div
className
=
"
input-group-prepend
"
>
<
div
className
=
"
input-group-text
"
>
<
div
className
=
"
input-group-text
p-3
"
>
<
input
type
=
"
radio
"
id
=
"
option
"
/>
<
/div
>
<
/div
>
<
input
type
=
"
text
"
class
=
"
form-control
"
placeholder
=
"
보기를 입력하세요
"
onChange
=
{
handleChangechoose
}
/
>
<
/div
>
<
input
type
=
"
text
"
className
=
"
form-control
"
placeholder
=
"
보기를 입력하세요
"
onChange
=
{
handleChangechoose
}
/
>
<
input
type
=
"
text
"
className
=
"
form-control p-4
"
placeholder
=
"
보기를 입력하세요
"
onChange
=
{
handleChangechoose
}
/
>
<
/div
>
{
selectOption
}
...
...
@@ -285,7 +267,7 @@ function Admin() {
<
div
className
=
"
p-3
"
>
<
span
className
=
"
font-weight-bold mr-2 h3
"
>
정답
:
<
/span
>
<
input
type
=
"
text
"
onChange
=
{
handleChangeanswer
}
placeholder
=
"
정답을 입력하세요
"
/>
<
input
className
=
'
p-2
'
type
=
"
text
"
onChange
=
{
handleChangeanswer
}
placeholder
=
"
정답을 입력하세요
"
/>
<
/div
>
<
label
for
=
"
inputLogin
"
className
=
"
d-flex justify-content-center
"
>
...
...
@@ -298,6 +280,8 @@ function Admin() {
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/
>
)
...
...
src/App.js
View file @
67f034ae
...
...
@@ -12,7 +12,7 @@ function App() {
<
Router
>
<
header
>
<
Link
to
=
"
/
"
>
<
button
className
=
"
calcButton
"
>
Calculus
<
/button
>
<
button
>
Calculus
<
/button
>
<
/Link
>
<
/header
>
<
hr
/>
...
...
src/Quiz.js
View file @
67f034ae
import
React
,
{
useState
}
from
'
react
'
import
{
Link
,
Redirect
}
from
'
react-router-dom
'
;
import
Timer
from
'
react-compound-timer
'
;
// 타이머쓰기위해 import
import
logo
from
'
./img/img_question.png
'
import
logo
from
'
./img_question.png
'
const
QnA
=
[
{
Q
:
"
6 X 4 = ?
"
,
Choose
:
[
6
,
12
,
18
,
24
],
N
:
1
},
...
...
@@ -9,7 +11,7 @@ const QnA = [
{
Q
:
"
3 - 1 = ?
"
,
Choose
:
[
1
,
2
,
3
,
4
],
N
:
3
}
]
let
Answers
=
[
0
,
0
,
0
]
let
Answers
=
[
0
,
0
,
0
]
localStorage
.
setItem
(
'
Answers
'
,
JSON
.
stringify
(
Answers
))
let
Solutions
=
[
4
,
3
,
2
]
localStorage
.
setItem
(
'
Solutions
'
,
JSON
.
stringify
(
Solutions
))
...
...
@@ -20,18 +22,21 @@ function Quiz() {
i
:
0
,
page
:
0
,
})
const
[
selected
,
setSelected
]
=
useState
(
""
)
//선택한 답을 보여줄 것
const
[
selected
,
setSelected
]
=
useState
(
""
)
//선택한 답을 보여줄 것들
// const [checked, setChecked] = useState(false)
const
[
timeout
,
settimeout
]
=
useState
(
false
)
function
handleQuestion
()
{
setQuestion
({
...
QnA
[
question
.
i
+
1
],
i
:
question
.
i
+
1
,
page
:
question
.
page
+
1
})
setSel
ec
t
ed
(
""
)
//페이지 넘어가면 selected 초기화
// setCh
ec
k
ed(
false)
}
let
handleChange
=
(
ev
)
=>
{
// ev.preventDefault() //새로고침 안되도록
setSelected
(
ev
.
target
.
value
)
//selected값 변경
Answers
[
question
.
N
-
1
]
=
Number
(
ev
.
target
.
id
)
+
1
localStorage
.
setItem
(
'
Answers
'
,
JSON
.
stringify
(
Answers
))
}
return
(
...
...
@@ -51,8 +56,8 @@ function Quiz() {
<
div
className
=
"
mt-2
"
>
<
form
>
{
question
.
Choose
.
map
((
a
,
index
)
=>
<
div
>
<
input
type
=
"
radio
"
name
=
'
answer
'
id
=
{
index
}
value
=
{
a
}
onChange
=
{
handleChange
}
checked
=
{
selected
===
String
(
a
)
}
/
>
<
div
key
=
{
index
}
>
<
input
type
=
"
radio
"
name
=
'
answer
'
id
=
{
index
}
value
=
{
a
}
onChange
=
{
handleChange
}
checked
=
{
parseInt
(
selected
)
===
a
}
/
>
<
label
className
=
"
font-weight-bold
"
htmlFor
=
{
a
}
>
{
a
}
<
/label
>
<
/div
>
)}
...
...
@@ -68,11 +73,12 @@ function Quiz() {
<
/div
>
<
p
className
=
"
h3 text-center text-danger
"
>
<
Timer
initialTime
=
{
300
1
0
}
initialTime
=
{
3
6
000
}
direction
=
"
backward
"
checkpoints
=
{[
{
time
:
1
,
callback
:()
=>
alert
(
'
시간이 초과되었습니다.
'
),
{
time
:
1
,
callback
:
()
=>
alert
(
'
시간이 초과되었습니다.
'
),
},
{
time
:
0
,
...
...
@@ -83,7 +89,8 @@ function Quiz() {
>
{()
=>
(
<>
<
Timer
.
Minutes
/>
:
<
Timer
.
Seconds
><
/Timer.Seconds> /
30
:
00
<
/
>
<
Timer
.
Minutes
/>
:
<
Timer
.
Seconds
/>
/ 30 : 0
0
<
/
>
)}
<
/Timer> {/
*
npm
i
react
-
compound
-
timer
*
/
}
<
/p
>
...
...
@@ -93,7 +100,7 @@ function Quiz() {
<
/div
>
<
/div
>
<
/div
>
{
timeout
?
<
Redirect
to
=
'
/end
'
/>
:
''
}
{
timeout
?
<
Redirect
to
=
'
/end
'
/>
:
''
}
<
/
>
)
...
...
src/index.js
View file @
67f034ae
...
...
@@ -3,7 +3,7 @@ import ReactDOM from 'react-dom';
import
'
react-dom
'
import
'
./index.css
'
;
import
App
from
'
./App
'
;
import
'
bootstrap/dist/css/bootstrap.css
'
;
//
import
Quiz from './Quiz
';
import
*
as
serviceWorker
from
'
./serviceWorker
'
;
import
'
bootstrap/dist/css/bootstrap.css
'
import
'
bootstrap
'
...
...
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