jichoi / lms_front star
dajeong 2024-08-14
Merge branch 'master' of http://210.180.118.83/jichoi/lms_front
@481a8e35b4a4ac23ad01e2458a56f1102b0d8ab5
client/views/pages/AppRouter.js
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
@@ -116,6 +116,11 @@
                 name: "Dashboard",
                 component: Dashboard,
             },
+            {
+                path: "/AIDashboard.page",
+                name: "AIDashboard",
+                component: AIDashboard,
+            },
             { path: "/MyPage.page", name: "MyPage", component: MyPage },
             { path: "/MyPlan.page", name: "MyPlan", component: MyPlan },
             { path: "/MyPlan2.page", name: "MyPlan2", component: MyPlan2 },
client/views/pages/main/Chapter/Chapter2.vue
--- client/views/pages/main/Chapter/Chapter2.vue
+++ client/views/pages/main/Chapter/Chapter2.vue
@@ -1,115 +1,109 @@
 <template>
-    <div id="Chapter1_1" class="content-wrap">
-      <div style="margin: 30px 0px 50px">
-        <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('Chapter1_3')"><img src="../../../../resources/img/left.png" alt=""></div>
-        <div class="content title-box">
-          <p class="title mt25 title-bg">step2</p>
-          <div class="flex align-center mb30">
+  <div id="Chapter1_1" class="content-wrap">
+    <div style="margin: 30px 0px 50px">
+      <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('Chapter1_3')"><img src="../../../../resources/img/left.png" alt=""></div>
+      <div class="content title-box">
+        <p class="title mt25 title-bg">단어로 공부하는 영어</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="flex justify-center">
-              <div class="vocaGroup">
-                <div class="flex justify-between mb80">
-                    <article class="flex align-center">
-                        <div class="imgGroup mr30"><img src="../../../../resources/img/img40_s.png" data-num="1"></div>
-                        <div class="flex align-start">
-                            <button class="listen-btn mr30" data-video="1" tabindex="0" aria-label="음성 재생"><img src="../../../../resources/img/btn10_s.png"
-                                data-num="1"></button>
-                           <div>
-                                <h3>sidewalk</h3>
-                                   <div class="flex align-center mt10">
-                                      <p class="yellow-box">명</p>
-                                      <span class="title1">보도</span>
-                                   </div>
-                           </div>
-                        </div>
-                    </article>
-                    <article class="flex align-center">
-                        <div class="imgGroup mr30"><img src="../../../../resources/img/31img40_s.png" data-num="1"></div>
-                        <div class="flex align-start">
-                            <button class="listen-btn mr30" data-video="1" tabindex="0" aria-label="음성 재생"><img src="../../../../resources/img/btn10_s.png"
-                                data-num="1"></button>
-                           <div>
-                                <h3>sidewalk</h3>
-                                   <div class="flex align-center mt10">
-                                      <p class="yellow-box">명</p>
-                                      <span class="title1">보도</span>
-                                   </div>
-                           </div>
-                        </div>
-                    </article>
-                </div>
-                <div class="flex justify-between">
-                    <article class="flex align-center">
-                        <div class="imgGroup mr30"><img src="../../../../resources/img/img41_s.png" data-num="1"></div>
-                        <div class="flex align-start">
-                            <button class="listen-btn mr30" data-video="1" tabindex="0" aria-label="음성 재생"><img src="../../../../resources/img/btn10_s.png"
-                                data-num="1"></button>
-                           <div>
-                                <h3>sidewalk</h3>
-                                   <div class="flex align-center mt10">
-                                      <p class="yellow-box">명</p>
-                                      <span class="title1">보도</span>
-                                   </div>
-                           </div>
-                        </div>
-                    </article>
-                    <article class="flex align-center">
-                        <div class="imgGroup mr30"><img src="../../../../resources/img/img40_s.png" data-num="1"></div>
-                        <div class="flex align-start">
-                            <button class="listen-btn mr30" data-video="1" tabindex="0" aria-label="음성 재생"><img src="../../../../resources/img/btn10_s.png"
-                                data-num="1"></button>
-                           <div>
-                                <h3>sidewalk</h3>
-                                   <div class="flex align-center mt10">
-                                      <p class="yellow-box">명</p>
-                                      <span class="title1">보도</span>
-                                   </div>
-                           </div>
-                        </div>
-                    </article>
-                </div>
+
+        <div class="flex justify-center">
+          <div class="vocaGroup">
+            <div class="grid-container">
+              <div v-for="(item, index) in word" :key="index" class="grid-item">
+                <article class="flex align-center">
+                  <div class="imgGroup mr30">
+                    <img :src="item.pic" :alt="item.eng" />
+                  </div>
+                  <div class="flex align-start">
+                    <button class="listen-btn mr30" tabindex="0" aria-label="음성 재생">
+                      <img :src="item.sound" :alt="'Sound for ' + item.eng" />
+                    </button>
+                    <div>
+                      <h3>{{ item.eng }}</h3>
+                      <div class="flex align-center mt10">
+                        <p class="yellow-box">명</p>
+                        <span class="title1">{{ item.kor }}</span>
+                      </div>
+                    </div>
+                  </div>
+                </article>
               </div>
+            </div>
           </div>
         </div>
-        <div class="next-btn" @click="goToPage('Chapter2_3')"><img src="../../../../resources/img/right.png" alt=""></div>
       </div>
+      <div class="next-btn" @click="goToPage('Chapter2_3')"><img src="../../../../resources/img/right.png" alt=""></div>
     </div>
-  </template>
-  
-  <script>
-  export default {
-    data() {
-      return {
-      }
-    },
-    methods: {
-      goToPage(page) {
-        this.$router.push({ name: page });
-      }
-    },
-    watch: {
-  
-    },
-    computed: {
-  
-    },
-    components: {
-    },
-    mounted() {
-      
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      word: [
+        {
+          eng: "apple",
+          kor: "사과",
+          pic: require("../../../../resources/img/img40_s.png").default,
+          sound: require("../../../../resources/img/btn10_s.png").default
+        },
+        {
+          eng: "cloud",
+          kor: "구름",
+          pic: require("../../../../resources/img/img42_31s.png").default,
+          sound: require("../../../../resources/img/btn10_s.png").default
+        },
+        {
+          eng: "log",
+          kor: "통나무",
+          pic: require("../../../../resources/img/31img40_s.png").default,
+          sound: require("../../../../resources/img/btn10_s.png").default
+        },
+        {
+          eng: "guitar",
+          kor: "기타",
+          pic: require("../../../../resources/img/img41_s.png").default,
+          sound: require("../../../../resources/img/btn10_s.png").default
+        }
+      ]
     }
+  },
+  methods: {
+    goToPage(page) {
+      this.$router.push({ name: page });
+    }
+  },
+  watch: {
+
+  },
+  computed: {
+
+  },
+  components: {
+  },
+  mounted() {
+
   }
-  </script>
(No newline at end of file)
+}
+</script>
+<style scoped>
+.grid-container {
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 20px;
+}
+</style>
(No newline at end of file)
client/views/pages/main/Chapter/Chapter2_2.vue
--- client/views/pages/main/Chapter/Chapter2_2.vue
+++ client/views/pages/main/Chapter/Chapter2_2.vue
@@ -13,11 +13,17 @@
          <div class="pre-btn" @click="goToPage('Chapter2_3')"><img src="../../../../resources/img/left.png" alt="">
          </div>
          <div class="content title-box">
-            <p class="title mt25 title-bg">step2</p>
+            <p class="title mt25 title-bg">단어로 공부하는 영어</p>
             <div class="flex align-center mb30">
                <p class="subtitle2 mr20">카드를 뒤집어 보세요.</p>
                <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
-          </button> -->
+          </button> --></div><div class="time-bg">
+            <div>
+              <div class="time">
+                <p class="second">{{timer}}</p>
+                <p class="text">sec</p>
+              </div>
+            </div>
             </div>
 
             <div class="imgGroup">
@@ -36,7 +42,7 @@
                </div>
             </div>
          </div>
-         <div class="next-btn" @click="goToPage('Chapter2_1')"><img src="../../../../resources/img/right.png" alt="">
+         <div class="next-btn" @click="goToPage('Chapter2_9')"><img src="../../../../resources/img/right.png" alt="">
          </div>
       </div>
    </div>
client/views/pages/main/Chapter/Chapter2_3.vue
--- client/views/pages/main/Chapter/Chapter2_3.vue
+++ client/views/pages/main/Chapter/Chapter2_3.vue
@@ -1,71 +1,106 @@
 <template>
-  <div id="Chapter2_2" class="content-wrap">
+   <div id="Chapter2_2" class="content-wrap">
       <div style="margin: 30px 0px 50px">
          <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('Chapter2')"><img src="../../../../resources/img/left.png" alt=""></div>
-        <div class="content title-box">
-           <p class="subtitle2 "></p><p class="title mt25 title-bg">step2</p>
-          <div class="flex align-center mb30">
-          <p class="subtitle2 mr20">다음을 듣고 따라 말하세요.</p>
-          <!-- <button><img src="../../../../resources/img/btn10_s.png" alt="">
+      <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('Chapter2')"><img src="../../../../resources/img/left.png" alt=""></div>
+         <div class="content title-box">
+            <p class="subtitle2 "></p>
+            <p class="title mt25 title-bg">단어로 공부하는 영어</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-bg">
-            <div>
-              <div class="time">
-                <p class="second">{{timer}}</p>
-                <p class="text">sec</p>
-              </div>
             </div>
-           </div>
 
-           <div class="imgGroup">
-             <div class="con">
-               <img :src="currentCon.imgSrc" alt="">
-               <p class="title3"><em class="yellow">{{ currentCon.titleEm }}</em>{{ currentCon.title }}</p>
-               <div class="flex align-center justify-center mt10">
-                  <p class="yellow-box-big">{{ currentCon.boxText }}</p>
-                  <span class="subtitle3">{{ currentCon.subtitle }}</span>
+            <div class="imgGroup">
+               <div class="con">
+                  <img :src="currentCon.imgSrc" alt="">
+                  <p class="title3"><em class="yellow">{{ currentCon.titleEm }}</em>{{ currentCon.title }}</p>
+                  <div class="flex align-center justify-center mt10">
+                     <p class="yellow-box-big">{{ currentCon.boxText }}</p>
+                     <span class="subtitle3">{{ currentCon.subtitle }}</span>
+                  </div>
+               </div>
+
+
+               <div class="flex justify-center">
+                  <div class="readGroup">
+                      <section>
+                          <div class="imgGroup flex justify-center">
+                              <!-- 녹음 버튼 -->
+                              <div :class="['mic-btn', { notRecording: !isRecording }]" @click="toggleRecording">
+                                  <img src="../../../../resources/img/btn11_s.png" alt="" />
+                              </div>
+                          </div>
+                          <article>
+                              <p class="speakText mb25">
+                                  <span v-if="transcription === null"
+                                      >위의 버튼을 누른 후 오늘 배운 단어를 말해보세요!</span
+                                  >
+                                  <span v-else-if="!transcription || transcription.trim() === ''"
+                                      >다시 말해보세요!</span
+                                  >
+                                  <span v-else>{{ transcription }}</span>
+                              </p>
+                              <p class="read-ai">
+                                  <img style="margin-top: -5px" src="../../../../resources/img/img43_s.png" alt="" />
+                              </p>
+                          </article>
+                      </section>
+                  </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="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>
-        <div class="next-btn" @click="goToPage('Chapter2_2')"><img src="../../../../resources/img/right.png" alt=""></div>
-     </div>
-  </div>
+         </div>
+         <div class="next-btn" @click="goToPage('Chapter2_2')"><img src="../../../../resources/img/right.png" alt="">
+         </div>
+      </div>
+   </div>
 </template>
 
 <script>
+import axios from 'axios'; 
+import { mdiStop } from '@mdi/js';
 export default {
    data() {
       return {
          items: [
             {imgSrc1: 'client/resources/img/img53_6_35s.png', imgSrc2: 'client/resources/img/img53_1_35s.png', con: { imgSrc: 'client/resources/img/img54_s.png', titleEm: 'c', title: 'loud', boxText: '명', subtitle: '구름' } },
-            {imgSrc1: 'client/resources/img/img53_7_35s.png', imgSrc2: 'client/resources/img/img53_2_35s.png', con: { imgSrc: 'client/resources/img/img54_s.png', titleEm: 's', title: 'un', boxText: '명', subtitle: '태양' } },
-            {imgSrc1: 'client/resources/img/img53_8_35s.png', imgSrc2: 'client/resources/img/img53_3_35s.png', con: { imgSrc: 'client/resources/img/img54_s.png', titleEm: 'r', title: 'ain', boxText: '명', subtitle: '비' } },
-            {imgSrc1: 'client/resources/img/img53_9_35s.png', imgSrc2: 'client/resources/img/img53_4_35s.png', con: { imgSrc: 'client/resources/img/img54_s.png', titleEm: 's', title: 'now', boxText: '명', subtitle: '눈' } },
-            {imgSrc1: 'client/resources/img/img53_10_35s.png', imgSrc2: 'client/resources/img/img53_5_35s.png', con: { imgSrc: 'client/resources/img/img54_s.png', titleEm: 'w', title: 'ind', boxText: '명', subtitle: '바람' } }
+            {imgSrc1: 'client/resources/img/img53_7_35s.png', imgSrc2: 'client/resources/img/img53_2_35s.png', con: { imgSrc: 'client/resources/img/img40_s.png', titleEm: 'a', title: 'pple', boxText: '명', subtitle: '사과' } },
+            {imgSrc1: 'client/resources/img/img53_8_35s.png', imgSrc2: 'client/resources/img/img53_3_35s.png', con: { imgSrc: 'client/resources/img/31img40_s.png', titleEm: 'l', title: 'og', boxText: '명', subtitle: '통나무' } },
+            {imgSrc1: 'client/resources/img/img53_9_35s.png', imgSrc2: 'client/resources/img/img53_4_35s.png', con: { imgSrc: 'client/resources/img/img41_s.png', titleEm: 'g', title: 'uitar', boxText: '명', subtitle: '기타' } },
+            {imgSrc1: 'client/resources/img/img53_10_35s.png', imgSrc2: 'client/resources/img/img53_5_35s.png', con: { imgSrc: 'client/resources/img/img76_41s.png', titleEm: 'w', title: 'ater melon', boxText: '명', subtitle: '수박' } }
          ],
          currentCon: { imgSrc: 'client/resources/img/img54_s.png', titleEm: 'c', title: 'loud', boxText: '명', subtitle: '구름' },
          selectedIndex: 0,
          timer: "00",
          intervalId: null,
+
+
+         isRecording: false, // 녹음 중 여부
+         mediaRecorder: null,
+         audioChunks: [], // 녹음된 오디오 데이터
+         audioBlob: null, // 오디오 Blob 객체
+         transcription: null, // 서버에서 받아온 텍스트 결과
+         stream: null, // MediaStream 객체
+
+         path: mdiStop,
       };
    },
    methods: {
@@ -89,7 +124,67 @@
                clearInterval(this.intervalId);
             }
          }, 1000);
-      }
+      },
+      // 녹음 시작/중지 토글
+      async toggleRecording() {
+          if (this.isRecording) {
+              console.log('녹음 그만!');
+              this.stopRecording(); // 녹음 중이면 중지
+          } else {
+              console.log('녹음 시작!');
+              await this.startRecording(); // 녹음 중이 아니면 녹음 시작
+          }
+      },
+      // 녹음 시작
+      async startRecording() {
+          this.audioChunks = []; // 오디오 초기화
+          this.stream = await navigator.mediaDevices.getUserMedia({ audio: true });
+          this.mediaRecorder = new MediaRecorder(this.stream);
+          this.mediaRecorder.ondataavailable = (event) => {
+              this.audioChunks.push(event.data); // 녹음 데이터 저장
+          };
+          this.mediaRecorder.onstop = () => {
+              this.audioBlob = new Blob(this.audioChunks, { type: 'audio/wav' });
+
+              /******************************/
+              // this.audioURL = URL.createObjectURL(this.audioBlob); // 오디오 URL 생성
+              // console.log('Audio URL:', this.audioURL);
+              /******************************/
+
+              console.log('Recorded Audio Blob:', this.audioBlob); // 콘솔에 Blob 확인
+              this.sendAudioToServer(); // 서버로 오디오 전송
+          };
+          this.mediaRecorder.start(); // 녹음 시작
+          this.isRecording = true; // 녹음 상태 변경
+      },
+
+      // 녹음 중지
+      stopRecording() {
+          this.mediaRecorder.stop(); // 녹음 중단
+
+          if (this.stream) {
+              this.stream.getTracks().forEach((track) => track.stop()); // 스트림의 모든 트랙 중지
+          }
+
+          this.isRecording = false; // 녹음 상태 변경
+      },
+
+      // 오디오 전송
+      async sendAudioToServer() {
+          const formData = new FormData();
+          formData.append('file', this.audioBlob, 'recording.wav');
+          try {
+              const resposne = await axios.post('/api/speechToText.json', formData, {
+                  headers: {
+                      'Content-Type': 'multipart/form-data',
+                  },
+              });
+              this.transcription = resposne.data;
+              console.log(`받은 데이터 : ${this.transcription}`);
+          } catch (error) {
+              console.log('파일 전송 실패 : ', error);
+          }
+      },
    },
    beforeDestroy() {
       if (this.intervalId) {
client/views/pages/main/Chapter/Chapter2_4.vue
--- client/views/pages/main/Chapter/Chapter2_4.vue
+++ client/views/pages/main/Chapter/Chapter2_4.vue
@@ -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('Chapter2_1')"><img src="../../../../resources/img/left.png" alt="">
+         <div class="pre-btn" @click="goToPage('Chapter2_9')"><img src="../../../../resources/img/left.png" alt="">
          </div>
          <div class="content title-box">
             <p class="title mt25 title-bg">step2</p>
@@ -42,7 +42,7 @@
                <div class="look-text"> <button ><img src="../../../../resources/img/btn08_s.png" alt=""><p>정답확인</p></button></div>
             </div>
          </div>
-         <div class="next-btn" @click="goToPage('Chapter2_9')"><img src="../../../../resources/img/right.png" alt="">
+         <div class="next-btn" @click="goToPage('Chapter2_8')"><img src="../../../../resources/img/right.png" alt="">
          </div>
       </div>
    </div>
client/views/pages/main/Chapter/Chapter2_6.vue
--- client/views/pages/main/Chapter/Chapter2_6.vue
+++ client/views/pages/main/Chapter/Chapter2_6.vue
@@ -12,7 +12,13 @@
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="goToPage('Chapter2_5')"><img src="../../../../resources/img/left.png" alt=""></div>
       <div class="content title-box">
-        <p class="title mt25 title-bg">step2</p>
+        <div style="display: flex; justify-content: space-between;">
+          <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>
+          </button>
+        </div>
         <div class="flex align-center mb30">
           <p class="subtitle2 mr20">앗! 퍼즐이 망가졌어! 퍼즐을 맞춰 문장을 완성해보자!</p>
         </div>
@@ -77,6 +83,10 @@
     goToPage(page) {
       this.$router.push({ name: page });
     },
+    returnPage() {
+      // 페이지 새로 고침
+      window.location.reload();
+    },
     handleDragStart(dragNumber) {
       // 현재 드래그 중인 퍼즐의 번호를 저장
       this.currentDrag = dragNumber;
client/views/pages/main/Chapter/Chapter2_9.vue
--- client/views/pages/main/Chapter/Chapter2_9.vue
+++ client/views/pages/main/Chapter/Chapter2_9.vue
@@ -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('Chapter2_4')"><img src="../../../../resources/img/left.png" alt=""></div>
+      <div class="pre-btn" @click="goToPage('Chapter2_2')"><img src="../../../../resources/img/left.png" alt=""></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step2</p>
         <div class="flex align-center mb30">
@@ -106,7 +106,7 @@
           </div>
         </div>
       </div>
-      <div class="next-btn" @click="goToPage('Chapter2_8')"><img src="../../../../resources/img/right.png" alt=""></div>
+      <div class="next-btn" @click="goToPage('Chapter2_4')"><img src="../../../../resources/img/right.png" alt=""></div>
     </div>
   </div>
 </template>
client/views/pages/main/Chapter/Chapter3_7.vue
--- client/views/pages/main/Chapter/Chapter3_7.vue
+++ client/views/pages/main/Chapter/Chapter3_7.vue
@@ -1,165 +1,198 @@
 <template>
-  <div id="Chapter1_1" class="content-wrap">
-    <div style="margin: 30px 0px 50px">
-        <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_6')"><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="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 id="Chapter1_1" class="content-wrap">
+        <div style="margin: 30px 0px 50px">
+            <router-link to="/MyPlan.page">
+                <div class="logo mb25">
+                    <img src="../../../../resources/img/logo2.png" alt="" />
                 </div>
-              </div>
-         </div>
-          
-          <div class="pickGroup flex align-center justify-between mt80" style="gap: 100px;">
-            <p>1. 문제</p>
-            <div class="flex justify-center" style="gap: 60px;">
-              <article >
-                <div class="flex align-center">
-                  <button><img src="../../../../resources/img/img136_71s.png" alt="">
-                    <p>1</p>
-                  </button>
-                  <img src="../../../../resources/img/img111_56s.png" alt="">
-                </div>
-              </article>
-              <article >
-                <div class="flex align-center">
-                  <button><img src="../../../../resources/img/img136_71s.png" alt="">
-                    <p>2</p>
-                  </button>
-                  <img src="../../../../resources/img/img112_56s.png" alt="">
-                </div>
-              </article>
-            </div>
-          </div>
-          <div class="pickGroup mt40 flex align-center justify-between" style="gap: 100px;">
-            <p>2. 문제 ㅇㅇㅇ</p>
-            <div class="flex justify-center" style="gap: 60px;">
-              <article >
-                <div class="flex align-center">
-                  <button><img src="../../../../resources/img/img136_71s.png" alt="">
-                    <p>1</p>
-                  </button>
-                  <img src="../../../../resources/img/img111_56s.png" alt="">
-                </div>
-              </article>
-              <article >
-                <div class="flex align-center">
-                  <button><img src="../../../../resources/img/img136_71s.png" alt="">
-                    <p>2</p>
-                  </button>
-                  <img src="../../../../resources/img/img112_56s.png" alt="">
-                </div>
-              </article>
-            </div>
-          </div>
+            </router-link>
         </div>
-      </div>
-      <div class="next-btn" @click="goToPage('Chapter3_8')"><img src="../../../../resources/img/right.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>
+        </div>
+        <div class="flex justify-between align-center">
+            <div class="pre-btn" @click="goToPage('Chapter3_6')">
+                <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=""
+                        />
+                    </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-between mt80"
+                        style="gap: 100px"
+                        v-for="(item, index) in problemDetail"
+                        :key="item.id"
+                    >
+                        <p>{{ index + 1 }}. {{ item.prblmDtlExpln }}</p>
+                        <div class="flex justify-center" style="gap: 60px">
+                            <article>
+                                <div class="flex align-center">
+                                    <button>
+                                        <img
+                                            src="../../../../resources/img/img136_71s.png"
+                                            alt=""
+                                        />
+                                        <p>1</p>
+                                    </button>
+                                    <img
+                                        src="../../../../resources/img/img111_56s.png"
+                                        alt=""
+                                    />
+                                </div>
+                            </article>
+                            <article>
+                                <div class="flex align-center">
+                                    <button>
+                                        <img
+                                            src="../../../../resources/img/img136_71s.png"
+                                            alt=""
+                                        />
+                                        <p>2</p>
+                                    </button>
+                                    <img
+                                        src="../../../../resources/img/img112_56s.png"
+                                        alt=""
+                                    />
+                                </div>
+                            </article>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="next-btn" @click="goToPage('Chapter3_8')">
+                <img src="../../../../resources/img/right.png" alt="" />
+            </div>
+        </div>
     </div>
-  </div>
 </template>
 
 <script>
+import axios from "axios";
+
 export default {
-  data() {
-    return {
-      timer: '00'
-    }
-  },
-  methods: {
-    goToPage(page) {
-      this.$router.push({ name: page });
+    data() {
+        return {
+            timer: "00",
+            prblmId: "",
+            problemDetail: [],
+            dataList: [],
+            prblmExpln: null,
+        };
     },
-    startTimer() {
-      if (this.intervalId) {
-        clearInterval(this.intervalId);
-      }
-      this.timer = 5;
-      this.intervalId = setInterval(() => {
-        if (this.timer > 0) {
-          this.timer--;
-        } else {
-          clearInterval(this.intervalId);
-        }
-      }, 1000);
-    }
-  },
-  watch: {
-
-  },
-  computed: {
-
-  },
-  components: {
-  },
-  mounted() {
-
-  }
-}
+    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);
+        },
+        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,
+                },
+            })
+                .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);
+                });
+        },
+    },
+    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{padding: 0px 80px;}
+.pickGroup {
+    padding: 0px 80px;
+}
 .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%);
 }
-</style>
(No newline at end of file)
+</style>
client/views/pages/main/Chapter/Chapter3_9.vue
--- client/views/pages/main/Chapter/Chapter3_9.vue
+++ client/views/pages/main/Chapter/Chapter3_9.vue
@@ -1,136 +1,172 @@
 <template>
-  <div id="Chapter1_1" class="content-wrap">
-    <div style="margin: 30px 0px 50px">
-        <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_8')"><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="mt50 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 id="Chapter1_1" class="content-wrap">
+        <div style="margin: 30px 0px 50px">
+            <router-link to="/MyPlan.page">
+                <div class="logo mb25">
+                    <img src="../../../../resources/img/logo2.png" alt="" />
                 </div>
-              </div>
-         </div>
-          <div class="imgGroup  mt50">
-            <img src="../../../../resources/img/img115_58s.png" alt="">
-            <div class=" mt50">
-              <input class="yellow-bd" type="text" name="" id="" placeholder="답을 입력하세요.">
-
-            </div>
-          </div>
-
+            </router-link>
         </div>
-      </div>
-      <div class="next-btn" @click="goToPage('Chapter3_10')"><img src="../../../../resources/img/right.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>
+        </div>
+        <div class="flex justify-between align-center">
+            <div class="pre-btn" @click="goToPage('Chapter3_8')">
+                <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="">
+               </button> -->
+                </div>
+
+                <div class="mt50 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 mt50">
+                        <img
+                            src="../../../../resources/img/img115_58s.png"
+                            alt=""
+                        />
+                        <div class="mt50">
+                            <input
+                                class="yellow-bd"
+                                type="text"
+                                name=""
+                                id=""
+                                placeholder="답을 입력하세요."
+                            />
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="next-btn" @click="goToPage('Chapter3_10')">
+                <img src="../../../../resources/img/right.png" alt="" />
+            </div>
+        </div>
     </div>
-  </div>
 </template>
 
 <script>
+import axios from "axios";
 export default {
-  data() {
-    return {
-      timer: '00',
-      showButton1: false,
-      showButton2: false,
-      showButton3: false,
-      showButton4: false,
-    }
-  },
-  methods: {
-    goToPage(page) {
-      this.$router.push({ name: page });
-    },
-    handleDrag(dragNumber) {
-      // Drag 버튼 숨기기
-      // 여기서는 상태 관리를 통해 버튼을 제어합니다.
-      if (dragNumber === 1) {
-        this.showButton1 = false;
-      } else if (dragNumber === 2) {
-        this.showButton2 = false;
-      } else if (dragNumber === 3) {
-        this.showButton3 = false;
-      }
-    },
-    showButton(dropNumber) {
-      // Drop 영역의 이미지 클릭 이벤트 핸들러 설정
-      // 여기서는 상태 관리를 통해 버튼을 보이게 합니다.
-      if (dropNumber === 1) {
-        this.showButton1 = true;
-      } else if (dropNumber === 2) {
-        this.showButton2 = true;
-      } else if (dropNumber === 3) {
-        this.showButton3 = true;
-      } else if (dropNumber === 4) {
-        this.showButton4 = true;
-      }
-    },
-    startTimer() {
-      if (this.intervalId) {
-        clearInterval(this.intervalId);
-      }
-      this.timer = 5;
-      this.intervalId = setInterval(() => {
-        if (this.timer > 0) {
-          this.timer--;
-        } else {
-          clearInterval(this.intervalId);
-        }
-      }, 1000);
-    }
-  },
-  watch: {
+    data() {
+        return {
+            timer: "00",
+            showButton1: false,
+            showButton2: false,
+            showButton3: false,
+            showButton4: false,
 
-  },
-  computed: {
-
-  },
-  components: {
-  },
-  mounted() {
-
-  }
-}
+            problemDetail: [],
+            dataList: [],
+            prblmExpln: null,
+        };
+    },
+    methods: {
+        goToPage(page) {
+            this.$router.push({ name: page });
+        },
+        handleDrag(dragNumber) {
+            // Drag 버튼 숨기기
+            // 여기서는 상태 관리를 통해 버튼을 제어합니다.
+            if (dragNumber === 1) {
+                this.showButton1 = false;
+            } else if (dragNumber === 2) {
+                this.showButton2 = false;
+            } else if (dragNumber === 3) {
+                this.showButton3 = false;
+            }
+        },
+        showButton(dropNumber) {
+            // Drop 영역의 이미지 클릭 이벤트 핸들러 설정
+            // 여기서는 상태 관리를 통해 버튼을 보이게 합니다.
+            if (dropNumber === 1) {
+                this.showButton1 = true;
+            } else if (dropNumber === 2) {
+                this.showButton2 = true;
+            } else if (dropNumber === 3) {
+                this.showButton3 = true;
+            } else if (dropNumber === 4) {
+                this.showButton4 = true;
+            }
+        },
+        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;
+            vm.prblmId = JSON.parse(sessionStorage.getItem("prblmId"));
+            axios({
+                url: "problem/problemInfo.json",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json; charset=UTF-8",
+                },
+                data: {
+                    prblmId: "100",
+                },
+            })
+                .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);
+                });
+        },
+    },
+    watch: {},
+    computed: {},
+    components: {},
+    mounted() {
+        // this.problemSearch();
+    },
+};
 </script>
 <style scoped>
-input.yellow-bd{width: 30%;}
+input.yellow-bd {
+    width: 30%;
+}
 .dropGroup button {
-  position: relative;
+    position: relative;
 }
 
 .dropGroup button p {
-  font-size: 48px;
+    font-size: 48px;
 }
 
 .dragGroup {
-  background-color: #F2F4F8;
-  padding: 30px 50px;
-  width: max-content;
-  border-radius: 20px;
+    background-color: #f2f4f8;
+    padding: 30px 50px;
+    width: max-content;
+    border-radius: 20px;
 }
 
 .dragGroup button p {
-  font-size: 48px;
+    font-size: 48px;
 }
-</style>
(No newline at end of file)
+</style>
client/views/pages/main/Chapter/Chapter4.vue
--- client/views/pages/main/Chapter/Chapter4.vue
+++ client/views/pages/main/Chapter/Chapter4.vue
@@ -2,7 +2,9 @@
     <div id="Chapter1_1" class="content-wrap">
         <div style="margin: 30px 0px 50px">
             <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 +12,8 @@
             <span class="subtitle">my name is dd</span>
         </div>
         <div class="flex justify-between align-center">
-            <div class="pre-btn" @click="goToPage('Chapter3_15')"><img src="../../../../resources/img/left.png" alt="">
+            <div class="pre-btn" @click="goToPage('Chapter3_15')">
+                <img src="../../../../resources/img/left.png" alt="" />
             </div>
             <div class="content title-box">
                 <p class="title mt25 title-bg">Quiz Result</p>
@@ -20,83 +23,83 @@
                  </button>
                 </div> -->
 
-                <div class="text-ct flex justify-center" style="gap: 150px; margin: 0 auto;">
-                    <div class="wrap-bg ">
-                        <div class="title-box flex mb10  justify-between">
+                <div
+                    class="text-ct flex justify-center"
+                    style="gap: 150px; margin: 0 auto"
+                >
+                    <div class="wrap-bg">
+                        <div class="title-box flex mb10 justify-between">
                             <p class="title mb20">최종 점수</p>
-                            <button type="button" class="popup-close-btn" @click="closeBtn">
-                                <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon>
+                            <button
+                                type="button"
+                                class="popup-close-btn"
+                                @click="closeBtn"
+                            >
+                                <svg-icon
+                                    type="mdi"
+                                    :path="mdiWindowClose"
+                                    class="close-btn"
+                                ></svg-icon>
                             </button>
                         </div>
-                        <div style="width: 100%;" class="flex mt30">
+                        <div style="width: 100%" class="flex mt30">
                             <p class="title5"><em class="yellow">93</em></p>
                             <p class="title4 ml10 mr10">&#47;</p>
                             <p class="title4">100</p>
                         </div>
                     </div>
-                    <div class="bg-gray " style="width: 980px;">
-                        <div class="title-box flex mb10  justify-between">
+                    <div class="bg-gray" style="width: 980px">
+                        <div class="title-box flex mb10 justify-between">
                             <p class="title mb20">오답 문제 리스트</p>
-                            <button type="button" class="popup-close-btn" @click="closeBtn">
-                                <svg-icon type="mdi" :path="mdiWindowClose" class="close-btn"></svg-icon>
+                            <button
+                                type="button"
+                                class="popup-close-btn"
+                                @click="closeBtn"
+                            >
+                                <svg-icon
+                                    type="mdi"
+                                    :path="mdiWindowClose"
+                                    class="close-btn"
+                                ></svg-icon>
                             </button>
                         </div>
-                        <article class=" mb20 flex-column result-box" style="gap: 20px;">
-                            <div class="flex justify-between wrap">
+                        <article
+                            class="mb20 flex-column result-box"
+                            style="gap: 20px"
+                        >
+                            <div
+                                class="flex justify-between wrap"
+                                v-for="(item, index) in dataList"
+                                :key="item.id"
+                            >
                                 <div class="flex align-center">
-                                    <div><p class="title1 mr20">1.</p></div>
+                                    <div>
+                                        <p class="title1 mr20">
+                                            {{ index + 1 }}
+                                        </p>
+                                    </div>
                                     <div class="text-lf">
-                                        <p class="title1">2교시</p>
+                                        <p class="title1">
+                                            {{ item.prblmExpln }}
+                                        </p>
                                     </div>
                                 </div>
                                 <div>
-                                    <div class="flex align-center " style="gap: 10px;"><button type="button"
-                                            title="정답 확인" class="yellow-btn">
-                                            정답 확인
-                                        </button>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="flex justify-between wrap">
-                                <div class="flex align-center">
-                                    <div><p class="title1 mr20">1.</p></div>
-                                    <div class="text-lf">
-                                        <p class="title1">2교시</p>
-                                    </div>
-                                </div>
-                                <div>
-                                    <div class="flex align-center " style="gap: 10px;"><button type="button"
-                                            title="정답 확인" class="yellow-btn">
-                                            정답 확인
-                                        </button>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="flex justify-between wrap">
-                                <div class="flex align-center">
-                                    <div><p class="title1 mr20">1.</p></div>
-                                    <div class="text-lf">
-                                        <p class="title1">2교시</p>
-                                    </div>
-                                </div>
-                                <div>
-                                    <div class="flex align-center " style="gap: 10px;"><button type="button"
-                                            title="정답 확인" class="yellow-btn">
-                                            정답 확인
-                                        </button>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="flex justify-between wrap">
-                                <div class="flex align-center">
-                                    <div><p class="title1 mr20">1.</p></div>
-                                    <div class="text-lf">
-                                        <p class="title1">2교시</p>
-                                    </div>
-                                </div>
-                                <div>
-                                    <div class="flex align-center " style="gap: 10px;"><button type="button"
-                                            title="정답 확인" class="yellow-btn">
+                                    <div
+                                        class="flex align-center"
+                                        style="gap: 10px"
+                                    >
+                                        <button
+                                            type="button"
+                                            title="정답 확인"
+                                            class="yellow-btn"
+                                            @click="
+                                                [
+                                                    handleProblemDetail(item),
+                                                    goToPage(problemType),
+                                                ]
+                                            "
+                                        >
                                             정답 확인
                                         </button>
                                     </div>
@@ -104,25 +107,36 @@
                             </div>
                         </article>
                     </div>
-
                 </div>
             </div>
-            <div class="next-btn" @click="goToPage('Chapter3_16')"><img src="../../../../resources/img/right.png" alt="">
+            <div class="next-btn" @click="goToPage('Chapter3_16')">
+                <img src="../../../../resources/img/right.png" alt="" />
             </div>
         </div>
     </div>
 </template>
 
 <script>
+import axios from "axios";
+
 export default {
     data() {
         return {
-            timer: '00',
+            timer: "00",
             showButton1: false,
             showButton2: false,
             showButton3: false,
             showButton4: false,
-        }
+
+            // 단원 평가 아이디, 추후 세션으로 받게 변경
+            evalId: "EVAL_000000000000003",
+
+            dataList: [],
+
+            prblmId: "",
+
+            problemType: null,
+        };
     },
     methods: {
         goToPage(page) {
@@ -164,20 +178,54 @@
                     clearInterval(this.intervalId);
                 }
             }, 1000);
-        }
-    },
-    watch: {
+        },
+        problemList() {
+            const vm = this;
 
-    },
-    computed: {
+            axios({
+                url: "problem/evaluationProblemList.json",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json; charset=UTF-8",
+                },
+                data: {
+                    evalId: vm.evalId,
+                },
+            })
+                .then(function (res) {
+                    console.log("problemList - response : ", res.data);
+                    vm.dataList = res.data;
+                })
+                .catch(function (error) {
+                    console.log("problemList - error : ", error);
+                });
+        },
 
+        handleProblemDetail(item) {
+            sessionStorage.setItem("prblmId", JSON.stringify(item.prblmId));
+            console.log(item.prblmTypeId);
+            if (item.prblmTypeId === "11") {
+                this.problemType = "Chapter3_9";
+            } else if (item.prblmTypeId === "12") {
+                this.problemType = "Chapter3_4";
+            } else if (item.prblmTypeId === "4") {
+                this.problemType = "Chapter3_3";
+            } else if (item.prblmTypeId === "3") {
+                this.problemType = "Chapter3_7";
+            } else if (item.prblmTypeId === "10") {
+                this.problemType = "Chapter3_2";
+            } else if (item.prblmTypeId === "14") {
+                this.problemType = "Chapter3_12";
+            }
+        },
     },
-    components: {
-    },
+    watch: {},
+    computed: {},
+    components: {},
     mounted() {
-
-    }
-}
+        this.problemList();
+    },
+};
 </script>
 <style scoped>
 .textbox {
@@ -201,4 +249,4 @@
 .dragGroup button p {
     font-size: 48px;
 }
-</style>
(No newline at end of file)
+</style>
client/views/pages/main/PreviewNote.vue
--- client/views/pages/main/PreviewNote.vue
+++ client/views/pages/main/PreviewNote.vue
@@ -16,8 +16,10 @@
             <p class="title">오답노트</p>
         </div>
         <div class="wrap" style="border-radius: 0;">
-ㄴ
             <div class="table-wrap">
+                <span class="flex align-center title2 gray mb20">
+                    이 단원에서 틀린 문제가 총 <p class="title1 black">&nbsp;{{ wrongAnswerNotes.length }}&nbsp;</p> 개 있습니다!
+                </span>
                 <table>
                     <colgroup>
                         <col style="width: 10%;">
Add a comment
List