yjryu / KERIS star
Stormen123 2023-12-05
231205 김성훈 매칭관리 세부통계 진행중
@359ea056ebbbd7af672e51afa971e15c65926b53
client/views/pages/admin/statistics/MatchingStatistics.vue
--- client/views/pages/admin/statistics/MatchingStatistics.vue
+++ client/views/pages/admin/statistics/MatchingStatistics.vue
@@ -131,7 +131,7 @@
                         <div class="table-zone">
                             <div class="btn-wrap">
 
-                                <button class="blue-border-bnt" @click="detailLogExcel()">Excel 다운로드</button>
+                                <button class="blue-border-bnt" @click="statisticsDetailLogExcel()">Excel 다운로드</button>
                             </div>
                             <table class="statistics-table">
                                 <colgroup>
@@ -155,14 +155,31 @@
                                     <tr v-for="(item, idx) in companyDetailStatistics" :key="idx">
                                         <td v-if="idx === 0" :rowspan="companyDetailStatistics.length">{{ company_nm }}</td>
                                         <td>{{ item.company_nm }}</td>
-                                        <td v-if="item.division == 'reception'">요청받음</td>
+                                        <td>{{ item.division }}</td>
+                                        <td>{{ item.state }}</td>
+                                        <!-- <td v-if="item.division == 'reception'">요청받음</td>
                                         <td v-else>요청함</td>
                                         <td v-if="item.complete_yn && item.refuse_yn == 'N'">성공</td>
                                         <td v-else-if="item.division == 'reception' && item.refuse_yn == 'Y'">거절함</td>
                                         <td v-else-if="item.division == 'dispatch' && item.refuse_yn == 'Y'">거절됨</td>
-                                        <td v-else>진행중</td>
+                                        <td v-else>진행중</td> -->
                                     </tr>
                                 </tbody>
+<!-- 
+                                <tbody v-else>
+                                    <tr v-for="(item, idx) in companyDetailStatistics" :key="idx">
+                                        <td v-if="idx === 0" :rowspan="companyDetailStatistics.length">{{ company_nm }}</td>
+                                        <td>{{ item.company_nm }}</td>
+                                        <td v-if="item.division == 'reception'">요청받음</td>
+                                        <td v-else>요청함</td>
+                                        <td v-if="item.complete_yn && item.refuse_yn == 'N' && !item.cancel_yn">성공</td>
+                                        <td v-else-if="item.cancel_yn">성공 후 취소</td>
+                                        <td v-else-if="item.division == 'reception' && item.refuse_yn == 'Y'">거절함</td>
+                                        <td v-else-if="item.division == 'dispatch' && item.refuse_yn == 'Y'">거절됨</td>
+                                        <td v-else>진행중</td>
+                                    </tr>
+                                </tbody> -->
+
                             </table>
                             <table class="sum-table">
                                 <colgroup>
@@ -174,14 +191,10 @@
                                 <tbody>
                                     <tr>
                                         <th>합계</th>
-                                        <td colspan="3">성공건수</td>
+                                        <td colspan="3">{{ detailTotalCount }}</td>
                                     </tr>
                                 </tbody>
                             </table>
-                        </div>
-                        <div class="bottom-wrap">
-                            <PaginationButton v-model:currentPage="listSearch.currentPage" :perPage="listSearch.perPage"
-                                :total-count="companySelectListCount" :max-range="5" :click="detailTypeCheck" />
                         </div>
                     </div>
                 </div>
@@ -220,15 +233,13 @@
             company_nm: null,
             companyList: [],
             companyDetailStatistics: [],
-            detailTotalCount: {},
+            detailTotalCount: 0,
         };
     },
     methods: {
         currentTabChange: function (index) {
             this.currentTab = index;
-            if (index == 1) {
-                this.companySelectList();
-            } else {
+            if (index == 0) {
                 this.listTypeCheck();
             }
         },
@@ -288,8 +299,8 @@
         /** 선택기업 픽 세부통계 */
         companyDetailPickStatistics: function () {
             const vm = this;
-            vm.listSearch.company_id = vm.company_id;
 
+            vm.listSearch.company_id = vm.company_id;
             axios({
                 url: '/statistics/companyDetailPickStatistics.json',
                 method: 'post',
@@ -298,9 +309,8 @@
                 },
                 data: vm.listSearch
             }).then(function (response) {
-                vm.companyDetailStatistics = response.data;
-                console.log(vm.companyDetailStatistics)
-                // vm.detailTotalCount = response.data.data.totalCount;
+                vm.companyDetailStatistics = response.data.companyDetailPickStatistics;
+                vm.detailTotalCount = response.data.totalCount;
             }).catch(function (error) {
                 console.log("error - ", error)
                 alert("PICK 통계 조회 오류, 관리자에게 문의하세요.");
@@ -310,6 +320,8 @@
         /** 선택기업 매칭 세부통계 */
         companyDetailMatchingStatistics: function () {
             const vm = this;
+
+            vm.listSearch.company_id = vm.company_id;
             axios({
                 url: '/statistics/companyDetailMatchingStatistics.json',
                 method: 'post',
@@ -318,8 +330,8 @@
                 },
                 data: vm.listSearch
             }).then(function (response) {
-                vm.companyDetailStatistics = response.data.companyMatchingStatistics;
-                vm.detailTotalCount = response.data.data.totalCount;
+                vm.companyDetailStatistics = response.data.companyDetailMatchingStatistics;
+                vm.detailTotalCount = response.data.totalCount;
             }).catch(function (error) {
                 console.log("error - ", error)
                 alert("MATCHING 통계 조회 오류, 관리자에게 문의하세요.");
@@ -331,7 +343,7 @@
             if (this.selectedOption1 == 'pick') {
                 this.companyPickStatistics();
             } else {
-                this.companyDetailMatchingStatistics();
+                this.companyMatchingStatistics();
             }
         },
 
@@ -350,10 +362,10 @@
 
         /**매칭관리 세부통계 타입 검사 */
         detailTypeCheck: function () {
-            if (this.selectedOption1 == 'pick') {
+            if (this.selectedOption2 == 'pick') {
                 this.companyDetailPickStatistics();
             } else {
-                this.companyMatchingStatistics();
+                this.companyDetailMatchingStatistics();
             }
         },
 
@@ -402,7 +414,7 @@
             })
         },
 
-        /** 기업 별 pick 통계 엑셀 다운로드 */
+        /** 기업 별 통계 엑셀 다운로드 */
         statisticsLogExcel: function() {
             const vm = this;
 
@@ -415,6 +427,48 @@
 
             axios({
                 url: "/statistics/pickStatisticsLogExcel.json",
+                method: "post",
+                herders: {
+                "Content-Type": "application/json; charset=UTF-8",
+                },
+                responseType: 'arraybuffer',
+                data: vm.listSearch,
+            })
+            .then(function (response) {
+                const url = window.URL.createObjectURL(new Blob([response.data], { type: response.headers["content-type"] }));
+                const link = document.createElement("a");
+                link.href = url;
+                let today = COMMON_UTIL.today();
+                if(vm.selectedOption1 == 'pick') {
+                    link.download = '[' + today + ']' + '기업별 pick 통계';
+                } else {
+                    link.download = '[' + today + ']' + '기업별 matching 통계';
+                }
+                
+                link.click();
+                window.URL.revokeObjectURL(url);
+            })
+                .catch(function (error) {
+                console.log("userAccessLogExcel - error : ", error);
+                alert("통계 Excel 다운로드 오류, 관리자에게 문의해주세요.");
+            });
+        },
+
+         /** 세부통계 엑셀 다운로드 */
+         statisticsDetailLogExcel: function() {
+            const vm = this;
+
+            vm.listSearch.company_nm = vm.company_nm
+
+            if(vm.companySelectListCount === 0) {
+                alert("데이터가 없어 EXCEL 다운로드를 실행할 수 없습니다.")
+                return
+            }
+
+            vm.listSearch.selectedOption2 = vm.selectedOption2;
+
+            axios({
+                url: "/statistics/detailStatisticsLogExcel.json",
                 method: "post",
                 herders: {
                 "Content-Type": "application/json; charset=UTF-8",
@@ -460,6 +514,8 @@
     mounted() {
         console.log(this.selectedOption1)
         this.companyPickStatistics();
+        this.companySelectList();
+       
     },
 };
 </script>
Add a comment
List