jichoi / lms_front star
PsHooN7979 2024-08-23
240823 박세훈 Chapter3 문제 페이지들 수정
@52630aa76337fc6d2120fcddbaa209f2283300b6
client/views/pages/AppStore.js
--- client/views/pages/AppStore.js
+++ client/views/pages/AppStore.js
@@ -2,260 +2,282 @@
 
 // Local storage에 상태를 저장하는 함수
 function saveStateToLocalStorage(state) {
-  localStorage.setItem("vuexState", JSON.stringify(state));
+    localStorage.setItem("vuexState", JSON.stringify(state));
 }
 
 // Local storage에서 상태를 불러오는 함수
 function loadStateFromLocalStorage() {
-  const savedState = localStorage.getItem("vuexState");
-  if (savedState) {
-    return JSON.parse(savedState);
-  }
-  return {
-    token: null,
-    userId: null,
-    authcd: null,
-    stdId: null,
-    schdlId: null,
-    bookId: null,
-    unitId: null,
-    unitNm: null,
-    LearningId: null,
+    const savedState = localStorage.getItem("vuexState");
+    if (savedState) {
+        return JSON.parse(savedState);
+    }
+    return {
+        token: null,
+        userId: null,
+        authcd: null,
+        stdId: null,
+        schdlId: null,
+        bookId: null,
+        unitId: null,
+        unitNm: null,
+        LearningId: null,
 
-    // 문제
-    currentLearningIds: [],
-    prblmTypeId: null,
-    currentLabel: null,
-    currentProblemIndex: 0,
-    allProblems: [],
+        // 문제
+        currentLearningIds: [],
+        prblmTypeId: null,
+        currentLabel: null,
+        currentProblemIndex: 0,
+        allProblems: [],
+        allAnswers: [],
 
-    // 단어장
-    textId: null,
-    wdBookIdList: [],
-    currentWdBkIndex: 0,
+        // 단어장
+        textId: null,
+        wdBookIdList: [],
+        currentWdBkIndex: 0,
 
-    // 순서
-    seqNum: null,
-  };
+        // 순서
+        seqNum: null,
+    };
 }
 
 export default createStore({
-  state: loadStateFromLocalStorage(),
-  getters: {
-    getUserInfo(state) {
-      return {
-        userId: state.userId,
-        userNm: state.userNm,
-        authcd: state.authcd,
-      };
-    },
-    getStdId(state) {
-      return state.stdId;
-    },
-    getSchdlId(state) {
-      return state.schdlId;
-    },
-    getBookId(state) {
-      return state.bookId;
-    },
-    getUnitId(state) {
-      return state.unitId;
-    },
-    getLearningId(state) {
-      return state.learningId;
-    },
-    getTextId(state) {
-      return state.textId;
-    },
+    state: loadStateFromLocalStorage(),
+    getters: {
+        getUserInfo(state) {
+            return {
+                userId: state.userId,
+                userNm: state.userNm,
+                authcd: state.authcd,
+            };
+        },
+        getStdId(state) {
+            return state.stdId;
+        },
+        getSchdlId(state) {
+            return state.schdlId;
+        },
+        getBookId(state) {
+            return state.bookId;
+        },
+        getUnitId(state) {
+            return state.unitId;
+        },
+        getLearningId(state) {
+            return state.learningId;
+        },
+        getTextId(state) {
+            return state.textId;
+        },
 
-    // 문제
-    currentLearningId(state) {
-      return state.currentLearningIds[state.currentProblemIndex];
-    },
-    currentLabel: (state) => state.currentLabel,
-    currentProblemIndex: (state) => state.currentProblemIndex,
-    seqNum: (state) => state.seqNum,
-    prblmTypeId: (state) => state.prblmTypeId,
-    getAllProblems(state) {
-      return state.allProblems;
-    },
+        // 문제
+        currentLearningId(state) {
+            return state.currentLearningIds[state.currentProblemIndex];
+        },
+        currentLabel: (state) => state.currentLabel,
+        currentProblemIndex: (state) => state.currentProblemIndex,
+        seqNum: (state) => state.seqNum,
+        prblmTypeId: (state) => state.prblmTypeId,
+        getAllProblems(state) {
+            return state.allProblems;
+        },
+        getAllAnswers: state => state.allAnswers,
 
-    // 단어장
-    getWdBookIdList(state) {
-      return state.wdBookIdList;
+        // 단어장
+        getWdBookIdList(state) {
+            return state.wdBookIdList;
+        },
+        getCurrentWdBkIndex: (state) => state.currentWdBkIndex,
     },
-    getCurrentWdBkIndex: (state) => state.currentWdBkIndex,
-  },
-  mutations: {
-    setToken(state, token) {
-      state.token = token;
-    },
-    clearToken(state) {
-      state.token = null;
-      state.userId = null;
-      state.userNm = null;
-      state.authcd = null;
-      state.stdId = null;
-      state.schdlId = null;
-      state.bookId = null;
-      state.unitId = null;
-      state.learningId = null;
-      saveStateToLocalStorage(state);
-    },
-    setUser(state, userId) {
-      state.userId = userId;
-      saveStateToLocalStorage(state);
-    },
-    setUserNm(state, userNm) {
-      state.userNm = userNm;
-      saveStateToLocalStorage(state);
-    },
-    setAuthcd(state, authcd) {
-      state.authcd = authcd;
-      saveStateToLocalStorage(state);
-    },
-    setStdId(state, stdId) {
-      state.stdId = stdId;
-      saveStateToLocalStorage(state);
-    },
-    setSchdlId(state, schdlId) {
-      state.schdlId = schdlId;
-      saveStateToLocalStorage(state);
-    },
-    setBookId(state, bookId) {
-      state.bookId = bookId;
-      saveStateToLocalStorage(state);
-    },
-    setUnitId(state, unitId) {
-      state.unitId = unitId;
-      saveStateToLocalStorage(state);
-    },
-    setLearningId(state, learningId) {
-      state.learningId = learningId;
-      saveStateToLocalStorage(state);
-    },
-    setTextId(state, textId) {
-      state.textId = textId;
-      saveStateToLocalStorage(state);
-    },
+    mutations: {
+        setToken(state, token) {
+            state.token = token;
+        },
+        clearToken(state) {
+            state.token = null;
+            state.userId = null;
+            state.userNm = null;
+            state.authcd = null;
+            state.stdId = null;
+            state.schdlId = null;
+            state.bookId = null;
+            state.unitId = null;
+            state.learningId = null;
+            saveStateToLocalStorage(state);
+        },
+        setUser(state, userId) {
+            state.userId = userId;
+            saveStateToLocalStorage(state);
+        },
+        setUserNm(state, userNm) {
+            state.userNm = userNm;
+            saveStateToLocalStorage(state);
+        },
+        setAuthcd(state, authcd) {
+            state.authcd = authcd;
+            saveStateToLocalStorage(state);
+        },
+        setStdId(state, stdId) {
+            state.stdId = stdId;
+            saveStateToLocalStorage(state);
+        },
+        setSchdlId(state, schdlId) {
+            state.schdlId = schdlId;
+            saveStateToLocalStorage(state);
+        },
+        setBookId(state, bookId) {
+            state.bookId = bookId;
+            saveStateToLocalStorage(state);
+        },
+        setUnitId(state, unitId) {
+            state.unitId = unitId;
+            saveStateToLocalStorage(state);
+        },
+        setLearningId(state, learningId) {
+            state.learningId = learningId;
+            saveStateToLocalStorage(state);
+        },
+        setTextId(state, textId) {
+            state.textId = textId;
+            saveStateToLocalStorage(state);
+        },
 
-    // 순서
-    // setSeqNum(state, seqNum) {
-    //   state.seqNum = seqNum;
-    //   saveStateToLocalStorage(state);
-    // },
+        // 순서
+        // setSeqNum(state, seqNum) {
+        //   state.seqNum = seqNum;
+        //   saveStateToLocalStorage(state);
+        // },
 
-    // 문제
-    setLearningData(state, payload) {
-      state.currentLearningIds = payload.learning_id; // Array of IDs
-      state.currentLabel = payload.label;
-      state.currentProblemIndex = 0; // Reset to the first problem
-      state.prblmTypeId = payload.prblmTypeId;
-      // 순서
-      state.seqNum = payload.seqNum;
-      saveStateToLocalStorage(state);
-    },
-    incrementProblemIndex(state) {
-      if (state.currentProblemIndex < state.currentLearningIds.length - 1) {
-        state.currentProblemIndex++;
-        saveStateToLocalStorage(state);
-      }
-    },
-    decrementProblemIndex(state) {
-      if (state.currentProblemIndex > 0) {
-        state.currentProblemIndex--;
-        saveStateToLocalStorage(state);
-      }
-    },
-    saveOrUpdateProblem(state, problemData) {
-      const existingProblemIndex = state.allProblems.findIndex(
-        (problem) => problem.prblmNumber === problemData.prblmNumber
-      );
+        // 문제
+        setLearningData(state, payload) {
+            state.currentLearningIds = payload.learning_id; // Array of IDs
+            state.currentLabel = payload.label;
+            state.currentProblemIndex = 0; // Reset to the first problem
+            state.prblmTypeId = payload.prblmTypeId;
+            // 순서
+            state.seqNum = payload.seqNum;
+            saveStateToLocalStorage(state);
+        },
+        incrementProblemIndex(state) {
+            if (state.currentProblemIndex < state.currentLearningIds.length - 1) {
+                state.currentProblemIndex++;
+                saveStateToLocalStorage(state);
+            }
+        },
+        decrementProblemIndex(state) {
+            if (state.currentProblemIndex > 0) {
+                state.currentProblemIndex--;
+                saveStateToLocalStorage(state);
+            }
+        },
+        saveOrUpdateProblem(state, problemData) {
+            const existingProblemIndex = state.allProblems.findIndex(
+                (problem) => problem.prblmNumber === problemData.prblmNumber
+            );
 
-      if (existingProblemIndex !== -1) {
-        // 문제 데이터 업데이트
-        state.allProblems[existingProblemIndex] = problemData;
-      } else {
-        // 새로운 문제 추가
-        state.allProblems.push(problemData);
-      }
-    },
+            if (existingProblemIndex !== -1) {
+                // 문제 데이터 업데이트
+                state.allProblems[existingProblemIndex] = problemData;
+            } else {
+                // 새로운 문제 추가
+                state.allProblems.push(problemData);
+            }
+        },
+        addOrUpdateProblemAttempt(state, answerData) {
+            if (!state.allAnswers) {
+                state.allAnswers = [];
+            }
 
-    // 단어장
-    setWdBookIdList(state, wdBookIdList) {
-      state.wdBookIdList = wdBookIdList;
-      saveStateToLocalStorage(state);
-    },
-    setCurrentWdBkIndex(state, currentWdBkIndex) {
-      state.currentWdBkIndex = currentWdBkIndex;
-      saveStateToLocalStorage(state);
-    },
-  },
-  actions: {
-    login({ commit }, token) {
-      commit("setToken", token);
-      localStorage.setItem("token", token);
-    },
-    logout({ commit }) {
-      commit("clearToken");
-      localStorage.removeItem("token");
-    },
-    updateStdId({ commit }, payload) {
-      return new Promise((resolve) => {
-        commit("setStdId", payload);
-        resolve();
-      });
-    },
-    updateSchdlId({ commit }, payload) {
-      return new Promise((resolve) => {
-        commit("setSchdlId", payload);
-        resolve();
-      });
-    },
-    updateBookId({ commit }, payload) {
-      return new Promise((resolve) => {
-        commit("setBookId", payload);
-        resolve();
-      });
-    },
-    updateUnitId({ commit }, payload) {
-      return new Promise((resolve) => {
-        commit("setUnitId", payload);
-        resolve();
-      });
-    },
-    updateLearningId({ commit }, learningId) {
-      commit("setLearningId", learningId);
-    },
-    updateLearningData({ commit }, payload) {
-      commit("setLearningData", payload);
-    },
-    updateTextId({ commit }, textId) {
-      commit("setTextId", textId);
-    },
+            const existingEntryIndex = state.allAnswers.findIndex(
+                answer => answer.prblmId === answerData.prblmId
+            );
 
-    // 문제
-    goToNextProblem({ commit }) {
-      commit("incrementProblemIndex");
-    },
-    goToPreviousProblem({ commit }) {
-      commit("decrementProblemIndex");
-    },
-    saveProblemData({ commit }, problemData) {
-      commit("saveOrUpdateProblem", problemData);
-    },
+            if (existingEntryIndex !== -1) {
+                // 정답 데이터 업데이트
+                state.allAnswers[existingEntryIndex] = answerData;
+            } else {
+                // 새로운 정답 추가
+                state.allAnswers.push(answerData);
+            }
+        },
 
-    // 단어장
-    updateWdBookIdList({ commit }, wdBookIdList) {
-      commit("setWdBookIdList", wdBookIdList);
+        // 단어장
+        setWdBookIdList(state, wdBookIdList) {
+            state.wdBookIdList = wdBookIdList;
+            saveStateToLocalStorage(state);
+        },
+        setCurrentWdBkIndex(state, currentWdBkIndex) {
+            state.currentWdBkIndex = currentWdBkIndex;
+            saveStateToLocalStorage(state);
+        },
     },
-    updateCurrentWdBkIndex({ commit }, currentWdBkIndex) {
-      commit("setCurrentWdBkIndex", currentWdBkIndex);
-    },
+    actions: {
+        login({ commit }, token) {
+            commit("setToken", token);
+            localStorage.setItem("token", token);
+        },
+        logout({ commit }) {
+            commit("clearToken");
+            localStorage.removeItem("token");
+        },
+        updateStdId({ commit }, payload) {
+            return new Promise((resolve) => {
+                commit("setStdId", payload);
+                resolve();
+            });
+        },
+        updateSchdlId({ commit }, payload) {
+            return new Promise((resolve) => {
+                commit("setSchdlId", payload);
+                resolve();
+            });
+        },
+        updateBookId({ commit }, payload) {
+            return new Promise((resolve) => {
+                commit("setBookId", payload);
+                resolve();
+            });
+        },
+        updateUnitId({ commit }, payload) {
+            return new Promise((resolve) => {
+                commit("setUnitId", payload);
+                resolve();
+            });
+        },
+        updateLearningId({ commit }, learningId) {
+            commit("setLearningId", learningId);
+        },
+        updateLearningData({ commit }, payload) {
+            commit("setLearningData", payload);
+        },
+        updateTextId({ commit }, textId) {
+            commit("setTextId", textId);
+        },
 
-    // 순서
-    // updateSeqNum({ commit }) {
-    //   commit("setSeqNum", seqNum);
-    // },
-  },
+        // 문제
+        goToNextProblem({ commit }) {
+            commit("incrementProblemIndex");
+        },
+        goToPreviousProblem({ commit }) {
+            commit("decrementProblemIndex");
+        },
+        saveProblemData({ commit }, problemData) {
+            commit("saveOrUpdateProblem", problemData);
+        },
+        saveProblemAttempt({ commit }, answerData) {
+            commit('addOrUpdateProblemAttempt', answerData);
+        },
+
+        // 단어장
+        updateWdBookIdList({ commit }, wdBookIdList) {
+            commit("setWdBookIdList", wdBookIdList);
+        },
+        updateCurrentWdBkIndex({ commit }, currentWdBkIndex) {
+            commit("setCurrentWdBkIndex", currentWdBkIndex);
+        },
+
+        // 순서
+        // updateSeqNum({ commit }) {
+        //   commit("setSeqNum", seqNum);
+        // },
+    },
 });
client/views/pages/main/Chapter/Chapter3.vue
--- client/views/pages/main/Chapter/Chapter3.vue
+++ client/views/pages/main/Chapter/Chapter3.vue
@@ -1,323 +1,365 @@
 <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" style="justify-content: space-between">
-            <div>
-                <span class="title mr40">1. Hello WORLD</span>
-                <span class="subtitle">my name is dd</span>
-            </div>
-            <button class="completeBtn" @click="complete">학습 종료</button>
-        </div>
-        <div class="flex justify-between align-center">
-            <div class="pre-btn" @click="previousProblem()">
-                <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" style="justify-content: space-between">
-                    <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p>
-                </div>
-
-                <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>
-                                    <p class="text">sec</p>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <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"
-                            v-for="(item, index) in problemDetail" :key="index">
-                            <div class="flex" @click="handleClick(item.prblmDtlExpln)">
-                                <button>
-                                    <img src="../../../../resources/img/img136_71s.png" alt="" />
-                                    <p :class="{ active: selectedButton === item.prblmDtlExpln }">{{ index + 1 }}</p>
-                                </button>
-                                <p>{{ item.prblmDtlExpln }}</p>
-                            </div>
-                        </article>
-                    </div>
-                </div>
-                <button class="submit-button" @click="handleSubmit()"
-                    v-if="currentIndex === learningIdsLength - 1">제출하기</button>
-            </div>
-            <div class="next-btn" @click="nextProblem()">
-                <img src="../../../../resources/img/right.png" alt="" />
-            </div>
-        </div>
+      </router-link>
     </div>
+    <div class="title-box mb25 flex align-center mt40" style="justify-content: space-between">
+      <div>
+        <span class="title mr40">1. Hello WORLD</span>
+        <span class="subtitle">my name is dd</span>
+      </div>
+      <button class="completeBtn" @click="complete">학습 종료</button>
+    </div>
+    <div class="flex justify-between align-center">
+      <div class="pre-btn" @click="previousProblem()">
+        <img src="../../../../resources/img/left.png" alt="" :class="{ active: currentIndex === 0 }" />
+      </div>
+      <div class="content title-box">
+        ,,,
+        <p class="title mt25 title-bg">step3.</p>
+        <div class="flex align-center mb30" style="justify-content: space-between">
+          <p class="subtitle2 mr20">{{ currentProblemIndex + 1 }}. {{ dataList.prblmExpln }}</p>
+        </div>
+
+        <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>
+                  <p class="text">sec</p>
+                </div>
+              </div>
+            </div>
+          </div>
+          <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" v-for="(item, index) in problemDetail"
+              :key="index">
+              <div class="flex" @click="handleClick(item.prblmDtlExpln)">
+                <button>
+                  <img src="../../../../resources/img/img136_71s.png" alt="" />
+                  <p :class="{ active: selectedButton === item.prblmDtlExpln }">{{ index + 1 }}</p>
+                </button>
+                <p>{{ item.prblmDtlExpln }}</p>
+              </div>
+            </article>
+          </div>
+        </div>
+        <button class="submit-button" @click="handleSubmit()"
+          v-if="currentIndex === learningIdsLength - 1">제출하기</button>
+      </div>
+      <div class="next-btn" @click="nextProblem()">
+        <img src="../../../../resources/img/right.png" alt="" />
+      </div>
+    </div>
+  </div>
 </template>
 
 <script>
 
 import axios from "axios";
 export default {
-    data() {
-        return {
-            timer: "00",
-            selectedButton: null, // 선택한 버튼
-            prblm_id: [],
-            unit_id: null,
-            dataList: [],
-            problemDetail: [],
-            currentIndex: null,
-            learningIdsLength: null,
-        };
+  data() {
+    return {
+      timer: "00",
+      selectedButton: null, // 선택한 버튼
+      prblm_id: [],
+      unit_id: null,
+      dataList: [],
+      problemDetail: [],
+      currentIndex: null,
+      learningIdsLength: null,
+    };
+  },
+  methods: {
+    complete() {
+      const { unit_id, book_id } = this.$route.query;
+      this.$router.push({ name: 'Dashboard', query: { value: 8, unit_id, book_id } });
     },
-    methods: {
-        complete() {
-            const { unit_id, book_id } = this.$route.query;
-            this.$router.push({ name: 'Dashboard', query: { value: 8, unit_id, book_id } });
-        },
-        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);
-        },
-        handleClick(answer) {
-            console.log(answer)
-            this.selectedButton = answer;
-        },
-        // 제출하기 버튼
-        handleSubmit() {
-            console.log("선택된 번호 : ", this.selectedButton);
-        },
-        getProblem() {
-            const vm = this;
-            const prblmId = this.currentLearningId.prblm_id;
-            axios({
-                url: "problem/problemInfo.json",
-                method: "post",
-                headers: {
-                    "Content-Type": "application/json; charset=UTF-8",
-                },
-                data: {
-                    prblmId: 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);
-                });
-        },
-        nextProblem() {
-            const problemData = {
-                prblmImfo: this.currentLearningId,
-                prblmNumber: this.currentProblemIndex,
-                prblmAns: this.selectedButton
-            }
-            this.$store.dispatch('saveProblemData', problemData);
-            console.log(this.$store.getters.getAllProblems)
-            if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
-                this.$store.dispatch('goToNextProblem');
-                this.handleProblemDetail(this.currentLearningId);
-                this.goToPage(this.problemType);
-            } else {
-                // 마지막 문제면 이동
-                this.goToPage("Chapter4")
-            }
-        },
-        previousProblem() {
-            if (this.currentProblemIndex > 0) {
-                this.$store.dispatch('goToPreviousProblem');
-                this.handleProblemDetail(this.currentLearningId);
-                this.goToPage(this.problemType);
-            }
-        },
-
-        handleProblemDetail(item) {
-            if (item.prblm_type_id === "prblm_type_001") {
-                this.problemType = "Chapter3";
-            } else if (item.prblm_type_id === "prblm_type_002") {
-                this.problemType = "Chapter3_1";
-            } else if (item.prblm_type_id === "prblm_type_003") {
-                this.problemType = "Chapter3_2";
-            } else if (item.prblm_type_id === "prblm_type_004") {
-                this.problemType = "Chapter3_3";
-            } else if (item.prblm_type_id === "prblm_type_005") {
-                this.problemType = "Chapter3_3_1";
-            } else if (item.prblm_type_id === "prblm_type_006") {
-                this.problemType = "Chapter3_4";
-            } else if (item.prblm_type_id === "prblm_type_007") {
-                this.problemType = "Chapter3_5";
-            } else if (item.prblm_type_id === "prblm_type_008") {
-                this.problemType = "Chapter3_6";
-            } else if (item.prblm_type_id === "prblm_type_009") {
-                this.problemType = "Chapter3_7";
-            } else if (item.prblm_type_id === "prblm_type_010") {
-                this.problemType = "Chapter3_8";
-            } else if (item.prblm_type_id === "prblm_type_011") {
-                this.problemType = "Chapter3_9";
-            } else if (item.prblm_type_id === "prblm_type_012") {
-                this.problemType = "Chapter3_10";
-            } else if (item.prblm_type_id === "prblm_type_013") {
-                this.problemType = "Chapter3_11";
-            } else if (item.prblm_type_id === "prblm_type_014") {
-                this.problemType = "Chapter3_12";
-            } else if (item.prblm_type_id === "prblm_type_015") {
-                this.problemType = "Chapter3_13";
-            } else if (item.prblm_type_id === "prblm_type_016") {
-                this.problemType = "Chapter3_14";
-            } else if (item.prblm_type_id === "prblm_type_017") {
-                this.problemType = "Chapter3_15";
-            } else if (item.prblm_type_id === "prblm_type_018") {
-                this.problemType = "Chapter2_8";
-            } else if (item.prblm_type_id === "prblm_type_019") {
-                this.problemType = "Chapter2_7";
-            } else if (item.prblm_type_id === "prblm_type_020") {
-                this.problemType = "Chapter2_5";
-            } else if (item.prblm_type_id === "prblm_type_021") {
-                this.problemType = "Chapter2_6";
-            } else if (item.prblm_type_id === "prblm_type_022") {
-                this.problemType = "Chapter2_10";
-            } else if (item.prblm_type_id === "prblm_type_023") {
-                this.problemType = "Chapter2_11";
-            } else if (item.prblm_type_id === "prblm_type_024") {
-                this.problemType = "Chapter2_13";
-            }
-        },
+    goToPage(page) {
+      this.$router.push({ name: page });
     },
-    watch: {},
-    computed: {
-        currentLearningId() {
-            return this.$store.getters.currentLearningId;
-        },
-        currentLabel() {
-            return this.$store.getters.currentLabel;
-        },
-        currentProblemIndex() {
-            return this.$store.getters.currentProblemIndex;
-        },
-        isPreviousButtonDisabled() {
-            return this.currentProblemIndex === 0;
-        },
-        getAllProblems() {
-            return this.$store.getters.getAllProblems;
-        },
-        getStdId() {
-            return this.$store.getters.getStdId;
+    startTimer() {
+      if (this.intervalId) {
+        clearInterval(this.intervalId);
+      }
+      this.timer = 5;
+      this.intervalId = setInterval(() => {
+        if (this.timer > 0) {
+          this.timer--;
+        } else {
+          clearInterval(this.intervalId);
         }
+      }, 1000);
     },
-    created() {
-        console.log('Current Learning ID:', this.currentLearningId);
-        console.log('Current Label:', this.currentLabel);
-        console.log('Current Problem Index:', this.currentProblemIndex);
+    handleClick(answer) {
+      console.log(answer)
+      this.selectedButton = answer;
+    },
+    // 제출하기 버튼
+    handleSubmit() {
+      const problemData = {
+        prblmInfo: this.currentLearningId,
+        prblmNumber: this.currentProblemIndex,
+        prblmAns: this.selectedButton
+      }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
+      this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
+      console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
 
-        // Fetch or process the current problem based on `currentLearningId`
+      axios({
+        url: "problemLog/insertProblemLog.json",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json; charset=UTF-8",
+        },
+        data: this.$store.getters.getAllAnswers,
+      }).then(function (res) {
+        console.log("problem - response : ", res.data);
+      })
+        .catch(function (error) {
+          console.log("problem - error : ", error);
+        });
+
     },
-    components: {},
-    mounted() {
-        this.getProblem()
+    getProblem() {
+      const vm = this;
+      const prblmId = this.currentLearningId.prblm_id;
+      axios({
+        url: "problem/problemInfo.json",
+        method: "post",
+        headers: {
+          "Content-Type": "application/json; charset=UTF-8",
+        },
+        data: {
+          prblmId: 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);
+        });
     },
+    nextProblem() {
+      const problemData = {
+        prblmInfo: this.currentLearningId,
+        prblmNumber: this.currentProblemIndex,
+        prblmAns: this.selectedButton
+      }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
+      this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
+      console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
+      if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
+        this.$store.dispatch('goToNextProblem');
+        this.handleProblemDetail(this.currentLearningId);
+        this.goToPage(this.problemType);
+      }
+    },
+    previousProblem() {
+      if (this.currentProblemIndex > 0) {
+        this.$store.dispatch('goToPreviousProblem');
+        this.handleProblemDetail(this.currentLearningId);
+        this.goToPage(this.problemType);
+      }
+    },
+
+    handleProblemDetail(item) {
+      if (item.prblm_type_id === "prblm_type_001") {
+        this.problemType = "Chapter3";
+      } else if (item.prblm_type_id === "prblm_type_002") {
+        this.problemType = "Chapter3_1";
+      } else if (item.prblm_type_id === "prblm_type_003") {
+        this.problemType = "Chapter3_2";
+      } else if (item.prblm_type_id === "prblm_type_004") {
+        this.problemType = "Chapter3_3";
+      } else if (item.prblm_type_id === "prblm_type_005") {
+        this.problemType = "Chapter3_3_1";
+      } else if (item.prblm_type_id === "prblm_type_006") {
+        this.problemType = "Chapter3_4";
+      } else if (item.prblm_type_id === "prblm_type_007") {
+        this.problemType = "Chapter3_5";
+      } else if (item.prblm_type_id === "prblm_type_008") {
+        this.problemType = "Chapter3_6";
+      } else if (item.prblm_type_id === "prblm_type_009") {
+        this.problemType = "Chapter3_7";
+      } else if (item.prblm_type_id === "prblm_type_010") {
+        this.problemType = "Chapter3_8";
+      } else if (item.prblm_type_id === "prblm_type_011") {
+        this.problemType = "Chapter3_9";
+      } else if (item.prblm_type_id === "prblm_type_012") {
+        this.problemType = "Chapter3_10";
+      } else if (item.prblm_type_id === "prblm_type_013") {
+        this.problemType = "Chapter3_11";
+      } else if (item.prblm_type_id === "prblm_type_014") {
+        this.problemType = "Chapter3_12";
+      } else if (item.prblm_type_id === "prblm_type_015") {
+        this.problemType = "Chapter3_13";
+      } else if (item.prblm_type_id === "prblm_type_016") {
+        this.problemType = "Chapter3_14";
+      } else if (item.prblm_type_id === "prblm_type_017") {
+        this.problemType = "Chapter3_15";
+      } else if (item.prblm_type_id === "prblm_type_018") {
+        this.problemType = "Chapter2_8";
+      } else if (item.prblm_type_id === "prblm_type_019") {
+        this.problemType = "Chapter2_7";
+      } else if (item.prblm_type_id === "prblm_type_020") {
+        this.problemType = "Chapter2_5";
+      } else if (item.prblm_type_id === "prblm_type_021") {
+        this.problemType = "Chapter2_6";
+      } else if (item.prblm_type_id === "prblm_type_022") {
+        this.problemType = "Chapter2_10";
+      } else if (item.prblm_type_id === "prblm_type_023") {
+        this.problemType = "Chapter2_11";
+      } else if (item.prblm_type_id === "prblm_type_024") {
+        this.problemType = "Chapter2_13";
+      }
+    },
+  },
+  watch: {},
+  computed: {
+    currentLearningId() {
+      return this.$store.getters.currentLearningId;
+    },
+    currentLabel() {
+      return this.$store.getters.currentLabel;
+    },
+    currentProblemIndex() {
+      return this.$store.getters.currentProblemIndex;
+    },
+    isPreviousButtonDisabled() {
+      return this.currentProblemIndex === 0;
+    },
+    getAllProblems() {
+      return this.$store.getters.getAllProblems;
+    },
+    getStdId() {
+      return this.$store.getters.getStdId;
+    }
+  },
+  created() {
+    console.log('Current Learning ID:', this.currentLearningId);
+    console.log('Current Label:', this.currentLabel);
+    console.log('Current Problem Index:', this.currentProblemIndex);
+
+    // Fetch or process the current problem based on `currentLearningId`
+  },
+  components: {},
+  mounted() {
+    this.getProblem()
+  },
 };
 </script>
 <style scoped>
 .imgGroup {
-    width: fit-content;
+  width: fit-content;
 }
 
 .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 {
-    display: flex;
-    flex-direction: column;
-    align-items: flex-start;
+  display: flex;
+  flex-direction: column;
+  align-items: flex-start;
 }
 
 .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 article img {
-    object-fit: contain;
-    width: -webkit-fill-available;
+  object-fit: contain;
+  width: -webkit-fill-available;
 }
 
 .pickGroup article>div>p {
-    font-size: 64px;
+  font-size: 64px;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
 }
 
 .pickGroup button p.active {
-    color: #000;
-    /* 선택된 버튼의 숫자 색을 더 진하게 */
+  color: #000;
+  /* 선택된 버튼의 숫자 색을 더 진하게 */
 }
 
 .completeBtn {
-    margin-right: 100px;
-    background-color: #ffba08;
-    padding: 10px 30px;
-    border-radius: 10px;
-    font-size: 28px;
-    font-family: "ONEMobilePOPOTF";
+  margin-right: 100px;
+  background-color: #ffba08;
+  padding: 10px 30px;
+  border-radius: 10px;
+  font-size: 28px;
+  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;
+  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
@@ -10,7 +10,8 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" /></div>
+      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt=""
+          :class="{ active: currentIndex === 0 }" /></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
         <div class="flex align-center mb30">
@@ -94,7 +95,48 @@
     },
     // 제출하기 버튼
     handleSubmit() {
-      console.log("선택된 번호 : ", this.selectedButton);
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
 
 
@@ -122,19 +164,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -264,6 +311,14 @@
   transform: translate(-50%, -50%);
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .submit-button {
   position: absolute;
   background-color: #ffba08;
client/views/pages/main/Chapter/Chapter3_10.vue
--- client/views/pages/main/Chapter/Chapter3_10.vue
+++ client/views/pages/main/Chapter/Chapter3_10.vue
@@ -10,7 +10,8 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" /></div>
+      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt=""
+          :class="{ active: currentIndex === 0 }" /></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
         <div class="flex align-center mb30">
@@ -87,8 +88,48 @@
       console.log("playing");
     },
     handleSubmit() {
-      console.log("정답 : ", this.answer);
-      this.answer = null;
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     getProblem() {
       const vm = this;
@@ -114,19 +155,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -243,6 +289,14 @@
   font-size: 48px;
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .submit-button {
   position: absolute;
   background-color: #ffba08;
client/views/pages/main/Chapter/Chapter3_11.vue
--- client/views/pages/main/Chapter/Chapter3_11.vue
+++ client/views/pages/main/Chapter/Chapter3_11.vue
@@ -10,7 +10,8 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" />
+      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt=""
+          :class="{ active: currentIndex === 0 }" />
       </div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
@@ -84,10 +85,48 @@
       }, 1000);
     },
     handleSubmit() {
-      let answer = this.answer1 + this.text + this.answer2;
-      console.log("정답 : ", answer);
-      this.answer1 = null;
-      this.answer2 = null;
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     getProblem() {
       const vm = this;
@@ -113,19 +152,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -242,6 +286,14 @@
   font-size: 48px;
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .submit-button {
   position: absolute;
   background-color: #ffba08;
client/views/pages/main/Chapter/Chapter3_12.vue
--- client/views/pages/main/Chapter/Chapter3_12.vue
+++ client/views/pages/main/Chapter/Chapter3_12.vue
@@ -10,7 +10,8 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" />
+      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt=""
+          :class="{ active: currentIndex === 0 }" />
       </div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3</p>
@@ -119,9 +120,48 @@
       }
     },
     handleSubmit() {
-      // 정답을 체크하거나 제출 시 로직 처리
-      let answer = this.userAnswer.join(" ");
-      console.log("정답 : ", answer);
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     getProblem() {
       const vm = this;
@@ -147,19 +187,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -303,6 +348,14 @@
   font-family: "ONEMobilePOPOTF";
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .submit-button {
   position: absolute;
   background-color: #ffba08;
client/views/pages/main/Chapter/Chapter3_13.vue
--- client/views/pages/main/Chapter/Chapter3_13.vue
+++ client/views/pages/main/Chapter/Chapter3_13.vue
@@ -10,7 +10,8 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" />
+      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt=""
+          :class="{ active: currentIndex === 0 }" />
       </div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3</p>
@@ -149,8 +150,48 @@
       };
     },
     handleSubmit() {
-      // 매칭된 결과를 확인하거나 제출 시 로직 처리
-      console.log("Matched pairs: ", this.pairs);
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     updateSVGSize() {
       const container = document.querySelector(".position-relative");
@@ -183,19 +224,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -345,6 +391,14 @@
   pointer-events: none;
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .blue-c {
   width: 20px;
   height: 20px;
client/views/pages/main/Chapter/Chapter3_14.vue
--- client/views/pages/main/Chapter/Chapter3_14.vue
+++ client/views/pages/main/Chapter/Chapter3_14.vue
@@ -10,7 +10,8 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" />
+      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt=""
+          :class="{ active: currentIndex === 0 }" />
       </div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3</p>
@@ -43,7 +44,8 @@
         <button class="submit-button" @click="handleSubmit()"
           v-if="currentIndex === learningIdsLength - 1">제출하기</button>
       </div>
-      <div class="next-btn" @click="nextProblem(answer)"><img src="../../../../resources/img/right.png" alt="" />
+      <div class="next-btn" @click="nextProblem(answer)"><img src="../../../../resources/img/right.png" alt=""
+          :class="{ active: currentIndex === learningIdsLength - 1 }" />
       </div>
     </div>
   </div>
@@ -60,6 +62,7 @@
       problemDetail: [],
       currentIndex: null,
       learningIdsLength: null,
+      stdId: null,
     };
   },
   methods: {
@@ -79,6 +82,51 @@
         }
       }, 1000);
     },
+    handleSubmit() {
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
+    },
+
     getProblem() {
       const vm = this;
       const prblmId = this.currentLearningId.prblm_id;
@@ -103,19 +151,24 @@
     },
     nextProblem(answer) {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: answer
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: answer,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -189,6 +242,9 @@
     currentProblemIndex() {
       return this.$store.getters.currentProblemIndex;
     },
+    getAllAnswers() {
+      return this.$store.getters.getAllAnswers;
+    },
     isPreviousButtonDisabled() {
       return this.currentProblemIndex === 0;
     }
@@ -231,6 +287,14 @@
   font-size: 48px;
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .submit-button {
   position: absolute;
   background-color: #ffba08;
client/views/pages/main/Chapter/Chapter3_15.vue
--- client/views/pages/main/Chapter/Chapter3_15.vue
+++ client/views/pages/main/Chapter/Chapter3_15.vue
@@ -10,7 +10,8 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" />
+      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt=""
+          :class="{ active: currentIndex === 0 }" />
       </div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3</p>
@@ -75,6 +76,51 @@
         }
       }, 1000);
     },
+
+    handleSubmit() {
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
+    },
     getProblem() {
       const vm = this;
       const prblmId = this.currentLearningId.prblm_id;
@@ -99,19 +145,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -227,6 +278,14 @@
   font-size: 48px;
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .submit-button {
   position: absolute;
   background-color: #ffba08;
client/views/pages/main/Chapter/Chapter3_2.vue
--- client/views/pages/main/Chapter/Chapter3_2.vue
+++ client/views/pages/main/Chapter/Chapter3_2.vue
@@ -11,7 +11,7 @@
     </div>
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="previousProblem()">
-        <img src="../../../../resources/img/left.png" alt="" />
+        <img src="../../../../resources/img/left.png" alt="" :class="{ active: currentIndex === 0 }" />
       </div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
@@ -103,7 +103,48 @@
     },
     // 제출하기 버튼
     handleSubmit() {
-      console.log("선택된 번호 : ", this.selectedButton);
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     getProblem() {
       const vm = this;
@@ -129,19 +170,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -278,6 +324,14 @@
   transform: translate(-50%, -50%);
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .pickGroup button p.active {
   color: #000;
   /* 선택된 버튼의 숫자 색을 더 진하게 */
client/views/pages/main/Chapter/Chapter3_3.vue
--- client/views/pages/main/Chapter/Chapter3_3.vue
+++ client/views/pages/main/Chapter/Chapter3_3.vue
@@ -10,7 +10,8 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" /></div>
+      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt=""
+          :class="{ active: currentIndex === 0 }" /></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
         <div class="flex align-center mb30">
@@ -46,7 +47,8 @@
         <button class="submit-button" @click="handleSubmit()"
           v-if="currentIndex === learningIdsLength - 1">제출하기</button>
       </div>
-      <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt="" />
+      <div class="next-btn" @click="nextProblem()"><img src="../../../../resources/img/right.png" alt=""
+          :class="{ active: currentIndex === learningIdsLength - 1 }" />
       </div>
     </div>
   </div>
@@ -92,7 +94,48 @@
     },
     // 제출하기 버튼
     handleSubmit() {
-      console.log("선택된 번호 : ", this.selectedButton);
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage("Chapter4")
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     getProblem() {
       const vm = this;
@@ -118,19 +161,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -215,6 +263,7 @@
     this.currentIndex = this.currentProblemIndex;
     this.learningIdsLength = this.$store.state.currentLearningIds.length;
 
+
     // Fetch or process the current problem based on `currentLearningId`
   },
   components: {},
@@ -267,6 +316,14 @@
   transform: translate(-50%, -50%);
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.next-btn img.active {
+  visibility: hidden;
+}
+
 .pickGroup button p.active {
   color: #000;
   /* 선택된 버튼의 숫자 색을 더 진하게 */
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
@@ -10,7 +10,8 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" /></div>
+      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt=""
+          :class="{ active: currentIndex === 0 }" /></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
         <div class="flex align-center mb30">
@@ -109,7 +110,48 @@
     },
     // 제출하기 버튼
     handleSubmit() {
-      console.log("선택된 번호 : ", this.selectedButton);
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     getProblem() {
       const vm = this;
@@ -135,19 +177,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -284,6 +331,14 @@
   transform: translate(-50%, -50%);
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .pickGroup button p.active {
   color: #000;
   /* 선택된 버튼의 숫자 색을 더 진하게 */
client/views/pages/main/Chapter/Chapter3_4.vue
--- client/views/pages/main/Chapter/Chapter3_4.vue
+++ client/views/pages/main/Chapter/Chapter3_4.vue
@@ -13,7 +13,7 @@
     </div>
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="previousProblem()">
-        <img src="../../../../resources/img/left.png" alt="" />
+        <img src="../../../../resources/img/left.png" alt="" :class="{ active: currentIndex === 0 }" />
       </div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
@@ -107,7 +107,48 @@
       this.selectedButton = number;
     },
     handleSubmit() {
-      console.log("정답 : ", this.answer);
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     getProblem() {
       const vm = this;
@@ -133,19 +174,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -282,6 +328,14 @@
   transform: translate(-50%, -50%);
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .pickGroup button p.active {
   color: #000000;
 }
client/views/pages/main/Chapter/Chapter3_5.vue
--- client/views/pages/main/Chapter/Chapter3_5.vue
+++ client/views/pages/main/Chapter/Chapter3_5.vue
@@ -10,7 +10,8 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" /></div>
+      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt=""
+          :class="{ active: currentIndex === 0 }" /></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
         <div class="flex align-center mb30">
@@ -108,7 +109,48 @@
     },
     // 제출하기 버튼
     handleSubmit() {
-      console.log("선택된 번호 : ", this.selectedButton);
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     getProblem() {
       const vm = this;
@@ -134,19 +176,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -283,6 +330,14 @@
   transform: translate(-50%, -50%);
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .pickGroup button p.active {
   color: #000000;
 }
client/views/pages/main/Chapter/Chapter3_6.vue
--- client/views/pages/main/Chapter/Chapter3_6.vue
+++ client/views/pages/main/Chapter/Chapter3_6.vue
@@ -10,7 +10,8 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" /></div>
+      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt=""
+          :class="{ active: currentIndex === 0 }" /></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
         <div class="flex align-center mb30">
@@ -116,7 +117,48 @@
       this.selectedButton = number;
     },
     handleSubmit() {
-      console.log("정답 : ", this.selectedIndex + 1);
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     playAudio() {
       const audio = document.getElementById("audio-player");
@@ -147,19 +189,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -279,6 +326,14 @@
   transform: translate(-50%, -50%);
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .pickGroup button p.active {
   color: #000000;
 }
client/views/pages/main/Chapter/Chapter3_7.vue
--- client/views/pages/main/Chapter/Chapter3_7.vue
+++ client/views/pages/main/Chapter/Chapter3_7.vue
@@ -13,7 +13,7 @@
     </div>
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="previousProblem()">
-        <img src="../../../../resources/img/left.png" alt="" />
+        <img src="../../../../resources/img/left.png" alt="" :class="{ active: currentIndex === 0 }" />
       </div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
@@ -112,7 +112,48 @@
       console.log(this.selectedButton);
     },
     handleSubmit() {
-      console.log("정답 : ", this.selectedButton);
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     getProblem() {
       const vm = this;
@@ -138,19 +179,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -291,6 +337,14 @@
   transform: translate(-50%, -50%);
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .pickGroup button p.active {
   color: #000000;
 }
client/views/pages/main/Chapter/Chapter3_8.vue
--- client/views/pages/main/Chapter/Chapter3_8.vue
+++ client/views/pages/main/Chapter/Chapter3_8.vue
@@ -10,7 +10,8 @@
       <span class="subtitle">my name is dd</span>
     </div>
     <div class="flex justify-between align-center">
-      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt="" /></div>
+      <div class="pre-btn" @click="previousProblem()"><img src="../../../../resources/img/left.png" alt=""
+          :class="{ active: currentIndex === 0 }" /></div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
         <div class="flex align-center mb30">
@@ -117,8 +118,48 @@
       }, 1000);
     },
     handleSubmit() {
-      console.log("정답 : ", this.answer);
-      this.answer = null;
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     getProblem() {
       const vm = this;
@@ -144,19 +185,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -274,6 +320,14 @@
   gap: 20px;
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .submit-button {
   position: absolute;
   background-color: #ffba08;
client/views/pages/main/Chapter/Chapter3_9.vue
--- client/views/pages/main/Chapter/Chapter3_9.vue
+++ client/views/pages/main/Chapter/Chapter3_9.vue
@@ -13,7 +13,7 @@
     </div>
     <div class="flex justify-between align-center">
       <div class="pre-btn" @click="previousProblem()">
-        <img src="../../../../resources/img/left.png" alt="" />
+        <img src="../../../../resources/img/left.png" alt="" :class="{ active: currentIndex === 0 }" />
       </div>
       <div class="content title-box">
         <p class="title mt25 title-bg">step3.</p>
@@ -119,8 +119,49 @@
         }
       }, 1000);
     },
-    submitAnswer() {
-      console.log(this.answer);
+    handleSubmit() {
+
+      const userConfirmed = window.confirm("제출 하시겠습니까?");
+      if (userConfirmed) {
+
+        const problemData = {
+          prblmInfo: this.currentLearningId,
+          prblmNumber: this.currentProblemIndex,
+          prblmAns: this.selectedButton
+        };
+
+        const answerData = {
+          prblmId: this.currentLearningId.prblm_id,
+          prblmAns: this.selectedButton,
+          stdId: this.$store.getters.getStdId,
+          prblmLogAnsCnt: 1
+        };
+
+        this.$store.dispatch('saveProblemData', problemData);
+        this.$store.dispatch('saveProblemAttempt', answerData);
+
+        console.log(this.$store.getters.getAllProblems);
+        console.log(this.$store.getters.getAllAnswers);
+
+
+        axios({
+          url: "problemLog/insertProblemLog.json",
+          method: "post",
+          headers: {
+            "Content-Type": "application/json; charset=UTF-8",
+          },
+          data: this.$store.getters.getAllAnswers,
+        })
+          .then(function (res) {
+            console.log("problem - response : ", res.data);
+            this.goToPage('Chapter4')
+          })
+          .catch(function (error) {
+            console.log("problem - error : ", error);
+          });
+      } else {
+        console.log("Submission canceled by the user.");
+      }
     },
     getProblem() {
       const vm = this;
@@ -146,19 +187,24 @@
     },
     nextProblem() {
       const problemData = {
-        prblmImfo: this.currentLearningId,
+        prblmInfo: this.currentLearningId,
         prblmNumber: this.currentProblemIndex,
         prblmAns: this.selectedButton
       }
+      const answerData = {
+        prblmId: this.currentLearningId.prblm_id,
+        prblmAns: this.selectedButton,
+        stdId: this.$store.getters.getStdId,
+        prblmLogAnsCnt: 1
+      }
       this.$store.dispatch('saveProblemData', problemData);
+      this.$store.dispatch('saveProblemAttempt', answerData);
       console.log(this.$store.getters.getAllProblems)
+      console.log(this.$store.getters.getAllAnswers)
       if (this.currentProblemIndex < this.$store.state.currentLearningIds.length - 1) {
         this.$store.dispatch('goToNextProblem');
         this.handleProblemDetail(this.currentLearningId);
         this.goToPage(this.problemType);
-      } else {
-        // 마지막 문제면 이동
-        this.goToPage("Chapter4")
       }
     },
     previousProblem() {
@@ -275,6 +321,14 @@
   font-size: 48px;
 }
 
+.pre-btn img.active {
+  visibility: hidden;
+}
+
+.pre-btn img.active {
+  visibility: hidden;
+}
+
 .submit-button {
   position: absolute;
   background-color: #ffba08;
Add a comment
List