• Y
  • List All
  • Feedback
    • This Project
    • All Projects
Profile Account settings Log out
  • Favorite
  • Project
  • All
Loading...
  • Log in
  • Sign up
jhpark / cms_frontend star
  • Project homeH
  • CodeC
  • IssueI
  • Pull requestP
  • Review R
  • MilestoneM
  • BoardB 1
  • Files
  • Commit
  • Branches
cms_frontendclientviewspagesadmstatisticsMenuStatistics.vue
Download as .zip file
File name
Commit message
Commit date
client
1차 커밋
04-01
server/modules
250108 박정하 서브디렉토리 수정
01-08
.gitignore
250108 박정하 서브디렉토리 수정
01-08
Global.js
250108 박정하 서브디렉토리 수정
01-08
package-lock.json
250326 류윤주 1차 커밋
03-26
package.json
250326 류윤주 1차 커밋
03-26
vetur.config.js
250108 박정하 최초 커밋
01-08
webpack.config.js
250326 류윤주 1차 커밋
03-26
File name
Commit message
Commit date
ckeditor
250108 박정하 서브디렉토리 수정
01-08
resources
1차 커밋
04-01
theme
250326 류윤주 1차 커밋
03-26
views
1차 커밋
04-01
favicon.ico
250108 박정하 서브디렉토리 수정
01-08
File name
Commit message
Commit date
common
250108 박정하 서브디렉토리 수정
01-08
component
1차 커밋
04-01
layout
250331 김혜민 세션로그인방식 수정
03-31
pages
1차 커밋
04-01
index.html
250326 류윤주 1차 커밋
03-26
index.js
250331 김혜민 세션로그인방식 수정
03-31
robots.txt
250322 방선주 company, government 를 portal로 변경 및 db에 맞게 메뉴아이디 수정
03-22
File name
Commit message
Commit date
adm
1차 커밋
04-01
login
250331 김혜민 세션로그인방식 수정
03-31
popup
250108 박정하 서브디렉토리 수정
01-08
user
250322 방선주 company, government 를 portal로 변경 및 db에 맞게 메뉴아이디 수정
03-22
App.vue
Merge branch 'master' of http://210.180.118.83/jhpark/cms_frontend
03-31
AppRouter.js
250331 김혜민 세션로그인방식 수정
03-31
AppStore.js
250331 김혜민 세션로그인방식 수정
03-31
File name
Commit message
Commit date
authority
1차 커밋
04-01
boardManagement
1차 커밋
04-01
departmentManagement
1차 커밋
04-01
log
1차 커밋
04-01
main
250326 류윤주 1차 커밋
03-26
member
1차 커밋
04-01
menuManagement
1차 커밋
04-01
popup
1차 커밋
04-01
preferences
1차 커밋
04-01
statistics
1차 커밋
04-01
system
1차 커밋
04-01
File name
Commit message
Commit date
BbsStatistics.vue
1차 커밋
04-01
MenuStatistics.vue
1차 커밋
04-01
UserStatistics.vue
1차 커밋
04-01
yjryu 04-01 7009a41 1차 커밋 UNIX
Raw Open in browser Change history
<template> <div class="content-zone full-page"> <div class="content"> <div class="scroll"> <div class="title-zone"> <div class="page-title"> <p>메뉴별 접속 통계</p> </div> </div> <div class="input-group mb30"> <input type="date" class="form-control sm" v-model="searchDate.startDt" @change="validateDate($event, 'startDt')" /> <div>-</div> <input type="date" class="form-control sm" v-model="searchDate.endDt" @change="validateDate($event, 'endDt')" /> <button class="btn sm primary" @click="axiosSelectList"> 조회 </button> <button class="large-btn green-border-btn" v-if="pageAuth.fileDwnldAuthrt == 'Y'" @click="fnDownload" > 다운로드 </button> </div> <div class="chart-zone mb30" v-show="menuCnt > 0"> <div class="chart-info"> <p class="detail-text"> 방문자 총 <span class="detail-bold blue">{{ totalCnt }}</span> 명 </p> </div> <div class="chart-wrap" ref="chartdiv" :style="heightStyle"> <ClusteredBarChart :chartData="chartData" columnX="menu" /> </div> </div> <div class="tbl-wrap"> <table class="tbl data mixing"> <colgroup> <col width="25%" /> <col width="25%" /> <col width="25%" /> <col width="25%" /> </colgroup> <thead> <tr> <th rowspan="2">구분</th> <th colspan="3">사용자 구분</th> </tr> <tr> <th class="text-ct">관리자</th> <th class="text-ct">사용자</th> <th class="text-ct">비로그인 사용자</th> </tr> </thead> <tbody> <template v-if="menuCnt > 0"> <tr v-for="(tr, index) of chartData" :key="index"> <td class="text-ct">{{ tr.menu }}</td> <td class="text-rg">{{ tr["관리자"] }}</td> <td class="text-rg">{{ tr["사용자"] }}</td> <td class="text-rg">{{ tr["비로그인 사용자"] }}</td> </tr> </template> <template v-else> <tr> <td colspan="4" class="text-ct"> 등록된 정보가 존재하지 않습니다. </td> </tr> </template> </tbody> </table> </div> </div> </div> </div> </template> <script> import defaultAxios from "../../../../resources/js/defaultAxios"; import html2canvas from "html2canvas"; import ClusteredBarChart from "../../../component/chart/ClusteredBarChart.vue"; import statisticsDate from "../../../../resources/js/defaultDateParams"; // API import { selectMenuCntnStatsProc } from "../../../../resources/api/cntnStats"; export default { mixins: [statisticsDate], components: { ClusteredBarChart: ClusteredBarChart, }, data() { return { // 페이지 권한 객체 pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 차트 데이터 chartData: [], // 전체 수 totalCnt: 0, // 메뉴 수 menuCnt: 0, // 차트 높이 스타일 heightStyle: {}, }; }, created() { this.axiosSelectList(); }, methods: { // 메뉴별 접속 통계 async axiosSelectList() { // 유효성 검사 if (this.searchDate.startDt == null || this.searchDate.startDt == "") { alert("시작일을 선택하세요."); this.searchDate.startDt = null; return; } if (this.searchDate.endDt == null || this.searchDate.endDt == "") { alert("종료일을 선택하세요."); this.searchDate.endDt = null; return; } // 데이터 세팅 let data = this.searchDate; data["menuMainDepth"] = "MENU_000000000000002"; data["startDt"] = this.dateFormat(new Date(data["startDt"])); data["endDt"] = this.dateFormat(new Date(data["endDt"])); // 실행 try { const response = await selectMenuCntnStatsProc(data); let datas = []; for (let data of response.data.data.list) { let newData = {}; newData["menu"] = data["menu_name"]; for (let i = 0; i < data["authrt_nm"].length; i++) { newData[data["authrt_nm"][i]] = data["cntn_nope"][i]; } datas.push(newData); } this.chartData = datas; this.totalCnt = response.data.data.totalCnt; this.heightStyle = { height: 100 + 100 * datas.length + "px", }; this.menuCnt = response.data.data.menuCnt; } catch (error) { alert("에러가 발생했습니다.\n관리자에게 문의해주세요."); } }, // 다운로드 fnDownload() { const vm = this; const chartdiv = vm.$refs.chartdiv; html2canvas(chartdiv).then(function (canvas) { // 데이터 세팅 let cntnStats = []; for (let item of vm.chartData) { cntnStats.push({ date: item.menu, admin: item["관리자"], user: item["사용자"], none: item["비로그인 사용자"], }); } // 폼데이터 var formData = new FormData(); const cntnStatsToBlob = new Blob([JSON.stringify(cntnStats)], { type: "application/json; charset=UTF-8", }); formData.append("cntnStats", cntnStatsToBlob); let imageData = canvas.toDataURL("image/png"); imageData.replace("data:image/png; base64, ", ""); const chartToBlob = new Blob([imageData], { type: "application/json; charset=UTF-8", }); formData.append("chart", chartToBlob); // 실행 defaultAxios({ url: "/sys/cntnStats/excelDownload.file", method: "post", headers: { "Content-Type": "multipart/form-data; charset=UTF-8", Authorization: vm.$store.state.authorization, }, data: formData, responseType: "blob", }) .then((response) => { const url = window.URL.createObjectURL( new Blob([response.data], { type: response.headers["content-type"], }) ); let today = new Date().toISOString().substring(2, 10); today = today.replace(/[^0-9]/g, ""); const link = document.createElement("a"); link.href = url; link.setAttribute( "download", `[${today}]메뉴별접속통계(공무원용)_${vm.searchDate.startDt}_${vm.searchDate.endDt}.xlsx` ); document.body.appendChild(link); link.click(); document.body.removeChild(link); window.URL.revokeObjectURL(url); }) .catch((error) => { alert("에러가 발생했습니다.\n관리자에게 문의해주세요."); }); }); }, }, }; </script>

          
        
    
    
Copyright Yona authors & © NAVER Corp. & NAVER LABS Supported by NAVER CLOUD PLATFORM

or
Sign in with github login with Google Sign in with Google
Reset password | Sign up