jichoi / lms_front star
박민혁 박민혁 08-20
240820 박민혁 단어장 수정
@8ea9b8ed6af69e4d2c4bb4d4b73d9b3d5dd2aaff
client/views/pages/teacher/TextBookDetail.vue
--- client/views/pages/teacher/TextBookDetail.vue
+++ client/views/pages/teacher/TextBookDetail.vue
@@ -136,7 +136,7 @@
             <button type="button" title="" class="new-btn" @click="goToPage('RoadMap')">
                 로드맵
             </button>
-            <button type="button" title="" class="new-btn" @click="showConfirm('delete')">
+            <button type="button" title="" class="new-btn" @click="deleteUnit()">
                 삭제
             </button>
         </div>
@@ -431,7 +431,35 @@
                 });
         },
 
+        // 단원 삭제
+        deleteUnit(){
+            const result = confirm('해당 단원을 삭제 하시겠습니까?')
+            if (result) {
+            } else {
+                alert("삭제를 취소했습니다")
+                return;
+            }
 
+            axios({
+                url: "/unit/deleteUnit.json",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json; charset=UTF-8",
+                },
+                data: {
+                    "unitId": this.selectedUnitId
+                },
+            })
+                .then(response => {
+                    alert("삭제가 완료됐습니다");
+                    this.fetchBookDetails();
+                    this.findUnit();
+                })
+                .catch(error => {
+                    console.error("fetchData - error: ", error);
+                    alert("삭제 중 오류가 발생했습니다.");
+                });
+        }
     },
     mounted() {
         console.log('Mounted with book_id:', this.$route.query.book_id);
client/views/pages/teacher/VocaDetail.vue
--- client/views/pages/teacher/VocaDetail.vue
+++ client/views/pages/teacher/VocaDetail.vue
@@ -55,6 +55,10 @@
                     <div v-for="(word, index) in words" :key="index" class="flex align-center" style="gap: 10px;">
                         <input v-model="word.eng" type="text" class="data-wrap" placeholder="영어">
                         <input v-model="word.kor" type="text" class="data-wrap" placeholder="한글">
+                        <div v-for="(data, index2) in word.file" :key="index2">
+                            <input v-model="data.fileNm" type="text" disabled>
+
+                        </div>
                         <button type="button" @click="removeWord(index)">
                             <img src="../../../resources/img/btn38_120t_normal.png" alt="">
                         </button>
@@ -87,6 +91,9 @@
                 목록
             </button>
             <div class="flex">
+                <button type="button" title="삭제" class="new-btn mr10" @click="deleteVoca">
+                    삭제
+                </button>
                 <button type="button" title="취소" class="new-btn mr10" @click="cancelAction">
                     취소
                 </button>
@@ -125,6 +132,8 @@
 
             wordbooks: [],
             selectedWdBookId: null,
+
+            selectedfiles: [],
         }
     },
     methods: {
@@ -154,10 +163,21 @@
         },
         // 
 
-        addWord() { // 단어 추가
+        async addWord() { // 단어 추가
             if (this.newWord.eng && this.newWord.kor) {
-                const newWordWithFile = { ...this.newWord }; // 새 단어 객체
-                this.words.push(newWordWithFile);
+                const newWordWithFile = {
+                    ...this.newWord,
+                    file: [] // 파일 정보 저장을 위한 배열 추가
+                };
+                
+                // 파일 매니지 ID가 있을 경우 파일 정보를 추가
+                if (newWordWithFile.fileMngId) {
+                    const fileInfo = await this.findFile(newWordWithFile.fileMngId);
+                    newWordWithFile.file = fileInfo; // 파일 정보 추가
+                }
+
+                this.words.push(newWordWithFile); // 단어 추가
+
                 // 초기화
                 this.newWord.eng = '';
                 this.newWord.kor = '';
@@ -177,6 +197,28 @@
 
         cancelAction() {
             this.$router.go(-1);
+        },
+
+        // 업로드한 파일 정보 가져오기
+        async findFile(fileMngId) {
+            const vm = this;
+            try {
+                const response = await axios({
+                    url: "/file/find.json",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json; charset=UTF-8",
+                    },
+                    data: {
+                        file_mng_id: fileMngId,
+                    },
+                });
+                console.log("fileInfo - response : ", response.data.list);
+                return response.data.list; // 파일 정보를 반환
+            } catch (error) {
+                console.log("result - error : ", error);
+                return []; // 오류 발생 시 빈 배열 반환
+            }
         },
 
 
@@ -259,14 +301,23 @@
                     wdBookId: vm.selectedWdBookId,
                 },
             })
-                .then(function (response) {
+                .then(async function (response) {
                     console.log("dataList - response: ", response.data);
                     vm.words = response.data.map(word => ({
                         eng: word.wdNm,
                         kor: word.wdMnng,
-                        fileMngId: word.fileMngId // 필요시 fileMngId도 포함
+                        fileMngId: word.fileMngId, // 필요시 fileMngId도 포함
+                        file: [] // 파일 정보를 저장할 배열 초기화
                     }));
 
+                    // 각 단어에 대해 파일 정보를 조회
+                    for (const word of vm.words) {
+                        if (word.fileMngId) {
+                            word.file = await vm.findFile(word.fileMngId); // 파일 정보를 단어에 추가
+                        }
+                    }
+
+                    console.log(vm.words);
                 })
                 .catch(function (error) {
                     console.log("dataList - error: ", error);
@@ -401,6 +452,36 @@
             }
         },
 
+        // 단어장 삭제
+        deleteVoca() {
+            const result = confirm('해당 단어장을 삭제 하시겠습니까?')
+            if (result) {
+            } else {
+                alert("삭제를 취소했습니다")
+                return;
+            }
+
+            axios({
+                url: "/wordbook/delete.json",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json; charset=UTF-8",
+                },
+                data: {
+                    "wdBookId": this.selectedWdBookId
+                },
+            })
+                .then(response => {
+                    alert("삭제가 완료됐습니다");
+                    this.goToPage('VocaList');
+                })
+                .catch(error => {
+                    console.error("fetchData - error: ", error);
+                    alert("삭제 중 오류가 발생했습니다.");
+                });
+        },
+
+
         // 단어장 정보 가져오기
         wordBookFind() {
             const vm = this;
client/views/pages/teacher/VocaInsert.vue
--- client/views/pages/teacher/VocaInsert.vue
+++ client/views/pages/teacher/VocaInsert.vue
@@ -49,15 +49,15 @@
                         <img src="../../../resources/img/btn39_120t_normal.png" alt="">
                     </button>
                 </div>
-
                 <!-- 여기에 단어장에 소속될 단어들 태그 형태 리스트 -->
                 <div v-for="(word, index) in words" :key="index" class="word-item flex align-center" style="gap: 10px;">
                     <span>{{ word.eng }} / {{ word.kor }}</span>
+                    <div v-for="(data, index2) in word.file" :key="index2">
+                        / {{ data.fileNm }}
+                    </div>
                     <button type="button" @click="removeWord(index)">삭제</button>
                 </div>
-
             </div>
-
         </div>
     </div>
     <div class="flex justify-between mt50">
@@ -215,10 +215,22 @@
                 });
         },
 
-        addWord() { // 단어 추가
+
+        async addWord() { // 단어 추가
             if (this.newWord.eng && this.newWord.kor) {
-                const newWordWithFile = { ...this.newWord }; // 새 단어 객체
-                this.words.push(newWordWithFile);
+                const newWordWithFile = {
+                    ...this.newWord,
+                    file: [] // 파일 정보 저장을 위한 배열 추가
+                };
+                
+                // 파일 매니지 ID가 있을 경우 파일 정보를 추가
+                if (newWordWithFile.fileMngId) {
+                    const fileInfo = await this.findFile(newWordWithFile.fileMngId);
+                    newWordWithFile.file = fileInfo; // 파일 정보 추가
+                }
+
+                this.words.push(newWordWithFile); // 단어 추가
+
                 // 초기화
                 this.newWord.eng = '';
                 this.newWord.kor = '';
@@ -227,7 +239,6 @@
                 console.log("단어 입력이 비어 있음");
             }
         },
-
         removeWord(index) { // 단어 삭제
             this.words.splice(index, 1);
         },
@@ -276,7 +287,27 @@
                 throw new Error("파일 업로드에 실패했습니다.");
             }
         },
-
+        // 업로드한 파일 정보 가져오기
+        async findFile(fileMngId) {
+            const vm = this;
+            try {
+                const response = await axios({
+                    url: "/file/find.json",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json; charset=UTF-8",
+                    },
+                    data: {
+                        file_mng_id: fileMngId,
+                    },
+                });
+                console.log("fileInfo - response : ", response.data.list);
+                return response.data.list; // 파일 정보를 반환
+            } catch (error) {
+                console.log("result - error : ", error);
+                return []; // 오류 발생 시 빈 배열 반환
+            }
+        },
 
         async registerWordBook() {
             const vm = this;
Add a comment
List