jichoi / lms_front star
이은진 이은진 2024-08-16
240816 이은진, 정다정 토끼 위치 수정
@5a5801550ce58c11c4cf24fe664644aa7abd2d35
client/views/pages/main/Chapter/Chapter1_2.vue
--- client/views/pages/main/Chapter/Chapter1_2.vue
+++ client/views/pages/main/Chapter/Chapter1_2.vue
@@ -5,12 +5,17 @@
         <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div>
       </router-link>
     </div>
-    <div class="title-box mb25 flex align-center mt40">
-      <span class="title mr40">1. Hello WORLD</span>
-      <span class="subtitle">my name is dd</span>
+    <div class="title-box mb25 flex align-center mt40" style="
+    justify-content: space-between;
+">
+      <div>
+        <span class="title mr40">1. Hello WORLD</span>
+        <span class="subtitle">my name is dd</span>
+      </div>
+      <button class="completeBtn" @click="complete"> 학습 종료 </button>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn"  @click="goToPage('Chapter1_1')"><img src="../../../../resources/img/left.png" alt=""></div>
+      <div class="pre-btn" @click="goToPage('Chapter1_1')"><img src="../../../../resources/img/left.png" alt=""></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step1. Hello WORLD</p>
         <div class="flex justify-center">
@@ -48,13 +53,13 @@
                 </article>
               </div>
             </div>
-  
+
           </div>
         </div>
       </div>
       <div class="next-btn" @click="goToPage('Chapter1_3')"><img src="../../../../resources/img/right.png" alt=""></div>
     </div>
-    <TextToImage/>
+    <TextToImage />
   </div>
 </template>
 
@@ -66,6 +71,9 @@
     }
   },
   methods: {
+    complete() {
+      this.$router.push({ name: 'Dashboard', query: { value: 1 } });
+    },
     goToPage(page) {
       this.$router.push({ name: page });
     }
@@ -77,35 +85,46 @@
 
   },
   components: {
-    TextToImage : TextToImage
+    TextToImage: TextToImage
   },
   mounted() {
     const textArea = this.$refs.textArea;
-      const popup = this.$refs.popup;
+    const popup = this.$refs.popup;
 
-      textArea.addEventListener('mousemove', (event) => {
-         const text = textArea.value;
-         const words = text.split(' ');
-         const selectionStart = textArea.selectionStart;
-         const selectionEnd = textArea.selectionEnd;
+    textArea.addEventListener('mousemove', (event) => {
+      const text = textArea.value;
+      const words = text.split(' ');
+      const selectionStart = textArea.selectionStart;
+      const selectionEnd = textArea.selectionEnd;
 
-         if (selectionStart !== selectionEnd) {
-            const selectedText = text.substring(selectionStart, selectionEnd);
-            const rect = textArea.getBoundingClientRect();
-            popup.style.left = `${event.clientX}px`;
-            popup.style.top = `${event.clientY + window.scrollY}px`;
-            popup.innerHTML = `You selected: ${selectedText}`;
-            popup.style.display = 'block';
-         } else {
-            popup.style.display = 'none';
-         }
-      });
+      if (selectionStart !== selectionEnd) {
+        const selectedText = text.substring(selectionStart, selectionEnd);
+        const rect = textArea.getBoundingClientRect();
+        popup.style.left = `${event.clientX}px`;
+        popup.style.top = `${event.clientY + window.scrollY}px`;
+        popup.innerHTML = `You selected: ${selectedText}`;
+        popup.style.display = 'block';
+      } else {
+        popup.style.display = 'none';
+      }
+    });
 
-      document.addEventListener('click', (event) => {
-         if (!textArea.contains(event.target) && !popup.contains(event.target)) {
-            popup.style.display = 'none';
-         }
-      });
+    document.addEventListener('click', (event) => {
+      if (!textArea.contains(event.target) && !popup.contains(event.target)) {
+        popup.style.display = 'none';
+      }
+    });
   }
 }
-</script>
(No newline at end of file)
+</script>
+
+<style>
+.completeBtn {
+  margin-right: 100px;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: 'ONEMobilePOPOTF';
+}
+</style>
(No newline at end of file)
client/views/pages/main/Chapter/Chapter1_3.vue
--- client/views/pages/main/Chapter/Chapter1_3.vue
+++ client/views/pages/main/Chapter/Chapter1_3.vue
@@ -5,27 +5,36 @@
                 <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div>
             </router-link>
         </div>
-        <div class="title-box mb25 flex align-center mt40">
-            <span class="title mr40">1. Hello WORLD</span>
-            <span class="subtitle">my name is dd</span>
+        <div class="title-box mb25 flex align-center mt40" style="
+    justify-content: space-between;
+">
+            <div>
+                <span class="title mr40">1. Hello WORLD</span>
+                <span class="subtitle">my name is dd</span>
+            </div>
+            <button class="completeBtn" @click="complete"> 학습 종료 </button>
         </div>
         <div class="flex justify-between align-center">
-            <div class="pre-btn"  @click="goToPage('Dashboard')"><img src="../../../../resources/img/left.png" alt=""></div>
+            <div class="pre-btn" @click="goToPage('Dashboard')"><img src="../../../../resources/img/left.png" alt="">
+            </div>
             <div class="content title-box">
                 <div class="listenGroup">
                     <p class="title mt25 title-bg">step1. Hello WORLD</p>
                     <img class="bg" src="../../../../resources/img/img39_s.png" data-num="1">
                     <div class="textbox">
                         <p class="title">The Eiffel Tower and the statue of Lierbty</p>
-                        <p>The Eiffel Tower is a symbol of Paris, France. People call it the "Iron Lady." It was built for the 1889 World's Fair in Paris. It's 320 meters tall. There are 1,665 steps to the top. You can walk or take elevators to the top.</p>
+                        <p>The Eiffel Tower is a symbol of Paris, France. People call it the "Iron Lady." It was built
+                            for the 1889 World's Fair in Paris. It's 320 meters tall. There are 1,665 steps to the top.
+                            You can walk or take elevators to the top.</p>
                     </div>
-                    <button class="listen-btn" data-video="1" tabindex="0" aria-label="재생"><img src="../../../../resources/img/btn09_s.png"
-                            data-num="1"></button>
+                    <button class="listen-btn" data-video="1" tabindex="0" aria-label="재생"><img
+                            src="../../../../resources/img/btn09_s.png" data-num="1"></button>
                 </div>
             </div>
-            <div class="next-btn"  @click="goToPage('Chapter2')"><img src="../../../../resources/img/right.png" alt=""></div>
+            <div class="next-btn" @click="goToPage('Chapter2')"><img src="../../../../resources/img/right.png" alt="">
+            </div>
         </div>
-        <TextToImage/>
+        <TextToImage />
     </div>
 </template>
 
@@ -37,6 +46,9 @@
         }
     },
     methods: {
+        complete() {
+            this.$router.push({ name: 'Dashboard', query: { value: 1 } });
+        },
         goToPage(page) {
             this.$router.push({ name: page });
         }
@@ -48,12 +60,23 @@
 
     },
     components: {
-        TextToImage : TextToImage
+        TextToImage: TextToImage
     },
     mounted() {
     }
 }
 </script>
 <style scoped>
-.listenGroup .textbox { width: 900px};
+.listenGroup .textbox {
+    width: 900px
+}
+
+.completeBtn {
+    margin-right: 100px;
+    background-color: #ffba08;
+    padding: 10px 30px;
+    border-radius: 10px;
+    font-size: 28px;
+    font-family: 'ONEMobilePOPOTF';
+}
 </style>
(No newline at end of file)
client/views/pages/main/Chapter/Chapter2_10.vue
--- client/views/pages/main/Chapter/Chapter2_10.vue
+++ client/views/pages/main/Chapter/Chapter2_10.vue
@@ -7,9 +7,14 @@
         </div>
       </router-link>
     </div>
-    <div class="title-box mb25 flex align-center mt40">
-      <span class="title mr40">1. Hello WORLD</span>
-      <span class="subtitle">my name is dd</span>
+    <div class="title-box mb25 flex align-center mt40" style="
+    justify-content: space-between;
+">
+      <div>
+        <span class="title mr40">1. Hello WORLD</span>
+        <span class="subtitle">my name is dd</span>
+      </div>
+      <button class="completeBtn" @click="complete"> 학습 종료 </button>
     </div>
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_6')">
@@ -55,10 +60,7 @@
               <article class="flex justify-center mb50" style="gap: 60px">
                 <div class="flex" style="align-items: center">
                   <button @click="handleClick(1)">
-                    <img
-                      src="../../../../resources/img/img136_71s.png"
-                      alt=""
-                    />
+                    <img src="../../../../resources/img/img136_71s.png" alt="" />
                     <p :class="{ active: selectedButton === 1 }">1</p>
                   </button>
                   <p>{{ choice[0] }}</p>
@@ -67,10 +69,7 @@
               <article class="flex justify-center mb50" style="gap: 60px">
                 <div class="flex" style="align-items: center">
                   <button @click="handleClick(2)">
-                    <img
-                      src="../../../../resources/img/img136_71s.png"
-                      alt=""
-                    />
+                    <img src="../../../../resources/img/img136_71s.png" alt="" />
                     <p :class="{ active: selectedButton === 2 }">2</p>
                   </button>
                   <p>{{ choice[1] }}</p>
@@ -79,10 +78,7 @@
               <article class="flex justify-center" style="gap: 60px">
                 <div class="flex" style="align-items: center">
                   <button @click="handleClick(3)">
-                    <img
-                      src="../../../../resources/img/img136_71s.png"
-                      alt=""
-                    />
+                    <img src="../../../../resources/img/img136_71s.png" alt="" />
                     <p :class="{ active: selectedButton === 3 }">3</p>
                   </button>
                   <p>{{ choice[2] }}</p>
@@ -116,6 +112,9 @@
     };
   },
   methods: {
+    complete() {
+      this.$router.push({ name: 'Dashboard', query: { value: 3 } });
+    },
     goToPage(page) {
       this.$router.push({ name: page });
     },
@@ -160,6 +159,7 @@
 .imgGroup {
   width: fit-content;
 }
+
 .imgGroup button {
   position: relative;
 }
@@ -178,12 +178,14 @@
   font-size: 23px;
   font-family: "ONEMobilePOP";
 }
+
 .pickGroup {
   display: flex;
   flex-direction: row;
   align-items: center;
   gap: 40px;
 }
+
 .pickGroup button {
   position: relative;
   margin-right: 30px;
@@ -203,13 +205,15 @@
   width: -webkit-fill-available;
 }
 
-.pickGroup article > div > p {
+.pickGroup article>div>p {
   font-size: 25px;
-  white-space: nowrap; /* 텍스트가 줄 바꿈 없이 한 줄로 표시되도록 설정 */
+  white-space: nowrap;
+  /* 텍스트가 줄 바꿈 없이 한 줄로 표시되도록 설정 */
 }
 
 .pickGroup button p.active {
-  color: #000; /* 선택된 버튼의 숫자 색을 더 진하게 */
+  color: #000;
+  /* 선택된 버튼의 숫자 색을 더 진하게 */
 }
 
 .pickImg {
@@ -233,4 +237,13 @@
   font-weight: bold;
   font-size: 24px;
 }
+
+.completeBtn {
+  margin-right: 100px;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: 'ONEMobilePOPOTF';
+}
 </style>
client/views/pages/main/Chapter/Chapter2_11.vue
--- client/views/pages/main/Chapter/Chapter2_11.vue
+++ client/views/pages/main/Chapter/Chapter2_11.vue
@@ -7,9 +7,14 @@
         </div>
       </router-link>
     </div>
-    <div class="title-box mb25 flex align-center mt40">
-      <span class="title mr40">1. Hello WORLD</span>
-      <span class="subtitle">my name is dd</span>
+    <div class="title-box mb25 flex align-center mt40" style="
+    justify-content: space-between;
+">
+      <div>
+        <span class="title mr40">1. Hello WORLD</span>
+        <span class="subtitle">my name is dd</span>
+      </div>
+      <button class="completeBtn" @click="complete"> 학습 종료 </button>
     </div>
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_10')">
@@ -42,10 +47,7 @@
             </div>
           </div>
           <div class="pickGroup">
-            <article
-              class="flex justify-center"
-              style="gap: 60px; bottom: 159px; left: 242px"
-            >
+            <article class="flex justify-center" style="gap: 60px; bottom: 159px; left: 242px">
               <div class="flex">
                 <button @click="handleClick(1)">
                   <img src="../../../../resources/img/img136_71s.png" alt="" />
@@ -54,10 +56,7 @@
                 <p>{{ choice[0] }}</p>
               </div>
             </article>
-            <article
-              class="flex justify-center"
-              style="gap: 60px; bottom: 159px; right: 559px"
-            >
+            <article class="flex justify-center" style="gap: 60px; bottom: 159px; right: 559px">
               <div class="flex">
                 <button @click="handleClick(2)">
                   <img src="../../../../resources/img/img136_71s.png" alt="" />
@@ -95,6 +94,9 @@
     };
   },
   methods: {
+    complete() {
+      this.$router.push({ name: 'Dashboard', query: { value: 3 } });
+    },
     goToPage(page) {
       this.$router.push({ name: page });
     },
@@ -123,7 +125,7 @@
   watch: {},
   computed: {},
   components: {},
-  mounted() {},
+  mounted() { },
 };
 </script>
 <style scoped>
@@ -131,6 +133,7 @@
   margin-left: 183px;
   width: auto;
 }
+
 .pickGroup button {
   position: relative;
   margin-right: 30px;
@@ -144,19 +147,23 @@
   left: 50%;
   transform: translate(-50%, -50%);
 }
+
 .pickGroup article {
   position: absolute;
 }
+
 .pickGroup article img {
   object-fit: contain;
   width: -webkit-fill-available;
 }
-.pickGroup article > div > p {
+
+.pickGroup article>div>p {
   font-size: 64px;
 }
 
 .pickGroup button p.active {
-  color: #000; /* 선택된 버튼의 숫자 색을 더 진하게 */
+  color: #000;
+  /* 선택된 버튼의 숫자 색을 더 진하게 */
 }
 
 .inputGroup {
@@ -174,6 +181,7 @@
   margin-right: 10px;
   text-align: right;
 }
+
 .answerButton {
   background-color: #ffc107;
   border-radius: 30px;
@@ -183,4 +191,13 @@
   font-weight: bold;
   font-size: 24px;
 }
+
+.completeBtn {
+  margin-right: 100px;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: 'ONEMobilePOPOTF';
+}
 </style>
client/views/pages/main/Chapter/Chapter2_13.vue
--- client/views/pages/main/Chapter/Chapter2_13.vue
+++ client/views/pages/main/Chapter/Chapter2_13.vue
@@ -7,9 +7,14 @@
         </div>
       </router-link>
     </div>
-    <div class="title-box mb25 flex align-center mt40">
-      <span class="title mr40">1. Hello WORLD</span>
-      <span class="subtitle">my name is dd</span>
+    <div class="title-box mb25 flex align-center mt40" style="
+    justify-content: space-between;
+">
+      <div>
+        <span class="title mr40">1. Hello WORLD</span>
+        <span class="subtitle">my name is dd</span>
+      </div>
+      <button class="completeBtn" @click="complete"> 학습 종료 </button>
     </div>
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_11')">
@@ -39,11 +44,7 @@
         <div class="text-ct">
           <div class="imgGroup flex align-center justify-center">
             <div class="flex" style="gap: 20px; position: relative">
-              <img
-                src="../../../../resources/img/img105_46s.png"
-                alt=""
-                style="width: 90%"
-              />
+              <img src="../../../../resources/img/img105_46s.png" alt="" style="width: 90%" />
 
               <div class="textbox">
                 <p class="little-title">{{ problem }}</p>
@@ -51,10 +52,7 @@
                   <article class="flex mb10" style="gap: 60px">
                     <div class="flex align-center" @click="handleClick(1)">
                       <button>
-                        <img
-                          src="../../../../resources/img/img136_71s.png"
-                          alt=""
-                        />
+                        <img src="../../../../resources/img/img136_71s.png" alt="" />
                         <p :class="{ active: selectedButton === 1 }">1</p>
                       </button>
                       <p class="red">{{ choice[0] }}</p>
@@ -63,10 +61,7 @@
                   <article class="flex mb10" style="gap: 60px">
                     <div class="flex align-center" @click="handleClick(2)">
                       <button>
-                        <img
-                          src="../../../../resources/img/img136_71s.png"
-                          alt=""
-                        />
+                        <img src="../../../../resources/img/img136_71s.png" alt="" />
                         <p :class="{ active: selectedButton === 2 }">2</p>
                       </button>
                       <p class="orange">{{ choice[1] }}</p>
@@ -75,10 +70,7 @@
                   <article class="flex mb10" style="gap: 60px">
                     <div class="flex align-center" @click="handleClick(3)">
                       <button>
-                        <img
-                          src="../../../../resources/img/img136_71s.png"
-                          alt=""
-                        />
+                        <img src="../../../../resources/img/img136_71s.png" alt="" />
                         <p :class="{ active: selectedButton === 3 }">3</p>
                       </button>
                       <p class="blue">{{ choice[2] }}</p>
@@ -87,10 +79,7 @@
                   <article class="flex" style="gap: 60px">
                     <div class="flex align-center" @click="handleClick(4)">
                       <button>
-                        <img
-                          src="../../../../resources/img/img136_71s.png"
-                          alt=""
-                        />
+                        <img src="../../../../resources/img/img136_71s.png" alt="" />
                         <p :class="{ active: selectedButton === 4 }">4</p>
                       </button>
                       <p class="green">{{ choice[3] }}</p>
@@ -99,11 +88,7 @@
                 </div>
               </div>
               <!-- 오답일 경우 아래의 이미지가 보여야함 -->
-              <div
-                v-if="correct"
-                class="flex justify-center wrong-anwser"
-                style="gap: 20px"
-              >
+              <div v-if="correct" class="flex justify-center wrong-anwser" style="gap: 20px">
                 <img src="../../../../resources/img/img165_46s.png" alt="" />
               </div>
             </div>
@@ -140,6 +125,9 @@
     };
   },
   methods: {
+    complete() {
+      this.$router.push({ name: 'Dashboard', query: { value: 3 } });
+    },
     goToPage(page) {
       this.$router.push({ name: page });
     },
@@ -179,7 +167,7 @@
   watch: {},
   computed: {},
   components: {},
-  mounted() {},
+  mounted() { },
 };
 </script>
 <style scoped>
@@ -189,27 +177,33 @@
   left: 45%;
   transform: translate(-50%, -50%);
 }
+
 .textbox {
   position: absolute;
   top: 140px;
   left: 45px;
 }
+
 .time-bg {
   margin-right: 40px;
   top: 136px;
   right: 124px;
 }
+
 .pickGroup {
   margin: 40px 0 0 180px;
 }
+
 .pickGroup button {
   position: relative;
   margin-right: 30px;
 }
+
 .pickGroup button img {
   width: 33px;
   height: 33px;
 }
+
 .pickGroup button p {
   font-size: 20px;
   color: #c6c6c6;
@@ -218,15 +212,18 @@
   left: 50%;
   transform: translate(-50%, -50%);
 }
+
 .pickGroup article {
   cursor: pointer;
 }
-.pickGroup article > div > p {
+
+.pickGroup article>div>p {
   font-size: 24px;
 }
 
 .pickGroup button p.active {
-  color: #000; /* 선택된 버튼의 숫자 색을 더 진하게 */
+  color: #000;
+  /* 선택된 버튼의 숫자 색을 더 진하게 */
 }
 
 .little-title {
@@ -251,6 +248,7 @@
   margin-top: 295px;
   text-align: right;
 }
+
 .answerButton {
   background-color: #ffc107;
   border-radius: 30px;
@@ -260,4 +258,13 @@
   font-weight: bold;
   font-size: 24px;
 }
+
+.completeBtn {
+  margin-right: 100px;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: 'ONEMobilePOPOTF';
+}
 </style>
client/views/pages/main/Chapter/Chapter2_5.vue
--- client/views/pages/main/Chapter/Chapter2_5.vue
+++ client/views/pages/main/Chapter/Chapter2_5.vue
@@ -7,9 +7,14 @@
         </div>
       </router-link>
     </div>
-    <div class="title-box mb25 flex align-center mt40">
-      <span class="title mr40">1. Hello WORLD</span>
-      <span class="subtitle">my name is dd</span>
+    <div class="title-box mb25 flex align-center mt40" style="
+    justify-content: space-between;
+">
+      <div>
+        <span class="title mr40">1. Hello WORLD</span>
+        <span class="subtitle">my name is dd</span>
+      </div>
+      <button class="completeBtn" @click="complete"> 학습 종료 </button>
     </div>
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_7')">
@@ -17,7 +22,7 @@
       </div>
       <div class="content title-box">
         <div style="display: flex; justify-content: space-between">
-          <p class="title mt25 title-bg">step3-놀면서 배우는 영어</p>
+          <p class="title mt25 title-bg">step3 - 놀면서 배우는 영어</p>
           <button id="returnButton" @click="returnPage" style="margin: 4rem">
             <img src="../../../../resources/img/btn_return_50x50.png" alt="" />
             <p>되돌리기</p>
@@ -41,22 +46,10 @@
 
             <!-- 드롭 가능한 영역 -->
             <div class="dropContainer" id="targetContainer">
-              <div
-                v-for="(slot, index) in answerLength"
-                :key="index"
-                class="dropSlot"
-                @dragover.prevent
-                @drop="onDrop($event, index)"
-              >
-                <div
-                  class="dropSlot-inner"
-                  draggable="true"
-                  @dragstart="onDragStart($event, userAnswer[index], index)"
-                >
-                  <img
-                    src="../../../../resources/img/img64_37s.png"
-                    alt="answer slot"
-                  />
+              <div v-for="(slot, index) in answerLength" :key="index" class="dropSlot" @dragover.prevent
+                @drop="onDrop($event, index)">
+                <div class="dropSlot-inner" draggable="true" @dragstart="onDragStart($event, userAnswer[index], index)">
+                  <img src="../../../../resources/img/img64_37s.png" alt="answer slot" />
                   <div v-if="userAnswer[index]" class="dropped-char">
                     {{ userAnswer[index].toUpperCase() }}
                   </div>
@@ -69,16 +62,9 @@
 
           <!-- 드래그 가능한 버튼 -->
           <div class="dragGroup mt40" id="sourceContainer">
-            <button
-              v-for="(char, index) in choiceCharacters"
-              :key="index"
-              draggable="true"
-              @dragstart="onDragStart($event, char)"
-            >
-              <img
-                src="../../../../resources/img/img63_37s_2.png"
-                alt="drag letter"
-              />
+            <button v-for="(char, index) in choiceCharacters" :key="index" draggable="true"
+              @dragstart="onDragStart($event, char)">
+              <img src="../../../../resources/img/img63_37s_2.png" alt="drag letter" />
               <p>{{ char.toUpperCase() }}</p>
             </button>
           </div>
@@ -113,6 +99,9 @@
     },
   },
   methods: {
+    complete() {
+      this.$router.push({ name: 'Dashboard', query: { value: 3 } });
+    },
     goToPage(page) {
       this.$router.push({ name: page });
     },
@@ -173,28 +162,35 @@
   justify-content: center;
   gap: 10px;
 }
+
 .dropGroup button {
   position: relative;
 }
+
 .dropGroup button p {
   font-size: 48px;
 }
+
 .dragGroup button p {
   font-size: 48px;
 }
+
 .dropGroup span {
   margin: 0px 10px;
 }
+
 .dropSlot {
   position: relative;
   width: 64px;
   height: 64px;
 }
+
 .dropSlot-inner {
   position: relative;
   width: 100%;
   height: 100%;
 }
+
 .dropped-char {
   font-family: "ONEMobilePOPOTF";
   position: absolute;
@@ -206,16 +202,28 @@
   color: black;
   pointer-events: none;
 }
+
 .dragGroup button p {
   font-size: 48px;
 }
+
 .exampleImg {
   width: 15%;
 }
+
 #sourceContainer {
   display: flex;
   align-items: center;
   justify-content: center;
   gap: 20px;
 }
+
+.completeBtn {
+  margin-right: 100px;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: 'ONEMobilePOPOTF';
+}
 </style>
client/views/pages/main/Chapter/Chapter2_6.vue
--- client/views/pages/main/Chapter/Chapter2_6.vue
+++ client/views/pages/main/Chapter/Chapter2_6.vue
@@ -5,9 +5,14 @@
         <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div>
       </router-link>
     </div>
-    <div class="title-box mb25 flex align-center mt40">
-      <span class="title mr40">1. Hello WORLD</span>
-      <span class="subtitle">my name is dd</span>
+    <div class="title-box mb25 flex align-center mt40" style="
+    justify-content: space-between;
+">
+      <div>
+        <span class="title mr40">1. Hello WORLD</span>
+        <span class="subtitle">my name is dd</span>
+      </div>
+      <button class="completeBtn" @click="complete"> 학습 종료 </button>
     </div>
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_5')"><img src="../../../../resources/img/left.png" alt=""></div>
@@ -67,7 +72,8 @@
           </div>
         </div>
       </div>
-      <div class="next-btn" @click="goToPage('Chapter2_10')"><img src="../../../../resources/img/right.png" alt=""></div>
+      <div class="next-btn" @click="goToPage('Chapter2_10')"><img src="../../../../resources/img/right.png" alt="">
+      </div>
     </div>
   </div>
 </template>
@@ -86,6 +92,9 @@
     }
   },
   methods: {
+    complete() {
+      this.$router.push({ name: 'Dashboard', query: { value: 3 } });
+    },
     goToPage(page) {
       this.$router.push({ name: page });
     },
@@ -141,4 +150,14 @@
 .dropGroup button p {
   font-size: 48px;
   color: #fff;
-}</style>
+}
+
+.completeBtn {
+  margin-right: 100px;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: 'ONEMobilePOPOTF';
+}
+</style>
client/views/pages/main/Chapter/Chapter2_7.vue
--- client/views/pages/main/Chapter/Chapter2_7.vue
+++ client/views/pages/main/Chapter/Chapter2_7.vue
@@ -5,11 +5,14 @@
         <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div>
       </router-link>
     </div>
-    <div class="title-box mb25 flex align-center mt40">
-      <!-- 단원명 -->
-      <span class="title mr40">1. Hello WORLD</span>  
-      <!-- 소제목 -->
-      <span class="subtitle">my name is dd</span>
+    <div class="title-box mb25 flex align-center mt40" style="
+    justify-content: space-between;
+">
+      <div>
+        <span class="title mr40">1. Hello WORLD</span>
+        <span class="subtitle">my name is dd</span>
+      </div>
+      <button class="completeBtn" @click="complete"> 학습 종료 </button>
     </div>
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_8')"><img src="../../../../resources/img/left.png" alt=""></div>
@@ -68,6 +71,9 @@
     };
   },
   methods: {
+    complete() {
+      this.$router.push({ name: 'Dashboard', query: { value: 4 } });
+    },
     goToPage(page) {
       this.$router.push({ name: page });
     },
@@ -91,20 +97,20 @@
         cloneElement.style.left = "-50px";
         dropZone.innerHTML = ""; // 기존 ? 텍스트 제거
         dropZone.appendChild(cloneElement);
-        
+
         // 드래그한 버튼 숨기기
         draggedElement.style.visibility = "hidden";
-        
+
         // DOM 업데이트 후 알림을 비동기적으로 처리
         setTimeout(() => {
           if (this.draggedElementId === this.correctAnswer) {
             alert("정답입니다!");
-            
+
           } else {
             alert("오답입니다!");
             window.location.reload();
           }
-          
+
           // 드래그 상태 초기화
           this.draggedElementId = null;
         }, 0);
@@ -143,4 +149,13 @@
 .dragGroup button[draggable="true"]:active {
   cursor: grabbing;
 }
+
+.completeBtn {
+  margin-right: 100px;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: 'ONEMobilePOPOTF';
+}
 </style>
client/views/pages/main/Chapter/Chapter2_8.vue
--- client/views/pages/main/Chapter/Chapter2_8.vue
+++ client/views/pages/main/Chapter/Chapter2_8.vue
@@ -5,9 +5,14 @@
         <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div>
       </router-link>
     </div>
-    <div class="title-box mb25 flex align-center mt40">
-      <span class="title mr40">1. Hello WORLD</span>
-      <span class="subtitle">my name is dd</span>
+    <div class="title-box mb25 flex align-center mt40" style="
+    justify-content: space-between;
+">
+      <div>
+        <span class="title mr40">1. Hello WORLD</span>
+        <span class="subtitle">my name is dd</span>
+      </div>
+      <button class="completeBtn" @click="complete"> 학습 종료 </button>
     </div>
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_4')"><img src="../../../../resources/img/left.png" alt=""></div>
@@ -68,7 +73,7 @@
   </div>
 </template>
 
-  
+
 <script>
 export default {
   data() {
@@ -77,6 +82,9 @@
     };
   },
   methods: {
+    complete() {
+      this.$router.push({ name: 'Dashboard', query: { value: 3 } });
+    },
     goToPage(page) {
       this.$router.push({ name: page });
     },
@@ -160,4 +168,13 @@
   display: block;
   /* 이미지가 항상 보이도록 설정 */
 }
+
+.completeBtn {
+  margin-right: 100px;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: 'ONEMobilePOPOTF';
+}
 </style>
(No newline at end of file)
client/views/pages/main/Dashboard.vue
--- client/views/pages/main/Dashboard.vue
+++ client/views/pages/main/Dashboard.vue
@@ -37,87 +37,96 @@
                     </div>
                 </div>
                 <div class="lcon flex justify-between mb5">
-                    <div class="race-btn" @click="goToPage('Chapter7')">
+                    <div class="race-btn" @click="goToPage('Chapter2_8')">
+                        <div class="rabbit-running"><img src="../../../resources/img/img09_s.png" alt=""
+                                :style="{ display: rabbitPos[7] ? 'block' : 'none' }"></div>
                         <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"
                             data-num="7">
-                            <img :src="item.imgSrc1"
-                                :style="{ display: !item.isSecondImageVisible ? 'block' : 'none' }">
-                            <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                            <img :src="item.imgSrc1" :style="{ display: !rabbitCompl[7] ? 'block' : 'none' }">
+                            <img :src="item.imgSrc2" :style="{ display: rabbitCompl[7] ? 'block' : 'none' }">
                         </button>
                         <p>문제1</p>
                     </div>
                     <div class="race-btn" @click="goToPage('Chapter6')">
+                        <div class="rabbit-running"><img src="../../../resources/img/img09_s.png" alt=""
+                                :style="{ display: rabbitPos[6] ? 'block' : 'none' }"></div>
                         <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"
                             data-num="6">
-                            <img :src="item.imgSrc1"
-                                :style="{ display: !item.isSecondImageVisible ? 'block' : 'none' }">
-                            <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                            <img :src="item.imgSrc1" :style="{ display: !rabbitCompl[6] ? 'block' : 'none' }">
+                            <img :src="item.imgSrc2" :style="{ display: rabbitCompl[6] ? 'block' : 'none' }">
                         </button>
                         <p>단어장</p>
                     </div>
-                    <div class="race-btn" @click="goToPage('Chapter5')">
+                    <div class="race-btn" @click="goToPage('Chapter2_8')">
+                        <div class="rabbit-running"><img src="../../../resources/img/img09_s.png" alt=""
+                                :style="{ display: rabbitPos[5] ? 'block' : 'none' }"></div>
                         <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"
                             data-num="5">
-                            <img :src="item.imgSrc1"
-                                :style="{ display: !item.isSecondImageVisible ? 'block' : 'none' }">
-                            <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                            <img :src="item.imgSrc1" :style="{ display: !rabbitCompl[5] ? 'block' : 'none' }">
+                            <img :src="item.imgSrc2" :style="{ display: rabbitCompl[5] ? 'block' : 'none' }">
                         </button>
                         <p>지문2</p>
                     </div>
-                    <div class="race-btn" @click="goToPage('Chapter4')">
+                    <div class="race-btn" @click="goToPage('Chapter2_7')">
+                        <div class="rabbit-running"><img src="../../../resources/img/img09_s.png" alt=""
+                                :style="{ display: rabbitPos[4] ? 'block' : 'none' }"></div>
                         <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"
                             data-num="4">
-                            <img :src="item.imgSrc1"
-                                :style="{ display: !item.isSecondImageVisible ? 'block' : 'none' }">
-                            <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                            <img :src="item.imgSrc1" :style="{ display: !rabbitCompl[4] ? 'block' : 'none' }">
+                            <img :src="item.imgSrc2" :style="{ display: rabbitCompl[4] ? 'block' : 'none' }">
                         </button>
                         <p>문제2</p>
                     </div>
-                    <div class="race-btn" @click="goToPage('Chapter3')">
+                    <div class="race-btn" @click="goToPage('Chapter2_8')">
+                        <div class="rabbit-running"><img src="../../../resources/img/img09_s.png" alt=""
+                                :style="{ display: rabbitPos[3] ? 'block' : 'none' }"></div>
                         <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"
                             data-num="3">
-                            <img :src="item.imgSrc1"
-                                :style="{ display: !item.isSecondImageVisible ? 'block' : 'none' }">
-                            <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                            <img :src="item.imgSrc1" :style="{ display: !rabbitCompl[3] ? 'block' : 'none' }">
+                            <img :src="item.imgSrc2" :style="{ display: rabbitCompl[3] ? 'block' : 'none' }">
                         </button>
                         <p>문제1</p>
                     </div>
                 </div>
                 <div class="rcon flex">
                     <div class="race-btn" @click="goToPage('Chapter8')">
+                        <div class="rabbit-running"><img src="../../../resources/img/img09_s.png" alt=""
+                                :style="{ display: rabbitPos[8] ? 'block' : 'none' }"></div>
                         <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"
                             data-num="8">
-                            <img :src="item.imgSrc3"
-                                :style="{ display: !item.isSecondImageVisible ? 'block' : 'none' }">
-                            <img :src="item.imgSrc4" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                            <img :src="item.imgSrc1" :style="{ display: !rabbitCompl[8] ? 'block' : 'none' }">
+                            <img :src="item.imgSrc2" :style="{ display: rabbitCompl[8] ? 'block' : 'none' }">
                         </button>
                         <p class="long">중간 평가</p>
                     </div>
-                    <div class="race-btn" @click="goToPage('Chapter9')">
+                    <div class="race-btn" @click="goToPage('Chapter2_8')">
+                        <div class="rabbit-running"><img src="../../../resources/img/img09_s.png" alt=""
+                                :style="{ display: rabbitPos[9] ? 'block' : 'none' }"></div>
                         <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"
                             data-num="9">
-                            <img :src="item.imgSrc1"
-                                :style="{ display: !item.isSecondImageVisible ? 'block' : 'none' }">
-                            <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                            <img :src="item.imgSrc1" :style="{ display: !rabbitCompl[9] ? 'block' : 'none' }">
+                            <img :src="item.imgSrc2" :style="{ display: rabbitCompl[9] ? 'block' : 'none' }">
                         </button>
                         <p>지문3</p>
                     </div>
                     <div class="race-btn" @click="goToPage('Chapter10')">
+                        <div class="rabbit-running"><img src="../../../resources/img/img09_s.png" alt=""
+                                :style="{ display: rabbitPos[10] ? 'block' : 'none' }"></div>
                         <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"
                             data-num="10">
-                            <img :src="item.imgSrc1"
-                                :style="{ display: !item.isSecondImageVisible ? 'block' : 'none' }">
-                            <img :src="item.imgSrc2" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                            <img :src="item.imgSrc1" :style="{ display: !rabbitCompl[10] ? 'block' : 'none' }">
+                            <img :src="item.imgSrc2" :style="{ display: rabbitCompl[10] ? 'block' : 'none' }">
                         </button>
                         <p>단어장</p>
                     </div>
 
-                    <div class="race-btn">
-                        <button class="popTxt" v-for="(item, index) in items" :key="index" @click="toggleImage(index)"
-                            data-num="11">
-                            <img :src="item.imgSrc3"
-                                :style="{ display: !item.isSecondImageVisible ? 'block' : 'none' }">
-                            <img :src="item.imgSrc4" :style="{ display: item.isSecondImageVisible ? 'block' : 'none' }">
+                    <div class="race-btn" @click="goToPage('Chapter2_8')">
+                        <div class="rabbit-running"><img src="../../../resources/img/img09_s.png" alt=""
+                                :style="{ display: rabbitPos[11] ? 'block' : 'none' }"></div>
+                        <button class="popTxt" v-for="(item, index) in items" :key="index"
+                            @click="toggleImageAndShowPopup(index, '11')" data-num="11">
+                            <img :src="item.imgSrc1" :style="{ display: !rabbitCompl[11] ? 'block' : 'none' }">
+                            <img :src="item.imgSrc2" :style="{ display: rabbitCompl[11] ? 'block' : 'none' }">
                         </button>
                         <p class="long">최종 평가</p>
                     </div>
@@ -365,7 +374,7 @@
             nowSchedule: "",
             state: '',
             rabbitPos: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
-            rabbitCompl: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+            rabbitCompl: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         }
     },
     methods: {
@@ -374,9 +383,16 @@
             for (var i = 0; i < 12; i++) {
                 this.rabbitPos[i] = false
             }
+
             if (this.$route.query.value) {
-                this.rabbitPos[this.$route.query.value] = true
-                this.rabbitCompl[this.$route.query.value] = true
+                console.log(`자리 : ${this.$route.query.value}`);
+
+                this.rabbitPos[parseInt(this.$route.query.value, 10) + 1] = true
+                for (var i = 0; i < this.$route.query.value; i++) {
+
+                    this.rabbitCompl[i + 1] = true
+                }
+
             }
             else
                 this.rabbitPos[0] = true
@@ -974,5 +990,6 @@
     right: 110px;
     z-index: 10000;
     transform: scaleX(-1);
+    transition: all 0.5s ease-in-out;
 }
 </style>
(No newline at end of file)
Add a comment
List