guntaek
09-13
Merge branch 'master' of http://210.180.118.83/jichoi/lms_front
@c4227a57ecf4ebc691efa6ac56f6d3f23d80575b
+++ client/resources/audio/passage/passage_explanation.mp3
Binary file is not shown |
+++ client/resources/audio/passage/passage_intoduce.mp3
Binary file is not shown |
--- client/resources/css/reset.css
+++ client/resources/css/reset.css
... | ... | @@ -1,118 +1,179 @@ |
1 | 1 |
@charset "utf-8"; |
2 | 2 |
|
3 | 3 |
@font-face { |
4 |
- font-family: 'Pretendard-Bold'; |
|
5 |
- src: url('../font/Pretendard-Bold.otf') format('opentype'); |
|
4 |
+ font-family: "Pretendard-Bold"; |
|
5 |
+ src: url("../font/Pretendard-Bold.otf") format("opentype"); |
|
6 | 6 |
} |
7 | 7 |
@font-face { |
8 |
- font-family: 'Pretendard-Black'; |
|
9 |
- src: url('../font/Pretendard-Black.otf') format('opentype'); |
|
8 |
+ font-family: "Pretendard-Black"; |
|
9 |
+ src: url("../font/Pretendard-Black.otf") format("opentype"); |
|
10 | 10 |
} |
11 | 11 |
@font-face { |
12 |
- font-family: 'Pretendard-ExtraBold'; |
|
13 |
- src: url('../font/Pretendard-ExtraBold.otf') format('opentype'); |
|
12 |
+ font-family: "Pretendard-ExtraBold"; |
|
13 |
+ src: url("../font/Pretendard-ExtraBold.otf") format("opentype"); |
|
14 | 14 |
} |
15 | 15 |
@font-face { |
16 |
- font-family: 'Pretendard-ExtraLight'; |
|
17 |
- src: url('../font/Pretendard-ExtraLight.otf') format('opentype'); |
|
16 |
+ font-family: "Pretendard-ExtraLight"; |
|
17 |
+ src: url("../font/Pretendard-ExtraLight.otf") format("opentype"); |
|
18 | 18 |
} |
19 | 19 |
@font-face { |
20 |
- font-family: 'Pretendard-Light'; |
|
21 |
- src: url('../font/Pretendard-Light.otf') format('opentype'); |
|
20 |
+ font-family: "Pretendard-Light"; |
|
21 |
+ src: url("../font/Pretendard-Light.otf") format("opentype"); |
|
22 | 22 |
} |
23 | 23 |
@font-face { |
24 |
- font-family: 'Pretendard-Medium'; |
|
25 |
- src: url('../font/Pretendard-Medium.otf') format('opentype'); |
|
24 |
+ font-family: "Pretendard-Medium"; |
|
25 |
+ src: url("../font/Pretendard-Medium.otf") format("opentype"); |
|
26 | 26 |
} |
27 | 27 |
@font-face { |
28 |
- font-family: 'Pretendard-Regular'; |
|
29 |
- src: url('../font/Pretendard-Regular.otf') format('opentype'); |
|
28 |
+ font-family: "Pretendard-Regular"; |
|
29 |
+ src: url("../font/Pretendard-Regular.otf") format("opentype"); |
|
30 | 30 |
} |
31 | 31 |
@font-face { |
32 |
- font-family: 'Pretendard-SemiBold'; |
|
33 |
- src: url('../font/Pretendard-SemiBold.otf') format('opentype'); |
|
32 |
+ font-family: "Pretendard-SemiBold"; |
|
33 |
+ src: url("../font/Pretendard-SemiBold.otf") format("opentype"); |
|
34 | 34 |
} |
35 | 35 |
@font-face { |
36 |
- font-family: 'Pretendard-Thin'; |
|
37 |
- src: url('../font/Pretendard-Thin.otf') format('opentype'); |
|
38 |
-} |
|
39 |
- |
|
40 |
- |
|
41 |
-@font-face { |
|
42 |
- font-family: 'ONEMobilePOP'; |
|
43 |
- src: url('../font/ONEMobilePOP.ttf') format('truetype'); |
|
44 |
-} |
|
45 |
-@font-face { |
|
46 |
- font-family: 'ONEMobileOTF-Regular'; |
|
47 |
- src: url('../font/ONEMobileOTF-Regular.otf') format('opentype'); |
|
48 |
-} |
|
49 |
-@font-face { |
|
50 |
- font-family: 'ONEMobileOTF-Light'; |
|
51 |
- src: url('../font/ONEMobileOTF-Light.otf') format('opentype'); |
|
52 |
-} |
|
53 |
-@font-face { |
|
54 |
- font-family: 'ONEMobileOTF-Bold'; |
|
55 |
- src: url('../font/ONEMobileOTF-Bold.otf') format('opentype'); |
|
56 |
-} |
|
57 |
-@font-face { |
|
58 |
- font-family: 'ONEMobilePOPOTF'; |
|
59 |
- src: url('../font/ONEMobilePOPOTF.otf') format('opentype'); |
|
36 |
+ font-family: "Pretendard-Thin"; |
|
37 |
+ src: url("../font/Pretendard-Thin.otf") format("opentype"); |
|
60 | 38 |
} |
61 | 39 |
|
62 | 40 |
@font-face { |
63 |
- font-family: 'neodgm'; |
|
64 |
- src: url('../font/neodgm.ttf') format('truetype'); |
|
41 |
+ font-family: "ONEMobilePOP"; |
|
42 |
+ src: url("../font/ONEMobilePOP.ttf") format("truetype"); |
|
43 |
+} |
|
44 |
+@font-face { |
|
45 |
+ font-family: "ONEMobileOTF-Regular"; |
|
46 |
+ src: url("../font/ONEMobileOTF-Regular.otf") format("opentype"); |
|
47 |
+} |
|
48 |
+@font-face { |
|
49 |
+ font-family: "ONEMobileOTF-Light"; |
|
50 |
+ src: url("../font/ONEMobileOTF-Light.otf") format("opentype"); |
|
51 |
+} |
|
52 |
+@font-face { |
|
53 |
+ font-family: "ONEMobileOTF-Bold"; |
|
54 |
+ src: url("../font/ONEMobileOTF-Bold.otf") format("opentype"); |
|
55 |
+} |
|
56 |
+@font-face { |
|
57 |
+ font-family: "ONEMobilePOPOTF"; |
|
58 |
+ src: url("../font/ONEMobilePOPOTF.otf") format("opentype"); |
|
59 |
+} |
|
60 |
+ |
|
61 |
+@font-face { |
|
62 |
+ font-family: "neodgm"; |
|
63 |
+ src: url("../font/neodgm.ttf") format("truetype"); |
|
65 | 64 |
} |
66 | 65 |
|
67 | 66 |
* { |
68 |
- padding: 0; |
|
69 |
- margin: 0; |
|
70 |
- box-sizing: border-box; |
|
67 |
+ padding: 0; |
|
68 |
+ margin: 0; |
|
69 |
+ box-sizing: border-box; |
|
71 | 70 |
} |
72 | 71 |
|
73 |
-html, body, #root, #app{height: 100%;} |
|
72 |
+html, |
|
73 |
+body, |
|
74 |
+#root, |
|
75 |
+#app { |
|
76 |
+ height: 100%; |
|
77 |
+} |
|
74 | 78 |
html, |
75 | 79 |
body, |
76 | 80 |
#root { |
77 |
- font-size: 10px; |
|
78 |
- color: #2E2F30; |
|
79 |
- font-family: 'ONEMobileOTF-Regular'; |
|
80 |
- |
|
81 |
+ font-size: 10px; |
|
82 |
+ color: #2e2f30; |
|
83 |
+ font-family: "ONEMobileOTF-Regular"; |
|
81 | 84 |
} |
82 | 85 |
html, |
83 |
-body{ background-color: #eaedf4;} |
|
84 |
-body{position:relative;text-align: left; overflow-x: hidden; width: 1920px;} |
|
85 |
-::-webkit-scrollbar {width: 10px; height: 10px;} |
|
86 |
-::-webkit-scrollbar-track {border-radius: 5px;background-color: #EAEDF4;} |
|
87 |
-::-webkit-scrollbar-thumb { border-radius: 5px; background-color: #FFBA08;} |
|
88 |
-#root, #app{ |
|
89 |
- /* height: 100%; */ |
|
90 |
- } |
|
91 |
-input, select, span,p, label { |
|
92 |
- font-size: 16px; |
|
86 |
+body { |
|
87 |
+ background-color: #eaedf4; |
|
93 | 88 |
} |
94 |
-input::placeholder{color: #8C8E92;} |
|
95 |
-input[type="text"]{ padding:10px 20px; width: 100%; } |
|
96 |
-input#file-upload-button{padding: 10px ;} |
|
97 |
- |
|
98 |
-button{ |
|
99 |
- border: none; |
|
100 |
- background-color: transparent; |
|
101 |
- cursor: pointer; |
|
89 |
+body { |
|
90 |
+ position: relative; |
|
91 |
+ text-align: left; |
|
92 |
+ overflow-x: hidden; |
|
93 |
+ width: 1920px; |
|
102 | 94 |
} |
103 |
-textarea{resize: none; border: 0; outline: 0; font-size: 20px; font-family: 'ONEMobileOTF-Regular';} |
|
95 |
+::-webkit-scrollbar { |
|
96 |
+ width: 7px; |
|
97 |
+ height: 10px; |
|
98 |
+} |
|
99 |
+::-webkit-scrollbar-track { |
|
100 |
+ border-radius: 5px; |
|
101 |
+ background-color: #eaedf4; |
|
102 |
+} |
|
103 |
+::-webkit-scrollbar-thumb { |
|
104 |
+ border-radius: 5px; |
|
105 |
+ background-color: #ffba08; |
|
106 |
+} |
|
107 |
+body, |
|
108 |
+#root, |
|
109 |
+#app { |
|
110 |
+ /* height: 100%; */ |
|
111 |
+ /* background-image: url("../img/new_img/plan/background.png"); |
|
112 |
+ background-repeat: no-repeat; |
|
113 |
+ background-size: cover; */ |
|
114 |
+} |
|
115 |
+body { |
|
116 |
+ height: 100%; |
|
117 |
+ background-image: url(../img/new_img/plan/background.png); |
|
118 |
+ background-repeat: no-repeat; |
|
119 |
+ background-size: cover; |
|
120 |
+ background-position: center; |
|
121 |
+ position: absolute; |
|
122 |
+} |
|
123 |
+input, |
|
124 |
+select, |
|
125 |
+span, |
|
126 |
+p, |
|
127 |
+label { |
|
128 |
+ font-size: 16px; |
|
129 |
+} |
|
130 |
+input::placeholder { |
|
131 |
+ color: #8c8e92; |
|
132 |
+} |
|
133 |
+input[type="text"] { |
|
134 |
+ padding: 10px 20px; |
|
135 |
+ width: 100%; |
|
136 |
+} |
|
137 |
+input#file-upload-button { |
|
138 |
+ padding: 10px; |
|
139 |
+} |
|
104 | 140 |
|
105 |
-a{text-decoration: none; color: #2E2F30;} |
|
141 |
+button { |
|
142 |
+ border: none; |
|
143 |
+ background-color: transparent; |
|
144 |
+ cursor: pointer; |
|
145 |
+} |
|
146 |
+textarea { |
|
147 |
+ resize: none; |
|
148 |
+ border: 0; |
|
149 |
+ outline: 0; |
|
150 |
+ font-size: 20px; |
|
151 |
+ font-family: "ONEMobileOTF-Regular"; |
|
152 |
+} |
|
153 |
+ |
|
154 |
+a { |
|
155 |
+ text-decoration: none; |
|
156 |
+ color: #2e2f30; |
|
157 |
+} |
|
106 | 158 |
|
107 | 159 |
table { |
108 |
- font-size: 20px; |
|
109 |
- width: 100%; |
|
110 |
- border-collapse: collapse; |
|
111 |
- table-layout: fixed; |
|
112 |
-border: 0;} |
|
113 |
-thead{background-color: #eaedf4;} |
|
114 |
-tbody tr{border-bottom: #eaedf4 1px solid; cursor: pointer;} |
|
115 |
-td{padding: 10px ; text-align: center;} |
|
160 |
+ font-size: 20px; |
|
161 |
+ width: 100%; |
|
162 |
+ border-collapse: collapse; |
|
163 |
+ table-layout: fixed; |
|
164 |
+ border: 0; |
|
165 |
+} |
|
166 |
+thead { |
|
167 |
+ background-color: #eaedf4; |
|
168 |
+} |
|
169 |
+tbody tr { |
|
170 |
+ border-bottom: #eaedf4 1px solid; |
|
171 |
+ cursor: pointer; |
|
172 |
+} |
|
173 |
+td { |
|
174 |
+ padding: 10px; |
|
175 |
+ text-align: center; |
|
176 |
+} |
|
116 | 177 |
|
117 | 178 |
/* .btn-upload { |
118 | 179 |
width: 100px; |
... | ... | @@ -132,4 +193,4 @@ |
132 | 193 |
|
133 | 194 |
#file { |
134 | 195 |
display: none; |
135 |
- } */(파일 끝에 줄바꿈 문자 없음) |
|
196 |
+ } */ |
--- client/resources/css/style.css
+++ client/resources/css/style.css
... | ... | @@ -117,6 +117,14 @@ |
117 | 117 |
/* 레이아웃 */ |
118 | 118 |
.side { |
119 | 119 |
width: 42rem; |
120 |
+ background-color: #ffffffa6; |
|
121 |
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); |
|
122 |
+ border-radius: 10px; |
|
123 |
+ padding: 2rem; |
|
124 |
+ position: absolute; |
|
125 |
+ |
|
126 |
+ top: 179px; |
|
127 |
+ height: 700px; |
|
120 | 128 |
} |
121 | 129 |
|
122 | 130 |
.main-wrap { |
... | ... | @@ -127,23 +135,40 @@ |
127 | 135 |
.main-wrap { |
128 | 136 |
width: 134rem; |
129 | 137 |
height: 70rem; |
130 |
- background-color: #fff; |
|
138 |
+ background-color: #ffffffa6; |
|
131 | 139 |
border-radius: 10px; |
132 | 140 |
position: absolute; |
133 | 141 |
right: 60px; |
134 | 142 |
top: 179px; |
135 | 143 |
z-index: 1; |
136 | 144 |
} |
137 |
-.main-wrap-plan { |
|
145 |
+ |
|
146 |
+.main-wrap-mypage { |
|
138 | 147 |
width: 134rem; |
139 | 148 |
height: 70rem; |
140 |
- background-color: #fff; |
|
141 | 149 |
border-radius: 10px; |
142 | 150 |
position: absolute; |
143 | 151 |
right: 60px; |
144 | 152 |
top: 179px; |
145 | 153 |
z-index: 1; |
146 |
- background-image: url("../img/new_img/plan/background.png"); |
|
154 |
+ background-image: url("../img/new_img/mypage/background.png"); |
|
155 |
+ background-size: 100% 100%; |
|
156 |
+ background-position: center; |
|
157 |
+ background-repeat: no-repeat; |
|
158 |
+ padding: 6rem 8rem; |
|
159 |
+} |
|
160 |
+ |
|
161 |
+.main-wrap-plan { |
|
162 |
+ width: 134rem; |
|
163 |
+ height: 70rem; |
|
164 |
+ border-radius: 10px; |
|
165 |
+ position: absolute; |
|
166 |
+ right: 60px; |
|
167 |
+ top: 179px; |
|
168 |
+ z-index: 1; |
|
169 |
+ /* background-image: url("../img/new_img/plan/background.png"); */ |
|
170 |
+ background-color: #ffffffa6; |
|
171 |
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); |
|
147 | 172 |
} |
148 | 173 |
.header img { |
149 | 174 |
margin-left: 20px; |
... | ... | @@ -159,7 +184,7 @@ |
159 | 184 |
/* height: 24rem; */ |
160 | 185 |
/* background-color: #fff; */ |
161 | 186 |
border-radius: 10px; |
162 |
- padding: 30px 20px 0px; |
|
187 |
+ padding: 20px 20px 0px; |
|
163 | 188 |
font-size: 16px; |
164 | 189 |
font-family: "ONEMobileOTF-Regular"; |
165 | 190 |
/* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); */ |
... | ... | @@ -406,15 +431,16 @@ |
406 | 431 |
} |
407 | 432 |
|
408 | 433 |
.myphoto > div { |
409 |
- background-image: url("../img/img207_15s.png"); |
|
410 |
- width: 1011px; |
|
411 |
- height: 558px; |
|
434 |
+ background-image: url("../img/new_img/photobook/background.png"); |
|
435 |
+ width: 127rem; |
|
436 |
+ height: 56rem; |
|
412 | 437 |
padding: 30px 60px; |
413 | 438 |
margin: 0 auto; |
439 |
+ background-size: 100% 100%; |
|
414 | 440 |
} |
415 | 441 |
.tab-btn { |
416 | 442 |
position: relative; |
417 |
- color: #568bfa; |
|
443 |
+ color: #fff; |
|
418 | 444 |
} |
419 | 445 |
.tab-btn p.custom-style { |
420 | 446 |
color: #fff; |
... | ... | @@ -426,12 +452,13 @@ |
426 | 452 |
right: 7%; |
427 | 453 |
transform: translate(-50%, -50%); |
428 | 454 |
font-family: "ONEMobilePOPOTF"; |
429 |
- font-size: 36px; |
|
455 |
+ font-size: 27px; |
|
430 | 456 |
} |
431 | 457 |
.myphoto .btnGroup { |
432 | 458 |
width: max-content; |
433 | 459 |
position: absolute; |
434 |
- right: 45px; |
|
460 |
+ top: 134px; |
|
461 |
+ right: 14px; |
|
435 | 462 |
z-index: 10000; |
436 | 463 |
} |
437 | 464 |
.myphoto .class { |
... | ... | @@ -732,7 +759,8 @@ |
732 | 759 |
box-shadow: 10px 10px 10px rgba(0, 0, 0, 0.1); |
733 | 760 |
width: 93%; |
734 | 761 |
height: 710px; |
735 |
- background-color: #fff; |
|
762 |
+ /* background-color: #fff; */ |
|
763 |
+ background-color: #ffffffa6; |
|
736 | 764 |
border-radius: 20px; |
737 | 765 |
} |
738 | 766 |
|
... | ... | @@ -1169,7 +1197,8 @@ |
1169 | 1197 |
} |
1170 | 1198 |
|
1171 | 1199 |
.class { |
1172 |
- background-color: #f8f9fb; |
|
1200 |
+ /* background-color: #f8f9fb; */ |
|
1201 |
+ background-image: url("../img/new_img/photobook/photo.png"); |
|
1173 | 1202 |
border-radius: 10px; |
1174 | 1203 |
padding: 25px; |
1175 | 1204 |
font-size: 19px; |
+++ client/resources/img/new_img/content_ink/background.png
Binary file is not shown |
+++ client/resources/img/new_img/content_ink/click_btn.png
Binary file is not shown |
+++ client/resources/img/new_img/content_ink/ink_1.png
Binary file is not shown |
+++ client/resources/img/new_img/content_ink/ink_2.png
Binary file is not shown |
+++ client/resources/img/new_img/content_ink/ink_3.png
Binary file is not shown |
+++ client/resources/img/new_img/content_ink/ink_4.png
Binary file is not shown |
+++ client/resources/img/new_img/content_ink/return_v2.png
Binary file is not shown |
+++ client/resources/img/new_img/dashboard/btn.png
Binary file is not shown |
+++ client/resources/img/new_img/dashboard/rabbit.png
Binary file is not shown |
+++ client/resources/img/new_img/icon/play_icon.png
Binary file is not shown |
+++ client/resources/img/new_img/icon/search-icon.png
Binary file is not shown |
+++ client/resources/img/new_img/logo_v2.png
Binary file is not shown |
+++ client/resources/img/new_img/mypage/background.png
Binary file is not shown |
+++ client/resources/img/new_img/mypage/photoBtn.png
Binary file is not shown |
+++ client/resources/img/new_img/photobook/background.png
Binary file is not shown |
+++ client/resources/img/new_img/photobook/down_btn.png
Binary file is not shown |
+++ client/resources/img/new_img/photobook/heart.png
Binary file is not shown |
+++ client/resources/img/new_img/photobook/heart_click.png
Binary file is not shown |
+++ client/resources/img/new_img/photobook/page.png
Binary file is not shown |
+++ client/resources/img/new_img/photobook/page_click.png
Binary file is not shown |
+++ client/resources/img/new_img/photobook/photo.png
Binary file is not shown |
+++ client/resources/img/new_img/photobook/up_btn.png
Binary file is not shown |
--- client/views/Login.vue
+++ client/views/Login.vue
... | ... | @@ -1,5 +1,5 @@ |
1 | 1 |
<template> |
2 |
- <div class="login-container"> |
|
2 |
+ <div style="padding: 20px 20px;"> |
|
3 | 3 |
|
4 | 4 |
<div class="login "> |
5 | 5 |
<div class="logo flex justify-end"><img src="../resources/img/logo.png" alt=""></div> |
... | ... | @@ -57,12 +57,13 @@ |
57 | 57 |
<div class="find-form mt30" v-if="selectedTab === 'tab1'"> |
58 | 58 |
<div class="mb20 flex justify-between align-center"> |
59 | 59 |
<p class="title2" for="username" style="width: 12rem;">이름</p> |
60 |
- <input class="data-wrap" type="text" id="username" v-model="findUserNm" placeholder="이름을 입력하세요." style="width: 45rem;" > |
|
60 |
+ <input class="data-wrap" type="text" id="username" v-model="findUserNm" placeholder="이름을 입력하세요." |
|
61 |
+ style="width: 45rem;"> |
|
61 | 62 |
</div> |
62 | 63 |
<div class="mb30 flex justify-between align-center"> |
63 | 64 |
<p class="title2" for="username" style="width: 12rem;">전화번호</p> |
64 |
- <div class="flex justify-between align-center"><input class="data-wrap" |
|
65 |
- style="width: 14rem;" type="text" id="username" v-model="findTel1"> |
|
65 |
+ <div class="flex justify-between align-center"><input class="data-wrap" style="width: 14rem;" type="text" |
|
66 |
+ id="username" v-model="findTel1"> |
|
66 | 67 |
<p class="title2">-</p><input class="data-wrap" style="width: 14rem;" type="text" id="username" |
67 | 68 |
v-model="findTel2"> |
68 | 69 |
<p class="title2">-</p><input class="data-wrap" style="width: 14rem;" type="text" id="username" |
... | ... | @@ -82,15 +83,18 @@ |
82 | 83 |
<div class="find-form mt30" v-else-if="selectedTab === 'tab2'"> |
83 | 84 |
<div class="mb20 flex justify-between align-center"> |
84 | 85 |
<p class="title2" for="username" style="width: 12rem;">아이디</p> |
85 |
- <input class="data-wrap" type="text" id="username" v-model="changeLoginId" placeholder="아이디를 입력하세요." style="width: 45rem;" > |
|
86 |
+ <input class="data-wrap" type="text" id="username" v-model="changeLoginId" placeholder="아이디를 입력하세요." |
|
87 |
+ style="width: 45rem;"> |
|
86 | 88 |
</div> |
87 | 89 |
<div class="mb20 flex justify-between align-center"> |
88 | 90 |
<p class="title2" for="username" style="width: 14rem;">변경할 비밀번호</p> |
89 |
- <input class="data-wrap" type="password" id="username" v-model="changeUserPw" placeholder="변경할 비밀번호를 입력하세요." style="width: 45rem;" > |
|
91 |
+ <input class="data-wrap" type="password" id="username" v-model="changeUserPw" |
|
92 |
+ placeholder="변경할 비밀번호를 입력하세요." style="width: 45rem;"> |
|
90 | 93 |
</div> |
91 | 94 |
<div class="mb20 flex justify-between align-center"> |
92 | 95 |
<p class="title2" for="username" style="width: 12rem;">비밀번호 확인</p> |
93 |
- <input class="data-wrap" type="password" id="username" v-model="changeUserPwCheck" placeholder="변경할 비밀번호를 입력하세요." style="width: 45rem;" > |
|
96 |
+ <input class="data-wrap" type="password" id="username" v-model="changeUserPwCheck" |
|
97 |
+ placeholder="변경할 비밀번호를 입력하세요." style="width: 45rem;"> |
|
94 | 98 |
</div> |
95 | 99 |
<div class="flex justify-center "> |
96 | 100 |
<button type="button" title="글쓰기" class="new-btn mr10" @click="closeBtn"> |
... | ... | @@ -161,8 +165,8 @@ |
161 | 165 |
findTel1: '', |
162 | 166 |
findTel2: '', |
163 | 167 |
findTel3: '', |
164 |
- findUserInfo : {}, |
|
165 |
- changeLoginId:'', |
|
168 |
+ findUserInfo: {}, |
|
169 |
+ changeLoginId: '', |
|
166 | 170 |
changeUserPw: '', |
167 | 171 |
changeUserPwCheck: '', |
168 | 172 |
} |
--- client/views/component/TextToImage.vue
+++ client/views/component/TextToImage.vue
... | ... | @@ -1,32 +1,35 @@ |
1 | 1 |
<template> |
2 |
- <div class="flex justify-center align-center" style="margin-top : 30px"> |
|
3 |
- <div class="content title-box aibox"> |
|
4 |
- <p class="title mt25 title-bg">모르는 단어를 물어봐~!</p> |
|
5 |
- <div class="propmt-container"> |
|
6 |
- <div class="input-conatiner"> |
|
7 |
- <input v-model="word" @keyup.enter="startProgress(word)"/> |
|
8 |
- <button @click="startProgress(word)"> <p> 생성하기 </p> </button> |
|
2 |
+ <div class="flex justify-center align-center"> |
|
3 |
+ <div class="propmt-container"> |
|
4 |
+ <div class="input-conatiner"> |
|
5 |
+ <input v-model="word" @keyup.enter="startProgress(word)" /> |
|
6 |
+ <button @click="startProgress(word)"> |
|
7 |
+ <img src="../../resources/img/new_img/icon/search-icon.png" style="width: 52px" /> |
|
8 |
+ </button> |
|
9 |
+ </div> |
|
10 |
+ </div> |
|
11 |
+ <div class="modal-container flex" v-if="!modalClose"> |
|
12 |
+ <div class="progress-container" v-if="progressWidth < 100 && progressWidth > 1"> |
|
13 |
+ <div class="progress-bar" :style="{ width: progressWidth + '%' }">{{ Math.floor(progressWidth) }}%</div> |
|
14 |
+ <!-- 로딩 이미지 --> |
|
15 |
+ <div class="loading-container"> |
|
16 |
+ <img src="../../resources/img/jumpingRabbit.gif" alt="Loading" class="loading-gif" /> |
|
17 |
+ <p>잠깐만 기다려봐~</p> |
|
9 | 18 |
</div> |
10 |
- <div class="progress-container"> |
|
11 |
- <div class="progress-bar" :style="{ width: progressWidth + '%' }">{{ Math.floor(progressWidth) }}%</div> |
|
12 |
- |
|
13 |
- <!-- 로딩 이미지 --> |
|
14 |
- <div v-if="progressWidth < 100 && progressWidth > 1" class="loading-container"> |
|
15 |
- <img src="../../resources/img/jumpingRabbit.gif" alt="Loading" class="loading-gif"/> |
|
16 |
- <p> 잠깐만 기다려봐~ </p> |
|
17 |
- </div> |
|
18 |
- |
|
19 |
- </div> |
|
20 |
- <div v-if="visibleWord" class="result-container"> |
|
21 |
- <img :src="imageSrc"/> |
|
19 |
+ </div> |
|
20 |
+ <div v-if="visibleWord" class="result-container"> |
|
21 |
+ <div class="flex align-center modal-box"> |
|
22 |
+ <img :src="imageSrc" /> |
|
22 | 23 |
<div class="word-container"> |
23 |
- <h2> {{ inputWord }} </h2> |
|
24 |
+ <h2>{{ inputWord }}</h2> |
|
24 | 25 |
</div> |
25 | 26 |
</div> |
27 |
+ <button @click="handleModalClose"> |
|
28 |
+ <img src="../../resources/img/btn25_93t_normal.png" alt="" style="width: auto" /> |
|
29 |
+ </button> |
|
26 | 30 |
</div> |
27 | 31 |
</div> |
28 | 32 |
</div> |
29 |
- |
|
30 | 33 |
</template> |
31 | 34 |
|
32 | 35 |
<script> |
... | ... | @@ -36,22 +39,22 @@ |
36 | 39 |
data() { |
37 | 40 |
return { |
38 | 41 |
progressWidth: 0, |
39 |
- inputWord : "", |
|
42 |
+ inputWord: '', |
|
40 | 43 |
|
41 |
- // 하드 코딩 -> 수정 필요 : API |
|
42 |
- word : "", |
|
43 |
- imageSrc : "", |
|
44 |
+ word: '', |
|
45 |
+ imageSrc: '', |
|
44 | 46 |
imageData: null, // 서버에서 받아온 이미지 데이터 저장 |
45 | 47 |
|
46 |
- visibleWord : false, |
|
48 |
+ visibleWord: false, |
|
49 |
+ modalClose: true, // 초기 상태 === 닫힘 |
|
47 | 50 |
}; |
48 | 51 |
}, |
49 |
- mounted() { |
|
50 |
- |
|
51 |
- }, |
|
52 |
+ mounted() {}, |
|
52 | 53 |
methods: { |
53 | 54 |
// 상태 진행 바(progress bar) |
54 | 55 |
startProgress(word) { |
56 |
+ this.modalClose = false; |
|
57 |
+ |
|
55 | 58 |
if (this.progressWidth == 100) { |
56 | 59 |
this.resetProgress(); |
57 | 60 |
} |
... | ... | @@ -72,7 +75,7 @@ |
72 | 75 |
clearInterval(progressInterval); |
73 | 76 |
this.visibleWord = true; |
74 | 77 |
|
75 |
- // 진행이 완료된 후에 이미지 데이터 렌더링 |
|
78 |
+ // 진행이 완료된 후에 이미지 데이터 렌더링 |
|
76 | 79 |
if (this.imageData) { |
77 | 80 |
this.imageSrc = this.imageUrl; |
78 | 81 |
} |
... | ... | @@ -86,31 +89,38 @@ |
86 | 89 |
this.inputWord = word; |
87 | 90 |
this.visibleWord = false; |
88 | 91 |
}, |
89 |
- |
|
92 |
+ |
|
90 | 93 |
resetProgress() { |
91 | 94 |
this.progressWidth = 0; |
92 | 95 |
this.visibleWord = false; |
93 |
- this.imageSrc = ""; // 이미지 URL 초기화 |
|
96 |
+ this.imageSrc = ''; // 이미지 URL 초기화 |
|
94 | 97 |
this.imageData = null; // 이미지 데이터 초기화 |
98 |
+ this.word = ''; |
|
99 |
+ }, |
|
100 |
+ |
|
101 |
+ handleModalClose() { |
|
102 |
+ this.resetProgress(); |
|
103 |
+ this.modalClose = true; |
|
104 |
+ console.log('모달 상태 : ', this.modalClose); |
|
95 | 105 |
}, |
96 | 106 |
|
97 | 107 |
// 이미지 API |
98 |
- async getAiImage(){ |
|
99 |
- const url = "http://takensoftai.iptime.org:20200/generate_json"; |
|
108 |
+ async getAiImage() { |
|
109 |
+ const url = 'http://takensoftai.iptime.org:20200/generate_json'; |
|
100 | 110 |
// console.log(`word : ${this.word}`); |
101 | 111 |
try { |
102 | 112 |
const response = await axios({ |
103 | 113 |
url: url, |
104 |
- method: "post", |
|
114 |
+ method: 'post', |
|
105 | 115 |
headers: { |
106 |
- "Content-Type": "application/json; charset=UTF-8", |
|
116 |
+ 'Content-Type': 'application/json; charset=UTF-8', |
|
107 | 117 |
}, |
108 | 118 |
responseType: 'arraybuffer', |
109 | 119 |
data: { |
110 |
- text: this.word |
|
120 |
+ text: this.word, |
|
111 | 121 |
}, |
112 | 122 |
}); |
113 |
- |
|
123 |
+ |
|
114 | 124 |
// console.log(`응답 : ${response}`); |
115 | 125 |
|
116 | 126 |
// 바이너리 데이터 -> Blob으로 변환 |
... | ... | @@ -124,23 +134,22 @@ |
124 | 134 |
} catch (err) { |
125 | 135 |
console.log(err); |
126 | 136 |
} |
127 |
- } |
|
128 |
- } |
|
129 |
-} |
|
137 |
+ }, |
|
138 |
+ }, |
|
139 |
+}; |
|
130 | 140 |
</script> |
131 | 141 |
|
132 | 142 |
<style> |
133 |
-.propmt-container{ |
|
134 |
- padding: 0px 50px 30px 50px; |
|
143 |
+.propmt-container { |
|
144 |
+ /*padding: 0px 50px 30px 50px;*/ |
|
135 | 145 |
} |
136 | 146 |
/* 입력 컨테이너 */ |
137 |
-.input-conatiner{ |
|
147 |
+.input-conatiner { |
|
138 | 148 |
display: flex; |
139 | 149 |
align-items: center; |
140 |
- gap: 30px; |
|
141 |
- height: 50px; |
|
150 |
+ width: 80rem; |
|
142 | 151 |
} |
143 |
-.input-conatiner input{ |
|
152 |
+.input-conatiner input { |
|
144 | 153 |
width: 90%; |
145 | 154 |
height: 100%; |
146 | 155 |
padding: 10px 30px; |
... | ... | @@ -148,34 +157,35 @@ |
148 | 157 |
border-radius: 10px; |
149 | 158 |
box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px; |
150 | 159 |
outline: none; |
151 |
- font-size : 28px; |
|
160 |
+ font-size: 28px; |
|
152 | 161 |
} |
153 |
-.input-conatiner button{ |
|
162 |
+.input-conatiner button { |
|
154 | 163 |
width: 15%; |
155 | 164 |
height: 100%; |
156 | 165 |
border: none; |
157 | 166 |
border-radius: 10px; |
158 | 167 |
cursor: pointer; |
159 |
- background-color: #ffba08; |
|
168 |
+ /*background-color: #ffba08;*/ |
|
160 | 169 |
display: flex; |
161 | 170 |
justify-content: center; |
162 | 171 |
align-items: center; |
163 | 172 |
} |
164 | 173 |
|
165 |
-.input-conatiner button p{ |
|
166 |
- font-size : 28px; |
|
174 |
+.input-conatiner button p { |
|
175 |
+ font-size: 28px; |
|
167 | 176 |
} |
168 | 177 |
|
169 | 178 |
/* 진행 상태바 */ |
170 | 179 |
.progress-container { |
171 |
- width: 100%; |
|
180 |
+ width: 50rem; |
|
181 |
+ height: fit-content; |
|
172 | 182 |
background-color: #ffffff; |
173 |
- border-radius: 5px; |
|
183 |
+ border-radius: 10px; |
|
174 | 184 |
overflow: hidden; |
175 |
- margin-top: 20px; |
|
176 |
- display : flex; |
|
185 |
+ display: flex; |
|
177 | 186 |
flex-direction: column; |
178 |
- gap :30px; |
|
187 |
+ gap: 30px; |
|
188 |
+ padding: 30px; |
|
179 | 189 |
} |
180 | 190 |
|
181 | 191 |
.progress-bar { |
... | ... | @@ -185,42 +195,43 @@ |
185 | 195 |
text-align: center; |
186 | 196 |
line-height: 30px; |
187 | 197 |
color: white; |
188 |
- border : none; |
|
198 |
+ border: none; |
|
189 | 199 |
border-radius: 5px; |
190 | 200 |
transition: width 0.3s; |
191 |
- font-size : 20px; |
|
201 |
+ font-size: 20px; |
|
192 | 202 |
} |
193 | 203 |
|
194 | 204 |
/* 로딩 gif */ |
195 |
-.loading-container{ |
|
196 |
- display : flex; |
|
197 |
- flex-direction: column; |
|
198 |
- align-items: center; |
|
199 |
- gap: 30px; |
|
200 |
- text-align: center; |
|
201 |
- margin-top : 30px; |
|
202 |
- padding-bottom : 40px; |
|
203 |
-} |
|
204 |
-.loading-gif{ |
|
205 |
- width: 25%; |
|
206 |
- border-radius: 500px; |
|
207 |
-} |
|
208 |
-.loading-container p { |
|
209 |
- font-size : 25px; |
|
210 |
-} |
|
211 |
- |
|
212 |
-/* 결과 container */ |
|
213 |
-.result-container{ |
|
214 |
- margin-top: 30px; |
|
205 |
+.loading-container { |
|
215 | 206 |
display: flex; |
216 | 207 |
flex-direction: column; |
217 | 208 |
align-items: center; |
218 | 209 |
gap: 30px; |
210 |
+ text-align: center; |
|
219 | 211 |
} |
220 |
-.result-container img{ |
|
221 |
- width : 30%; |
|
212 |
+.loading-gif { |
|
213 |
+ width: 52%; |
|
214 |
+ border-radius: 500px; |
|
222 | 215 |
} |
223 |
-.word-container{ |
|
216 |
+.loading-container p { |
|
217 |
+ font-size: 25px; |
|
218 |
+} |
|
219 |
+ |
|
220 |
+/* 결과 container */ |
|
221 |
+.result-container { |
|
222 |
+ display: flex; |
|
223 |
+ flex-direction: row; |
|
224 |
+ align-items: flex-start; |
|
225 |
+ background-color: #fff; |
|
226 |
+ padding: 30px; |
|
227 |
+ border-radius: 10px; |
|
228 |
+ width: 50rem; |
|
229 |
+ height: 100%; |
|
230 |
+} |
|
231 |
+.result-container img { |
|
232 |
+ width: 60%; |
|
233 |
+} |
|
234 |
+.word-container { |
|
224 | 235 |
width: 30%; |
225 | 236 |
text-align: center; |
226 | 237 |
padding: 20px 0px; |
... | ... | @@ -231,14 +242,31 @@ |
231 | 242 |
gap: 15px; |
232 | 243 |
} |
233 | 244 |
.word-container h2 { |
234 |
- font-size : 28px; |
|
245 |
+ font-size: 28px; |
|
235 | 246 |
} |
236 | 247 |
|
237 |
-.aibox{ |
|
248 |
+.aibox { |
|
238 | 249 |
display: flex; |
239 | 250 |
flex-direction: column; |
240 | 251 |
justify-content: center; |
241 | 252 |
height: auto; |
242 | 253 |
padding: 30px 0px; |
243 | 254 |
} |
255 |
+ |
|
256 |
+.modal-container { |
|
257 |
+ width: 50rem; |
|
258 |
+ height: 40rem; |
|
259 |
+ border-radius: 10px; |
|
260 |
+ z-index: 100; |
|
261 |
+ position: absolute; |
|
262 |
+ top: 25rem; |
|
263 |
+ right: 10%; |
|
264 |
+ box-shadow: rgba(0, 0, 0, 0.16) 0px 3px 6px, rgba(0, 0, 0, 0.23) 0px 3px 6px; |
|
265 |
+} |
|
266 |
+ |
|
267 |
+.modal-box { |
|
268 |
+ gap: 30px; |
|
269 |
+ margin-top: 10%; |
|
270 |
+ margin-left: 5%; |
|
271 |
+} |
|
244 | 272 |
</style> |
--- client/views/layout/Header.vue
+++ client/views/layout/Header.vue
... | ... | @@ -1,227 +1,267 @@ |
1 | 1 |
<template> |
2 |
- <div class="header flex justify-between align-center header-box"> |
|
3 |
- <div> |
|
4 |
- <router-link to="/MyPlan.page"> |
|
5 |
- <div class="logo"><img src="../../resources/img/logo2.png" alt="" /></div> |
|
6 |
- </router-link> |
|
2 |
+ <div class="header flex justify-between align-center header-box"> |
|
3 |
+ <div> |
|
4 |
+ <router-link to="/MyPlan.page"> |
|
5 |
+ <div class="logo"> |
|
6 |
+ <img src="../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 |
- <div class="flex align-center"> |
|
9 |
- <Menu :currentRoute="$route.path"></Menu> |
|
10 |
- <div class="notice" @click="buttonSearch"> |
|
11 |
- <img src="../../resources/img/icon2.png" alt="" /> |
|
12 |
- <p>{{ unCheck }}</p> |
|
13 |
- </div> |
|
14 |
- <img src="../../resources/img/new_img/profile_img.png" alt="" /> |
|
15 |
- <div class="look-btn" @click="logout"> |
|
16 |
- <img src="../../resources/img/new_img/icon/logout_icon.png" alt="" /> |
|
17 |
- </div> |
|
18 |
- <div class="popup-wrap" v-show="searchOpen"> |
|
19 |
- <div class="popup-box"> |
|
20 |
- <div class="flex mb10 justify-between"> |
|
21 |
- <p class="popup-title">알림</p> |
|
22 |
- <button type="button" class="popup-close-btn" @click="closeBtn"> |
|
23 |
- <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon> |
|
24 |
- </button> |
|
25 |
- </div> |
|
26 |
- <article |
|
27 |
- class="flex justify-between mt20" |
|
28 |
- v-for="item in dataList" |
|
29 |
- :key="item.id" |
|
30 |
- :class="{ 'selected-row': selectedRow == item.dataList }" |
|
31 |
- > |
|
32 |
- <img style="width: fit-content" src="../../resources/img/img200_13p.png" alt="" /> |
|
33 |
- <p class="title1 ml20" style="width: 60%">{{ item.bbsTtl }}</p> |
|
34 |
- <button @click="buttonSearch2(item)" type="button" title="글쓰기" class="new-btn"> |
|
35 |
- 자세히 보기 |
|
36 |
- </button> |
|
37 |
- </article> |
|
38 |
- <article class="table-pagination flex justify-center align-center mb20 mt30" style="gap: 10px"> |
|
39 |
- <button @click="previousPage" :disabled="page === 1">이전</button> |
|
40 |
- <button class="selected-btn">{{ page }}</button> |
|
41 |
- <button @click="nextPage" :disabled="page === totalPages">다음</button> |
|
42 |
- </article> |
|
43 |
- </div> |
|
44 |
- </div> |
|
45 |
- <div class="popup-wrap popup2" v-show="searchOpen2"> |
|
46 |
- <div class="popup-box"> |
|
47 |
- <div class="flex mb10 justify-between"> |
|
48 |
- <p class="popup-title">알림 자세히 보기</p> |
|
49 |
- <button type="button" class="popup-close-btn" @click="closeBtn2"> |
|
50 |
- <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon> |
|
51 |
- </button> |
|
52 |
- </div> |
|
53 |
- <div class="board-wrap"> |
|
54 |
- <div class="flex align-center"> |
|
55 |
- <label for="" class="title2">{{ boardData.bbsTtl }}</label> |
|
56 |
- </div> |
|
57 |
- <hr /> |
|
58 |
- <!-- <textarea readonly name="" id="">{{ boardData.bbsCnt }}</textarea> --> |
|
59 |
- </div> |
|
60 |
- <div class="flex justify-center mt20"> |
|
61 |
- <button type="button" title="확인" class="new-btn" @click="closeBtn2">확인</button> |
|
62 |
- </div> |
|
63 |
- </div> |
|
64 |
- </div> |
|
65 |
- </div> |
|
8 |
+ </router-link> |
|
66 | 9 |
</div> |
10 |
+ <div class="flex align-center"> |
|
11 |
+ <Menu :currentRoute="$route.path"></Menu> |
|
12 |
+ <div class="notice" @click="buttonSearch"> |
|
13 |
+ <img src="../../resources/img/icon2.png" alt="" /> |
|
14 |
+ <p>{{ unCheck }}</p> |
|
15 |
+ </div> |
|
16 |
+ <img src="../../resources/img/new_img/profile_img.png" alt="" /> |
|
17 |
+ <div class="look-btn" @click="logout"> |
|
18 |
+ <img src="../../resources/img/new_img/icon/logout_icon.png" alt="" /> |
|
19 |
+ </div> |
|
20 |
+ <div class="popup-wrap" v-show="searchOpen"> |
|
21 |
+ <div class="popup-box"> |
|
22 |
+ <div class="flex mb10 justify-between"> |
|
23 |
+ <p class="popup-title">알림</p> |
|
24 |
+ <button type="button" class="popup-close-btn" @click="closeBtn"> |
|
25 |
+ <svg-icon |
|
26 |
+ type="mdi" |
|
27 |
+ :path="mdiWindowClose" |
|
28 |
+ class="close-btn" |
|
29 |
+ ></svg-icon> |
|
30 |
+ </button> |
|
31 |
+ </div> |
|
32 |
+ <article |
|
33 |
+ class="flex justify-between mt20" |
|
34 |
+ v-for="item in dataList" |
|
35 |
+ :key="item.id" |
|
36 |
+ :class="{ 'selected-row': selectedRow == item.dataList }" |
|
37 |
+ > |
|
38 |
+ <img |
|
39 |
+ style="width: fit-content" |
|
40 |
+ src="../../resources/img/img200_13p.png" |
|
41 |
+ alt="" |
|
42 |
+ /> |
|
43 |
+ <p class="title1 ml20" style="width: 60%">{{ item.bbsTtl }}</p> |
|
44 |
+ <button |
|
45 |
+ @click="buttonSearch2(item)" |
|
46 |
+ type="button" |
|
47 |
+ title="글쓰기" |
|
48 |
+ class="new-btn" |
|
49 |
+ > |
|
50 |
+ 자세히 보기 |
|
51 |
+ </button> |
|
52 |
+ </article> |
|
53 |
+ <article |
|
54 |
+ class="table-pagination flex justify-center align-center mb20 mt30" |
|
55 |
+ style="gap: 10px" |
|
56 |
+ > |
|
57 |
+ <button @click="previousPage" :disabled="page === 1">이전</button> |
|
58 |
+ <button class="selected-btn">{{ page }}</button> |
|
59 |
+ <button @click="nextPage" :disabled="page === totalPages"> |
|
60 |
+ 다음 |
|
61 |
+ </button> |
|
62 |
+ </article> |
|
63 |
+ </div> |
|
64 |
+ </div> |
|
65 |
+ <div class="popup-wrap popup2" v-show="searchOpen2"> |
|
66 |
+ <div class="popup-box"> |
|
67 |
+ <div class="flex mb10 justify-between"> |
|
68 |
+ <p class="popup-title">알림 자세히 보기</p> |
|
69 |
+ <button type="button" class="popup-close-btn" @click="closeBtn2"> |
|
70 |
+ <svg-icon |
|
71 |
+ type="mdi" |
|
72 |
+ :path="mdiWindowClose" |
|
73 |
+ class="close-btn" |
|
74 |
+ ></svg-icon> |
|
75 |
+ </button> |
|
76 |
+ </div> |
|
77 |
+ <div class="board-wrap"> |
|
78 |
+ <div class="flex align-center"> |
|
79 |
+ <label for="" class="title2">{{ boardData.bbsTtl }}</label> |
|
80 |
+ </div> |
|
81 |
+ <hr /> |
|
82 |
+ <!-- <textarea readonly name="" id="">{{ boardData.bbsCnt }}</textarea> --> |
|
83 |
+ </div> |
|
84 |
+ <div class="flex justify-center mt20"> |
|
85 |
+ <button |
|
86 |
+ type="button" |
|
87 |
+ title="확인" |
|
88 |
+ class="new-btn" |
|
89 |
+ @click="closeBtn2" |
|
90 |
+ > |
|
91 |
+ 확인 |
|
92 |
+ </button> |
|
93 |
+ </div> |
|
94 |
+ </div> |
|
95 |
+ </div> |
|
96 |
+ </div> |
|
97 |
+ </div> |
|
67 | 98 |
</template> |
68 | 99 |
|
69 | 100 |
<script> |
70 |
-import SvgIcon from '@jamescoyle/vue-icon'; |
|
71 |
-import { mdiMagnify, mdiWindowClose } from '@mdi/js'; |
|
72 |
-import axios from 'axios'; |
|
73 |
-import Menu from './Menu.vue'; |
|
101 |
+import SvgIcon from "@jamescoyle/vue-icon"; |
|
102 |
+import { mdiMagnify, mdiWindowClose } from "@mdi/js"; |
|
103 |
+import axios from "axios"; |
|
104 |
+import Menu from "./Menu.vue"; |
|
74 | 105 |
export default { |
75 |
- data() { |
|
76 |
- return { |
|
77 |
- mdiWindowClose: mdiWindowClose, |
|
78 |
- showModal: false, |
|
79 |
- searchOpen: false, |
|
80 |
- searchOpen2: false, |
|
106 |
+ data() { |
|
107 |
+ return { |
|
108 |
+ mdiWindowClose: mdiWindowClose, |
|
109 |
+ showModal: false, |
|
110 |
+ searchOpen: false, |
|
111 |
+ searchOpen2: false, |
|
81 | 112 |
|
82 |
- // 게시글 정보 |
|
83 |
- dataList: [], |
|
84 |
- totalBoard: null, |
|
85 |
- selectedRow: '', |
|
86 |
- unCheck: null, |
|
113 |
+ // 게시글 정보 |
|
114 |
+ dataList: [], |
|
115 |
+ totalBoard: null, |
|
116 |
+ selectedRow: "", |
|
117 |
+ unCheck: null, |
|
87 | 118 |
|
88 |
- boardData: [], |
|
119 |
+ boardData: [], |
|
89 | 120 |
|
90 |
- // 페이징 정보 |
|
91 |
- page: 1, |
|
92 |
- pageSize: 2, |
|
93 |
- totalpages: null, |
|
121 |
+ // 페이징 정보 |
|
122 |
+ page: 1, |
|
123 |
+ pageSize: 2, |
|
124 |
+ totalpages: null, |
|
94 | 125 |
|
95 |
- // 사용자 정보 |
|
96 |
- userId: 'USID_000000000000006', |
|
97 |
- stdId: '', |
|
98 |
- }; |
|
126 |
+ // 사용자 정보 |
|
127 |
+ userId: "USID_000000000000006", |
|
128 |
+ stdId: "", |
|
129 |
+ }; |
|
130 |
+ }, |
|
131 |
+ methods: { |
|
132 |
+ closeModal() { |
|
133 |
+ this.showModal = false; |
|
99 | 134 |
}, |
100 |
- methods: { |
|
101 |
- closeModal() { |
|
102 |
- this.showModal = false; |
|
103 |
- }, |
|
104 |
- buttonSearch() { |
|
105 |
- this.searchOpen = true; |
|
106 |
- }, |
|
107 |
- buttonSearch2(item) { |
|
108 |
- const vm = this; |
|
109 |
- this.searchOpen2 = true; |
|
110 |
- this.boardData = item; |
|
111 |
- |
|
112 |
- axios({ |
|
113 |
- url: '/board/boardStudentCheck.json', |
|
114 |
- method: 'post', |
|
115 |
- headers: { |
|
116 |
- 'Content-Type': 'application/json; charset=UTF-8', |
|
117 |
- }, |
|
118 |
- data: { |
|
119 |
- bbsId: item.bbsId, |
|
120 |
- stdId: vm.stdId, |
|
121 |
- }, |
|
122 |
- }) |
|
123 |
- .then(function (res) { |
|
124 |
- vm.boardList(); |
|
125 |
- }) |
|
126 |
- .catch(function (error) { |
|
127 |
- console.log('result - error : ', error); |
|
128 |
- }); |
|
129 |
- }, |
|
130 |
- closeBtn() { |
|
131 |
- this.searchOpen = false; |
|
132 |
- }, |
|
133 |
- closeBtn2() { |
|
134 |
- this.searchOpen2 = false; |
|
135 |
- }, |
|
136 |
- |
|
137 |
- logout() { |
|
138 |
- const result = confirm('로그아웃 하시겠습니까?'); |
|
139 |
- if (result) { |
|
140 |
- this.$store.dispatch('logout'); |
|
141 |
- this.goToPage('login'); |
|
142 |
- } else { |
|
143 |
- return; |
|
144 |
- } |
|
145 |
- }, |
|
146 |
- goToPage(page) { |
|
147 |
- this.$router.push({ name: page }); |
|
148 |
- }, |
|
149 |
- |
|
150 |
- // 공지 조회 |
|
151 |
- boardList() { |
|
152 |
- const vm = this; |
|
153 |
- axios({ |
|
154 |
- url: '/board/boardStudentList.json', |
|
155 |
- method: 'post', |
|
156 |
- headers: { |
|
157 |
- 'Content-Type': 'application/json; charset=UTF-8', |
|
158 |
- }, |
|
159 |
- data: { page: vm.page, pageSize: vm.pageSize, userId: vm.userId }, |
|
160 |
- }) |
|
161 |
- .then(function (res) { |
|
162 |
- vm.dataList = res.data.result[0].boardClass[0].board; |
|
163 |
- vm.userNm = res.data.result[0].userNm; |
|
164 |
- vm.userId = res.data.result[0].userId; |
|
165 |
- vm.unCheck = res.data.unCheck; |
|
166 |
- vm.stdId = res.data.result[0].boardClass[0].board[0].boardStudent[0].stdId; |
|
167 |
- vm.totalBoard = res.data.totalBoard; |
|
168 |
- vm.totalPages = Math.ceil(vm.totalBoard / vm.pageSize); |
|
169 |
- }) |
|
170 |
- .catch(function (error) { |
|
171 |
- console.log('result - error : ', error); |
|
172 |
- }); |
|
173 |
- }, |
|
174 |
- |
|
175 |
- previousPage() { |
|
176 |
- if (this.page > 1) { |
|
177 |
- this.page -= 1; |
|
178 |
- this.boardList(); |
|
179 |
- } |
|
180 |
- }, |
|
181 |
- |
|
182 |
- nextPage() { |
|
183 |
- if (this.page < this.totalPages) { |
|
184 |
- this.page += 1; |
|
185 |
- this.boardList(); |
|
186 |
- } |
|
187 |
- }, |
|
135 |
+ buttonSearch() { |
|
136 |
+ this.searchOpen = true; |
|
188 | 137 |
}, |
189 |
- watch: {}, |
|
190 |
- computed: {}, |
|
191 |
- components: { |
|
192 |
- SvgIcon, |
|
193 |
- Menu: Menu, |
|
138 |
+ buttonSearch2(item) { |
|
139 |
+ const vm = this; |
|
140 |
+ this.searchOpen2 = true; |
|
141 |
+ this.boardData = item; |
|
142 |
+ |
|
143 |
+ axios({ |
|
144 |
+ url: "/board/boardStudentCheck.json", |
|
145 |
+ method: "post", |
|
146 |
+ headers: { |
|
147 |
+ "Content-Type": "application/json; charset=UTF-8", |
|
148 |
+ }, |
|
149 |
+ data: { |
|
150 |
+ bbsId: item.bbsId, |
|
151 |
+ stdId: vm.stdId, |
|
152 |
+ }, |
|
153 |
+ }) |
|
154 |
+ .then(function (res) { |
|
155 |
+ vm.boardList(); |
|
156 |
+ }) |
|
157 |
+ .catch(function (error) { |
|
158 |
+ console.log("result - error : ", error); |
|
159 |
+ }); |
|
194 | 160 |
}, |
195 |
- mounted() { |
|
196 |
- console.log('Header mounted'); |
|
161 |
+ closeBtn() { |
|
162 |
+ this.searchOpen = false; |
|
163 |
+ }, |
|
164 |
+ closeBtn2() { |
|
165 |
+ this.searchOpen2 = false; |
|
166 |
+ }, |
|
167 |
+ |
|
168 |
+ logout() { |
|
169 |
+ const result = confirm("로그아웃 하시겠습니까?"); |
|
170 |
+ if (result) { |
|
171 |
+ this.$store.dispatch("logout"); |
|
172 |
+ this.goToPage("login"); |
|
173 |
+ } else { |
|
174 |
+ return; |
|
175 |
+ } |
|
176 |
+ }, |
|
177 |
+ goToPage(page) { |
|
178 |
+ this.$router.push({ name: page }); |
|
179 |
+ }, |
|
180 |
+ |
|
181 |
+ // 공지 조회 |
|
182 |
+ boardList() { |
|
183 |
+ const vm = this; |
|
184 |
+ axios({ |
|
185 |
+ url: "/board/boardStudentList.json", |
|
186 |
+ method: "post", |
|
187 |
+ headers: { |
|
188 |
+ "Content-Type": "application/json; charset=UTF-8", |
|
189 |
+ }, |
|
190 |
+ data: { page: vm.page, pageSize: vm.pageSize, userId: vm.userId }, |
|
191 |
+ }) |
|
192 |
+ .then(function (res) { |
|
193 |
+ vm.dataList = res.data.result[0].boardClass[0].board; |
|
194 |
+ vm.userNm = res.data.result[0].userNm; |
|
195 |
+ vm.userId = res.data.result[0].userId; |
|
196 |
+ vm.unCheck = res.data.unCheck; |
|
197 |
+ vm.stdId = |
|
198 |
+ res.data.result[0].boardClass[0].board[0].boardStudent[0].stdId; |
|
199 |
+ vm.totalBoard = res.data.totalBoard; |
|
200 |
+ vm.totalPages = Math.ceil(vm.totalBoard / vm.pageSize); |
|
201 |
+ }) |
|
202 |
+ .catch(function (error) { |
|
203 |
+ console.log("result - error : ", error); |
|
204 |
+ }); |
|
205 |
+ }, |
|
206 |
+ |
|
207 |
+ previousPage() { |
|
208 |
+ if (this.page > 1) { |
|
209 |
+ this.page -= 1; |
|
197 | 210 |
this.boardList(); |
211 |
+ } |
|
198 | 212 |
}, |
213 |
+ |
|
214 |
+ nextPage() { |
|
215 |
+ if (this.page < this.totalPages) { |
|
216 |
+ this.page += 1; |
|
217 |
+ this.boardList(); |
|
218 |
+ } |
|
219 |
+ }, |
|
220 |
+ }, |
|
221 |
+ watch: {}, |
|
222 |
+ computed: {}, |
|
223 |
+ components: { |
|
224 |
+ SvgIcon, |
|
225 |
+ Menu: Menu, |
|
226 |
+ }, |
|
227 |
+ mounted() { |
|
228 |
+ console.log("Header mounted"); |
|
229 |
+ this.boardList(); |
|
230 |
+ }, |
|
199 | 231 |
}; |
200 | 232 |
</script> |
201 | 233 |
<style scoped> |
202 | 234 |
.popup-wrap { |
203 |
- position: fixed; |
|
204 |
- background-color: transparent; |
|
205 |
- width: fit-content; |
|
206 |
- height: fit-content; |
|
207 |
- z-index: 10; |
|
235 |
+ position: fixed; |
|
236 |
+ background-color: transparent; |
|
237 |
+ width: fit-content; |
|
238 |
+ height: fit-content; |
|
239 |
+ z-index: 10; |
|
208 | 240 |
} |
209 | 241 |
|
210 | 242 |
.popup-box { |
211 |
- top: 300px; |
|
212 |
- left: 62%; |
|
243 |
+ top: 300px; |
|
244 |
+ left: 62%; |
|
213 | 245 |
} |
214 | 246 |
|
215 | 247 |
.popup2 .popup-box { |
216 |
- top: 450px; |
|
217 |
- left: 38%; |
|
248 |
+ top: 450px; |
|
249 |
+ left: 38%; |
|
218 | 250 |
} |
219 | 251 |
|
252 |
+/* |
|
220 | 253 |
.header-box { |
221 | 254 |
background-color: white; |
222 | 255 |
padding: 10px 50px; |
223 | 256 |
box-shadow: rgba(14, 63, 126, 0.04) 0px 0px 0px 1px, rgba(42, 51, 69, 0.04) 0px 1px 1px -0.5px, |
224 | 257 |
rgba(42, 51, 70, 0.04) 0px 3px 3px -1.5px, rgba(42, 51, 70, 0.04) 0px 6px 6px -3px, |
225 | 258 |
rgba(14, 63, 126, 0.04) 0px 12px 12px -6px, rgba(14, 63, 126, 0.04) 0px 24px 24px -12px; |
259 |
+} */ |
|
260 |
+ |
|
261 |
+.header-box { |
|
262 |
+ background-color: #ffffff80; |
|
263 |
+ padding: 10px 50px; |
|
264 |
+ /* box-shadow: rgba(14, 63, 126, 0.04) 0px 0px 0px 1px, rgba(42, 51, 69, 0.04) 0px 1px 1px -0.5px, rgba(42, 51, 70, 0.04) 0px 3px 3px -1.5px, rgba(42, 51, 70, 0.04) 0px 6px 6px -3px, rgba(14, 63, 126, 0.04) 0px 12px 12px -6px, rgba(14, 63, 126, 0.04) 0px 24px 24px -12px; */ |
|
265 |
+ backdrop-filter: blur(10px); |
|
226 | 266 |
} |
227 | 267 |
</style> |
--- client/views/layout/Side.vue
+++ client/views/layout/Side.vue
... | ... | @@ -1,43 +1,54 @@ |
1 | 1 |
<template> |
2 |
- <div class="side"> |
|
3 |
- <div class="profile mb30"> |
|
4 |
- <div class="flex align-center" style="gap: 18px"> |
|
5 |
- <img src="../../resources/img/img16_s.png" alt="" style="border-radius: 100%; width: 10rem" /> |
|
6 |
- <div class="mt25"> |
|
7 |
- <div> |
|
8 |
- <p class="name mb10">{{ studentInfo.studentName }}</p> |
|
9 |
- <p class="mb5"> |
|
10 |
- <span><img src="../../resources/img/new_img/icon/school_icon.png" alt="" /></span> |
|
11 |
- {{ studentInfo.institutionName }} {{ studentInfo.grade }}학년 |
|
12 |
- {{ studentInfo.className }} |
|
13 |
- </p> |
|
14 |
- </div> |
|
15 |
- <!-- <progress-bar :progress="progress"></progress-bar> --> |
|
16 |
- </div> |
|
17 |
- </div> |
|
18 |
- <div class="problem-box mt25"> |
|
19 |
- <p style="font-weight: bold"> |
|
20 |
- 지금까지 푼 총 문제 수 : |
|
21 |
- <span style="color: #9528b7; font-size: 16px; font-weight: bold" |
|
22 |
- >{{ studentInfo.totalProblemsSolved }}개</span |
|
23 |
- > |
|
24 |
- </p> |
|
25 |
- </div> |
|
2 |
+ <div class="side"> |
|
3 |
+ <div class="profile mb30"> |
|
4 |
+ <div class="flex align-center" style="gap: 18px"> |
|
5 |
+ <img |
|
6 |
+ src="../../resources/img/img16_s.png" |
|
7 |
+ alt="" |
|
8 |
+ style="border-radius: 100%; width: 10rem" |
|
9 |
+ /> |
|
10 |
+ <div class="mt25"> |
|
11 |
+ <div> |
|
12 |
+ <p class="name mb10">{{ studentInfo.studentName }}</p> |
|
13 |
+ <p class="mb5"> |
|
14 |
+ <span |
|
15 |
+ ><img |
|
16 |
+ src="../../resources/img/new_img/icon/school_icon.png" |
|
17 |
+ alt="" |
|
18 |
+ /></span> |
|
19 |
+ {{ studentInfo.institutionName }} {{ studentInfo.grade }}학년 |
|
20 |
+ {{ studentInfo.className }} |
|
21 |
+ </p> |
|
22 |
+ </div> |
|
23 |
+ <!-- <progress-bar :progress="progress"></progress-bar> --> |
|
26 | 24 |
</div> |
27 |
- <hr style="margin: 25px 20px" /> |
|
28 |
- <div class="history-box"> |
|
29 |
- <p class="title2 mb20">최근 학습 히스토리</p> |
|
30 |
- <ul class="flex-column" style="gap: 10px"> |
|
31 |
- <!-- 더미 데이터 --> |
|
32 |
- <li>· 지학사 3학년 1학기</li> |
|
33 |
- <li>· 지학사 3학년 2학기</li> |
|
34 |
- <!-- 여기까지 --> |
|
35 |
- <li v-for="historyItem in studentInfo.history" :key="historyItem.unitId"> |
|
36 |
- · [{{ historyItem.bookName }}] {{ historyItem.unitName }} |
|
37 |
- </li> |
|
38 |
- </ul> |
|
39 |
- </div> |
|
40 |
- <!-- <div class="ask mb30"> |
|
25 |
+ </div> |
|
26 |
+ <div class="problem-box mt25"> |
|
27 |
+ <p style="font-weight: bold"> |
|
28 |
+ 지금까지 푼 총 문제 수 : |
|
29 |
+ <span style="color: #9528b7; font-size: 16px; font-weight: bold" |
|
30 |
+ >{{ studentInfo.totalProblemsSolved }}개</span |
|
31 |
+ > |
|
32 |
+ </p> |
|
33 |
+ </div> |
|
34 |
+ </div> |
|
35 |
+ <hr style="margin: 25px 20px" /> |
|
36 |
+ <div class="history-box"> |
|
37 |
+ <p class="title2 mb20">최근 학습 히스토리</p> |
|
38 |
+ <ul class="flex-column" style="gap: 10px"> |
|
39 |
+ <!-- 더미 데이터 --> |
|
40 |
+ <li>· 에듀캐롯 3학년 1학기</li> |
|
41 |
+ <li>· 에듀캐롯 3학년 2학기</li> |
|
42 |
+ <!-- 여기까지 --> |
|
43 |
+ <li |
|
44 |
+ v-for="historyItem in studentInfo.history" |
|
45 |
+ :key="historyItem.unitId" |
|
46 |
+ > |
|
47 |
+ · [{{ historyItem.bookName }}] {{ historyItem.unitName }} |
|
48 |
+ </li> |
|
49 |
+ </ul> |
|
50 |
+ </div> |
|
51 |
+ <!-- <div class="ask mb30"> |
|
41 | 52 |
<p class="title1 mb15">선생님께 질문 있어요~</p> |
42 | 53 |
|
43 | 54 |
<div class="memo mb15"> |
... | ... | @@ -52,231 +63,255 @@ |
52 | 63 |
<button @click="updateQuestion">질문하기</button> |
53 | 64 |
</div> |
54 | 65 |
</div> --> |
55 |
- <div class="mt25"> |
|
56 |
- <div class="button-box flex"> |
|
57 |
- <button @click="handleClickEvent" style="width: 100%"> |
|
58 |
- <img |
|
59 |
- class="look-btn" |
|
60 |
- src="../../resources/img/new_img/plan/wrong_note_btn.png" |
|
61 |
- alt="" |
|
62 |
- style="width: 100%" |
|
63 |
- /> |
|
64 |
- </button> |
|
65 |
- </div> |
|
66 |
- <div class="button-box flex"> |
|
67 |
- <button @click="goPopupOpen" style="width: 100%"> |
|
68 |
- <img src="../../resources/img/new_img/plan/question_btn.png" alt="" style="width: 100%" /> |
|
69 |
- </button> |
|
70 |
- </div> |
|
71 |
- </div> |
|
66 |
+ <div class="mt25"> |
|
67 |
+ <div class="button-box flex"> |
|
68 |
+ <button @click="handleClickEvent" style="width: 100%"> |
|
69 |
+ <img |
|
70 |
+ class="look-btn" |
|
71 |
+ src="../../resources/img/new_img/plan/wrong_note_btn.png" |
|
72 |
+ alt="" |
|
73 |
+ style="width: 100%" |
|
74 |
+ /> |
|
75 |
+ </button> |
|
76 |
+ </div> |
|
77 |
+ <div class="button-box flex"> |
|
78 |
+ <button @click="goPopupOpen" style="width: 100%"> |
|
79 |
+ <img |
|
80 |
+ src="../../resources/img/new_img/plan/question_btn.png" |
|
81 |
+ alt="" |
|
82 |
+ style="width: 100%" |
|
83 |
+ /> |
|
84 |
+ </button> |
|
85 |
+ </div> |
|
72 | 86 |
</div> |
73 |
- <!-- 질문하기 팝업 --> |
|
74 |
- <div class="popup-wrap" v-if="this.popupOpen === true" style="z-index: 100"> |
|
75 |
- <div class="question-popup"> |
|
76 |
- <div class="flex justify-between align-center"> |
|
77 |
- <p class="question-text mt20">선생님께 질문하기</p> |
|
78 |
- <img class="look-btn" @click="goPopupClose" src="../../resources/img/btn25_93t_normal.png" alt="" /> |
|
79 |
- </div> |
|
80 |
- <p style="color: #8c8c8c; font-size: 20px; margin: 40px 0px">선생님! 질문있어요!!</p> |
|
81 |
- <div class="memo mt25"> |
|
82 |
- <p class="title1 memo-text">내용</p> |
|
83 |
- <textarea name="" id="" placeholder="궁금한 것을 적어보세요." v-model="question"></textarea> |
|
84 |
- </div> |
|
85 |
- <div class="questionBtn-box flex justify-end" style="gap: 15px"> |
|
86 |
- <button style="border-color: #eaedf4; color: #8c8c8c" @click="goPopupClose">취소하기</button> |
|
87 |
- <button @click="updateQuestion" style="border-color: #6327b9; color: white; background-color: #6327b9"> |
|
88 |
- 질문하기 |
|
89 |
- </button> |
|
90 |
- </div> |
|
91 |
- </div> |
|
87 |
+ </div> |
|
88 |
+ <!-- 질문하기 팝업 --> |
|
89 |
+ <div class="popup-wrap" v-if="this.popupOpen === true" style="z-index: 100"> |
|
90 |
+ <div class="question-popup"> |
|
91 |
+ <div class="flex justify-between align-center"> |
|
92 |
+ <p class="question-text mt20">선생님께 질문하기</p> |
|
93 |
+ <img |
|
94 |
+ class="look-btn" |
|
95 |
+ @click="goPopupClose" |
|
96 |
+ src="../../resources/img/btn25_93t_normal.png" |
|
97 |
+ alt="" |
|
98 |
+ /> |
|
99 |
+ </div> |
|
100 |
+ <p style="color: #8c8c8c; font-size: 20px; margin: 40px 0px"> |
|
101 |
+ 선생님! 질문있어요!! |
|
102 |
+ </p> |
|
103 |
+ <div class="memo mt25"> |
|
104 |
+ <p class="title1 memo-text">내용</p> |
|
105 |
+ <textarea |
|
106 |
+ name="" |
|
107 |
+ id="" |
|
108 |
+ placeholder="궁금한 것을 적어보세요." |
|
109 |
+ v-model="question" |
|
110 |
+ ></textarea> |
|
111 |
+ </div> |
|
112 |
+ <div class="questionBtn-box flex justify-end" style="gap: 15px"> |
|
113 |
+ <button |
|
114 |
+ style="border-color: #eaedf4; color: #8c8c8c" |
|
115 |
+ @click="goPopupClose" |
|
116 |
+ > |
|
117 |
+ 취소하기 |
|
118 |
+ </button> |
|
119 |
+ <button |
|
120 |
+ @click="updateQuestion" |
|
121 |
+ style="border-color: #6327b9; color: white; background-color: #6327b9" |
|
122 |
+ > |
|
123 |
+ 질문하기 |
|
124 |
+ </button> |
|
125 |
+ </div> |
|
92 | 126 |
</div> |
127 |
+ </div> |
|
93 | 128 |
</template> |
94 | 129 |
|
95 | 130 |
<script> |
96 |
-import ProgressBar from '../component/ProgressBar.vue'; |
|
97 |
-import axios from 'axios'; |
|
131 |
+import ProgressBar from "../component/ProgressBar.vue"; |
|
132 |
+import axios from "axios"; |
|
98 | 133 |
|
99 | 134 |
export default { |
100 |
- data() { |
|
101 |
- return { |
|
102 |
- progress: 20, |
|
103 |
- studentInfo: { |
|
104 |
- studentName: '', |
|
105 |
- institutionName: '', |
|
106 |
- grade: '', |
|
107 |
- className: '', |
|
108 |
- studentQuestion: '', |
|
109 |
- history: [], |
|
110 |
- }, |
|
111 |
- userId: '1', // userId 임시 설정 |
|
135 |
+ data() { |
|
136 |
+ return { |
|
137 |
+ progress: 20, |
|
138 |
+ studentInfo: { |
|
139 |
+ studentName: "", |
|
140 |
+ institutionName: "", |
|
141 |
+ grade: "", |
|
142 |
+ className: "", |
|
143 |
+ studentQuestion: "", |
|
144 |
+ history: [], |
|
145 |
+ }, |
|
146 |
+ userId: "1", // userId 임시 설정 |
|
112 | 147 |
|
113 |
- popupOpen: false, |
|
114 |
- question: null, |
|
115 |
- }; |
|
148 |
+ popupOpen: false, |
|
149 |
+ question: null, |
|
150 |
+ }; |
|
151 |
+ }, |
|
152 |
+ methods: { |
|
153 |
+ pageSetting() { |
|
154 |
+ this.userId = this.$store.getters.getUserInfo.userId; |
|
155 |
+ console.log("유저 아이디: ", this.userId); |
|
156 |
+ this.fetchStudentInfo(); |
|
116 | 157 |
}, |
117 |
- methods: { |
|
118 |
- pageSetting() { |
|
119 |
- this.userId = this.$store.getters.getUserInfo.userId; |
|
120 |
- console.log('유저 아이디: ', this.userId); |
|
121 |
- this.fetchStudentInfo(); |
|
122 |
- }, |
|
123 | 158 |
|
124 |
- // 학생 정보를 가져오는 메서드 |
|
125 |
- fetchStudentInfo() { |
|
126 |
- axios |
|
127 |
- .post('/studentInfo/getInfo.json', { userId: this.userId }) |
|
128 |
- .then((response) => { |
|
129 |
- console.log('학생 정보 조회 : ', response.data); |
|
130 |
- this.studentInfo = response.data; |
|
131 |
- }) |
|
132 |
- .catch((error) => { |
|
133 |
- console.error('학생 정보 가져오기 실패:', error); |
|
134 |
- }); |
|
135 |
- }, |
|
136 |
- |
|
137 |
- // 질문 업데이트 메서드 |
|
138 |
- updateQuestion() { |
|
139 |
- if (this.question === null) { |
|
140 |
- alert('질문을 입력해주세요'); |
|
141 |
- return; |
|
142 |
- } |
|
143 |
- axios |
|
144 |
- .post('/studentInfo/updateQuestion.json', { |
|
145 |
- userId: this.userId, |
|
146 |
- // userId: 'USID_000000000000002', |
|
147 |
- studentQuestion: this.question, |
|
148 |
- }) |
|
149 |
- .then((response) => { |
|
150 |
- console.log('질문이 성공적으로 업데이트되었습니다.'); |
|
151 |
- alert('질문이 성공적으로 업데이트되었습니다.'); |
|
152 |
- }) |
|
153 |
- .catch((error) => { |
|
154 |
- console.error('질문 업데이트 실패:', error); |
|
155 |
- alert('질문 업데이트에 실패했습니다.'); |
|
156 |
- }); |
|
157 |
- this.question = null; |
|
158 |
- }, |
|
159 |
- |
|
160 |
- handleClick() { |
|
161 |
- this.toggleText(); |
|
162 |
- this.goToPage('PreviewNote'); |
|
163 |
- }, |
|
164 |
- |
|
165 |
- handleClick() { |
|
166 |
- this.toggleTextAndNavigate(); |
|
167 |
- }, |
|
168 |
- |
|
169 |
- toggleTextAndNavigate() { |
|
170 |
- if (this.buttonText === '오답노트') { |
|
171 |
- this.buttonText = '학습 코스'; |
|
172 |
- this.goToPage('PreviewNote'); |
|
173 |
- // 버튼 텍스트가 '학습 코스'일 때 이동할 경로 |
|
174 |
- } else { |
|
175 |
- this.buttonText = '오답노트'; |
|
176 |
- this.goToPage('Dashboard'); |
|
177 |
- // 버튼 텍스트가 '오답노트'일 때 이동할 경로 |
|
178 |
- } |
|
179 |
- }, |
|
180 |
- |
|
181 |
- handleClickEvent() { |
|
182 |
- this.goToPage('PreviewNote'); |
|
183 |
- }, |
|
184 |
- |
|
185 |
- goToPage(page) { |
|
186 |
- this.$router.push({ name: page }); |
|
187 |
- }, |
|
188 |
- |
|
189 |
- goPopupOpen() { |
|
190 |
- this.popupOpen = true; |
|
191 |
- }, |
|
192 |
- goPopupClose() { |
|
193 |
- this.popupOpen = false; |
|
194 |
- this.question = null; |
|
195 |
- }, |
|
159 |
+ // 학생 정보를 가져오는 메서드 |
|
160 |
+ fetchStudentInfo() { |
|
161 |
+ axios |
|
162 |
+ .post("/studentInfo/getInfo.json", { userId: this.userId }) |
|
163 |
+ .then((response) => { |
|
164 |
+ console.log("학생 정보 조회 : ", response.data); |
|
165 |
+ this.studentInfo = response.data; |
|
166 |
+ }) |
|
167 |
+ .catch((error) => { |
|
168 |
+ console.error("학생 정보 가져오기 실패:", error); |
|
169 |
+ }); |
|
196 | 170 |
}, |
197 |
- watch: {}, |
|
198 |
- computed: {}, |
|
199 |
- components: { |
|
200 |
- ProgressBar, |
|
171 |
+ |
|
172 |
+ // 질문 업데이트 메서드 |
|
173 |
+ updateQuestion() { |
|
174 |
+ if (this.question === null) { |
|
175 |
+ alert("질문을 입력해주세요"); |
|
176 |
+ return; |
|
177 |
+ } |
|
178 |
+ axios |
|
179 |
+ .post("/studentInfo/updateQuestion.json", { |
|
180 |
+ userId: this.userId, |
|
181 |
+ // userId: 'USID_000000000000002', |
|
182 |
+ studentQuestion: this.question, |
|
183 |
+ }) |
|
184 |
+ .then((response) => { |
|
185 |
+ console.log("질문이 성공적으로 업데이트되었습니다."); |
|
186 |
+ alert("질문이 성공적으로 업데이트되었습니다."); |
|
187 |
+ }) |
|
188 |
+ .catch((error) => { |
|
189 |
+ console.error("질문 업데이트 실패:", error); |
|
190 |
+ alert("질문 업데이트에 실패했습니다."); |
|
191 |
+ }); |
|
192 |
+ this.question = null; |
|
201 | 193 |
}, |
202 |
- mounted() { |
|
203 |
- console.log('Side mounted'); |
|
204 |
- this.pageSetting(); |
|
194 |
+ |
|
195 |
+ handleClick() { |
|
196 |
+ this.toggleText(); |
|
197 |
+ this.goToPage("PreviewNote"); |
|
205 | 198 |
}, |
199 |
+ |
|
200 |
+ handleClick() { |
|
201 |
+ this.toggleTextAndNavigate(); |
|
202 |
+ }, |
|
203 |
+ |
|
204 |
+ toggleTextAndNavigate() { |
|
205 |
+ if (this.buttonText === "오답노트") { |
|
206 |
+ this.buttonText = "학습 코스"; |
|
207 |
+ this.goToPage("PreviewNote"); |
|
208 |
+ // 버튼 텍스트가 '학습 코스'일 때 이동할 경로 |
|
209 |
+ } else { |
|
210 |
+ this.buttonText = "오답노트"; |
|
211 |
+ this.goToPage("Dashboard"); |
|
212 |
+ // 버튼 텍스트가 '오답노트'일 때 이동할 경로 |
|
213 |
+ } |
|
214 |
+ }, |
|
215 |
+ |
|
216 |
+ handleClickEvent() { |
|
217 |
+ this.goToPage("PreviewNote"); |
|
218 |
+ }, |
|
219 |
+ |
|
220 |
+ goToPage(page) { |
|
221 |
+ this.$router.push({ name: page }); |
|
222 |
+ }, |
|
223 |
+ |
|
224 |
+ goPopupOpen() { |
|
225 |
+ this.popupOpen = true; |
|
226 |
+ }, |
|
227 |
+ goPopupClose() { |
|
228 |
+ this.popupOpen = false; |
|
229 |
+ this.question = null; |
|
230 |
+ }, |
|
231 |
+ }, |
|
232 |
+ watch: {}, |
|
233 |
+ computed: {}, |
|
234 |
+ components: { |
|
235 |
+ ProgressBar, |
|
236 |
+ }, |
|
237 |
+ mounted() { |
|
238 |
+ console.log("Side mounted"); |
|
239 |
+ this.pageSetting(); |
|
240 |
+ }, |
|
206 | 241 |
}; |
207 | 242 |
</script> |
208 | 243 |
<style scoped> |
209 | 244 |
.login-btn img { |
210 |
- width: 430px; |
|
211 |
- height: 85px; |
|
245 |
+ width: 430px; |
|
246 |
+ height: 85px; |
|
212 | 247 |
} |
213 | 248 |
|
214 | 249 |
.problem-box { |
215 |
- display: flex; |
|
216 |
- align-items: center; |
|
217 |
- justify-content: center; |
|
218 |
- border: 2px solid #6327b9; |
|
219 |
- background-color: #f0eaf8; |
|
220 |
- border-radius: 8px; |
|
221 |
- padding: 10px 10px; |
|
250 |
+ display: flex; |
|
251 |
+ align-items: center; |
|
252 |
+ justify-content: center; |
|
253 |
+ border: 2px solid #6327b9; |
|
254 |
+ background-color: #f0eaf8; |
|
255 |
+ border-radius: 8px; |
|
256 |
+ padding: 10px 10px; |
|
222 | 257 |
} |
223 | 258 |
|
224 | 259 |
.history-box { |
225 |
- background-color: white; |
|
226 |
- padding: 30px 20px; |
|
227 |
- border: 1px solid #c6c6c6; |
|
228 |
- border-radius: 10px; |
|
229 |
- margin: 25px 20px 0px; |
|
260 |
+ background-color: white; |
|
261 |
+ padding: 30px 20px; |
|
262 |
+ border: 1px solid #c6c6c6; |
|
263 |
+ border-radius: 10px; |
|
264 |
+ margin: 25px 20px 0px; |
|
230 | 265 |
} |
231 | 266 |
|
232 | 267 |
.history-box li { |
233 |
- background-color: #eaedf4; |
|
234 |
- border-radius: 10px; |
|
235 |
- font-size: 18px; |
|
236 |
- list-style-type: none; |
|
237 |
- padding: 10px; |
|
268 |
+ background-color: #eaedf4; |
|
269 |
+ border-radius: 10px; |
|
270 |
+ font-size: 18px; |
|
271 |
+ list-style-type: none; |
|
272 |
+ padding: 10px; |
|
238 | 273 |
} |
239 | 274 |
|
240 | 275 |
.button-box { |
241 |
- margin: 10px 20px; |
|
276 |
+ margin: 10px 20px; |
|
242 | 277 |
} |
243 | 278 |
|
244 | 279 |
.question-popup { |
245 |
- background-color: white; |
|
246 |
- border-radius: 10px; |
|
247 |
- padding: 30px 40px; |
|
248 |
- position: absolute; |
|
249 |
- top: 15%; |
|
250 |
- left: 25%; |
|
251 |
- width: 100rem; |
|
280 |
+ background-color: white; |
|
281 |
+ border-radius: 10px; |
|
282 |
+ padding: 30px 40px; |
|
283 |
+ position: absolute; |
|
284 |
+ top: 15%; |
|
285 |
+ left: 25%; |
|
286 |
+ width: 100rem; |
|
252 | 287 |
} |
253 | 288 |
|
254 | 289 |
.question-text { |
255 |
- font-family: 'ONEMobilePOPOTF'; |
|
256 |
- font-size: 32px; |
|
257 |
- color: #6327b9; |
|
290 |
+ font-family: "ONEMobilePOPOTF"; |
|
291 |
+ font-size: 32px; |
|
292 |
+ color: #6327b9; |
|
258 | 293 |
} |
259 | 294 |
|
260 | 295 |
.memo-text { |
261 |
- font-family: 'ONEMobilePOPOTF'; |
|
262 |
- color: #6327b9; |
|
296 |
+ font-family: "ONEMobilePOPOTF"; |
|
297 |
+ color: #6327b9; |
|
263 | 298 |
} |
264 | 299 |
|
265 | 300 |
.memo textarea { |
266 |
- border: 2px solid #cac0e3; |
|
267 |
- border-radius: 10px; |
|
268 |
- width: 100%; |
|
269 |
- padding: 20px; |
|
270 |
- height: 30rem; |
|
271 |
- margin: 20px 0px 40px; |
|
301 |
+ border: 2px solid #cac0e3; |
|
302 |
+ border-radius: 10px; |
|
303 |
+ width: 100%; |
|
304 |
+ padding: 20px; |
|
305 |
+ height: 30rem; |
|
306 |
+ margin: 20px 0px 40px; |
|
272 | 307 |
} |
273 | 308 |
|
274 | 309 |
.questionBtn-box button { |
275 |
- font-size: 18px; |
|
276 |
- padding: 8px 30px; |
|
277 |
- border: 2px solid; |
|
278 |
- border-radius: 8px; |
|
279 |
- font-weight: bold; |
|
280 |
- font-family: 'ONEMobileOTF-Regular'; |
|
310 |
+ font-size: 18px; |
|
311 |
+ padding: 8px 30px; |
|
312 |
+ border: 2px solid; |
|
313 |
+ border-radius: 8px; |
|
314 |
+ font-weight: bold; |
|
315 |
+ font-family: "ONEMobileOTF-Regular"; |
|
281 | 316 |
} |
282 | 317 |
</style> |
--- client/views/pages/main/Chapter/Chapter1.vue
+++ client/views/pages/main/Chapter/Chapter1.vue
... | ... | @@ -3,18 +3,19 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
10 |
- <div class="title-box mb25 flex align-center mt40" style=" |
|
11 |
- justify-content: space-between; |
|
12 |
-"> |
|
10 |
+ <div |
|
11 |
+ class="title-box mb25 flex align-center mt40" |
|
12 |
+ style="justify-content: space-between" |
|
13 |
+ > |
|
13 | 14 |
<div> |
14 | 15 |
<span class="title mr40">1. Hello WORLD</span> |
15 | 16 |
<span class="subtitle">my name is dd</span> |
16 | 17 |
</div> |
17 |
- <button class="completeBtn" @click="complete"> 학습 종료 </button> |
|
18 |
+ <button class="completeBtn" @click="complete">학습 종료</button> |
|
18 | 19 |
</div> |
19 | 20 |
<div class="flex justify-between align-center"> |
20 | 21 |
<div class="pre-btn"> |
... | ... | @@ -43,8 +44,11 @@ |
43 | 44 |
}, |
44 | 45 |
methods: { |
45 | 46 |
complete() { |
46 |
- const { unit_id, book_id } = this.$route.query; |
|
47 |
- this.$router.push({ name: 'Dashboard', query: { value: 1, unit_id, book_id } }); |
|
47 |
+ const { unit_id, book_id } = this.$route.query; |
|
48 |
+ this.$router.push({ |
|
49 |
+ name: "Dashboard", |
|
50 |
+ query: { value: 1, unit_id, book_id }, |
|
51 |
+ }); |
|
48 | 52 |
}, |
49 | 53 |
goToPage(page) { |
50 | 54 |
this.$router.push({ name: page }); |
... | ... | @@ -115,6 +119,6 @@ |
115 | 119 |
padding: 10px 30px; |
116 | 120 |
border-radius: 10px; |
117 | 121 |
font-size: 28px; |
118 |
- font-family: 'ONEMobilePOPOTF'; |
|
122 |
+ font-family: "ONEMobilePOPOTF"; |
|
119 | 123 |
} |
120 | 124 |
</style> |
--- client/views/pages/main/Chapter/Chapter1_1.vue
+++ client/views/pages/main/Chapter/Chapter1_1.vue
... | ... | @@ -1,88 +1,373 @@ |
1 | 1 |
<template> |
2 |
- <div id="Chapter1_1" class="content-wrap"> |
|
3 |
- <div style="margin: 30px 0px 50px; width: 20%"> |
|
4 |
- <router-link to="/MyPlan.page"> |
|
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div> |
|
6 |
- </router-link> |
|
7 |
- </div> |
|
8 |
- <div class="title-box mb25 flex align-center mt40"> |
|
9 |
- <span class="title mr40">1. Hello WORLD</span> |
|
10 |
- <span class="subtitle">my name is dd</span> |
|
11 |
- </div> |
|
12 |
- <div class="flex justify-between align-center"> |
|
13 |
- <div class="pre-btn" @click="goToPage('Chapter1')"><img src="../../../../resources/img/left.png" alt=""></div> |
|
14 |
- <div class="content title-box"> |
|
15 |
- <p class="title mt25 title-bg">step1. Hello WORLD</p> |
|
16 |
- |
|
17 |
- <div class="imgGroup"> |
|
18 |
- <img src="../../../../resources/img/img35_s.png" data-num="1"> |
|
19 |
- |
|
2 |
+ <div id="Chapter1_1" class="content-wrap"> |
|
3 |
+ <div style="margin: 30px 0px 50px; width: 20%"> |
|
4 |
+ <router-link to="/MyPlan.page"> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
8 |
+ </router-link> |
|
20 | 9 |
</div> |
21 |
- <div class="textareaGroup"> |
|
22 |
- <textarea>Bike lanes are important because they ket, bike riders and all other people safe. Before bike lanes, people rode on the sidewalk or in the same lanes as the cars on the street. Riding a bike on the sidewalk can cause you to crash into someone who is walking by. And riding a bike in the same lanes as cars can be unsafe, too, Bikes move more slowly than cars, so people driving behind bikes will try to go around them. These cars could hit the bike riders or other cars. </textarea> |
|
23 |
- <div id="popup" class="popup"> |
|
24 |
- <div class="imgGroup mb10"> |
|
25 |
- <img src="../../../../resources/img/img36_s.png" data-num="1"> |
|
10 |
+ <div class="title-box mb25 flex align-center mt40" style="justify-content: space-between"> |
|
11 |
+ <div> |
|
12 |
+ <span class="title mr40">1. Hello WORLD</span> |
|
13 |
+ <span class="subtitle">my name is dd</span> |
|
26 | 14 |
</div> |
27 |
- <h3>sidewalk</h3> |
|
28 |
- <div class="flex align-center justify-center mt10"> |
|
29 |
- <p class="yellow-box">명</p> |
|
30 |
- <span class="title1">보도</span> |
|
31 |
- </div> |
|
32 |
- </div> |
|
15 |
+ <div class="flex"> |
|
16 |
+ <TextToImage /> |
|
17 |
+ <button class="completeBtn" @click="complete">학습 종료</button> |
|
18 |
+ </div> |
|
33 | 19 |
</div> |
34 |
- </div> |
|
35 |
- <div class="next-btn" @click="goToPage('Chapter1_2')"><img src="../../../../resources/img/right.png" alt=""></div> |
|
20 |
+ <div class="flex justify-between align-center"> |
|
21 |
+ <div class="pre-btn" @click="goToPage('Chapter1_2')"> |
|
22 |
+ <img src="../../../../resources/img/left.png" alt="" /> |
|
23 |
+ </div> |
|
24 |
+ <div class="content title-box"> |
|
25 |
+ <p class="title mt25 title-bg">step1. Hello WORLD</p> |
|
26 |
+ <div class="flex align-center ml50 mb15" style="margin-top: -30px; gap: 10px"> |
|
27 |
+ <h4>설명에 맞춰 영어 문장의 의미를 이해해봅시다. 대화문을 클릭해보세요!</h4> |
|
28 |
+ <div class="listen-btn"> |
|
29 |
+ <img src="../../../../resources/img/btn10_s.png" alt="" @click="playAudio" /> |
|
30 |
+ <audio |
|
31 |
+ id="audio-player" |
|
32 |
+ src="client/resources/audio/passage/passage_explanation.mp3" |
|
33 |
+ preload="auto" |
|
34 |
+ ></audio> |
|
35 |
+ </div> |
|
36 |
+ </div> |
|
37 |
+ <div class="flex justify-center" style="gap: 50px"> |
|
38 |
+ <div class="readGroup"> |
|
39 |
+ <div> |
|
40 |
+ <div class="textbox"> |
|
41 |
+ <article |
|
42 |
+ v-for="(line, index) in combinedLines" |
|
43 |
+ :key="index" |
|
44 |
+ :class="['flex', 'align-center', 'mb10', { 'justify-end': index % 2 !== 0 }]" |
|
45 |
+ > |
|
46 |
+ <div v-if="index % 2 === 0" class="icon mr40"> |
|
47 |
+ <img src="../../../../resources/img/img37_s.png" alt="" /> |
|
48 |
+ <p class="name">{{ speakerA_name }}</p> |
|
49 |
+ </div> |
|
50 |
+ <p |
|
51 |
+ v-if="index % 2 === 0" |
|
52 |
+ class="read" |
|
53 |
+ @click="handleSelectLine(line)" |
|
54 |
+ :style="getStyle(line)" |
|
55 |
+ > |
|
56 |
+ {{ line }} |
|
57 |
+ </p> |
|
58 |
+ |
|
59 |
+ <p |
|
60 |
+ v-if="index % 2 !== 0" |
|
61 |
+ class="read mr40" |
|
62 |
+ @click="handleSelectLine(line)" |
|
63 |
+ :style="getStyle(line)" |
|
64 |
+ > |
|
65 |
+ {{ line }} |
|
66 |
+ </p> |
|
67 |
+ <div v-if="index % 2 !== 0" class="icon"> |
|
68 |
+ <img src="../../../../resources/img/img37_s.png" alt="" /> |
|
69 |
+ <p class="name">{{ speakerB_name }}</p> |
|
70 |
+ </div> |
|
71 |
+ </article> |
|
72 |
+ </div> |
|
73 |
+ </div> |
|
74 |
+ </div> |
|
75 |
+ <div class="button-box"> |
|
76 |
+ <button class="word" @click="wordQuestion">단어 설명</button> |
|
77 |
+ <button class="passage" @click="passageQuestion">문장 설명</button> |
|
78 |
+ </div> |
|
79 |
+ </div> |
|
80 |
+ </div> |
|
81 |
+ <div class="next-btn" @click="goToNextPage"> |
|
82 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
83 |
+ </div> |
|
84 |
+ </div> |
|
85 |
+ <div class="popup-wrap" v-if="popupOpen"> |
|
86 |
+ <div class="popup-container flex-column"> |
|
87 |
+ <div class="popup-header flex align-center"> |
|
88 |
+ <p>선생님의 한 마디</p> |
|
89 |
+ <img |
|
90 |
+ class="look-btn" |
|
91 |
+ @click="handlePopupClose" |
|
92 |
+ src="../../../../resources/img/btn25_93t_normal.png" |
|
93 |
+ alt="" |
|
94 |
+ /> |
|
95 |
+ </div> |
|
96 |
+ <div> |
|
97 |
+ <p class="popup-content mt30" v-html="formattedExplanation"></p> |
|
98 |
+ </div> |
|
99 |
+ </div> |
|
100 |
+ </div> |
|
36 | 101 |
</div> |
37 |
- </div> |
|
38 | 102 |
</template> |
39 | 103 |
|
40 | 104 |
<script> |
105 |
+import TextToImage from '../../../component/TextToImage.vue'; |
|
106 |
+import axios from 'axios'; |
|
41 | 107 |
export default { |
42 |
- data() { |
|
43 |
- return { |
|
44 |
- } |
|
45 |
- }, |
|
46 |
- methods: { |
|
47 |
- goToPage(page) { |
|
48 |
- this.$router.push({ name: page }); |
|
49 |
- } |
|
50 |
- }, |
|
51 |
- watch: { |
|
108 |
+ data() { |
|
109 |
+ return { |
|
110 |
+ text_data: null, // 받아온 지문 정보 |
|
111 |
+ speakerA_name: null, |
|
112 |
+ speakerB_name: null, |
|
113 |
+ speakerA: [], |
|
114 |
+ speakerB: [], |
|
52 | 115 |
|
53 |
- }, |
|
54 |
- computed: { |
|
116 |
+ seq: this.$store.getters.seqNum, |
|
117 |
+ selectedLine: null, // 선택한 지문 |
|
118 |
+ explanation_response: null, // 설명 응답 |
|
55 | 119 |
|
56 |
- }, |
|
57 |
- components: { |
|
58 |
- }, |
|
59 |
- mounted() { |
|
60 |
- const textArea = this.$refs.textArea; |
|
61 |
- const popup = this.$refs.popup; |
|
120 |
+ popupOpen: false, |
|
121 |
+ }; |
|
122 |
+ }, |
|
123 |
+ methods: { |
|
124 |
+ complete() { |
|
125 |
+ const { unit_id, book_id } = this.$route.query; |
|
126 |
+ this.$router.push({ |
|
127 |
+ name: 'Dashboard', |
|
128 |
+ query: { value: this.seq, unit_id, book_id }, |
|
129 |
+ }); |
|
130 |
+ }, |
|
131 |
+ goToPage(page) { |
|
132 |
+ this.$router.push({ name: page }); |
|
133 |
+ }, |
|
134 |
+ goToNextPage() { |
|
135 |
+ alert('지문 학습 완료!'); |
|
136 |
+ this.complete(); |
|
137 |
+ }, |
|
138 |
+ // 대화 지문 API |
|
139 |
+ async fetchText() { |
|
140 |
+ axios({ |
|
141 |
+ url: '/text/selectOneText.json', |
|
142 |
+ method: 'post', |
|
143 |
+ headers: { |
|
144 |
+ 'Content-Type': 'application/json; charset=UTF-8', |
|
145 |
+ }, |
|
146 |
+ data: { |
|
147 |
+ textId: this.textId, |
|
148 |
+ }, |
|
149 |
+ }) |
|
150 |
+ .then((response) => { |
|
151 |
+ this.text_data = response.data[0].text_cnt; |
|
152 |
+ this.splitConversation(); |
|
153 |
+ }) |
|
154 |
+ .catch((err) => { |
|
155 |
+ console.log('지문 에러 : ', err); |
|
156 |
+ }); |
|
157 |
+ }, |
|
158 |
+ // 대화 지문 split |
|
159 |
+ splitConversation() { |
|
160 |
+ const lines = this.text_data.split('/'); |
|
161 |
+ const speakers = {}; |
|
62 | 162 |
|
63 |
- textArea.addEventListener('mousemove', (event) => { |
|
64 |
- const text = textArea.value; |
|
65 |
- const words = text.split(' '); |
|
66 |
- const selectionStart = textArea.selectionStart; |
|
67 |
- const selectionEnd = textArea.selectionEnd; |
|
163 |
+ lines.forEach((line) => { |
|
164 |
+ const [speaker, message] = line.trim().split(':'); |
|
68 | 165 |
|
69 |
- if (selectionStart !== selectionEnd) { |
|
70 |
- const selectedText = text.substring(selectionStart, selectionEnd); |
|
71 |
- const rect = textArea.getBoundingClientRect(); |
|
72 |
- popup.style.left = `${event.clientX}px`; |
|
73 |
- popup.style.top = `${event.clientY + window.scrollY}px`; |
|
74 |
- popup.innerHTML = `You selected: ${selectedText}`; |
|
75 |
- popup.style.display = 'block'; |
|
76 |
- } else { |
|
77 |
- popup.style.display = 'none'; |
|
78 |
- } |
|
79 |
- }); |
|
166 |
+ if (!speakers.speakerA_name && !speakers.speakerB_name) { |
|
167 |
+ // 첫 번째 발화자를 speakerA_name으로 설정 |
|
168 |
+ speakers.speakerA_name = speaker.trim(); |
|
169 |
+ this.speakerA.push(message.trim()); |
|
170 |
+ } else if ( |
|
171 |
+ speakers.speakerA_name && |
|
172 |
+ !speakers.speakerB_name && |
|
173 |
+ speakers.speakerA_name !== speaker.trim() |
|
174 |
+ ) { |
|
175 |
+ // 두 번째 발화자를 speakerB_name으로 설정 |
|
176 |
+ speakers.speakerB_name = speaker.trim(); |
|
177 |
+ this.speakerB.push(message.trim()); |
|
178 |
+ } else if (speaker.trim() === speakers.speakerA_name) { |
|
179 |
+ // speakerA_name에 내용 추가 |
|
180 |
+ this.speakerA.push(message.trim()); |
|
181 |
+ } else if (speaker.trim() === speakers.speakerB_name) { |
|
182 |
+ // speakerB_name에 내용 추가 |
|
183 |
+ this.speakerB.push(message.trim()); |
|
184 |
+ } |
|
185 |
+ }); |
|
80 | 186 |
|
81 |
- document.addEventListener('click', (event) => { |
|
82 |
- if (!textArea.contains(event.target) && !popup.contains(event.target)) { |
|
83 |
- popup.style.display = 'none'; |
|
84 |
- } |
|
85 |
- }); |
|
86 |
- } |
|
187 |
+ this.speakerA_name = speakers.speakerA_name; |
|
188 |
+ this.speakerB_name = speakers.speakerB_name; |
|
189 |
+ }, |
|
190 |
+ |
|
191 |
+ playAudio() { |
|
192 |
+ const audio = document.getElementById('audio-player'); |
|
193 |
+ audio.play(); |
|
194 |
+ console.log('playing'); |
|
195 |
+ }, |
|
196 |
+ |
|
197 |
+ // 검색할 지문 선택 |
|
198 |
+ handleSelectLine(line) { |
|
199 |
+ this.selectedLine = line; |
|
200 |
+ // console.log('선택된 지문 : ', this.selectedLine); |
|
201 |
+ }, |
|
202 |
+ |
|
203 |
+ getStyle(line) { |
|
204 |
+ return { |
|
205 |
+ backgroundColor: this.selectedLine === line ? '#ffc980' : '', |
|
206 |
+ fontSize: this.selectedLine === line ? '40px' : '', |
|
207 |
+ boxShadow: this.selectedLine === line ? 'rgba(0, 0, 0, 0.24) 0px 3px 8px' : '', |
|
208 |
+ fontWeight: this.selectedLine === line ? 'bold' : '', |
|
209 |
+ cursor: 'pointer', |
|
210 |
+ }; |
|
211 |
+ }, |
|
212 |
+ |
|
213 |
+ // 단어 설명 |
|
214 |
+ wordQuestion() { |
|
215 |
+ // console.log('line : ', this.selectedLine); |
|
216 |
+ if (this.selectedLine === null) { |
|
217 |
+ alert('궁금한 대화문을 선택해주세요'); |
|
218 |
+ return; |
|
219 |
+ } |
|
220 |
+ axios({ |
|
221 |
+ url: 'http://165.229.169.32:35716/word_question', |
|
222 |
+ method: 'post', |
|
223 |
+ headers: { |
|
224 |
+ 'Content-Type': 'application/json; charset=UTF-8', |
|
225 |
+ }, |
|
226 |
+ data: { |
|
227 |
+ word: this.selectedLine, |
|
228 |
+ }, |
|
229 |
+ }) |
|
230 |
+ .then((response) => { |
|
231 |
+ // console.log('word 지문 응답 : ', response.data.explanation); |
|
232 |
+ this.explanation_response = response.data.explanation; |
|
233 |
+ this.handlePopupOpen(); |
|
234 |
+ }) |
|
235 |
+ .catch((err) => { |
|
236 |
+ console.log('word 지문 에러 : ', err); |
|
237 |
+ }); |
|
238 |
+ }, |
|
239 |
+ |
|
240 |
+ // 지문 설명 |
|
241 |
+ passageQuestion() { |
|
242 |
+ // console.log('line : ', this.selectedLine); |
|
243 |
+ if (this.selectedLine === null) { |
|
244 |
+ alert('궁금한 대화문을 선택해주세요'); |
|
245 |
+ return; |
|
246 |
+ } |
|
247 |
+ axios({ |
|
248 |
+ url: 'http://165.229.169.32:35716/passage_question', |
|
249 |
+ method: 'post', |
|
250 |
+ headers: { |
|
251 |
+ 'Content-Type': 'application/json; charset=UTF-8', |
|
252 |
+ }, |
|
253 |
+ data: { |
|
254 |
+ passage: this.selectedLine, |
|
255 |
+ }, |
|
256 |
+ }) |
|
257 |
+ .then((response) => { |
|
258 |
+ // console.log('passage 지문 응답 : ', response.data.explanation); |
|
259 |
+ this.explanation_response = response.data.explanation; |
|
260 |
+ this.handlePopupOpen(); |
|
261 |
+ }) |
|
262 |
+ .catch((err) => { |
|
263 |
+ console.log('passage 지문 에러 : ', err); |
|
264 |
+ }); |
|
265 |
+ }, |
|
266 |
+ |
|
267 |
+ /* 팝업 */ |
|
268 |
+ handlePopupOpen() { |
|
269 |
+ this.popupOpen = true; |
|
270 |
+ }, |
|
271 |
+ |
|
272 |
+ handlePopupClose() { |
|
273 |
+ this.popupOpen = false; |
|
274 |
+ this.explanation_response = null; |
|
275 |
+ this.selectedLine = null; |
|
276 |
+ }, |
|
277 |
+ }, |
|
278 |
+ watch: {}, |
|
279 |
+ computed: { |
|
280 |
+ textId() { |
|
281 |
+ //console.log("지문 화면 아이디 : ", this.$store.getters.getTextId); |
|
282 |
+ return this.$store.getters.getTextId; |
|
283 |
+ }, |
|
284 |
+ combinedLines() { |
|
285 |
+ const maxLength = Math.max(this.speakerA.length, this.speakerB.length); |
|
286 |
+ const lines = []; |
|
287 |
+ |
|
288 |
+ for (let i = 0; i < maxLength; i++) { |
|
289 |
+ if (i < this.speakerA.length) { |
|
290 |
+ lines.push(this.speakerA[i]); |
|
291 |
+ } |
|
292 |
+ if (i < this.speakerB.length) { |
|
293 |
+ lines.push(this.speakerB[i]); |
|
294 |
+ } |
|
295 |
+ } |
|
296 |
+ return lines; |
|
297 |
+ }, |
|
298 |
+ // 지문 포맷팅 |
|
299 |
+ formattedExplanation() { |
|
300 |
+ return this.explanation_response.replace(/\n/g, '<br>').replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>'); |
|
301 |
+ }, |
|
302 |
+ }, |
|
303 |
+ components: { |
|
304 |
+ TextToImage: TextToImage, |
|
305 |
+ }, |
|
306 |
+ mounted() { |
|
307 |
+ this.fetchText(); |
|
308 |
+ }, |
|
309 |
+}; |
|
310 |
+</script> |
|
311 |
+ |
|
312 |
+<style scoped> |
|
313 |
+.completeBtn { |
|
314 |
+ margin-right: 100px; |
|
315 |
+ background-color: #ffba08; |
|
316 |
+ padding: 10px 30px; |
|
317 |
+ border-radius: 10px; |
|
318 |
+ font-size: 28px; |
|
319 |
+ font-family: 'ONEMobilePOPOTF'; |
|
87 | 320 |
} |
88 |
-</script>(파일 끝에 줄바꿈 문자 없음) |
|
321 |
+ |
|
322 |
+.button-box { |
|
323 |
+ display: flex; |
|
324 |
+ flex-direction: column; |
|
325 |
+ align-items: center; |
|
326 |
+ justify-content: space-evenly; |
|
327 |
+} |
|
328 |
+ |
|
329 |
+.button-box button { |
|
330 |
+ font-family: 'ONEMobilePOPOTF'; |
|
331 |
+ font-size: 25px; |
|
332 |
+ color: #fff; |
|
333 |
+ padding: 20px 70px; |
|
334 |
+ border-radius: 15px; |
|
335 |
+ box-shadow: rgba(136, 165, 191, 0.48) 6px 2px 16px 0px, rgba(255, 255, 255, 0.8) -6px -2px 16px 0px; |
|
336 |
+} |
|
337 |
+ |
|
338 |
+.word { |
|
339 |
+ background-color: #28b863; |
|
340 |
+} |
|
341 |
+ |
|
342 |
+.passage { |
|
343 |
+ background-color: #9528b7; |
|
344 |
+} |
|
345 |
+ |
|
346 |
+.popup-container { |
|
347 |
+ background-color: #fff; |
|
348 |
+ position: absolute; |
|
349 |
+ width: 120rem; |
|
350 |
+ height: 60rem; |
|
351 |
+ padding: 30px; |
|
352 |
+ border-radius: 10px; |
|
353 |
+ top: 25rem; |
|
354 |
+ left: 40rem; |
|
355 |
+ overflow: scroll; |
|
356 |
+ overflow-x: hidden; |
|
357 |
+} |
|
358 |
+ |
|
359 |
+.popup-header { |
|
360 |
+ justify-content: space-between; |
|
361 |
+} |
|
362 |
+ |
|
363 |
+.popup-header p { |
|
364 |
+ font-size: 30px; |
|
365 |
+ font-family: 'ONEMobilePOPOTF'; |
|
366 |
+ color: #6327b9; |
|
367 |
+} |
|
368 |
+ |
|
369 |
+.popup-content { |
|
370 |
+ font-size: 24px; |
|
371 |
+ padding: 20px; |
|
372 |
+} |
|
373 |
+</style> |
--- client/views/pages/main/Chapter/Chapter1_2.vue
+++ client/views/pages/main/Chapter/Chapter1_2.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
... | ... | @@ -15,7 +15,10 @@ |
15 | 15 |
<span class="title mr40">1. Hello WORLD</span> |
16 | 16 |
<span class="subtitle">my name is dd</span> |
17 | 17 |
</div> |
18 |
- <button class="completeBtn" @click="complete">학습 종료</button> |
|
18 |
+ <div class="flex"> |
|
19 |
+ <TextToImage /> |
|
20 |
+ <button class="completeBtn" @click="complete">학습 종료</button> |
|
21 |
+ </div> |
|
19 | 22 |
</div> |
20 | 23 |
<div class="flex justify-between align-center"> |
21 | 24 |
<div |
... | ... | @@ -27,9 +30,29 @@ |
27 | 30 |
</div> |
28 | 31 |
<div class="content title-box"> |
29 | 32 |
<p class="title mt25 title-bg">step1. Hello WORLD</p> |
33 |
+ <div |
|
34 |
+ class="flex align-center ml50 mb15" |
|
35 |
+ style="margin-top: -30px; gap: 10px" |
|
36 |
+ > |
|
37 |
+ <h4> |
|
38 |
+ 각 인물들의 대화를 듣고 읽어봅시다. 아래의 플레이버튼을 눌러 영어 |
|
39 |
+ 발음을 들어보세요! |
|
40 |
+ </h4> |
|
41 |
+ <div class="listen-btn"> |
|
42 |
+ <img |
|
43 |
+ src="../../../../resources/img/btn10_s.png" |
|
44 |
+ alt="" |
|
45 |
+ @click="playAudio" |
|
46 |
+ /> |
|
47 |
+ <audio |
|
48 |
+ id="audio-player" |
|
49 |
+ src="client/resources/audio/passage/passage_intoduce.mp3" |
|
50 |
+ preload="auto" |
|
51 |
+ ></audio> |
|
52 |
+ </div> |
|
53 |
+ </div> |
|
30 | 54 |
<div class="flex justify-center"> |
31 | 55 |
<div class="readGroup"> |
32 |
- <h4>각 인물들의 대화를 집중해서 읽어보세요</h4> |
|
33 | 56 |
<div> |
34 | 57 |
<div class="textbox"> |
35 | 58 |
<article |
... | ... | @@ -37,7 +60,7 @@ |
37 | 60 |
:key="index" |
38 | 61 |
:class="[ |
39 | 62 |
'flex', |
40 |
- 'align-start', |
|
63 |
+ 'align-center', |
|
41 | 64 |
'mb10', |
42 | 65 |
{ 'justify-end': index % 2 !== 0 }, |
43 | 66 |
]" |
... | ... | @@ -47,7 +70,23 @@ |
47 | 70 |
<p class="name">{{ speakerA_name }}</p> |
48 | 71 |
</div> |
49 | 72 |
<p v-if="index % 2 === 0" class="read">{{ line }}</p> |
73 |
+ <div class="listen-btn ml10" v-if="index % 2 === 0"> |
|
74 |
+ <img |
|
75 |
+ src="../../../../resources/img/new_img/icon/play_icon.png" |
|
76 |
+ alt="" |
|
77 |
+ @click="generateTts('male', line)" |
|
78 |
+ /> |
|
79 |
+ <audio id="tts-audio-player" preload="auto"></audio> |
|
80 |
+ </div> |
|
50 | 81 |
|
82 |
+ <div class="listen-btn mr10" v-if="index % 2 !== 0"> |
|
83 |
+ <img |
|
84 |
+ src="../../../../resources/img/new_img/icon/play_icon.png" |
|
85 |
+ alt="" |
|
86 |
+ @click="generateTts('femail', line)" |
|
87 |
+ /> |
|
88 |
+ <audio id="tts-audio-player" preload="auto"></audio> |
|
89 |
+ </div> |
|
51 | 90 |
<p v-if="index % 2 !== 0" class="read mr40">{{ line }}</p> |
52 | 91 |
<div v-if="index % 2 !== 0" class="icon"> |
53 | 92 |
<img src="../../../../resources/img/img37_s.png" alt="" /> |
... | ... | @@ -63,7 +102,6 @@ |
63 | 102 |
<img src="../../../../resources/img/right.png" alt="" /> |
64 | 103 |
</div> |
65 | 104 |
</div> |
66 |
- <TextToImage /> |
|
67 | 105 |
</div> |
68 | 106 |
</template> |
69 | 107 |
|
... | ... | @@ -94,8 +132,9 @@ |
94 | 132 |
this.$router.push({ name: page }); |
95 | 133 |
}, |
96 | 134 |
goToNextPage() { |
97 |
- alert("지문 학습 완료!"); |
|
135 |
+ // alert('지문 학습 완료!'); |
|
98 | 136 |
this.complete(); |
137 |
+ this.goToPage("Chapter1_1"); |
|
99 | 138 |
}, |
100 | 139 |
// 대화 지문 API |
101 | 140 |
async fetchText() { |
... | ... | @@ -149,6 +188,40 @@ |
149 | 188 |
this.speakerA_name = speakers.speakerA_name; |
150 | 189 |
this.speakerB_name = speakers.speakerB_name; |
151 | 190 |
}, |
191 |
+ |
|
192 |
+ playAudio() { |
|
193 |
+ const audio = document.getElementById("audio-player"); |
|
194 |
+ audio.play(); |
|
195 |
+ console.log("playing"); |
|
196 |
+ }, |
|
197 |
+ |
|
198 |
+ // 대화 지문 재생 |
|
199 |
+ generateTts(gender, line) { |
|
200 |
+ console.log("line : ", line); |
|
201 |
+ axios({ |
|
202 |
+ url: "http://165.229.169.32:35716/generate_tts", |
|
203 |
+ method: "post", |
|
204 |
+ headers: { |
|
205 |
+ "Content-Type": "application/json; charset=UTF-8", |
|
206 |
+ }, |
|
207 |
+ responseType: "blob", |
|
208 |
+ data: { |
|
209 |
+ gender: gender, |
|
210 |
+ input_text: line, |
|
211 |
+ }, |
|
212 |
+ }) |
|
213 |
+ .then((response) => { |
|
214 |
+ console.log("tts 응답 : ", response); |
|
215 |
+ const audioBlob = new Blob([response.data], { type: "audio/mpeg" }); |
|
216 |
+ const audioUrl = URL.createObjectURL(audioBlob); // 오디오 url 생성 |
|
217 |
+ const audioPlayer = document.getElementById("tts-audio-player"); |
|
218 |
+ audioPlayer.src = audioUrl; |
|
219 |
+ audioPlayer.play(); |
|
220 |
+ }) |
|
221 |
+ .catch((err) => { |
|
222 |
+ console.log("tts 에러 : ", err); |
|
223 |
+ }); |
|
224 |
+ }, |
|
152 | 225 |
}, |
153 | 226 |
watch: {}, |
154 | 227 |
computed: { |
--- client/views/pages/main/Chapter/Chapter1_3.vue
+++ client/views/pages/main/Chapter/Chapter1_3.vue
... | ... | @@ -1,125 +1,118 @@ |
1 | 1 |
<template> |
2 |
- <div id="Chapter1" class="content-wrap"> |
|
3 |
- <div style="margin: 30px 0px 50px; width: 20%"> |
|
4 |
- <router-link to="/MyPlan.page"> |
|
5 |
- <div class="logo mb25"> |
|
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
2 |
+ <div id="Chapter1" class="content-wrap"> |
|
3 |
+ <div style="margin: 30px 0px 50px; width: 20%"> |
|
4 |
+ <router-link to="/MyPlan.page"> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
8 |
+ </router-link> |
|
7 | 9 |
</div> |
8 |
- </router-link> |
|
9 |
- </div> |
|
10 |
- <div |
|
11 |
- class="title-box mb25 flex align-center mt40" |
|
12 |
- style="justify-content: space-between" |
|
13 |
- > |
|
14 |
- <div> |
|
15 |
- <span class="title mr40">1. Hello WORLD</span> |
|
16 |
- <span class="subtitle">my name is dd</span> |
|
17 |
- </div> |
|
18 |
- <button class="completeBtn" @click="complete">학습 종료</button> |
|
19 |
- </div> |
|
20 |
- <div class="flex justify-between align-center"> |
|
21 |
- <div |
|
22 |
- class="pre-btn" |
|
23 |
- style="visibility: hidden" |
|
24 |
- @click="goToPage('Chapter1_2')" |
|
25 |
- > |
|
26 |
- <img src="../../../../resources/img/left.png" alt="" /> |
|
27 |
- </div> |
|
28 |
- <div class="content title-box"> |
|
29 |
- <div class="listenGroup"> |
|
30 |
- <p class="title mt25 title-bg">step1. Hello WORLD</p> |
|
31 |
- <!-- |
|
10 |
+ <div class="title-box mb25 flex align-center mt40" style="justify-content: space-between"> |
|
11 |
+ <div> |
|
12 |
+ <span class="title mr40">1. Hello WORLD</span> |
|
13 |
+ <span class="subtitle">my name is dd</span> |
|
14 |
+ </div> |
|
15 |
+ <button class="completeBtn" @click="complete">학습 종료</button> |
|
16 |
+ </div> |
|
17 |
+ <div class="flex justify-between align-center"> |
|
18 |
+ <div class="pre-btn" style="visibility: hidden" @click="goToPage('Chapter1_2')"> |
|
19 |
+ <img src="../../../../resources/img/left.png" alt="" /> |
|
20 |
+ </div> |
|
21 |
+ <div class="content title-box"> |
|
22 |
+ <div class="listenGroup"> |
|
23 |
+ <p class="title mt25 title-bg">step1. Hello WORLD</p> |
|
24 |
+ <!-- |
|
32 | 25 |
<img class="bg" src="../../../../resources/img/img39_s.png" data-num="1" /> |
33 | 26 |
--> |
34 |
- <img class="bg" :src="img_src" /> |
|
27 |
+ <img class="bg" :src="img_src" /> |
|
28 |
+ </div> |
|
29 |
+ </div> |
|
30 |
+ <div class="next-btn" @click="goToNextPage"> |
|
31 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
32 |
+ </div> |
|
35 | 33 |
</div> |
36 |
- </div> |
|
37 |
- <div class="next-btn" @click="goToNextPage"> |
|
38 |
- <img src="../../../../resources/img/right.png" alt="" /> |
|
39 |
- </div> |
|
34 |
+ <TextToImage /> |
|
40 | 35 |
</div> |
41 |
- <TextToImage /> |
|
42 |
- </div> |
|
43 | 36 |
</template> |
44 | 37 |
|
45 | 38 |
<script> |
46 |
-import TextToImage from "../../../component/TextToImage.vue"; |
|
47 |
-import axios from "axios"; |
|
39 |
+import TextToImage from '../../../component/TextToImage.vue'; |
|
40 |
+import axios from 'axios'; |
|
48 | 41 |
export default { |
49 |
- data() { |
|
50 |
- return { |
|
51 |
- text_data: null, |
|
52 |
- img_src: null, |
|
53 |
- seq: this.$store.getters.seqNum, |
|
54 |
- }; |
|
55 |
- }, |
|
56 |
- methods: { |
|
57 |
- complete() { |
|
58 |
- const { unit_id, book_id } = this.$route.query; |
|
59 |
- this.$router.push({ |
|
60 |
- name: "Dashboard", |
|
61 |
- query: { value: this.seq, unit_id, book_id }, |
|
62 |
- }); |
|
42 |
+ data() { |
|
43 |
+ return { |
|
44 |
+ text_data: null, |
|
45 |
+ img_src: null, |
|
46 |
+ seq: this.$store.getters.seqNum, |
|
47 |
+ }; |
|
63 | 48 |
}, |
64 |
- goToPage(page) { |
|
65 |
- this.$router.push({ name: page }); |
|
66 |
- }, |
|
67 |
- goToNextPage() { |
|
68 |
- alert("지문 학습 완료!"); |
|
69 |
- this.complete(); |
|
70 |
- }, |
|
71 |
- // 지문 API |
|
72 |
- async fetchText() { |
|
73 |
- axios({ |
|
74 |
- url: "/text/selectOneText.json", |
|
75 |
- method: "post", |
|
76 |
- headers: { |
|
77 |
- "Content-Type": "application/json; charset=UTF-8", |
|
49 |
+ methods: { |
|
50 |
+ complete() { |
|
51 |
+ const { unit_id, book_id } = this.$route.query; |
|
52 |
+ this.$router.push({ |
|
53 |
+ name: 'Dashboard', |
|
54 |
+ query: { value: this.seq, unit_id, book_id }, |
|
55 |
+ }); |
|
78 | 56 |
}, |
79 |
- data: { |
|
80 |
- textId: this.textId, |
|
57 |
+ goToPage(page) { |
|
58 |
+ this.$router.push({ name: page }); |
|
81 | 59 |
}, |
82 |
- }) |
|
83 |
- .then((response) => { |
|
84 |
- this.text_data = response.data[0]; |
|
85 |
- console.log("지문 데이터 : ", this.text_data); |
|
86 |
- this.img_src = this.fetchImage(this.text_data.file_rpath); |
|
87 |
- }) |
|
88 |
- .catch((err) => { |
|
89 |
- console.log("지문 에러 : ", err); |
|
90 |
- }); |
|
60 |
+ goToNextPage() { |
|
61 |
+ alert('지문 학습 완료!'); |
|
62 |
+ this.complete(); |
|
63 |
+ }, |
|
64 |
+ // 지문 API |
|
65 |
+ async fetchText() { |
|
66 |
+ axios({ |
|
67 |
+ url: '/text/selectOneText.json', |
|
68 |
+ method: 'post', |
|
69 |
+ headers: { |
|
70 |
+ 'Content-Type': 'application/json; charset=UTF-8', |
|
71 |
+ }, |
|
72 |
+ data: { |
|
73 |
+ textId: this.textId, |
|
74 |
+ }, |
|
75 |
+ }) |
|
76 |
+ .then((response) => { |
|
77 |
+ this.text_data = response.data[0]; |
|
78 |
+ console.log('지문 데이터 : ', this.text_data); |
|
79 |
+ this.img_src = this.fetchImage(this.text_data.file_rpath); |
|
80 |
+ }) |
|
81 |
+ .catch((err) => { |
|
82 |
+ console.log('지문 에러 : ', err); |
|
83 |
+ }); |
|
84 |
+ }, |
|
85 |
+ // 이미지 불러오기 |
|
86 |
+ fetchImage(fileRpath) { |
|
87 |
+ return 'http://165.229.169.113:9080/' + fileRpath; |
|
88 |
+ }, |
|
91 | 89 |
}, |
92 |
- // 이미지 불러오기 |
|
93 |
- fetchImage(fileRpath) { |
|
94 |
- return "http://165.229.169.113:9080/" + fileRpath; |
|
90 |
+ watch: {}, |
|
91 |
+ computed: { |
|
92 |
+ textId() { |
|
93 |
+ //console.log("지문 화면 아이디 : ", this.$store.getters.getTextId); |
|
94 |
+ return this.$store.getters.getTextId; |
|
95 |
+ }, |
|
95 | 96 |
}, |
96 |
- }, |
|
97 |
- watch: {}, |
|
98 |
- computed: { |
|
99 |
- textId() { |
|
100 |
- //console.log("지문 화면 아이디 : ", this.$store.getters.getTextId); |
|
101 |
- return this.$store.getters.getTextId; |
|
97 |
+ components: { |
|
98 |
+ TextToImage: TextToImage, |
|
102 | 99 |
}, |
103 |
- }, |
|
104 |
- components: { |
|
105 |
- TextToImage: TextToImage, |
|
106 |
- }, |
|
107 |
- mounted() { |
|
108 |
- this.fetchText(); |
|
109 |
- }, |
|
100 |
+ mounted() { |
|
101 |
+ this.fetchText(); |
|
102 |
+ }, |
|
110 | 103 |
}; |
111 | 104 |
</script> |
112 | 105 |
<style scoped> |
113 | 106 |
.listenGroup .textbox { |
114 |
- width: 900px; |
|
107 |
+ width: 900px; |
|
115 | 108 |
} |
116 | 109 |
|
117 | 110 |
.completeBtn { |
118 |
- margin-right: 100px; |
|
119 |
- background-color: #ffba08; |
|
120 |
- padding: 10px 30px; |
|
121 |
- border-radius: 10px; |
|
122 |
- font-size: 28px; |
|
123 |
- font-family: "ONEMobilePOPOTF"; |
|
111 |
+ margin-right: 100px; |
|
112 |
+ background-color: #ffba08; |
|
113 |
+ padding: 10px 30px; |
|
114 |
+ border-radius: 10px; |
|
115 |
+ font-size: 28px; |
|
116 |
+ font-family: 'ONEMobilePOPOTF'; |
|
124 | 117 |
} |
125 | 118 |
</style> |
--- client/views/pages/main/Chapter/Chapter2.vue
+++ client/views/pages/main/Chapter/Chapter2.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
--- client/views/pages/main/Chapter/Chapter2_1.vue
+++ client/views/pages/main/Chapter/Chapter2_1.vue
... | ... | @@ -1,157 +1,173 @@ |
1 | 1 |
<template> |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 |
- <div style="margin: 30px 0px 50px"> |
|
4 |
- <router-link to="/MyPlan.page"> |
|
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div> |
|
6 |
- </router-link> |
|
3 |
+ <div style="margin: 30px 0px 50px"> |
|
4 |
+ <router-link to="/MyPlan.page"> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 |
- <div class="title-box mb25 flex align-center mt40"> |
|
9 |
- <span class="title mr40">1. Hello WORLD</span> |
|
10 |
- <span class="subtitle">my name is dd</span> |
|
8 |
+ </router-link> |
|
9 |
+ </div> |
|
10 |
+ <div class="title-box mb25 flex align-center mt40"> |
|
11 |
+ <span class="title mr40">1. Hello WORLD</span> |
|
12 |
+ <span class="subtitle">my name is dd</span> |
|
13 |
+ </div> |
|
14 |
+ <div class="flex justify-between align-center"> |
|
15 |
+ <div class="pre-btn" @click="goToPage('Chapter2_2')"> |
|
16 |
+ <img src="../../../../resources/img/left.png" alt="" /> |
|
11 | 17 |
</div> |
12 |
- <div class="flex justify-between align-center"> |
|
13 |
- <div class="pre-btn" @click="goToPage('Chapter2_2')"> |
|
14 |
- <img src="../../../../resources/img/left.png" alt="" /> |
|
15 |
- </div> |
|
16 |
- <div class="content title-box"> |
|
17 |
- <p class="title mt25 title-bg">step2</p> |
|
18 |
- <div class="flex align-center mb30"> |
|
19 |
- <p class="subtitle2 mr20">오늘 배웠던 단어를 말하고 생성된 예문을 따라 읽어보세요</p> |
|
20 |
- <!-- <button><img src="../../../../resources/img/btn10_s.png" alt=""> |
|
18 |
+ <div class="content title-box"> |
|
19 |
+ <p class="title mt25 title-bg">step2</p> |
|
20 |
+ <div class="flex align-center mb30"> |
|
21 |
+ <p class="subtitle2 mr20"> |
|
22 |
+ 오늘 배웠던 단어를 말하고 생성된 예문을 따라 읽어보세요 |
|
23 |
+ </p> |
|
24 |
+ <!-- <button><img src="../../../../resources/img/btn10_s.png" alt=""> |
|
21 | 25 |
</button> --> |
22 |
- </div> |
|
23 |
- <div> |
|
24 |
- <img src="http://localhost:8081/client/build/dad67b1726cb2d2b215965b433149ca3.png" data-num="1" /> |
|
25 |
- <p> {{ word }} </p> |
|
26 |
- <p> {{ mean }} </p> |
|
26 |
+ </div> |
|
27 |
+ <div> |
|
28 |
+ <img |
|
29 |
+ src="http://localhost:8081/client/build/dad67b1726cb2d2b215965b433149ca3.png" |
|
30 |
+ data-num="1" |
|
31 |
+ /> |
|
32 |
+ <p>{{ word }}</p> |
|
33 |
+ <p>{{ mean }}</p> |
|
34 |
+ </div> |
|
35 |
+ <div class="flex justify-center"> |
|
36 |
+ <div class="readGroup"> |
|
37 |
+ <section> |
|
38 |
+ <div class="imgGroup flex justify-center"> |
|
39 |
+ <!-- 녹음 버튼 --> |
|
40 |
+ <div |
|
41 |
+ :class="['mic-btn', { notRecording: !isRecording }]" |
|
42 |
+ @click="toggleRecording" |
|
43 |
+ > |
|
44 |
+ <img src="../../../../resources/img/btn11_s.png" alt="" /> |
|
27 | 45 |
</div> |
28 |
- <div class="flex justify-center"> |
|
29 |
- <div class="readGroup"> |
|
30 |
- <section> |
|
31 |
- <div class="imgGroup flex justify-center"> |
|
32 |
- <!-- 녹음 버튼 --> |
|
33 |
- <div :class="['mic-btn', { notRecording: !isRecording }]" @click="toggleRecording"> |
|
34 |
- <img src="../../../../resources/img/btn11_s.png" alt="" /> |
|
35 |
- </div> |
|
36 |
- </div> |
|
37 |
- <article> |
|
38 |
- <p class="speakText mb25"> |
|
39 |
- <span v-if="transcription === null" |
|
40 |
- >위의 버튼을 누른 후 오늘 배운 단어를 말해보세요!</span |
|
41 |
- > |
|
42 |
- <span v-else-if="!transcription || transcription.trim() === ''" |
|
43 |
- >다시 말해보세요!</span |
|
44 |
- > |
|
45 |
- <span v-else>{{ transcription }}</span> |
|
46 |
- </p> |
|
47 |
- <p class="read-ai"> |
|
48 |
- <img style="margin-top: -5px" src="../../../../resources/img/img43_s.png" alt="" /> |
|
49 |
- </p> |
|
50 |
- </article> |
|
51 |
- </section> |
|
52 |
- </div> |
|
53 | 46 |
</div> |
47 |
+ <article> |
|
48 |
+ <p class="speakText mb25"> |
|
49 |
+ <span v-if="transcription === null" |
|
50 |
+ >위의 버튼을 누른 후 오늘 배운 단어를 말해보세요!</span |
|
51 |
+ > |
|
52 |
+ <span |
|
53 |
+ v-else-if="!transcription || transcription.trim() === ''" |
|
54 |
+ >다시 말해보세요!</span |
|
55 |
+ > |
|
56 |
+ <span v-else>{{ transcription }}</span> |
|
57 |
+ </p> |
|
58 |
+ <p class="read-ai"> |
|
59 |
+ <img |
|
60 |
+ style="margin-top: -5px" |
|
61 |
+ src="../../../../resources/img/img43_s.png" |
|
62 |
+ alt="" |
|
63 |
+ /> |
|
64 |
+ </p> |
|
65 |
+ </article> |
|
66 |
+ </section> |
|
54 | 67 |
</div> |
55 |
- <div class="next-btn" @click="goToPage('Chapter2_4')"> |
|
56 |
- <img src="../../../../resources/img/right.png" alt="" /> |
|
57 |
- </div> |
|
68 |
+ </div> |
|
58 | 69 |
</div> |
70 |
+ <div class="next-btn" @click="goToPage('Chapter2_4')"> |
|
71 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
72 |
+ </div> |
|
73 |
+ </div> |
|
59 | 74 |
</div> |
60 | 75 |
</template> |
61 | 76 |
|
62 | 77 |
<script> |
63 |
-import axios from 'axios'; |
|
64 |
-import SvgIcon from '@jamescoyle/vue-icon'; |
|
65 |
-import { mdiStop } from '@mdi/js'; |
|
78 |
+import axios from "axios"; |
|
79 |
+import SvgIcon from "@jamescoyle/vue-icon"; |
|
80 |
+import { mdiStop } from "@mdi/js"; |
|
66 | 81 |
export default { |
67 | 82 |
data() { |
68 |
- return { |
|
69 |
- isRecording: false, // 녹음 중 여부 |
|
70 |
- mediaRecorder: null, |
|
71 |
- audioChunks: [], // 녹음된 오디오 데이터 |
|
72 |
- audioBlob: null, // 오디오 Blob 객체 |
|
73 |
- transcription: null, // 서버에서 받아온 텍스트 결과 |
|
74 |
- stream: null, // MediaStream 객체 |
|
83 |
+ return { |
|
84 |
+ isRecording: false, // 녹음 중 여부 |
|
85 |
+ mediaRecorder: null, |
|
86 |
+ audioChunks: [], // 녹음된 오디오 데이터 |
|
87 |
+ audioBlob: null, // 오디오 Blob 객체 |
|
88 |
+ transcription: null, // 서버에서 받아온 텍스트 결과 |
|
89 |
+ stream: null, // MediaStream 객체 |
|
75 | 90 |
|
76 |
- path: mdiStop, |
|
91 |
+ path: mdiStop, |
|
77 | 92 |
|
78 |
- /* audioURL : null // 오디오 URL 객체 */ |
|
93 |
+ /* audioURL : null // 오디오 URL 객체 */ |
|
79 | 94 |
|
80 |
- word : "apple", |
|
81 |
- mean : "사과", |
|
82 |
- imageSrc : "http://localhost:8081/client/build/dad67b1726cb2d2b215965b433149ca3.png" |
|
83 |
- }; |
|
95 |
+ word: "apple", |
|
96 |
+ mean: "사과", |
|
97 |
+ imageSrc: |
|
98 |
+ "http://localhost:8081/client/build/dad67b1726cb2d2b215965b433149ca3.png", |
|
99 |
+ }; |
|
84 | 100 |
}, |
85 | 101 |
methods: { |
86 |
- goToPage(page) { |
|
87 |
- this.$router.push({ name: page }); |
|
88 |
- }, |
|
89 |
- // 녹음 시작/중지 토글 |
|
90 |
- async toggleRecording() { |
|
91 |
- if (this.isRecording) { |
|
92 |
- console.log('녹음 그만!'); |
|
93 |
- this.stopRecording(); // 녹음 중이면 중지 |
|
94 |
- } else { |
|
95 |
- console.log('녹음 시작!'); |
|
96 |
- await this.startRecording(); // 녹음 중이 아니면 녹음 시작 |
|
97 |
- } |
|
98 |
- }, |
|
102 |
+ goToPage(page) { |
|
103 |
+ this.$router.push({ name: page }); |
|
104 |
+ }, |
|
105 |
+ // 녹음 시작/중지 토글 |
|
106 |
+ async toggleRecording() { |
|
107 |
+ if (this.isRecording) { |
|
108 |
+ console.log("녹음 그만!"); |
|
109 |
+ this.stopRecording(); // 녹음 중이면 중지 |
|
110 |
+ } else { |
|
111 |
+ console.log("녹음 시작!"); |
|
112 |
+ await this.startRecording(); // 녹음 중이 아니면 녹음 시작 |
|
113 |
+ } |
|
114 |
+ }, |
|
99 | 115 |
|
100 |
- // 녹음 시작 |
|
101 |
- async startRecording() { |
|
102 |
- this.audioChunks = []; // 오디오 초기화 |
|
103 |
- this.stream = await navigator.mediaDevices.getUserMedia({ audio: true }); |
|
104 |
- this.mediaRecorder = new MediaRecorder(this.stream); |
|
105 |
- this.mediaRecorder.ondataavailable = (event) => { |
|
106 |
- this.audioChunks.push(event.data); // 녹음 데이터 저장 |
|
107 |
- }; |
|
108 |
- this.mediaRecorder.onstop = () => { |
|
109 |
- this.audioBlob = new Blob(this.audioChunks, { type: 'audio/wav' }); |
|
116 |
+ // 녹음 시작 |
|
117 |
+ async startRecording() { |
|
118 |
+ this.audioChunks = []; // 오디오 초기화 |
|
119 |
+ this.stream = await navigator.mediaDevices.getUserMedia({ audio: true }); |
|
120 |
+ this.mediaRecorder = new MediaRecorder(this.stream); |
|
121 |
+ this.mediaRecorder.ondataavailable = (event) => { |
|
122 |
+ this.audioChunks.push(event.data); // 녹음 데이터 저장 |
|
123 |
+ }; |
|
124 |
+ this.mediaRecorder.onstop = () => { |
|
125 |
+ this.audioBlob = new Blob(this.audioChunks, { type: "audio/wav" }); |
|
110 | 126 |
|
111 |
- /******************************/ |
|
112 |
- // this.audioURL = URL.createObjectURL(this.audioBlob); // 오디오 URL 생성 |
|
113 |
- // console.log('Audio URL:', this.audioURL); |
|
114 |
- /******************************/ |
|
127 |
+ /******************************/ |
|
128 |
+ // this.audioURL = URL.createObjectURL(this.audioBlob); // 오디오 URL 생성 |
|
129 |
+ // console.log('Audio URL:', this.audioURL); |
|
130 |
+ /******************************/ |
|
115 | 131 |
|
116 |
- console.log('Recorded Audio Blob:', this.audioBlob); // 콘솔에 Blob 확인 |
|
117 |
- this.sendAudioToServer(); // 서버로 오디오 전송 |
|
118 |
- }; |
|
119 |
- this.mediaRecorder.start(); // 녹음 시작 |
|
120 |
- this.isRecording = true; // 녹음 상태 변경 |
|
121 |
- }, |
|
132 |
+ console.log("Recorded Audio Blob:", this.audioBlob); // 콘솔에 Blob 확인 |
|
133 |
+ this.sendAudioToServer(); // 서버로 오디오 전송 |
|
134 |
+ }; |
|
135 |
+ this.mediaRecorder.start(); // 녹음 시작 |
|
136 |
+ this.isRecording = true; // 녹음 상태 변경 |
|
137 |
+ }, |
|
122 | 138 |
|
123 |
- // 녹음 중지 |
|
124 |
- stopRecording() { |
|
125 |
- this.mediaRecorder.stop(); // 녹음 중단 |
|
139 |
+ // 녹음 중지 |
|
140 |
+ stopRecording() { |
|
141 |
+ this.mediaRecorder.stop(); // 녹음 중단 |
|
126 | 142 |
|
127 |
- if (this.stream) { |
|
128 |
- this.stream.getTracks().forEach((track) => track.stop()); // 스트림의 모든 트랙 중지 |
|
129 |
- } |
|
143 |
+ if (this.stream) { |
|
144 |
+ this.stream.getTracks().forEach((track) => track.stop()); // 스트림의 모든 트랙 중지 |
|
145 |
+ } |
|
130 | 146 |
|
131 |
- this.isRecording = false; // 녹음 상태 변경 |
|
132 |
- }, |
|
147 |
+ this.isRecording = false; // 녹음 상태 변경 |
|
148 |
+ }, |
|
133 | 149 |
|
134 |
- // 오디오 전송 |
|
135 |
- async sendAudioToServer() { |
|
136 |
- const formData = new FormData(); |
|
137 |
- formData.append('file', this.audioBlob, 'recording.wav'); |
|
138 |
- try { |
|
139 |
- const resposne = await axios.post('/api/speechToText.json', formData, { |
|
140 |
- headers: { |
|
141 |
- 'Content-Type': 'multipart/form-data', |
|
142 |
- }, |
|
143 |
- }); |
|
144 |
- this.transcription = resposne.data; |
|
145 |
- console.log(`받은 데이터 : ${this.transcription}`); |
|
146 |
- } catch (error) { |
|
147 |
- console.log('파일 전송 실패 : ', error); |
|
148 |
- } |
|
149 |
- }, |
|
150 |
+ // 오디오 전송 |
|
151 |
+ async sendAudioToServer() { |
|
152 |
+ const formData = new FormData(); |
|
153 |
+ formData.append("file", this.audioBlob, "recording.wav"); |
|
154 |
+ try { |
|
155 |
+ const resposne = await axios.post("/api/speechToText.json", formData, { |
|
156 |
+ headers: { |
|
157 |
+ "Content-Type": "multipart/form-data", |
|
158 |
+ }, |
|
159 |
+ }); |
|
160 |
+ this.transcription = resposne.data; |
|
161 |
+ console.log(`받은 데이터 : ${this.transcription}`); |
|
162 |
+ } catch (error) { |
|
163 |
+ console.log("파일 전송 실패 : ", error); |
|
164 |
+ } |
|
165 |
+ }, |
|
150 | 166 |
}, |
151 | 167 |
watch: {}, |
152 | 168 |
computed: {}, |
153 | 169 |
components: { |
154 |
- SvgIcon, |
|
170 |
+ SvgIcon, |
|
155 | 171 |
}, |
156 | 172 |
mounted() {}, |
157 | 173 |
}; |
... | ... | @@ -171,4 +187,4 @@ |
171 | 187 |
.speakText span { |
172 | 188 |
font-size: 28px; |
173 | 189 |
} |
174 |
-</style>(파일 끝에 줄바꿈 문자 없음) |
|
190 |
+</style> |
--- client/views/pages/main/Chapter/Chapter2_10.vue
+++ client/views/pages/main/Chapter/Chapter2_10.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
--- client/views/pages/main/Chapter/Chapter2_11.vue
+++ client/views/pages/main/Chapter/Chapter2_11.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
--- client/views/pages/main/Chapter/Chapter2_12.vue
+++ client/views/pages/main/Chapter/Chapter2_12.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,57 +12,85 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="goToPage('Chapter2_8')"><img src="../../../../resources/img/left.png" alt=""></div> |
|
15 |
+ <div class="pre-btn" @click="goToPage('Chapter2_8')"> |
|
16 |
+ <img src="../../../../resources/img/left.png" alt="" /> |
|
17 |
+ </div> |
|
14 | 18 |
<div class="content title-box"> |
15 | 19 |
<p class="title mt25 title-bg">step2</p> |
16 |
- <div class="flex align-center mb30"> |
|
20 |
+ <div class="flex align-center mb30"> |
|
17 | 21 |
<p class="subtitle2 mr20">단어 짝 맞추기 게임</p> |
18 | 22 |
<!-- <button><img src="../../../../resources/img/btn10_s.png" alt=""> |
19 | 23 |
</button> --> |
20 | 24 |
</div> |
21 | 25 |
|
22 | 26 |
<div class="text-ct"> |
23 |
- <div class="pickGroup flex align-center justify-center mt50" style="gap: 100px;"> |
|
27 |
+ <div |
|
28 |
+ class="pickGroup flex align-center justify-center mt50" |
|
29 |
+ style="gap: 100px" |
|
30 |
+ > |
|
24 | 31 |
<div> |
25 | 32 |
<div class="mb20"> |
26 |
- <button><img src="../../../../resources/img/img100_45s.png" alt=""> |
|
33 |
+ <button> |
|
34 |
+ <img src="../../../../resources/img/img100_45s.png" alt="" /> |
|
27 | 35 |
<p>1</p> |
28 | 36 |
</button> |
29 |
- <button><img src="../../../../resources/img/img101_45s.png" alt=""> |
|
37 |
+ <button> |
|
38 |
+ <img src="../../../../resources/img/img101_45s.png" alt="" /> |
|
30 | 39 |
<p>1</p> |
31 | 40 |
</button> |
32 |
- <button><img src="../../../../resources/img/img102_45s.png" alt=""> |
|
41 |
+ <button> |
|
42 |
+ <img src="../../../../resources/img/img102_45s.png" alt="" /> |
|
33 | 43 |
<p>1</p> |
34 | 44 |
</button> |
35 |
- <button><img src="../../../../resources/img/img103_45s.png" alt=""> |
|
45 |
+ <button> |
|
46 |
+ <img src="../../../../resources/img/img103_45s.png" alt="" /> |
|
36 | 47 |
<p>1</p> |
37 | 48 |
</button> |
38 | 49 |
</div> |
39 | 50 |
<div> |
40 |
- <button><img src="../../../../resources/img/img100_45s.png" alt=""> |
|
51 |
+ <button> |
|
52 |
+ <img src="../../../../resources/img/img100_45s.png" alt="" /> |
|
41 | 53 |
<p>1</p> |
42 | 54 |
</button> |
43 |
- <button><img src="../../../../resources/img/img101_45s.png" alt=""> |
|
55 |
+ <button> |
|
56 |
+ <img src="../../../../resources/img/img101_45s.png" alt="" /> |
|
44 | 57 |
<p>1</p> |
45 | 58 |
</button> |
46 |
- <button><img src="../../../../resources/img/img102_45s.png" alt=""> |
|
59 |
+ <button> |
|
60 |
+ <img src="../../../../resources/img/img102_45s.png" alt="" /> |
|
47 | 61 |
<p>1</p> |
48 | 62 |
</button> |
49 |
- <button><img src="../../../../resources/img/img103_45s.png" alt=""> |
|
63 |
+ <button> |
|
64 |
+ <img src="../../../../resources/img/img103_45s.png" alt="" /> |
|
50 | 65 |
<p>1</p> |
51 | 66 |
</button> |
52 | 67 |
</div> |
53 | 68 |
</div> |
54 |
- <div class="dropGroup" style="gap: 20px;"> |
|
55 |
- <img src="../../../../resources/img/img160_43s.png" alt=""> |
|
69 |
+ <div class="dropGroup" style="gap: 20px"> |
|
70 |
+ <img src="../../../../resources/img/img160_43s.png" alt="" /> |
|
56 | 71 |
<div class="dropimg"> |
57 |
- <img style="top: 21px;" src="../../../../resources/img/img161_44s.png" alt=""> |
|
58 |
- <img style="top: 119px;" src="../../../../resources/img/img162_43s.png" alt=""> |
|
59 |
- <img style="top: 215px;" src="../../../../resources/img/img163_43s.png" alt=""> |
|
60 |
- <img style="bottom: 36px;" src="../../../../resources/img/img164_43s.png" alt=""> |
|
72 |
+ <img |
|
73 |
+ style="top: 21px" |
|
74 |
+ src="../../../../resources/img/img161_44s.png" |
|
75 |
+ alt="" |
|
76 |
+ /> |
|
77 |
+ <img |
|
78 |
+ style="top: 119px" |
|
79 |
+ src="../../../../resources/img/img162_43s.png" |
|
80 |
+ alt="" |
|
81 |
+ /> |
|
82 |
+ <img |
|
83 |
+ style="top: 215px" |
|
84 |
+ src="../../../../resources/img/img163_43s.png" |
|
85 |
+ alt="" |
|
86 |
+ /> |
|
87 |
+ <img |
|
88 |
+ style="bottom: 36px" |
|
89 |
+ src="../../../../resources/img/img164_43s.png" |
|
90 |
+ alt="" |
|
91 |
+ /> |
|
61 | 92 |
</div> |
62 | 93 |
</div> |
63 |
- |
|
64 | 94 |
</div> |
65 | 95 |
|
66 | 96 |
<div class="time-bg"> |
... | ... | @@ -73,7 +103,9 @@ |
73 | 103 |
</div> |
74 | 104 |
</div> |
75 | 105 |
</div> |
76 |
- <div class="next-btn" @click="goToPage('Chapter2_7')"><img src="../../../../resources/img/right.png" alt=""></div> |
|
106 |
+ <div class="next-btn" @click="goToPage('Chapter2_7')"> |
|
107 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
108 |
+ </div> |
|
77 | 109 |
</div> |
78 | 110 |
</div> |
79 | 111 |
</template> |
... | ... | @@ -83,7 +115,7 @@ |
83 | 115 |
data() { |
84 | 116 |
return { |
85 | 117 |
timer: "00", |
86 |
- } |
|
118 |
+ }; |
|
87 | 119 |
}, |
88 | 120 |
methods: { |
89 | 121 |
goToPage(page) { |
... | ... | @@ -101,24 +133,22 @@ |
101 | 133 |
clearInterval(this.intervalId); |
102 | 134 |
} |
103 | 135 |
}, 1000); |
104 |
- } |
|
136 |
+ }, |
|
105 | 137 |
}, |
106 |
- watch: { |
|
107 |
- |
|
108 |
- }, |
|
109 |
- computed: { |
|
110 |
- |
|
111 |
- }, |
|
112 |
- components: { |
|
113 |
- }, |
|
114 |
- mounted() { |
|
115 |
- |
|
116 |
- } |
|
117 |
-} |
|
138 |
+ watch: {}, |
|
139 |
+ computed: {}, |
|
140 |
+ components: {}, |
|
141 |
+ mounted() {}, |
|
142 |
+}; |
|
118 | 143 |
</script> |
119 | 144 |
<style scoped> |
120 |
-.dropGroup{position: relative;} |
|
121 |
-.dropimg img{position: absolute; left: 27px;} |
|
145 |
+.dropGroup { |
|
146 |
+ position: relative; |
|
147 |
+} |
|
148 |
+.dropimg img { |
|
149 |
+ position: absolute; |
|
150 |
+ left: 27px; |
|
151 |
+} |
|
122 | 152 |
.pickGroup button { |
123 | 153 |
position: relative; |
124 | 154 |
margin: 10px 40px; |
... | ... | @@ -131,4 +161,4 @@ |
131 | 161 |
left: 50%; |
132 | 162 |
transform: translate(-50%, -50%); |
133 | 163 |
} |
134 |
-</style>(파일 끝에 줄바꿈 문자 없음) |
|
164 |
+</style> |
--- client/views/pages/main/Chapter/Chapter2_13.vue
+++ client/views/pages/main/Chapter/Chapter2_13.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
--- client/views/pages/main/Chapter/Chapter2_2.vue
+++ client/views/pages/main/Chapter/Chapter2_2.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
... | ... | @@ -32,7 +32,9 @@ |
32 | 32 |
class="flex align-center mb30" |
33 | 33 |
style="justify-content: space-between; margin-right: 9em" |
34 | 34 |
> |
35 |
- <p class="subtitle2 mr20">3초마다 뒤집어지는 카드의 단어를 외어보세요!</p> |
|
35 |
+ <p class="subtitle2 mr20"> |
|
36 |
+ 3초마다 뒤집어지는 카드의 단어를 외어보세요! |
|
37 |
+ </p> |
|
36 | 38 |
<div class="time-bg"> |
37 | 39 |
<div> |
38 | 40 |
<div class="time"> |
--- client/views/pages/main/Chapter/Chapter2_3.vue
+++ client/views/pages/main/Chapter/Chapter2_3.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
--- client/views/pages/main/Chapter/Chapter2_4.vue
+++ client/views/pages/main/Chapter/Chapter2_4.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
--- client/views/pages/main/Chapter/Chapter2_5.vue
+++ client/views/pages/main/Chapter/Chapter2_5.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
--- client/views/pages/main/Chapter/Chapter2_6.vue
+++ client/views/pages/main/Chapter/Chapter2_6.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
... | ... | @@ -176,12 +176,10 @@ |
176 | 176 |
this.showButton(dropNumber); // 버튼을 보여주고 |
177 | 177 |
this.hideDragButton(dropNumber); // 드래그한 퍼즐은 숨김 |
178 | 178 |
this.correctNum++; |
179 |
- |
|
180 | 179 |
} else { |
181 | 180 |
// 오답일 경우 알림 표시 |
182 | 181 |
alert("오답입니다! 다시 시도해보세요."); |
183 | 182 |
} |
184 |
- |
|
185 | 183 |
|
186 | 184 |
if (this.correctNum === 3) { |
187 | 185 |
setTimeout(() => { |
--- client/views/pages/main/Chapter/Chapter2_7.vue
+++ client/views/pages/main/Chapter/Chapter2_7.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
--- client/views/pages/main/Chapter/Chapter2_8.vue
+++ client/views/pages/main/Chapter/Chapter2_8.vue
... | ... | @@ -3,11 +3,14 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
10 |
- <div class="title-box mb25 flex align-center mt40" style="justify-content: space-between"> |
|
10 |
+ <div |
|
11 |
+ class="title-box mb25 flex align-center mt40" |
|
12 |
+ style="justify-content: space-between" |
|
13 |
+ > |
|
11 | 14 |
<div> |
12 | 15 |
<span class="title mr40">1. Hello WORLD</span> |
13 | 16 |
<span class="subtitle">my name is dd</span> |
... | ... | @@ -15,7 +18,11 @@ |
15 | 18 |
<button class="completeBtn" @click="complete">학습 종료</button> |
16 | 19 |
</div> |
17 | 20 |
<div class="flex justify-between align-center"> |
18 |
- <div class="pre-btn" :style="{ visibility: hiddenState ? 'hidden' : 'visible' }" @click="previousProblem()"> |
|
21 |
+ <div |
|
22 |
+ class="pre-btn" |
|
23 |
+ :style="{ visibility: hiddenState ? 'hidden' : 'visible' }" |
|
24 |
+ @click="previousProblem()" |
|
25 |
+ > |
|
19 | 26 |
<img src="../../../../resources/img/left.png" alt="" /> |
20 | 27 |
</div> |
21 | 28 |
<div class="content title-box"> |
... | ... | @@ -36,15 +43,27 @@ |
36 | 43 |
<div class="dropGroup flex align-center justify-center mt30"> |
37 | 44 |
<div style="position: relative"> |
38 | 45 |
<img src="../../../../resources/img/img28_s.png" alt="" /> |
39 |
- <button class="dropzone" :data-answer="answerArr[0]" style="left: 30px; top: 167px"> |
|
46 |
+ <button |
|
47 |
+ class="dropzone" |
|
48 |
+ :data-answer="answerArr[0]" |
|
49 |
+ style="left: 30px; top: 167px" |
|
50 |
+ > |
|
40 | 51 |
<img src="../../../../resources/img/img29_s_01.png" alt="" /> |
41 | 52 |
<p style="font-size: 35px">?</p> |
42 | 53 |
</button> |
43 |
- <button class="dropzone" :data-answer="answerArr[1]" style="right: 409px; top: 133px"> |
|
54 |
+ <button |
|
55 |
+ class="dropzone" |
|
56 |
+ :data-answer="answerArr[1]" |
|
57 |
+ style="right: 409px; top: 133px" |
|
58 |
+ > |
|
44 | 59 |
<img src="../../../../resources/img/img30_s_01.png" alt="" /> |
45 | 60 |
<p style="font-size: 35px">?</p> |
46 | 61 |
</button> |
47 |
- <button class="dropzone" :data-answer="answerArr[2]" style="right: 46px; top: 128px"> |
|
62 |
+ <button |
|
63 |
+ class="dropzone" |
|
64 |
+ :data-answer="answerArr[2]" |
|
65 |
+ style="right: 46px; top: 128px" |
|
66 |
+ > |
|
48 | 67 |
<img src="../../../../resources/img/img31_s_01.png" alt="" /> |
49 | 68 |
<p style="font-size: 35px">?</p> |
50 | 69 |
</button> |
... | ... | @@ -52,19 +71,31 @@ |
52 | 71 |
</div> |
53 | 72 |
<div class="dragGroup flex justify-center" style="gap: 20px"> |
54 | 73 |
<article style="right: 0; top: 36%"> |
55 |
- <button class="draggable" :data-text="answerArr[0]" draggable="true"> |
|
74 |
+ <button |
|
75 |
+ class="draggable" |
|
76 |
+ :data-text="answerArr[0]" |
|
77 |
+ draggable="true" |
|
78 |
+ > |
|
56 | 79 |
<img src="../../../../resources/img/img29_s.png" alt="" /> |
57 | 80 |
<p style="font-size: 35px">{{ answerArr[0] }}</p> |
58 | 81 |
</button> |
59 | 82 |
</article> |
60 | 83 |
<article style="left: 0; top: 36%"> |
61 |
- <button class="draggable" :data-text="answerArr[1]" draggable="true"> |
|
84 |
+ <button |
|
85 |
+ class="draggable" |
|
86 |
+ :data-text="answerArr[1]" |
|
87 |
+ draggable="true" |
|
88 |
+ > |
|
62 | 89 |
<img src="../../../../resources/img/img30_s.png" alt="" /> |
63 | 90 |
<p style="font-size: 35px">{{ answerArr[1] }}</p> |
64 | 91 |
</button> |
65 | 92 |
</article> |
66 | 93 |
<article style="left: 50%; top: 10%"> |
67 |
- <button class="draggable" :data-text="answerArr[2]" draggable="true"> |
|
94 |
+ <button |
|
95 |
+ class="draggable" |
|
96 |
+ :data-text="answerArr[2]" |
|
97 |
+ draggable="true" |
|
98 |
+ > |
|
68 | 99 |
<img src="../../../../resources/img/img31_s.png" alt="" /> |
69 | 100 |
<p style="font-size: 35px">{{ answerArr[2] }}</p> |
70 | 101 |
</button> |
... | ... | @@ -111,7 +142,7 @@ |
111 | 142 |
window.location.reload(); |
112 | 143 |
}, |
113 | 144 |
handleDragStart(event) { |
114 |
- this.draggedElement = event.target.closest(".draggable");// 드래그한 요소 저장 |
|
145 |
+ this.draggedElement = event.target.closest(".draggable"); // 드래그한 요소 저장 |
|
115 | 146 |
event.dataTransfer.setData("text/plain", event.target.dataset.text); |
116 | 147 |
event.target.style.cursor = "grabbing"; // 드래그 중 커서 변경 |
117 | 148 |
}, |
--- client/views/pages/main/Chapter/Chapter2_9.vue
+++ client/views/pages/main/Chapter/Chapter2_9.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
... | ... | @@ -28,8 +28,15 @@ |
28 | 28 |
<div class="content title-box"> |
29 | 29 |
<div style="display: flex; justify-content: space-between"> |
30 | 30 |
<p class="title mt25 title-bg">STEP 2 - 단어로 공부하는 영어</p> |
31 |
- <button id="returnButton" @click="returnPage" style="margin: 4rem"> |
|
32 |
- <img src="../../../../resources/img/btn_return_50x50.png" alt="" /> |
|
31 |
+ <button |
|
32 |
+ id="returnButton" |
|
33 |
+ @click="returnPage" |
|
34 |
+ style="margin: 4rem 4rem 0 2rem" |
|
35 |
+ > |
|
36 |
+ <img |
|
37 |
+ src="../../../../resources/img/new_img/content_ink/return_v2.png" |
|
38 |
+ alt="" |
|
39 |
+ /> |
|
33 | 40 |
<p>되돌리기</p> |
34 | 41 |
</button> |
35 | 42 |
</div> |
... | ... | @@ -43,9 +50,9 @@ |
43 | 50 |
<div class="dropGroup flex align-center justify-center"> |
44 | 51 |
<div style="position: relative"> |
45 | 52 |
<img |
46 |
- src="../../../../resources/img/img72_41s.png" |
|
53 |
+ src="../../../../resources/img/new_img/content_ink/background.png" |
|
47 | 54 |
alt="" |
48 |
- style="width: 93%" |
|
55 |
+ style="width: 138rem; height: 49rem" |
|
49 | 56 |
/> |
50 | 57 |
<div class="vocaGroup"> |
51 | 58 |
<div |
... | ... | @@ -77,30 +84,86 @@ |
77 | 84 |
<button |
78 | 85 |
id="eraser1" |
79 | 86 |
class="dropzone" |
80 |
- style="left: 141px; top: 44px" |
|
87 |
+ style="left: 97px; top: 125px; position: fixed" |
|
81 | 88 |
> |
82 |
- <img src="../../../../resources/img/img78_41s.png" alt="" /> |
|
89 |
+ <img |
|
90 |
+ src="../../../../resources/img/new_img/content_ink/ink_1.png" |
|
91 |
+ alt="" |
|
92 |
+ style="position: relative; z-index: 1" |
|
93 |
+ /> |
|
94 |
+ <img |
|
95 |
+ src="../../../../resources/img/new_img/content_ink/click_btn.png" |
|
96 |
+ alt="" |
|
97 |
+ style=" |
|
98 |
+ position: absolute; |
|
99 |
+ z-index: 2; |
|
100 |
+ height: 56px; |
|
101 |
+ right: 69px; |
|
102 |
+ " |
|
103 |
+ /> |
|
83 | 104 |
</button> |
84 | 105 |
<button |
85 | 106 |
id="eraser2" |
86 | 107 |
class="dropzone" |
87 |
- style="left: 200px; bottom: 46px" |
|
108 |
+ style="left: 87px; bottom: 38px; position: fixed" |
|
88 | 109 |
> |
89 |
- <img src="../../../../resources/img/img79_41s.png" alt="" /> |
|
110 |
+ <img |
|
111 |
+ src="../../../../resources/img/new_img/content_ink/ink_2.png" |
|
112 |
+ alt="" |
|
113 |
+ style="position: relative; z-index: 1" |
|
114 |
+ /> |
|
115 |
+ <img |
|
116 |
+ src="../../../../resources/img/new_img/content_ink/click_btn.png" |
|
117 |
+ alt="" |
|
118 |
+ style=" |
|
119 |
+ position: absolute; |
|
120 |
+ z-index: 2; |
|
121 |
+ height: 56px; |
|
122 |
+ right: 139px; |
|
123 |
+ " |
|
124 |
+ /> |
|
90 | 125 |
</button> |
91 | 126 |
<button |
92 | 127 |
id="eraser3" |
93 | 128 |
class="dropzone" |
94 |
- style="right: 237px; top: 114px" |
|
129 |
+ style="right: 207px; top: 133px; position: fixed" |
|
95 | 130 |
> |
96 |
- <img src="../../../../resources/img/img80_41s.png" alt="" /> |
|
131 |
+ <img |
|
132 |
+ src="../../../../resources/img/new_img/content_ink/ink_3.png" |
|
133 |
+ alt="" |
|
134 |
+ style="position: relative; z-index: 1" |
|
135 |
+ /> |
|
136 |
+ <img |
|
137 |
+ src="../../../../resources/img/new_img/content_ink/click_btn.png" |
|
138 |
+ alt="" |
|
139 |
+ style=" |
|
140 |
+ position: absolute; |
|
141 |
+ z-index: 2; |
|
142 |
+ height: 56px; |
|
143 |
+ right: 109px; |
|
144 |
+ " |
|
145 |
+ /> |
|
97 | 146 |
</button> |
98 | 147 |
<button |
99 | 148 |
id="eraser4" |
100 | 149 |
class="dropzone" |
101 |
- style="right: 159px; bottom: 5px" |
|
150 |
+ style="right: 206px; bottom: 51px; position: fixed" |
|
102 | 151 |
> |
103 |
- <img src="../../../../resources/img/img81_41s.png" alt="" /> |
|
152 |
+ <img |
|
153 |
+ src="../../../../resources/img/new_img/content_ink/ink_4.png" |
|
154 |
+ alt="" |
|
155 |
+ style="position: relative; z-index: 1" |
|
156 |
+ /> |
|
157 |
+ <img |
|
158 |
+ src="../../../../resources/img/new_img/content_ink/click_btn.png" |
|
159 |
+ alt="" |
|
160 |
+ style=" |
|
161 |
+ position: absolute; |
|
162 |
+ z-index: 2; |
|
163 |
+ height: 56px; |
|
164 |
+ right: 115px; |
|
165 |
+ " |
|
166 |
+ /> |
|
104 | 167 |
</button> |
105 | 168 |
</div> |
106 | 169 |
</div> |
... | ... | @@ -304,8 +367,17 @@ |
304 | 367 |
const dropZone = event.target.closest("button.dropzone"); |
305 | 368 |
|
306 | 369 |
if (dropZone) { |
307 |
- // 드롭이 이루어진 영역이 버튼일 때만 처리 |
|
308 |
- dropZone.querySelector("img").style.display = "none"; // 잉크를 숨깁니다 |
|
370 |
+ // 잉크 이미지를 숨깁니다 |
|
371 |
+ const inkImage = dropZone.querySelector("img:first-child"); |
|
372 |
+ if (inkImage) { |
|
373 |
+ inkImage.style.display = "none"; |
|
374 |
+ } |
|
375 |
+ |
|
376 |
+ // 클릭포인트 이미지를 숨깁니다 |
|
377 |
+ const clickPointImage = dropZone.querySelector("img:nth-child(2)"); |
|
378 |
+ if (clickPointImage) { |
|
379 |
+ clickPointImage.style.display = "none"; |
|
380 |
+ } |
|
309 | 381 |
} |
310 | 382 |
|
311 | 383 |
// 드래그한 요소를 원래 위치로 복원 |
--- client/views/pages/main/Chapter/Chapter3.vue
+++ client/views/pages/main/Chapter/Chapter3.vue
... | ... | @@ -3,11 +3,14 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
10 |
- <div class="title-box mb25 flex align-center mt40" style="justify-content: space-between"> |
|
10 |
+ <div |
|
11 |
+ class="title-box mb25 flex align-center mt40" |
|
12 |
+ style="justify-content: space-between" |
|
13 |
+ > |
|
11 | 14 |
<div> |
12 | 15 |
<span class="title mr40">1. Hello WORLD</span> |
13 | 16 |
<span class="subtitle">my name is dd</span> |
... | ... | @@ -16,16 +19,28 @@ |
16 | 19 |
</div> |
17 | 20 |
<div class="flex justify-between align-center"> |
18 | 21 |
<div class="pre-btn" @click="previousProblem()"> |
19 |
- <img src="../../../../resources/img/left.png" alt="" :class="{ active: currentIndex === 0 }" /> |
|
22 |
+ <img |
|
23 |
+ src="../../../../resources/img/left.png" |
|
24 |
+ alt="" |
|
25 |
+ :class="{ active: currentIndex === 0 }" |
|
26 |
+ /> |
|
20 | 27 |
</div> |
21 | 28 |
<div class="content title-box"> |
22 | 29 |
,,, |
23 | 30 |
<p class="title mt25 title-bg">step3.</p> |
24 |
- <div class="flex align-center mb30" style="justify-content: space-between"> |
|
25 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
31 |
+ <div |
|
32 |
+ class="flex align-center mb30" |
|
33 |
+ style="justify-content: space-between" |
|
34 |
+ > |
|
35 |
+ <p class="subtitle2 mr20"> |
|
36 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
37 |
+ </p> |
|
26 | 38 |
</div> |
27 | 39 |
|
28 |
- <div class="flex align-center justify-center" style="margin-top: 9rem; gap: 113px"> |
|
40 |
+ <div |
|
41 |
+ class="flex align-center justify-center" |
|
42 |
+ style="margin-top: 9rem; gap: 113px" |
|
43 |
+ > |
|
29 | 44 |
<div class="time-hint"> |
30 | 45 |
<button class="hint-btn">HINT</button> |
31 | 46 |
<div class="time-bg mt20"> |
... | ... | @@ -43,22 +58,34 @@ |
43 | 58 |
</div> |
44 | 59 |
</div> |
45 | 60 |
<div class="pickGroup"> |
46 |
- <article class="flex justify-center mb50" style="gap: 60px" v-for="(item, index) in problemDetail" |
|
47 |
- :key="index"> |
|
61 |
+ <article |
|
62 |
+ class="flex justify-center mb50" |
|
63 |
+ style="gap: 60px" |
|
64 |
+ v-for="(item, index) in problemDetail" |
|
65 |
+ :key="index" |
|
66 |
+ > |
|
48 | 67 |
<div class="flex" @click="handleClick(item.prblmDtlExpln)"> |
49 | 68 |
<button> |
50 | 69 |
<img src="../../../../resources/img/img136_71s.png" alt="" /> |
51 |
- <p :class="{ active: selectedButton === item.prblmDtlExpln }">{{ index + 1 }}</p> |
|
70 |
+ <p :class="{ active: selectedButton === item.prblmDtlExpln }"> |
|
71 |
+ {{ index + 1 }} |
|
72 |
+ </p> |
|
52 | 73 |
</button> |
53 | 74 |
<p>{{ item.prblmDtlExpln }}</p> |
54 | 75 |
</div> |
55 | 76 |
</article> |
56 | 77 |
</div> |
57 | 78 |
</div> |
58 |
- <button class="submit-button" @click="handleSubmit()" |
|
59 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
60 |
- <button class="submit-button" @click="nextProblem()" |
|
61 |
- v-else>다음 문제로</button> |
|
79 |
+ <button |
|
80 |
+ class="submit-button" |
|
81 |
+ @click="handleSubmit()" |
|
82 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
83 |
+ > |
|
84 |
+ 제출하기 |
|
85 |
+ </button> |
|
86 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
87 |
+ 다음 문제로 |
|
88 |
+ </button> |
|
62 | 89 |
</div> |
63 | 90 |
<div class="next-btn" @click="nextProblem()"> |
64 | 91 |
<img src="../../../../resources/img/right.png" alt="" /> |
... | ... | @@ -68,7 +95,6 @@ |
68 | 95 |
</template> |
69 | 96 |
|
70 | 97 |
<script> |
71 |
- |
|
72 | 98 |
import axios from "axios"; |
73 | 99 |
export default { |
74 | 100 |
data() { |
... | ... | @@ -86,7 +112,10 @@ |
86 | 112 |
methods: { |
87 | 113 |
complete() { |
88 | 114 |
const { unit_id, book_id } = this.$route.query; |
89 |
- this.$router.push({ name: 'Dashboard', query: { value: 8, unit_id, book_id } }); |
|
115 |
+ this.$router.push({ |
|
116 |
+ name: "Dashboard", |
|
117 |
+ query: { value: 8, unit_id, book_id }, |
|
118 |
+ }); |
|
90 | 119 |
}, |
91 | 120 |
goToPage(page) { |
92 | 121 |
this.$router.push({ name: page }); |
... | ... | @@ -105,7 +134,7 @@ |
105 | 134 |
}, 1000); |
106 | 135 |
}, |
107 | 136 |
handleClick(answer) { |
108 |
- console.log(answer) |
|
137 |
+ console.log(answer); |
|
109 | 138 |
this.selectedButton = answer; |
110 | 139 |
}, |
111 | 140 |
// 제출하기 버튼 |
... | ... | @@ -113,18 +142,18 @@ |
113 | 142 |
const problemData = { |
114 | 143 |
prblmInfo: this.currentLearningId, |
115 | 144 |
prblmNumber: this.currentProblemIndex, |
116 |
- prblmAns: this.selectedButton |
|
117 |
- } |
|
145 |
+ prblmAns: this.selectedButton, |
|
146 |
+ }; |
|
118 | 147 |
const answerData = { |
119 | 148 |
prblmId: this.currentLearningId.prblm_id, |
120 | 149 |
prblmAns: this.selectedButton, |
121 | 150 |
stdId: this.$store.getters.getStdId, |
122 |
- prblmLogAnsCnt: 1 |
|
123 |
- } |
|
124 |
- this.$store.dispatch('saveProblemData', problemData); |
|
125 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
126 |
- console.log(this.$store.getters.getAllProblems) |
|
127 |
- console.log(this.$store.getters.getAllAnswers) |
|
151 |
+ prblmLogAnsCnt: 1, |
|
152 |
+ }; |
|
153 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
154 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
155 |
+ console.log(this.$store.getters.getAllProblems); |
|
156 |
+ console.log(this.$store.getters.getAllAnswers); |
|
128 | 157 |
|
129 | 158 |
axios({ |
130 | 159 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -133,13 +162,13 @@ |
133 | 162 |
"Content-Type": "application/json; charset=UTF-8", |
134 | 163 |
}, |
135 | 164 |
data: this.$store.getters.getAllAnswers, |
136 |
- }).then(function (res) { |
|
137 |
- console.log("problem - response : ", res.data); |
|
138 | 165 |
}) |
166 |
+ .then(function (res) { |
|
167 |
+ console.log("problem - response : ", res.data); |
|
168 |
+ }) |
|
139 | 169 |
.catch(function (error) { |
140 | 170 |
console.log("problem - error : ", error); |
141 | 171 |
}); |
142 |
- |
|
143 | 172 |
}, |
144 | 173 |
getProblem() { |
145 | 174 |
const vm = this; |
... | ... | @@ -167,27 +196,30 @@ |
167 | 196 |
const problemData = { |
168 | 197 |
prblmInfo: this.currentLearningId, |
169 | 198 |
prblmNumber: this.currentProblemIndex, |
170 |
- prblmAns: this.selectedButton |
|
171 |
- } |
|
199 |
+ prblmAns: this.selectedButton, |
|
200 |
+ }; |
|
172 | 201 |
const answerData = { |
173 | 202 |
prblmId: this.currentLearningId.prblm_id, |
174 | 203 |
prblmAns: this.selectedButton, |
175 | 204 |
stdId: this.$store.getters.getStdId, |
176 |
- prblmLogAnsCnt: 1 |
|
177 |
- } |
|
178 |
- this.$store.dispatch('saveProblemData', problemData); |
|
179 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
180 |
- console.log(this.$store.getters.getAllProblems) |
|
181 |
- console.log(this.$store.getters.getAllAnswers) |
|
182 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
183 |
- this.$store.dispatch('goToNextProblem'); |
|
205 |
+ prblmLogAnsCnt: 1, |
|
206 |
+ }; |
|
207 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
208 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
209 |
+ console.log(this.$store.getters.getAllProblems); |
|
210 |
+ console.log(this.$store.getters.getAllAnswers); |
|
211 |
+ if ( |
|
212 |
+ this.currentProblemIndex < |
|
213 |
+ this.$store.state.currentLearningIds.length - 1 |
|
214 |
+ ) { |
|
215 |
+ this.$store.dispatch("goToNextProblem"); |
|
184 | 216 |
this.handleProblemDetail(this.currentLearningId); |
185 | 217 |
this.goToPage(this.problemType); |
186 | 218 |
} |
187 | 219 |
}, |
188 | 220 |
previousProblem() { |
189 | 221 |
if (this.currentProblemIndex > 0) { |
190 |
- this.$store.dispatch('goToPreviousProblem'); |
|
222 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
191 | 223 |
this.handleProblemDetail(this.currentLearningId); |
192 | 224 |
this.goToPage(this.problemType); |
193 | 225 |
} |
... | ... | @@ -264,18 +296,18 @@ |
264 | 296 |
}, |
265 | 297 |
getStdId() { |
266 | 298 |
return this.$store.getters.getStdId; |
267 |
- } |
|
299 |
+ }, |
|
268 | 300 |
}, |
269 | 301 |
created() { |
270 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
271 |
- console.log('Current Label:', this.currentLabel); |
|
272 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
302 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
303 |
+ console.log("Current Label:", this.currentLabel); |
|
304 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
273 | 305 |
|
274 | 306 |
// Fetch or process the current problem based on `currentLearningId` |
275 | 307 |
}, |
276 | 308 |
components: {}, |
277 | 309 |
mounted() { |
278 |
- this.getProblem() |
|
310 |
+ this.getProblem(); |
|
279 | 311 |
}, |
280 | 312 |
}; |
281 | 313 |
</script> |
... | ... | @@ -328,7 +360,7 @@ |
328 | 360 |
width: -webkit-fill-available; |
329 | 361 |
} |
330 | 362 |
|
331 |
-.pickGroup article>div>p { |
|
363 |
+.pickGroup article > div > p { |
|
332 | 364 |
font-size: 64px; |
333 | 365 |
} |
334 | 366 |
|
--- client/views/pages/main/Chapter/Chapter3_1.vue
+++ client/views/pages/main/Chapter/Chapter3_1.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,13 +12,22 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" |
|
14 |
- :class="{ active: currentIndex === 0 }" /></div> |
|
15 |
+ <div class="pre-btn" @click="previousProblem()"> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
21 |
+ </div> |
|
15 | 22 |
<div class="content title-box"> |
16 | 23 |
<p class="title mt25 title-bg">step3.</p> |
17 | 24 |
<div class="flex align-center mb30"> |
18 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
19 |
- <button><img src="../../../../resources/img/btn10_s.png" alt="" /></button> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
28 |
+ <button> |
|
29 |
+ <img src="../../../../resources/img/btn10_s.png" alt="" /> |
|
30 |
+ </button> |
|
20 | 31 |
</div> |
21 | 32 |
|
22 | 33 |
<div class="flex align-center justify-center" style="gap: 113px"> |
... | ... | @@ -34,33 +45,53 @@ |
34 | 45 |
<div class="pickGroup"> |
35 | 46 |
<div class="flex" style="gap: 250px"> |
36 | 47 |
<article class="text-ct" @click="handleClick('A')"> |
37 |
- <div class="mb30"><img src="../../../../resources/img/img107_50s.png" alt="" /></div> |
|
48 |
+ <div class="mb30"> |
|
49 |
+ <img src="../../../../resources/img/img107_50s.png" alt="" /> |
|
50 |
+ </div> |
|
38 | 51 |
<button class="popTxt"> |
39 |
- <img :src="selectedButton === 'A' ? selectedbuttonImg : buttonImg" alt="" /> |
|
52 |
+ <img |
|
53 |
+ :src=" |
|
54 |
+ selectedButton === 'A' ? selectedbuttonImg : buttonImg |
|
55 |
+ " |
|
56 |
+ alt="" |
|
57 |
+ /> |
|
40 | 58 |
</button> |
41 | 59 |
</article> |
42 | 60 |
<article class="text-ct" @click="handleClick('B')"> |
43 |
- <div class="mb30"><img src="../../../../resources/img/img108_50s.png" alt="" /></div> |
|
61 |
+ <div class="mb30"> |
|
62 |
+ <img src="../../../../resources/img/img108_50s.png" alt="" /> |
|
63 |
+ </div> |
|
44 | 64 |
<button class="popTxt"> |
45 |
- <img :src="selectedButton === 'B' ? selectedbuttonImg : buttonImg" alt="" /> |
|
65 |
+ <img |
|
66 |
+ :src=" |
|
67 |
+ selectedButton === 'B' ? selectedbuttonImg : buttonImg |
|
68 |
+ " |
|
69 |
+ alt="" |
|
70 |
+ /> |
|
46 | 71 |
</button> |
47 | 72 |
</article> |
48 | 73 |
</div> |
49 | 74 |
</div> |
50 | 75 |
</div> |
51 |
- <button class="submit-button" @click="handleSubmit()" |
|
52 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
53 |
- <button class="submit-button" @click="nextProblem()" |
|
54 |
- v-else>다음 문제로</button> |
|
76 |
+ <button |
|
77 |
+ class="submit-button" |
|
78 |
+ @click="handleSubmit()" |
|
79 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
80 |
+ > |
|
81 |
+ 제출하기 |
|
82 |
+ </button> |
|
83 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
84 |
+ 다음 문제로 |
|
85 |
+ </button> |
|
55 | 86 |
</div> |
56 |
- <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" /> |
|
87 |
+ <div class="next-btn" @click="nextProblem()"> |
|
88 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
57 | 89 |
</div> |
58 | 90 |
</div> |
59 | 91 |
</div> |
60 | 92 |
</template> |
61 | 93 |
|
62 | 94 |
<script> |
63 |
- |
|
64 | 95 |
import axios from "axios"; |
65 | 96 |
export default { |
66 | 97 |
data() { |
... | ... | @@ -97,29 +128,26 @@ |
97 | 128 |
}, |
98 | 129 |
// 제출하기 버튼 |
99 | 130 |
handleSubmit() { |
100 |
- |
|
101 | 131 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
102 | 132 |
if (userConfirmed) { |
103 |
- |
|
104 | 133 |
const problemData = { |
105 | 134 |
prblmInfo: this.currentLearningId, |
106 | 135 |
prblmNumber: this.currentProblemIndex, |
107 |
- prblmAns: this.selectedButton |
|
136 |
+ prblmAns: this.selectedButton, |
|
108 | 137 |
}; |
109 | 138 |
|
110 | 139 |
const answerData = { |
111 | 140 |
prblmId: this.currentLearningId.prblm_id, |
112 | 141 |
prblmAns: this.selectedButton, |
113 | 142 |
stdId: this.$store.getters.getStdId, |
114 |
- prblmLogAnsCnt: 1 |
|
143 |
+ prblmLogAnsCnt: 1, |
|
115 | 144 |
}; |
116 | 145 |
|
117 |
- this.$store.dispatch('saveProblemData', problemData); |
|
118 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
146 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
147 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
119 | 148 |
|
120 | 149 |
console.log(this.$store.getters.getAllProblems); |
121 | 150 |
console.log(this.$store.getters.getAllAnswers); |
122 |
- |
|
123 | 151 |
|
124 | 152 |
axios({ |
125 | 153 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -131,7 +159,7 @@ |
131 | 159 |
}) |
132 | 160 |
.then((res) => { |
133 | 161 |
console.log("problem - response : ", res.data); |
134 |
- this.goToPage('Chapter4') |
|
162 |
+ this.goToPage("Chapter4"); |
|
135 | 163 |
}) |
136 | 164 |
.catch(function (error) { |
137 | 165 |
console.log("problem - error : ", error); |
... | ... | @@ -140,7 +168,6 @@ |
140 | 168 |
console.log("Submission canceled by the user."); |
141 | 169 |
} |
142 | 170 |
}, |
143 |
- |
|
144 | 171 |
|
145 | 172 |
getProblem() { |
146 | 173 |
const vm = this; |
... | ... | @@ -168,27 +195,30 @@ |
168 | 195 |
const problemData = { |
169 | 196 |
prblmInfo: this.currentLearningId, |
170 | 197 |
prblmNumber: this.currentProblemIndex, |
171 |
- prblmAns: this.selectedButton |
|
172 |
- } |
|
198 |
+ prblmAns: this.selectedButton, |
|
199 |
+ }; |
|
173 | 200 |
const answerData = { |
174 | 201 |
prblmId: this.currentLearningId.prblm_id, |
175 | 202 |
prblmAns: this.selectedButton, |
176 | 203 |
stdId: this.$store.getters.getStdId, |
177 |
- prblmLogAnsCnt: 1 |
|
178 |
- } |
|
179 |
- this.$store.dispatch('saveProblemData', problemData); |
|
180 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
181 |
- console.log(this.$store.getters.getAllProblems) |
|
182 |
- console.log(this.$store.getters.getAllAnswers) |
|
183 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
184 |
- this.$store.dispatch('goToNextProblem'); |
|
204 |
+ prblmLogAnsCnt: 1, |
|
205 |
+ }; |
|
206 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
207 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
208 |
+ console.log(this.$store.getters.getAllProblems); |
|
209 |
+ console.log(this.$store.getters.getAllAnswers); |
|
210 |
+ if ( |
|
211 |
+ this.currentProblemIndex < |
|
212 |
+ this.$store.state.currentLearningIds.length - 1 |
|
213 |
+ ) { |
|
214 |
+ this.$store.dispatch("goToNextProblem"); |
|
185 | 215 |
this.handleProblemDetail(this.currentLearningId); |
186 | 216 |
this.goToPage(this.problemType); |
187 | 217 |
} |
188 | 218 |
}, |
189 | 219 |
previousProblem() { |
190 | 220 |
if (this.currentProblemIndex > 0) { |
191 |
- this.$store.dispatch('goToPreviousProblem'); |
|
221 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
192 | 222 |
this.handleProblemDetail(this.currentLearningId); |
193 | 223 |
this.goToPage(this.problemType); |
194 | 224 |
} |
... | ... | @@ -259,12 +289,12 @@ |
259 | 289 |
}, |
260 | 290 |
isPreviousButtonDisabled() { |
261 | 291 |
return this.currentProblemIndex === 0; |
262 |
- } |
|
292 |
+ }, |
|
263 | 293 |
}, |
264 | 294 |
created() { |
265 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
266 |
- console.log('Current Label:', this.currentLabel); |
|
267 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
295 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
296 |
+ console.log("Current Label:", this.currentLabel); |
|
297 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
268 | 298 |
this.currentIndex = this.currentProblemIndex; |
269 | 299 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
270 | 300 |
|
... | ... | @@ -272,7 +302,7 @@ |
272 | 302 |
}, |
273 | 303 |
components: {}, |
274 | 304 |
mounted() { |
275 |
- this.getProblem() |
|
305 |
+ this.getProblem(); |
|
276 | 306 |
}, |
277 | 307 |
}; |
278 | 308 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_10.vue
+++ client/views/pages/main/Chapter/Chapter3_10.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,15 +12,26 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" |
|
14 |
- :class="{ active: currentIndex === 0 }" /></div> |
|
15 |
+ <div class="pre-btn" @click="previousProblem()"> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
21 |
+ </div> |
|
15 | 22 |
<div class="content title-box"> |
16 | 23 |
<p class="title mt25 title-bg">step3.</p> |
17 | 24 |
<div class="flex align-center mb30"> |
18 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
19 | 28 |
<button @click="playAudio"> |
20 | 29 |
<img src="../../../../resources/img/btn10_s.png" alt="" /> |
21 |
- <audio id="audio-player" src="client/resources/audio/bank.wav" preload="auto"></audio> |
|
30 |
+ <audio |
|
31 |
+ id="audio-player" |
|
32 |
+ src="client/resources/audio/bank.wav" |
|
33 |
+ preload="auto" |
|
34 |
+ ></audio> |
|
22 | 35 |
</button> |
23 | 36 |
</div> |
24 | 37 |
|
... | ... | @@ -36,19 +49,32 @@ |
36 | 49 |
</div> |
37 | 50 |
<div class="imgGroup mt20"> |
38 | 51 |
<img src="../../../../resources/img/img116_59s.png" alt="" /> |
39 |
- <p class="title1 mt10" style="width: auto"><strong>진수가 거절한 제안</strong>은 무엇인지 우리말로 쓰세요.</p> |
|
52 |
+ <p class="title1 mt10" style="width: auto"> |
|
53 |
+ <strong>진수가 거절한 제안</strong>은 무엇인지 우리말로 쓰세요. |
|
54 |
+ </p> |
|
40 | 55 |
<div class="mt20"> |
41 |
- <input class="yellow-bd" v-model="answer" type="text" placeholder="답을 입력하세요." /> |
|
56 |
+ <input |
|
57 |
+ class="yellow-bd" |
|
58 |
+ v-model="answer" |
|
59 |
+ type="text" |
|
60 |
+ placeholder="답을 입력하세요." |
|
61 |
+ /> |
|
42 | 62 |
</div> |
43 | 63 |
</div> |
44 | 64 |
</div> |
45 |
- <button class="submit-button" @click="handleSubmit()" |
|
46 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
47 |
- <button class="submit-button" @click="nextProblem()" |
|
48 |
- v-else>다음 문제로</button> |
|
49 |
- |
|
65 |
+ <button |
|
66 |
+ class="submit-button" |
|
67 |
+ @click="handleSubmit()" |
|
68 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
69 |
+ > |
|
70 |
+ 제출하기 |
|
71 |
+ </button> |
|
72 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
73 |
+ 다음 문제로 |
|
74 |
+ </button> |
|
50 | 75 |
</div> |
51 |
- <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" /> |
|
76 |
+ <div class="next-btn" @click="nextProblem()"> |
|
77 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
52 | 78 |
</div> |
53 | 79 |
</div> |
54 | 80 |
</div> |
... | ... | @@ -91,29 +117,26 @@ |
91 | 117 |
console.log("playing"); |
92 | 118 |
}, |
93 | 119 |
handleSubmit() { |
94 |
- |
|
95 | 120 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
96 | 121 |
if (userConfirmed) { |
97 |
- |
|
98 | 122 |
const problemData = { |
99 | 123 |
prblmInfo: this.currentLearningId, |
100 | 124 |
prblmNumber: this.currentProblemIndex, |
101 |
- prblmAns: this.selectedButton |
|
125 |
+ prblmAns: this.selectedButton, |
|
102 | 126 |
}; |
103 | 127 |
|
104 | 128 |
const answerData = { |
105 | 129 |
prblmId: this.currentLearningId.prblm_id, |
106 | 130 |
prblmAns: this.selectedButton, |
107 | 131 |
stdId: this.$store.getters.getStdId, |
108 |
- prblmLogAnsCnt: 1 |
|
132 |
+ prblmLogAnsCnt: 1, |
|
109 | 133 |
}; |
110 | 134 |
|
111 |
- this.$store.dispatch('saveProblemData', problemData); |
|
112 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
135 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
136 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
113 | 137 |
|
114 | 138 |
console.log(this.$store.getters.getAllProblems); |
115 | 139 |
console.log(this.$store.getters.getAllAnswers); |
116 |
- |
|
117 | 140 |
|
118 | 141 |
axios({ |
119 | 142 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -125,7 +148,7 @@ |
125 | 148 |
}) |
126 | 149 |
.then(function (res) { |
127 | 150 |
console.log("problem - response : ", res.data); |
128 |
- this.goToPage('Chapter4') |
|
151 |
+ this.goToPage("Chapter4"); |
|
129 | 152 |
}) |
130 | 153 |
.catch(function (error) { |
131 | 154 |
console.log("problem - error : ", error); |
... | ... | @@ -160,27 +183,30 @@ |
160 | 183 |
const problemData = { |
161 | 184 |
prblmInfo: this.currentLearningId, |
162 | 185 |
prblmNumber: this.currentProblemIndex, |
163 |
- prblmAns: this.selectedButton |
|
164 |
- } |
|
186 |
+ prblmAns: this.selectedButton, |
|
187 |
+ }; |
|
165 | 188 |
const answerData = { |
166 | 189 |
prblmId: this.currentLearningId.prblm_id, |
167 | 190 |
prblmAns: this.selectedButton, |
168 | 191 |
stdId: this.$store.getters.getStdId, |
169 |
- prblmLogAnsCnt: 1 |
|
170 |
- } |
|
171 |
- this.$store.dispatch('saveProblemData', problemData); |
|
172 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
173 |
- console.log(this.$store.getters.getAllProblems) |
|
174 |
- console.log(this.$store.getters.getAllAnswers) |
|
175 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
176 |
- this.$store.dispatch('goToNextProblem'); |
|
192 |
+ prblmLogAnsCnt: 1, |
|
193 |
+ }; |
|
194 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
195 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
196 |
+ console.log(this.$store.getters.getAllProblems); |
|
197 |
+ console.log(this.$store.getters.getAllAnswers); |
|
198 |
+ if ( |
|
199 |
+ this.currentProblemIndex < |
|
200 |
+ this.$store.state.currentLearningIds.length - 1 |
|
201 |
+ ) { |
|
202 |
+ this.$store.dispatch("goToNextProblem"); |
|
177 | 203 |
this.handleProblemDetail(this.currentLearningId); |
178 | 204 |
this.goToPage(this.problemType); |
179 | 205 |
} |
180 | 206 |
}, |
181 | 207 |
previousProblem() { |
182 | 208 |
if (this.currentProblemIndex > 0) { |
183 |
- this.$store.dispatch('goToPreviousProblem'); |
|
209 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
184 | 210 |
this.handleProblemDetail(this.currentLearningId); |
185 | 211 |
this.goToPage(this.problemType); |
186 | 212 |
} |
... | ... | @@ -251,12 +277,12 @@ |
251 | 277 |
}, |
252 | 278 |
isPreviousButtonDisabled() { |
253 | 279 |
return this.currentProblemIndex === 0; |
254 |
- } |
|
280 |
+ }, |
|
255 | 281 |
}, |
256 | 282 |
created() { |
257 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
258 |
- console.log('Current Label:', this.currentLabel); |
|
259 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
283 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
284 |
+ console.log("Current Label:", this.currentLabel); |
|
285 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
260 | 286 |
this.currentIndex = this.currentProblemIndex; |
261 | 287 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
262 | 288 |
|
... | ... | @@ -264,7 +290,7 @@ |
264 | 290 |
}, |
265 | 291 |
components: {}, |
266 | 292 |
mounted() { |
267 |
- this.getProblem() |
|
293 |
+ this.getProblem(); |
|
268 | 294 |
}, |
269 | 295 |
}; |
270 | 296 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_11.vue
+++ client/views/pages/main/Chapter/Chapter3_11.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,13 +12,19 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" |
|
14 |
- :class="{ active: currentIndex === 0 }" /> |
|
15 |
+ <div class="pre-btn" @click="previousProblem()"> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
15 | 21 |
</div> |
16 | 22 |
<div class="content title-box"> |
17 | 23 |
<p class="title mt25 title-bg">step3.</p> |
18 | 24 |
<div class="flex align-center mb30"> |
19 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
20 | 28 |
<!-- <button><img src="../../../../resources/img/btn10_s.png" alt=""> |
21 | 29 |
</button> --> |
22 | 30 |
</div> |
... | ... | @@ -43,12 +51,19 @@ |
43 | 51 |
</div> |
44 | 52 |
</div> |
45 | 53 |
</div> |
46 |
- <button class="submit-button" @click="handleSubmit()" |
|
47 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
48 |
- <button class="submit-button" @click="nextProblem()" |
|
49 |
- v-else>다음 문제로</button> |
|
54 |
+ <button |
|
55 |
+ class="submit-button" |
|
56 |
+ @click="handleSubmit()" |
|
57 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
58 |
+ > |
|
59 |
+ 제출하기 |
|
60 |
+ </button> |
|
61 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
62 |
+ 다음 문제로 |
|
63 |
+ </button> |
|
50 | 64 |
</div> |
51 |
- <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" /> |
|
65 |
+ <div class="next-btn" @click="nextProblem()"> |
|
66 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
52 | 67 |
</div> |
53 | 68 |
</div> |
54 | 69 |
</div> |
... | ... | @@ -87,29 +102,26 @@ |
87 | 102 |
}, 1000); |
88 | 103 |
}, |
89 | 104 |
handleSubmit() { |
90 |
- |
|
91 | 105 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
92 | 106 |
if (userConfirmed) { |
93 |
- |
|
94 | 107 |
const problemData = { |
95 | 108 |
prblmInfo: this.currentLearningId, |
96 | 109 |
prblmNumber: this.currentProblemIndex, |
97 |
- prblmAns: this.selectedButton |
|
110 |
+ prblmAns: this.selectedButton, |
|
98 | 111 |
}; |
99 | 112 |
|
100 | 113 |
const answerData = { |
101 | 114 |
prblmId: this.currentLearningId.prblm_id, |
102 | 115 |
prblmAns: this.selectedButton, |
103 | 116 |
stdId: this.$store.getters.getStdId, |
104 |
- prblmLogAnsCnt: 1 |
|
117 |
+ prblmLogAnsCnt: 1, |
|
105 | 118 |
}; |
106 | 119 |
|
107 |
- this.$store.dispatch('saveProblemData', problemData); |
|
108 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
120 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
121 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
109 | 122 |
|
110 | 123 |
console.log(this.$store.getters.getAllProblems); |
111 | 124 |
console.log(this.$store.getters.getAllAnswers); |
112 |
- |
|
113 | 125 |
|
114 | 126 |
axios({ |
115 | 127 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -121,7 +133,7 @@ |
121 | 133 |
}) |
122 | 134 |
.then(function (res) { |
123 | 135 |
console.log("problem - response : ", res.data); |
124 |
- this.goToPage('Chapter4') |
|
136 |
+ this.goToPage("Chapter4"); |
|
125 | 137 |
}) |
126 | 138 |
.catch(function (error) { |
127 | 139 |
console.log("problem - error : ", error); |
... | ... | @@ -156,27 +168,30 @@ |
156 | 168 |
const problemData = { |
157 | 169 |
prblmInfo: this.currentLearningId, |
158 | 170 |
prblmNumber: this.currentProblemIndex, |
159 |
- prblmAns: this.selectedButton |
|
160 |
- } |
|
171 |
+ prblmAns: this.selectedButton, |
|
172 |
+ }; |
|
161 | 173 |
const answerData = { |
162 | 174 |
prblmId: this.currentLearningId.prblm_id, |
163 | 175 |
prblmAns: this.selectedButton, |
164 | 176 |
stdId: this.$store.getters.getStdId, |
165 |
- prblmLogAnsCnt: 1 |
|
166 |
- } |
|
167 |
- this.$store.dispatch('saveProblemData', problemData); |
|
168 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
169 |
- console.log(this.$store.getters.getAllProblems) |
|
170 |
- console.log(this.$store.getters.getAllAnswers) |
|
171 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
172 |
- this.$store.dispatch('goToNextProblem'); |
|
177 |
+ prblmLogAnsCnt: 1, |
|
178 |
+ }; |
|
179 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
180 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
181 |
+ console.log(this.$store.getters.getAllProblems); |
|
182 |
+ console.log(this.$store.getters.getAllAnswers); |
|
183 |
+ if ( |
|
184 |
+ this.currentProblemIndex < |
|
185 |
+ this.$store.state.currentLearningIds.length - 1 |
|
186 |
+ ) { |
|
187 |
+ this.$store.dispatch("goToNextProblem"); |
|
173 | 188 |
this.handleProblemDetail(this.currentLearningId); |
174 | 189 |
this.goToPage(this.problemType); |
175 | 190 |
} |
176 | 191 |
}, |
177 | 192 |
previousProblem() { |
178 | 193 |
if (this.currentProblemIndex > 0) { |
179 |
- this.$store.dispatch('goToPreviousProblem'); |
|
194 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
180 | 195 |
this.handleProblemDetail(this.currentLearningId); |
181 | 196 |
this.goToPage(this.problemType); |
182 | 197 |
} |
... | ... | @@ -247,12 +262,12 @@ |
247 | 262 |
}, |
248 | 263 |
isPreviousButtonDisabled() { |
249 | 264 |
return this.currentProblemIndex === 0; |
250 |
- } |
|
265 |
+ }, |
|
251 | 266 |
}, |
252 | 267 |
created() { |
253 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
254 |
- console.log('Current Label:', this.currentLabel); |
|
255 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
268 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
269 |
+ console.log("Current Label:", this.currentLabel); |
|
270 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
256 | 271 |
this.currentIndex = this.currentProblemIndex; |
257 | 272 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
258 | 273 |
|
... | ... | @@ -260,7 +275,7 @@ |
260 | 275 |
}, |
261 | 276 |
components: {}, |
262 | 277 |
mounted() { |
263 |
- this.getProblem() |
|
278 |
+ this.getProblem(); |
|
264 | 279 |
}, |
265 | 280 |
}; |
266 | 281 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_12.vue
+++ client/views/pages/main/Chapter/Chapter3_12.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,13 +12,19 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" |
|
14 |
- :class="{ active: currentIndex === 0 }" /> |
|
15 |
+ <div class="pre-btn" @click="previousProblem()"> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
15 | 21 |
</div> |
16 | 22 |
<div class="content title-box"> |
17 | 23 |
<p class="title mt25 title-bg">step3</p> |
18 | 24 |
<div class="flex align-center mb30"> |
19 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
20 | 28 |
<!-- <button><img src="../../../../resources/img/btn10_s.png" alt=""> |
21 | 29 |
</button> --> |
22 | 30 |
</div> |
... | ... | @@ -36,17 +44,33 @@ |
36 | 44 |
<div class="dragGroup mt40"> |
37 | 45 |
<div class="flex justify-center" style="gap: 20px"> |
38 | 46 |
<div class="dropContainer" id="sourceContainer"> |
39 |
- <button v-for="(word, index) in question" :key="index" draggable="true" |
|
40 |
- @dragstart="onDragStart($event, word, index)"> |
|
47 |
+ <button |
|
48 |
+ v-for="(word, index) in question" |
|
49 |
+ :key="index" |
|
50 |
+ draggable="true" |
|
51 |
+ @dragstart="onDragStart($event, word, index)" |
|
52 |
+ > |
|
41 | 53 |
<p>{{ word }}</p> |
42 | 54 |
</button> |
43 | 55 |
</div> |
44 | 56 |
</div> |
45 | 57 |
</div> |
46 |
- <div class="dropContainer flex align-center justify-center mt30" id="targetContainer"> |
|
47 |
- <div class="dropSlot" v-for="(slot, index) in questionLength" :key="index" @dragover.prevent |
|
48 |
- @drop="onDrop($event, index)"> |
|
49 |
- <div class="dropSlot-inner" draggable="true" @dragstart="onDragStart($event, userAnswer[index], index)"> |
|
58 |
+ <div |
|
59 |
+ class="dropContainer flex align-center justify-center mt30" |
|
60 |
+ id="targetContainer" |
|
61 |
+ > |
|
62 |
+ <div |
|
63 |
+ class="dropSlot" |
|
64 |
+ v-for="(slot, index) in questionLength" |
|
65 |
+ :key="index" |
|
66 |
+ @dragover.prevent |
|
67 |
+ @drop="onDrop($event, index)" |
|
68 |
+ > |
|
69 |
+ <div |
|
70 |
+ class="dropSlot-inner" |
|
71 |
+ draggable="true" |
|
72 |
+ @dragstart="onDragStart($event, userAnswer[index], index)" |
|
73 |
+ > |
|
50 | 74 |
<div class="dropSlot-inner"> |
51 | 75 |
<div v-if="userAnswer[index]" class="dropped-char"> |
52 | 76 |
{{ userAnswer[index] }} |
... | ... | @@ -56,12 +80,19 @@ |
56 | 80 |
</div> |
57 | 81 |
</div> |
58 | 82 |
</div> |
59 |
- <button class="submit-button" @click="handleSubmit()" |
|
60 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
61 |
- <button class="submit-button" @click="nextProblem()" |
|
62 |
- v-else>다음 문제로</button> |
|
83 |
+ <button |
|
84 |
+ class="submit-button" |
|
85 |
+ @click="handleSubmit()" |
|
86 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
87 |
+ > |
|
88 |
+ 제출하기 |
|
89 |
+ </button> |
|
90 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
91 |
+ 다음 문제로 |
|
92 |
+ </button> |
|
63 | 93 |
</div> |
64 |
- <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" /> |
|
94 |
+ <div class="next-btn" @click="nextProblem()"> |
|
95 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
65 | 96 |
</div> |
66 | 97 |
</div> |
67 | 98 |
</div> |
... | ... | @@ -122,29 +153,26 @@ |
122 | 153 |
} |
123 | 154 |
}, |
124 | 155 |
handleSubmit() { |
125 |
- |
|
126 | 156 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
127 | 157 |
if (userConfirmed) { |
128 |
- |
|
129 | 158 |
const problemData = { |
130 | 159 |
prblmInfo: this.currentLearningId, |
131 | 160 |
prblmNumber: this.currentProblemIndex, |
132 |
- prblmAns: this.selectedButton |
|
161 |
+ prblmAns: this.selectedButton, |
|
133 | 162 |
}; |
134 | 163 |
|
135 | 164 |
const answerData = { |
136 | 165 |
prblmId: this.currentLearningId.prblm_id, |
137 | 166 |
prblmAns: this.selectedButton, |
138 | 167 |
stdId: this.$store.getters.getStdId, |
139 |
- prblmLogAnsCnt: 1 |
|
168 |
+ prblmLogAnsCnt: 1, |
|
140 | 169 |
}; |
141 | 170 |
|
142 |
- this.$store.dispatch('saveProblemData', problemData); |
|
143 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
171 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
172 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
144 | 173 |
|
145 | 174 |
console.log(this.$store.getters.getAllProblems); |
146 | 175 |
console.log(this.$store.getters.getAllAnswers); |
147 |
- |
|
148 | 176 |
|
149 | 177 |
axios({ |
150 | 178 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -156,7 +184,7 @@ |
156 | 184 |
}) |
157 | 185 |
.then(function (res) { |
158 | 186 |
console.log("problem - response : ", res.data); |
159 |
- this.goToPage('Chapter4') |
|
187 |
+ this.goToPage("Chapter4"); |
|
160 | 188 |
}) |
161 | 189 |
.catch(function (error) { |
162 | 190 |
console.log("problem - error : ", error); |
... | ... | @@ -191,27 +219,30 @@ |
191 | 219 |
const problemData = { |
192 | 220 |
prblmInfo: this.currentLearningId, |
193 | 221 |
prblmNumber: this.currentProblemIndex, |
194 |
- prblmAns: this.selectedButton |
|
195 |
- } |
|
222 |
+ prblmAns: this.selectedButton, |
|
223 |
+ }; |
|
196 | 224 |
const answerData = { |
197 | 225 |
prblmId: this.currentLearningId.prblm_id, |
198 | 226 |
prblmAns: this.selectedButton, |
199 | 227 |
stdId: this.$store.getters.getStdId, |
200 |
- prblmLogAnsCnt: 1 |
|
201 |
- } |
|
202 |
- this.$store.dispatch('saveProblemData', problemData); |
|
203 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
204 |
- console.log(this.$store.getters.getAllProblems) |
|
205 |
- console.log(this.$store.getters.getAllAnswers) |
|
206 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
207 |
- this.$store.dispatch('goToNextProblem'); |
|
228 |
+ prblmLogAnsCnt: 1, |
|
229 |
+ }; |
|
230 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
231 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
232 |
+ console.log(this.$store.getters.getAllProblems); |
|
233 |
+ console.log(this.$store.getters.getAllAnswers); |
|
234 |
+ if ( |
|
235 |
+ this.currentProblemIndex < |
|
236 |
+ this.$store.state.currentLearningIds.length - 1 |
|
237 |
+ ) { |
|
238 |
+ this.$store.dispatch("goToNextProblem"); |
|
208 | 239 |
this.handleProblemDetail(this.currentLearningId); |
209 | 240 |
this.goToPage(this.problemType); |
210 | 241 |
} |
211 | 242 |
}, |
212 | 243 |
previousProblem() { |
213 | 244 |
if (this.currentProblemIndex > 0) { |
214 |
- this.$store.dispatch('goToPreviousProblem'); |
|
245 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
215 | 246 |
this.handleProblemDetail(this.currentLearningId); |
216 | 247 |
this.goToPage(this.problemType); |
217 | 248 |
} |
... | ... | @@ -282,12 +313,12 @@ |
282 | 313 |
}, |
283 | 314 |
isPreviousButtonDisabled() { |
284 | 315 |
return this.currentProblemIndex === 0; |
285 |
- } |
|
316 |
+ }, |
|
286 | 317 |
}, |
287 | 318 |
created() { |
288 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
289 |
- console.log('Current Label:', this.currentLabel); |
|
290 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
319 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
320 |
+ console.log("Current Label:", this.currentLabel); |
|
321 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
291 | 322 |
this.currentIndex = this.currentProblemIndex; |
292 | 323 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
293 | 324 |
|
... | ... | @@ -295,7 +326,7 @@ |
295 | 326 |
}, |
296 | 327 |
components: {}, |
297 | 328 |
mounted() { |
298 |
- this.getProblem() |
|
329 |
+ this.getProblem(); |
|
299 | 330 |
this.initializeAnswer(); |
300 | 331 |
}, |
301 | 332 |
}; |
--- client/views/pages/main/Chapter/Chapter3_13.vue
+++ client/views/pages/main/Chapter/Chapter3_13.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,13 +12,19 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" |
|
14 |
- :class="{ active: currentIndex === 0 }" /> |
|
15 |
+ <div class="pre-btn" @click="previousProblem()"> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
15 | 21 |
</div> |
16 | 22 |
<div class="content title-box"> |
17 | 23 |
<p class="title mt25 title-bg">step3</p> |
18 | 24 |
<div class="flex align-center mb30"> |
19 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
20 | 28 |
<!-- <button><img src="../../../../resources/img/btn10_s.png" alt=""> |
21 | 29 |
</button> --> |
22 | 30 |
</div> |
... | ... | @@ -36,47 +44,78 @@ |
36 | 44 |
<div class="flex justify-center"> |
37 | 45 |
<div class="flex justify-between align-center" style="width: 50%"> |
38 | 46 |
<!-- SVG Container for Drawing Lines --> |
39 |
- <svg class="line-container" xmlns="http://www.w3.org/2000/svg" |
|
40 |
- :style="{ width: svgWidth, height: svgHeight }"> |
|
41 |
- <line v-for="(pair, index) in pairs" :key="'line-' + index" :x1="pair.leftPos.x" :y1="pair.leftPos.y" |
|
42 |
- :x2="pair.rightPos.x" :y2="pair.rightPos.y" stroke="blue" stroke-width="2" /> |
|
47 |
+ <svg |
|
48 |
+ class="line-container" |
|
49 |
+ xmlns="http://www.w3.org/2000/svg" |
|
50 |
+ :style="{ width: svgWidth, height: svgHeight }" |
|
51 |
+ > |
|
52 |
+ <line |
|
53 |
+ v-for="(pair, index) in pairs" |
|
54 |
+ :key="'line-' + index" |
|
55 |
+ :x1="pair.leftPos.x" |
|
56 |
+ :y1="pair.leftPos.y" |
|
57 |
+ :x2="pair.rightPos.x" |
|
58 |
+ :y2="pair.rightPos.y" |
|
59 |
+ stroke="blue" |
|
60 |
+ stroke-width="2" |
|
61 |
+ /> |
|
43 | 62 |
</svg> |
44 | 63 |
|
45 | 64 |
<div class="pickGroup left"> |
46 | 65 |
<div> |
47 |
- <article class="flex align-center justify-between mb20" style="gap: 60px" |
|
48 |
- v-for="(image, index) in images" :key="'left-' + index"> |
|
66 |
+ <article |
|
67 |
+ class="flex align-center justify-between mb20" |
|
68 |
+ style="gap: 60px" |
|
69 |
+ v-for="(image, index) in images" |
|
70 |
+ :key="'left-' + index" |
|
71 |
+ > |
|
49 | 72 |
<img :src="image.src" :alt="image.alt" /> |
50 | 73 |
<div> |
51 |
- <button class="blue-c" @click="selectLeft(index, $event)"></button> |
|
74 |
+ <button |
|
75 |
+ class="blue-c" |
|
76 |
+ @click="selectLeft(index, $event)" |
|
77 |
+ ></button> |
|
52 | 78 |
</div> |
53 | 79 |
</article> |
54 | 80 |
</div> |
55 | 81 |
</div> |
56 | 82 |
|
57 | 83 |
<div class="pickGroup right"> |
58 |
- <article v-for="(word, index) in problemDetail" :key="index" |
|
59 |
- class="flex align-center justify-start mb20" style="gap: 30px"> |
|
60 |
- <button class="blue-c" @click="selectRight(index, $event)"></button> |
|
84 |
+ <article |
|
85 |
+ v-for="(word, index) in problemDetail" |
|
86 |
+ :key="index" |
|
87 |
+ class="flex align-center justify-start mb20" |
|
88 |
+ style="gap: 30px" |
|
89 |
+ > |
|
90 |
+ <button |
|
91 |
+ class="blue-c" |
|
92 |
+ @click="selectRight(index, $event)" |
|
93 |
+ ></button> |
|
61 | 94 |
<p class="word">{{ word.prblmDtlExpln }}</p> |
62 | 95 |
</article> |
63 | 96 |
</div> |
64 | 97 |
</div> |
65 | 98 |
</div> |
66 | 99 |
</div> |
67 |
- <button class="submit-button" @click="handleSubmit()" |
|
68 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
69 |
- <button class="submit-button" @click="nextProblem()" |
|
70 |
- v-else>다음 문제로</button> |
|
100 |
+ <button |
|
101 |
+ class="submit-button" |
|
102 |
+ @click="handleSubmit()" |
|
103 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
104 |
+ > |
|
105 |
+ 제출하기 |
|
106 |
+ </button> |
|
107 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
108 |
+ 다음 문제로 |
|
109 |
+ </button> |
|
71 | 110 |
</div> |
72 |
- <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" /> |
|
111 |
+ <div class="next-btn" @click="nextProblem()"> |
|
112 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
73 | 113 |
</div> |
74 | 114 |
</div> |
75 | 115 |
</div> |
76 | 116 |
</template> |
77 | 117 |
|
78 | 118 |
<script> |
79 |
- |
|
80 | 119 |
import axios from "axios"; |
81 | 120 |
export default { |
82 | 121 |
data() { |
... | ... | @@ -152,29 +191,26 @@ |
152 | 191 |
}; |
153 | 192 |
}, |
154 | 193 |
handleSubmit() { |
155 |
- |
|
156 | 194 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
157 | 195 |
if (userConfirmed) { |
158 |
- |
|
159 | 196 |
const problemData = { |
160 | 197 |
prblmInfo: this.currentLearningId, |
161 | 198 |
prblmNumber: this.currentProblemIndex, |
162 |
- prblmAns: this.selectedButton |
|
199 |
+ prblmAns: this.selectedButton, |
|
163 | 200 |
}; |
164 | 201 |
|
165 | 202 |
const answerData = { |
166 | 203 |
prblmId: this.currentLearningId.prblm_id, |
167 | 204 |
prblmAns: this.selectedButton, |
168 | 205 |
stdId: this.$store.getters.getStdId, |
169 |
- prblmLogAnsCnt: 1 |
|
206 |
+ prblmLogAnsCnt: 1, |
|
170 | 207 |
}; |
171 | 208 |
|
172 |
- this.$store.dispatch('saveProblemData', problemData); |
|
173 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
209 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
210 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
174 | 211 |
|
175 | 212 |
console.log(this.$store.getters.getAllProblems); |
176 | 213 |
console.log(this.$store.getters.getAllAnswers); |
177 |
- |
|
178 | 214 |
|
179 | 215 |
axios({ |
180 | 216 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -186,7 +222,7 @@ |
186 | 222 |
}) |
187 | 223 |
.then(function (res) { |
188 | 224 |
console.log("problem - response : ", res.data); |
189 |
- this.goToPage('Chapter4') |
|
225 |
+ this.goToPage("Chapter4"); |
|
190 | 226 |
}) |
191 | 227 |
.catch(function (error) { |
192 | 228 |
console.log("problem - error : ", error); |
... | ... | @@ -228,27 +264,30 @@ |
228 | 264 |
const problemData = { |
229 | 265 |
prblmInfo: this.currentLearningId, |
230 | 266 |
prblmNumber: this.currentProblemIndex, |
231 |
- prblmAns: this.selectedButton |
|
232 |
- } |
|
267 |
+ prblmAns: this.selectedButton, |
|
268 |
+ }; |
|
233 | 269 |
const answerData = { |
234 | 270 |
prblmId: this.currentLearningId.prblm_id, |
235 | 271 |
prblmAns: this.selectedButton, |
236 | 272 |
stdId: this.$store.getters.getStdId, |
237 |
- prblmLogAnsCnt: 1 |
|
238 |
- } |
|
239 |
- this.$store.dispatch('saveProblemData', problemData); |
|
240 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
241 |
- console.log(this.$store.getters.getAllProblems) |
|
242 |
- console.log(this.$store.getters.getAllAnswers) |
|
243 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
244 |
- this.$store.dispatch('goToNextProblem'); |
|
273 |
+ prblmLogAnsCnt: 1, |
|
274 |
+ }; |
|
275 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
276 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
277 |
+ console.log(this.$store.getters.getAllProblems); |
|
278 |
+ console.log(this.$store.getters.getAllAnswers); |
|
279 |
+ if ( |
|
280 |
+ this.currentProblemIndex < |
|
281 |
+ this.$store.state.currentLearningIds.length - 1 |
|
282 |
+ ) { |
|
283 |
+ this.$store.dispatch("goToNextProblem"); |
|
245 | 284 |
this.handleProblemDetail(this.currentLearningId); |
246 | 285 |
this.goToPage(this.problemType); |
247 | 286 |
} |
248 | 287 |
}, |
249 | 288 |
previousProblem() { |
250 | 289 |
if (this.currentProblemIndex > 0) { |
251 |
- this.$store.dispatch('goToPreviousProblem'); |
|
290 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
252 | 291 |
this.handleProblemDetail(this.currentLearningId); |
253 | 292 |
this.goToPage(this.problemType); |
254 | 293 |
} |
... | ... | @@ -319,12 +358,12 @@ |
319 | 358 |
}, |
320 | 359 |
isPreviousButtonDisabled() { |
321 | 360 |
return this.currentProblemIndex === 0; |
322 |
- } |
|
361 |
+ }, |
|
323 | 362 |
}, |
324 | 363 |
created() { |
325 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
326 |
- console.log('Current Label:', this.currentLabel); |
|
327 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
364 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
365 |
+ console.log("Current Label:", this.currentLabel); |
|
366 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
328 | 367 |
this.currentIndex = this.currentProblemIndex; |
329 | 368 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
330 | 369 |
|
... | ... | @@ -332,7 +371,7 @@ |
332 | 371 |
}, |
333 | 372 |
components: {}, |
334 | 373 |
mounted() { |
335 |
- this.getProblem() |
|
374 |
+ this.getProblem(); |
|
336 | 375 |
this.updateSVGSize(); |
337 | 376 |
window.addEventListener("resize", this.updateSVGSize); |
338 | 377 |
}, |
--- client/views/pages/main/Chapter/Chapter3_14.vue
+++ client/views/pages/main/Chapter/Chapter3_14.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,13 +12,19 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" |
|
14 |
- :class="{ active: currentIndex === 0 }" /> |
|
15 |
+ <div class="pre-btn" @click="previousProblem()"> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
15 | 21 |
</div> |
16 | 22 |
<div class="content title-box"> |
17 | 23 |
<p class="title mt25 title-bg">step3</p> |
18 | 24 |
<div class="flex align-center mb30"> |
19 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
20 | 28 |
<!-- <button><img src="../../../../resources/img/btn10_s.png" alt=""> |
21 | 29 |
</button> --> |
22 | 30 |
</div> |
... | ... | @@ -33,21 +41,39 @@ |
33 | 41 |
</div> |
34 | 42 |
</div> |
35 | 43 |
</div> |
36 |
- <div class="imgGroup"><img src="../../../../resources/img/img124_63s.png" alt="" /></div> |
|
44 |
+ <div class="imgGroup"> |
|
45 |
+ <img src="../../../../resources/img/img124_63s.png" alt="" /> |
|
46 |
+ </div> |
|
37 | 47 |
|
38 | 48 |
<div class="dropGroup flex align-center justify-center mt30"> |
39 | 49 |
<div class="mt50"> |
40 |
- <input class="yellow-bd" v-model="answer" type="text" placeholder="답을 입력하세요." style="width: 50rem" /> |
|
50 |
+ <input |
|
51 |
+ class="yellow-bd" |
|
52 |
+ v-model="answer" |
|
53 |
+ type="text" |
|
54 |
+ placeholder="답을 입력하세요." |
|
55 |
+ style="width: 50rem" |
|
56 |
+ /> |
|
41 | 57 |
</div> |
42 | 58 |
</div> |
43 | 59 |
</div> |
44 |
- <button class="submit-button" @click="handleSubmit()" |
|
45 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
46 |
- <button class="submit-button" @click="nextProblem()" |
|
47 |
- v-else>다음 문제로</button> |
|
60 |
+ <button |
|
61 |
+ class="submit-button" |
|
62 |
+ @click="handleSubmit()" |
|
63 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
64 |
+ > |
|
65 |
+ 제출하기 |
|
66 |
+ </button> |
|
67 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
68 |
+ 다음 문제로 |
|
69 |
+ </button> |
|
48 | 70 |
</div> |
49 |
- <div class="next-btn" @click="nextProblem(answer)"><img src="../../../../resources/img/right.png" alt="" |
|
50 |
- :class="{ active: currentIndex === learningIdsLength - 1 }" /> |
|
71 |
+ <div class="next-btn" @click="nextProblem(answer)"> |
|
72 |
+ <img |
|
73 |
+ src="../../../../resources/img/right.png" |
|
74 |
+ alt="" |
|
75 |
+ :class="{ active: currentIndex === learningIdsLength - 1 }" |
|
76 |
+ /> |
|
51 | 77 |
</div> |
52 | 78 |
</div> |
53 | 79 |
</div> |
... | ... | @@ -85,29 +111,26 @@ |
85 | 111 |
}, 1000); |
86 | 112 |
}, |
87 | 113 |
handleSubmit() { |
88 |
- |
|
89 | 114 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
90 | 115 |
if (userConfirmed) { |
91 |
- |
|
92 | 116 |
const problemData = { |
93 | 117 |
prblmInfo: this.currentLearningId, |
94 | 118 |
prblmNumber: this.currentProblemIndex, |
95 |
- prblmAns: this.selectedButton |
|
119 |
+ prblmAns: this.selectedButton, |
|
96 | 120 |
}; |
97 | 121 |
|
98 | 122 |
const answerData = { |
99 | 123 |
prblmId: this.currentLearningId.prblm_id, |
100 | 124 |
prblmAns: this.selectedButton, |
101 | 125 |
stdId: this.$store.getters.getStdId, |
102 |
- prblmLogAnsCnt: 1 |
|
126 |
+ prblmLogAnsCnt: 1, |
|
103 | 127 |
}; |
104 | 128 |
|
105 |
- this.$store.dispatch('saveProblemData', problemData); |
|
106 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
129 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
130 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
107 | 131 |
|
108 | 132 |
console.log(this.$store.getters.getAllProblems); |
109 | 133 |
console.log(this.$store.getters.getAllAnswers); |
110 |
- |
|
111 | 134 |
|
112 | 135 |
axios({ |
113 | 136 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -119,7 +142,7 @@ |
119 | 142 |
}) |
120 | 143 |
.then(function (res) { |
121 | 144 |
console.log("problem - response : ", res.data); |
122 |
- this.goToPage('Chapter4') |
|
145 |
+ this.goToPage("Chapter4"); |
|
123 | 146 |
}) |
124 | 147 |
.catch(function (error) { |
125 | 148 |
console.log("problem - error : ", error); |
... | ... | @@ -155,27 +178,30 @@ |
155 | 178 |
const problemData = { |
156 | 179 |
prblmInfo: this.currentLearningId, |
157 | 180 |
prblmNumber: this.currentProblemIndex, |
158 |
- prblmAns: answer |
|
159 |
- } |
|
181 |
+ prblmAns: answer, |
|
182 |
+ }; |
|
160 | 183 |
const answerData = { |
161 | 184 |
prblmId: this.currentLearningId.prblm_id, |
162 | 185 |
prblmAns: answer, |
163 | 186 |
stdId: this.$store.getters.getStdId, |
164 |
- prblmLogAnsCnt: 1 |
|
165 |
- } |
|
166 |
- this.$store.dispatch('saveProblemData', problemData); |
|
167 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
168 |
- console.log(this.$store.getters.getAllProblems) |
|
169 |
- console.log(this.$store.getters.getAllAnswers) |
|
170 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
171 |
- this.$store.dispatch('goToNextProblem'); |
|
187 |
+ prblmLogAnsCnt: 1, |
|
188 |
+ }; |
|
189 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
190 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
191 |
+ console.log(this.$store.getters.getAllProblems); |
|
192 |
+ console.log(this.$store.getters.getAllAnswers); |
|
193 |
+ if ( |
|
194 |
+ this.currentProblemIndex < |
|
195 |
+ this.$store.state.currentLearningIds.length - 1 |
|
196 |
+ ) { |
|
197 |
+ this.$store.dispatch("goToNextProblem"); |
|
172 | 198 |
this.handleProblemDetail(this.currentLearningId); |
173 | 199 |
this.goToPage(this.problemType); |
174 | 200 |
} |
175 | 201 |
}, |
176 | 202 |
previousProblem() { |
177 | 203 |
if (this.currentProblemIndex > 0) { |
178 |
- this.$store.dispatch('goToPreviousProblem'); |
|
204 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
179 | 205 |
this.handleProblemDetail(this.currentLearningId); |
180 | 206 |
this.goToPage(this.problemType); |
181 | 207 |
} |
... | ... | @@ -249,12 +275,12 @@ |
249 | 275 |
}, |
250 | 276 |
isPreviousButtonDisabled() { |
251 | 277 |
return this.currentProblemIndex === 0; |
252 |
- } |
|
278 |
+ }, |
|
253 | 279 |
}, |
254 | 280 |
created() { |
255 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
256 |
- console.log('Current Label:', this.currentLabel); |
|
257 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
281 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
282 |
+ console.log("Current Label:", this.currentLabel); |
|
283 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
258 | 284 |
this.currentIndex = this.currentProblemIndex; |
259 | 285 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
260 | 286 |
|
... | ... | @@ -262,7 +288,7 @@ |
262 | 288 |
}, |
263 | 289 |
components: {}, |
264 | 290 |
mounted() { |
265 |
- this.getProblem() |
|
291 |
+ this.getProblem(); |
|
266 | 292 |
}, |
267 | 293 |
}; |
268 | 294 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_15.vue
+++ client/views/pages/main/Chapter/Chapter3_15.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,14 +12,22 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" |
|
14 |
- :class="{ active: currentIndex === 0 }" /> |
|
15 |
+ <div class="pre-btn" @click="previousProblem()"> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
15 | 21 |
</div> |
16 | 22 |
<div class="content title-box"> |
17 | 23 |
<p class="title mt25 title-bg">step3</p> |
18 | 24 |
<div class="flex align-center mb30"> |
19 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
20 |
- <button><img src="../../../../resources/img/btn10_s.png" alt="" /></button> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
28 |
+ <button> |
|
29 |
+ <img src="../../../../resources/img/btn10_s.png" alt="" /> |
|
30 |
+ </button> |
|
21 | 31 |
</div> |
22 | 32 |
|
23 | 33 |
<div class="text-ct"> |
... | ... | @@ -32,19 +42,29 @@ |
32 | 42 |
</div> |
33 | 43 |
</div> |
34 | 44 |
</div> |
35 |
- <div class="imgGroup"><img src="../../../../resources/img/img125_64s.png" alt="" /></div> |
|
45 |
+ <div class="imgGroup"> |
|
46 |
+ <img src="../../../../resources/img/img125_64s.png" alt="" /> |
|
47 |
+ </div> |
|
36 | 48 |
|
37 | 49 |
<div class="dropGroup flex align-center justify-center mt70"> |
38 | 50 |
<img src="../../../../resources/img/btn18_64s_normal.png" alt="" /> |
39 | 51 |
</div> |
40 | 52 |
</div> |
41 | 53 |
|
42 |
- <button class="submit-button" @click="handleSubmit()" |
|
43 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
44 |
- <button class="submit-button" @click="nextProblem()" |
|
45 |
- v-else>다음 문제로</button> |
|
54 |
+ <button |
|
55 |
+ class="submit-button" |
|
56 |
+ @click="handleSubmit()" |
|
57 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
58 |
+ > |
|
59 |
+ 제출하기 |
|
60 |
+ </button> |
|
61 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
62 |
+ 다음 문제로 |
|
63 |
+ </button> |
|
46 | 64 |
</div> |
47 |
- <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" /></div> |
|
65 |
+ <div class="next-btn" @click="nextProblem()"> |
|
66 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
67 |
+ </div> |
|
48 | 68 |
</div> |
49 | 69 |
</div> |
50 | 70 |
</template> |
... | ... | @@ -80,29 +100,26 @@ |
80 | 100 |
}, |
81 | 101 |
|
82 | 102 |
handleSubmit() { |
83 |
- |
|
84 | 103 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
85 | 104 |
if (userConfirmed) { |
86 |
- |
|
87 | 105 |
const problemData = { |
88 | 106 |
prblmInfo: this.currentLearningId, |
89 | 107 |
prblmNumber: this.currentProblemIndex, |
90 |
- prblmAns: this.selectedButton |
|
108 |
+ prblmAns: this.selectedButton, |
|
91 | 109 |
}; |
92 | 110 |
|
93 | 111 |
const answerData = { |
94 | 112 |
prblmId: this.currentLearningId.prblm_id, |
95 | 113 |
prblmAns: this.selectedButton, |
96 | 114 |
stdId: this.$store.getters.getStdId, |
97 |
- prblmLogAnsCnt: 1 |
|
115 |
+ prblmLogAnsCnt: 1, |
|
98 | 116 |
}; |
99 | 117 |
|
100 |
- this.$store.dispatch('saveProblemData', problemData); |
|
101 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
118 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
119 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
102 | 120 |
|
103 | 121 |
console.log(this.$store.getters.getAllProblems); |
104 | 122 |
console.log(this.$store.getters.getAllAnswers); |
105 |
- |
|
106 | 123 |
|
107 | 124 |
axios({ |
108 | 125 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -114,7 +131,7 @@ |
114 | 131 |
}) |
115 | 132 |
.then(function (res) { |
116 | 133 |
console.log("problem - response : ", res.data); |
117 |
- this.goToPage('Chapter4') |
|
134 |
+ this.goToPage("Chapter4"); |
|
118 | 135 |
}) |
119 | 136 |
.catch(function (error) { |
120 | 137 |
console.log("problem - error : ", error); |
... | ... | @@ -149,27 +166,30 @@ |
149 | 166 |
const problemData = { |
150 | 167 |
prblmInfo: this.currentLearningId, |
151 | 168 |
prblmNumber: this.currentProblemIndex, |
152 |
- prblmAns: this.selectedButton |
|
153 |
- } |
|
169 |
+ prblmAns: this.selectedButton, |
|
170 |
+ }; |
|
154 | 171 |
const answerData = { |
155 | 172 |
prblmId: this.currentLearningId.prblm_id, |
156 | 173 |
prblmAns: this.selectedButton, |
157 | 174 |
stdId: this.$store.getters.getStdId, |
158 |
- prblmLogAnsCnt: 1 |
|
159 |
- } |
|
160 |
- this.$store.dispatch('saveProblemData', problemData); |
|
161 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
162 |
- console.log(this.$store.getters.getAllProblems) |
|
163 |
- console.log(this.$store.getters.getAllAnswers) |
|
164 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
165 |
- this.$store.dispatch('goToNextProblem'); |
|
175 |
+ prblmLogAnsCnt: 1, |
|
176 |
+ }; |
|
177 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
178 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
179 |
+ console.log(this.$store.getters.getAllProblems); |
|
180 |
+ console.log(this.$store.getters.getAllAnswers); |
|
181 |
+ if ( |
|
182 |
+ this.currentProblemIndex < |
|
183 |
+ this.$store.state.currentLearningIds.length - 1 |
|
184 |
+ ) { |
|
185 |
+ this.$store.dispatch("goToNextProblem"); |
|
166 | 186 |
this.handleProblemDetail(this.currentLearningId); |
167 | 187 |
this.goToPage(this.problemType); |
168 | 188 |
} |
169 | 189 |
}, |
170 | 190 |
previousProblem() { |
171 | 191 |
if (this.currentProblemIndex > 0) { |
172 |
- this.$store.dispatch('goToPreviousProblem'); |
|
192 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
173 | 193 |
this.handleProblemDetail(this.currentLearningId); |
174 | 194 |
this.goToPage(this.problemType); |
175 | 195 |
} |
... | ... | @@ -240,12 +260,12 @@ |
240 | 260 |
}, |
241 | 261 |
isPreviousButtonDisabled() { |
242 | 262 |
return this.currentProblemIndex === 0; |
243 |
- } |
|
263 |
+ }, |
|
244 | 264 |
}, |
245 | 265 |
created() { |
246 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
247 |
- console.log('Current Label:', this.currentLabel); |
|
248 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
266 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
267 |
+ console.log("Current Label:", this.currentLabel); |
|
268 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
249 | 269 |
this.currentIndex = this.currentProblemIndex; |
250 | 270 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
251 | 271 |
|
... | ... | @@ -253,7 +273,7 @@ |
253 | 273 |
}, |
254 | 274 |
components: {}, |
255 | 275 |
mounted() { |
256 |
- this.getProblem() |
|
276 |
+ this.getProblem(); |
|
257 | 277 |
}, |
258 | 278 |
}; |
259 | 279 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_16.vue
+++ client/views/pages/main/Chapter/Chapter3_16.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,7 +12,9 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="goToPage('Chapter4')"><img src="../../../../resources/img/left.png" alt=""></div> |
|
15 |
+ <div class="pre-btn" @click="goToPage('Chapter4')"> |
|
16 |
+ <img src="../../../../resources/img/left.png" alt="" /> |
|
17 |
+ </div> |
|
14 | 18 |
<div class="content title-box"> |
15 | 19 |
<p class="title mt25 title-bg">중간 평가 설문 조사</p> |
16 | 20 |
<div class="flex align-center mb30"> |
... | ... | @@ -19,13 +23,13 @@ |
19 | 23 |
</button> --> |
20 | 24 |
</div> |
21 | 25 |
|
22 |
- <div class="text-ct "> |
|
26 |
+ <div class="text-ct"> |
|
23 | 27 |
<div class="table-wrap myplan"> |
24 | 28 |
<table> |
25 | 29 |
<colgroup> |
26 |
- <col style="width: 5%;"> |
|
27 |
- <col style="width: 70%;"> |
|
28 |
- <col style="width: 25%;"> |
|
30 |
+ <col style="width: 5%" /> |
|
31 |
+ <col style="width: 70%" /> |
|
32 |
+ <col style="width: 25%" /> |
|
29 | 33 |
</colgroup> |
30 | 34 |
<tr> |
31 | 35 |
<td> |
... | ... | @@ -35,22 +39,46 @@ |
35 | 39 |
<p class="title1">2교시</p> |
36 | 40 |
</td> |
37 | 41 |
<td> |
38 |
- <div class="flex justify-center" style="gap: 60px;"> |
|
42 |
+ <div class="flex justify-center" style="gap: 60px"> |
|
39 | 43 |
<article> |
40 | 44 |
<div class="flex align-center"> |
41 | 45 |
<p class="title1 mr20">네</p> |
42 |
- <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"> |
|
43 |
- <img :src="item.imgSrc1"> |
|
44 |
- <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }"> |
|
46 |
+ <button |
|
47 |
+ class="popTxt" |
|
48 |
+ v-for="(item, index) in items" |
|
49 |
+ :key="index" |
|
50 |
+ @click="toggleImage(index)" |
|
51 |
+ > |
|
52 |
+ <img :src="item.imgSrc1" /> |
|
53 |
+ <img |
|
54 |
+ :src="item.imgSrc2" |
|
55 |
+ :style="{ |
|
56 |
+ display: item.isSecondImageVisible |
|
57 |
+ ? 'block' |
|
58 |
+ : 'none', |
|
59 |
+ }" |
|
60 |
+ /> |
|
45 | 61 |
</button> |
46 | 62 |
</div> |
47 | 63 |
</article> |
48 | 64 |
<article> |
49 | 65 |
<div class="flex align-center"> |
50 | 66 |
<p class="title1 mr20">아니요</p> |
51 |
- <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"> |
|
52 |
- <img :src="item.imgSrc1"> |
|
53 |
- <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }"> |
|
67 |
+ <button |
|
68 |
+ class="popTxt" |
|
69 |
+ v-for="(item, index) in items" |
|
70 |
+ :key="index" |
|
71 |
+ @click="toggleImage(index)" |
|
72 |
+ > |
|
73 |
+ <img :src="item.imgSrc1" /> |
|
74 |
+ <img |
|
75 |
+ :src="item.imgSrc2" |
|
76 |
+ :style="{ |
|
77 |
+ display: item.isSecondImageVisible |
|
78 |
+ ? 'block' |
|
79 |
+ : 'none', |
|
80 |
+ }" |
|
81 |
+ /> |
|
54 | 82 |
</button> |
55 | 83 |
</div> |
56 | 84 |
</article> |
... | ... | @@ -65,22 +93,46 @@ |
65 | 93 |
<p class="title1">2교시</p> |
66 | 94 |
</td> |
67 | 95 |
<td> |
68 |
- <div class="flex justify-center" style="gap: 60px;"> |
|
96 |
+ <div class="flex justify-center" style="gap: 60px"> |
|
69 | 97 |
<article> |
70 | 98 |
<div class="flex align-center"> |
71 | 99 |
<p class="title1 mr20">네</p> |
72 |
- <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"> |
|
73 |
- <img :src="item.imgSrc1"> |
|
74 |
- <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }"> |
|
100 |
+ <button |
|
101 |
+ class="popTxt" |
|
102 |
+ v-for="(item, index) in items" |
|
103 |
+ :key="index" |
|
104 |
+ @click="toggleImage(index)" |
|
105 |
+ > |
|
106 |
+ <img :src="item.imgSrc1" /> |
|
107 |
+ <img |
|
108 |
+ :src="item.imgSrc2" |
|
109 |
+ :style="{ |
|
110 |
+ display: item.isSecondImageVisible |
|
111 |
+ ? 'block' |
|
112 |
+ : 'none', |
|
113 |
+ }" |
|
114 |
+ /> |
|
75 | 115 |
</button> |
76 | 116 |
</div> |
77 | 117 |
</article> |
78 | 118 |
<article> |
79 | 119 |
<div class="flex align-center"> |
80 | 120 |
<p class="title1 mr20">아니요</p> |
81 |
- <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"> |
|
82 |
- <img :src="item.imgSrc1"> |
|
83 |
- <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }"> |
|
121 |
+ <button |
|
122 |
+ class="popTxt" |
|
123 |
+ v-for="(item, index) in items" |
|
124 |
+ :key="index" |
|
125 |
+ @click="toggleImage(index)" |
|
126 |
+ > |
|
127 |
+ <img :src="item.imgSrc1" /> |
|
128 |
+ <img |
|
129 |
+ :src="item.imgSrc2" |
|
130 |
+ :style="{ |
|
131 |
+ display: item.isSecondImageVisible |
|
132 |
+ ? 'block' |
|
133 |
+ : 'none', |
|
134 |
+ }" |
|
135 |
+ /> |
|
84 | 136 |
</button> |
85 | 137 |
</div> |
86 | 138 |
</article> |
... | ... | @@ -94,10 +146,11 @@ |
94 | 146 |
</button> |
95 | 147 |
</div> |
96 | 148 |
</div> |
97 |
- |
|
98 | 149 |
</div> |
99 | 150 |
</div> |
100 |
- <div class="next-btn" @click="goToPage('Dashboard')"><img src="../../../../resources/img/right.png" alt=""></div> |
|
151 |
+ <div class="next-btn" @click="goToPage('Dashboard')"> |
|
152 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
153 |
+ </div> |
|
101 | 154 |
</div> |
102 | 155 |
</div> |
103 | 156 |
</template> |
... | ... | @@ -107,19 +160,23 @@ |
107 | 160 |
data() { |
108 | 161 |
return { |
109 | 162 |
items: [ |
110 |
- { imgSrc1: 'client/resources/img/btn13_42s.png', imgSrc2: 'client/resources/img/btn14_50s_click.png', isSecondImageVisible: false }, |
|
111 |
- |
|
163 |
+ { |
|
164 |
+ imgSrc1: "client/resources/img/btn13_42s.png", |
|
165 |
+ imgSrc2: "client/resources/img/btn14_50s_click.png", |
|
166 |
+ isSecondImageVisible: false, |
|
167 |
+ }, |
|
112 | 168 |
], |
113 |
- timer: '00', |
|
169 |
+ timer: "00", |
|
114 | 170 |
showButton1: false, |
115 | 171 |
showButton2: false, |
116 | 172 |
showButton3: false, |
117 | 173 |
showButton4: false, |
118 |
- } |
|
174 |
+ }; |
|
119 | 175 |
}, |
120 | 176 |
methods: { |
121 | 177 |
toggleImage(index) { |
122 |
- this.items[index].isSecondImageVisible = !this.items[index].isSecondImageVisible; |
|
178 |
+ this.items[index].isSecondImageVisible = |
|
179 |
+ !this.items[index].isSecondImageVisible; |
|
123 | 180 |
}, |
124 | 181 |
goToPage(page) { |
125 | 182 |
this.$router.push({ name: page }); |
... | ... | @@ -160,20 +217,13 @@ |
160 | 217 |
clearInterval(this.intervalId); |
161 | 218 |
} |
162 | 219 |
}, 1000); |
163 |
- } |
|
220 |
+ }, |
|
164 | 221 |
}, |
165 |
- watch: { |
|
166 |
- |
|
167 |
- }, |
|
168 |
- computed: { |
|
169 |
- |
|
170 |
- }, |
|
171 |
- components: { |
|
172 |
- }, |
|
173 |
- mounted() { |
|
174 |
- |
|
175 |
- } |
|
176 |
-} |
|
222 |
+ watch: {}, |
|
223 |
+ computed: {}, |
|
224 |
+ components: {}, |
|
225 |
+ mounted() {}, |
|
226 |
+}; |
|
177 | 227 |
</script> |
178 | 228 |
<style scoped> |
179 | 229 |
.textbox { |
... | ... | @@ -202,4 +252,4 @@ |
202 | 252 |
width: 150rem; |
203 | 253 |
margin: 0 auto; |
204 | 254 |
} |
205 |
-</style>(파일 끝에 줄바꿈 문자 없음) |
|
255 |
+</style> |
--- client/views/pages/main/Chapter/Chapter3_2.vue
+++ client/views/pages/main/Chapter/Chapter3_2.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -11,12 +13,18 @@ |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 | 15 |
<div class="pre-btn" @click="previousProblem()"> |
14 |
- <img src="../../../../resources/img/left.png" alt="" :class="{ active: currentIndex === 0 }" /> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
15 | 21 |
</div> |
16 | 22 |
<div class="content title-box"> |
17 | 23 |
<p class="title mt25 title-bg">step3.</p> |
18 | 24 |
<div class="flex align-center mb30"> |
19 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
20 | 28 |
<!-- <button><img src="../../../../resources/img/btn10_s.png" alt=""> |
21 | 29 |
</button> --> |
22 | 30 |
</div> |
... | ... | @@ -39,16 +47,25 @@ |
39 | 47 |
<div class="flex align-center justify-center"> |
40 | 48 |
<div class="inputbox mt30">go</div> |
41 | 49 |
</div> |
42 |
- <div class="pickGroup mt40 flex align-center justify-center" style="gap: 100px"> |
|
50 |
+ <div |
|
51 |
+ class="pickGroup mt40 flex align-center justify-center" |
|
52 |
+ style="gap: 100px" |
|
53 |
+ > |
|
43 | 54 |
<p>i</p> |
44 |
- <article style="gap: 60px; bottom: 159px; left: 242px" @click="handleClick(1)"> |
|
55 |
+ <article |
|
56 |
+ style="gap: 60px; bottom: 159px; left: 242px" |
|
57 |
+ @click="handleClick(1)" |
|
58 |
+ > |
|
45 | 59 |
<button> |
46 | 60 |
<img src="../../../../resources/img/img136_71s.png" alt="" /> |
47 | 61 |
<p :class="{ active: selectedButton === 1 }">1</p> |
48 | 62 |
</button> |
49 | 63 |
</article> |
50 | 64 |
<p>to</p> |
51 |
- <article style="gap: 60px; bottom: 159px; right: 559px" @click="handleClick(2)"> |
|
65 |
+ <article |
|
66 |
+ style="gap: 60px; bottom: 159px; right: 559px" |
|
67 |
+ @click="handleClick(2)" |
|
68 |
+ > |
|
52 | 69 |
<button> |
53 | 70 |
<img src="../../../../resources/img/img136_71s.png" alt="" /> |
54 | 71 |
<p :class="{ active: selectedButton === 2 }">2</p> |
... | ... | @@ -57,12 +74,20 @@ |
57 | 74 |
<p>bed</p> |
58 | 75 |
</div> |
59 | 76 |
</div> |
60 |
- <button class="submit-button" @click="handleSubmit()" |
|
61 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
62 |
- <button class="submit-button" @click="nextProblem()" |
|
63 |
- v-else>다음 문제로</button> |
|
77 |
+ <button |
|
78 |
+ class="submit-button" |
|
79 |
+ @click="handleSubmit()" |
|
80 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
81 |
+ > |
|
82 |
+ 제출하기 |
|
83 |
+ </button> |
|
84 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
85 |
+ 다음 문제로 |
|
86 |
+ </button> |
|
64 | 87 |
</div> |
65 |
- <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" /></div> |
|
88 |
+ <div class="next-btn" @click="nextProblem()"> |
|
89 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
90 |
+ </div> |
|
66 | 91 |
</div> |
67 | 92 |
</div> |
68 | 93 |
</template> |
... | ... | @@ -105,29 +130,26 @@ |
105 | 130 |
}, |
106 | 131 |
// 제출하기 버튼 |
107 | 132 |
handleSubmit() { |
108 |
- |
|
109 | 133 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
110 | 134 |
if (userConfirmed) { |
111 |
- |
|
112 | 135 |
const problemData = { |
113 | 136 |
prblmInfo: this.currentLearningId, |
114 | 137 |
prblmNumber: this.currentProblemIndex, |
115 |
- prblmAns: this.selectedButton |
|
138 |
+ prblmAns: this.selectedButton, |
|
116 | 139 |
}; |
117 | 140 |
|
118 | 141 |
const answerData = { |
119 | 142 |
prblmId: this.currentLearningId.prblm_id, |
120 | 143 |
prblmAns: this.selectedButton, |
121 | 144 |
stdId: this.$store.getters.getStdId, |
122 |
- prblmLogAnsCnt: 1 |
|
145 |
+ prblmLogAnsCnt: 1, |
|
123 | 146 |
}; |
124 | 147 |
|
125 |
- this.$store.dispatch('saveProblemData', problemData); |
|
126 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
148 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
149 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
127 | 150 |
|
128 | 151 |
console.log(this.$store.getters.getAllProblems); |
129 | 152 |
console.log(this.$store.getters.getAllAnswers); |
130 |
- |
|
131 | 153 |
|
132 | 154 |
axios({ |
133 | 155 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -139,7 +161,7 @@ |
139 | 161 |
}) |
140 | 162 |
.then(function (res) { |
141 | 163 |
console.log("problem - response : ", res.data); |
142 |
- this.goToPage('Chapter4') |
|
164 |
+ this.goToPage("Chapter4"); |
|
143 | 165 |
}) |
144 | 166 |
.catch(function (error) { |
145 | 167 |
console.log("problem - error : ", error); |
... | ... | @@ -174,27 +196,30 @@ |
174 | 196 |
const problemData = { |
175 | 197 |
prblmInfo: this.currentLearningId, |
176 | 198 |
prblmNumber: this.currentProblemIndex, |
177 |
- prblmAns: this.selectedButton |
|
178 |
- } |
|
199 |
+ prblmAns: this.selectedButton, |
|
200 |
+ }; |
|
179 | 201 |
const answerData = { |
180 | 202 |
prblmId: this.currentLearningId.prblm_id, |
181 | 203 |
prblmAns: this.selectedButton, |
182 | 204 |
stdId: this.$store.getters.getStdId, |
183 |
- prblmLogAnsCnt: 1 |
|
184 |
- } |
|
185 |
- this.$store.dispatch('saveProblemData', problemData); |
|
186 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
187 |
- console.log(this.$store.getters.getAllProblems) |
|
188 |
- console.log(this.$store.getters.getAllAnswers) |
|
189 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
190 |
- this.$store.dispatch('goToNextProblem'); |
|
205 |
+ prblmLogAnsCnt: 1, |
|
206 |
+ }; |
|
207 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
208 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
209 |
+ console.log(this.$store.getters.getAllProblems); |
|
210 |
+ console.log(this.$store.getters.getAllAnswers); |
|
211 |
+ if ( |
|
212 |
+ this.currentProblemIndex < |
|
213 |
+ this.$store.state.currentLearningIds.length - 1 |
|
214 |
+ ) { |
|
215 |
+ this.$store.dispatch("goToNextProblem"); |
|
191 | 216 |
this.handleProblemDetail(this.currentLearningId); |
192 | 217 |
this.goToPage(this.problemType); |
193 | 218 |
} |
194 | 219 |
}, |
195 | 220 |
previousProblem() { |
196 | 221 |
if (this.currentProblemIndex > 0) { |
197 |
- this.$store.dispatch('goToPreviousProblem'); |
|
222 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
198 | 223 |
this.handleProblemDetail(this.currentLearningId); |
199 | 224 |
this.goToPage(this.problemType); |
200 | 225 |
} |
... | ... | @@ -265,12 +290,12 @@ |
265 | 290 |
}, |
266 | 291 |
isPreviousButtonDisabled() { |
267 | 292 |
return this.currentProblemIndex === 0; |
268 |
- } |
|
293 |
+ }, |
|
269 | 294 |
}, |
270 | 295 |
created() { |
271 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
272 |
- console.log('Current Label:', this.currentLabel); |
|
273 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
296 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
297 |
+ console.log("Current Label:", this.currentLabel); |
|
298 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
274 | 299 |
this.currentIndex = this.currentProblemIndex; |
275 | 300 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
276 | 301 |
|
... | ... | @@ -278,7 +303,7 @@ |
278 | 303 |
}, |
279 | 304 |
components: {}, |
280 | 305 |
mounted() { |
281 |
- this.getProblem() |
|
306 |
+ this.getProblem(); |
|
282 | 307 |
}, |
283 | 308 |
}; |
284 | 309 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_3.vue
+++ client/views/pages/main/Chapter/Chapter3_3.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,8 +12,13 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" |
|
14 |
- :class="{ active: currentIndex === 0 }" /></div> |
|
15 |
+ <div class="pre-btn" @click="previousProblem()"> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
21 |
+ </div> |
|
15 | 22 |
<div class="content title-box"> |
16 | 23 |
<p class="title mt25 title-bg">step3.</p> |
17 | 24 |
<div class="flex align-center mb30"> |
... | ... | @@ -30,27 +37,47 @@ |
30 | 37 |
</div> |
31 | 38 |
</div> |
32 | 39 |
</div> |
33 |
- <div class="pickGroup mt60 flex align-center justify-center" |
|
34 |
- style="flex-wrap: wrap; gap: 100px; margin-top: 7%; margin-left: 5%"> |
|
35 |
- <article v-for="(item, index) in problemDetail" :key="index" |
|
36 |
- style="flex: 1 0 calc(50% - 100px); bottom: 159px; left: 242px"> |
|
37 |
- <div class="flex align-center" @click="handleClick(item.prblmDtlExpln)"> |
|
40 |
+ <div |
|
41 |
+ class="pickGroup mt60 flex align-center justify-center" |
|
42 |
+ style="flex-wrap: wrap; gap: 100px; margin-top: 7%; margin-left: 5%" |
|
43 |
+ > |
|
44 |
+ <article |
|
45 |
+ v-for="(item, index) in problemDetail" |
|
46 |
+ :key="index" |
|
47 |
+ style="flex: 1 0 calc(50% - 100px); bottom: 159px; left: 242px" |
|
48 |
+ > |
|
49 |
+ <div |
|
50 |
+ class="flex align-center" |
|
51 |
+ @click="handleClick(item.prblmDtlExpln)" |
|
52 |
+ > |
|
38 | 53 |
<button> |
39 | 54 |
<img src="../../../../resources/img/img136_71s.png" alt="" /> |
40 |
- <p :class="{ active: selectedButton === item.prblmDtlExpln }">{{ index + 1 }}</p> |
|
55 |
+ <p :class="{ active: selectedButton === item.prblmDtlExpln }"> |
|
56 |
+ {{ index + 1 }} |
|
57 |
+ </p> |
|
41 | 58 |
</button> |
42 | 59 |
<p>{{ item.prblmDtlExpln }}</p> |
43 | 60 |
</div> |
44 | 61 |
</article> |
45 | 62 |
</div> |
46 | 63 |
</div> |
47 |
- <button class="submit-button" @click="handleSubmit()" |
|
48 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
49 |
- <button class="submit-button" @click="nextProblem()" |
|
50 |
- v-else>다음 문제로</button> |
|
64 |
+ <button |
|
65 |
+ class="submit-button" |
|
66 |
+ @click="handleSubmit()" |
|
67 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
68 |
+ > |
|
69 |
+ 제출하기 |
|
70 |
+ </button> |
|
71 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
72 |
+ 다음 문제로 |
|
73 |
+ </button> |
|
51 | 74 |
</div> |
52 |
- <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" |
|
53 |
- :class="{ active: currentIndex === learningIdsLength - 1 }" /> |
|
75 |
+ <div class="next-btn" @click="nextProblem()"> |
|
76 |
+ <img |
|
77 |
+ src="../../../../resources/img/right.png" |
|
78 |
+ alt="" |
|
79 |
+ :class="{ active: currentIndex === learningIdsLength - 1 }" |
|
80 |
+ /> |
|
54 | 81 |
</div> |
55 | 82 |
</div> |
56 | 83 |
</div> |
... | ... | @@ -96,29 +123,26 @@ |
96 | 123 |
}, |
97 | 124 |
// 제출하기 버튼 |
98 | 125 |
handleSubmit() { |
99 |
- |
|
100 | 126 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
101 | 127 |
if (userConfirmed) { |
102 |
- |
|
103 | 128 |
const problemData = { |
104 | 129 |
prblmInfo: this.currentLearningId, |
105 | 130 |
prblmNumber: this.currentProblemIndex, |
106 |
- prblmAns: this.selectedButton |
|
131 |
+ prblmAns: this.selectedButton, |
|
107 | 132 |
}; |
108 | 133 |
|
109 | 134 |
const answerData = { |
110 | 135 |
prblmId: this.currentLearningId.prblm_id, |
111 | 136 |
prblmAns: this.selectedButton, |
112 | 137 |
stdId: this.$store.getters.getStdId, |
113 |
- prblmLogAnsCnt: 1 |
|
138 |
+ prblmLogAnsCnt: 1, |
|
114 | 139 |
}; |
115 | 140 |
|
116 |
- this.$store.dispatch('saveProblemData', problemData); |
|
117 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
141 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
142 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
118 | 143 |
|
119 | 144 |
console.log(this.$store.getters.getAllProblems); |
120 | 145 |
console.log(this.$store.getters.getAllAnswers); |
121 |
- |
|
122 | 146 |
|
123 | 147 |
axios({ |
124 | 148 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -130,7 +154,7 @@ |
130 | 154 |
}) |
131 | 155 |
.then((res) => { |
132 | 156 |
console.log("problem - response : ", res.data); |
133 |
- this.goToPage("Chapter4"); // 'this' correctly refers to the Vue instance |
|
157 |
+ this.goToPage("Chapter4"); // 'this' correctly refers to the Vue instance |
|
134 | 158 |
}) |
135 | 159 |
.catch((error) => { |
136 | 160 |
console.log("problem - error : ", error); |
... | ... | @@ -165,27 +189,30 @@ |
165 | 189 |
const problemData = { |
166 | 190 |
prblmInfo: this.currentLearningId, |
167 | 191 |
prblmNumber: this.currentProblemIndex, |
168 |
- prblmAns: this.selectedButton |
|
169 |
- } |
|
192 |
+ prblmAns: this.selectedButton, |
|
193 |
+ }; |
|
170 | 194 |
const answerData = { |
171 | 195 |
prblmId: this.currentLearningId.prblm_id, |
172 | 196 |
prblmAns: this.selectedButton, |
173 | 197 |
stdId: this.$store.getters.getStdId, |
174 |
- prblmLogAnsCnt: 1 |
|
175 |
- } |
|
176 |
- this.$store.dispatch('saveProblemData', problemData); |
|
177 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
178 |
- console.log(this.$store.getters.getAllProblems) |
|
179 |
- console.log(this.$store.getters.getAllAnswers) |
|
180 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
181 |
- this.$store.dispatch('goToNextProblem'); |
|
198 |
+ prblmLogAnsCnt: 1, |
|
199 |
+ }; |
|
200 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
201 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
202 |
+ console.log(this.$store.getters.getAllProblems); |
|
203 |
+ console.log(this.$store.getters.getAllAnswers); |
|
204 |
+ if ( |
|
205 |
+ this.currentProblemIndex < |
|
206 |
+ this.$store.state.currentLearningIds.length - 1 |
|
207 |
+ ) { |
|
208 |
+ this.$store.dispatch("goToNextProblem"); |
|
182 | 209 |
this.handleProblemDetail(this.currentLearningId); |
183 | 210 |
this.goToPage(this.problemType); |
184 | 211 |
} |
185 | 212 |
}, |
186 | 213 |
previousProblem() { |
187 | 214 |
if (this.currentProblemIndex > 0) { |
188 |
- this.$store.dispatch('goToPreviousProblem'); |
|
215 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
189 | 216 |
this.handleProblemDetail(this.currentLearningId); |
190 | 217 |
this.goToPage(this.problemType); |
191 | 218 |
} |
... | ... | @@ -256,21 +283,20 @@ |
256 | 283 |
}, |
257 | 284 |
isPreviousButtonDisabled() { |
258 | 285 |
return this.currentProblemIndex === 0; |
259 |
- } |
|
286 |
+ }, |
|
260 | 287 |
}, |
261 | 288 |
created() { |
262 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
263 |
- console.log('Current Label:', this.currentLabel); |
|
264 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
289 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
290 |
+ console.log("Current Label:", this.currentLabel); |
|
291 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
265 | 292 |
this.currentIndex = this.currentProblemIndex; |
266 | 293 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
267 |
- |
|
268 | 294 |
|
269 | 295 |
// Fetch or process the current problem based on `currentLearningId` |
270 | 296 |
}, |
271 | 297 |
components: {}, |
272 | 298 |
mounted() { |
273 |
- this.getProblem() |
|
299 |
+ this.getProblem(); |
|
274 | 300 |
}, |
275 | 301 |
}; |
276 | 302 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_3_1.vue
+++ client/views/pages/main/Chapter/Chapter3_3_1.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,13 +12,22 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" |
|
14 |
- :class="{ active: currentIndex === 0 }" /></div> |
|
15 |
+ <div class="pre-btn" @click="previousProblem()"> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
21 |
+ </div> |
|
15 | 22 |
<div class="content title-box"> |
16 | 23 |
<p class="title mt25 title-bg">step3.</p> |
17 | 24 |
<div class="flex align-center mb30"> |
18 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
19 |
- <button><img src="../../../../resources/img/btn10_s.png" alt="" /></button> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
28 |
+ <button> |
|
29 |
+ <img src="../../../../resources/img/btn10_s.png" alt="" /> |
|
30 |
+ </button> |
|
20 | 31 |
</div> |
21 | 32 |
|
22 | 33 |
<div class="text-ct"> |
... | ... | @@ -35,7 +46,10 @@ |
35 | 46 |
<img src="../../../../resources/img/img109_51s.png" alt="" /> |
36 | 47 |
</div> |
37 | 48 |
|
38 |
- <div class="pickGroup mt60 flex align-center justify-center" style="gap: 100px; margin-top: 7%"> |
|
49 |
+ <div |
|
50 |
+ class="pickGroup mt60 flex align-center justify-center" |
|
51 |
+ style="gap: 100px; margin-top: 7%" |
|
52 |
+ > |
|
39 | 53 |
<article style="gap: 60px; bottom: 159px; left: 242px"> |
40 | 54 |
<div class="flex align-center" @click="handleClick(1)"> |
41 | 55 |
<button> |
... | ... | @@ -65,19 +79,25 @@ |
65 | 79 |
</article> |
66 | 80 |
</div> |
67 | 81 |
</div> |
68 |
- <button class="submit-button" @click="handleSubmit()" |
|
69 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
70 |
- <button class="submit-button" @click="nextProblem()" |
|
71 |
- v-else>다음 문제로</button> |
|
82 |
+ <button |
|
83 |
+ class="submit-button" |
|
84 |
+ @click="handleSubmit()" |
|
85 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
86 |
+ > |
|
87 |
+ 제출하기 |
|
88 |
+ </button> |
|
89 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
90 |
+ 다음 문제로 |
|
91 |
+ </button> |
|
72 | 92 |
</div> |
73 |
- <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" /> |
|
93 |
+ <div class="next-btn" @click="nextProblem()"> |
|
94 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
74 | 95 |
</div> |
75 | 96 |
</div> |
76 | 97 |
</div> |
77 | 98 |
</template> |
78 | 99 |
|
79 | 100 |
<script> |
80 |
- |
|
81 | 101 |
import axios from "axios"; |
82 | 102 |
export default { |
83 | 103 |
data() { |
... | ... | @@ -112,29 +132,26 @@ |
112 | 132 |
}, |
113 | 133 |
// 제출하기 버튼 |
114 | 134 |
handleSubmit() { |
115 |
- |
|
116 | 135 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
117 | 136 |
if (userConfirmed) { |
118 |
- |
|
119 | 137 |
const problemData = { |
120 | 138 |
prblmInfo: this.currentLearningId, |
121 | 139 |
prblmNumber: this.currentProblemIndex, |
122 |
- prblmAns: this.selectedButton |
|
140 |
+ prblmAns: this.selectedButton, |
|
123 | 141 |
}; |
124 | 142 |
|
125 | 143 |
const answerData = { |
126 | 144 |
prblmId: this.currentLearningId.prblm_id, |
127 | 145 |
prblmAns: this.selectedButton, |
128 | 146 |
stdId: this.$store.getters.getStdId, |
129 |
- prblmLogAnsCnt: 1 |
|
147 |
+ prblmLogAnsCnt: 1, |
|
130 | 148 |
}; |
131 | 149 |
|
132 |
- this.$store.dispatch('saveProblemData', problemData); |
|
133 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
150 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
151 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
134 | 152 |
|
135 | 153 |
console.log(this.$store.getters.getAllProblems); |
136 | 154 |
console.log(this.$store.getters.getAllAnswers); |
137 |
- |
|
138 | 155 |
|
139 | 156 |
axios({ |
140 | 157 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -146,7 +163,7 @@ |
146 | 163 |
}) |
147 | 164 |
.then(function (res) { |
148 | 165 |
console.log("problem - response : ", res.data); |
149 |
- this.goToPage('Chapter4') |
|
166 |
+ this.goToPage("Chapter4"); |
|
150 | 167 |
}) |
151 | 168 |
.catch(function (error) { |
152 | 169 |
console.log("problem - error : ", error); |
... | ... | @@ -181,27 +198,30 @@ |
181 | 198 |
const problemData = { |
182 | 199 |
prblmInfo: this.currentLearningId, |
183 | 200 |
prblmNumber: this.currentProblemIndex, |
184 |
- prblmAns: this.selectedButton |
|
185 |
- } |
|
201 |
+ prblmAns: this.selectedButton, |
|
202 |
+ }; |
|
186 | 203 |
const answerData = { |
187 | 204 |
prblmId: this.currentLearningId.prblm_id, |
188 | 205 |
prblmAns: this.selectedButton, |
189 | 206 |
stdId: this.$store.getters.getStdId, |
190 |
- prblmLogAnsCnt: 1 |
|
191 |
- } |
|
192 |
- this.$store.dispatch('saveProblemData', problemData); |
|
193 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
194 |
- console.log(this.$store.getters.getAllProblems) |
|
195 |
- console.log(this.$store.getters.getAllAnswers) |
|
196 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
197 |
- this.$store.dispatch('goToNextProblem'); |
|
207 |
+ prblmLogAnsCnt: 1, |
|
208 |
+ }; |
|
209 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
210 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
211 |
+ console.log(this.$store.getters.getAllProblems); |
|
212 |
+ console.log(this.$store.getters.getAllAnswers); |
|
213 |
+ if ( |
|
214 |
+ this.currentProblemIndex < |
|
215 |
+ this.$store.state.currentLearningIds.length - 1 |
|
216 |
+ ) { |
|
217 |
+ this.$store.dispatch("goToNextProblem"); |
|
198 | 218 |
this.handleProblemDetail(this.currentLearningId); |
199 | 219 |
this.goToPage(this.problemType); |
200 | 220 |
} |
201 | 221 |
}, |
202 | 222 |
previousProblem() { |
203 | 223 |
if (this.currentProblemIndex > 0) { |
204 |
- this.$store.dispatch('goToPreviousProblem'); |
|
224 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
205 | 225 |
this.handleProblemDetail(this.currentLearningId); |
206 | 226 |
this.goToPage(this.problemType); |
207 | 227 |
} |
... | ... | @@ -272,12 +292,12 @@ |
272 | 292 |
}, |
273 | 293 |
isPreviousButtonDisabled() { |
274 | 294 |
return this.currentProblemIndex === 0; |
275 |
- } |
|
295 |
+ }, |
|
276 | 296 |
}, |
277 | 297 |
created() { |
278 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
279 |
- console.log('Current Label:', this.currentLabel); |
|
280 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
298 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
299 |
+ console.log("Current Label:", this.currentLabel); |
|
300 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
281 | 301 |
this.currentIndex = this.currentProblemIndex; |
282 | 302 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
283 | 303 |
|
... | ... | @@ -285,7 +305,7 @@ |
285 | 305 |
}, |
286 | 306 |
components: {}, |
287 | 307 |
mounted() { |
288 |
- this.getProblem() |
|
308 |
+ this.getProblem(); |
|
289 | 309 |
}, |
290 | 310 |
}; |
291 | 311 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_4.vue
+++ client/views/pages/main/Chapter/Chapter3_4.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
... | ... | @@ -13,15 +13,29 @@ |
13 | 13 |
</div> |
14 | 14 |
<div class="flex justify-between align-center"> |
15 | 15 |
<div class="pre-btn" @click="previousProblem()"> |
16 |
- <img src="../../../../resources/img/left.png" alt="" :class="{ active: currentIndex === 0 }" /> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
17 | 21 |
</div> |
18 | 22 |
<div class="content title-box"> |
19 | 23 |
<p class="title mt25 title-bg">step3.</p> |
20 | 24 |
<div class="flex align-center mb30"> |
21 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
22 | 28 |
<button> |
23 |
- <img src="../../../../resources/img/btn10_s.png" alt="Listen" @click="playAudio" /> |
|
24 |
- <audio id="audio-player" src="client/resources/audio/tt.wav" preload="auto"></audio> |
|
29 |
+ <img |
|
30 |
+ src="../../../../resources/img/btn10_s.png" |
|
31 |
+ alt="Listen" |
|
32 |
+ @click="playAudio" |
|
33 |
+ /> |
|
34 |
+ <audio |
|
35 |
+ id="audio-player" |
|
36 |
+ src="client/resources/audio/tt.wav" |
|
37 |
+ preload="auto" |
|
38 |
+ ></audio> |
|
25 | 39 |
</button> |
26 | 40 |
</div> |
27 | 41 |
|
... | ... | @@ -37,16 +51,23 @@ |
37 | 51 |
</div> |
38 | 52 |
</div> |
39 | 53 |
</div> |
40 |
- <div class="pickGroup flex align-center justify-center" |
|
41 |
- style="flex-wrap: wrap; gap: 100px; margin-top: 7%; margin-left: 5%"> |
|
42 |
- <article v-for="(item, index) in problemDetail" :key="index" |
|
43 |
- style="flex: 1 0 calc(50% - 100px); bottom: 159px; left: 242px"> |
|
54 |
+ <div |
|
55 |
+ class="pickGroup flex align-center justify-center" |
|
56 |
+ style="flex-wrap: wrap; gap: 100px; margin-top: 7%; margin-left: 5%" |
|
57 |
+ > |
|
58 |
+ <article |
|
59 |
+ v-for="(item, index) in problemDetail" |
|
60 |
+ :key="index" |
|
61 |
+ style="flex: 1 0 calc(50% - 100px); bottom: 159px; left: 242px" |
|
62 |
+ > |
|
44 | 63 |
<div class="flex align-center"> |
45 | 64 |
<button @click="handleClick(item.prblmDtlExpln)"> |
46 | 65 |
<img src="../../../../resources/img/img136_71s.png" alt="" /> |
47 |
- <p :class="{ |
|
48 |
- active: selectedButton === item.prblmDtlExpln, |
|
49 |
- }"> |
|
66 |
+ <p |
|
67 |
+ :class="{ |
|
68 |
+ active: selectedButton === item.prblmDtlExpln, |
|
69 |
+ }" |
|
70 |
+ > |
|
50 | 71 |
{{ index + 1 }} |
51 | 72 |
</p> |
52 | 73 |
</button> |
... | ... | @@ -55,10 +76,16 @@ |
55 | 76 |
</article> |
56 | 77 |
</div> |
57 | 78 |
</div> |
58 |
- <button class="submit-button" @click="handleSubmit()" |
|
59 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
60 |
- <button class="submit-button" @click="nextProblem()" |
|
61 |
- v-else>다음 문제로</button> |
|
79 |
+ <button |
|
80 |
+ class="submit-button" |
|
81 |
+ @click="handleSubmit()" |
|
82 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
83 |
+ > |
|
84 |
+ 제출하기 |
|
85 |
+ </button> |
|
86 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
87 |
+ 다음 문제로 |
|
88 |
+ </button> |
|
62 | 89 |
</div> |
63 | 90 |
<div class="next-btn" @click="nextProblem()"> |
64 | 91 |
<img src="../../../../resources/img/right.png" alt="" /> |
... | ... | @@ -109,29 +136,26 @@ |
109 | 136 |
this.selectedButton = number; |
110 | 137 |
}, |
111 | 138 |
handleSubmit() { |
112 |
- |
|
113 | 139 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
114 | 140 |
if (userConfirmed) { |
115 |
- |
|
116 | 141 |
const problemData = { |
117 | 142 |
prblmInfo: this.currentLearningId, |
118 | 143 |
prblmNumber: this.currentProblemIndex, |
119 |
- prblmAns: this.selectedButton |
|
144 |
+ prblmAns: this.selectedButton, |
|
120 | 145 |
}; |
121 | 146 |
|
122 | 147 |
const answerData = { |
123 | 148 |
prblmId: this.currentLearningId.prblm_id, |
124 | 149 |
prblmAns: this.selectedButton, |
125 | 150 |
stdId: this.$store.getters.getStdId, |
126 |
- prblmLogAnsCnt: 1 |
|
151 |
+ prblmLogAnsCnt: 1, |
|
127 | 152 |
}; |
128 | 153 |
|
129 |
- this.$store.dispatch('saveProblemData', problemData); |
|
130 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
154 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
155 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
131 | 156 |
|
132 | 157 |
console.log(this.$store.getters.getAllProblems); |
133 | 158 |
console.log(this.$store.getters.getAllAnswers); |
134 |
- |
|
135 | 159 |
|
136 | 160 |
axios({ |
137 | 161 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -143,7 +167,7 @@ |
143 | 167 |
}) |
144 | 168 |
.then(function (res) { |
145 | 169 |
console.log("problem - response : ", res.data); |
146 |
- this.goToPage('Chapter4') |
|
170 |
+ this.goToPage("Chapter4"); |
|
147 | 171 |
}) |
148 | 172 |
.catch(function (error) { |
149 | 173 |
console.log("problem - error : ", error); |
... | ... | @@ -178,27 +202,30 @@ |
178 | 202 |
const problemData = { |
179 | 203 |
prblmInfo: this.currentLearningId, |
180 | 204 |
prblmNumber: this.currentProblemIndex, |
181 |
- prblmAns: this.selectedButton |
|
182 |
- } |
|
205 |
+ prblmAns: this.selectedButton, |
|
206 |
+ }; |
|
183 | 207 |
const answerData = { |
184 | 208 |
prblmId: this.currentLearningId.prblm_id, |
185 | 209 |
prblmAns: this.selectedButton, |
186 | 210 |
stdId: this.$store.getters.getStdId, |
187 |
- prblmLogAnsCnt: 1 |
|
188 |
- } |
|
189 |
- this.$store.dispatch('saveProblemData', problemData); |
|
190 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
191 |
- console.log(this.$store.getters.getAllProblems) |
|
192 |
- console.log(this.$store.getters.getAllAnswers) |
|
193 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
194 |
- this.$store.dispatch('goToNextProblem'); |
|
211 |
+ prblmLogAnsCnt: 1, |
|
212 |
+ }; |
|
213 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
214 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
215 |
+ console.log(this.$store.getters.getAllProblems); |
|
216 |
+ console.log(this.$store.getters.getAllAnswers); |
|
217 |
+ if ( |
|
218 |
+ this.currentProblemIndex < |
|
219 |
+ this.$store.state.currentLearningIds.length - 1 |
|
220 |
+ ) { |
|
221 |
+ this.$store.dispatch("goToNextProblem"); |
|
195 | 222 |
this.handleProblemDetail(this.currentLearningId); |
196 | 223 |
this.goToPage(this.problemType); |
197 | 224 |
} |
198 | 225 |
}, |
199 | 226 |
previousProblem() { |
200 | 227 |
if (this.currentProblemIndex > 0) { |
201 |
- this.$store.dispatch('goToPreviousProblem'); |
|
228 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
202 | 229 |
this.handleProblemDetail(this.currentLearningId); |
203 | 230 |
this.goToPage(this.problemType); |
204 | 231 |
} |
... | ... | @@ -269,12 +296,12 @@ |
269 | 296 |
}, |
270 | 297 |
isPreviousButtonDisabled() { |
271 | 298 |
return this.currentProblemIndex === 0; |
272 |
- } |
|
299 |
+ }, |
|
273 | 300 |
}, |
274 | 301 |
created() { |
275 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
276 |
- console.log('Current Label:', this.currentLabel); |
|
277 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
302 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
303 |
+ console.log("Current Label:", this.currentLabel); |
|
304 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
278 | 305 |
this.currentIndex = this.currentProblemIndex; |
279 | 306 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
280 | 307 |
|
... | ... | @@ -282,7 +309,7 @@ |
282 | 309 |
}, |
283 | 310 |
components: {}, |
284 | 311 |
mounted() { |
285 |
- this.getProblem() |
|
312 |
+ this.getProblem(); |
|
286 | 313 |
}, |
287 | 314 |
}; |
288 | 315 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_5.vue
+++ client/views/pages/main/Chapter/Chapter3_5.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,12 +12,19 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" |
|
14 |
- :class="{ active: currentIndex === 0 }" /></div> |
|
15 |
+ <div class="pre-btn" @click="previousProblem()"> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
21 |
+ </div> |
|
15 | 22 |
<div class="content title-box"> |
16 | 23 |
<p class="title mt25 title-bg">step3.</p> |
17 | 24 |
<div class="flex align-center mb30"> |
18 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
19 | 28 |
<!-- <button><img src="../../../../resources/img/btn10_s.png" alt=""> |
20 | 29 |
</button> --> |
21 | 30 |
</div> |
... | ... | @@ -40,7 +49,10 @@ |
40 | 49 |
go |
41 | 50 |
</div> |
42 | 51 |
</div> --> |
43 |
- <div class="pickGroup mt40 flex align-center justify-center" style="gap: 100px"> |
|
52 |
+ <div |
|
53 |
+ class="pickGroup mt40 flex align-center justify-center" |
|
54 |
+ style="gap: 100px" |
|
55 |
+ > |
|
44 | 56 |
<p>i</p> |
45 | 57 |
<p>(</p> |
46 | 58 |
<article style="gap: 60px; bottom: 159px; left: 242px"> |
... | ... | @@ -65,12 +77,19 @@ |
65 | 77 |
<p>bed</p> |
66 | 78 |
</div> |
67 | 79 |
</div> |
68 |
- <button class="submit-button" @click="handleSubmit()" |
|
69 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
70 |
- <button class="submit-button" @click="nextProblem()" |
|
71 |
- v-else>다음 문제로</button> |
|
80 |
+ <button |
|
81 |
+ class="submit-button" |
|
82 |
+ @click="handleSubmit()" |
|
83 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
84 |
+ > |
|
85 |
+ 제출하기 |
|
86 |
+ </button> |
|
87 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
88 |
+ 다음 문제로 |
|
89 |
+ </button> |
|
72 | 90 |
</div> |
73 |
- <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" /> |
|
91 |
+ <div class="next-btn" @click="nextProblem()"> |
|
92 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
74 | 93 |
</div> |
75 | 94 |
</div> |
76 | 95 |
</div> |
... | ... | @@ -111,29 +130,26 @@ |
111 | 130 |
}, |
112 | 131 |
// 제출하기 버튼 |
113 | 132 |
handleSubmit() { |
114 |
- |
|
115 | 133 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
116 | 134 |
if (userConfirmed) { |
117 |
- |
|
118 | 135 |
const problemData = { |
119 | 136 |
prblmInfo: this.currentLearningId, |
120 | 137 |
prblmNumber: this.currentProblemIndex, |
121 |
- prblmAns: this.selectedButton |
|
138 |
+ prblmAns: this.selectedButton, |
|
122 | 139 |
}; |
123 | 140 |
|
124 | 141 |
const answerData = { |
125 | 142 |
prblmId: this.currentLearningId.prblm_id, |
126 | 143 |
prblmAns: this.selectedButton, |
127 | 144 |
stdId: this.$store.getters.getStdId, |
128 |
- prblmLogAnsCnt: 1 |
|
145 |
+ prblmLogAnsCnt: 1, |
|
129 | 146 |
}; |
130 | 147 |
|
131 |
- this.$store.dispatch('saveProblemData', problemData); |
|
132 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
148 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
149 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
133 | 150 |
|
134 | 151 |
console.log(this.$store.getters.getAllProblems); |
135 | 152 |
console.log(this.$store.getters.getAllAnswers); |
136 |
- |
|
137 | 153 |
|
138 | 154 |
axios({ |
139 | 155 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -145,7 +161,7 @@ |
145 | 161 |
}) |
146 | 162 |
.then(function (res) { |
147 | 163 |
console.log("problem - response : ", res.data); |
148 |
- this.goToPage('Chapter4') |
|
164 |
+ this.goToPage("Chapter4"); |
|
149 | 165 |
}) |
150 | 166 |
.catch(function (error) { |
151 | 167 |
console.log("problem - error : ", error); |
... | ... | @@ -180,27 +196,30 @@ |
180 | 196 |
const problemData = { |
181 | 197 |
prblmInfo: this.currentLearningId, |
182 | 198 |
prblmNumber: this.currentProblemIndex, |
183 |
- prblmAns: this.selectedButton |
|
184 |
- } |
|
199 |
+ prblmAns: this.selectedButton, |
|
200 |
+ }; |
|
185 | 201 |
const answerData = { |
186 | 202 |
prblmId: this.currentLearningId.prblm_id, |
187 | 203 |
prblmAns: this.selectedButton, |
188 | 204 |
stdId: this.$store.getters.getStdId, |
189 |
- prblmLogAnsCnt: 1 |
|
190 |
- } |
|
191 |
- this.$store.dispatch('saveProblemData', problemData); |
|
192 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
193 |
- console.log(this.$store.getters.getAllProblems) |
|
194 |
- console.log(this.$store.getters.getAllAnswers) |
|
195 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
196 |
- this.$store.dispatch('goToNextProblem'); |
|
205 |
+ prblmLogAnsCnt: 1, |
|
206 |
+ }; |
|
207 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
208 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
209 |
+ console.log(this.$store.getters.getAllProblems); |
|
210 |
+ console.log(this.$store.getters.getAllAnswers); |
|
211 |
+ if ( |
|
212 |
+ this.currentProblemIndex < |
|
213 |
+ this.$store.state.currentLearningIds.length - 1 |
|
214 |
+ ) { |
|
215 |
+ this.$store.dispatch("goToNextProblem"); |
|
197 | 216 |
this.handleProblemDetail(this.currentLearningId); |
198 | 217 |
this.goToPage(this.problemType); |
199 | 218 |
} |
200 | 219 |
}, |
201 | 220 |
previousProblem() { |
202 | 221 |
if (this.currentProblemIndex > 0) { |
203 |
- this.$store.dispatch('goToPreviousProblem'); |
|
222 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
204 | 223 |
this.handleProblemDetail(this.currentLearningId); |
205 | 224 |
this.goToPage(this.problemType); |
206 | 225 |
} |
... | ... | @@ -271,12 +290,12 @@ |
271 | 290 |
}, |
272 | 291 |
isPreviousButtonDisabled() { |
273 | 292 |
return this.currentProblemIndex === 0; |
274 |
- } |
|
293 |
+ }, |
|
275 | 294 |
}, |
276 | 295 |
created() { |
277 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
278 |
- console.log('Current Label:', this.currentLabel); |
|
279 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
296 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
297 |
+ console.log("Current Label:", this.currentLabel); |
|
298 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
280 | 299 |
this.currentIndex = this.currentProblemIndex; |
281 | 300 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
282 | 301 |
|
... | ... | @@ -284,7 +303,7 @@ |
284 | 303 |
}, |
285 | 304 |
components: {}, |
286 | 305 |
mounted() { |
287 |
- this.getProblem() |
|
306 |
+ this.getProblem(); |
|
288 | 307 |
}, |
289 | 308 |
}; |
290 | 309 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_6.vue
+++ client/views/pages/main/Chapter/Chapter3_6.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter2_2" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,14 +12,27 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" |
|
14 |
- :class="{ active: currentIndex === 0 }" /></div> |
|
15 |
+ <div class="pre-btn" @click="previousProblem()"> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
21 |
+ </div> |
|
15 | 22 |
<div class="content title-box"> |
16 | 23 |
<p class="title mt25 title-bg">step3.</p> |
17 | 24 |
<div class="flex align-center mb30"> |
18 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
19 |
- <button @click="playAudio"><img src="../../../../resources/img/btn10_s.png" alt="" /> <audio id="audio-player" |
|
20 |
- src="client/resources/audio/bank.wav" preload="auto"></audio></button> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
28 |
+ <button @click="playAudio"> |
|
29 |
+ <img src="../../../../resources/img/btn10_s.png" alt="" /> |
|
30 |
+ <audio |
|
31 |
+ id="audio-player" |
|
32 |
+ src="client/resources/audio/bank.wav" |
|
33 |
+ preload="auto" |
|
34 |
+ ></audio> |
|
35 |
+ </button> |
|
21 | 36 |
</div> |
22 | 37 |
<div class="time-hint"> |
23 | 38 |
<button class="hint-btn">HINT</button> |
... | ... | @@ -35,18 +50,27 @@ |
35 | 50 |
<img src="../../../../resources/img/img114_57s.png" alt="" /> |
36 | 51 |
</div> --> |
37 | 52 |
|
38 |
- <div class="pickGroup flex align-center justify-center" |
|
39 |
- style="flex-wrap: wrap; gap: 100px; margin-top: 7%; margin-left: 5%"> |
|
40 |
- <div class="pickGroup flex align-center justify-center" |
|
41 |
- style="flex-wrap: wrap; gap: 100px; margin-top: 7%; margin-left: 5%"> |
|
42 |
- <article v-for="(item, index) in problemDetail" :key="index" |
|
43 |
- style="flex: 1 0 calc(50% - 100px); bottom: 159px; left: 242px"> |
|
53 |
+ <div |
|
54 |
+ class="pickGroup flex align-center justify-center" |
|
55 |
+ style="flex-wrap: wrap; gap: 100px; margin-top: 7%; margin-left: 5%" |
|
56 |
+ > |
|
57 |
+ <div |
|
58 |
+ class="pickGroup flex align-center justify-center" |
|
59 |
+ style="flex-wrap: wrap; gap: 100px; margin-top: 7%; margin-left: 5%" |
|
60 |
+ > |
|
61 |
+ <article |
|
62 |
+ v-for="(item, index) in problemDetail" |
|
63 |
+ :key="index" |
|
64 |
+ style="flex: 1 0 calc(50% - 100px); bottom: 159px; left: 242px" |
|
65 |
+ > |
|
44 | 66 |
<div class="flex align-center"> |
45 | 67 |
<button @click="handleClick(item.prblmDtlExpln)"> |
46 | 68 |
<img src="../../../../resources/img/img136_71s.png" alt="" /> |
47 |
- <p :class="{ |
|
48 |
- active: selectedButton === item.prblmDtlExpln, |
|
49 |
- }"> |
|
69 |
+ <p |
|
70 |
+ :class="{ |
|
71 |
+ active: selectedButton === item.prblmDtlExpln, |
|
72 |
+ }" |
|
73 |
+ > |
|
50 | 74 |
{{ index + 1 }} |
51 | 75 |
</p> |
52 | 76 |
</button> |
... | ... | @@ -55,30 +79,50 @@ |
55 | 79 |
</article> |
56 | 80 |
</div> |
57 | 81 |
</div> |
58 |
- <button class="submit-button" @click="handleSubmit()" |
|
59 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
60 |
- <button class="submit-button" @click="nextProblem()" |
|
61 |
- v-else>다음 문제로</button> |
|
62 |
- |
|
82 |
+ <button |
|
83 |
+ class="submit-button" |
|
84 |
+ @click="handleSubmit()" |
|
85 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
86 |
+ > |
|
87 |
+ 제출하기 |
|
88 |
+ </button> |
|
89 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
90 |
+ 다음 문제로 |
|
91 |
+ </button> |
|
63 | 92 |
</div> |
64 |
- <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" /> |
|
93 |
+ <div class="next-btn" @click="nextProblem()"> |
|
94 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
65 | 95 |
</div> |
66 | 96 |
</div> |
67 | 97 |
</div> |
68 | 98 |
</template> |
69 | 99 |
|
70 | 100 |
<script> |
71 |
- |
|
72 | 101 |
import axios from "axios"; |
73 | 102 |
export default { |
74 | 103 |
data() { |
75 | 104 |
return { |
76 | 105 |
items: [ |
77 |
- { imgSrc2: "client/resources/img/img53_6_35s.png", imgSrc1: "client/resources/img/img53_1_35s.png" }, |
|
78 |
- { imgSrc2: "client/resources/img/img53_7_35s.png", imgSrc1: "client/resources/img/img53_2_35s.png" }, |
|
79 |
- { imgSrc2: "client/resources/img/img53_8_35s.png", imgSrc1: "client/resources/img/img53_3_35s.png" }, |
|
80 |
- { imgSrc2: "client/resources/img/img53_9_35s.png", imgSrc1: "client/resources/img/img53_4_35s.png" }, |
|
81 |
- { imgSrc2: "client/resources/img/img53_10_35s.png", imgSrc1: "client/resources/img/img53_5_35s.png" }, |
|
106 |
+ { |
|
107 |
+ imgSrc2: "client/resources/img/img53_6_35s.png", |
|
108 |
+ imgSrc1: "client/resources/img/img53_1_35s.png", |
|
109 |
+ }, |
|
110 |
+ { |
|
111 |
+ imgSrc2: "client/resources/img/img53_7_35s.png", |
|
112 |
+ imgSrc1: "client/resources/img/img53_2_35s.png", |
|
113 |
+ }, |
|
114 |
+ { |
|
115 |
+ imgSrc2: "client/resources/img/img53_8_35s.png", |
|
116 |
+ imgSrc1: "client/resources/img/img53_3_35s.png", |
|
117 |
+ }, |
|
118 |
+ { |
|
119 |
+ imgSrc2: "client/resources/img/img53_9_35s.png", |
|
120 |
+ imgSrc1: "client/resources/img/img53_4_35s.png", |
|
121 |
+ }, |
|
122 |
+ { |
|
123 |
+ imgSrc2: "client/resources/img/img53_10_35s.png", |
|
124 |
+ imgSrc1: "client/resources/img/img53_5_35s.png", |
|
125 |
+ }, |
|
82 | 126 |
], |
83 | 127 |
selectedIndex: null, |
84 | 128 |
timer: "00", |
... | ... | @@ -120,29 +164,26 @@ |
120 | 164 |
this.selectedButton = number; |
121 | 165 |
}, |
122 | 166 |
handleSubmit() { |
123 |
- |
|
124 | 167 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
125 | 168 |
if (userConfirmed) { |
126 |
- |
|
127 | 169 |
const problemData = { |
128 | 170 |
prblmInfo: this.currentLearningId, |
129 | 171 |
prblmNumber: this.currentProblemIndex, |
130 |
- prblmAns: this.selectedButton |
|
172 |
+ prblmAns: this.selectedButton, |
|
131 | 173 |
}; |
132 | 174 |
|
133 | 175 |
const answerData = { |
134 | 176 |
prblmId: this.currentLearningId.prblm_id, |
135 | 177 |
prblmAns: this.selectedButton, |
136 | 178 |
stdId: this.$store.getters.getStdId, |
137 |
- prblmLogAnsCnt: 1 |
|
179 |
+ prblmLogAnsCnt: 1, |
|
138 | 180 |
}; |
139 | 181 |
|
140 |
- this.$store.dispatch('saveProblemData', problemData); |
|
141 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
182 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
183 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
142 | 184 |
|
143 | 185 |
console.log(this.$store.getters.getAllProblems); |
144 | 186 |
console.log(this.$store.getters.getAllAnswers); |
145 |
- |
|
146 | 187 |
|
147 | 188 |
axios({ |
148 | 189 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -154,7 +195,7 @@ |
154 | 195 |
}) |
155 | 196 |
.then(function (res) { |
156 | 197 |
console.log("problem - response : ", res.data); |
157 |
- this.goToPage('Chapter4') |
|
198 |
+ this.goToPage("Chapter4"); |
|
158 | 199 |
}) |
159 | 200 |
.catch(function (error) { |
160 | 201 |
console.log("problem - error : ", error); |
... | ... | @@ -194,27 +235,30 @@ |
194 | 235 |
const problemData = { |
195 | 236 |
prblmInfo: this.currentLearningId, |
196 | 237 |
prblmNumber: this.currentProblemIndex, |
197 |
- prblmAns: this.selectedButton |
|
198 |
- } |
|
238 |
+ prblmAns: this.selectedButton, |
|
239 |
+ }; |
|
199 | 240 |
const answerData = { |
200 | 241 |
prblmId: this.currentLearningId.prblm_id, |
201 | 242 |
prblmAns: this.selectedButton, |
202 | 243 |
stdId: this.$store.getters.getStdId, |
203 |
- prblmLogAnsCnt: 1 |
|
204 |
- } |
|
205 |
- this.$store.dispatch('saveProblemData', problemData); |
|
206 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
207 |
- console.log(this.$store.getters.getAllProblems) |
|
208 |
- console.log(this.$store.getters.getAllAnswers) |
|
209 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
210 |
- this.$store.dispatch('goToNextProblem'); |
|
244 |
+ prblmLogAnsCnt: 1, |
|
245 |
+ }; |
|
246 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
247 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
248 |
+ console.log(this.$store.getters.getAllProblems); |
|
249 |
+ console.log(this.$store.getters.getAllAnswers); |
|
250 |
+ if ( |
|
251 |
+ this.currentProblemIndex < |
|
252 |
+ this.$store.state.currentLearningIds.length - 1 |
|
253 |
+ ) { |
|
254 |
+ this.$store.dispatch("goToNextProblem"); |
|
211 | 255 |
this.handleProblemDetail(this.currentLearningId); |
212 | 256 |
this.goToPage(this.problemType); |
213 | 257 |
} |
214 | 258 |
}, |
215 | 259 |
previousProblem() { |
216 | 260 |
if (this.currentProblemIndex > 0) { |
217 |
- this.$store.dispatch('goToPreviousProblem'); |
|
261 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
218 | 262 |
this.handleProblemDetail(this.currentLearningId); |
219 | 263 |
this.goToPage(this.problemType); |
220 | 264 |
} |
... | ... | @@ -285,12 +329,12 @@ |
285 | 329 |
}, |
286 | 330 |
isPreviousButtonDisabled() { |
287 | 331 |
return this.currentProblemIndex === 0; |
288 |
- } |
|
332 |
+ }, |
|
289 | 333 |
}, |
290 | 334 |
created() { |
291 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
292 |
- console.log('Current Label:', this.currentLabel); |
|
293 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
335 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
336 |
+ console.log("Current Label:", this.currentLabel); |
|
337 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
294 | 338 |
this.currentIndex = this.currentProblemIndex; |
295 | 339 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
296 | 340 |
|
... | ... | @@ -298,7 +342,7 @@ |
298 | 342 |
}, |
299 | 343 |
components: {}, |
300 | 344 |
mounted() { |
301 |
- this.getProblem() |
|
345 |
+ this.getProblem(); |
|
302 | 346 |
}, |
303 | 347 |
}; |
304 | 348 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_7.vue
+++ client/views/pages/main/Chapter/Chapter3_7.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
... | ... | @@ -13,12 +13,18 @@ |
13 | 13 |
</div> |
14 | 14 |
<div class="flex justify-between align-center"> |
15 | 15 |
<div class="pre-btn" @click="previousProblem()"> |
16 |
- <img src="../../../../resources/img/left.png" alt="" :class="{ active: currentIndex === 0 }" /> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
17 | 21 |
</div> |
18 | 22 |
<div class="content title-box"> |
19 | 23 |
<p class="title mt25 title-bg">step3.</p> |
20 | 24 |
<div class="flex align-center mb30"> |
21 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
22 | 28 |
</div> |
23 | 29 |
|
24 | 30 |
<div class="text-ct"> |
... | ... | @@ -34,7 +40,10 @@ |
34 | 40 |
</div> |
35 | 41 |
</div> |
36 | 42 |
|
37 |
- <div class="pickGroup flex align-center justify-between mt80" style="gap: 100px"> |
|
43 |
+ <div |
|
44 |
+ class="pickGroup flex align-center justify-between mt80" |
|
45 |
+ style="gap: 100px" |
|
46 |
+ > |
|
38 | 47 |
<!-- <p></p> --> |
39 | 48 |
<button> |
40 | 49 |
<img src="../../../../resources/img/btn10_s.png" alt="" /> |
... | ... | @@ -43,7 +52,10 @@ |
43 | 52 |
<article> |
44 | 53 |
<div class="flex align-center"> |
45 | 54 |
<button @click="handleCheck('O')" name="O"> |
46 |
- <img src="../../../../resources/img/img136_71s.png" alt="" /> |
|
55 |
+ <img |
|
56 |
+ src="../../../../resources/img/img136_71s.png" |
|
57 |
+ alt="" |
|
58 |
+ /> |
|
47 | 59 |
<p :class="{ active: selectedButton === 'O' }">1</p> |
48 | 60 |
</button> |
49 | 61 |
<img src="../../../../resources/img/img111_56s.png" alt="" /> |
... | ... | @@ -52,7 +64,10 @@ |
52 | 64 |
<article> |
53 | 65 |
<div class="flex align-center"> |
54 | 66 |
<button @click="handleCheck('X')" name="X"> |
55 |
- <img src="../../../../resources/img/img136_71s.png" alt="" /> |
|
67 |
+ <img |
|
68 |
+ src="../../../../resources/img/img136_71s.png" |
|
69 |
+ alt="" |
|
70 |
+ /> |
|
56 | 71 |
<p :class="{ active: selectedButton === 'X' }">2</p> |
57 | 72 |
</button> |
58 | 73 |
<img src="../../../../resources/img/img112_56s.png" alt="" /> |
... | ... | @@ -61,11 +76,16 @@ |
61 | 76 |
</div> |
62 | 77 |
</div> |
63 | 78 |
</div> |
64 |
- <button class="submit-button" @click="handleSubmit()" |
|
65 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
66 |
- <button class="submit-button" @click="nextProblem()" |
|
67 |
- v-else>다음 문제로</button> |
|
68 |
- |
|
79 |
+ <button |
|
80 |
+ class="submit-button" |
|
81 |
+ @click="handleSubmit()" |
|
82 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
83 |
+ > |
|
84 |
+ 제출하기 |
|
85 |
+ </button> |
|
86 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
87 |
+ 다음 문제로 |
|
88 |
+ </button> |
|
69 | 89 |
</div> |
70 | 90 |
<div class="next-btn" @click="nextProblem()"> |
71 | 91 |
<img src="../../../../resources/img/right.png" alt="" /> |
... | ... | @@ -115,29 +135,26 @@ |
115 | 135 |
console.log(this.selectedButton); |
116 | 136 |
}, |
117 | 137 |
handleSubmit() { |
118 |
- |
|
119 | 138 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
120 | 139 |
if (userConfirmed) { |
121 |
- |
|
122 | 140 |
const problemData = { |
123 | 141 |
prblmInfo: this.currentLearningId, |
124 | 142 |
prblmNumber: this.currentProblemIndex, |
125 |
- prblmAns: this.selectedButton |
|
143 |
+ prblmAns: this.selectedButton, |
|
126 | 144 |
}; |
127 | 145 |
|
128 | 146 |
const answerData = { |
129 | 147 |
prblmId: this.currentLearningId.prblm_id, |
130 | 148 |
prblmAns: this.selectedButton, |
131 | 149 |
stdId: this.$store.getters.getStdId, |
132 |
- prblmLogAnsCnt: 1 |
|
150 |
+ prblmLogAnsCnt: 1, |
|
133 | 151 |
}; |
134 | 152 |
|
135 |
- this.$store.dispatch('saveProblemData', problemData); |
|
136 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
153 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
154 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
137 | 155 |
|
138 | 156 |
console.log(this.$store.getters.getAllProblems); |
139 | 157 |
console.log(this.$store.getters.getAllAnswers); |
140 |
- |
|
141 | 158 |
|
142 | 159 |
axios({ |
143 | 160 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -147,9 +164,9 @@ |
147 | 164 |
}, |
148 | 165 |
data: this.$store.getters.getAllAnswers, |
149 | 166 |
}) |
150 |
- .then((res)=> { |
|
167 |
+ .then((res) => { |
|
151 | 168 |
console.log("problem - response : ", res.data); |
152 |
- this.goToPage('Chapter4') |
|
169 |
+ this.goToPage("Chapter4"); |
|
153 | 170 |
}) |
154 | 171 |
.catch(function (error) { |
155 | 172 |
console.log("problem - error : ", error); |
... | ... | @@ -184,27 +201,30 @@ |
184 | 201 |
const problemData = { |
185 | 202 |
prblmInfo: this.currentLearningId, |
186 | 203 |
prblmNumber: this.currentProblemIndex, |
187 |
- prblmAns: this.selectedButton |
|
188 |
- } |
|
204 |
+ prblmAns: this.selectedButton, |
|
205 |
+ }; |
|
189 | 206 |
const answerData = { |
190 | 207 |
prblmId: this.currentLearningId.prblm_id, |
191 | 208 |
prblmAns: this.selectedButton, |
192 | 209 |
stdId: this.$store.getters.getStdId, |
193 |
- prblmLogAnsCnt: 1 |
|
194 |
- } |
|
195 |
- this.$store.dispatch('saveProblemData', problemData); |
|
196 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
197 |
- console.log(this.$store.getters.getAllProblems) |
|
198 |
- console.log(this.$store.getters.getAllAnswers) |
|
199 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
200 |
- this.$store.dispatch('goToNextProblem'); |
|
210 |
+ prblmLogAnsCnt: 1, |
|
211 |
+ }; |
|
212 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
213 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
214 |
+ console.log(this.$store.getters.getAllProblems); |
|
215 |
+ console.log(this.$store.getters.getAllAnswers); |
|
216 |
+ if ( |
|
217 |
+ this.currentProblemIndex < |
|
218 |
+ this.$store.state.currentLearningIds.length - 1 |
|
219 |
+ ) { |
|
220 |
+ this.$store.dispatch("goToNextProblem"); |
|
201 | 221 |
this.handleProblemDetail(this.currentLearningId); |
202 | 222 |
this.goToPage(this.problemType); |
203 | 223 |
} |
204 | 224 |
}, |
205 | 225 |
previousProblem() { |
206 | 226 |
if (this.currentProblemIndex > 0) { |
207 |
- this.$store.dispatch('goToPreviousProblem'); |
|
227 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
208 | 228 |
this.handleProblemDetail(this.currentLearningId); |
209 | 229 |
this.goToPage(this.problemType); |
210 | 230 |
} |
... | ... | @@ -275,12 +295,12 @@ |
275 | 295 |
}, |
276 | 296 |
isPreviousButtonDisabled() { |
277 | 297 |
return this.currentProblemIndex === 0; |
278 |
- } |
|
298 |
+ }, |
|
279 | 299 |
}, |
280 | 300 |
created() { |
281 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
282 |
- console.log('Current Label:', this.currentLabel); |
|
283 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
301 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
302 |
+ console.log("Current Label:", this.currentLabel); |
|
303 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
284 | 304 |
this.currentIndex = this.currentProblemIndex; |
285 | 305 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
286 | 306 |
|
... | ... | @@ -288,7 +308,7 @@ |
288 | 308 |
}, |
289 | 309 |
components: {}, |
290 | 310 |
mounted() { |
291 |
- this.getProblem() |
|
311 |
+ this.getProblem(); |
|
292 | 312 |
}, |
293 | 313 |
}; |
294 | 314 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_8.vue
+++ client/views/pages/main/Chapter/Chapter3_8.vue
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 |
<div id="Chapter1_1" class="content-wrap"> |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 |
- <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 |
+ </div> |
|
6 | 8 |
</router-link> |
7 | 9 |
</div> |
8 | 10 |
<div class="title-box mb25 flex align-center mt40"> |
... | ... | @@ -10,12 +12,19 @@ |
10 | 12 |
<span class="subtitle">my name is dd</span> |
11 | 13 |
</div> |
12 | 14 |
<div class="flex justify-between align-center"> |
13 |
- <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" |
|
14 |
- :class="{ active: currentIndex === 0 }" /></div> |
|
15 |
+ <div class="pre-btn" @click="previousProblem()"> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
21 |
+ </div> |
|
15 | 22 |
<div class="content title-box"> |
16 | 23 |
<p class="title mt25 title-bg">step3.</p> |
17 | 24 |
<div class="flex align-center mb30"> |
18 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
19 | 28 |
<!-- <button><img src="../../../../resources/img/btn10_s.png" alt=""> |
20 | 29 |
</button> --> |
21 | 30 |
</div> |
... | ... | @@ -42,15 +51,28 @@ |
42 | 51 |
</button> |
43 | 52 |
</div> |
44 | 53 |
</div> |
45 |
- <input class="yellow-bd" v-model="answer" style="width: 45%" type="text" placeholder="답을 입력하세요." /> |
|
54 |
+ <input |
|
55 |
+ class="yellow-bd" |
|
56 |
+ v-model="answer" |
|
57 |
+ style="width: 45%" |
|
58 |
+ type="text" |
|
59 |
+ placeholder="답을 입력하세요." |
|
60 |
+ /> |
|
46 | 61 |
</div> |
47 | 62 |
</div> |
48 |
- <button class="submit-button" @click="handleSubmit()" |
|
49 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
50 |
- <button class="submit-button" @click="nextProblem()" |
|
51 |
- v-else>다음 문제로</button> |
|
63 |
+ <button |
|
64 |
+ class="submit-button" |
|
65 |
+ @click="handleSubmit()" |
|
66 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
67 |
+ > |
|
68 |
+ 제출하기 |
|
69 |
+ </button> |
|
70 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
71 |
+ 다음 문제로 |
|
72 |
+ </button> |
|
52 | 73 |
</div> |
53 |
- <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" /> |
|
74 |
+ <div class="next-btn" @click="nextProblem()"> |
|
75 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
54 | 76 |
</div> |
55 | 77 |
</div> |
56 | 78 |
</div> |
... | ... | @@ -120,29 +142,26 @@ |
120 | 142 |
}, 1000); |
121 | 143 |
}, |
122 | 144 |
handleSubmit() { |
123 |
- |
|
124 | 145 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
125 | 146 |
if (userConfirmed) { |
126 |
- |
|
127 | 147 |
const problemData = { |
128 | 148 |
prblmInfo: this.currentLearningId, |
129 | 149 |
prblmNumber: this.currentProblemIndex, |
130 |
- prblmAns: this.selectedButton |
|
150 |
+ prblmAns: this.selectedButton, |
|
131 | 151 |
}; |
132 | 152 |
|
133 | 153 |
const answerData = { |
134 | 154 |
prblmId: this.currentLearningId.prblm_id, |
135 | 155 |
prblmAns: this.selectedButton, |
136 | 156 |
stdId: this.$store.getters.getStdId, |
137 |
- prblmLogAnsCnt: 1 |
|
157 |
+ prblmLogAnsCnt: 1, |
|
138 | 158 |
}; |
139 | 159 |
|
140 |
- this.$store.dispatch('saveProblemData', problemData); |
|
141 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
160 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
161 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
142 | 162 |
|
143 | 163 |
console.log(this.$store.getters.getAllProblems); |
144 | 164 |
console.log(this.$store.getters.getAllAnswers); |
145 |
- |
|
146 | 165 |
|
147 | 166 |
axios({ |
148 | 167 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -154,7 +173,7 @@ |
154 | 173 |
}) |
155 | 174 |
.then(function (res) { |
156 | 175 |
console.log("problem - response : ", res.data); |
157 |
- this.goToPage('Chapter4') |
|
176 |
+ this.goToPage("Chapter4"); |
|
158 | 177 |
}) |
159 | 178 |
.catch(function (error) { |
160 | 179 |
console.log("problem - error : ", error); |
... | ... | @@ -189,27 +208,30 @@ |
189 | 208 |
const problemData = { |
190 | 209 |
prblmInfo: this.currentLearningId, |
191 | 210 |
prblmNumber: this.currentProblemIndex, |
192 |
- prblmAns: this.selectedButton |
|
193 |
- } |
|
211 |
+ prblmAns: this.selectedButton, |
|
212 |
+ }; |
|
194 | 213 |
const answerData = { |
195 | 214 |
prblmId: this.currentLearningId.prblm_id, |
196 | 215 |
prblmAns: this.selectedButton, |
197 | 216 |
stdId: this.$store.getters.getStdId, |
198 |
- prblmLogAnsCnt: 1 |
|
199 |
- } |
|
200 |
- this.$store.dispatch('saveProblemData', problemData); |
|
201 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
202 |
- console.log(this.$store.getters.getAllProblems) |
|
203 |
- console.log(this.$store.getters.getAllAnswers) |
|
204 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
205 |
- this.$store.dispatch('goToNextProblem'); |
|
217 |
+ prblmLogAnsCnt: 1, |
|
218 |
+ }; |
|
219 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
220 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
221 |
+ console.log(this.$store.getters.getAllProblems); |
|
222 |
+ console.log(this.$store.getters.getAllAnswers); |
|
223 |
+ if ( |
|
224 |
+ this.currentProblemIndex < |
|
225 |
+ this.$store.state.currentLearningIds.length - 1 |
|
226 |
+ ) { |
|
227 |
+ this.$store.dispatch("goToNextProblem"); |
|
206 | 228 |
this.handleProblemDetail(this.currentLearningId); |
207 | 229 |
this.goToPage(this.problemType); |
208 | 230 |
} |
209 | 231 |
}, |
210 | 232 |
previousProblem() { |
211 | 233 |
if (this.currentProblemIndex > 0) { |
212 |
- this.$store.dispatch('goToPreviousProblem'); |
|
234 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
213 | 235 |
this.handleProblemDetail(this.currentLearningId); |
214 | 236 |
this.goToPage(this.problemType); |
215 | 237 |
} |
... | ... | @@ -280,12 +302,12 @@ |
280 | 302 |
}, |
281 | 303 |
isPreviousButtonDisabled() { |
282 | 304 |
return this.currentProblemIndex === 0; |
283 |
- } |
|
305 |
+ }, |
|
284 | 306 |
}, |
285 | 307 |
created() { |
286 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
287 |
- console.log('Current Label:', this.currentLabel); |
|
288 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
308 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
309 |
+ console.log("Current Label:", this.currentLabel); |
|
310 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
289 | 311 |
this.currentIndex = this.currentProblemIndex; |
290 | 312 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
291 | 313 |
|
... | ... | @@ -293,7 +315,7 @@ |
293 | 315 |
}, |
294 | 316 |
components: {}, |
295 | 317 |
mounted() { |
296 |
- this.getProblem() |
|
318 |
+ this.getProblem(); |
|
297 | 319 |
}, |
298 | 320 |
}; |
299 | 321 |
</script> |
--- client/views/pages/main/Chapter/Chapter3_9.vue
+++ client/views/pages/main/Chapter/Chapter3_9.vue
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 |
<div style="margin: 30px 0px 50px; width: 20%"> |
4 | 4 |
<router-link to="/MyPlan.page"> |
5 | 5 |
<div class="logo mb25"> |
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
7 | 7 |
</div> |
8 | 8 |
</router-link> |
9 | 9 |
</div> |
... | ... | @@ -13,12 +13,18 @@ |
13 | 13 |
</div> |
14 | 14 |
<div class="flex justify-between align-center"> |
15 | 15 |
<div class="pre-btn" @click="previousProblem()"> |
16 |
- <img src="../../../../resources/img/left.png" alt="" :class="{ active: currentIndex === 0 }" /> |
|
16 |
+ <img |
|
17 |
+ src="../../../../resources/img/left.png" |
|
18 |
+ alt="" |
|
19 |
+ :class="{ active: currentIndex === 0 }" |
|
20 |
+ /> |
|
17 | 21 |
</div> |
18 | 22 |
<div class="content title-box"> |
19 | 23 |
<p class="title mt25 title-bg">step3.</p> |
20 | 24 |
<div class="flex align-center mb30"> |
21 |
- <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p> |
|
25 |
+ <p class="subtitle2 mr20"> |
|
26 |
+ {{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }} |
|
27 |
+ </p> |
|
22 | 28 |
<!-- <button><img src="../../../../resources/img/btn10_s.png" alt=""> |
23 | 29 |
</button> --> |
24 | 30 |
</div> |
... | ... | @@ -41,19 +47,30 @@ |
41 | 47 |
alt="" |
42 | 48 |
/> --> |
43 | 49 |
<div class="mt50"> |
44 |
- <input class="yellow-bd" type="text" name="" id="" placeholder="답을 입력하세요." v-model="answer" |
|
45 |
- @change="submitAnswer" /> |
|
50 |
+ <input |
|
51 |
+ class="yellow-bd" |
|
52 |
+ type="text" |
|
53 |
+ name="" |
|
54 |
+ id="" |
|
55 |
+ placeholder="답을 입력하세요." |
|
56 |
+ v-model="answer" |
|
57 |
+ @change="submitAnswer" |
|
58 |
+ /> |
|
46 | 59 |
</div> |
47 | 60 |
</div> |
48 | 61 |
</div> |
49 |
- <button class="submit-button" @click="handleSubmit()" |
|
50 |
- v-if="currentIndex === learningIdsLength - 1">제출하기</button> |
|
51 |
- <button class="submit-button" @click="nextProblem()" |
|
52 |
- v-else>다음 문제로</button> |
|
62 |
+ <button |
|
63 |
+ class="submit-button" |
|
64 |
+ @click="handleSubmit()" |
|
65 |
+ v-if="currentIndex === learningIdsLength - 1" |
|
66 |
+ > |
|
67 |
+ 제출하기 |
|
68 |
+ </button> |
|
69 |
+ <button class="submit-button" @click="nextProblem()" v-else> |
|
70 |
+ 다음 문제로 |
|
71 |
+ </button> |
|
53 | 72 |
</div> |
54 |
- <div class="next-btn" @click=" |
|
55 |
- nextProblem() |
|
56 |
- "> |
|
73 |
+ <div class="next-btn" @click="nextProblem()"> |
|
57 | 74 |
<img src="../../../../resources/img/right.png" alt="" /> |
58 | 75 |
</div> |
59 | 76 |
</div> |
... | ... | @@ -122,29 +139,26 @@ |
122 | 139 |
}, 1000); |
123 | 140 |
}, |
124 | 141 |
handleSubmit() { |
125 |
- |
|
126 | 142 |
const userConfirmed = window.confirm("제출 하시겠습니까?"); |
127 | 143 |
if (userConfirmed) { |
128 |
- |
|
129 | 144 |
const problemData = { |
130 | 145 |
prblmInfo: this.currentLearningId, |
131 | 146 |
prblmNumber: this.currentProblemIndex, |
132 |
- prblmAns: this.selectedButton |
|
147 |
+ prblmAns: this.selectedButton, |
|
133 | 148 |
}; |
134 | 149 |
|
135 | 150 |
const answerData = { |
136 | 151 |
prblmId: this.currentLearningId.prblm_id, |
137 | 152 |
prblmAns: this.selectedButton, |
138 | 153 |
stdId: this.$store.getters.getStdId, |
139 |
- prblmLogAnsCnt: 1 |
|
154 |
+ prblmLogAnsCnt: 1, |
|
140 | 155 |
}; |
141 | 156 |
|
142 |
- this.$store.dispatch('saveProblemData', problemData); |
|
143 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
157 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
158 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
144 | 159 |
|
145 | 160 |
console.log(this.$store.getters.getAllProblems); |
146 | 161 |
console.log(this.$store.getters.getAllAnswers); |
147 |
- |
|
148 | 162 |
|
149 | 163 |
axios({ |
150 | 164 |
url: "problemLog/insertProblemLog.json", |
... | ... | @@ -156,7 +170,7 @@ |
156 | 170 |
}) |
157 | 171 |
.then(function (res) { |
158 | 172 |
console.log("problem - response : ", res.data); |
159 |
- this.goToPage('Chapter4') |
|
173 |
+ this.goToPage("Chapter4"); |
|
160 | 174 |
}) |
161 | 175 |
.catch(function (error) { |
162 | 176 |
console.log("problem - error : ", error); |
... | ... | @@ -191,27 +205,30 @@ |
191 | 205 |
const problemData = { |
192 | 206 |
prblmInfo: this.currentLearningId, |
193 | 207 |
prblmNumber: this.currentProblemIndex, |
194 |
- prblmAns: this.selectedButton |
|
195 |
- } |
|
208 |
+ prblmAns: this.selectedButton, |
|
209 |
+ }; |
|
196 | 210 |
const answerData = { |
197 | 211 |
prblmId: this.currentLearningId.prblm_id, |
198 | 212 |
prblmAns: this.selectedButton, |
199 | 213 |
stdId: this.$store.getters.getStdId, |
200 |
- prblmLogAnsCnt: 1 |
|
201 |
- } |
|
202 |
- this.$store.dispatch('saveProblemData', problemData); |
|
203 |
- this.$store.dispatch('saveProblemAttempt', answerData); |
|
204 |
- console.log(this.$store.getters.getAllProblems) |
|
205 |
- console.log(this.$store.getters.getAllAnswers) |
|
206 |
- if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) { |
|
207 |
- this.$store.dispatch('goToNextProblem'); |
|
214 |
+ prblmLogAnsCnt: 1, |
|
215 |
+ }; |
|
216 |
+ this.$store.dispatch("saveProblemData", problemData); |
|
217 |
+ this.$store.dispatch("saveProblemAttempt", answerData); |
|
218 |
+ console.log(this.$store.getters.getAllProblems); |
|
219 |
+ console.log(this.$store.getters.getAllAnswers); |
|
220 |
+ if ( |
|
221 |
+ this.currentProblemIndex < |
|
222 |
+ this.$store.state.currentLearningIds.length - 1 |
|
223 |
+ ) { |
|
224 |
+ this.$store.dispatch("goToNextProblem"); |
|
208 | 225 |
this.handleProblemDetail(this.currentLearningId); |
209 | 226 |
this.goToPage(this.problemType); |
210 | 227 |
} |
211 | 228 |
}, |
212 | 229 |
previousProblem() { |
213 | 230 |
if (this.currentProblemIndex > 0) { |
214 |
- this.$store.dispatch('goToPreviousProblem'); |
|
231 |
+ this.$store.dispatch("goToPreviousProblem"); |
|
215 | 232 |
this.handleProblemDetail(this.currentLearningId); |
216 | 233 |
this.goToPage(this.problemType); |
217 | 234 |
} |
... | ... | @@ -282,12 +299,12 @@ |
282 | 299 |
}, |
283 | 300 |
isPreviousButtonDisabled() { |
284 | 301 |
return this.currentProblemIndex === 0; |
285 |
- } |
|
302 |
+ }, |
|
286 | 303 |
}, |
287 | 304 |
created() { |
288 |
- console.log('Current Learning ID:', this.currentLearningId); |
|
289 |
- console.log('Current Label:', this.currentLabel); |
|
290 |
- console.log('Current Problem Index:', this.currentProblemIndex); |
|
305 |
+ console.log("Current Learning ID:", this.currentLearningId); |
|
306 |
+ console.log("Current Label:", this.currentLabel); |
|
307 |
+ console.log("Current Problem Index:", this.currentProblemIndex); |
|
291 | 308 |
this.currentIndex = this.currentProblemIndex; |
292 | 309 |
this.learningIdsLength = this.$store.state.currentLearningIds.length; |
293 | 310 |
|
... | ... | @@ -295,7 +312,7 @@ |
295 | 312 |
}, |
296 | 313 |
components: {}, |
297 | 314 |
mounted() { |
298 |
- this.getProblem() |
|
315 |
+ this.getProblem(); |
|
299 | 316 |
}, |
300 | 317 |
}; |
301 | 318 |
</script> |
--- client/views/pages/main/Chapter/Chapter4.vue
+++ client/views/pages/main/Chapter/Chapter4.vue
... | ... | @@ -1,248 +1,264 @@ |
1 | 1 |
<template> |
2 |
- <div id="Chapter1_1" class="content-wrap"> |
|
3 |
- <div style="margin: 30px 0px 50px; width: 20%"> |
|
4 |
- <router-link to="/MyPlan.page"> |
|
5 |
- <div class="logo mb25"> |
|
6 |
- <img src="../../../../resources/img/logo2.png" alt="" /> |
|
7 |
- </div> |
|
8 |
- </router-link> |
|
2 |
+ <div id="Chapter1_1" class="content-wrap"> |
|
3 |
+ <div style="margin: 30px 0px 50px; width: 20%"> |
|
4 |
+ <router-link to="/MyPlan.page"> |
|
5 |
+ <div class="logo mb25"> |
|
6 |
+ <img src="../../../../resources/img/new_img/logo_v2.png" alt="" /> |
|
9 | 7 |
</div> |
10 |
- <div class="title-box mb25 flex align-center mt40"> |
|
11 |
- <span class="title mr40">1. Hello WORLD</span> |
|
12 |
- <span class="subtitle">my name is dd</span> |
|
13 |
- </div> |
|
14 |
- <div class="flex justify-between align-center"> |
|
15 |
- <div class="pre-btn" @click="goToPage('Chapter3_15')"> |
|
16 |
- <img src="../../../../resources/img/left.png" alt="" /> |
|
17 |
- </div> |
|
18 |
- <div class="content title-box"> |
|
19 |
- <p class="title mt25 title-bg">Quiz Result</p> |
|
20 |
- <!-- <div class="flex align-center mb30"> |
|
8 |
+ </router-link> |
|
9 |
+ </div> |
|
10 |
+ <div class="title-box mb25 flex align-center mt40"> |
|
11 |
+ <span class="title mr40">1. Hello WORLD</span> |
|
12 |
+ <span class="subtitle">my name is dd</span> |
|
13 |
+ </div> |
|
14 |
+ <div class="flex justify-between align-center"> |
|
15 |
+ <div class="pre-btn" @click="goToPage('Chapter3_15')"> |
|
16 |
+ <img src="../../../../resources/img/left.png" alt="" /> |
|
17 |
+ </div> |
|
18 |
+ <div class="content title-box"> |
|
19 |
+ <p class="title mt25 title-bg">Quiz Result</p> |
|
20 |
+ <!-- <div class="flex align-center mb30"> |
|
21 | 21 |
<p class="subtitle2 mr20"></p> |
22 | 22 |
<button><img src="../../../../resources/img/btn10_s.png" alt=""> |
23 | 23 |
</button> |
24 | 24 |
</div> --> |
25 | 25 |
|
26 |
- <div class="text-ct flex justify-center" style="gap: 150px; margin: 0 auto"> |
|
27 |
- <div class="wrap-bg"> |
|
28 |
- <div class="title-box flex mb10 justify-between"> |
|
29 |
- <p class="title mb20">최종 점수</p> |
|
30 |
- <button type="button" class="popup-close-btn" @click="closeBtn"> |
|
31 |
- <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon> |
|
32 |
- </button> |
|
33 |
- </div> |
|
34 |
- <div style="width: 100%" class="flex mt30"> |
|
35 |
- <p class="title5"><em class="yellow">93</em></p> |
|
36 |
- <p class="title4 ml10 mr10">/</p> |
|
37 |
- <p class="title4">100</p> |
|
38 |
- </div> |
|
39 |
- </div> |
|
40 |
- <div class="bg-gray" style="width: 980px"> |
|
41 |
- <div class="title-box flex mb10 justify-between"> |
|
42 |
- <p class="title mb20">오답 문제 리스트</p> |
|
43 |
- <button type="button" class="popup-close-btn" @click="closeBtn"> |
|
44 |
- <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon> |
|
45 |
- </button> |
|
46 |
- </div> |
|
47 |
- <article class="mb20 flex-column result-box" style="gap: 20px"> |
|
48 |
- <div class="flex justify-between wrap" v-for="(item, index) in dataList" :key="index"> |
|
49 |
- <div class="flex align-center"> |
|
50 |
- <div> |
|
51 |
- <p class="title1 mr20"> |
|
52 |
- {{ index + 1 }} |
|
53 |
- </p> |
|
54 |
- </div> |
|
55 |
- <div class="text-lf"> |
|
56 |
- <p class="title1"> |
|
57 |
- {{ item.prblmInfo.prblm_expln }} |
|
58 |
- </p> |
|
59 |
- </div> |
|
60 |
- </div> |
|
61 |
- <div> |
|
62 |
- <div class="flex align-center" style="gap: 10px"> |
|
63 |
- <button type="button" title="정답 확인" class="yellow-btn" @click=" |
|
64 |
- [ |
|
65 |
- handleProblemDetail(item.prblmInfo), |
|
66 |
- goToProblemPage( |
|
67 |
- problemType |
|
68 |
- ), |
|
69 |
- ] |
|
70 |
- "> |
|
71 |
- 정답 확인 |
|
72 |
- </button> |
|
73 |
- </div> |
|
74 |
- </div> |
|
75 |
- </div> |
|
76 |
- </article> |
|
77 |
- </div> |
|
26 |
+ <div |
|
27 |
+ class="text-ct flex justify-center" |
|
28 |
+ style="gap: 150px; margin: 0 auto" |
|
29 |
+ > |
|
30 |
+ <div class="wrap-bg"> |
|
31 |
+ <div class="title-box flex mb10 justify-between"> |
|
32 |
+ <p class="title mb20">최종 점수</p> |
|
33 |
+ <button type="button" class="popup-close-btn" @click="closeBtn"> |
|
34 |
+ <svg-icon |
|
35 |
+ type="mdi" |
|
36 |
+ :path="mdiWindowClose" |
|
37 |
+ class="close-btn" |
|
38 |
+ ></svg-icon> |
|
39 |
+ </button> |
|
40 |
+ </div> |
|
41 |
+ <div style="width: 100%" class="flex mt30"> |
|
42 |
+ <p class="title5"><em class="yellow">93</em></p> |
|
43 |
+ <p class="title4 ml10 mr10">/</p> |
|
44 |
+ <p class="title4">100</p> |
|
45 |
+ </div> |
|
46 |
+ </div> |
|
47 |
+ <div class="bg-gray" style="width: 980px"> |
|
48 |
+ <div class="title-box flex mb10 justify-between"> |
|
49 |
+ <p class="title mb20">오답 문제 리스트</p> |
|
50 |
+ <button type="button" class="popup-close-btn" @click="closeBtn"> |
|
51 |
+ <svg-icon |
|
52 |
+ type="mdi" |
|
53 |
+ :path="mdiWindowClose" |
|
54 |
+ class="close-btn" |
|
55 |
+ ></svg-icon> |
|
56 |
+ </button> |
|
57 |
+ </div> |
|
58 |
+ <article class="mb20 flex-column result-box" style="gap: 20px"> |
|
59 |
+ <div |
|
60 |
+ class="flex justify-between wrap" |
|
61 |
+ v-for="(item, index) in dataList" |
|
62 |
+ :key="index" |
|
63 |
+ > |
|
64 |
+ <div class="flex align-center"> |
|
65 |
+ <div> |
|
66 |
+ <p class="title1 mr20"> |
|
67 |
+ {{ index + 1 }} |
|
68 |
+ </p> |
|
69 |
+ </div> |
|
70 |
+ <div class="text-lf"> |
|
71 |
+ <p class="title1"> |
|
72 |
+ {{ item.prblmInfo.prblm_expln }} |
|
73 |
+ </p> |
|
74 |
+ </div> |
|
78 | 75 |
</div> |
79 |
- </div> |
|
80 |
- <div class="next-btn" @click="goToPage('Chapter3_16')"> |
|
81 |
- <img src="../../../../resources/img/right.png" alt="" /> |
|
82 |
- </div> |
|
76 |
+ <div> |
|
77 |
+ <div class="flex align-center" style="gap: 10px"> |
|
78 |
+ <button |
|
79 |
+ type="button" |
|
80 |
+ title="정답 확인" |
|
81 |
+ class="yellow-btn" |
|
82 |
+ @click=" |
|
83 |
+ [ |
|
84 |
+ handleProblemDetail(item.prblmInfo), |
|
85 |
+ goToProblemPage(problemType), |
|
86 |
+ ] |
|
87 |
+ " |
|
88 |
+ > |
|
89 |
+ 정답 확인 |
|
90 |
+ </button> |
|
91 |
+ </div> |
|
92 |
+ </div> |
|
93 |
+ </div> |
|
94 |
+ </article> |
|
95 |
+ </div> |
|
83 | 96 |
</div> |
97 |
+ </div> |
|
98 |
+ <div class="next-btn" @click="goToPage('Chapter3_16')"> |
|
99 |
+ <img src="../../../../resources/img/right.png" alt="" /> |
|
100 |
+ </div> |
|
84 | 101 |
</div> |
102 |
+ </div> |
|
85 | 103 |
</template> |
86 | 104 |
|
87 | 105 |
<script> |
88 | 106 |
import axios from "axios"; |
89 | 107 |
|
90 | 108 |
export default { |
91 |
- data() { |
|
92 |
- return { |
|
93 |
- timer: "00", |
|
94 |
- showButton1: false, |
|
95 |
- showButton2: false, |
|
96 |
- showButton3: false, |
|
97 |
- showButton4: false, |
|
109 |
+ data() { |
|
110 |
+ return { |
|
111 |
+ timer: "00", |
|
112 |
+ showButton1: false, |
|
113 |
+ showButton2: false, |
|
114 |
+ showButton3: false, |
|
115 |
+ showButton4: false, |
|
98 | 116 |
|
99 |
- // 단원 평가 아이디, 추후 세션으로 받게 변경 |
|
100 |
- evalId: "", |
|
117 |
+ // 단원 평가 아이디, 추후 세션으로 받게 변경 |
|
118 |
+ evalId: "", |
|
101 | 119 |
|
102 |
- dataList: [], |
|
120 |
+ dataList: [], |
|
103 | 121 |
|
104 |
- prblmId: "", |
|
122 |
+ prblmId: "", |
|
105 | 123 |
|
106 |
- problemType: null, |
|
107 |
- }; |
|
124 |
+ problemType: null, |
|
125 |
+ }; |
|
126 |
+ }, |
|
127 |
+ methods: { |
|
128 |
+ goToPage(page) { |
|
129 |
+ this.$router.push({ name: page }); |
|
108 | 130 |
}, |
109 |
- methods: { |
|
110 |
- goToPage(page) { |
|
111 |
- this.$router.push({ name: page }); |
|
112 |
- }, |
|
113 |
- goToProblemPage(page) { |
|
114 |
- this.$router.push({ name: page }); |
|
115 |
- }, |
|
116 |
- handleDrag(dragNumber) { |
|
117 |
- // Drag 버튼 숨기기 |
|
118 |
- // 여기서는 상태 관리를 통해 버튼을 제어합니다. |
|
119 |
- if (dragNumber === 1) { |
|
120 |
- this.showButton1 = false; |
|
121 |
- } else if (dragNumber === 2) { |
|
122 |
- this.showButton2 = false; |
|
123 |
- } else if (dragNumber === 3) { |
|
124 |
- this.showButton3 = false; |
|
125 |
- } |
|
126 |
- }, |
|
127 |
- showButton(dropNumber) { |
|
128 |
- // Drop 영역의 이미지 클릭 이벤트 핸들러 설정 |
|
129 |
- // 여기서는 상태 관리를 통해 버튼을 보이게 합니다. |
|
130 |
- if (dropNumber === 1) { |
|
131 |
- this.showButton1 = true; |
|
132 |
- } else if (dropNumber === 2) { |
|
133 |
- this.showButton2 = true; |
|
134 |
- } else if (dropNumber === 3) { |
|
135 |
- this.showButton3 = true; |
|
136 |
- } else if (dropNumber === 4) { |
|
137 |
- this.showButton4 = true; |
|
138 |
- } |
|
139 |
- }, |
|
140 |
- startTimer() { |
|
141 |
- if (this.intervalId) { |
|
142 |
- clearInterval(this.intervalId); |
|
143 |
- } |
|
144 |
- this.timer = 5; |
|
145 |
- this.intervalId = setInterval(() => { |
|
146 |
- if (this.timer > 0) { |
|
147 |
- this.timer--; |
|
148 |
- } else { |
|
149 |
- clearInterval(this.intervalId); |
|
150 |
- } |
|
151 |
- }, 1000); |
|
152 |
- }, |
|
153 |
- problemList() { |
|
154 |
- }, |
|
131 |
+ goToProblemPage(page) { |
|
132 |
+ this.$router.push({ name: page }); |
|
133 |
+ }, |
|
134 |
+ handleDrag(dragNumber) { |
|
135 |
+ // Drag 버튼 숨기기 |
|
136 |
+ // 여기서는 상태 관리를 통해 버튼을 제어합니다. |
|
137 |
+ if (dragNumber === 1) { |
|
138 |
+ this.showButton1 = false; |
|
139 |
+ } else if (dragNumber === 2) { |
|
140 |
+ this.showButton2 = false; |
|
141 |
+ } else if (dragNumber === 3) { |
|
142 |
+ this.showButton3 = false; |
|
143 |
+ } |
|
144 |
+ }, |
|
145 |
+ showButton(dropNumber) { |
|
146 |
+ // Drop 영역의 이미지 클릭 이벤트 핸들러 설정 |
|
147 |
+ // 여기서는 상태 관리를 통해 버튼을 보이게 합니다. |
|
148 |
+ if (dropNumber === 1) { |
|
149 |
+ this.showButton1 = true; |
|
150 |
+ } else if (dropNumber === 2) { |
|
151 |
+ this.showButton2 = true; |
|
152 |
+ } else if (dropNumber === 3) { |
|
153 |
+ this.showButton3 = true; |
|
154 |
+ } else if (dropNumber === 4) { |
|
155 |
+ this.showButton4 = true; |
|
156 |
+ } |
|
157 |
+ }, |
|
158 |
+ startTimer() { |
|
159 |
+ if (this.intervalId) { |
|
160 |
+ clearInterval(this.intervalId); |
|
161 |
+ } |
|
162 |
+ this.timer = 5; |
|
163 |
+ this.intervalId = setInterval(() => { |
|
164 |
+ if (this.timer > 0) { |
|
165 |
+ this.timer--; |
|
166 |
+ } else { |
|
167 |
+ clearInterval(this.intervalId); |
|
168 |
+ } |
|
169 |
+ }, 1000); |
|
170 |
+ }, |
|
171 |
+ problemList() {}, |
|
155 | 172 |
|
156 |
- handleProblemDetail(item) { |
|
157 |
- if (item.prblm_type_id === "prblm_type_001") { |
|
158 |
- this.problemType = "Chapter3"; |
|
159 |
- } else if (item.prblm_type_id === "prblm_type_002") { |
|
160 |
- this.problemType = "Chapter3_1"; |
|
161 |
- } else if (item.prblm_type_id === "prblm_type_003") { |
|
162 |
- this.problemType = "Chapter3_2"; |
|
163 |
- } else if (item.prblm_type_id === "prblm_type_004") { |
|
164 |
- this.problemType = "Chapter3_3"; |
|
165 |
- } else if (item.prblm_type_id === "prblm_type_005") { |
|
166 |
- this.problemType = "Chapter3_3_1"; |
|
167 |
- } else if (item.prblm_type_id === "prblm_type_006") { |
|
168 |
- this.problemType = "Chapter3_4"; |
|
169 |
- } else if (item.prblm_type_id === "prblm_type_007") { |
|
170 |
- this.problemType = "Chapter3_5"; |
|
171 |
- } else if (item.prblm_type_id === "prblm_type_008") { |
|
172 |
- this.problemType = "Chapter3_6"; |
|
173 |
- } else if (item.prblm_type_id === "prblm_type_009") { |
|
174 |
- this.problemType = "Chapter3_7"; |
|
175 |
- } else if (item.prblm_type_id === "prblm_type_010") { |
|
176 |
- this.problemType = "Chapter3_8"; |
|
177 |
- } else if (item.prblm_type_id === "prblm_type_011") { |
|
178 |
- this.problemType = "Chapter3_9"; |
|
179 |
- } else if (item.prblm_type_id === "prblm_type_012") { |
|
180 |
- this.problemType = "Chapter3_10"; |
|
181 |
- } else if (item.prblm_type_id === "prblm_type_013") { |
|
182 |
- this.problemType = "Chapter3_11"; |
|
183 |
- } else if (item.prblm_type_id === "prblm_type_014") { |
|
184 |
- this.problemType = "Chapter3_12"; |
|
185 |
- } else if (item.prblm_type_id === "prblm_type_015") { |
|
186 |
- this.problemType = "Chapter3_13"; |
|
187 |
- } else if (item.prblm_type_id === "prblm_type_016") { |
|
188 |
- this.problemType = "Chapter3_14"; |
|
189 |
- } else if (item.prblm_type_id === "prblm_type_017") { |
|
190 |
- this.problemType = "Chapter3_15"; |
|
191 |
- } else if (item.prblm_type_id === "prblm_type_018") { |
|
192 |
- this.problemType = "Chapter2_8"; |
|
193 |
- } else if (item.prblm_type_id === "prblm_type_019") { |
|
194 |
- this.problemType = "Chapter2_7"; |
|
195 |
- } else if (item.prblm_type_id === "prblm_type_020") { |
|
196 |
- this.problemType = "Chapter2_5"; |
|
197 |
- } else if (item.prblm_type_id === "prblm_type_021") { |
|
198 |
- this.problemType = "Chapter2_6"; |
|
199 |
- } else if (item.prblm_type_id === "prblm_type_022") { |
|
200 |
- this.problemType = "Chapter2_10"; |
|
201 |
- } else if (item.prblm_type_id === "prblm_type_023") { |
|
202 |
- this.problemType = "Chapter2_11"; |
|
203 |
- } else if (item.prblm_type_id === "prblm_type_024") { |
|
204 |
- this.problemType = "Chapter2_13"; |
|
205 |
- } |
|
206 |
- }, |
|
173 |
+ handleProblemDetail(item) { |
|
174 |
+ if (item.prblm_type_id === "prblm_type_001") { |
|
175 |
+ this.problemType = "Chapter3"; |
|
176 |
+ } else if (item.prblm_type_id === "prblm_type_002") { |
|
177 |
+ this.problemType = "Chapter3_1"; |
|
178 |
+ } else if (item.prblm_type_id === "prblm_type_003") { |
|
179 |
+ this.problemType = "Chapter3_2"; |
|
180 |
+ } else if (item.prblm_type_id === "prblm_type_004") { |
|
181 |
+ this.problemType = "Chapter3_3"; |
|
182 |
+ } else if (item.prblm_type_id === "prblm_type_005") { |
|
183 |
+ this.problemType = "Chapter3_3_1"; |
|
184 |
+ } else if (item.prblm_type_id === "prblm_type_006") { |
|
185 |
+ this.problemType = "Chapter3_4"; |
|
186 |
+ } else if (item.prblm_type_id === "prblm_type_007") { |
|
187 |
+ this.problemType = "Chapter3_5"; |
|
188 |
+ } else if (item.prblm_type_id === "prblm_type_008") { |
|
189 |
+ this.problemType = "Chapter3_6"; |
|
190 |
+ } else if (item.prblm_type_id === "prblm_type_009") { |
|
191 |
+ this.problemType = "Chapter3_7"; |
|
192 |
+ } else if (item.prblm_type_id === "prblm_type_010") { |
|
193 |
+ this.problemType = "Chapter3_8"; |
|
194 |
+ } else if (item.prblm_type_id === "prblm_type_011") { |
|
195 |
+ this.problemType = "Chapter3_9"; |
|
196 |
+ } else if (item.prblm_type_id === "prblm_type_012") { |
|
197 |
+ this.problemType = "Chapter3_10"; |
|
198 |
+ } else if (item.prblm_type_id === "prblm_type_013") { |
|
199 |
+ this.problemType = "Chapter3_11"; |
|
200 |
+ } else if (item.prblm_type_id === "prblm_type_014") { |
|
201 |
+ this.problemType = "Chapter3_12"; |
|
202 |
+ } else if (item.prblm_type_id === "prblm_type_015") { |
|
203 |
+ this.problemType = "Chapter3_13"; |
|
204 |
+ } else if (item.prblm_type_id === "prblm_type_016") { |
|
205 |
+ this.problemType = "Chapter3_14"; |
|
206 |
+ } else if (item.prblm_type_id === "prblm_type_017") { |
|
207 |
+ this.problemType = "Chapter3_15"; |
|
208 |
+ } else if (item.prblm_type_id === "prblm_type_018") { |
|
209 |
+ this.problemType = "Chapter2_8"; |
|
210 |
+ } else if (item.prblm_type_id === "prblm_type_019") { |
|
211 |
+ this.problemType = "Chapter2_7"; |
|
212 |
+ } else if (item.prblm_type_id === "prblm_type_020") { |
|
213 |
+ this.problemType = "Chapter2_5"; |
|
214 |
+ } else if (item.prblm_type_id === "prblm_type_021") { |
|
215 |
+ this.problemType = "Chapter2_6"; |
|
216 |
+ } else if (item.prblm_type_id === "prblm_type_022") { |
|
217 |
+ this.problemType = "Chapter2_10"; |
|
218 |
+ } else if (item.prblm_type_id === "prblm_type_023") { |
|
219 |
+ this.problemType = "Chapter2_11"; |
|
220 |
+ } else if (item.prblm_type_id === "prblm_type_024") { |
|
221 |
+ this.problemType = "Chapter2_13"; |
|
222 |
+ } |
|
207 | 223 |
}, |
208 |
- watch: {}, |
|
209 |
- computed: { |
|
210 |
- getAllProblems() { |
|
211 |
- return this.$store.getters.getAllProblems; |
|
212 |
- }, |
|
224 |
+ }, |
|
225 |
+ watch: {}, |
|
226 |
+ computed: { |
|
227 |
+ getAllProblems() { |
|
228 |
+ return this.$store.getters.getAllProblems; |
|
213 | 229 |
}, |
214 |
- created() { |
|
215 |
- console.log('Problem List :', this.getAllProblems); |
|
216 |
- this.dataList = this.getAllProblems; |
|
217 |
- this.evalId = this.$route.query.eval_id; |
|
218 |
- |
|
219 |
- }, |
|
220 |
- components: {}, |
|
221 |
- mounted() { |
|
222 |
- this.problemList(); |
|
223 |
- }, |
|
230 |
+ }, |
|
231 |
+ created() { |
|
232 |
+ console.log("Problem List :", this.getAllProblems); |
|
233 |
+ this.dataList = this.getAllProblems; |
|
234 |
+ this.evalId = this.$route.query.eval_id; |
|
235 |
+ }, |
|
236 |
+ components: {}, |
|
237 |
+ mounted() { |
|
238 |
+ this.problemList(); |
|
239 |
+ }, |
|
224 | 240 |
}; |
225 | 241 |
</script> |
226 | 242 |
<style scoped> |
227 | 243 |
.textbox { |
228 |
- height: 60px; |
|
244 |
+ height: 60px; |
|
229 | 245 |
} |
230 | 246 |
|
231 | 247 |
.textbox p { |
232 |
- font-size: 28px; |
|
233 |
- font-weight: bold; |
|
234 |
- line-height: 65px; |
|
248 |
+ font-size: 28px; |
|
249 |
+ font-weight: bold; |
|
250 |
+ line-height: 65px; |
|
235 | 251 |
} |
236 | 252 |
|
237 | 253 |
.dropGroup button { |
238 |
- position: relative; |
|
254 |
+ position: relative; |
|
239 | 255 |
} |
240 | 256 |
|
241 | 257 |
.dropGroup button p { |
242 |
- font-size: 48px; |
|
258 |
+ font-size: 48px; |
|
243 | 259 |
} |
244 | 260 |
|
245 | 261 |
.dragGroup button p { |
246 |
- font-size: 48px; |
|
262 |
+ font-size: 48px; |
|
247 | 263 |
} |
248 | 264 |
</style> |
--- client/views/pages/main/Dashboard.vue
+++ client/views/pages/main/Dashboard.vue
... | ... | @@ -1,36 +1,22 @@ |
1 | 1 |
<template> |
2 |
- <p |
|
3 |
- class="title1" |
|
4 |
- v-if="state === 'finish'" |
|
5 |
- style="position: absolute; top: 50%; transform: translate(0, -50%)" |
|
6 |
- > |
|
2 |
+ <p class="title1" v-if="state === 'finish'" style="position: absolute; top: 50%; transform: translate(0, -50%)"> |
|
7 | 3 |
오늘 공부를 다했어요! 너무 고생했어요! |
8 | 4 |
</p> |
9 |
- <div |
|
10 |
- class="title1" |
|
11 |
- v-else-if="state === 'notRegistered'" |
|
12 |
- style="position: absolute; top: 50%; transform: translate(0, -50%)" |
|
13 |
- > |
|
14 |
- <div> |
|
15 |
- <h3> |
|
16 |
- 지금은 학습 루트가 등록이 안됐어요! 학습 일정에서 학습루트를 |
|
5 |
+ <div class="title1" v-else-if="state === 'notRegistered'" |
|
6 |
+ style="position: absolute;top: 50%;transform: translate(-50%, -50%);left: 50%;"> |
|
7 |
+ <div class="title-box" style="text-align: center;"> |
|
8 |
+ <img src="../../../resources/img/new_img/dashboard/rabbit.png"> |
|
9 |
+ <h3 class="title" style=" margin-top: 1em; letter-spacing: 2px; line-height: 42px; font-size: 30px"> |
|
10 |
+ 지금은 학습 루트가 등록이 안됐어요! <br> 학습 일정에서 학습루트를 |
|
17 | 11 |
등록해볼까요? |
18 | 12 |
</h3> |
19 |
- <button |
|
20 |
- type="button" |
|
21 |
- title="바로가기" |
|
22 |
- class="yellow-btn" |
|
23 |
- @click="goToPage2('MyPlan2')" |
|
24 |
- > |
|
25 |
- 바로가기 |
|
26 |
- </button> |
|
13 |
+ <div @click="goToPage2('MyPlan2')" style="cursor: pointer; margin-top: 2em;"> |
|
14 |
+ <img src="../../../resources/img/new_img/dashboard/btn.png"> |
|
15 |
+ </div> |
|
27 | 16 |
</div> |
28 | 17 |
</div> |
29 |
- <p |
|
30 |
- class="title1" |
|
31 |
- v-else-if="state === 'noProblem'" |
|
32 |
- style="position: absolute; top: 50%; transform: translate(0, -50%)" |
|
33 |
- > |
|
18 |
+ <p class="title1" v-else-if="state === 'noProblem'" |
|
19 |
+ style="position: absolute; top: 50%; transform: translate(0, -50%)"> |
|
34 | 20 |
교재에 등록된 문제가 없습니다. |
35 | 21 |
</p> |
36 | 22 |
<div v-else class="main"> |
... | ... | @@ -41,95 +27,46 @@ |
41 | 27 |
</div> --> |
42 | 28 |
<div class="race-box"> |
43 | 29 |
<div class="rabbit-start"> |
44 |
- <img |
|
45 |
- src="../../../resources/img/new_img/rabbit.png" |
|
46 |
- alt="" |
|
47 |
- :style="{ display: rabbitPos[0] ? 'block' : 'none' }" |
|
48 |
- /> |
|
30 |
+ <img src="../../../resources/img/new_img/rabbit.png" alt="" |
|
31 |
+ :style="{ display: rabbitPos[0] ? 'block' : 'none' }" /> |
|
49 | 32 |
</div> |
50 | 33 |
<!-- 1번째줄 --> |
51 |
- <div |
|
52 |
- class="rcon flex justify-end mb5" |
|
53 |
- style="position: relative; top: 24px" |
|
54 |
- > |
|
34 |
+ <div class="rcon flex justify-end mb5" style="position: relative; top: 24px"> |
|
55 | 35 |
<!-- 1 --> |
56 | 36 |
<div class="race-btn" @click="[storeLearningId(labeledItems[0])]"> |
57 | 37 |
<div class="rabbit-running"> |
58 |
- <img |
|
59 |
- src="../../../resources/img/new_img/rabbit.png" |
|
60 |
- alt="" |
|
61 |
- :style="{ display: rabbitPos[1] ? 'block' : 'none' }" |
|
62 |
- /> |
|
38 |
+ <img src="../../../resources/img/new_img/rabbit.png" alt="" |
|
39 |
+ :style="{ display: rabbitPos[1] ? 'block' : 'none' }" /> |
|
63 | 40 |
</div> |
64 |
- <button |
|
65 |
- class="popTxt" |
|
66 |
- v-for="(item, index) in items" |
|
67 |
- :key="index" |
|
68 |
- @click="toggleImage(index)" |
|
69 |
- data-num="1" |
|
70 |
- > |
|
41 |
+ <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="1"> |
|
71 | 42 |
<div class="image-container"> |
72 |
- <img |
|
73 |
- src="../../../resources/img/new_img/board/racebtn_1.png" |
|
74 |
- alt="Race Button" |
|
75 |
- class="base-img" |
|
76 |
- /> |
|
77 |
- <img |
|
78 |
- v-if="rabbitCompl[1]" |
|
79 |
- src="../../../resources/img/new_img/icon/clear_img.png" |
|
80 |
- alt="Clear Icon" |
|
81 |
- class="clear-img" |
|
82 |
- /> |
|
43 |
+ <img src="../../../resources/img/new_img/board/racebtn_1.png" alt="Race Button" class="base-img" /> |
|
44 |
+ <img v-if="rabbitCompl[1]" src="../../../resources/img/new_img/icon/clear_img.png" alt="Clear Icon" |
|
45 |
+ class="clear-img" /> |
|
83 | 46 |
</div> |
84 | 47 |
</button> |
85 | 48 |
<p :class="!rabbitCompl[1] ? 'before-clear' : 'clear'"> |
86 |
- <img |
|
87 |
- v-if="rabbitCompl[1]" |
|
88 |
- src="../../../resources/img/new_img/icon/complete_icon.png" |
|
89 |
- alt="Complete Icon" |
|
90 |
- class="complete-icon" |
|
91 |
- /> |
|
49 |
+ <img v-if="rabbitCompl[1]" src="../../../resources/img/new_img/icon/complete_icon.png" alt="Complete Icon" |
|
50 |
+ class="complete-icon" /> |
|
92 | 51 |
{{ labeledItems[0].label }} |
93 | 52 |
</p> |
94 | 53 |
</div> |
95 | 54 |
<!-- 2 --> |
96 | 55 |
<div class="race-btn" @click="[storeLearningId(labeledItems[1])]"> |
97 | 56 |
<div class="rabbit-running"> |
98 |
- <img |
|
99 |
- src="../../../resources/img/new_img/rabbit.png" |
|
100 |
- alt="" |
|
101 |
- :style="{ display: rabbitPos[2] ? 'block' : 'none' }" |
|
102 |
- /> |
|
57 |
+ <img src="../../../resources/img/new_img/rabbit.png" alt="" |
|
58 |
+ :style="{ display: rabbitPos[2] ? 'block' : 'none' }" /> |
|
103 | 59 |
</div> |
104 |
- <button |
|
105 |
- class="popTxt" |
|
106 |
- v-for="(item, index) in items" |
|
107 |
- :key="index" |
|
108 |
- @click="toggleImage(index)" |
|
109 |
- data-num="2" |
|
110 |
- > |
|
60 |
+ <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="2"> |
|
111 | 61 |
<div class="image-container"> |
112 |
- <img |
|
113 |
- src="../../../resources/img/new_img/board/racebtn_2.png" |
|
114 |
- alt="Race Button" |
|
115 |
- class="base-img" |
|
116 |
- /> |
|
117 |
- <img |
|
118 |
- v-if="rabbitCompl[2]" |
|
119 |
- src="../../../resources/img/new_img/icon/clear_img.png" |
|
120 |
- alt="Clear Icon" |
|
121 |
- class="clear-img" |
|
122 |
- style="position: absolute; left: 16px" |
|
123 |
- /> |
|
62 |
+ <img src="../../../resources/img/new_img/board/racebtn_2.png" alt="Race Button" class="base-img" /> |
|
63 |
+ <img v-if="rabbitCompl[2]" src="../../../resources/img/new_img/icon/clear_img.png" alt="Clear Icon" |
|
64 |
+ class="clear-img" style="position: absolute; left: 16px" /> |
|
124 | 65 |
</div> |
125 | 66 |
</button> |
126 | 67 |
<p :class="!rabbitCompl[2] ? 'before-clear' : 'clear'"> |
127 |
- <img |
|
128 |
- v-if="rabbitCompl[2]" |
|
129 |
- src="../../../resources/img/new_img/icon/complete_icon.png" |
|
130 |
- alt="Complete Icon" |
|
131 |
- class="complete-icon" |
|
132 |
- /> |
|
68 |
+ <img v-if="rabbitCompl[2]" src="../../../resources/img/new_img/icon/complete_icon.png" alt="Complete Icon" |
|
69 |
+ class="complete-icon" /> |
|
133 | 70 |
{{ labeledItems[1].label }} |
134 | 71 |
</p> |
135 | 72 |
</div> |
... | ... | @@ -139,213 +76,96 @@ |
139 | 76 |
<!-- 7 --> |
140 | 77 |
<div class="race-btn" @click="[storeLearningId(labeledItems[6])]"> |
141 | 78 |
<div class="rabbit-running" style="top: -71px"> |
142 |
- <img |
|
143 |
- src="../../../resources/img/new_img/rabbit.png" |
|
144 |
- alt="" |
|
145 |
- :style="{ display: rabbitPos[7] ? 'block' : 'none' }" |
|
146 |
- /> |
|
79 |
+ <img src="../../../resources/img/new_img/rabbit.png" alt="" |
|
80 |
+ :style="{ display: rabbitPos[7] ? 'block' : 'none' }" /> |
|
147 | 81 |
</div> |
148 |
- <button |
|
149 |
- class="popTxt" |
|
150 |
- v-for="(item, index) in items" |
|
151 |
- :key="index" |
|
152 |
- @click="toggleImage(index)" |
|
153 |
- data-num="7" |
|
154 |
- style="top: -53px; position: relative" |
|
155 |
- > |
|
82 |
+ <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="7" |
|
83 |
+ style="top: -53px; position: relative"> |
|
156 | 84 |
<div class="image-container"> |
157 |
- <img |
|
158 |
- src="../../../resources/img/new_img/board/racebtn_7.png" |
|
159 |
- alt="Race Button" |
|
160 |
- class="base-img" |
|
161 |
- /> |
|
162 |
- <img |
|
163 |
- v-if="rabbitCompl[7]" |
|
164 |
- src="../../../resources/img/new_img/icon/clear_img.png" |
|
165 |
- alt="Clear Icon" |
|
166 |
- class="clear-img" |
|
167 |
- style="position: absolute; top: 85px" |
|
168 |
- /> |
|
85 |
+ <img src="../../../resources/img/new_img/board/racebtn_7.png" alt="Race Button" class="base-img" /> |
|
86 |
+ <img v-if="rabbitCompl[7]" src="../../../resources/img/new_img/icon/clear_img.png" alt="Clear Icon" |
|
87 |
+ class="clear-img" style="position: absolute; top: 85px" /> |
|
169 | 88 |
</div> |
170 | 89 |
</button> |
171 |
- <p |
|
172 |
- :class="!rabbitCompl[7] ? 'before-clear' : 'clear'" |
|
173 |
- style="position: relative; top: -53px; left: -10px" |
|
174 |
- > |
|
175 |
- <img |
|
176 |
- v-if="rabbitCompl[7]" |
|
177 |
- src="../../../resources/img/new_img/icon/complete_icon.png" |
|
178 |
- alt="Complete Icon" |
|
179 |
- class="complete-icon" |
|
180 |
- /> |
|
90 |
+ <p :class="!rabbitCompl[7] ? 'before-clear' : 'clear'" style="position: relative; top: -53px; left: -10px"> |
|
91 |
+ <img v-if="rabbitCompl[7]" src="../../../resources/img/new_img/icon/complete_icon.png" alt="Complete Icon" |
|
92 |
+ class="complete-icon" /> |
|
181 | 93 |
{{ labeledItems[6].label }} |
182 | 94 |
</p> |
183 | 95 |
</div> |
184 | 96 |
<!-- 6 --> |
185 | 97 |
<div class="race-btn" @click="[storeLearningId(labeledItems[5])]"> |
186 | 98 |
<div class="rabbit-running"> |
187 |
- <img |
|
188 |
- src="../../../resources/img/new_img/rabbit.png" |
|
189 |
- alt="" |
|
190 |
- :style="{ display: rabbitPos[6] ? 'block' : 'none' }" |
|
191 |
- /> |
|
99 |
+ <img src="../../../resources/img/new_img/rabbit.png" alt="" |
|
100 |
+ :style="{ display: rabbitPos[6] ? 'block' : 'none' }" /> |
|
192 | 101 |
</div> |
193 |
- <button |
|
194 |
- class="popTxt" |
|
195 |
- v-for="(item, index) in items" |
|
196 |
- :key="index" |
|
197 |
- @click="toggleImage(index)" |
|
198 |
- data-num="6" |
|
199 |
- > |
|
102 |
+ <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="6"> |
|
200 | 103 |
<div class="image-container"> |
201 |
- <img |
|
202 |
- src="../../../resources/img/new_img/board/racebtn_6.png" |
|
203 |
- alt="Race Button" |
|
204 |
- class="base-img" |
|
205 |
- /> |
|
206 |
- <img |
|
207 |
- v-if="rabbitCompl[6]" |
|
208 |
- src="../../../resources/img/new_img/icon/clear_img.png" |
|
209 |
- alt="Clear Icon" |
|
210 |
- class="clear-img" |
|
211 |
- /> |
|
104 |
+ <img src="../../../resources/img/new_img/board/racebtn_6.png" alt="Race Button" class="base-img" /> |
|
105 |
+ <img v-if="rabbitCompl[6]" src="../../../resources/img/new_img/icon/clear_img.png" alt="Clear Icon" |
|
106 |
+ class="clear-img" /> |
|
212 | 107 |
</div> |
213 | 108 |
</button> |
214 | 109 |
<p :class="!rabbitCompl[6] ? 'before-clear' : 'clear'"> |
215 |
- <img |
|
216 |
- v-if="rabbitCompl[6]" |
|
217 |
- src="../../../resources/img/new_img/icon/complete_icon.png" |
|
218 |
- alt="Complete Icon" |
|
219 |
- class="complete-icon" |
|
220 |
- /> |
|
110 |
+ <img v-if="rabbitCompl[6]" src="../../../resources/img/new_img/icon/complete_icon.png" alt="Complete Icon" |
|
111 |
+ class="complete-icon" /> |
|
221 | 112 |
{{ labeledItems[5].label }} |
222 | 113 |
</p> |
223 | 114 |
</div> |
224 | 115 |
<!-- 5 --> |
225 |
- <div |
|
226 |
- class="race-btn" |
|
227 |
- @click="[storeLearningId(labeledItems[4])]" |
|
228 |
- style="position: relative; left: -31px" |
|
229 |
- > |
|
116 |
+ <div class="race-btn" @click="[storeLearningId(labeledItems[4])]" style="position: relative; left: -31px"> |
|
230 | 117 |
<div class="rabbit-running"> |
231 |
- <img |
|
232 |
- src="../../../resources/img/new_img/rabbit.png" |
|
233 |
- alt="" |
|
234 |
- :style="{ display: rabbitPos[5] ? 'block' : 'none' }" |
|
235 |
- /> |
|
118 |
+ <img src="../../../resources/img/new_img/rabbit.png" alt="" |
|
119 |
+ :style="{ display: rabbitPos[5] ? 'block' : 'none' }" /> |
|
236 | 120 |
</div> |
237 |
- <button |
|
238 |
- class="popTxt" |
|
239 |
- v-for="(item, index) in items" |
|
240 |
- :key="index" |
|
241 |
- @click="toggleImage(index)" |
|
242 |
- data-num="5" |
|
243 |
- > |
|
121 |
+ <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="5"> |
|
244 | 122 |
<div class="image-container"> |
245 |
- <img |
|
246 |
- src="../../../resources/img/new_img/board/racebtn_5.png" |
|
247 |
- alt="Race Button" |
|
248 |
- class="base-img" |
|
249 |
- /> |
|
250 |
- <img |
|
251 |
- v-if="rabbitCompl[5]" |
|
252 |
- src="../../../resources/img/new_img/icon/clear_img.png" |
|
253 |
- alt="Clear Icon" |
|
254 |
- class="clear-img" |
|
255 |
- /> |
|
123 |
+ <img src="../../../resources/img/new_img/board/racebtn_5.png" alt="Race Button" class="base-img" /> |
|
124 |
+ <img v-if="rabbitCompl[5]" src="../../../resources/img/new_img/icon/clear_img.png" alt="Clear Icon" |
|
125 |
+ class="clear-img" /> |
|
256 | 126 |
</div> |
257 | 127 |
</button> |
258 | 128 |
<p :class="!rabbitCompl[5] ? 'before-clear' : 'clear'"> |
259 |
- <img |
|
260 |
- v-if="rabbitCompl[5]" |
|
261 |
- src="../../../resources/img/new_img/icon/complete_icon.png" |
|
262 |
- alt="Complete Icon" |
|
263 |
- class="complete-icon" |
|
264 |
- /> |
|
129 |
+ <img v-if="rabbitCompl[5]" src="../../../resources/img/new_img/icon/complete_icon.png" alt="Complete Icon" |
|
130 |
+ class="complete-icon" /> |
|
265 | 131 |
{{ labeledItems[4].label }} |
266 | 132 |
</p> |
267 | 133 |
</div> |
268 | 134 |
<!-- 4 --> |
269 | 135 |
<div class="race-btn" @click="[storeLearningId(labeledItems[3])]"> |
270 | 136 |
<div class="rabbit-running"> |
271 |
- <img |
|
272 |
- src="../../../resources/img/new_img/rabbit.png" |
|
273 |
- alt="" |
|
274 |
- :style="{ display: rabbitPos[4] ? 'block' : 'none' }" |
|
275 |
- /> |
|
137 |
+ <img src="../../../resources/img/new_img/rabbit.png" alt="" |
|
138 |
+ :style="{ display: rabbitPos[4] ? 'block' : 'none' }" /> |
|
276 | 139 |
</div> |
277 |
- <button |
|
278 |
- class="popTxt" |
|
279 |
- v-for="(item, index) in items" |
|
280 |
- :key="index" |
|
281 |
- @click="toggleImage(index)" |
|
282 |
- data-num="4" |
|
283 |
- > |
|
140 |
+ <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="4"> |
|
284 | 141 |
<div class="image-container"> |
285 |
- <img |
|
286 |
- src="../../../resources/img/new_img/board/racebtn_4.png" |
|
287 |
- alt="Race Button" |
|
288 |
- class="base-img" |
|
289 |
- /> |
|
290 |
- <img |
|
291 |
- v-if="rabbitCompl[4]" |
|
292 |
- src="../../../resources/img/new_img/icon/clear_img.png" |
|
293 |
- alt="Clear Icon" |
|
294 |
- class="clear-img" |
|
295 |
- /> |
|
142 |
+ <img src="../../../resources/img/new_img/board/racebtn_4.png" alt="Race Button" class="base-img" /> |
|
143 |
+ <img v-if="rabbitCompl[4]" src="../../../resources/img/new_img/icon/clear_img.png" alt="Clear Icon" |
|
144 |
+ class="clear-img" /> |
|
296 | 145 |
</div> |
297 | 146 |
</button> |
298 | 147 |
<p :class="!rabbitCompl[4] ? 'before-clear' : 'clear'"> |
299 |
- <img |
|
300 |
- v-if="rabbitCompl[4]" |
|
301 |
- src="../../../resources/img/new_img/icon/complete_icon.png" |
|
302 |
- alt="Complete Icon" |
|
303 |
- class="complete-icon" |
|
304 |
- /> |
|
148 |
+ <img v-if="rabbitCompl[4]" src="../../../resources/img/new_img/icon/complete_icon.png" alt="Complete Icon" |
|
149 |
+ class="complete-icon" /> |
|
305 | 150 |
{{ labeledItems[3].label }} |
306 | 151 |
</p> |
307 | 152 |
</div> |
308 | 153 |
<!-- 3 --> |
309 |
- <div |
|
310 |
- class="race-btn" |
|
311 |
- @click="[storeLearningId(labeledItems[2])]" |
|
312 |
- style="right: 12px" |
|
313 |
- > |
|
154 |
+ <div class="race-btn" @click="[storeLearningId(labeledItems[2])]" style="right: 12px"> |
|
314 | 155 |
<div class="rabbit-running"> |
315 |
- <img |
|
316 |
- src="../../../resources/img/new_img/rabbit.png" |
|
317 |
- alt="" |
|
318 |
- :style="{ display: rabbitPos[3] ? 'block' : 'none' }" |
|
319 |
- /> |
|
156 |
+ <img src="../../../resources/img/new_img/rabbit.png" alt="" |
|
157 |
+ :style="{ display: rabbitPos[3] ? 'block' : 'none' }" /> |
|
320 | 158 |
</div> |
321 |
- <button |
|
322 |
- class="popTxt" |
|
323 |
- v-for="(item, index) in items" |
|
324 |
- :key="index" |
|
325 |
- @click="toggleImage(index)" |
|
326 |
- data-num="3" |
|
327 |
- > |
|
159 |
+ <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="3"> |
|
328 | 160 |
<div class="image-container"> |
329 |
- <img |
|
330 |
- src="../../../resources/img/new_img/board/racebtn_3.png" |
|
331 |
- alt="Race Button" |
|
332 |
- class="base-img" |
|
333 |
- /> |
|
334 |
- <img |
|
335 |
- v-if="rabbitCompl[3]" |
|
336 |
- src="../../../resources/img/new_img/icon/clear_img.png" |
|
337 |
- alt="Clear Icon" |
|
338 |
- class="clear-img" |
|
339 |
- /> |
|
161 |
+ <img src="../../../resources/img/new_img/board/racebtn_3.png" alt="Race Button" class="base-img" /> |
|
162 |
+ <img v-if="rabbitCompl[3]" src="../../../resources/img/new_img/icon/clear_img.png" alt="Clear Icon" |
|
163 |
+ class="clear-img" /> |
|
340 | 164 |
</div> |
341 | 165 |
</button> |
342 | 166 |
<p :class="!rabbitCompl[3] ? 'before-clear' : 'clear'"> |
343 |
- <img |
|
344 |
- v-if="rabbitCompl[3]" |
|
345 |
- src="../../../resources/img/new_img/icon/complete_icon.png" |
|
346 |
- alt="Complete Icon" |
|
347 |
- class="complete-icon" |
|
348 |
- /> |
|
167 |
+ <img v-if="rabbitCompl[3]" src="../../../resources/img/new_img/icon/complete_icon.png" alt="Complete Icon" |
|
168 |
+ class="complete-icon" /> |
|
349 | 169 |
{{ labeledItems[2].label }} |
350 | 170 |
</p> |
351 | 171 |
</div> |
... | ... | @@ -355,178 +175,88 @@ |
355 | 175 |
<!-- 8 --> |
356 | 176 |
<div class="race-btn" @click="[storeLearningId(labeledItems[7])]"> |
357 | 177 |
<div class="rabbit-running"> |
358 |
- <img |
|
359 |
- src="../../../resources/img/new_img/rabbit.png" |
|
360 |
- alt="" |
|
361 |
- :style="{ display: rabbitPos[8] ? 'block' : 'none' }" |
|
362 |
- /> |
|
178 |
+ <img src="../../../resources/img/new_img/rabbit.png" alt="" |
|
179 |
+ :style="{ display: rabbitPos[8] ? 'block' : 'none' }" /> |
|
363 | 180 |
</div> |
364 |
- <button |
|
365 |
- class="popTxt" |
|
366 |
- v-for="(item, index) in items" |
|
367 |
- :key="index" |
|
368 |
- @click="toggleImage(index)" |
|
369 |
- data-num="8" |
|
370 |
- > |
|
181 |
+ <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="8"> |
|
371 | 182 |
<div class="image-container"> |
372 |
- <img |
|
373 |
- src="../../../resources/img/new_img/board/racebtn_8.png" |
|
374 |
- alt="Race Button" |
|
375 |
- class="base-img" |
|
376 |
- /> |
|
377 |
- <img |
|
378 |
- v-if="rabbitCompl[8]" |
|
379 |
- src="../../../resources/img/new_img/icon/clear_img.png" |
|
380 |
- alt="Clear Icon" |
|
381 |
- class="clear-img" |
|
382 |
- /> |
|
183 |
+ <img src="../../../resources/img/new_img/board/racebtn_8.png" alt="Race Button" class="base-img" /> |
|
184 |
+ <img v-if="rabbitCompl[8]" src="../../../resources/img/new_img/icon/clear_img.png" alt="Clear Icon" |
|
185 |
+ class="clear-img" /> |
|
383 | 186 |
</div> |
384 | 187 |
</button> |
385 | 188 |
<p :class="!rabbitCompl[8] ? 'before-clear' : 'clear'"> |
386 |
- <img |
|
387 |
- v-if="rabbitCompl[8]" |
|
388 |
- src="../../../resources/img/new_img/icon/complete_icon.png" |
|
389 |
- alt="Complete Icon" |
|
390 |
- class="complete-icon" |
|
391 |
- /> |
|
189 |
+ <img v-if="rabbitCompl[8]" src="../../../resources/img/new_img/icon/complete_icon.png" alt="Complete Icon" |
|
190 |
+ class="complete-icon" /> |
|
392 | 191 |
{{ labeledItems[7].label }} |
393 | 192 |
</p> |
394 | 193 |
</div> |
395 | 194 |
<!-- 9 --> |
396 | 195 |
<div class="race-btn" @click="[storeLearningId(labeledItems[8])]"> |
397 | 196 |
<div class="rabbit-running"> |
398 |
- <img |
|
399 |
- src="../../../resources/img/new_img/rabbit.png" |
|
400 |
- alt="" |
|
401 |
- :style="{ display: rabbitPos[9] ? 'block' : 'none' }" |
|
402 |
- /> |
|
197 |
+ <img src="../../../resources/img/new_img/rabbit.png" alt="" |
|
198 |
+ :style="{ display: rabbitPos[9] ? 'block' : 'none' }" /> |
|
403 | 199 |
</div> |
404 |
- <button |
|
405 |
- class="popTxt" |
|
406 |
- v-for="(item, index) in items" |
|
407 |
- :key="index" |
|
408 |
- @click="toggleImage(index)" |
|
409 |
- data-num="9" |
|
410 |
- > |
|
200 |
+ <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" data-num="9"> |
|
411 | 201 |
<div class="image-container"> |
412 |
- <img |
|
413 |
- src="../../../resources/img/new_img/board/racebtn_9.png" |
|
414 |
- alt="Race Button" |
|
415 |
- class="base-img" |
|
416 |
- /> |
|
417 |
- <img |
|
418 |
- v-if="rabbitCompl[9]" |
|
419 |
- src="../../../resources/img/new_img/icon/clear_img.png" |
|
420 |
- alt="Clear Icon" |
|
421 |
- class="clear-img" |
|
422 |
- /> |
|
202 |
+ <img src="../../../resources/img/new_img/board/racebtn_9.png" alt="Race Button" class="base-img" /> |
|
203 |
+ <img v-if="rabbitCompl[9]" src="../../../resources/img/new_img/icon/clear_img.png" alt="Clear Icon" |
|
204 |
+ class="clear-img" /> |
|
423 | 205 |
</div> |
424 | 206 |
</button> |
425 | 207 |
<p :class="!rabbitCompl[9] ? 'before-clear' : 'clear'"> |
426 |
- <img |
|
427 |
- v-if="rabbitCompl[9]" |
|
428 |
- src="../../../resources/img/new_img/icon/complete_icon.png" |
|
429 |
- alt="Complete Icon" |
|
430 |
- class="complete-icon" |
|
431 |
- /> |
|
208 |
+ <img v-if="rabbitCompl[9]" src="../../../resources/img/new_img/icon/complete_icon.png" alt="Complete Icon" |
|
209 |
+ class="complete-icon" /> |
|
432 | 210 |
{{ labeledItems[8].label }} |
433 | 211 |
</p> |
434 | 212 |
</div> |
435 | 213 |
<!-- 10 --> |
436 | 214 |
<div class="race-btn" @click="[storeLearningId(labeledItems[9])]"> |
437 | 215 |
<div class="rabbit-running"> |
438 |
- <img |
|
439 |
- src="../../../resources/img/new_img/rabbit.png" |
|
440 |
- alt="" |
|
441 |
- :style="{ display: rabbitPos[10] ? 'block' : 'none' }" |
|
442 |
- /> |
|
216 |
+ <img src="../../../resources/img/new_img/rabbit.png" alt="" |
|
217 |
+ :style="{ display: rabbitPos[10] ? 'block' : 'none' }" /> |
|
443 | 218 |
</div> |
444 |
- <button |
|
445 |
- class="popTxt" |
|
446 |
- v-for="(item, index) in items" |
|
447 |
- :key="index" |
|
448 |
- @click="toggleImage(index)" |
|
449 |
- data-num="10" |
|
450 |
- > |
|
219 |
+ <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)" |
|
220 |
+ data-num="10"> |
|
451 | 221 |
<div class="image-container"> |
452 |
- <img |
|
453 |
- src="../../../resources/img/new_img/board/racebtn_10.png" |
|
454 |
- alt="Race Button" |
|
455 |
- class="base-img" |
|
456 |
- /> |
|
457 |
- <img |
|
458 |
- v-if="rabbitCompl[10]" |
|
459 |
- src="../../../resources/img/new_img/icon/clear_img.png" |
|
460 |
- alt="Clear Icon" |
|
461 |
- class="clear-img" |
|
462 |
- /> |
|
222 |
+ <img src="../../../resources/img/new_img/board/racebtn_10.png" alt="Race Button" class="base-img" /> |
|
223 |
+ <img v-if="rabbitCompl[10]" src="../../../resources/img/new_img/icon/clear_img.png" alt="Clear Icon" |
|
224 |
+ class="clear-img" /> |
|
463 | 225 |
</div> |
464 | 226 |
</button> |
465 | 227 |
<p :class="!rabbitCompl[10] ? 'before-clear' : 'clear'"> |
466 |
- <img |
|
467 |
- v-if="rabbitCompl[10]" |
|
468 |
- src="../../../resources/img/new_img/icon/complete_icon.png" |
|
469 |
- alt="Complete Icon" |
|
470 |
- class="complete-icon" |
|
471 |
- /> |
|
228 |
+ <img v-if="rabbitCompl[10]" src="../../../resources/img/new_img/icon/complete_icon.png" |
|
229 |
+ alt="Complete Icon" class="complete-icon" /> |
|
472 | 230 |
{{ labeledItems[9].label }} |
473 | 231 |
</p> |
474 | 232 |
</div> |
475 | 233 |
<!-- 11 --> |
476 | 234 |
<div class="race-btn" @click="[storeLearningId(labeledItems[10])]"> |
477 | 235 |
<div class="rabbit-running"> |
478 |
- <img |
|
479 |
- src="../../../resources/img/new_img/rabbit.png" |
|
480 |
- alt="" |
|
481 |
- :style="{ display: rabbitPos[11] ? 'block' : 'none' }" |
|
482 |
- /> |
|
236 |
+ <img src="../../../resources/img/new_img/rabbit.png" alt="" |
|
237 |
+ :style="{ display: rabbitPos[11] ? 'block' : 'none' }" /> |
|
483 | 238 |
</div> |
484 |
- <button |
|
485 |
- class="popTxt" |
|
486 |
- v-for="(item, index) in items" |
|
487 |
- :key="index" |
|
488 |
- @click="toggleImageAndShowPopup(index, '11')" |
|
489 |
- data-num="11" |
|
490 |
- > |
|
239 |
+ <button class="popTxt" v-for="(item, index) in items" :key="index" |
|
240 |
+ @click="toggleImageAndShowPopup(index, '11')" data-num="11"> |
|
491 | 241 |
<div class="image-container"> |
492 |
- <img |
|
493 |
- src="../../../resources/img/new_img/board/racebtn_11.png" |
|
494 |
- alt="Race Button" |
|
495 |
- class="base-img" |
|
496 |
- /> |
|
497 |
- <img |
|
498 |
- v-if="rabbitCompl[11]" |
|
499 |
- src="../../../resources/img/new_img/icon/clear_img.png" |
|
500 |
- alt="Clear Icon" |
|
501 |
- class="clear-img" |
|
502 |
- /> |
|
242 |
+ <img src="../../../resources/img/new_img/board/racebtn_11.png" alt="Race Button" class="base-img" /> |
|
243 |
+ <img v-if="rabbitCompl[11]" src="../../../resources/img/new_img/icon/clear_img.png" alt="Clear Icon" |
|
244 |
+ class="clear-img" /> |
|
503 | 245 |
</div> |
504 | 246 |
</button> |
505 | 247 |
<p :class="!rabbitCompl[11] ? 'before-clear' : 'clear'"> |
506 |
- <img |
|
507 |
- v-if="rabbitCompl[11]" |
|
508 |
- src="../../../resources/img/new_img/icon/complete_icon.png" |
|
509 |
- alt="Complete Icon" |
|
510 |
- class="complete-icon" |
|
511 |
- /> |
|
248 |
+ <img v-if="rabbitCompl[11]" src="../../../resources/img/new_img/icon/complete_icon.png" |
|
249 |
+ alt="Complete Icon" class="complete-icon" /> |
|
512 | 250 |
{{ labeledItems[10].label }} |
513 | 251 |
</p> |
514 | 252 |
</div> |
515 | 253 |
</div> |
516 | 254 |
<div class="race-btn"> |
517 | 255 |
<div class="rabbit-running" style="display: flex"> |
518 |
- <img |
|
519 |
- class="rabbit-end" |
|
520 |
- src="../../../resources/img/new_img/rabbit.png" |
|
521 |
- alt="" |
|
522 |
- :style="{ display: rabbitEnd ? 'block' : 'none' }" |
|
523 |
- /> |
|
524 |
- <img |
|
525 |
- class="fireworks-end" |
|
526 |
- src="../../../resources/img/fireworks.gif" |
|
527 |
- alt="" |
|
528 |
- :style="{ display: rabbitEnd ? 'block' : 'none' }" |
|
529 |
- /> |
|
256 |
+ <img class="rabbit-end" src="../../../resources/img/new_img/rabbit.png" alt="" |
|
257 |
+ :style="{ display: rabbitEnd ? 'block' : 'none' }" /> |
|
258 |
+ <img class="fireworks-end" src="../../../resources/img/fireworks.gif" alt="" |
|
259 |
+ :style="{ display: rabbitEnd ? 'block' : 'none' }" /> |
|
530 | 260 |
</div> |
531 | 261 |
</div> |
532 | 262 |
</div> |
... | ... | @@ -534,17 +264,9 @@ |
534 | 264 |
<!-- 팝업 --> |
535 | 265 |
<div v-show="searchOpen2" class="popup-wrap"> |
536 | 266 |
<div class="popup-box"> |
537 |
- <button |
|
538 |
- type="button" |
|
539 |
- class="popup-close-btn" |
|
540 |
- style="position: absolute; top: 10px; right: 10px" |
|
541 |
- @click="closeModal" |
|
542 |
- > |
|
543 |
- <svg-icon |
|
544 |
- type="mdi" |
|
545 |
- :path="mdiWindowClose" |
|
546 |
- class="close-btn" |
|
547 |
- ></svg-icon> |
|
267 |
+ <button type="button" class="popup-close-btn" style="position: absolute; top: 10px; right: 10px" |
|
268 |
+ @click="closeModal"> |
|
269 |
+ <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon> |
|
548 | 270 |
</button> |
549 | 271 |
|
550 | 272 |
<div class="mb30 text-ct"> |
... | ... | @@ -554,12 +276,7 @@ |
554 | 276 |
</p> |
555 | 277 |
</div> |
556 | 278 |
<div class="flex justify-center"> |
557 |
- <button |
|
558 |
- type="button" |
|
559 |
- title="사진촬영" |
|
560 |
- class="new-btn" |
|
561 |
- @click="openCameraModal" |
|
562 |
- > |
|
279 |
+ <button type="button" title="사진촬영" class="new-btn" @click="openCameraModal"> |
|
563 | 280 |
사진 촬영 |
564 | 281 |
</button> |
565 | 282 |
</div> |
... | ... | @@ -571,29 +288,15 @@ |
571 | 288 |
<div class="flex mb10 justify-between"> |
572 | 289 |
<p class="popup-title">사진 촬영</p> |
573 | 290 |
<button type="button" class="popup-close-btn" @click="closeModal"> |
574 |
- <svg-icon |
|
575 |
- type="mdi" |
|
576 |
- :path="mdiWindowClose" |
|
577 |
- class="close-btn" |
|
578 |
- ></svg-icon> |
|
291 |
+ <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon> |
|
579 | 292 |
</button> |
580 | 293 |
</div> |
581 | 294 |
<div class="box"> |
582 | 295 |
<div style="width: 100%"> |
583 | 296 |
<div id="container" ref="container"> |
584 |
- <video |
|
585 |
- v-if="!photoTaken" |
|
586 |
- autoplay="true" |
|
587 |
- ref="modalVideoElement" |
|
588 |
- class="mirrored" |
|
589 |
- @canplay="onVideoLoaded" |
|
590 |
- style="position: absolute; height: 100%" |
|
591 |
- ></video> |
|
592 |
- <img |
|
593 |
- src="../../../resources/img/camera-rabbit.png" |
|
594 |
- class="camera-rabbit" |
|
595 |
- style="position: absolute" |
|
596 |
- /> |
|
297 |
+ <video v-if="!photoTaken" autoplay="true" ref="modalVideoElement" class="mirrored" |
|
298 |
+ @canplay="onVideoLoaded" style="position: absolute; height: 100%"></video> |
|
299 |
+ <img src="../../../resources/img/camera-rabbit.png" class="camera-rabbit" style="position: absolute" /> |
|
597 | 300 |
<canvas ref="canvas" style="pointer-events: none"></canvas> |
598 | 301 |
</div> |
599 | 302 |
</div> |
... | ... | @@ -606,17 +309,8 @@ |
606 | 309 |
</div> |
607 | 310 |
|
608 | 311 |
<div class="complete-wrap myphoto"> |
609 |
- <button |
|
610 |
- class="login-btn mt10" |
|
611 |
- type="submit" |
|
612 |
- style="width: 100%" |
|
613 |
- @click="finishSchedule" |
|
614 |
- > |
|
615 |
- <img |
|
616 |
- src="../../../resources/img/btn07_s.png" |
|
617 |
- alt="" |
|
618 |
- style="height: 100px" |
|
619 |
- /> |
|
312 |
+ <button class="login-btn mt10" type="submit" style="width: 100%" @click="finishSchedule"> |
|
313 |
+ <img src="../../../resources/img/btn07_s.png" alt="" style="height: 100px" /> |
|
620 | 314 |
<p>학습 종료하기</p> |
621 | 315 |
</button> |
622 | 316 |
<h2 class="mb40 mt10">이 단원을 끝낸 친구들</h2> |
... | ... | @@ -624,19 +318,9 @@ |
624 | 318 |
<article class="flex-column"> |
625 | 319 |
<div class="flex-row"> |
626 | 320 |
<div class="flex" style="gap: 5px; flex-wrap: wrap"> |
627 |
- <div |
|
628 |
- v-for="(image, index) in images" |
|
629 |
- :key="image.fileId" |
|
630 |
- @click="buttonSearch(image)" |
|
631 |
- class="photo" |
|
632 |
- style="margin-bottom: 5px" |
|
633 |
- > |
|
634 |
- <img |
|
635 |
- :src="image.url" |
|
636 |
- :alt="image.fileNm" |
|
637 |
- reloadable="true" |
|
638 |
- style="height: 100%" |
|
639 |
- /> |
|
321 |
+ <div v-for="(image, index) in images" :key="image.fileId" @click="buttonSearch(image)" class="photo" |
|
322 |
+ style="margin-bottom: 5px"> |
|
323 |
+ <img :src="image.url" :alt="image.fileNm" reloadable="true" style="height: 100%" /> |
|
640 | 324 |
</div> |
641 | 325 |
</div> |
642 | 326 |
</div> |
... | ... | @@ -645,51 +329,27 @@ |
645 | 329 |
<div class="popup-box" style="top: 50%"> |
646 | 330 |
<div class="flex mb10 justify-between"> |
647 | 331 |
<button type="button" class="popup-close-btn" @click="closeModal"> |
648 |
- <svg-icon |
|
649 |
- type="mdi" |
|
650 |
- :path="mdiWindowClose" |
|
651 |
- class="close-btn" |
|
652 |
- ></svg-icon> |
|
332 |
+ <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon> |
|
653 | 333 |
</button> |
654 | 334 |
</div> |
655 | 335 |
<div class="box"> |
656 | 336 |
<div style="width: 910px; height: 680px"> |
657 |
- <img |
|
658 |
- :src="selectedImage.image" |
|
659 |
- alt="Image" |
|
660 |
- @error="onImageError" |
|
661 |
- reloadable="true" |
|
662 |
- /> |
|
337 |
+ <img :src="selectedImage.image" alt="Image" @error="onImageError" reloadable="true" /> |
|
663 | 338 |
</div> |
664 | 339 |
</div> |
665 | 340 |
<div class="flex justify-between mt20"> |
666 | 341 |
<div class="text flex"> |
667 | 342 |
<p class="title2 date ml30">{{ selectedImage.date }}</p> |
668 |
- <span class="title1 ml30" |
|
669 |
- >{{ selectedImage.unit }}을 마친 |
|
670 |
- <em class="yellow">{{ selectedImage.name }}</em |
|
671 |
- >친구</span |
|
672 |
- > |
|
343 |
+ <span class="title1 ml30">{{ selectedImage.unit }}을 마친 |
|
344 |
+ <em class="yellow">{{ selectedImage.name }}</em>친구</span> |
|
673 | 345 |
</div> |
674 | 346 |
<div class="title2 flex align-center" style="gap: 10px"> |
675 |
- <svg-icon |
|
676 |
- v-if="!isHeartFilled" |
|
677 |
- type="mdi" |
|
678 |
- :path="mdiHeartOutline" |
|
679 |
- @click=" |
|
680 |
- toggleHeart(selectedImage.heart, selectedImage.fileMngId) |
|
681 |
- " |
|
682 |
- style="color: #ffba08; cursor: pointer" |
|
683 |
- ></svg-icon> |
|
684 |
- <svg-icon |
|
685 |
- v-if="isHeartFilled" |
|
686 |
- type="mdi" |
|
687 |
- :path="mdiHeart" |
|
688 |
- @click=" |
|
689 |
- toggleHeart(selectedImage.heart, selectedImage.fileMngId) |
|
690 |
- " |
|
691 |
- style="color: #ffba08; cursor: pointer" |
|
692 |
- ></svg-icon> |
|
347 |
+ <svg-icon v-if="!isHeartFilled" type="mdi" :path="mdiHeartOutline" @click=" |
|
348 |
+ toggleHeart(selectedImage.heart, selectedImage.fileMngId) |
|
349 |
+ " style="color: #ffba08; cursor: pointer"></svg-icon> |
|
350 |
+ <svg-icon v-if="isHeartFilled" type="mdi" :path="mdiHeart" @click=" |
|
351 |
+ toggleHeart(selectedImage.heart, selectedImage.fileMngId) |
|
352 |
+ " style="color: #ffba08; cursor: pointer"></svg-icon> |
|
693 | 353 |
<p> |
694 | 354 |
<em class="yellow">{{ selectedImage.heart }}</em> |
695 | 355 |
</p> |
... | ... | @@ -1428,6 +1088,7 @@ |
1428 | 1088 |
.complete-wrap img { |
1429 | 1089 |
width: auto; |
1430 | 1090 |
} |
1091 |
+ |
|
1431 | 1092 |
.body { |
1432 | 1093 |
width: 1435px; |
1433 | 1094 |
height: auto; |
... | ... | @@ -1570,6 +1231,7 @@ |
1570 | 1231 |
display: flex; |
1571 | 1232 |
align-items: center; |
1572 | 1233 |
} |
1234 |
+ |
|
1573 | 1235 |
.lcon .race-btn .rabbit-running { |
1574 | 1236 |
transform: scaleX(1); |
1575 | 1237 |
} |
--- client/views/pages/main/Main.vue
+++ client/views/pages/main/Main.vue
... | ... | @@ -9,6 +9,9 @@ |
9 | 9 |
<div v-if="$route.name === 'MyPlan'" class="main-wrap-plan"> |
10 | 10 |
<router-view /> |
11 | 11 |
</div> |
12 |
+ <div v-else-if="$route.name === 'MyPage'" class="main-wrap-mypage"> |
|
13 |
+ <router-view /> |
|
14 |
+ </div> |
|
12 | 15 |
<div v-else class="main-wrap"> |
13 | 16 |
<router-view /> |
14 | 17 |
</div> |
--- client/views/pages/main/MyPage.vue
+++ client/views/pages/main/MyPage.vue
... | ... | @@ -1,303 +1,341 @@ |
1 | 1 |
<template> |
2 |
- <div class="mypage"> |
|
3 |
- <div class="flex justify-between mb30" style="gap: 30px;"> |
|
4 |
- <div> |
|
5 |
- <div class="title-box flex justify-between mb20"> |
|
6 |
- <p class="title">소속 반</p> |
|
7 |
- <div class="flex align-center look-btn"> |
|
8 |
- <!-- <p>더보기 </p><svg-icon type="mdi" :path="mdilArrowRight" class=" ml10"></svg-icon> --> |
|
9 |
- </div> |
|
10 |
- </div> |
|
11 |
- <div class="wrap " style="width: 82rem;"> |
|
12 |
- <section class="flex" style="gap: 20px;"> |
|
13 |
- <div class="class flex justify-between" style="cursor: default;"> |
|
14 |
- <div class="box gd-col2" style="gap: 5px;"> |
|
15 |
- <div><img src="../../../resources/img/img176_82t.png" alt=""></div> |
|
16 |
- <div><img src="../../../resources/img/img176_82t.png" alt=""></div> |
|
17 |
- <div><img src="../../../resources/img/img176_82t.png" alt=""></div> |
|
18 |
- <div><img src="../../../resources/img/img176_82t.png" alt=""></div> |
|
19 |
- </div> |
|
20 |
- <div class="text mt10"> |
|
21 |
- <p class="title1 mb10">A반</p> |
|
22 |
- <span class="member">20명</span> |
|
23 |
- </div> |
|
24 |
- </div> |
|
25 |
- |
|
26 |
- </section> |
|
27 |
- </div> |
|
28 |
- </div> |
|
29 |
- <div> |
|
30 |
- <div class="title-box flex justify-between mb20"> |
|
31 |
- <p class="title">사진첩</p> |
|
32 |
- </div> |
|
33 |
- <div class="photobook"> |
|
34 |
- <div class="flex justify-between"> |
|
35 |
- <div class="box" style="gap: 5px;"> |
|
36 |
- <div><img src="../../../resources/img/img198_12p.png" alt=""></div> |
|
37 |
- </div> |
|
38 |
- <div class="text mt10"> |
|
39 |
- <p class="title1 mb10">나의 사진첩</p> |
|
40 |
- <button @click="selectedTab = 'tab4'; goToPage('PhotoBook')" type="button" title="글쓰기" |
|
41 |
- class="new-btn"> |
|
42 |
- 바로가기 |
|
43 |
- </button> |
|
44 |
- |
|
45 |
- </div> |
|
46 |
- </div> |
|
47 |
- |
|
48 |
- </div> |
|
49 |
- </div> |
|
50 |
- </div> |
|
2 |
+ <div class="mypage"> |
|
3 |
+ <div class="flex justify-between mb30" style="gap: 30px"> |
|
4 |
+ <div> |
|
51 | 5 |
<div class="title-box flex justify-between mb20"> |
52 |
- <p class="title">{{ studentInfo.studentName }} 학생 랭킹</p> |
|
6 |
+ <p class="title" style="color: white">소속 반</p> |
|
7 |
+ <div class="flex align-center look-btn"> |
|
8 |
+ <!-- <p>더보기 </p><svg-icon type="mdi" :path="mdilArrowRight" class=" ml10"></svg-icon> --> |
|
9 |
+ </div> |
|
53 | 10 |
</div> |
54 |
- <div class=" mb30"> |
|
55 |
- <div class=" flex " style="gap: 50px;"> |
|
56 |
- <div class="textbook book-red"> |
|
57 |
- <div class="text "> |
|
58 |
- <p class="title1" style="color: #fff;">포토북 랭킹</p> |
|
59 |
- </div> |
|
60 |
- <div class="box " style="gap: 10px;"> |
|
61 |
- <div><img src="../../../resources/img/img196_12p.png" alt=""></div> |
|
62 |
- <P class="title2 mt10">현재 {{ stdCount }}명 중 <em class="red">{{ photo_rank }}등</em>입니다.</P> |
|
63 |
- </div> |
|
11 |
+ <div style="width: 82rem; padding: 2rem"> |
|
12 |
+ <section class="flex" style="gap: 20px"> |
|
13 |
+ <div |
|
14 |
+ class="class flex justify-between" |
|
15 |
+ style="cursor: default; background-color: transparent" |
|
16 |
+ > |
|
17 |
+ <div class="box gd-col2" style="gap: 5px"> |
|
18 |
+ <div> |
|
19 |
+ <img src="../../../resources/img/img176_82t.png" alt="" /> |
|
64 | 20 |
</div> |
65 |
- <div class="textbook "> |
|
66 |
- <div class="text "> |
|
67 |
- <p class="title1" style="color: #fff;">진도율 랭킹</p> |
|
68 |
- </div> |
|
69 |
- <div class="box " style="gap: 10px;"> |
|
70 |
- <div><img src="../../../resources/img/img196_12p.png" alt=""></div> |
|
71 |
- <P class="title2 mt10">현재 {{ stdCount }}명 중 <em class="yellow">{{ problem_rank }}등</em>입니다.</P> |
|
72 |
- </div> |
|
21 |
+ <div> |
|
22 |
+ <img src="../../../resources/img/img176_82t.png" alt="" /> |
|
73 | 23 |
</div> |
74 |
- <div class="textbook book-blue"> |
|
75 |
- <div class="text "> |
|
76 |
- <p class="title1" style="color: #fff;">점수 랭킹</p> |
|
77 |
- </div> |
|
78 |
- <div class="box " style="gap: 10px;"> |
|
79 |
- <div><img src="../../../resources/img/img196_12p.png" alt=""></div> |
|
80 |
- <P class="title2 mt10">현재 {{ stdCount }}명 중 <em class="blue">{{ score_rank }}등</em>입니다.</P> |
|
81 |
- </div> |
|
24 |
+ <div> |
|
25 |
+ <img src="../../../resources/img/img176_82t.png" alt="" /> |
|
82 | 26 |
</div> |
83 |
- <div class="textbook book-navy"> |
|
84 |
- <div class="text "> |
|
85 |
- <p class="title1" style="color: #fff;">학습시간 랭킹</p> |
|
86 |
- </div> |
|
87 |
- <div class="box " style="gap: 10px;"> |
|
88 |
- <div><img src="../../../resources/img/img196_12p.png" alt=""></div> |
|
89 |
- <P class="title2 mt10">현재 {{ stdCount }}명 중 <em class="navy">{{ time_rank }}등</em>입니다.</P> |
|
90 |
- </div> |
|
27 |
+ <div> |
|
28 |
+ <img src="../../../resources/img/img176_82t.png" alt="" /> |
|
91 | 29 |
</div> |
30 |
+ </div> |
|
31 |
+ <div class="text mt10"> |
|
32 |
+ <p class="title1 mb10">A반</p> |
|
33 |
+ <span class="member">20명</span> |
|
34 |
+ </div> |
|
92 | 35 |
</div> |
36 |
+ </section> |
|
93 | 37 |
</div> |
38 |
+ </div> |
|
39 |
+ <div> |
|
40 |
+ <div |
|
41 |
+ style="position: absolute; left: 102rem; top: 10rem; cursor: pointer" |
|
42 |
+ @click=" |
|
43 |
+ selectedTab = 'tab4'; |
|
44 |
+ goToPage('PhotoBook'); |
|
45 |
+ " |
|
46 |
+ > |
|
47 |
+ <img |
|
48 |
+ src="../../../resources/img/new_img/mypage/photoBtn.png" |
|
49 |
+ alt="" |
|
50 |
+ /> |
|
51 |
+ </div> |
|
52 |
+ <div |
|
53 |
+ class="title-box flex justify-between mb20" |
|
54 |
+ style="position: absolute; left: 117em; top: 6em" |
|
55 |
+ > |
|
56 |
+ <p class="title" style="color: white">사진첩</p> |
|
57 |
+ </div> |
|
58 |
+ </div> |
|
94 | 59 |
</div> |
60 |
+ <div class="title-box flex justify-between mb20"> |
|
61 |
+ <p class="title" style="color: white"> |
|
62 |
+ {{ studentInfo.studentName }} 학생 랭킹 |
|
63 |
+ </p> |
|
64 |
+ </div> |
|
65 |
+ <div class="mb30"> |
|
66 |
+ <div class="flex" style="gap: 95px"> |
|
67 |
+ <div |
|
68 |
+ class="textbook book-red" |
|
69 |
+ style="background-color: white; width: 19%; border: #f9c4eb solid 6px" |
|
70 |
+ > |
|
71 |
+ <div class="text" style="background-color: #f9c4eb"> |
|
72 |
+ <p class="title1" style="color: #fff">포토북 랭킹</p> |
|
73 |
+ </div> |
|
74 |
+ <div class="box" style="gap: 10px"> |
|
75 |
+ <div> |
|
76 |
+ <img src="../../../resources/img/img196_12p.png" alt="" /> |
|
77 |
+ </div> |
|
78 |
+ <P class="subtitle mt10" style="font-size: 19px" |
|
79 |
+ >현재 {{ stdCount }}명 중 |
|
80 |
+ <em class="red">{{ photo_rank }}등</em>입니다.</P |
|
81 |
+ > |
|
82 |
+ </div> |
|
83 |
+ </div> |
|
84 |
+ <div |
|
85 |
+ class="textbook" |
|
86 |
+ style="background-color: white; width: 19%; border: #b5dbcc solid 6px" |
|
87 |
+ > |
|
88 |
+ <div class="text" style="background-color: #b5dbcc"> |
|
89 |
+ <p class="title1" style="color: #fff">진도율 랭킹</p> |
|
90 |
+ </div> |
|
91 |
+ <div class="box" style="gap: 10px"> |
|
92 |
+ <div> |
|
93 |
+ <img src="../../../resources/img/img196_12p.png" alt="" /> |
|
94 |
+ </div> |
|
95 |
+ <P class="subtitle mt10" style="font-size: 19px" |
|
96 |
+ >현재 {{ stdCount }}명 중 |
|
97 |
+ <em class="yellow">{{ problem_rank }}등</em>입니다.</P |
|
98 |
+ > |
|
99 |
+ </div> |
|
100 |
+ </div> |
|
101 |
+ <div |
|
102 |
+ class="textbook book-blue" |
|
103 |
+ style="background-color: white; width: 19%; border: #bcd3eb solid 6px" |
|
104 |
+ > |
|
105 |
+ <div class="text" style="background-color: #bcd3eb"> |
|
106 |
+ <p class="title1" style="color: #fff">점수 랭킹</p> |
|
107 |
+ </div> |
|
108 |
+ <div class="box" style="gap: 10px"> |
|
109 |
+ <div> |
|
110 |
+ <img src="../../../resources/img/img196_12p.png" alt="" /> |
|
111 |
+ </div> |
|
112 |
+ <P class="subtitle mt10" style="font-size: 19px" |
|
113 |
+ >현재 {{ stdCount }}명 중 |
|
114 |
+ <em class="blue">{{ score_rank }}등</em>입니다.</P |
|
115 |
+ > |
|
116 |
+ </div> |
|
117 |
+ </div> |
|
118 |
+ <div |
|
119 |
+ class="textbook book-navy" |
|
120 |
+ style="background-color: white; width: 19%; border: #f9c894 solid 6px" |
|
121 |
+ > |
|
122 |
+ <div class="text" style="background-color: #f9c894"> |
|
123 |
+ <p class="title1" style="color: #fff">학습시간 랭킹</p> |
|
124 |
+ </div> |
|
125 |
+ <div class="box" style="gap: 10px"> |
|
126 |
+ <div> |
|
127 |
+ <img src="../../../resources/img/img196_12p.png" alt="" /> |
|
128 |
+ </div> |
|
129 |
+ <P class="subtitle mt10" style="font-size: 19px" |
|
130 |
+ >현재 {{ stdCount }}명 중 |
|
131 |
+ <em class="navy">{{ time_rank }}등</em>입니다.</P |
|
132 |
+ > |
|
133 |
+ </div> |
|
134 |
+ </div> |
|
135 |
+ </div> |
|
136 |
+ </div> |
|
137 |
+ </div> |
|
95 | 138 |
</template> |
96 | 139 |
|
97 | 140 |
<script> |
98 |
-import SvgIcon from '@jamescoyle/vue-icon'; |
|
99 |
-import { mdiMagnify, } from '@mdi/js'; |
|
100 |
-import { mdilArrowRight } from '@mdi/light-js'; |
|
101 |
-import ProgressBar from '../../component/ProgressBar.vue'; |
|
141 |
+import SvgIcon from "@jamescoyle/vue-icon"; |
|
142 |
+import { mdiMagnify } from "@mdi/js"; |
|
143 |
+import { mdilArrowRight } from "@mdi/light-js"; |
|
144 |
+import ProgressBar from "../../component/ProgressBar.vue"; |
|
102 | 145 |
import axios from "axios"; |
103 | 146 |
|
104 |
- |
|
105 | 147 |
export default { |
106 |
- data() { |
|
107 |
- return { |
|
108 |
- stdCount: 0, |
|
109 |
- photo_rank: 0, |
|
110 |
- problem_rank: 0, |
|
111 |
- score_rank: 0, |
|
112 |
- time_rank: 0, |
|
113 |
- mdiMagnify: mdiMagnify, |
|
114 |
- mdilArrowRight: mdilArrowRight, |
|
115 |
- timer: "00:00", |
|
116 |
- progress: 20, |
|
117 |
- studentInfo: { |
|
118 |
- studentName: "", |
|
119 |
- institutionName: "", |
|
120 |
- grade: "", |
|
121 |
- className: "", |
|
122 |
- studentQuestion: "", |
|
123 |
- history: [], |
|
124 |
- }, |
|
125 |
- } |
|
148 |
+ data() { |
|
149 |
+ return { |
|
150 |
+ stdCount: 0, |
|
151 |
+ photo_rank: 0, |
|
152 |
+ problem_rank: 0, |
|
153 |
+ score_rank: 0, |
|
154 |
+ time_rank: 0, |
|
155 |
+ mdiMagnify: mdiMagnify, |
|
156 |
+ mdilArrowRight: mdilArrowRight, |
|
157 |
+ timer: "00:00", |
|
158 |
+ progress: 20, |
|
159 |
+ studentInfo: { |
|
160 |
+ studentName: "", |
|
161 |
+ institutionName: "", |
|
162 |
+ grade: "", |
|
163 |
+ className: "", |
|
164 |
+ studentQuestion: "", |
|
165 |
+ history: [], |
|
166 |
+ }, |
|
167 |
+ }; |
|
168 |
+ }, |
|
169 |
+ methods: { |
|
170 |
+ classStdCount: function () { |
|
171 |
+ const vm = this; |
|
172 |
+ axios({ |
|
173 |
+ url: "/userclass/classStdCountByUserId.json", |
|
174 |
+ method: "post", |
|
175 |
+ headers: { |
|
176 |
+ "Content-Type": "application/json; charset=UTF-8", |
|
177 |
+ }, |
|
178 |
+ data: { |
|
179 |
+ userId: "USID_000000000000002", // 로그인한 학생의 userId |
|
180 |
+ }, |
|
181 |
+ }) |
|
182 |
+ .then(function (response) { |
|
183 |
+ console.log("classStdCount - response : ", response.data); |
|
184 |
+ vm.stdCount = response.data; |
|
185 |
+ }) |
|
186 |
+ .catch(function (error) { |
|
187 |
+ console.log("classStdCount - error : ", error); |
|
188 |
+ alert("반 학생 수 조회에 오류가 발생했습니다."); |
|
189 |
+ }); |
|
126 | 190 |
}, |
127 |
- methods: { |
|
128 |
- classStdCount: function () { |
|
129 |
- const vm = this; |
|
130 |
- axios({ |
|
131 |
- url: "/userclass/classStdCountByUserId.json", |
|
132 |
- method: "post", |
|
133 |
- headers: { |
|
134 |
- "Content-Type": "application/json; charset=UTF-8", |
|
135 |
- }, |
|
136 |
- data: { |
|
137 |
- userId: "USID_000000000000002" // 로그인한 학생의 userId |
|
138 |
- } |
|
139 |
- }) |
|
140 |
- .then(function (response) { |
|
141 |
- console.log("classStdCount - response : ", response.data); |
|
142 |
- vm.stdCount = response.data; |
|
143 |
- }) |
|
144 |
- .catch(function (error) { |
|
145 |
- console.log("classStdCount - error : ", error); |
|
146 |
- alert("반 학생 수 조회에 오류가 발생했습니다."); |
|
147 |
- }); |
|
191 |
+ fetchStudentInfo() { |
|
192 |
+ const vm = this; |
|
193 |
+ axios({ |
|
194 |
+ url: "/studentInfo/getInfo.json", |
|
195 |
+ method: "post", |
|
196 |
+ headers: { |
|
197 |
+ "Content-Type": "application/json; charset=UTF-8", |
|
148 | 198 |
}, |
149 |
- fetchStudentInfo() { |
|
150 |
- const vm = this; |
|
151 |
- axios({ |
|
152 |
- url: "/studentInfo/getInfo.json", |
|
153 |
- method: "post", |
|
154 |
- headers: { |
|
155 |
- "Content-Type": "application/json; charset=UTF-8", |
|
156 |
- }, |
|
157 |
- data: { |
|
158 |
- userId: "USID_000000000000002" // 로그인한 학생의 userId |
|
159 |
- } |
|
160 |
- }) |
|
161 |
- .then((response) => { |
|
162 |
- console.log(response.data); |
|
163 |
- this.studentInfo = response.data; |
|
164 |
- }) |
|
165 |
- .catch((error) => { |
|
166 |
- console.error("학생 정보 가져오기 실패:", error); |
|
167 |
- }); |
|
199 |
+ data: { |
|
200 |
+ userId: "USID_000000000000002", // 로그인한 학생의 userId |
|
168 | 201 |
}, |
169 |
- photoRankByLikeData: function () { |
|
170 |
- const vm = this; |
|
171 |
- axios({ |
|
172 |
- url: "/photo/photoRankByLikeData.json", |
|
173 |
- method: "post", |
|
174 |
- headers: { |
|
175 |
- "Content-Type": "application/json; charset=UTF-8", |
|
176 |
- }, |
|
177 |
- data: { |
|
178 |
- sclsId: "1", |
|
179 |
- stdId: "1" |
|
180 |
- } |
|
181 |
- }) |
|
182 |
- .then(function (response) { |
|
183 |
- console.log("Photo Rank - response : ", response.data); |
|
184 |
- vm.photo_rank = response.data; |
|
185 |
- }) |
|
186 |
- .catch(function (error) { |
|
187 |
- console.log("Photo Rank - error : ", error); |
|
188 |
- alert("학생 사진 랭킹 조회에 오류가 발생했습니다."); |
|
189 |
- }); |
|
202 |
+ }) |
|
203 |
+ .then((response) => { |
|
204 |
+ console.log(response.data); |
|
205 |
+ this.studentInfo = response.data; |
|
206 |
+ }) |
|
207 |
+ .catch((error) => { |
|
208 |
+ console.error("학생 정보 가져오기 실패:", error); |
|
209 |
+ }); |
|
210 |
+ }, |
|
211 |
+ photoRankByLikeData: function () { |
|
212 |
+ const vm = this; |
|
213 |
+ axios({ |
|
214 |
+ url: "/photo/photoRankByLikeData.json", |
|
215 |
+ method: "post", |
|
216 |
+ headers: { |
|
217 |
+ "Content-Type": "application/json; charset=UTF-8", |
|
190 | 218 |
}, |
191 |
- getUserRankByScore: function () { |
|
192 |
- const vm = this; |
|
193 |
- axios({ |
|
194 |
- url: "/userclass/getUserRankByScore.json", |
|
195 |
- method: "post", |
|
196 |
- headers: { |
|
197 |
- "Content-Type": "application/json; charset=UTF-8", |
|
198 |
- }, |
|
199 |
- data: { |
|
200 |
- userId: "USID_000000000000002" // 로그인한 학생의 userId |
|
201 |
- } |
|
202 |
- }) |
|
203 |
- .then(function (response) { |
|
204 |
- console.log("User Rank - response : ", response.data); |
|
205 |
- vm.score_rank = response.data; |
|
206 |
- }) |
|
207 |
- .catch(function (error) { |
|
208 |
- console.log("User Rank - error : ", error); |
|
209 |
- alert("점수 랭킹 조회에 오류가 발생했습니다."); |
|
210 |
- }); |
|
219 |
+ data: { |
|
220 |
+ sclsId: "1", |
|
221 |
+ stdId: "1", |
|
211 | 222 |
}, |
212 |
- getUserRankByStudyTime: function () { |
|
213 |
- const vm = this; |
|
214 |
- axios({ |
|
215 |
- url: "/userclass/getUserRankByStudyTime.json", |
|
216 |
- method: "post", |
|
217 |
- headers: { |
|
218 |
- "Content-Type": "application/json; charset=UTF-8", |
|
219 |
- }, |
|
220 |
- data: { |
|
221 |
- userId: "1" // 로그인한 학생의 userId |
|
222 |
- } |
|
223 |
- }) |
|
224 |
- .then(function (response) { |
|
225 |
- console.log("User Rank - response : ", response.data); |
|
226 |
- vm.time_rank = response.data; |
|
227 |
- }) |
|
228 |
- .catch(function (error) { |
|
229 |
- console.log("User Rank - error : ", error); |
|
230 |
- alert("학습시간 랭킹 조회에 오류가 발생했습니다."); |
|
231 |
- }); |
|
223 |
+ }) |
|
224 |
+ .then(function (response) { |
|
225 |
+ console.log("Photo Rank - response : ", response.data); |
|
226 |
+ vm.photo_rank = response.data; |
|
227 |
+ }) |
|
228 |
+ .catch(function (error) { |
|
229 |
+ console.log("Photo Rank - error : ", error); |
|
230 |
+ alert("학생 사진 랭킹 조회에 오류가 발생했습니다."); |
|
231 |
+ }); |
|
232 |
+ }, |
|
233 |
+ getUserRankByScore: function () { |
|
234 |
+ const vm = this; |
|
235 |
+ axios({ |
|
236 |
+ url: "/userclass/getUserRankByScore.json", |
|
237 |
+ method: "post", |
|
238 |
+ headers: { |
|
239 |
+ "Content-Type": "application/json; charset=UTF-8", |
|
232 | 240 |
}, |
233 |
- problemRankByProblemData: function () { |
|
234 |
- const vm = this; |
|
235 |
- axios({ |
|
236 |
- url: "/problemLog/problemRankByProblemData.json", |
|
237 |
- method: "post", |
|
238 |
- headers: { |
|
239 |
- "Content-Type": "application/json; charset=UTF-8", |
|
240 |
- }, |
|
241 |
- data: { |
|
242 |
- sclsId: "1", |
|
243 |
- stdId: "2" |
|
244 |
- } |
|
245 |
- }) |
|
246 |
- .then(function (response) { |
|
247 |
- console.log("Problem Rank - response : ", response.data); |
|
248 |
- vm.problem_rank = response.data; |
|
249 |
- }) |
|
250 |
- .catch(function (error) { |
|
251 |
- console.log("Problem Rank - error : ", error); |
|
252 |
- alert("학생 문제 랭킹 조회에 오류가 발생했습니다."); |
|
253 |
- }); |
|
241 |
+ data: { |
|
242 |
+ userId: "USID_000000000000002", // 로그인한 학생의 userId |
|
254 | 243 |
}, |
255 |
- goToPage(page) { |
|
256 |
- this.$router.push({ name: page }); |
|
244 |
+ }) |
|
245 |
+ .then(function (response) { |
|
246 |
+ console.log("User Rank - response : ", response.data); |
|
247 |
+ vm.score_rank = response.data; |
|
248 |
+ }) |
|
249 |
+ .catch(function (error) { |
|
250 |
+ console.log("User Rank - error : ", error); |
|
251 |
+ alert("점수 랭킹 조회에 오류가 발생했습니다."); |
|
252 |
+ }); |
|
253 |
+ }, |
|
254 |
+ getUserRankByStudyTime: function () { |
|
255 |
+ const vm = this; |
|
256 |
+ axios({ |
|
257 |
+ url: "/userclass/getUserRankByStudyTime.json", |
|
258 |
+ method: "post", |
|
259 |
+ headers: { |
|
260 |
+ "Content-Type": "application/json; charset=UTF-8", |
|
257 | 261 |
}, |
258 |
- increaseProgress() { |
|
259 |
- if (this.progress < 100) { |
|
260 |
- this.progress += 10; |
|
261 |
- } |
|
262 |
+ data: { |
|
263 |
+ userId: "1", // 로그인한 학생의 userId |
|
262 | 264 |
}, |
263 |
- showConfirm(type) { |
|
264 |
- let message = ''; |
|
265 |
- if (type === 'cancel') { |
|
266 |
- message = '삭제하시겠습니까?'; |
|
267 |
- } else if (type === 'reset') { |
|
268 |
- message = '초기화하시겠습니까?'; |
|
269 |
- } else if (type === 'save') { |
|
270 |
- message = '등록하시겠습니까?'; |
|
271 |
- } |
|
265 |
+ }) |
|
266 |
+ .then(function (response) { |
|
267 |
+ console.log("User Rank - response : ", response.data); |
|
268 |
+ vm.time_rank = response.data; |
|
269 |
+ }) |
|
270 |
+ .catch(function (error) { |
|
271 |
+ console.log("User Rank - error : ", error); |
|
272 |
+ alert("학습시간 랭킹 조회에 오류가 발생했습니다."); |
|
273 |
+ }); |
|
274 |
+ }, |
|
275 |
+ problemRankByProblemData: function () { |
|
276 |
+ const vm = this; |
|
277 |
+ axios({ |
|
278 |
+ url: "/problemLog/problemRankByProblemData.json", |
|
279 |
+ method: "post", |
|
280 |
+ headers: { |
|
281 |
+ "Content-Type": "application/json; charset=UTF-8", |
|
282 |
+ }, |
|
283 |
+ data: { |
|
284 |
+ sclsId: "1", |
|
285 |
+ stdId: "2", |
|
286 |
+ }, |
|
287 |
+ }) |
|
288 |
+ .then(function (response) { |
|
289 |
+ console.log("Problem Rank - response : ", response.data); |
|
290 |
+ vm.problem_rank = response.data; |
|
291 |
+ }) |
|
292 |
+ .catch(function (error) { |
|
293 |
+ console.log("Problem Rank - error : ", error); |
|
294 |
+ alert("학생 문제 랭킹 조회에 오류가 발생했습니다."); |
|
295 |
+ }); |
|
296 |
+ }, |
|
297 |
+ goToPage(page) { |
|
298 |
+ this.$router.push({ name: page }); |
|
299 |
+ }, |
|
300 |
+ increaseProgress() { |
|
301 |
+ if (this.progress < 100) { |
|
302 |
+ this.progress += 10; |
|
303 |
+ } |
|
304 |
+ }, |
|
305 |
+ showConfirm(type) { |
|
306 |
+ let message = ""; |
|
307 |
+ if (type === "cancel") { |
|
308 |
+ message = "삭제하시겠습니까?"; |
|
309 |
+ } else if (type === "reset") { |
|
310 |
+ message = "초기화하시겠습니까?"; |
|
311 |
+ } else if (type === "save") { |
|
312 |
+ message = "등록하시겠습니까?"; |
|
313 |
+ } |
|
272 | 314 |
|
273 |
- if (confirm(message)) { |
|
274 |
- this.goBack(); |
|
275 |
- } |
|
276 |
- }, |
|
315 |
+ if (confirm(message)) { |
|
316 |
+ this.goBack(); |
|
317 |
+ } |
|
277 | 318 |
}, |
278 |
- watch: { |
|
279 |
- |
|
280 |
- }, |
|
281 |
- computed: { |
|
282 |
- |
|
283 |
- }, |
|
284 |
- components: { |
|
285 |
- SvgIcon, |
|
286 |
- ProgressBar |
|
287 |
- }, |
|
288 |
- mounted() { |
|
289 |
- console.log('Main2 mounted'); |
|
290 |
- this.fetchStudentInfo(); |
|
291 |
- this.classStdCount(); |
|
292 |
- this.photoRankByLikeData(); |
|
293 |
- this.getUserRankByScore(); |
|
294 |
- this.problemRankByProblemData(); |
|
295 |
- this.getUserRankByStudyTime(); |
|
296 |
- } |
|
297 |
-} |
|
319 |
+ }, |
|
320 |
+ watch: {}, |
|
321 |
+ computed: {}, |
|
322 |
+ components: { |
|
323 |
+ SvgIcon, |
|
324 |
+ ProgressBar, |
|
325 |
+ }, |
|
326 |
+ mounted() { |
|
327 |
+ console.log("Main2 mounted"); |
|
328 |
+ this.fetchStudentInfo(); |
|
329 |
+ this.classStdCount(); |
|
330 |
+ this.photoRankByLikeData(); |
|
331 |
+ this.getUserRankByScore(); |
|
332 |
+ this.problemRankByProblemData(); |
|
333 |
+ this.getUserRankByStudyTime(); |
|
334 |
+ }, |
|
335 |
+}; |
|
298 | 336 |
</script> |
299 | 337 |
<style scoped> |
300 | 338 |
.mypage .textbook { |
301 |
- width: 22%; |
|
339 |
+ width: 22%; |
|
302 | 340 |
} |
303 |
-</style>(파일 끝에 줄바꿈 문자 없음) |
|
341 |
+</style> |
--- client/views/pages/main/MyPlan.vue
+++ client/views/pages/main/MyPlan.vue
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
<div class="text"> |
7 | 7 |
<p class="title1" style="color: #fff;">스케줄</p> |
8 | 8 |
</div> |
9 |
- <div class="purple-scroll" style="overflow: auto; height: 85%;"> |
|
9 |
+ <div class="purple-scroll" style="overflow: auto; height: 85%; margin: 5px"> |
|
10 | 10 |
<div style="padding: 10px 20px;"> |
11 | 11 |
<p style="text-align: right;cursor: pointer;text-decoration: underline;padding-bottom: 5px;" |
12 | 12 |
class="title2" @click="goToPage2('MyPlan2')">학습 일정 변경하기</p> |
... | ... | @@ -135,7 +135,7 @@ |
135 | 135 |
<div class="text"> |
136 | 136 |
<p class="title1" style="color: #fff;">오늘의 뉴스</p> |
137 | 137 |
</div> |
138 |
- <div class="green-scroll" style="overflow: auto; height: 75%;"> |
|
138 |
+ <div class="green-scroll" style="overflow: auto; height: 73%; margin: 5px;"> |
|
139 | 139 |
<div style=" padding: 10px;"> |
140 | 140 |
<div v-for="(news, index) in schedules" :key="index"> |
141 | 141 |
<div style="display: flex;"> |
--- client/views/pages/main/PhotoBook.vue
+++ client/views/pages/main/PhotoBook.vue
... | ... | @@ -5,48 +5,95 @@ |
5 | 5 |
<div class="myphoto mb30"> |
6 | 6 |
<div> |
7 | 7 |
<div class="title-box flex justify-end mb40"> |
8 |
+ <p class="class-p">반</p> |
|
8 | 9 |
<select @change="handleClassChange"> |
9 |
- <option v-for="classItem in classList" :key="classItem.sclsId" :value="classItem.sclsId"> |
|
10 |
+ <option |
|
11 |
+ v-for="classItem in classList" |
|
12 |
+ :key="classItem.sclsId" |
|
13 |
+ :value="classItem.sclsId" |
|
14 |
+ > |
|
10 | 15 |
{{ classItem.sclsNm }} |
11 | 16 |
</option> |
12 | 17 |
</select> |
13 | 18 |
</div> |
14 | 19 |
<div class="btnGroup" style="display: flex; flex-direction: column"> |
15 |
- <button v-for="n in totalPages" :key="n" @click="changePage(n)" type="button" title="페이지 버튼" class="tab-btn"> |
|
16 |
- <img v-if="currentPage !== n" src="../../../resources/img/btn49_15s_normal.png" alt="" /> |
|
17 |
- <img v-else src="../../../resources/img/btn49_15s_click.png" alt="" /> |
|
20 |
+ <button |
|
21 |
+ v-for="n in totalPages" |
|
22 |
+ :key="n" |
|
23 |
+ @click="changePage(n)" |
|
24 |
+ type="button" |
|
25 |
+ title="페이지 버튼" |
|
26 |
+ class="tab-btn" |
|
27 |
+ > |
|
28 |
+ <img |
|
29 |
+ v-if="currentPage !== n" |
|
30 |
+ src="../../../resources/img/new_img/photobook/page.png" |
|
31 |
+ alt="" |
|
32 |
+ /> |
|
33 |
+ <img |
|
34 |
+ v-else |
|
35 |
+ src="../../../resources/img/new_img/photobook/page_click.png" |
|
36 |
+ alt="" |
|
37 |
+ /> |
|
18 | 38 |
<p :class="{ 'custom-style': currentPage === n }">{{ n }}</p> |
19 | 39 |
</button> |
20 | 40 |
</div> |
21 | 41 |
<div v-if="selectedTab === 'tab1'" class="tab-box"> |
22 |
- <div class="flex justify-between"> |
|
23 |
- <div v-for="(photo, index) in (photoList?.result || []).slice(0, 3)" :key="index" class="photo" |
|
24 |
- :style="{ transform: getRotation(index) }" @click="buttonSearch(photo)"> |
|
25 |
- <div class="class"> |
|
26 |
- <div class="box"> |
|
27 |
- <div class="photo-container"> |
|
28 |
- <img :src="fetchImage(photo.fileRpath)" alt="" /> |
|
42 |
+ <div |
|
43 |
+ class="flex justify-between" |
|
44 |
+ style="margin-right: -82px; margin-left: -47px" |
|
45 |
+ > |
|
46 |
+ <!-- 왼쪽에 4개의 사진 --> |
|
47 |
+ <div class="left-side"> |
|
48 |
+ <div |
|
49 |
+ v-for="(photo, index) in (photoList?.result || []).slice(0, 4)" |
|
50 |
+ :key="index" |
|
51 |
+ class="photo" |
|
52 |
+ :style="{ transform: getRotation(index) }" |
|
53 |
+ @click="buttonSearch(photo)" |
|
54 |
+ > |
|
55 |
+ <div class="class"> |
|
56 |
+ <div class="box"> |
|
57 |
+ <div class="photo-container"> |
|
58 |
+ <img |
|
59 |
+ :src="fetchImage(photo.fileRpath)" |
|
60 |
+ alt="" |
|
61 |
+ style="width: 150px" |
|
62 |
+ /> |
|
63 |
+ </div> |
|
29 | 64 |
</div> |
30 |
- </div> |
|
31 |
- <div class="photo-text mt10 ml10"> |
|
32 |
- <div class="member ml30">{{ photo.likeData }}</div> |
|
33 |
- <div class="title2">{{ photo.unitName }}</div> |
|
65 |
+ <div class="photo-text mt20 ml30"> |
|
66 |
+ <div class="member ml30">{{ photo.likeData }}</div> |
|
67 |
+ <div class="title2-photo">{{ photo.unitName }}</div> |
|
68 |
+ </div> |
|
34 | 69 |
</div> |
35 | 70 |
</div> |
36 | 71 |
</div> |
37 |
- </div> |
|
38 |
- <div class="flex justify-between mt20"> |
|
39 |
- <div v-for="(photo, index) in (photoList?.result || []).slice(3, 6)" :key="index + 3" class="photo" |
|
40 |
- :style="{ transform: getRotation(index + 3) }" @click="buttonSearch(photo)"> |
|
41 |
- <div class="class"> |
|
42 |
- <div class="box"> |
|
43 |
- <div class="photo-container"> |
|
44 |
- <img :src="fetchImage(photo.fileRpath)" alt="" style="width: 150px" /> |
|
72 |
+ |
|
73 |
+ <!-- 오른쪽에 4개의 사진 --> |
|
74 |
+ <div class="right-side"> |
|
75 |
+ <div |
|
76 |
+ v-for="(photo, index) in (photoList?.result || []).slice(4, 8)" |
|
77 |
+ :key="index + 4" |
|
78 |
+ class="photo" |
|
79 |
+ :style="{ transform: getRotation(index + 4) }" |
|
80 |
+ style="width: fit-content" |
|
81 |
+ @click="buttonSearch(photo)" |
|
82 |
+ > |
|
83 |
+ <div class="class" style="width: 24rem; height: 21rem"> |
|
84 |
+ <div class="box"> |
|
85 |
+ <div class="photo-container"> |
|
86 |
+ <img |
|
87 |
+ :src="fetchImage(photo.fileRpath)" |
|
88 |
+ alt="" |
|
89 |
+ style="width: 150px" |
|
90 |
+ /> |
|
91 |
+ </div> |
|
45 | 92 |
</div> |
46 |
- </div> |
|
47 |
- <div class="photo-text mt10 ml10"> |
|
48 |
- <div class="member ml30">{{ photo.likeData }}</div> |
|
49 |
- <div class="title2">{{ photo.unitName }}</div> |
|
93 |
+ <div class="photo-text mt20 ml30"> |
|
94 |
+ <div class="member ml30">{{ photo.likeData }}</div> |
|
95 |
+ <div class="title2-photo">{{ photo.unitName }}</div> |
|
96 |
+ </div> |
|
50 | 97 |
</div> |
51 | 98 |
</div> |
52 | 99 |
</div> |
... | ... | @@ -57,20 +104,32 @@ |
57 | 104 |
<div class="flex mb10 justify-between"> |
58 | 105 |
<p class="popup-title">알림</p> |
59 | 106 |
<button type="button" class="popup-close-btn" @click="closeBtn"> |
60 |
- <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon> |
|
107 |
+ <svg-icon |
|
108 |
+ type="mdi" |
|
109 |
+ :path="mdiWindowClose" |
|
110 |
+ class="close-btn" |
|
111 |
+ ></svg-icon> |
|
61 | 112 |
</button> |
62 | 113 |
</div> |
63 | 114 |
|
64 |
- <div class="photo-modal flex justify-between mt20" v-if="photoData.length > 0"> |
|
115 |
+ <div |
|
116 |
+ class="photo-modal flex justify-between mt20" |
|
117 |
+ v-if="photoData.length > 0" |
|
118 |
+ > |
|
65 | 119 |
<div class="box"> |
66 | 120 |
<div> |
67 |
- <img :src="fetchImage(photoData[0].fileRpath)" alt="" style="width: 640px; height: 480px" /> |
|
121 |
+ <img |
|
122 |
+ :src="fetchImage(photoData[0].fileRpath)" |
|
123 |
+ alt="" |
|
124 |
+ style="width: 640px; height: 480px" |
|
125 |
+ /> |
|
68 | 126 |
</div> |
69 | 127 |
</div> |
70 | 128 |
<div class="photo-title-container"> |
71 | 129 |
<div class="title1"> |
72 | 130 |
{{ photoData[0].unitName }}을 마친 |
73 |
- <em class="yellow">{{ photoData[0].stdName }}</em>친구 |
|
131 |
+ <em class="yellow">{{ photoData[0].stdName }}</em |
|
132 |
+ >친구 |
|
74 | 133 |
</div> |
75 | 134 |
<p class="title2 date">{{ photoData[0].photoDate }}</p> |
76 | 135 |
</div> |
... | ... | @@ -101,7 +160,7 @@ |
101 | 160 |
photoData: [], |
102 | 161 |
|
103 | 162 |
currentPage: 1, |
104 |
- pageSize: 6, |
|
163 |
+ pageSize: 8, |
|
105 | 164 |
totalPages: 1, |
106 | 165 |
|
107 | 166 |
mdiWindowClose: mdiWindowClose, |
... | ... | @@ -133,9 +192,8 @@ |
133 | 192 |
console.log("classList - response : ", response.data); |
134 | 193 |
vm.classList = response.data.data; |
135 | 194 |
vm.currentPage = 1; |
136 |
- vm.selectedSclsId= vm.classList[0].sclsId; |
|
195 |
+ vm.selectedSclsId = vm.classList[0].sclsId; |
|
137 | 196 |
vm.stdPhotoSelectList(); |
138 |
- |
|
139 | 197 |
}) |
140 | 198 |
.catch(function (error) { |
141 | 199 |
console.log("classList - error : ", error); |
... | ... | @@ -144,35 +202,35 @@ |
144 | 202 |
}, |
145 | 203 |
|
146 | 204 |
handleClassChange(event) { |
147 |
- this.selectedSclsId = event.target.value; // 선택된 sclsId 가져오기 |
|
148 |
- this.currentPage = 1; // 페이지 초기화 |
|
149 |
- this.stdPhotoSelectList(); // 함수 호출 |
|
150 |
- }, |
|
151 |
- stdPhotoSelectList: function (scsId) { |
|
152 |
- const vm = this; |
|
153 |
- axios({ |
|
154 |
- url: "/photo/stdPhotoList.json", |
|
155 |
- method: "post", |
|
156 |
- headers: { |
|
157 |
- "Content-Type": "application/json; charset=UTF-8", |
|
158 |
- }, |
|
159 |
- data: { |
|
160 |
- stdId: "1", |
|
161 |
- sclsId: vm.selectedSclsId, // 여기에 sclsId 들어가야 함 |
|
162 |
- page: vm.currentPage, |
|
163 |
- pageSize: vm.pageSize, |
|
164 |
- }, |
|
165 |
- }) |
|
166 |
- .then(function (response) { |
|
167 |
- console.log("photoList - response : ", response.data); |
|
168 |
- vm.photoList = response.data; |
|
169 |
- vm.totalPages = Math.ceil(response.data.photoCount / vm.pageSize); |
|
205 |
+ this.selectedSclsId = event.target.value; // 선택된 sclsId 가져오기 |
|
206 |
+ this.currentPage = 1; // 페이지 초기화 |
|
207 |
+ this.stdPhotoSelectList(); // 함수 호출 |
|
208 |
+ }, |
|
209 |
+ stdPhotoSelectList: function (scsId) { |
|
210 |
+ const vm = this; |
|
211 |
+ axios({ |
|
212 |
+ url: "/photo/stdPhotoList.json", |
|
213 |
+ method: "post", |
|
214 |
+ headers: { |
|
215 |
+ "Content-Type": "application/json; charset=UTF-8", |
|
216 |
+ }, |
|
217 |
+ data: { |
|
218 |
+ stdId: "1", |
|
219 |
+ sclsId: vm.selectedSclsId, // 여기에 sclsId 들어가야 함 |
|
220 |
+ page: vm.currentPage, |
|
221 |
+ pageSize: vm.pageSize, |
|
222 |
+ }, |
|
170 | 223 |
}) |
171 |
- .catch(function (error) { |
|
172 |
- console.log("photoList - error : ", error); |
|
173 |
- alert("반별 내 사진 조회에 오류가 발생했습니다."); |
|
174 |
- }); |
|
175 |
- }, |
|
224 |
+ .then(function (response) { |
|
225 |
+ console.log("photoList - response : ", response.data); |
|
226 |
+ vm.photoList = response.data; |
|
227 |
+ vm.totalPages = Math.ceil(response.data.photoCount / vm.pageSize); |
|
228 |
+ }) |
|
229 |
+ .catch(function (error) { |
|
230 |
+ console.log("photoList - error : ", error); |
|
231 |
+ alert("반별 내 사진 조회에 오류가 발생했습니다."); |
|
232 |
+ }); |
|
233 |
+ }, |
|
176 | 234 |
getRotation(index) { |
177 | 235 |
const rotations = [2, -1, 1, -2, 1, -1]; |
178 | 236 |
return `rotate(${rotations[index]}deg)`; |
... | ... | @@ -305,6 +363,7 @@ |
305 | 363 |
.class { |
306 | 364 |
width: 260px; |
307 | 365 |
height: 200px; |
366 |
+ background-repeat: no-repeat; |
|
308 | 367 |
} |
309 | 368 |
|
310 | 369 |
.photo-container { |
... | ... | @@ -314,6 +373,9 @@ |
314 | 373 |
.photo-container img { |
315 | 374 |
width: 150px; |
316 | 375 |
height: 110px; |
376 |
+ height: 105px; |
|
377 |
+ position: relative; |
|
378 |
+ top: 23px; |
|
317 | 379 |
} |
318 | 380 |
|
319 | 381 |
.photo-text { |
... | ... | @@ -335,4 +397,36 @@ |
335 | 397 |
justify-content: space-between; |
336 | 398 |
margin-top: 20px; |
337 | 399 |
} |
400 |
+ |
|
401 |
+select { |
|
402 |
+ border-radius: 16px; |
|
403 |
+ position: absolute; |
|
404 |
+ top: 42px; |
|
405 |
+ right: 33px; |
|
406 |
+} |
|
407 |
+ |
|
408 |
+.class-p { |
|
409 |
+ font-size: 23px; |
|
410 |
+ position: absolute; |
|
411 |
+ top: 52px; |
|
412 |
+ right: 218px; |
|
413 |
+} |
|
414 |
+ |
|
415 |
+.left-side, |
|
416 |
+.right-side { |
|
417 |
+ width: 48%; /* 좌우로 나눔 */ |
|
418 |
+ display: flex; |
|
419 |
+ flex-wrap: wrap; |
|
420 |
+ align-content: flex-start; |
|
421 |
+} |
|
422 |
+ |
|
423 |
+.title2-photo { |
|
424 |
+ font-size: 15px; |
|
425 |
+ font-weight: bold; |
|
426 |
+ font-family: "ONEMobileOTF-Regular"; |
|
427 |
+ max-width: 175px; |
|
428 |
+ white-space: nowrap; |
|
429 |
+ overflow: hidden; |
|
430 |
+ text-overflow: ellipsis; |
|
431 |
+} |
|
338 | 432 |
</style> |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?