yjryu / KERIS star
kimgkdud898 2023-11-09
Merge branch 'front-end' of http://210.180.118.83/yjryu/KERIS into front-end
@9c2749d7e128e92cc0a3e262c85c6152f3080bb0
client/views/pages/AppRouter.js
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
@@ -28,6 +28,7 @@
 import AdminNoticeSelectList from "../pages/admin/notice/NoticeSelectList.vue";
 import AdminNoticeSelectOne from "../pages/admin/notice/NoticeSelectOne.vue";
 import AdminNoticeInsert from "../pages/admin/notice/NoticeInsert.vue";
+import AdminNoticeUpdate from "../pages/admin/notice/noticeUpdate.vue";
 import AdminNewsSelectList from "../pages/admin/news/NewsSelectList.vue";
 import AdminNewsSelectOne from "../pages/admin/news/NewsSelectOne.vue";
 import AdminNewsInsert from "../pages/admin/news/NewsInsert.vue";
@@ -74,6 +75,7 @@
   { path: "/adm/noticeSelectList.page", name: "AdminNoticeSelectList", component: AdminNoticeSelectList },
   { path: "/adm/noticeSelectOne.page", name: "AdminNoticeSelectOne", component: AdminNoticeSelectOne },
   { path: "/adm/noticeInsert.page", name: "AdminNoticeInsert", component: AdminNoticeInsert },
+  { path: "/adm/noticeUpdate.page", name: "AdminNoticeUpdate", component:AdminNoticeUpdate},
   { path: "/adm/newsSelectList.page", name: "AdminNewsSelectList", component: AdminNewsSelectList },
   { path: "/adm/newsSelectOne.page", name: "AdminNewsSelectOne", component: AdminNewsSelectOne },
   { path: "/adm/newsInsert.page", name: "AdminNewsInsert", component: AdminNewsInsert },
client/views/pages/admin/notice/NoticeInsert.vue
--- client/views/pages/admin/notice/NoticeInsert.vue
+++ client/views/pages/admin/notice/NoticeInsert.vue
@@ -12,7 +12,7 @@
                     <tbody>
                         <tr>
                             <th>제목</th>
-                            <td><input type="text" name="" id="newsTitle"></td>
+                            <td><input type="text" name="" id="newsTitle" v-model="post.post_title"></td>
                         </tr>
                         <tr>
                             <th>내용</th>
@@ -22,41 +22,146 @@
                             <th>첨부파일</th>
                             <td>
                                 <div class="btn-upload" @click="openFileInput">파일 업로드하기</div>
-                                <input type="file" name="file" id="file" style="display: none" @change="fileUpload()">
+                                <input type="file" name="file" id="file" ref="fileInput" style="display: none"
+                                    @change="fileUpload()">
+                                <ul v-for="(file, idx) in fileList" :key="idx">
+                                    <li> {{ file.name }} <button @click="fileRemove(idx)">삭제</button></li>
+                                </ul>
                             </td>
                         </tr>
                     </tbody>
                 </table>
                 <div class="btn-wrap">
-                    <button class="dark-gray-btn" @click="selectList">이전</button>
-                    <button class="blue-btn">글쓰기</button>
+                    <button class="dark-gray-btn" @click="postSelectListPage()">이전</button>
+                    <button class="blue-btn" @click="postInsertCheck()">등록</button>
                 </div>
             </div>
         </div>
     </div>
 </template>
 <script>
-import '@toast-ui/editor/dist/toastui-editor.css';
+import axios from 'axios';
+import COMMON_UTIL from '../../../../resources/js/commonUtil.js';
 
 export default {
     data() {
         return {
+            post: {
+                bbs_id: '2',
+                post_title: null,
+                post_content: null,
+                // 카테고리가 없는 게시판에서는 null로 설정 부탁합니다!
+                ctgry_nm: null,
+            },
+            fileList: [],
+            filecount: 0,
             oEditors: [], // oEditors는 스마트에디터용
         };
     },
     methods: {
-        selectList: function () {
-            this.$router.push({ path: '/adm/noticeSelectList.page' });
+        //게시글 및 첨부파일 등록
+        postInsert: function () {
+            const vm = this;
+            let formData = new FormData();
+
+            if (vm.fileList.length > 0) {
+                for (let i = 0; i < vm.fileList.length; i++) {
+                    formData.append('file', vm.fileList[i]);
+                    console.log(formData.get('file'));
+                }
+                formData.append("post", JSON.stringify(vm.post));
+
+                axios({
+                    url: '/post/postFileInsert.file',
+                    method: 'post',
+                    headers: {
+                        'Content-Type': 'multipart/form-data',
+                    },
+                    data: formData
+                }).then(function (response) {
+                    console.log("qnaInsert - response : ", response);
+                    let result = response.data;
+                    if (result > 0) {
+                        alert("등록을 완료하였습니다.");
+                        vm.postSelectListPage()
+                    } else {
+                        alert("등록 실패, 관리자에게 문의해주세요.");
+                    }
+                }).catch(function (error) {
+                    console.log("qnaInsert - error : ", error);
+                    alert("등록 오류, 관리자에게 문의해주세요.");
+                });
+            } else {
+
+                axios({
+                    url: '/post/postInsert.json',
+                    method: 'post',
+                    headers: {
+                        'Content-Type': "application/json; charset=UTF-8",
+                    },
+                    data: vm.post
+                }).then(function (response) {
+                    console.log("noticeInsert - response : ", response);
+                    let result = response.data;
+                    if (result > 0) {
+                        alert("등록을 완료하였습니다.");
+                        vm.postSelectListPage()
+                    } else {
+                        alert("등록 실패, 관리자에게 문의해주세요.");
+                    }
+                }).catch(function (error) {
+                    console.log("noticeInsert - error : ", error);
+                    alert("등록 오류, 관리자에게 문의해주세요.");
+                });
+            }
         },
-        // 파일 업로드 커스텀을 위한 함수
-        openFileInput: function () {
-            this.$refs.fileInput.click(); // 파일 업로드 input 요소를 클릭
+
+        //등록 유효성 검사
+        postInsertCheck: function () {
+            const oEditors = this.oEditors;
+            oEditors.getById["smart"].exec("UPDATE_CONTENTS_FIELD", []);
+            // 스마트에디터의 iframe에 있는 내용을 textarea로. 
+            this.post.post_content = document.getElementById("smart").value;
+            console.log(document.getElementById("smart").value);
+            console.log(this.post.post_content);
+            console.log(COMMON_UTIL.isEmpty(this.post.post_title));
+
+            if (COMMON_UTIL.isEmpty(this.post.post_title) === false) {
+                alert("제목을 입력해주세요.");
+                return false;
+            }
+
+            if (COMMON_UTIL.isEmpty(this.post.post_content) === false || this.post.post_content === "<p><br></p>") {
+                alert("내용을 입력해주세요.");
+                return false;
+            }
+
+            this.postInsert();
         },
+
+        //파일업로드
         fileUpload: function () {
             this.fileList[this.filecount] = this.$refs.fileInput.files[0]
             this.filecount += 1
             console.log("file", this.fileList);
         },
+
+        //파일업로드 중 업로드 파일 삭제
+        fileRemove(idx) {
+            this.fileList.splice(idx, 1);
+            console.log("reMove_file", this.fileList);
+            this.filecount = this.fileList.length;
+        },
+
+         //게시글 리스트로 이동
+         postSelectListPage: function () {
+            this.$router.push({ path: '/adm/noticeSelectList.page' });
+        },
+
+         // 파일 업로드 커스텀을 위한 함수
+         openFileInput: function () {
+            this.$refs.fileInput.click(); // 파일 업로드 input 요소를 클릭
+        }
     },
     watch: {},
     computed: {},
client/views/pages/admin/notice/NoticeSelectList.vue
--- client/views/pages/admin/notice/NoticeSelectList.vue
+++ client/views/pages/admin/notice/NoticeSelectList.vue
@@ -65,6 +65,7 @@
                 perPage: 10,
                 searchType: null,
                 searchText: null,
+                bbs_id : '2'
             },
             postList: [],
             postListCount: 0,
 
client/views/pages/admin/notice/NoticeUpdate.vue (added)
+++ client/views/pages/admin/notice/NoticeUpdate.vue
@@ -0,0 +1,282 @@
+<template>
+    <div class="notice-wrap">
+        <div class="content-box">
+            <div class="title-wrap">
+                <div class="flex-start">
+                    <img src="../../../../resources/jpg/notic-logo-img.png" alt="공지사항 아이콘" class="title-icon">
+                    <h2 class="main-title">공지사항</h2>
+                </div>
+            </div>
+            <div class="content-wrap">
+                <table class="insert-table">
+                    <tbody>
+                        <tr>
+                            <th>제목</th>
+                            <td><input type="text" name="" id="newsTitle" v-model="post.post_title"></td>
+                        </tr>
+                        <tr>
+                            <th>내용</th>
+                            <td><textarea name="smart" id="smart" style="width:100%"></textarea></td>
+                        </tr>
+                        <tr>
+                            <th>등록된 첨부파일</th>
+                            <td colspan="6">
+                                <div v-if="fileList.length == 0">
+                                    <label>첨부된 파일이 없습니다.</label>
+                                </div>
+                                <ul v-else v-for="(item, idx) in fileList" :key="idx">
+                                    <li class="flex file-list">
+                                        <p>{{ item.real_file_nm }}</p>
+                                        <button class="red-btn" @click="fileRemove(item, idx)">삭제</button>
+                                    </li>
+                                </ul>
+                            </td>
+                        </tr>
+                        <tr>
+                            <th>추가 첨부파일</th>
+                            <td colspan="6">
+                                <div class="btn-upload" @click="openFileInput">파일 업로드하기</div>
+                                <input type="file" name="file" id="file" ref="fileInput" style="display: none"
+                                    @change="fileUpload()">
+                                <ul  v-for="(item, idx) in insertFileList" :key="idx">
+                                    <li v-if="insertFileList.length != 0" class="flex file-list">{{ item.name }} <button class="red-border-btn"
+                                            @click="fileRemove(item, idx)">삭제</button></li>
+                                </ul>
+                            </td>
+                        </tr>
+                    </tbody>
+                </table>
+                <div class="btn-wrap">
+                    <button class="dark-gray-btn" @click="postSelectListPage()">이전</button>
+                    <button class="blue-btn" @click="postInsertCheck()">등록</button>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+import axios from 'axios';
+import COMMON_UTIL from '../../../../resources/js/commonUtil.js';
+import { useRoute } from 'vue-router';
+
+export default {
+    data() {
+        return {
+            post: {
+                post_id: null,
+                post_title: null,
+                post_content: null,
+                notice_yn: null,
+                notice_start_dt: null,
+                notice_end_dt: null,
+                reg_dt: null,
+                mdfcn_dt: null,
+                link_url: null,
+                view_cnt: null,
+                file_id: null,
+                bbs_id: null,
+                rgtr_id: null,
+                mdfr_id: null,
+                ctgry_nm: null,
+            },
+            fileList: [],
+            deleteFileList: [],
+            insertFileList: [],
+            filecount: 0,
+            insertCount: 0,
+            deleteCount: 0,
+            oEditors: [], // oEditors는 스마트에디터용
+            route: useRoute(),
+        };
+    },
+    methods: {
+        //게시글 및 첨부파일 등록
+        postSelectOne: function () {
+            const vm = this;
+            axios({
+                url: '/post/postSelectOne.json',
+                method: 'post',
+                hearder: {
+                    'Content-Type': "application/json; charset=UTF-8",
+                },
+                data: { 'post_id': vm.route.query.post_id, 'file_id': vm.route.query.file_id }
+            }).then(function (response) {
+                vm.post = response.data.postSelectOne;
+
+                if (response.data.selectFileList.length != 0) {
+                    vm.fileList = response.data.selectFileList;
+                    vm.filecount = response.data.selectFileList.length;
+                }
+
+                vm.initEditor(vm.post.post_content)
+            }).catch(function (error) {
+                console.log("error - ", error)
+                alert("게시글 상세보기 조회 오류, 관리자에게 문의하세요.");
+            })
+        },
+
+        //게시글 및 첨부파일 등록
+        postUpdate: function () {
+            const vm = this;
+            let formData = new FormData();
+            
+            if (vm.insertFileList.length > 0 || vm.deleteFileList.length > 0) {
+                if (vm.insertFileList.length > 0) {
+                    for (let i = 0; i < vm.insertFileList.length; i++) {
+                        formData.append('file', vm.insertFileList[i]);
+                        console.log('file - ', formData.get('file'));
+                    }
+                }
+
+                if (vm.deleteFileList.length > 0) {
+                    formData.append('deleteFile', JSON.stringify(vm.deleteFileList));
+                    console.log('deleteFile - ', formData.get('deleteFile'));
+                }
+
+                formData.append("post", JSON.stringify(vm.post));
+
+                axios({
+                    url: '/post/postFileUpdate.file',
+                    method: 'post',
+                    headers: {
+                        'Content-Type': 'multipart/form-data',
+                    },
+                    data: formData
+                }).then(function (response) {
+                    console.log("qnaInsert - response : ", response);
+                    let result = response.data;
+                    if (result > 0) {
+                        alert("수정을 완료하였습니다.");
+                        vm.postSelectListPage()
+                    } else {
+                        alert("수정 실패, 관리자에게 문의해주세요.");
+                    }
+                }).catch(function (error) {
+                    console.log("qnaInsert - error : ", error);
+                    alert("수정 오류, 관리자에게 문의해주세요.");
+                });
+            } else {
+
+                axios({
+                    url: '/post/postFileUpdate.json',
+                    method: 'post',
+                    headers: {
+                        'Content-Type': "application/json; charset=UTF-8",
+                    },
+                    data: vm.post
+                }).then(function (response) {
+                    console.log("noticeInsert - response : ", response);
+                    let result = response.data;
+                    if (result > 0) {
+                        alert("수정을 완료하였습니다.");
+                        vm.postSelectListPage()
+                    } else {
+                        alert("수정 실패, 관리자에게 문의해주세요.");
+                    }
+                }).catch(function (error) {
+                    console.log("noticeInsert - error : ", error);
+                    alert("수정 오류, 관리자에게 문의해주세요.");
+                });
+            }
+        },
+
+        //등록 유효성 검사
+        postUpdateCheck: function () {
+            const oEditors = this.oEditors;
+            oEditors.getById["smart"].exec("UPDATE_CONTENTS_FIELD", []);
+            // 스마트에디터의 iframe에 있는 내용을 textarea로. 
+            this.post.post_content = document.getElementById("smart").value;
+
+            if (COMMON_UTIL.isEmpty(this.post.post_title) === false) {
+                alert("제목을 입력해주세요.");
+                return false;
+            }
+
+            if (COMMON_UTIL.isEmpty(this.post.post_content) === false || this.post.post_content === "<p><br></p>") {
+                alert("내용을 입력해주세요.");
+                return false;
+            }
+
+            this.postUpdate();
+        },
+
+        // 에디터 만들기 
+        initEditor: function (initData) {
+            // 스마트 에디터 적용
+            const oEditors = this.oEditors;
+            nhn.husky.EZCreator.createInIFrame({
+                oAppRef: oEditors,
+                elPlaceHolder: "smart",
+                sSkinURI: "/client/smarteditor2-2.8.2.3/SmartEditor2Skin.html",
+                htParams: {
+                    bSkipXssFilter: true,
+                    bUseVerticalResizer: true,
+                    bUseModeChanger: true
+                },
+                fOnAppLoad: function () {
+                    oEditors.getById["smart"].exec("PASTE_HTML", [initData]);
+                },
+                fCreator: "createSEditor2"
+            });
+        },
+        //파일업로드
+        fileUpload: function () {
+            
+            this.insertFileList[this.insertCount] = this.$refs.fileInput.files[0];
+            this.insertCount += 1;
+            console.log("insertFile - ", this.insertFileList);
+        },
+
+        //파일업로드 중 업로드 파일 삭제
+        fileRemove(item, idx) {
+            if (item.file_path === undefined) {
+                this.insertFileList.splice(idx, 1);
+                this.insertCount = this.insertFileList.length;
+                console.log("insertfile", this.insertFileList);
+
+            } else {
+                this.fileList.splice(idx, 1);
+                this.deleteFileList[this.deleteCount] = item
+                this.deleteCount += 1
+                this.filecount = this.fileList.length;
+                console.log("deleteFile - ", this.deleteFileList);
+            }
+
+        },
+
+        //게시글 리스트로 이동
+        postSelectListPage: function () {
+            this.$router.push({ path: '/adm/noticeSelectList.page' });
+        },
+
+        // 파일 업로드 커스텀을 위한 함수
+        openFileInput: function () {
+            this.$refs.fileInput.click(); // 파일 업로드 input 요소를 클릭
+        }
+    },
+    watch: {},
+    computed: {},
+    components: {},
+    mounted() {
+        this.postSelectOne();
+    }
+};
+</script>
+<style scoped>
+.notice-wrap,
+.content-box {
+    width: 100%;
+    height: 100%;
+    font-size: 1.3rem;
+}
+
+.insert-table {
+    border-top: 3px solid #ddd;
+    border-bottom: 3px solid #ddd;
+}
+
+textarea {
+    width: 100%;
+    height: 450px;
+}
+</style>
client/views/pages/user/Data/Data.vue
--- client/views/pages/user/Data/Data.vue
+++ client/views/pages/user/Data/Data.vue
@@ -162,7 +162,20 @@
 
         //게시글 상세조회 페이지로 이동
         postSelectOnePage: function (item) {
-            this.$router.push({ path: '/DataDtali.page', query: { 'post_id': item.post_id, 'file_id': item.file_id } });
+            const vm = this;
+
+            axios({
+                url: '/post/postViewCount.json',
+                method: 'post',
+                hearder: {
+                    'Content-Type': "application/json; charset=UTF-8",
+                },
+                data: { 'post_id': item.post_id }
+            }).then(function (response) {
+                vm.$router.push({ path: '/DataDtali.page', query: { 'post_id': item.post_id, 'file_id': item.file_id } });
+            }).catch(function (error) {
+                console.log("서버오류");
+            })
         },
     },
     watch: {
client/views/pages/user/Data/DataOne.vue
--- client/views/pages/user/Data/DataOne.vue
+++ client/views/pages/user/Data/DataOne.vue
@@ -84,11 +84,6 @@
             route: useRoute(),
         };
     },
-    mounted() {
-        this.postViewCount();
-        this.postSelectOne();
-
-    },
     methods: {
         goBack() {
             this.$router.go(-1);
@@ -113,22 +108,6 @@
             }).catch(function (error) {
                 console.log("error - ", error)
                 alert("게시글 상세보기 조회 오류, 관리자에게 문의하세요.");
-            })
-        },
-
-        postViewCount: function () {
-            const vm = this;
-            axios({
-                url: '/post/postViewCount.json',
-                method: 'post',
-                hearder: {
-                    'Content-Type': "application/json; charset=UTF-8",
-                },
-                data: { 'post_id': vm.route.query.post_id }
-            }).then(function (response) {
-
-            }).catch(function (error) {
-                console.log("서버오류");
             })
         },
 
@@ -193,6 +172,10 @@
         yyyymmdd: function (date) {
             return COMMON_UTIL.yyyymmdd(date);
         },
-    }
+    },
+
+    mounted() {
+        this.postSelectOne();
+    },
 }
 </script>
client/views/pages/user/networking/Matching.vue
--- client/views/pages/user/networking/Matching.vue
+++ client/views/pages/user/networking/Matching.vue
@@ -40,12 +40,12 @@
                                     <img :src="'http://localhost:8080'+item.file_path +'\\' + item.file_nm + '.' + item.file_extn_nm" width="20px" alt="">
                                     <p>{{ company_info }}</p>
                                     <div class="matchingbox-1">
-                                        <p v-if="item.pick_yn === 0" @click.stop="pickModal(item)"><i class="fa-regular fa-heart fa-lg" style="color: #3f87f7;"></i> {{ item.company_pick_cnt }} </p>
+                                        <p v-if="!item.pick_yn" @click.stop="pickModal(item)"><i class="fa-regular fa-heart fa-lg" style="color: #3f87f7;"></i> {{ item.company_pick_cnt }} </p>
                                         <p v-else @click.stop="pickCancelModal(item)"><i class="fa fa-heart fa-lg" style="color: #d41515;"></i> {{ item.company_pick_cnt }} </p>
                                         <p class="matchingbox-text">조회수 <span>{{ item.view_cnt }}</span></p>
                                     </div>
                                     <div class="matching-span">
-                                        <span v-for="(item, idx) in keywordList" :key="idx">#{{ item }}</span>
+                                        <span v-for="(item, idx1) in keywordList[idx]" :key="idx1">#{{ item }}</span>
                                     </div>
                                 </div>
                             </div>
@@ -64,10 +64,10 @@
                             <div>
                                 <h5>{{ item.company_nm }}</h5>
                                 <div class="matching-span">
-                                        <span v-for="(item, idx) in keywordList" :key="idx">#{{ item }}</span>
-                                    </div>
+                                        <span v-for="(item, idx1) in keywordList[idx]" :key="idx1"> #{{ item }}</span>
+                                </div>
                                 <div class="matchingbox-2">
-                                    <p v-if="item.pick_yn === 0" @click.stop="pickModal(item)"><i class="fa-regular fa-heart fa-lg" style="color: #3f87f7;"></i> {{ item.company_pick_cnt }} </p>
+                                    <p v-if="!item.pick_yn" @click.stop="pickModal(item)"><i class="fa-regular fa-heart fa-lg" style="color: #3f87f7;"></i> {{ item.company_pick_cnt }} </p>
                                     <p v-else @click.stop="pickCancelModal(item)"><i class="fa fa-heart fa-lg" style="color: #d41515;"></i> {{ item.company_pick_cnt }} </p>
                                     <p>조회수 <span>{{ item.view_cnt }}</span> </p>
                                 </div>
@@ -96,6 +96,7 @@
             },
             bestList:[],
             companyList:[],
+            keyword:[],
             keywordList:[],
             companyTop6List:[],
             companyListCount: 0,
@@ -122,11 +123,12 @@
                 vm.companyTop6List = response.data.companyTop6;
 
                  for( let i = 0; i < vm.companyList.length; i++) {
-                    vm.keywordList = vm.companyList[i].keyword.split('#');
+                    vm.keyword = vm.companyList[i].keyword.split('#',4);
+                    vm.keyword.splice(0, 1)
+                    vm.keywordList[i] = vm.keyword
+                    console.log("keyword", vm.keywordList);
                 }
                 
-            }).then(function() {
-                vm.keywordList.splice(0, 1);
             }).catch(function(error) {
                 console.log('error - ', error)
                 alert('기업 목록 조회 오류, 관리자에게 문의하세요.');
@@ -189,7 +191,20 @@
         },
 
         companySelectOnePage: function(item) {
-            this.$router.push({ path: '/MatchingOne.page', query: {'company_id': item.company_id}});
+            const vm = this;
+            
+            axios({
+                url: '/matching/companyViewCountAdd.json',
+                method: 'post',
+                hearder: {
+                    'Content-Type': "application/json; charset=UTF-8",
+                },
+                data: { 'company_id': item.company_id }
+            }).then(function (response) {
+                vm.$router.push({ path: '/MatchingOne.page', query: {'company_id': item.company_id}});
+            }).catch(function (error) {
+                console.log("서버오류");
+            })
         }
     },
     watch: {
client/views/pages/user/networking/MatchingOne.vue
--- client/views/pages/user/networking/MatchingOne.vue
+++ client/views/pages/user/networking/MatchingOne.vue
@@ -32,9 +32,8 @@
         </div>
         <div class="matDtail-sec">
             <section class="mat-sec1">
-                <h2>(주)지학사 <span>(1등급)</span></h2>
-                <div>
-                    <input type="file" id="dtaildown" style="display: none;">
+                <h2> {{ company.company_nm }}<span>(BEST기업)</span></h2>
+                <div @click="downloadProfile()">
                     <label for="dtaildown">회사소개서 다운로드</label>
                     <i class="fa-solid fa-download" style="color: #ffffff;"></i>
                 </div>
@@ -43,20 +42,15 @@
             <!-- /상세내용 -->
             <section class="mat-sec2">
                 <div>
-                    <img src="../../../../resources/jpg/matching-img.png" alt="">
-                </div>
-                <div>
-                    <p>교과서
-                        지학사는 1956년 창립이후 공교육의 핵심인 교과용 도서 개발을 근간으로 초중고 학생들을 위한 국정,검정,인정 전 과목 교과서를 발행하고 있습니다.
-                    </p>
+                    <div id="viewer" ref="viewer" class="viewer"></div>
                 </div>
                 <div class="mat-sec2-end">
                     <p>
 
                         <i class="fa-regular fa-heart fa-lg" style="color: #3f87f7;"></i>
-                        <span @click="openModal2">366666개</span>의 기업이 pick했습니다!
+                        <span id="pickBtn" @click="openPickListMadal">{{ company.company_pick_cnt }}개</span>의 기업이 pick했습니다!
                     </p>
-                    <p><span>조회수</span>45454</p>
+                    <p><span>조회수</span>{{ company.view_cnt }}</p>
 
                 </div>
             </section>
@@ -68,30 +62,56 @@
     </div>
 
 
-    <div v-show="showModal2" class="join-modal2">
+    <div v-show="pickModal" class="join-modal2">
         <div class="mat-modal">
 
             <h2>우리기업을 PICK한 기업</h2>
-            <button class="join-text-bt3" @click="closeModal2">X</button>
+            <button class="join-text-bt3" @click="closePickListMadal">X</button>
         </div>
-        <table class="mat-modal-img">
-            <td><img src="../../../../resources/jpg/logo/edutech.png" alt=""></td>
-            <td v-for="item in items" :key="item.id">
-                <!-- <img :src="item.image" alt="" />/ -->
-                {{ item.text }}
+        <table class="mat-modal-img" v-for="(item, idx) in pickSelectList" :key="idx">
+            <td><img :src="'http://localhost:8080'+item.file_path +'\\' + item.file_nm + '.' + item.file_extn_nm"></td>
+            <td >
+                {{ item.company_nm }}
             </td>
-            <td><button :style="{ backgroundColor: buttonColor }" @click="accept">
-                    {{ buttonText }}
-                </button></td>
+            <td>
+                <button v-if="item.pick_yn" disabled :style="{ backgroundColor: '#ccc' }">완료</button>
+                <button v-else :style="{ backgroundColor: '#3f87f7' }" @click="pick(item)"> 수락</button>
+            </td>
         </table>
     </div>
 </template>
 
 <script>
+import axios from 'axios';
+import COMMON_UTIL from '../../../../resources/js/commonUtil.js';
+import { useRoute } from 'vue-router';
+import Viewer from '@toast-ui/editor/dist/toastui-editor-viewer';
+import '@toast-ui/editor/dist/toastui-editor.css';
+import '@toast-ui/editor/dist/i18n/ko-kr';
+import * as FileSaver from 'file-saver';
+
 export default {
     data() {
         return {
-            showModal2: false,
+            company: {
+                company_id: null,
+                company_nm: null,
+                company_info: null,
+                company_point: null,
+                file_id: null,
+                user_id: null,
+                keyword: null,
+                company_pick_cnt: null,
+                company_technology: null,
+                company_service: null,
+                view_cnt: null,
+                file_path: null,
+                file_nm: null,
+                file_extn_nm: null,
+            },
+
+            pickSelectList:[],
+            pickModal: false,
             isAccepted: false,
             buttonText: '수락',
             buttonColor: '#3f87f7',
@@ -99,25 +119,141 @@
 
                 { id: 2, text: "oo출판사" },
 
-
             ],
-            imagePath1: require("../../../../resources/jpg/fille.png"),
+            route: useRoute(),
         }
     },
     methods: {
-        goToPage2() {
-            this.$router.push('/Matching.page')
+
+        companySelectOne: function() {
+            const vm = this;
+
+            axios({
+                url: '/matching/companySelectOne.json',
+                method: 'post',
+                hearder: {
+                    'Content-Type': "application/json; charset=UTF-8",
+                },
+                data: { 'company_id': vm.route.query.company_id}
+            }).then(function (response) {
+                vm.company = response.data;
+                vm.userCompanyId = response.data.userCompanyId;
+                vm.getViewer(vm.company.company_info);
+            }).catch(function (error) {
+                console.log("error - ", error)
+                alert("기업 상세보기 조회 오류, 관리자에게 문의하세요.");
+            })
         },
-        openModal2() {
-            this.showModal2 = true;
+
+        getViewer(data) {
+            this.viewer = new Viewer({
+                el: this.$refs.viewer,
+                initialEditType: 'wysiwyg',
+                previewStyle: 'vertical',
+                initialValue: data,
+                customHTMLRenderer: {
+                    htmlBlock: {
+                        iframe(node) {
+                            return [
+                                { type: 'openTag', tagName: 'iframe', outerNewLine: true, attributes: node.attrs },
+                                { type: 'html', content: node.childrenHTML },
+                                { type: 'closeTag', tagName: 'iframe', outerNewLine: true },
+                            ];
+                        },
+                    }
+                },
+            });
         },
-        closeModal2() {
-            this.showModal2 = false;
+
+        downloadProfile: function () {
+            const vm = this;
+            let path = vm.company.file_path + '\\' + vm.company.file_nm + '.' + vm.company.file_extn_nm;
+            axios({
+                url: '/file/downloadFile.json',
+                method: 'post',
+                headers: {
+                    "Content-Type": "application/x-www-form-urlencoded",
+                },
+                responseType: 'blob',
+                data: `file_path=${encodeURIComponent(path)}`
+            }).then((response) => {
+                const blob = new Blob([response.data]);
+
+                const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
+
+                if (isSafari) {
+                    FileSaver.saveAs(blob, vm.company.real_file_nm);
+                } else {
+                    const url = window.URL.createObjectURL(blob);
+                    const a = document.createElement('a');
+                    a.style.display = 'none';
+                    a.href = url;
+                    a.download = vm.company.real_file_nm;
+                    document.body.appendChild(a);
+                    a.click();
+                    window.URL.revokeObjectURL(url);
+                }
+
+                this.$router.go(0);
+
+            }).catch(function (error) {
+                console.log('error - ', error)
+                alert('에러발생');
+            });
         },
+
+        openPickListMadal() {
+            const vm = this;
+            if(this.company.company_id === this.userCompanyId) {
+                this.pickModal = true;
+
+                axios({
+                    url: '/matching/pickSelectList.json',
+                    method: 'post',
+                    hearder: {
+                        'Content-Type': "application/json; charset=UTF-8",
+                    },
+                    data: vm.company
+                }).then(function (response) {
+                    vm.pickSelectList = response.data;
+                }).catch(function (error) {
+                    console.log("error - ", error)
+                    alert("PICK 목록 조회 오류, 관리자에게 문의하세요.");
+                })
+            }
+        },
+
+        pick: function(item) {
+            const vm = this;
+
+            axios({
+                url: '/matching/pick.json',
+                method: 'post',
+                hearder: {
+                    'Content-Type': "application/json; charset=UTF-8",
+                },
+                data: item
+            }).then(function(response) {
+                alert(response.data);
+                vm.openPickListMadal();
+            }).catch(function(error) {
+                console.log('error - ', error)
+                alert('기업 목록 조회 오류, 관리자에게 문의하세요.');
+            })
+        },
+
+        closePickListMadal() {
+            this.pickModal = false;
+        },
+
         accept() {
             this.isAccepted = !this.isAccepted;
             this.buttonText = this.isAccepted ? '수락완료' : '수락';
             this.buttonColor = this.isAccepted ? '#ccc' : '#3f87f7';
+        },
+
+        goToPage2() {
+            this.$router.push('/Matching.page')
         },
     },
     watch: {
@@ -128,6 +264,7 @@
     },
     mounted() {
         console.log('Matching mounted');
+        this.companySelectOne();
     }
 }
 </script>
Add a comment
List