jichoi / lms_front star
박민혁 박민혁 2024-08-19
Merge branch 'master' of http://210.180.118.83/jichoi/lms_front
@6449a5f633ec42d96bebd5227237df12f05469fe
client/views/pages/main/Chapter/Chapter3.vue
--- client/views/pages/main/Chapter/Chapter3.vue
+++ client/views/pages/main/Chapter/Chapter3.vue
@@ -2,7 +2,9 @@
     <div id="Chapter1_1" class="content-wrap">
         <div style="margin: 30px 0px 50px; width: 20%">
             <router-link to="/MyPlan.page">
-                <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div>
+                <div class="logo mb25">
+                    <img src="../../../../resources/img/logo2.png" alt="" />
+                </div>
             </router-link>
         </div>
         <div class="title-box mb25 flex align-center mt40" style="justify-content: space-between">
@@ -17,17 +19,16 @@
                 <img src="../../../../resources/img/left.png" alt="" />
             </div>
             <div class="content title-box">
+                ,,,
                 <p class="title mt25 title-bg">step3.</p>
-                <div class="flex align-center mb30">
+                <div class="flex align-center mb30" style="justify-content: space-between">
                     <p class="subtitle2 mr20">알맞은 것을 고르세요.</p>
                 </div>
 
-                <div class="mt80 flex align-center justify-center" style="gap: 113px">
-                    <div class="imgGroup">
-                        <div class="flex" style="gap: 60px">
-                            <img src="../../../../resources/img/img106_48s.png" alt="" />
-                        </div>
-                        <div class="time-bg">
+                <div class="flex align-center justify-center" style="margin-top: 9rem; gap: 113px">
+                    <div class="time-hint">
+                        <button class="hint-btn">HINT</button>
+                        <div class="time-bg mt20">
                             <div>
                                 <div class="time">
                                     <p class="second">{{ timer }}</p>
@@ -36,38 +37,42 @@
                             </div>
                         </div>
                     </div>
-                    <div class="pickGroup">
-                        <div>
-                            <article class="flex justify-center mb50" style="gap: 60px">
-                                <div class="flex">
-                                    <button>
-                                        <img src="../../../../resources/img/img136_71s.png" alt="" />
-                                        <p>1</p>
-                                    </button>
-                                    <p>a</p>
-                                </div>
-                            </article>
-                            <article class="flex justify-center mb50" style="gap: 60px">
-                                <div class="flex">
-                                    <button>
-                                        <img src="../../../../resources/img/img136_71s.png" alt="" />
-                                        <p>2</p>
-                                    </button>
-                                    <p>a</p>
-                                </div>
-                            </article>
-                            <article class="flex justify-center" style="gap: 60px">
-                                <div class="flex">
-                                    <button>
-                                        <img src="../../../../resources/img/img136_71s.png" alt="" />
-                                        <p>3</p>
-                                    </button>
-                                    <p>a</p>
-                                </div>
-                            </article>
+                    <div class="imgGroup">
+                        <div class="flex" style="gap: 60px">
+                            <img src="../../../../resources/img/img106_48s.png" alt="" />
                         </div>
                     </div>
+                    <div class="pickGroup">
+                        <article class="flex justify-center mb50" style="gap: 60px">
+                            <div class="flex" @click="handleClick(1)">
+                                <button>
+                                    <img src="../../../../resources/img/img136_71s.png" alt="" />
+                                    <p :class="{ active: selectedButton === 1 }">1</p>
+                                </button>
+                                <p>guitar</p>
+                            </div>
+                        </article>
+                        <article class="flex justify-center mb50" style="gap: 60px">
+                            <div class="flex" @click="handleClick(2)">
+                                <button>
+                                    <img src="../../../../resources/img/img136_71s.png" alt="" />
+                                    <p :class="{ active: selectedButton === 2 }">2</p>
+                                </button>
+                                <p>violin</p>
+                            </div>
+                        </article>
+                        <article class="flex justify-center" style="gap: 60px">
+                            <div class="flex" @click="handleClick(3)">
+                                <button>
+                                    <img src="../../../../resources/img/img136_71s.png" alt="" />
+                                    <p :class="{ active: selectedButton === 3 }">3</p>
+                                </button>
+                                <p>piano</p>
+                            </div>
+                        </article>
+                    </div>
                 </div>
+                <button class="submit-button" @click="handleSubmit()">제출하기</button>
             </div>
             <div class="next-btn" @click="goToPage('Chapter3_1')">
                 <img src="../../../../resources/img/right.png" alt="" />
@@ -80,12 +85,13 @@
 export default {
     data() {
         return {
-            timer: '00',
+            timer: "00",
+            selectedButton: null, // 선택한 버튼
         };
     },
     methods: {
         complete() {
-            this.$router.push({ name: 'Dashboard', query: { value: 8 } });
+            this.$router.push({ name: "Dashboard", query: { value: 8 } });
         },
         goToPage(page) {
             this.$router.push({ name: page });
@@ -102,6 +108,13 @@
                     clearInterval(this.intervalId);
                 }
             }, 1000);
+        },
+        handleClick(number) {
+            this.selectedButton = number;
+        },
+        // 제출하기 버튼
+        handleSubmit() {
+            console.log("선택된 번호 : ", this.selectedButton);
         },
     },
     watch: {},
@@ -130,7 +143,13 @@
     border-radius: 5px;
     padding: 10px;
     font-size: 48px;
-    font-family: 'ONEMobilePOP';
+    font-family: "ONEMobilePOP";
+}
+
+.pickGroup {
+    display: flex;
+    flex-direction: column;
+    align-items: flex-start;
 }
 
 .pickGroup button {
@@ -153,12 +172,29 @@
 .pickGroup article > div > p {
     font-size: 64px;
 }
+
+.pickGroup button p.active {
+    color: #000;
+    /* 선택된 버튼의 숫자 색을 더 진하게 */
+}
+
 .completeBtn {
     margin-right: 100px;
     background-color: #ffba08;
     padding: 10px 30px;
     border-radius: 10px;
     font-size: 28px;
-    font-family: 'ONEMobilePOPOTF';
+    font-family: "ONEMobilePOPOTF";
+}
+
+.submit-button {
+    position: absolute;
+    background-color: #ffba08;
+    padding: 10px 30px;
+    border-radius: 10px;
+    font-size: 28px;
+    font-family: "ONEMobilePOPOTF";
+    right: 5rem;
+    bottom: 3rem;
 }
 </style>
client/views/pages/main/Chapter/Chapter3_1.vue
--- client/views/pages/main/Chapter/Chapter3_1.vue
+++ client/views/pages/main/Chapter/Chapter3_1.vue
@@ -2,7 +2,7 @@
   <div id="Chapter1_1" class="content-wrap">
     <div style="margin: 30px 0px 50px; width: 20%">
       <router-link to="/MyPlan.page">
-        <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div>
+        <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div>
       </router-link>
     </div>
     <div class="title-box mb25 flex align-center mt40">
@@ -10,47 +10,46 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="goToPage('Chapter3')"><img src="../../../../resources/img/left.png" alt=""></div>
+      <div class="pre-btn" @click="goToPage('Chapter3')"><img src="../../../../resources/img/left.png" alt="" /></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
         <div class="flex align-center mb30">
           <p class="subtitle2 mr20">1. see the picture</p>
-          <button><img src="../../../../resources/img/btn10_s.png" alt="">
-          </button>
+          <button><img src="../../../../resources/img/btn10_s.png" alt="" /></button>
         </div>
 
-        <div class="flex align-center justify-center" style="gap: 113px;">
-         <div class="time-hint">
-          <button class="hint-btn">HINT</button>
+        <div class="flex align-center justify-center" style="gap: 113px">
+          <div class="time-hint">
+            <button class="hint-btn">HINT</button>
             <div class="time-bg mt20">
-                <div>
-                  <div class="time">
-                    <p class="second">{{ timer }}</p>
-                    <p class="text">sec</p>
-                  </div>
+              <div>
+                <div class="time">
+                  <p class="second">{{ timer }}</p>
+                  <p class="text">sec</p>
                 </div>
               </div>
-         </div>
-          <div class="pickGroup ">
-            <div class="flex" style="gap: 250px;">
-              <article  class="text-ct">
-                  <div class="mb30"><img src="../../../../resources/img/img107_50s.png" alt=""></div>
-                  <button class="popTxt"><img src="../../../../resources/img/img136_71s.png" alt="">
-                    <img style="display: none;" src="../../../../resources/img/img137_71s.png" alt="">
-                  </button>
+            </div>
+          </div>
+          <div class="pickGroup">
+            <div class="flex" style="gap: 250px">
+              <article class="text-ct" @click="handleClick(1)">
+                <div class="mb30"><img src="../../../../resources/img/img107_50s.png" alt="" /></div>
+                <button class="popTxt">
+                  <img :src="selectedButton === 1 ? selectedbuttonImg : buttonImg" alt="" />
+                </button>
               </article>
-              <article  class="text-ct" >
-                  <div class="mb30"><img src="../../../../resources/img/img108_50s.png" alt=""></div>
-                  <button class="popTxt"><img src="../../../../resources/img/img136_71s.png" alt="">
-                    <img style="display: none;" src="../../../../resources/img/img137_71s.png" alt="">
-                  </button>
+              <article class="text-ct" @click="handleClick(2)">
+                <div class="mb30"><img src="../../../../resources/img/img108_50s.png" alt="" /></div>
+                <button class="popTxt">
+                  <img :src="selectedButton === 2 ? selectedbuttonImg : buttonImg" alt="" />
+                </button>
               </article>
             </div>
-
           </div>
         </div>
+        <button class="submit-button" @click="handleSubmit()">제출하기</button>
       </div>
-      <div class="next-btn" @click="goToPage('Chapter3_2')"><img src="../../../../resources/img/right.png" alt=""></div>
+      <div class="next-btn" @click="goToPage('Chapter3_2')"><img src="../../../../resources/img/right.png" alt="" /></div>
     </div>
   </div>
 </template>
@@ -59,42 +58,47 @@
 export default {
   data() {
     return {
-      timer:'00'
-    }
+      timer: "00",
+      selectedButton: null,
+      buttonImg: "client/resources/img/img136_71s.png",
+      selectedbuttonImg: "client/resources/img/img137_71s.png",
+    };
   },
   methods: {
     goToPage(page) {
       this.$router.push({ name: page });
     },
     startTimer() {
-    if (this.intervalId) {
-      clearInterval(this.intervalId);
-    }
-    this.timer = 5;
-    this.intervalId = setInterval(() => {
-      if (this.timer > 0) {
-        this.timer--;
-      } else {
+      if (this.intervalId) {
         clearInterval(this.intervalId);
       }
-    }, 1000);
-  }
+      this.timer = 5;
+      this.intervalId = setInterval(() => {
+        if (this.timer > 0) {
+          this.timer--;
+        } else {
+          clearInterval(this.intervalId);
+        }
+      }, 1000);
+    },
+    handleClick(number) {
+      this.selectedButton = number;
+    },
+    // 제출하기 버튼
+    handleSubmit() {
+      console.log("선택된 번호 : ", this.selectedButton);
+    },
   },
-  watch: {
-
-  },
-  computed: {
-
-  },
-  components: {
-  },
-  mounted() {
-
-  }
-}
+  watch: {},
+  computed: {},
+  components: {},
+  mounted() {},
+};
 </script>
 <style scoped>
-.imgGroup{width: fit-content;}
+.imgGroup {
+  width: fit-content;
+}
 .imgGroup button {
   position: relative;
 }
@@ -111,7 +115,7 @@
   border-radius: 5px;
   padding: 10px;
   font-size: 48px;
-  font-family: 'ONEMobilePOP';
+  font-family: "ONEMobilePOP";
 }
 
 .pickGroup button {
@@ -126,4 +130,15 @@
   left: 50%;
   transform: translate(-50%, -50%);
 }
-</style>
(파일 끝에 줄바꿈 문자 없음)
+
+.submit-button {
+  position: absolute;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: "ONEMobilePOPOTF";
+  right: 5rem;
+  bottom: 3rem;
+}
+</style>
client/views/pages/main/Chapter/Chapter3_2.vue
--- client/views/pages/main/Chapter/Chapter3_2.vue
+++ client/views/pages/main/Chapter/Chapter3_2.vue
@@ -1,143 +1,168 @@
 <template>
-    <div id="Chapter1_1" class="content-wrap">
-        <div style="margin: 30px 0px 50px; width: 20%">
-            <router-link to="/MyPlan.page">
-                <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>
-        <div class="flex justify-between align-center">
-            <div class="pre-btn" @click="goToPage('Chapter3_1')">
-                <img src="../../../../resources/img/left.png" alt="" />
-            </div>
-            <div class="content title-box">
-                <p class="title mt25 title-bg">step3.</p>
-                <div class="flex align-center mb30">
-                    <p class="subtitle2 mr20">1. see the picture</p>
-                    <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
-          </button> -->
-                </div>
-
-                <div class="text-ct">
-                    <div class="time-hint">
-                        <button class="hint-btn">HINT</button>
-                        <div class="time-bg mt20">
-                            <div>
-                                <div class="time">
-                                    <p class="second">{{ timer }}</p>
-                                    <p class="text">sec</p>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="imgGroup">
-                        <img src="../../../../resources/img/img109_51s.png" alt="" />
-                    </div>
-                    <div class="flex align-center justify-center">
-                        <div class="inputbox mt30">go</div>
-                    </div>
-                    <div class="pickGroup mt40 flex align-center justify-center" style="gap: 100px">
-                        <p>i</p>
-                        <article style="gap: 60px; bottom: 159px; left: 242px">
-                            <button>
-                                <img src="../../../../resources/img/img136_71s.png" alt="" />
-                                <p>1</p>
-                            </button>
-                        </article>
-                        <p>to</p>
-                        <article style="gap: 60px; bottom: 159px; right: 559px">
-                            <button>
-                                <img src="../../../../resources/img/img136_71s.png" alt="" />
-                                <p>2</p>
-                            </button>
-                        </article>
-                        <p>bed</p>
-                    </div>
-                </div>
-            </div>
-            <div class="next-btn" @click="complete()"><img src="../../../../resources/img/right.png" alt="" /></div>
-        </div>
+  <div id="Chapter1_1" class="content-wrap">
+    <div style="margin: 30px 0px 50px; width: 20%">
+      <router-link to="/MyPlan.page">
+        <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>
+    <div class="flex justify-between align-center">
+      <div class="pre-btn" @click="goToPage('Chapter3_1')">
+        <img src="../../../../resources/img/left.png" alt="" />
+      </div>
+      <div class="content title-box">
+        <p class="title mt25 title-bg">step3.</p>
+        <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">1. see the picture</p>
+          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+          </button> -->
+        </div>
+
+        <div class="text-ct">
+          <div class="time-hint">
+            <button class="hint-btn">HINT</button>
+            <div class="time-bg mt20">
+              <div>
+                <div class="time">
+                  <p class="second">{{ timer }}</p>
+                  <p class="text">sec</p>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="imgGroup">
+            <img src="../../../../resources/img/img109_51s.png" alt="" />
+          </div>
+          <div class="flex align-center justify-center">
+            <div class="inputbox mt30">go</div>
+          </div>
+          <div class="pickGroup mt40 flex align-center justify-center" style="gap: 100px">
+            <p>i</p>
+            <article style="gap: 60px; bottom: 159px; left: 242px" @click="handleClick(1)">
+              <button>
+                <img src="../../../../resources/img/img136_71s.png" alt="" />
+                <p :class="{ active: selectedButton === 1 }">1</p>
+              </button>
+            </article>
+            <p>to</p>
+            <article style="gap: 60px; bottom: 159px; right: 559px" @click="handleClick(2)">
+              <button>
+                <img src="../../../../resources/img/img136_71s.png" alt="" />
+                <p :class="{ active: selectedButton === 2 }">2</p>
+              </button>
+            </article>
+            <p>bed</p>
+          </div>
+        </div>
+        <button class="submit-button" @click="handleSubmit()">제출하기</button>
+      </div>
+      <div class="next-btn" @click="complete()"><img src="../../../../resources/img/right.png" alt="" /></div>
+    </div>
+  </div>
 </template>
 
 <script>
 export default {
-    data() {
-        return {
-            timer: '00',
-        };
+  data() {
+    return {
+      timer: "00",
+      selectedButton: null,
+    };
+  },
+  methods: {
+    complete() {
+      this.$router.push({ name: "Dashboard", query: { value: 8 } });
     },
-    methods: {
-        complete() {
-            this.$router.push({ name: 'Dashboard', query: { value: 8 } });
-        },
-        goToPage(page) {
-            this.$router.push({ name: page });
-        },
-        startTimer() {
-            if (this.intervalId) {
-                clearInterval(this.intervalId);
-            }
-            this.timer = 5;
-            this.intervalId = setInterval(() => {
-                if (this.timer > 0) {
-                    this.timer--;
-                } else {
-                    clearInterval(this.intervalId);
-                }
-            }, 1000);
-        },
+    goToPage(page) {
+      this.$router.push({ name: page });
     },
-    watch: {},
-    computed: {},
-    components: {},
-    mounted() {},
+    startTimer() {
+      if (this.intervalId) {
+        clearInterval(this.intervalId);
+      }
+      this.timer = 5;
+      this.intervalId = setInterval(() => {
+        if (this.timer > 0) {
+          this.timer--;
+        } else {
+          clearInterval(this.intervalId);
+        }
+      }, 1000);
+    },
+    handleClick(number) {
+      this.selectedButton = number;
+    },
+    // 제출하기 버튼
+    handleSubmit() {
+      console.log("선택된 번호 : ", this.selectedButton);
+    },
+  },
+  watch: {},
+  computed: {},
+  components: {},
+  mounted() {},
 };
 </script>
 <style scoped>
 .inputbox {
-    font-size: 38px;
-    font-family: 'Pretendard-ExtraBold';
+  font-size: 38px;
+  font-family: "Pretendard-ExtraBold";
 }
 
 .imgGroup button {
-    position: relative;
+  position: relative;
 }
 
 .imgGroup button p,
 .textbox p {
-    position: absolute;
-    top: 50%;
-    left: 50%;
-    transform: translate(-50%, -50%);
-    width: fit-content;
-    height: fit-content;
-    background: #ffffffb8;
-    border-radius: 5px;
-    padding: 10px;
-    font-size: 48px;
-    font-family: 'ONEMobilePOP';
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  width: fit-content;
+  height: fit-content;
+  background: #ffffffb8;
+  border-radius: 5px;
+  padding: 10px;
+  font-size: 48px;
+  font-family: "ONEMobilePOP";
 }
 
 .pickGroup p {
-    font-size: 34px;
-    font-weight: bold;
+  font-size: 34px;
+  font-weight: bold;
 }
 
 .pickGroup button {
-    position: relative;
-    margin-right: 30px;
+  position: relative;
+  margin-right: 30px;
 }
 
 .pickGroup button p {
-    font-size: 34px;
-    color: #c6c6c6;
-    position: absolute;
-    top: 50%;
-    left: 50%;
-    transform: translate(-50%, -50%);
+  font-size: 34px;
+  color: #c6c6c6;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+}
+
+.pickGroup button p.active {
+  color: #000;
+  /* 선택된 버튼의 숫자 색을 더 진하게 */
+}
+
+.submit-button {
+  position: absolute;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: "ONEMobilePOPOTF";
+  right: 5rem;
+  bottom: 3rem;
 }
 </style>
client/views/pages/main/Chapter/Chapter3_3.vue
--- client/views/pages/main/Chapter/Chapter3_3.vue
+++ client/views/pages/main/Chapter/Chapter3_3.vue
@@ -2,15 +2,15 @@
   <div id="Chapter1_1" class="content-wrap">
     <div style="margin: 30px 0px 50px; width: 20%">
       <router-link to="/MyPlan.page">
-        <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div>
+        <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">{{ unitData.unit_nm || '(단원 이름 데이터 없음)' }}</span>
+      <span class="title mr40">{{ unitData.unit_nm || "(단원 이름 데이터 없음)" }}</span>
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="goToPage('Chapter3_2')"><img src="../../../../resources/img/left.png" alt=""></div>
+      <div class="pre-btn" @click="goToPage('Chapter3_2')"><img src="../../../../resources/img/left.png" alt="" /></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
         <div class="flex align-center mb30">
@@ -19,31 +19,31 @@
 
         <div class="text-ct">
           <div class="time-hint">
-          <button class="hint-btn">HINT</button>
+            <button class="hint-btn">HINT</button>
             <div class="time-bg mt20">
-                <div>
-                  <div class="time">
-                    <p class="second">{{ timer }}</p>
-                    <p class="text">sec</p>
-                  </div>
+              <div>
+                <div class="time">
+                  <p class="second">{{ timer }}</p>
+                  <p class="text">sec</p>
                 </div>
               </div>
-         </div>
-          <div class="pickGroup mt60 flex align-center justify-center" style="gap: 100px; margin-top: 7%;">
-
-            <article v-for="(detail, index) in problemDetail" :key="index" style="gap: 60px;">
-              <div class="flex align-center">
-                <button><img src="../../../../resources/img/img136_71s.png" alt="">
-                  <p>{{ index + 1 }}</p>
+            </div>
+          </div>
+          <div class="pickGroup mt60 flex align-center justify-center" style="gap: 100px; margin-top: 7%">
+            <article v-for="(detail, index) in problemDetail" :key="index" style="gap: 60px">
+              <div class="flex align-center" @click="handleClick(index + 1)">
+                <button>
+                  <img src="../../../../resources/img/img136_71s.png" alt="" />
+                  <p :class="{ active: selectedButton === index + 1 }">{{ index + 1 }}</p>
                 </button>
                 <p>{{ detail.prblmDtlExpln }}</p>
               </div>
             </article>
-
           </div>
         </div>
+        <button class="submit-button" @click="handleSubmit()">제출하기</button>
       </div>
-      <div class="next-btn" @click="goToPage('Chapter3_3_1')"><img src="../../../../resources/img/right.png" alt=""></div>
+      <div class="next-btn" @click="goToPage('Chapter3_3_1')"><img src="../../../../resources/img/right.png" alt="" /></div>
     </div>
   </div>
 </template>
@@ -54,16 +54,16 @@
 export default {
   data() {
     return {
-      timer: '00',
+      timer: "00",
       prblmId: "",
       problemDetail: [],
       dataList: [],
       prblmExpln: null,
       unitData: {}, // 단원 정보 데이터
-    }
+      selectedButton: null,
+    };
   },
   methods: {
-
     goToPage(page) {
       this.$router.push({ name: page });
     },
@@ -84,68 +84,70 @@
 
     // 단원 정보를 불러오는 API 호출
     fetchUnitDetail(unitId) {
-        axios.post('/unit/unitDetail.json', {
-            unitId: unitId
+      axios
+        .post("/unit/unitDetail.json", {
+          unitId: unitId,
         })
-        .then(response => {
-            console.log(response.data[0]);
-            if (response.data.length > 0) {
-                this.unitData = response.data[0];
-            }
+        .then((response) => {
+          console.log(response.data[0]);
+          if (response.data.length > 0) {
+            this.unitData = response.data[0];
+          }
         })
-        .catch(error => {
-            console.error('단원 정보를 불러오는 중 오류 발생:', error);
-        })
+        .catch((error) => {
+          console.error("단원 정보를 불러오는 중 오류 발생:", error);
+        });
     },
 
     problemSearch() {
-        const vm = this;
-        vm.prblmId = JSON.parse(sessionStorage.getItem("prblmId"));
-        axios({
-            url: "problem/problemInfo.json",
-            method: "post",
-            headers: {
-                "Content-Type": "application/json; charset=UTF-8",
-            },
-            data: {
-                prblmId: vm.prblmId,
-            },
+      const vm = this;
+      vm.prblmId = JSON.parse(sessionStorage.getItem("prblmId"));
+      axios({
+        url: "problem/problemInfo.json",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json; charset=UTF-8",
+        },
+        data: {
+          prblmId: vm.prblmId,
+        },
+      })
+        .then(function (res) {
+          console.log("problem - response : ", res.data);
+          vm.dataList = res.data.problem;
+          vm.problemDetail = res.data.problemDetail;
+
+          // 문제 정보가 성공적으로 받아와진 후, unitId를 이용해 단원 정보를 가져옴
+          if (vm.dataList.unitId) {
+            vm.fetchUnitDetail(vm.dataList.unitId);
+          } else {
+            console.error("단원 ID가 없습니다.");
+          }
         })
-            .then(function (res) {
-                console.log("problem - response : ", res.data);
-                vm.dataList = res.data.problem;
-                vm.problemDetail = res.data.problemDetail;
-
-                // 문제 정보가 성공적으로 받아와진 후, unitId를 이용해 단원 정보를 가져옴
-                if (vm.dataList.unitId) {
-                  vm.fetchUnitDetail(vm.dataList.unitId);
-                } else {
-                  console.error("단원 ID가 없습니다.");
-                }
-            })
-            .catch(function (error) {
-                console.log("problem - error : ", error);
-            });
+        .catch(function (error) {
+          console.log("problem - error : ", error);
+        });
     },
-
+    handleClick(number) {
+      this.selectedButton = number;
+    },
+    // 제출하기 버튼
+    handleSubmit() {
+      console.log("선택된 번호 : ", this.selectedButton);
+    },
   },
-  watch: {
-
-  },
-  computed: {
-
-  },
-  components: {
-  },
+  watch: {},
+  computed: {},
+  components: {},
   mounted() {
     this.problemSearch();
-  }
-}
+  },
+};
 </script>
 <style scoped>
 .inputbox {
   font-size: 38px;
-  font-family: 'Pretendard-ExtraBold';
+  font-family: "Pretendard-ExtraBold";
 }
 
 .imgGroup button {
@@ -164,7 +166,7 @@
   border-radius: 5px;
   padding: 10px;
   font-size: 48px;
-  font-family: 'ONEMobilePOP';
+  font-family: "ONEMobilePOP";
 }
 
 .pickGroup p {
@@ -185,4 +187,20 @@
   left: 50%;
   transform: translate(-50%, -50%);
 }
-</style>
(파일 끝에 줄바꿈 문자 없음)
+
+.pickGroup button p.active {
+  color: #000;
+  /* 선택된 버튼의 숫자 색을 더 진하게 */
+}
+
+.submit-button {
+  position: absolute;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: "ONEMobilePOPOTF";
+  right: 5rem;
+  bottom: 3rem;
+}
+</style>
client/views/pages/main/Chapter/Chapter3_3_1.vue
--- client/views/pages/main/Chapter/Chapter3_3_1.vue
+++ client/views/pages/main/Chapter/Chapter3_3_1.vue
@@ -2,7 +2,7 @@
   <div id="Chapter1_1" class="content-wrap">
     <div style="margin: 30px 0px 50px; width: 20%">
       <router-link to="/MyPlan.page">
-        <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div>
+        <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div>
       </router-link>
     </div>
     <div class="title-box mb25 flex align-center mt40">
@@ -10,63 +10,63 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="goToPage('Chapter3_3')"><img src="../../../../resources/img/left.png" alt=""></div>
+      <div class="pre-btn" @click="goToPage('Chapter3_3')"><img src="../../../../resources/img/left.png" alt="" /></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
         <div class="flex align-center mb30">
           <p class="subtitle2 mr20">1. see the picture</p>
-          <button><img src="../../../../resources/img/btn10_s.png" alt="">
-          </button>
+          <button><img src="../../../../resources/img/btn10_s.png" alt="" /></button>
         </div>
 
         <div class="text-ct">
           <div class="time-hint">
-          <button class="hint-btn">HINT</button>
+            <button class="hint-btn">HINT</button>
             <div class="time-bg mt20">
-                <div>
-                  <div class="time">
-                    <p class="second">{{ timer }}</p>
-                    <p class="text">sec</p>
-                  </div>
+              <div>
+                <div class="time">
+                  <p class="second">{{ timer }}</p>
+                  <p class="text">sec</p>
                 </div>
               </div>
-         </div>
-          <div class="imgGroup ">
-            <img src="../../../../resources/img/img109_51s.png" alt="">  
+            </div>
           </div>
-          
-          <div class="pickGroup mt60 flex align-center justify-center" style="gap: 100px; margin-top: 7%;">
-            <article style="gap: 60px; bottom: 159px;
-    left: 242px;">
-              <div class="flex align-center">
-                <button><img src="../../../../resources/img/img136_71s.png" alt="">
-                  <p>1</p>
+          <div class="imgGroup">
+            <img src="../../../../resources/img/img109_51s.png" alt="" />
+          </div>
+
+          <div class="pickGroup mt60 flex align-center justify-center" style="gap: 100px; margin-top: 7%">
+            <article style="gap: 60px; bottom: 159px; left: 242px">
+              <div class="flex align-center" @click="handleClick(1)">
+                <button>
+                  <img src="../../../../resources/img/img136_71s.png" alt="" />
+                  <p :class="{ active: selectedButton === 1 }">1</p>
                 </button>
-                <img src="../../../../resources/img/img122_62s.png" alt="">
+                <img src="../../../../resources/img/img122_62s.png" alt="" />
               </div>
             </article>
-            <article style="gap: 60px; bottom: 159px;
-    right: 559px;">
-             <div class="flex align-center">
-                <button><img src="../../../../resources/img/img136_71s.png" alt="">
-                  <p>2</p>
+            <article style="gap: 60px; bottom: 159px; right: 559px">
+              <div class="flex align-center" @click="handleClick(2)">
+                <button>
+                  <img src="../../../../resources/img/img136_71s.png" alt="" />
+                  <p :class="{ active: selectedButton === 2 }">2</p>
                 </button>
-                <img src="../../../../resources/img/img123_62s.png" alt="">
-             </div>
+                <img src="../../../../resources/img/img123_62s.png" alt="" />
+              </div>
             </article>
-            <article style="gap: 60px; bottom: 159px;
-    right: 559px;">
-             <div class="flex align-center">
-                <button><img src="../../../../resources/img/img136_71s.png" alt="">
-                  <p>3</p>
+            <article style="gap: 60px; bottom: 159px; right: 559px">
+              <div class="flex align-center" @click="handleClick(3)">
+                <button>
+                  <img src="../../../../resources/img/img136_71s.png" alt="" />
+                  <p :class="{ active: selectedButton === 3 }">3</p>
                 </button>
-                <img src="../../../../resources/img/img121_62s.png" alt="">
-             </div>
+                <img src="../../../../resources/img/img121_62s.png" alt="" />
+              </div>
             </article>
           </div>
         </div>
+        <button class="submit-button" @click="handleSubmit()">제출하기</button>
       </div>
-      <div class="next-btn" @click="goToPage('Chapter3_4')"><img src="../../../../resources/img/right.png" alt=""></div>
+      <div class="next-btn" @click="goToPage('Chapter3_4')"><img src="../../../../resources/img/right.png" alt="" /></div>
     </div>
   </div>
 </template>
@@ -75,8 +75,9 @@
 export default {
   data() {
     return {
-      timer: '00'
-    }
+      timer: "00",
+      selectedButton: null,
+    };
   },
   methods: {
     goToPage(page) {
@@ -94,25 +95,25 @@
           clearInterval(this.intervalId);
         }
       }, 1000);
-    }
+    },
+    handleClick(number) {
+      this.selectedButton = number;
+    },
+    // 제출하기 버튼
+    handleSubmit() {
+      console.log("선택된 번호 : ", this.selectedButton);
+    },
   },
-  watch: {
-
-  },
-  computed: {
-
-  },
-  components: {
-  },
-  mounted() {
-
-  }
-}
+  watch: {},
+  computed: {},
+  components: {},
+  mounted() {},
+};
 </script>
 <style scoped>
 .inputbox {
   font-size: 38px;
-  font-family: 'Pretendard-ExtraBold';
+  font-family: "Pretendard-ExtraBold";
 }
 
 .imgGroup button {
@@ -131,7 +132,7 @@
   border-radius: 5px;
   padding: 10px;
   font-size: 48px;
-  font-family: 'ONEMobilePOP';
+  font-family: "ONEMobilePOP";
 }
 
 .pickGroup p {
@@ -152,4 +153,20 @@
   left: 50%;
   transform: translate(-50%, -50%);
 }
-</style>
(파일 끝에 줄바꿈 문자 없음)
+
+.pickGroup button p.active {
+  color: #000;
+  /* 선택된 버튼의 숫자 색을 더 진하게 */
+}
+
+.submit-button {
+  position: absolute;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: "ONEMobilePOPOTF";
+  right: 5rem;
+  bottom: 3rem;
+}
+</style>
client/views/pages/main/Chapter/Chapter3_4.vue
--- client/views/pages/main/Chapter/Chapter3_4.vue
+++ client/views/pages/main/Chapter/Chapter3_4.vue
@@ -1,87 +1,59 @@
 <template>
-    <div id="Chapter1_1" class="content-wrap">
-        <div style="margin: 30px 0px 50px; width: 20%">
-            <router-link to="/MyPlan.page">
-                <div class="logo mb25">
-                    <img src="../../../../resources/img/logo2.png" alt="" />
-                </div>
-            </router-link>
+  <div id="Chapter1_1" class="content-wrap">
+    <div style="margin: 30px 0px 50px; width: 20%">
+      <router-link to="/MyPlan.page">
+        <div class="logo mb25">
+          <img src="../../../../resources/img/logo2.png" alt="" />
         </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>
+      </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>
+    <div class="flex justify-between align-center">
+      <div class="pre-btn" @click="goToPage('Chapter3_3_1')">
+        <img src="../../../../resources/img/left.png" alt="" />
+      </div>
+      <div class="content title-box">
+        <p class="title mt25 title-bg">step3.</p>
+        <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">{{ dataList.prblmExpln }}</p>
+          <button>
+            <img src="../../../../resources/img/btn10_s.png" alt="Listen" @click="playAudio" />
+            <audio id="audio-player" src="client/resources/audio/tt.wav" preload="auto"></audio>
+          </button>
         </div>
-        <div class="flex justify-between align-center">
-            <div class="pre-btn" @click="goToPage('Chapter3_3_1')">
-                <img src="../../../../resources/img/left.png" alt="" />
-            </div>
-            <div class="content title-box">
-                <p class="title mt25 title-bg">step3.</p>
-                <div class="flex align-center mb30">
-                    <p class="subtitle2 mr20">{{ dataList.prblmExpln }}</p>
-                    <button>
-                        <img
-                            src="../../../../resources/img/btn10_s.png"
-                            alt="Listen"
-                            @click="playAudio"
-                        />
-                        <audio
-                            id="audio-player"
-                            src="client/resources/audio/tt.wav"
-                            preload="auto"
-                        ></audio>
-                    </button>
-                </div>
 
-                <div class="text-ct">
-                    <div class="time-hint">
-                        <button class="hint-btn">HINT</button>
-                        <div class="time-bg mt20">
-                            <div>
-                                <div class="time">
-                                    <p class="second">{{ timer }}</p>
-                                    <p class="text">sec</p>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div
-                        class="pickGroup flex align-center justify-center"
-                        style="
-                            flex-wrap: wrap;
-                            gap: 100px;
-                            margin-top: 7%;
-                            margin-left: 5%;
-                        "
-                    >
-                        <article
-                            v-for="(item, index) in problemDetail"
-                            :key="index"
-                            style="
-                                flex: 1 0 calc(50% - 100px);
-                                bottom: 159px;
-                                left: 242px;
-                            "
-                        >
-                            <div class="flex align-center">
-                                <button @click="submitAnswer(item)">
-                                    <img
-                                        src="../../../../resources/img/img136_71s.png"
-                                        alt=""
-                                    />
-                                    <p
-                                        :class="{
-                                            active:
-                                                answer === item.prblmDtlExpln,
-                                        }"
-                                    >
-                                        {{ index + 1 }}
-                                    </p>
-                                </button>
-                                <p>{{ item.prblmDtlExpln }}</p>
-                            </div>
-                        </article>
-                        <!-- <article style="gap: 60px; bottom: 159px; right: 559px">
+        <div class="text-ct">
+          <div class="time-hint">
+            <button class="hint-btn">HINT</button>
+            <div class="time-bg mt20">
+              <div>
+                <div class="time">
+                  <p class="second">{{ timer }}</p>
+                  <p class="text">sec</p>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="pickGroup flex align-center justify-center" style="flex-wrap: wrap; gap: 100px; margin-top: 7%; margin-left: 5%">
+            <article v-for="(item, index) in problemDetail" :key="index" style="flex: 1 0 calc(50% - 100px); bottom: 159px; left: 242px">
+              <div class="flex align-center">
+                <button @click="submitAnswer(item)">
+                  <img src="../../../../resources/img/img136_71s.png" alt="" />
+                  <p
+                    :class="{
+                      active: answer === item.prblmDtlExpln,
+                    }"
+                  >
+                    {{ index + 1 }}
+                  </p>
+                </button>
+                <p>{{ item.prblmDtlExpln }}</p>
+              </div>
+            </article>
+            <!-- <article style="gap: 60px; bottom: 159px; right: 559px">
                             <div class="flex align-center">
                                 <button>
                                     <img
@@ -105,169 +77,183 @@
                                 <p>c</p>
                             </div>
                         </article> -->
-                    </div>
-                </div>
-            </div>
-            <div
-                class="next-btn"
-                @click="
-                    [
-                        goToPage('Chapter3_5'),
-                        // handleSubmitAnswer()
-                    ]
-                "
-            >
-                <img src="../../../../resources/img/right.png" alt="" />
-            </div>
+          </div>
         </div>
+        <button class="submit-button" @click="handleSubmit()">제출하기</button>
+      </div>
+      <div
+        class="next-btn"
+        @click="
+          [
+            goToPage('Chapter3_5'),
+            // handleSubmitAnswer()
+          ]
+        "
+      >
+        <img src="../../../../resources/img/right.png" alt="" />
+      </div>
     </div>
+  </div>
 </template>
 
 <script>
 import axios from "axios";
 export default {
-    data() {
-        return {
-            timer: "00",
-            prblmId: "101",
-            problemDetail: [],
-            dataList: [],
-            prblmExpln: null,
-            accessTime: null,
-            answer: null,
-        };
+  data() {
+    return {
+      timer: "00",
+      prblmId: "101",
+      problemDetail: [],
+      dataList: [],
+      prblmExpln: null,
+      accessTime: null,
+      answer: null,
+    };
+  },
+  methods: {
+    goToPage(page) {
+      this.$router.push({ name: page });
     },
-    methods: {
-        goToPage(page) {
-            this.$router.push({ name: page });
-        },
-        startTimer() {
-            if (this.intervalId) {
-                clearInterval(this.intervalId);
-            }
-            this.timer = 5;
-            this.intervalId = setInterval(() => {
-                if (this.timer > 0) {
-                    this.timer--;
-                } else {
-                    clearInterval(this.intervalId);
-                }
-            }, 1000);
-        },
+    startTimer() {
+      if (this.intervalId) {
+        clearInterval(this.intervalId);
+      }
+      this.timer = 5;
+      this.intervalId = setInterval(() => {
+        if (this.timer > 0) {
+          this.timer--;
+        } else {
+          clearInterval(this.intervalId);
+        }
+      }, 1000);
+    },
 
-        problemSearch() {
-            const vm = this;
-            sessionStorage.setItem("prblmId", JSON.stringify(vm.prblmId));
-            // vm.prblmId = JSON.parse(sessionStorage.getItem("prblmId"));
-            axios({
-                url: "problem/problemInfo.json",
-                method: "post",
-                headers: {
-                    "Content-Type": "application/json; charset=UTF-8",
-                },
-                data: {
-                    prblmId: vm.prblmId,
-                },
-            })
-                .then(function (res) {
-                    console.log("problem - response : ", res.data);
-                    vm.dataList = res.data.problem;
-                    vm.problemDetail = res.data.problemDetail;
-                })
-                .catch(function (error) {
-                    console.log("problem - error : ", error);
-                });
+    problemSearch() {
+      const vm = this;
+      sessionStorage.setItem("prblmId", JSON.stringify(vm.prblmId));
+      // vm.prblmId = JSON.parse(sessionStorage.getItem("prblmId"));
+      axios({
+        url: "problem/problemInfo.json",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json; charset=UTF-8",
         },
-        submitAnswer(item) {
-            console.log(item.prblmDtlExpln);
-            this.answer = item.prblmDtlExpln;
+        data: {
+          prblmId: vm.prblmId,
         },
+      })
+        .then(function (res) {
+          console.log("problem - response : ", res.data);
+          vm.dataList = res.data.problem;
+          vm.problemDetail = res.data.problemDetail;
+        })
+        .catch(function (error) {
+          console.log("problem - error : ", error);
+        });
+    },
+    submitAnswer(item) {
+      console.log(item.prblmDtlExpln);
+      this.answer = item.prblmDtlExpln;
+    },
 
-        // 문제 풀이 전송
-        handleSubmitAnswer() {
-            const vm = this;
-            // const accessTime = new Date();
-            // const formattedTime =
-            //     this.formatToTimestampWithoutTimeZone(accessTime);
-            axios({
-                url: "problemLog/insertProblemLog.json",
-                method: "post",
-                headers: {
-                    "Content-Type": "application/json; charset=UTF-8",
-                },
-                data: {
-                    prblmAns: vm.answer,
-                    prblmLogAnsCnt: 0,
-                    stdId: "2",
-                    // prblmStrtTm: formattedTime,
-                    prblmId: vm.prblmId,
-                },
-            })
-                .then(function (res) {
-                    console.log("answer submit - response : ", res.data);
-                })
-                .catch(function (error) {
-                    console.log("answer submit - error : ", error);
-                });
+    // 문제 풀이 전송
+    handleSubmitAnswer() {
+      const vm = this;
+      // const accessTime = new Date();
+      // const formattedTime =
+      //     this.formatToTimestampWithoutTimeZone(accessTime);
+      axios({
+        url: "problemLog/insertProblemLog.json",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json; charset=UTF-8",
         },
-        playAudio() {
-            const audio = document.getElementById("audio-player");
-            audio.play();
-            console.log("playing");
+        data: {
+          prblmAns: vm.answer,
+          prblmLogAnsCnt: 0,
+          stdId: "2",
+          // prblmStrtTm: formattedTime,
+          prblmId: vm.prblmId,
         },
+      })
+        .then(function (res) {
+          console.log("answer submit - response : ", res.data);
+        })
+        .catch(function (error) {
+          console.log("answer submit - error : ", error);
+        });
     },
-    watch: {},
-    computed: {},
-    components: {},
-    mounted() {
-        this.problemSearch();
+    playAudio() {
+      const audio = document.getElementById("audio-player");
+      audio.play();
+      console.log("playing");
     },
+    handleSubmit() {
+      console.log("정답 : ", this.answer);
+    },
+  },
+  watch: {},
+  computed: {},
+  components: {},
+  mounted() {
+    this.problemSearch();
+  },
 };
 </script>
 <style scoped>
 .inputbox {
-    font-size: 38px;
-    font-family: "Pretendard-ExtraBold";
+  font-size: 38px;
+  font-family: "Pretendard-ExtraBold";
 }
 
 .imgGroup button {
-    position: relative;
+  position: relative;
 }
 
 .imgGroup button p,
 .textbox p {
-    position: absolute;
-    top: 50%;
-    left: 50%;
-    transform: translate(-50%, -50%);
-    width: fit-content;
-    height: fit-content;
-    background: #ffffffb8;
-    border-radius: 5px;
-    padding: 10px;
-    font-size: 48px;
-    font-family: "ONEMobilePOP";
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  width: fit-content;
+  height: fit-content;
+  background: #ffffffb8;
+  border-radius: 5px;
+  padding: 10px;
+  font-size: 48px;
+  font-family: "ONEMobilePOP";
 }
 
 .pickGroup p {
-    font-size: 34px;
-    font-weight: bold;
+  font-size: 34px;
+  font-weight: bold;
 }
 
 .pickGroup button {
-    position: relative;
-    margin-right: 30px;
+  position: relative;
+  margin-right: 30px;
 }
 
 .pickGroup button p {
-    font-size: 34px;
-    color: #c6c6c6;
-    position: absolute;
-    top: 50%;
-    left: 50%;
-    transform: translate(-50%, -50%);
+  font-size: 34px;
+  color: #c6c6c6;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
 }
 .pickGroup button p.active {
-    color: #000000;
+  color: #000000;
+}
+.submit-button {
+  position: absolute;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: "ONEMobilePOPOTF";
+  right: 5rem;
+  bottom: 3rem;
 }
 </style>
client/views/pages/main/Chapter/Chapter3_5.vue
--- client/views/pages/main/Chapter/Chapter3_5.vue
+++ client/views/pages/main/Chapter/Chapter3_5.vue
@@ -2,7 +2,7 @@
   <div id="Chapter1_1" class="content-wrap">
     <div style="margin: 30px 0px 50px; width: 20%">
       <router-link to="/MyPlan.page">
-        <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div>
+        <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt="" /></div>
       </router-link>
     </div>
     <div class="title-box mb25 flex align-center mt40">
@@ -10,7 +10,7 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="goToPage('Chapter3_4')"><img src="../../../../resources/img/left.png" alt=""></div>
+      <div class="pre-btn" @click="goToPage('Chapter3_4')"><img src="../../../../resources/img/left.png" alt="" /></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
         <div class="flex align-center mb30">
@@ -19,53 +19,54 @@
           </button> -->
         </div>
 
-        <div class=" text-ct">
+        <div class="text-ct">
           <div class="time-hint">
-          <button class="hint-btn">HINT</button>
+            <button class="hint-btn">HINT</button>
             <div class="time-bg mt20">
-                <div>
-                  <div class="time">
-                    <p class="second">{{ timer }}</p>
-                    <p class="text">sec</p>
-                  </div>
+              <div>
+                <div class="time">
+                  <p class="second">{{ timer }}</p>
+                  <p class="text">sec</p>
                 </div>
               </div>
-         </div>
-          <div class="imgGroup ">
-            <img src="../../../../resources/img/img125_64s.png" alt="">  
+            </div>
+          </div>
+          <div class="imgGroup">
+            <img src="../../../../resources/img/img125_64s.png" alt="" />
           </div>
           <!-- <div class=" flex align-center justify-center">
             <div class="inputbox mt30">
               go
             </div>
           </div> -->
-          <div class="pickGroup mt40 flex align-center justify-center" style="gap: 100px;">
+          <div class="pickGroup mt40 flex align-center justify-center" style="gap: 100px">
             <p>i</p>
             <p>&#40;</p>
-            <article style="gap: 60px; bottom: 159px;
-    left: 242px;">
-              <div class="flex align-center">
-                <button><img src="../../../../resources/img/img136_71s.png" alt="">
-                  <p>1</p>
+            <article style="gap: 60px; bottom: 159px; left: 242px">
+              <div class="flex align-center" @click="handleClick(1)">
+                <button>
+                  <img src="../../../../resources/img/img136_71s.png" alt="" />
+                  <p :class="{ active: selectedButton === 1 }">1</p>
                 </button>
                 <p>a</p>
               </div>
             </article>
-            <article style="gap: 60px; bottom: 159px;
-    right: 559px;">
-             <div class="flex align-center">
-                <button><img src="../../../../resources/img/img136_71s.png" alt="">
-                  <p>2</p>
+            <article style="gap: 60px; bottom: 159px; right: 559px">
+              <div class="flex align-center" @click="handleClick(2)">
+                <button>
+                  <img src="../../../../resources/img/img136_71s.png" alt="" />
+                  <p :class="{ active: selectedButton === 2 }">2</p>
                 </button>
                 <p>b</p>
-             </div>
+              </div>
             </article>
             <p>&#41;</p>
             <p>bed</p>
           </div>
         </div>
+        <button class="submit-button" @click="handleSubmit()">제출하기</button>
       </div>
-      <div class="next-btn" @click="goToPage('Chapter3_6')"><img src="../../../../resources/img/right.png" alt=""></div>
+      <div class="next-btn" @click="goToPage('Chapter3_6')"><img src="../../../../resources/img/right.png" alt="" /></div>
     </div>
   </div>
 </template>
@@ -74,8 +75,9 @@
 export default {
   data() {
     return {
-      timer: '00'
-    }
+      timer: "00",
+      selectedButton: null,
+    };
   },
   methods: {
     goToPage(page) {
@@ -93,25 +95,25 @@
           clearInterval(this.intervalId);
         }
       }, 1000);
-    }
+    },
+    handleClick(number) {
+      this.selectedButton = number;
+    },
+    // 제출하기 버튼
+    handleSubmit() {
+      console.log("선택된 번호 : ", this.selectedButton);
+    },
   },
-  watch: {
-
-  },
-  computed: {
-
-  },
-  components: {
-  },
-  mounted() {
-
-  }
-}
+  watch: {},
+  computed: {},
+  components: {},
+  mounted() {},
+};
 </script>
 <style scoped>
 .inputbox {
   font-size: 38px;
-  font-family: 'Pretendard-ExtraBold';
+  font-family: "Pretendard-ExtraBold";
 }
 
 .imgGroup button {
@@ -130,7 +132,7 @@
   border-radius: 5px;
   padding: 10px;
   font-size: 48px;
-  font-family: 'ONEMobilePOP';
+  font-family: "ONEMobilePOP";
 }
 
 .pickGroup p {
@@ -151,4 +153,18 @@
   left: 50%;
   transform: translate(-50%, -50%);
 }
-</style>
(파일 끝에 줄바꿈 문자 없음)
+
+.pickGroup button p.active {
+  color: #000000;
+}
+.submit-button {
+  position: absolute;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: "ONEMobilePOPOTF";
+  right: 5rem;
+  bottom: 3rem;
+}
+</style>
client/views/pages/main/Chapter/Chapter3_6.vue
--- client/views/pages/main/Chapter/Chapter3_6.vue
+++ client/views/pages/main/Chapter/Chapter3_6.vue
@@ -1,106 +1,122 @@
 <template>
-   <div id="Chapter2_2" class="content-wrap">
-      <div style="margin: 30px 0px 50px; width: 20%">
+  <div id="Chapter2_2" class="content-wrap">
+    <div style="margin: 30px 0px 50px; width: 20%">
       <router-link to="/MyPlan.page">
-        <div class="logo mb25"><img src="../../../../resources/img/logo2.png" alt=""></div>
+        <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>
-      <div class="flex justify-between align-center">
-         <div class="pre-btn" @click="goToPage('Chapter3_5')"><img src="../../../../resources/img/left.png" alt="">
-         </div>
-         <div class="content title-box">
-            <p class="title mt25 title-bg">step3.</p>
-            <div class="flex align-center mb30">
-               <p class="subtitle2 mr20">듣고 알맞은 것을 고르세요.</p>
-               <button><img src="../../../../resources/img/btn10_s.png" alt="">
-               </button>
-            </div>
-            <div class="time-hint">
+    <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>
+    <div class="flex justify-between align-center">
+      <div class="pre-btn" @click="goToPage('Chapter3_5')"><img src="../../../../resources/img/left.png" alt="" /></div>
+      <div class="content title-box">
+        <p class="title mt25 title-bg">step3.</p>
+        <div class="flex align-center mb30">
+          <p class="subtitle2 mr20">듣고 알맞은 것을 고르세요.</p>
+          <button @click="playAudio"><img src="../../../../resources/img/btn10_s.png" alt="" /> <audio id="audio-player" src="client/resources/audio/bank.wav" preload="auto"></audio></button>
+        </div>
+        <div class="time-hint">
           <button class="hint-btn">HINT</button>
-            <div class="time-bg mt20">
-                <div>
-                  <div class="time">
-                    <p class="second">{{ timer }}</p>
-                    <p class="text">sec</p>
-                  </div>
-                </div>
+          <div class="time-bg mt20">
+            <div>
+              <div class="time">
+                <p class="second">{{ timer }}</p>
+                <p class="text">sec</p>
               </div>
-         </div>
-            
-            <div class="imgGroup">
-               <img src="../../../../resources/img/img114_57s.png" alt="">
             </div>
+          </div>
+        </div>
 
-            <div class="flex justify-center">
-               <div class="btnGroup mt50 flex justify-between">
-                  <button class="popTxt" v-for="(item, index) in items" :key="index" @click="updateContent(index)"
-                     :class="{ active: selectedIndex === index }">
-                     <img :src="item.imgSrc1">
-                     <img :src="item.imgSrc2" v-if="selectedIndex === index" style="display: block;">
-                  </button>
-               </div>
-            </div>
-         </div>
-         <div class="next-btn" @click="goToPage('Chapter3_7')"><img src="../../../../resources/img/right.png" alt="">
-         </div>
+        <div class="imgGroup">
+          <img src="../../../../resources/img/img114_57s.png" alt="" />
+        </div>
+
+        <div class="flex justify-center">
+          <div class="btnGroup mt50 flex justify-between">
+            <button class="popTxt" v-for="(item, index) in items" :key="index" @click="updateContent(index)" :class="{ active: selectedIndex === index }">
+              <img :src="item.imgSrc1" />
+              <img :src="item.imgSrc2" v-if="selectedIndex === index" style="display: block" />
+            </button>
+          </div>
+        </div>
+        <button class="submit-button" @click="handleSubmit()">제출하기</button>
       </div>
-   </div>
+      <div class="next-btn" @click="goToPage('Chapter3_7')"><img src="../../../../resources/img/right.png" alt="" /></div>
+    </div>
+  </div>
 </template>
 
 <script>
 export default {
-   data() {
-      return {
-         items: [
-            { imgSrc2: 'client/resources/img/img53_6_35s.png', imgSrc1: 'client/resources/img/img53_1_35s.png',  },
-            { imgSrc2: 'client/resources/img/img53_7_35s.png', imgSrc1: 'client/resources/img/img53_2_35s.png', },
-            { imgSrc2: 'client/resources/img/img53_8_35s.png', imgSrc1: 'client/resources/img/img53_3_35s.png',  },
-            { imgSrc2: 'client/resources/img/img53_9_35s.png', imgSrc1: 'client/resources/img/img53_4_35s.png',  },
-            { imgSrc2: 'client/resources/img/img53_10_35s.png', imgSrc1: 'client/resources/img/img53_5_35s.png',  }
-         ],
-         selectedIndex: null,
-         timer: "00",
-         intervalId: null,
-      };
-   },
-   methods: {
-      goToPage(page) {
-         this.$router.push({ name: page });
-      },
-      updateContent(index) {
-         this.selectedIndex = index;
-         this.currentCon = this.items[index].con;
-      },
-      startTimer() {
-         if (this.intervalId) {
-            clearInterval(this.intervalId);
-         }
-         this.timer = 5;
-         this.intervalId = setInterval(() => {
-            if (this.timer > 0) {
-               this.timer--;
-            } else {
-               clearInterval(this.intervalId);
-            }
-         }, 1000);
-      }
-   },
-   beforeDestroy() {
+  data() {
+    return {
+      items: [
+        { imgSrc2: "client/resources/img/img53_6_35s.png", imgSrc1: "client/resources/img/img53_1_35s.png" },
+        { imgSrc2: "client/resources/img/img53_7_35s.png", imgSrc1: "client/resources/img/img53_2_35s.png" },
+        { imgSrc2: "client/resources/img/img53_8_35s.png", imgSrc1: "client/resources/img/img53_3_35s.png" },
+        { imgSrc2: "client/resources/img/img53_9_35s.png", imgSrc1: "client/resources/img/img53_4_35s.png" },
+        { imgSrc2: "client/resources/img/img53_10_35s.png", imgSrc1: "client/resources/img/img53_5_35s.png" },
+      ],
+      selectedIndex: null,
+      timer: "00",
+      intervalId: null,
+    };
+  },
+  methods: {
+    goToPage(page) {
+      this.$router.push({ name: page });
+    },
+    updateContent(index) {
+      this.selectedIndex = index;
+      this.currentCon = this.items[index].con;
+    },
+    startTimer() {
       if (this.intervalId) {
-         clearInterval(this.intervalId);
+        clearInterval(this.intervalId);
       }
-   }
-}
+      this.timer = 5;
+      this.intervalId = setInterval(() => {
+        if (this.timer > 0) {
+          this.timer--;
+        } else {
+          clearInterval(this.intervalId);
+        }
+      }, 1000);
+    },
+    handleSubmit() {
+      console.log("정답 : ", this.selectedIndex + 1);
+    },
+    playAudio() {
+      const audio = document.getElementById("audio-player");
+      audio.play();
+      console.log("playing");
+    },
+  },
+  beforeDestroy() {
+    if (this.intervalId) {
+      clearInterval(this.intervalId);
+    }
+  },
+};
 </script>
 
 <style scoped>
 .popTxt img {
-   position: absolute;
-   top: 0;
-   left: 0;
+  position: absolute;
+  top: 0;
+  left: 0;
+}
+
+.submit-button {
+  position: absolute;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  font-family: "ONEMobilePOPOTF";
+  right: 5rem;
+  bottom: 3rem;
 }
 </style>
client/views/pages/parents/ColumnLineChart.vue
--- client/views/pages/parents/ColumnLineChart.vue
+++ client/views/pages/parents/ColumnLineChart.vue
@@ -1,206 +1,237 @@
 <template>
-    <div ref="ColumnLineChart" style="width: 500px; height: 500px;"></div>
-  </template>
-  
-  <script>
-  import * as am5 from "@amcharts/amcharts5";
-  import * as am5xy from "@amcharts/amcharts5/xy";
-  import am5themes_Animated from "@amcharts/amcharts5/themes/Animated";
-  
-  export default {
-    name: "ColumnLineChart",
-    mounted() {
-      this.createChart();
+  <div ref="ColumnLineChart" style="width: 500px; height: 500px;"></div>
+</template>
+
+<script>
+import * as am5 from "@amcharts/amcharts5";
+import * as am5xy from "@amcharts/amcharts5/xy";
+import am5themes_Animated from "@amcharts/amcharts5/themes/Animated";
+import axios from "axios";
+
+export default {
+  name: "ColumnLineChart",
+
+  data() {
+    return {
+      chartData: [],
+      currentStdId: "1"
+    };
+  },
+
+  mounted() {
+    this.getMtrScoreData();
+  },
+
+  methods: {
+    // 학생의 문제 지표 점수 데이터 가져오기
+    getMtrScoreData() {
+      const vm = this;
+      axios.post('/dashboard/mtrScoreData.json', {
+          std_id: vm.currentStdId
+      })
+      .then(response => {
+        if (response.data) {
+          // 데이터를 날짜순으로 정렬
+          vm.chartData = response.data.sort(
+            (a, b) => new Date(a.learnedDate) - new Date(b.learnedDate)
+          );
+          vm.createChart();
+        } else {
+          console.error("mtrScoreList가 응답 데이터에 없습니다.");
+        }
+      })
+      .catch(error => {
+          console.error('문제 지표 점수 데이터를 가져오는 중 오류 발생:', error);
+      });
     },
-    methods: {
-      createChart() {
-        // Initialize root
-        const root = am5.Root.new(this.$refs.ColumnLineChart);
-  
-        // Apply themes
-        const myTheme = am5.Theme.new(root);
-        myTheme.rule("Grid", ["base"]).setAll({
-          strokeOpacity: 0.1,
+
+    createChart() {
+      // Initialize root
+      const root = am5.Root.new(this.$refs.ColumnLineChart);
+
+      // Apply themes
+      root.setThemes([
+        am5themes_Animated.new(root),
+      ]);
+
+      // Create chart
+      const chart = root.container.children.push(
+        am5xy.XYChart.new(root, {
+          panX: false,
+          panY: false,
+          wheelX: "panX",
+          wheelY: "zoomX",
+          paddingLeft: 0,
+          layout: root.verticalLayout
+        })
+      );
+
+      // Create axes
+      const xRenderer = am5xy.AxisRendererX.new(root, {
+        minorGridEnabled: true,
+        minGridDistance: 60
+      });
+
+      const xAxis = chart.xAxes.push(
+        am5xy.CategoryAxis.new(root, {
+          categoryField: "learnedDate",
+          renderer: xRenderer,
+          tooltip: am5.Tooltip.new(root, {})
+        })
+      );
+
+      xRenderer.grid.template.setAll({
+        location: 1
+      });
+
+      xAxis.data.setAll(this.chartData);
+
+      let yAxis = chart.yAxes.push(
+        am5xy.ValueAxis.new(root, {
+          min: 0,
+          extraMax: 0.1,
+          renderer: am5xy.AxisRendererY.new(root, {
+            strokeOpacity: 0.1
+          })
+        })
+      );
+
+      // 이해 점수 막대 그래프
+      let series1 = chart.series.push(
+        am5xy.ColumnSeries.new(root, {
+          name: "이해 점수",
+          xAxis: xAxis,
+          yAxis: yAxis,
+          valueYField: "totalMtr01Score",
+          categoryXField: "learnedDate",
+          tooltip: am5.Tooltip.new(root, {
+            pointerOrientation: "horizontal",
+            labelText: "{name} in {categoryX}: {valueY}"
+          })
+        })
+      );
+
+      // 파스텔 블루
+      series1.columns.template.setAll({
+        fill: am5.color(0x87CEEB),
+        stroke: am5.color(0x87CEEB),
+        tooltipY: am5.percent(10),
+      });
+
+      series1.data.setAll(this.chartData);
+
+      // 표현 점수 막대 그래프
+      let series2 = chart.series.push(
+        am5xy.ColumnSeries.new(root, {
+          name: "표현 점수",
+          xAxis: xAxis,
+          yAxis: yAxis,
+          valueYField: "totalMtr02Score",
+          categoryXField: "learnedDate",
+          tooltip: am5.Tooltip.new(root, {
+            pointerOrientation: "horizontal",
+            labelText: "{name} in {categoryX}: {valueY}"
+          })
+        })
+      );
+
+      // 파스텔 핑크
+      series2.columns.template.setAll({
+        fill: am5.color(0xFFB6C1),
+        stroke: am5.color(0xFFB6C1),
+        tooltipY: am5.percent(10),
+      });
+
+      series2.data.setAll(this.chartData);
+
+      // 이해 점수 변화 꺾은선 그래프
+      const lineSeries1 = chart.series.push(
+        am5xy.LineSeries.new(root, {
+          name: "이해 점수 변화",
+          xAxis: xAxis,
+          yAxis: yAxis,
+          valueYField: "totalMtr01Score",
+          categoryXField: "learnedDate",
+          stroke: am5.color(0xADD8E6), // 라이트 블루로 설정
+          tooltip: am5.Tooltip.new(root, {
+            pointerOrientation: "horizontal",
+            labelText: "{name} on {categoryX}: {valueY}"
+          })
+        })
+      );
+
+      lineSeries1.strokes.template.setAll({
+        strokeWidth: 3,
+        stroke: am5.color(0xADD8E6), // 다시 명시적 설정
+      });
+
+      lineSeries1.bullets.push(function () {
+        return am5.Bullet.new(root, {
+          sprite: am5.Circle.new(root, {
+            radius: 5,
+            fill: am5.color(0xADD8E6), // 라이트 블루로 설정
+            strokeWidth: 3,
+            stroke: am5.color(0xADD8E6)
+          })
         });
-        root.setThemes([
-          am5themes_Animated.new(root),
-          myTheme,
-        ]);
-  
-        // Create chart
-        let chart = root.container.children.push(
-  am5xy.XYChart.new(root, {
-    panX: false,
-    panY: false,
-    wheelX: "panX",
-    wheelY: "zoomX",
-    paddingLeft: 0,
-    layout: root.verticalLayout
-  })
-);
+      });
 
-// Add scrollbar
-// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/
-// chart.set(
-//   "scrollbarX",
-//   am5.Scrollbar.new(root, {
-//     orientation: "horizontal"
-//   })
-// );
+      lineSeries1.data.setAll(this.chartData);
 
-let data = [
-  {
-    year: "2016",
-    income: 23.5,
-    expenses: 21.1
-  },
-  {
-    year: "2017",
-    income: 26.2,
-    expenses: 30.5
-  },
-  {
-    year: "2018",
-    income: 30.1,
-    expenses: 34.9
-  },
-  {
-    year: "2019",
-    income: 29.5,
-    expenses: 31.1
-  },
-  {
-    year: "2020",
-    income: 30.6,
-    expenses: 28.2,
-    strokeSettings: {
-      stroke: chart.get("colors").getIndex(1),
-      strokeWidth: 3,
-      strokeDasharray: [5, 5]
-    }
-  },
-  {
-    year: "2021",
-    income: 34.1,
-    expenses: 32.9,
-    columnSettings: {
-      strokeWidth: 1,
-      strokeDasharray: [5],
-      fillOpacity: 0.2
+      // 표현 점수 변화 꺾은선 그래프
+      const lineSeries2 = chart.series.push(
+        am5xy.LineSeries.new(root, {
+          name: "표현 점수 변화",
+          xAxis: xAxis,
+          yAxis: yAxis,
+          valueYField: "totalMtr02Score",
+          categoryXField: "learnedDate",
+          stroke: am5.color(0xFF69B4), // 핫 핑크로 설정
+          tooltip: am5.Tooltip.new(root, {
+            pointerOrientation: "horizontal",
+            labelText: "{name} on {categoryX}: {valueY}"
+          })
+        })
+      );
+
+      lineSeries2.strokes.template.setAll({
+        strokeWidth: 3,
+        stroke: am5.color(0xFF69B4), // 다시 명시적 설정
+      });
+
+      lineSeries2.bullets.push(function () {
+        return am5.Bullet.new(root, {
+          sprite: am5.Circle.new(root, {
+            radius: 5,
+            fill: am5.color(0xFF69B4), // 핫 핑크로 설정
+            strokeWidth: 3,
+            stroke: am5.color(0xFF69B4)
+          })
+        });
+      });
+
+      lineSeries2.data.setAll(this.chartData);
+
+      chart.set("cursor", am5xy.XYCursor.new(root, {}));
+
+      let legend = chart.children.push(
+        am5.Legend.new(root, {
+          centerX: am5.p50,
+          x: am5.p50
+        })
+      );
+      legend.data.setAll(chart.series.values);
+
+      chart.appear(1000, 100);
+      series1.appear();
+      series2.appear();
+      lineSeries1.appear();
+      lineSeries2.appear();
     },
-    info: "(projection)"
-  }
-];
+  },
+};
+</script>
 
-// Create axes
-// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/
-let xRenderer = am5xy.AxisRendererX.new(root, {
-  minorGridEnabled: true,
-  minGridDistance: 60
-});
-let xAxis = chart.xAxes.push(
-  am5xy.CategoryAxis.new(root, {
-    categoryField: "year",
-    renderer: xRenderer,
-    tooltip: am5.Tooltip.new(root, {})
-  })
-);
-xRenderer.grid.template.setAll({
-  location: 1
-})
-
-xAxis.data.setAll(data);
-
-let yAxis = chart.yAxes.push(
-  am5xy.ValueAxis.new(root, {
-    min: 0,
-    extraMax: 0.1,
-    renderer: am5xy.AxisRendererY.new(root, {
-      strokeOpacity: 0.1
-    })
-  })
-);
-
-
-// Add series
-// https://www.amcharts.com/docs/v5/charts/xy-chart/series/
-
-let series1 = chart.series.push(
-  am5xy.ColumnSeries.new(root, {
-    name: "Income",
-    xAxis: xAxis,
-    yAxis: yAxis,
-    valueYField: "income",
-    categoryXField: "year",
-    tooltip: am5.Tooltip.new(root, {
-      pointerOrientation: "horizontal",
-      labelText: "{name} in {categoryX}: {valueY} {info}"
-    })
-  })
-);
-
-series1.columns.template.setAll({
-  tooltipY: am5.percent(10),
-  templateField: "columnSettings"
-});
-
-series1.data.setAll(data);
-
-let series2 = chart.series.push(
-  am5xy.LineSeries.new(root, {
-    name: "Expenses",
-    xAxis: xAxis,
-    yAxis: yAxis,
-    valueYField: "expenses",
-    categoryXField: "year",
-    tooltip: am5.Tooltip.new(root, {
-      pointerOrientation: "horizontal",
-      labelText: "{name} in {categoryX}: {valueY} {info}"
-    })
-  })
-);
-
-series2.strokes.template.setAll({
-  strokeWidth: 3,
-  templateField: "strokeSettings"
-});
-
-
-series2.data.setAll(data);
-
-series2.bullets.push(function () {
-  return am5.Bullet.new(root, {
-    sprite: am5.Circle.new(root, {
-      strokeWidth: 3,
-      stroke: series2.get("stroke"),
-      radius: 5,
-      fill: root.interfaceColors.get("background")
-    })
-  });
-});
-
-chart.set("cursor", am5xy.XYCursor.new(root, {}));
-
-// Add legend
-// https://www.amcharts.com/docs/v5/charts/xy-chart/legend-xy-series/
-let legend = chart.children.push(
-  am5.Legend.new(root, {
-    centerX: am5.p50,
-    x: am5.p50
-  })
-);
-legend.data.setAll(chart.series.values);
-
-// Make stuff animate on load
-// https://www.amcharts.com/docs/v5/concepts/animations/
-chart.appear(1000, 100);
-series1.appear();
-      },
-    },
-  };
-  </script>
-  
-  <style scoped>
-  /* Add necessary styles here */
-  </style>
-  
(파일 끝에 줄바꿈 문자 없음)
+<style scoped>
+/* Add necessary styles here */
+</style>
client/views/pages/parents/Dounutchart.vue
--- client/views/pages/parents/Dounutchart.vue
+++ client/views/pages/parents/Dounutchart.vue
@@ -15,7 +15,9 @@
     return {
       chartData: {},
       currentDate: "2024-08-14",
-      currentStdId: "1"
+      currentStdId: "1",
+      root: null,
+      chart: null
     };
   },
 
@@ -42,6 +44,11 @@
     },
 
     createChart() {
+      // 차트 중복 생성 방지
+      if (this.root) {
+        this.root.dispose();
+      }
+
       // Initialize root
       const root = am5.Root.new(this.$refs.Dounutchart);
 
@@ -118,7 +125,7 @@
       series.appear(1000, 100);
     }
   }
-  
+
 };
 </script>
 
client/views/pages/parents/Main_p.vue
--- client/views/pages/parents/Main_p.vue
+++ client/views/pages/parents/Main_p.vue
@@ -90,14 +90,14 @@
                         </div>
                     </div>
                 </div>
-                <div class="gd-9">
+                <div class="gd-9 flex-column" style="flex: 1;">
                     <div class="title-box flex justify-between mb40">
                         <p class="title">전체 진행률</p>
                     </div>
                     <div class="flex">
-                        <div class="wrap">
+                        <div class="wrap" style="flex: 1;">
                             <p class="name">학습 현황</p>
-                            <div><Dounutchart/></div>
+                            <div class="flex justify-center"><Dounutchart/></div>
                             <div class="textbox">
                                 <p class="title2">오늘의 학습현황</p>
                                 <!-- 안전하게 진도율을 소수점 한자리 수까지 표시 -->
@@ -110,23 +110,23 @@
                             <p class="title2">학습시간</p>
                             <p class="name">학습시간 n시간</p>
                         </div>
-                        <div class="wrap">
+                        <div class="wrap" style="flex: 1;">
                             <p class="name">이해/표현 점수</p>
-                            <div>
+                            <div class="flex justify-center mt50">
                                 <ColumnLineChart/>
                             </div>
                         </div>
                     </div>
-                    <div class="wrap">
+                    <div class="wrap" style="flex: 2;">
                         <p class="name">교재별 진행률</p>
-                        <div>
+                        <div class="flex justify-center">
                             <StackedBarChart />
                         </div>
                     </div>
                     <div class="flex">
-                        <div class="wrap">
+                        <div class="wrap" style="flex: 1;">
                             <p class="name">오늘의 학습 일정</p>
-                            <div class="flex-column" style="gap: 20px;">
+                            <div class="flex-column mt20" style="gap: 20px;">
                                 <div class=" flex justify-between align-center " style="gap: 70px;">
                                     <div><img src="../../../resources/img/img217_22s.png" alt=""></div>
                                     <div class="wrap cs-pt" :class="{ 'cs-pt-clicked': isClicked }"
@@ -150,15 +150,15 @@
 
                             </div>
                         </div>
-                        <div class="flex-column">
+                        <div class="flex-column" style="flex: 1;">
                             <div class="wrap">
                                 <p class="name">교재별 오답률</p>
-                                <Barchart />
+                                <div class="flex justify-center"><Barchart /></div>
                             </div>
 
                             <div class="wrap">
                                 <p class="name">LC/RC 세부 점수</p>
-                                <Bubblechart />
+                                <div class="flex justify-center"><Bubblechart /></div>
                             </div>
 
                         </div>
client/views/pages/parents/StackedBarChart.vue
--- client/views/pages/parents/StackedBarChart.vue
+++ client/views/pages/parents/StackedBarChart.vue
@@ -1,5 +1,5 @@
 <template>
-    <div ref="StackedBarChart" style="height: 500px"></div>
+    <div ref="StackedBarChart" style="width: 1000px; height: 500px;"></div>
 </template>
 
 <script>
Add a comment
List