서비스관리 / 알림톡 템플릿관리 추가

This commit is contained in:
kimre
2022-06-20 13:50:46 +09:00
parent 1d46263735
commit 460d6e03b8
147 changed files with 10360 additions and 6618 deletions

View File

@@ -130,10 +130,10 @@ max-height: 90vh; overflow: auto;}/*스크린 height 100%를 벗어나는 긴
.popup .pop-cont {}
.popup .pop-cont p {font-size: 16px; color: #666666; font-weight: 400; letter-spacing: -0.8px; line-height: 100%;}
.popup .pop-cont p + p {margin-top: 10px;}
.popup .pop-btn1 {display: flex; justify-content: flex-start; align-items: center; margin: 35px 0 25px;}
.popup .pop-btn2 {display: flex; justify-content: space-between; align-items: center; margin: 35px 0 25px;}
.popup .pop-btn1 button {width: 49%; height: 40px; font-size: 16px; font-weight: 400; letter-spacing: -1.1px;}
.popup .pop-btn2 button {width: 49%; height: 40px; font-size: 16px; font-weight: 400; letter-spacing: -1.1px;}
.popup .popup-btn1 {display: flex; justify-content: flex-start; align-items: center; margin: 35px 0 25px;}
.popup .popup-btn2 {display: flex; justify-content: space-between; align-items: center; margin: 35px 0 25px;}
.popup .popup-btn1 button {width: 49%; height: 40px; font-size: 16px; font-weight: 400; letter-spacing: -1.1px;}
.popup .popup-btn2 button {width: 49%; height: 40px; font-size: 16px; font-weight: 400; letter-spacing: -1.1px;}

View File

@@ -319,7 +319,7 @@ header .user_wrap .user_info .logout {
.contents {
padding: 0 4.16vw;
width: 100%;
width: calc(100% - 240px);
-webkit-box-flex: 1;
-ms-flex: 1 1 0px;
flex: 1 1 0;
@@ -427,7 +427,7 @@ header .user_wrap .user_info .logout {
margin-left: 0;
}
.contents .select_box {
.contents .select_box{
display: -webkit-box;
display: -ms-flexbox;
display: flex;
@@ -474,7 +474,7 @@ header .user_wrap .user_info .logout {
margin-top:-7px;
}
.contents .input_box {
.contents .input_box{
display: -webkit-box;
display: -ms-flexbox;
display: flex;
@@ -567,11 +567,7 @@ header .user_wrap .user_info .logout {
background: #fff url(../images/icon-calender.png) no-repeat right 6% center;
}
.contents .input_box.cal input + input{
margin-left: 4%;
}
.contents .input_box.cal .description{
position: absolute; margin: 10px 0 0 10px; color:#666; font-size: 13px; font-weight: 400;
margin-left: 5%;
}
.contents .input_box.cal.one{
@@ -586,6 +582,16 @@ header .user_wrap .user_info .logout {
margin-right: 10px;
}
.contents .input_box.cal .term{
display: flex;
justify-content: space-around;
align-items: center;
}
.contents .input_box.cal .term input:nth-child(1){
margin-right: 4%;
}
.contents .input_box .search-box {
background: #fff url(../images/icon-search.png) no-repeat 6% center/14px auto;
padding-left: 43px;
@@ -806,7 +812,7 @@ header .user_wrap .user_info .logout {
/*pagination*/
.contents .pagination .arrow-btn button{
.pagination .arrow-btn button{
border:none;
padding: 0 5px;
}
@@ -828,27 +834,37 @@ header .user_wrap .user_info .logout {
.btn-prev, .btn-next{background-position: 0px -24px;}
.btn-prev:hover, .btn-next:hover{background-position: 0px -72px;}
.contents .pagination {
.pagination {
display:flex;
justify-content: center;
margin-bottom: 50px;
}
.contents .pagination ul{
.pagination ul{
display:flex;
align-items:center;
}
.contents .pagination ul li a{
.pagination ul .active a{
color:#eb008b;
text-decoration: underline;
}
.pagination ul li a{
color:#9a9a9a;
font-size: 14px;
padding: 0 15px;
}
.contents .pagination ul li a:hover{
.pagination ul li a:hover{
color:#000;
text-decoration: underline;
}
.popup.popup_form .pagination{
margin-top:25px;
}
/*contents table 추가*/
.contents .table table .arrow_box {
@@ -903,16 +919,18 @@ header .user_wrap .user_info .logout {
}
.contents .table.calculate.scroll{
max-width: 1240px;
overflow: auto;
width: calc(100% - 80px);
overflow-x: auto;
margin: 0 auto;
margin-bottom: 60px;
padding: 0;
padding: 0 0 10px 0;
}
.contents .table.calculate.scroll div{
min-width: 1400px;
padding-bottom: 10px;
.contents .table.calculate.scroll table{
min-width: 1500px;
width:100%;
table-layout: fixed;
white-space: nowrap;
}
.contents .table table .total{
@@ -937,6 +955,12 @@ header .user_wrap .user_info .logout {
padding-left: 10px;
}
.contents .table.table_form .radio .label_group label{
display: flex;
height: 30px;
align-items: center;
}
.contents .table {
color: #333333;
padding: 0 40px;
@@ -1183,17 +1207,17 @@ header .user_wrap .user_info .logout {
margin-bottom: -1px;
}
.popup.popup_form .pop-btn2 {
.popup.popup_form .popup-btn2 {
-webkit-box-pack: end;
-ms-flex-pack: end;
justify-content: flex-end;
}
.popup.popup_form .pop-btn2 button {
.popup.popup_form .popup-btn2 button {
width: 30%;
}
.popup.popup_form .pop-btn2 button:last-child {
.popup.popup_form .popup-btn2 button:last-child {
margin-left: 10px;
}
@@ -1402,19 +1426,19 @@ header .user_wrap .user_info .logout {
margin-top: 20px;
}
.popup.popup_form .pop-btn2 .download {
.popup.popup_form .popup-btn2 .download {
display: flex;
justify-content: center;
align-items: center;
}
.popup.popup_form .pop-btn2.bulk{
.popup.popup_form .popup-btn2.bulk{
justify-content: space-between;
margin-bottom: 20px;
}
.popup.popup_form .pop-btn2.bulk button{
.popup.popup_form .popup-btn2.bulk button{
width: 49%;
display: flex;
-webkit-box-pack: center;
@@ -1426,7 +1450,7 @@ header .user_wrap .user_info .logout {
font-size: 16px;
}
.popup.popup_form .pop-btn2.bulk button:nth-child(1)::before{
.popup.popup_form .popup-btn2.bulk button:nth-child(1)::before{
content: '';
background: url(../images/icon-f-download.png) no-repeat 0 0;
width: 23px;
@@ -1434,7 +1458,7 @@ header .user_wrap .user_info .logout {
margin: 2px 5px 0 15px;
}
.popup.popup_form .pop-btn2.bulk button:nth-child(2)::before{
.popup.popup_form .popup-btn2.bulk button:nth-child(2)::before{
content: '';
background: url(../images/icon-f-upload.png) no-repeat 0 0;
width: 23px;
@@ -1450,39 +1474,41 @@ header .user_wrap .user_info .logout {
}
.popup.popup_form .attach button{
margin:0;
width: 35%;
margin: 0 10px 0 0;
width: 35%;
}
.popup.popup_form .attach .list{
width: 100%;
padding-bottom: 5px;
font-size: 16px;
}
.popup.popup_form .attach .file{
margin-left:10px;
margin-bottom: 0;
}
.popup.popup_form .attach p:not(.file){
color: #000;
width: 100%;
}
.popup.popup_form p + p{
padding-top:5px;
padding:0;
}
.popup.popup_form .file{
color: #656565;
margin-bottom: 18px;
display: inline-flex;
align-items: center;
font-size: 14px;
padding-bottom: 5px;
}
.popup-btn2.bulk + .file{
margin-bottom: 18px;
padding-bottom: 0;
}
.popup.popup_form .file button{
background: #e4e4e4 url(../images/icon-delete.png) no-repeat center center;
width: 24px;
height: 24px;
display: inline-block;
background: #e4e4e4;
width: 15px;
height: 15px;
border-radius: 50%;
position: relative;
top: 6px;
left: 5px;
border: none;
font-size: 10px;
margin: 0 0 0 5px;
}
.popup.popup_form.register{
@@ -1504,6 +1530,7 @@ header .user_wrap .user_info .logout {
.popup.popup_form.register .input_add div{
display: flex;
justify-content: space-between;
width:100%;
}
.popup.popup_form.register .input_add div input:nth-child(1){
@@ -1650,7 +1677,21 @@ header .user_wrap .user_info .logout {
.popup.popup_form table .input_add{
display: flex;
justify-content: space-between;
padding: 5px 0px 5px 0px;
padding: 5px 0px 5px 10px;
flex-wrap: wrap;
}
.popup.popup_form table .input_add input{
width: 85%;
}
.essential{
display: flex;
align-items: flex-start;
}
.essential span{
color:#eb008b;
padding-right: 3px;
}
textarea{
@@ -1668,5 +1709,32 @@ textarea:focus{
outline: 1px solid #000;
}
/*toggle*/
.contents .table table input[type="checkbox"] + label.toggle_switch { width: 72px; height: 28px; border-radius: 14px; border: 1px solid #b7b9be; background: #cecece; transition: all 0.3s; }
.contents .table table input[type="checkbox"] + label.toggle_switch:before { content:"미사용";position: absolute; display: block; width: 100%; height:100%; font-size: 14px; color:#fff; line-height: 28px; padding: 0 0 0 15px; font-family: 'SpoqaHanSansNeo', sans-serif; box-sizing: border-box; transition: all 0.3s; }
.contents .table table input[type="checkbox"] + label.toggle_switch:after { content:""; position: absolute; display: block; width:14px; height: 14px; top:50%; left: 7px; transform: translateY(-50%); background: #fff; border-radius: 100%; transition: all 0.5s; }
.contents .table table input[type="checkbox"]:checked + label.toggle_switch { border-color:#eb008b; background:#fff; }
.contents .table table input[type="checkbox"]:checked + label.toggle_switch:before { content:"사용"; color:#eb008b; padding: 0 15px 0 0; }
.contents .table table input[type="checkbox"]:checked + label.toggle_switch:after { background: #eb008b; left: 45px;}
/*datepicker*/
.datepicker{position: absolute; top: 336px; left: 381px; z-index: 1; display: block; padding: 24px 0; border: 1px solid #eceff1; background: #fff;box-shadow: 0 2px 4px 0 rgb(0 0 0 / 16%);border-radius: 5px;}
.datepicker .datepicker-head{margin-bottom: 28px;}
.datepicker .datepicker-title{text-align: center; font-size: 20px;}
.datepicker .datepicker-calender{margin: 0 30px; font-size: 12px;}
.datepicker .datepicker-calender td{padding: 7.5px; line-height: 15px;}
.datepicker .datepicker-calender td a{text-align: center; width: 15px; height: 15px; display: inline-block; color:#000;}
.datepicker .datepicker-calender tr td:last-child a{color:#5d7aff;}
.datepicker .datepicker-calender tr td:first-child a{color:#ff2e76;}
.datepicker .datepicker-head .datepicker-btn span{position: relative;}
.datepicker .datepicker-head .datepicker-prev span::after{position: absolute; left: 70px; top: 10px; content: ''; width: 10px; height: 10px; border-top: 2px solid #5f5f5f; border-right: 2px solid #5f5f5f; transform: rotate(225deg);}
.datepicker .datepicker-head .datepicker-next span::after{position: absolute; left: 185px; top: 10px; content: ''; width: 10px; height: 10px; border-top: 2px solid #5f5f5f; border-right: 2px solid #5f5f5f; transform: rotate(45deg);}
.datepicker .datepicker-calender td:hover:not(.disabled){background-color: #efefef; border-radius: 50%;}
.datepicker .datepicker-calender td:hover a{color:#000;}
.datepicker .datepicker-calender .today{background-color: #7c7c7c; border-radius: 50%;}
.datepicker .datepicker-calender .click{background-color: #eb008b; border-radius: 50%;}
.datepicker .datepicker-calender .click a, .datepicker .datepicker-calender .today a{color: #fff;}
.datepicker .datepicker-calender .disabled a{color:#c9c9c9 !important;}
/*# sourceMappingURL=style.css.map */

View File

@@ -1,45 +0,0 @@
<template>
<div class="container template_free">
<article id="content" class="content"></article>
<div tabindex="0" class="layer active">
<div tabindex="0" class="layer_cont error">
<div class="layer_body">
<div class="title_wrap center mar_b50">
<h5 class="h5_title" v-html="message">{{ message }}</h5>
</div>
<div class="btn_wrap mar_t20 center">
<a v-for="(branch, index) in branchList" :key="index" href="javascript:void(0);" class="btn mid" :class="branch.class" @click="branch.callback"><span>{{ branch.text }}</span></a>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
/*
branchList: [
{
text: "저장",
class: "bd_black",
callback: callback
},
.....
]
*/
export default {
name: "buttonBranch",
props: {
message: String,
branchList: {
text: Array,
class: String,
callback: Function
}
},
data() {
return {
}
}
}
</script>

View File

@@ -1,199 +0,0 @@
<template>
<section>
<!-- <div class="emulator_wrap"> -->
<div class="inner_emul">
<strong class="blind">미리보기</strong>
<div class="emulator_area">
<div class="emulator_cont">
<div class="img_area description">
<img :src="bgImageData" v-if="bgImageData && !retrivebgFlag">
<img :src="this.bgImageUrl" v-else-if="retrivebgFlag">
<img src="@/assets/images/common/img_placeholder02.png" v-else>
</div>
<div class="rcs_profile_area">
<img :src="profileImageData" v-if="profileImageData && !retriveProfileFlag">
<img :src="this.profileImageUrl" v-else-if="retriveProfileFlag">
<img src="@/assets/images/common/img_profile_blank.png" v-else>
</div>
<strong class="rcs_brand_name">{{this.brandInfoData.name}}</strong>
<div class="rcs_icon_area">
<span
v-for="(item, index) in visibleMenuItemList"
:key="index"
class="rcs_icon"
:class="`icon_${item.code.toLowerCase()}`"
></span>
</div>
<div class="rcs_desc_area" v-html="this.brandInfoData.descr"></div>
<div class="rcs_detail_area">
<dl>
<dt>전화번호</dt>
<dd>{{this.brandInfoData.tel}}</dd>
<dt>웹사이트</dt>
<dd>{{this.brandInfoData.url}}</dd>
<dt>이메일</dt>
<dd v-if="this.brandInfoData.email === '@'"></dd>
<dd v-else>{{this.brandInfoData.email}}</dd>
<dt>주소</dt>
<dd>{{this.brandInfoData.addrRegnNo}}{{this.brandInfoData.addrMngNo}}{{this.brandInfoData.addrDtl}}</dd>
</dl>
</div>
</div>
</div>
</div>
<!-- </div> -->
</section>
</template>
<script>
// 스크립트를 정의하는 부분
// 개발자 작업 영역
//import { getImageUrl } from '@/service/code'
// [ECMA6] export default 된 부분이 외부에서 import로 사용할 수 있게 된다.
export default {
// .vue 내부에서 사용되는 model
// model 기반으로 vue는 동작된다.
props: {
brandInfoData: {
type: Object
}
},
data() {
return {
bgImageData: '',
profileImageData: '',
profileImageUrl: '',
bgImageUrl: '',
retriveProfileFlag: false,
retrivebgFlag: false
}
},
created() {
// DOM이 만들어 지기 전 실행 되는 곳
// Data를 사전에 준비할 경우 사용된다.
},
mounted() {
// DOM에 해당 .vue가 들어가게 되면 실행 되는 곳
// onload 상태와 동일하다. DOM 이후에 조작할 경우 이곳에서 수행
},
watch: {
'brandInfoData.descr'() {
this.brandInfoData.descr = this.brandInfoData.descr.replace(/\(|\)|on.*\(|eval\(|javascript/gi,'')
.split('\n')
.join('<br />')
},
'brandInfoData.profileImgFile'() {
if (this.brandInfoData.profileImgFile) {
let reader = new FileReader()
let vm = this
let file = this.brandInfoData.profileImgFile
reader.onload = e => {
vm.profileImageData = e.target.result
}
reader.readAsDataURL(file)
} else {
this.profileImageData = ''
}
},
'brandInfoData.bgImgFile'() {
if (this.brandInfoData.bgImgFile) {
let reader = new FileReader()
let vm = this
let file = this.brandInfoData.bgImgFile
reader.onload = e => {
vm.bgImageData = e.target.result
}
reader.readAsDataURL(file)
} else {
this.bgImageData = ''
}
},
'brandInfoData.profileImgFileId'() {
if (
!jglib.isEmpty(this.brandInfoData.profileImgFileId) &&
!jglib.isEmpty(this.brandInfoData.profileImgFileNo)
) {
this.retriveProfileFlag = true
let reqObj = {
fileId: this.brandInfoData.profileImgFileId,
fileNo: this.brandInfoData.profileImgFileNo
}
getImageUrl(reqObj).then(res => {
this.profileImageUrl = res.downloadUrl
})
} else {
this.retriveProfileFlag = false
this.profileImageUrl = ''
}
},
'brandInfoData.bgImgFileId'() {
if (
!jglib.isEmpty(this.brandInfoData.bgImgFileId) &&
!jglib.isEmpty(this.brandInfoData.bgImgFileNo)
) {
this.retrivebgFlag = true
let reqObj = {
fileId: this.brandInfoData.bgImgFileId,
fileNo: this.brandInfoData.bgImgFileNo
}
getImageUrl(reqObj).then(res => {
this.bgImageUrl = res.downloadUrl
})
} else {
this.retrivebgFlag = false
this.bgImageUrl = ''
}
}
},
computed: {
// 값이 자주 변경됨에 따라, 관련되어 데이터 혹은 view가 바뀌어야 할 경우 사용
// method를 바로 연결하면 tic 단위로 계속 실행되기 때문에, 값이 변경할 때만 수행되고,
// cache로 남는 computed를 활용하는 것이 성능에 좋음
visibleMenuItemList() {
if (this.brandInfoData.menuItemList) {
return this.brandInfoData.menuItemList.filter(res => {
return res.visible
})
} else {
return []
}
}
},
methods: {
// .vue 내부에서 사용되는 함수를 정의한다.
// 이벤트에 따라 실행하거나, 내부적으로 사용되는 함수들을 정의한다.
getImageUrl: function(reqData) {
if (!isUseAPI()) {
return new Promise((resolve, reject) => {
let res = {
code: '99999999',
msg: 'not available in mockup'
}
resolve(res)
})
}
return new Promise((resolve, reject) => {
request({
url: `/file/${reqData.fileId}/${reqData.fileNo}`,
method: 'get'
})
.then(res => {
let imgData = {
fileName: res.result.fileName,
downloadUrl: res.result.downloadUrl
}
resolve(imgData)
})
.catch(res => {
reject('error in filedownload')
})
})
}
}
}
</script>

View File

@@ -1,235 +0,0 @@
<template>
<div
:class="kind ? 'block' : 'hidden'"
:style="'z-index: ${zIndex};'"
v-if="visible"
class="layer mid active"
>
<div class="layer_cont">
<div class="layer_head">
<h2>{{title}}</h2>
<slot name="header"></slot>
</div>
<div class="layer_body">
<slot>
<p>{{content}}</p>
</slot>
<!--scroll style="max-height:50vh; position: relative;" :settings="scrollSettings">
</scroll-->
</div>
<div class="layer_foot">
<div class="check_wrap" v-if="checkLabel">
<span class="custom_checkbox">
<input type="checkbox" id="checkbox01" v-model="checked">
<label for="checkbox01">{{checkLabel}}</label>
</span>
</div>
<slot name="footer">
<div class="btn_wrap center" v-if="yesBtn" style="margin-bottom: 20px;">
<a href="javascript:void(0)" @click="handleWrapperClick(kind, 'yes')" class="btn mid point">
<span>{{yesBtn}}</span>
</a>
</div>
<div class="btn_wrap center" v-if="noBtn" style="margin-bottom: 20px;">
<a href="javascript:void(0)" @click="handleWrapperClick(kind)" class="btn mid point">
<span>{{noBtn}}</span>
</a>
</div>
<!-- <a href="javascript:void(0)" @click="handleWrapperClick('close')" class="btn_close">
</a> -->
</slot>
</div>
</div>
</div>
</template>
<script>
import Scroll from 'vue-custom-scrollbar'
export default {
name: 'AddressCustomPopup',
components: {
Scroll
},
props: {
visible: {
type: Boolean,
require: true,
default: false
},
title: {
type: String,
require: true
},
checkLabel: {
type: String,
require: true
},
searchProp: {
type: Boolean,
require: true,
default: false
},
kind: {
type: String,
require: true
},
content: {
type: String,
require: false
},
widths: {
type: Object,
require: false,
default() {
return {
widthLg: 'w-1/2',
widthXl: 'w-2/5'
}
}
},
zIndex: {
type: Number,
require: false,
default() {
return 99999
}
},
marginTop: {
type: String,
require: false,
default() {
return '40' // px 단위
}
},
maxHeight: {
type: String,
require: false,
default() {
return '80' // px 단위
}
},
boxPX: {
type: String,
require: false,
default() {
return 'px-4'
}
},
boxPY: {
type: String,
require: false,
default() {
return 'py-8'
}
},
uiframeBox: {
type: Boolean,
require: false,
default: true
},
yesBtn: {
type: String,
require: false
},
noBtn: {
type: String,
require: false
},
close: Function,
inBody: {
type: Boolean,
require: false,
default: false
},
visibleScroll: {
type: Boolean,
default: true
}
},
data() {
return {
contents: false,
checked: true,
scrollSettings: {
suppressScrollY: false
}
}
},
created() {
this.scrollOps();
console.log("AddressCustomPoipup >", this.visible);
},
mounted() {
if (this.inBody) {
document.body.appendChild(this.$el)
}
},
watch: {
visibleScroll() {
this.scrollOps()
}
},
methods: {
handleWrapperClick(id, callback) {
this.$emit('close', {
id: id,
ok: callback === 'yes'
})
},
scrollOps() {
this.scrollSettings.suppressScrollY = !this.visibleScroll
}
}
}
</script>
<style lang="less" scoped>
.block {
animation: fadein 0.5s;
-webkit-animation: fadein 0.5s;
-ms-animation: fadein 0.5s;
}
.height_60 {
height: 60px;
padding-top: 10px;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
margin: 0 1rem;
width: calc(100% - 2rem);
height: 1px;
background: #eff3f6;
}
}
.content_h {
height: calc(100% - 50px);
}
@keyframes fadein {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadein {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@-ms-keyframes fadein {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
</style>

View File

@@ -1,332 +0,0 @@
<template>
<!-- 커스텀팝업 -->
<address-custom-popup
:visible="visible"
@close="closePopup"
kind="custom"
title="우편번호 찾기"
:noBtn="view.noBtnText"
:yesBtn="view.yesBtnText"
:zIndex="500"
boxPY="pb-5"
:visibleScroll="view.visibleScroll"
>
<template v-slot:header>
</template>
<div class="box_search_wrap" v-if="view.visibleSearch">
<div class="box_search_area">
<div class="filter_bundle_wrap">
<div class="filter_bundle">
<div class="cont_bundle full_width">
<span class="custom_input col_10" style="width: 80%">
<input type="text" placeholder="도로명 또는 건물명(아파트)을 입력해주세요"
ref="addressNm"
v-model="addressNm"
@keypress.enter="search">
</span>
<a href="javascript:void(0);" class="btn mid gray square col_2" @click="search"><span>검색</span></a>
</div>
</div>
</div>
</div>
</div>
<div class="mar_t20" v-if="!view.visibleDetails">
<!-- 검색 건수 -->
<p class="mar_t20" v-if="view.visibleTotalcount">
<span class="result_count left full_width">{{ page.totalcount }}</span>건이 검색되었습니다.
</p>
<!-- 디폴트 문구 -->
<div
class="mar_t20"
v-if="isVisibleDescription"
:class="{'line': view.visibleTotalcount}"
>
<p class="txt_17">도로명 주소와 건물번호를 함께 입력하시면 빠르게 결과를 확인하실 있습니다.</p>
<ul class="mar_t10 txt_16 text_gray2">
<li>도로명 + 건물번호 (: 송파대로 570)</li>
<li>도로명( : 강남대로, 중앙1로, 낙산1길)</li>
<li>건물명, 아파트명 (: 반포자이아파트)</li>
</ul>
</div>
<!-- 리스트 -->
<table class="tbl_row_type type3" v-if="!isVisibleDescription">
<colgroup>
<col style="width:100px;">
<col style="width:350px;">
<col style="width:auto;">
</colgroup>
<thead>
<tr>
<th>우편번호</th>
<th scope="row">도로명</th>
<th>지번</th>
</tr>
</thead>
<tbody>
<tr v-for="(row, index) in list" :key="`list-${index}`">
<td><a href="javascript:void(0);" @click="selectAddr(row)"> {{ row.zipCode }}</a></td>
<td><a href="javascript:void(0);" @click="selectAddr(row)"> {{ row.doroAddressNm }}</a></td>
<td><a href="javascript:void(0);" @click="selectAddr(row)"> {{ row.jibunAddressNm }}</a></td>
</tr>
</tbody>
</table>
<!-- 리스트 페이징 -->
<pagination
v-if="!isVisibleDescription"
:total="page.totalcount"
:current-page.sync="page.currentPage"
:pageSize="page.size"
rangeMax="5"
@change="changePage"
class="type2"
></pagination>
</div>
<!-- 상세주소 입력 -->
<div class="search_result" v-if="view.visibleDetails">
<table class="tbl_row_type">
<caption>
<strong>우편번호 찾기</strong>
<p>우편번호, 도로명/지번 주소</p>
</caption>
<colgroup>
<col style="width:120px;">
<col style="width:auto;">
</colgroup>
<tbody>
<tr>
<th scope="row">우편번호</th>
<td>{{ selectedAddr.zipCode }}</td>
</tr>
<tr>
<th scope="row">
도로명
<br>지번
</th>
<td>
<p>{{ selectedAddr.doroAddressNm }}</p>
<p>{{ selectedAddr.jibunAddressNm }}</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="box_search_area mar_t20" v-if="view.visibleDetails">
<div class="filter_bundle_wrap">
<div class="filter_bundle">
<div class="cont_bundle full_width">
<span class="custom_input full_width" style="width: 100%"><input type="text" placeholder="상세주소를 입력해주세요" v-model="selectedAddr.detail"></span>
</div>
</div>
</div>
<a href="javascript:void(0)" @click="handleWrapperClick" class="btn_close"></a>
</div>
</address-custom-popup>
</template>
<script>
import AddressCustomPopup from './AddressCustomPopup'
import jglib from '@/utils/jglib'
import commApi from '@/common/comm-api'
import Pagination from '@/components/Pagination'
export default {
name: 'AddressPopup',
components: {
AddressCustomPopup,
jglib,
Pagination
},
props: {
visible: {
type: Boolean,
default: true
}
},
data() {
return {
view: {
visibleSearch: true,
visibleTotalcount: false,
visibleDetails: false,
noBtnText: '닫기',
yesBtnText: '',
visibleScroll: false,
pagination: true,
},
addressNm: '',
list: [],
page: {
totalcount: 0,
currentPage: 5,
size: 5
},
selectedAddr: {
doroAddressNm: '',
jibunAddressNm: '',
zipCode: '',
detail: ''
}
}
},
computed: {
isVisibleDescription() {
return parseInt(this.page.totalcount) === 0
}
},
created() {
this.toggleButton(true);
},
mounted() {},
watch: {
'view.visibleDetails'(value) {
if (value) {
this.setVisibleScroll(false)
}
},
isVisibleDescription(value) {
if (!value) {
this.$nextTick(() => {
this.setVisibleScroll(true)
})
}
}
},
methods: {
search() {
// validate
if (jglib.isEmpty(this.addressNm)) {
alert(
'도로명 또는 건물명(아파트)을 입력해주세요'
).then(() => {
this.$refs.addressNm.focus()
})
return false
}
this.view.visibleDetails = false
this.page.currentPage = 1
this.retrieveAddress()
},
retrieveAddress() {
let params = {
page: this.page.currentPage,
psize: this.page.size,
addressNm: this.addressNm
}
commApi
.getAddressList(params)
.then(response => {
var rsp = response.data
if (rsp.success) {
this.list = rsp.data
this.page.totalcount = rsp.search.totalCount
this.view.visibleTotalcount = true
if (this.page.totalcount === 0) {
this.view.visibleDescription = true
} else {
this.view.visibleDescription = false
}
}
})
.catch(err => {
alert(err.desc)
})
},
selectAddr(addr) {
Object.assign(this.selectedAddr, addr)
this.view.visibleSearch = false
this.view.visibleDetails = true
this.toggleButton(false)
},
toggleButton(isClose) {
if (isClose) {
// 닫기 버튼
this.view.noBtnText = '닫기'
this.view.yesBtnText = ''
} else {
// 확인
this.view.noBtnText = ''
this.view.yesBtnText = '확인'
}
},
closePopup(res) {
if(res.id == 'close'){
this.$emit('closeAddressPopup', false);
} else {
if (this.view.visibleDetails && jglib.isEmpty(this.selectedAddr.detail)) {
alert('상세주소를 입력해 주세요.');
} else {
if (res.ok) {
let data = {
zipNo: this.selectedAddr.zipCode,
roadFullAddr: this.selectedAddr.doroAddressNm,
detail: this.selectedAddr.detail
}
this.$emit('getData', data)
} else {
this.$emit('closeAddressPopup', false);
}
}
}
},
changePage(page) {
this.page.currentPage = page
this.retrieveAddress()
},
setVisibleScroll(flag) {
this.view.visibleScroll = flag
},
handleWrapperClick() {
this.$emit('closeAddressPopup', false);
},
}
}
</script>
<style lang="less" scoped>
.layer .search_result .address_list {
border-top: 2px solid #666;
border-bottom: 1px solid #aaa;
letter-spacing: -0.02em;
}
.layer .search_result .address_list li + li {
border-top: 1px solid #ccc;
}
.layer .search_result .address_list li a {
display: flex;
align-items: center;
}
.layer .search_result .address_list li a:hover {
color: #f5f5f5;
}
.layer .search_result .address_list li a > .address {
width: ~'calc(100% - 70px)';
padding: 15px 10px 15px 20px;
box-sizing: border-box;
}
.layer .search_result .address_list li a > .zipcode {
width: 70px;
padding: 20px 20px 20px 0;
box-sizing: border-box;
text-align: right;
}
.layer .search_result .address_list li p {
display: flex;
align-items: flex-start;
flex-wrap: wrap;
line-height: 1.5;
}
.layer .search_result .address_list li p strong.title {
width: 45px;
margin-right: 20px;
}
.layer .search_result .address_list li p span {
width: ~'calc(100% - 65px)';
font-size: 16px;
color: #666;
font-weight: normal;
font-family: 'NotoSansLight';
}
</style>

View File

@@ -1,11 +1,11 @@
import ChannelList from '../views/ChannelList'
export default [
{
path: '/attractMgt/channelList',
component: ChannelList,
name: 'channelList',
meta: { public: true }
}
]
import ChannelList from '../views/ChannelList'
export default [
{
path: '/attractMgt/channelList',
component: ChannelList,
name: 'channelList',
meta: { public: true }
}
]

View File

@@ -1,107 +1,107 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">유치채널 목록조회</h3>
<p class="breadcrumb">시스템관리 &gt; 권한 관리</p>
</div>
<div class="info">
<div class="count"> <span>4</span></div>
<div class="button_group">
<button type="button" class="button blue add" onclick="location.href='system_right_add.html';">권한 추가</button>
</div>
</div>
<div class="table">
<table>
<colgroup>
<col width="10%"/>
<col width="20%"/>
<col width="20%"/>
<col width="15%"/>
<col width="20%"/>
<col width="15%"/>
</colgroup>
<thead>
<tr>
<th>NO</th>
<th>코드</th>
<th>권한명</th>
<th>상태</th>
<th>등록일</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>4</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey" onclick="location.href='system_right_modify.html';">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
<tr>
<td>3</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
<tr>
<td>2</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
<tr>
<td>1</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'channelList',
data() {
return {
};
},
components: {
},
destroyed() {
},
mounted() {
},
methods: {
}
};
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">유치채널 목록조회</h3>
<p class="breadcrumb">시스템관리 &gt; 권한 관리</p>
</div>
<div class="info">
<div class="count"> <span>4</span></div>
<div class="button_group">
<button type="button" class="button blue add" onclick="location.href='system_right_add.html';">권한 추가</button>
</div>
</div>
<div class="table">
<table>
<colgroup>
<col width="10%"/>
<col width="20%"/>
<col width="20%"/>
<col width="15%"/>
<col width="20%"/>
<col width="15%"/>
</colgroup>
<thead>
<tr>
<th>NO</th>
<th>코드</th>
<th>권한명</th>
<th>상태</th>
<th>등록일</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>4</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey" onclick="location.href='system_right_modify.html';">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
<tr>
<td>3</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
<tr>
<td>2</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
<tr>
<td>1</td>
<td>Admin_01</td>
<td>슈퍼관리자</td>
<td>사용</td>
<td>2022-03-10</td>
<td class="two_btn_group">
<button type="button" class="button grey">수정</button>
<button type="button" class="button white delete">삭제</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'channelList',
data() {
return {
};
},
components: {
},
destroyed() {
},
mounted() {
},
methods: {
}
};
</script>

View File

@@ -1,12 +1,12 @@
import CalcList from '../views/CalcList'
export default [
{
path: '/calculate/calcList',
component: CalcList,
name: 'calcList',
meta: { public: true }
},
]
import CalcList from '../views/CalcList'
export default [
{
path: '/calculate/calcList',
component: CalcList,
name: 'calcList',
meta: { public: true }
},
]

View File

@@ -1,165 +1,165 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">정산이력목록조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'calcList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
// params: {
// apprResult: '',
// searchType: '',
// searchText: '',
// startDate: '',
// endDate: ''
// },
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">정산이력목록조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'calcList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
// params: {
// apprResult: '',
// searchType: '',
// searchText: '',
// startDate: '',
// endDate: ''
// },
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
</script>

View File

@@ -1,14 +1,14 @@
<template>
<div>
<div class="dimmed modal26" @click="ModalClose();"></div>
<!--<div>-->
<!-- <div class="dimmed modal26" @click="ModalClose();"></div>-->
<div class="popup-wrap modal26">
<div class="popup modal26">
<div class="pop-head">
<h3 class="pop-tit">관리자명 조회</h3>
</div>
<!--
<div class="pop-cont-detail input_box">-->
<div class="pop-cont-detail">
<div class="pop-cont-detail input_box">
<!-- <div class="pop-cont-detail">-->
<label>ID</label>
<div class="input_search">
<input class="search-box" type="text" placeholder="아이디 입력" v-model.trim="madangId" ref="madangId">
@@ -25,7 +25,7 @@
</div>
</div>
<!--</div>-->
</template>
<script>
@@ -167,11 +167,6 @@ export default {
}
}
// import '../../../assets/css/layout.css?ver=02';
// import '../../../assets/css/contents.css?ver=01';
// import '../../../assets/css/common.css?ver=02';
// import '../../../assets/css/style.css';
</script>

View File

@@ -7,7 +7,7 @@
},
{
"key": "serviceId",
"name": "서비스 ID (관리자 ID)"
"name": "서비스 ID"
},
{
"key": "custNm",

View File

@@ -5,7 +5,7 @@
<h3 class="title">청약고객관리</h3>
<p class="breadcrumb">고객관리 &gt; 청약고객관리 &gt; 회원관리</p>
</div>
<div class="table table_form">
<form autocomplete="off">
<table>
@@ -92,7 +92,7 @@
<div class="button_group">
<button type="button" class="button blue add" @click="memberInsertPopOpen();">사용자 ID 생성</button>
<button type="button" class="button blue add" @click="excelPopOpen();">사용자 ID 대량생성</button>
<button type="button" class="button white del" @click="memberDelete">삭제</button>
<button type="button" class="button white del" @click="memberDelete();">삭제</button>
</div>
</div>
@@ -227,9 +227,10 @@ export default {
},
set(value) {
const selected = [];
if (value) {
this.list.forEach((com) => {
//var chkList = {userId :com.userId};
//console.log(chkList)
selected.push(com.userId);
});
}
@@ -322,18 +323,18 @@ export default {
this.$refs.memoTatalListPop.memoTotalModalOpen(this.row);
},
async memberDelete(){
// console.log(this.selected)
if(window.confirm('삭제 하시겠습니까?')){
this.row.list = this.selected;
var serviceId = this.adminId;
this.row.list = this.selected.map((row)=>({userId:row}));
this.row.adminId = this.adminId;
console.log(this.row);
try {
const response = await custMgtApi.deleteUser(this.row);
let response = await custMgtApi.deleteUser(this.row);
const result = response.data;
if (result != null && result.retCode == "0000") {
//alert("저장 완료하였습니다.");
alert("저장 완료하였습니다.");
this.memberDetail(serviceId);
}
} catch (error) {
console.log(error);

View File

@@ -9,7 +9,7 @@
<div class="title">기본정보</div>
</div>
<div class="table table_form">
<form autocomplete="off">
<!-- <form autocomplete="off">-->
<table>
<colgroup>
<col style="width:140px">
@@ -59,13 +59,13 @@
</tr>
</tbody>
</table>
</form>
<!-- </form>-->
</div>
<div class="info">
<div class="title">사용정보</div>
</div>
<div class="table table_form">
<form autocomplete="off">
<!-- <form autocomplete="off">-->
<table>
<colgroup>
<col style="width:140px">
@@ -110,7 +110,7 @@
</tbody>
</table>
</form>
<!-- </form>-->
</div>
<div class="info">
<div class="title">사용자 데이터</div>
@@ -151,7 +151,7 @@
<td colspan="2">
<div class="input-double button-double">
<input type="text" disabled v-model="userCnt">
<button type="button" class="button grey">사용자ID 확인</button>
<button type="button" class="button grey" @click="goMemberDetail">사용자ID 확인</button>
</div>
</td>
</tr>
@@ -169,11 +169,11 @@
<!--수정 확인 모달-->
<validation-confirm-pop ref="validationConfirmPop"></validation-confirm-pop>
<!--관리자명 조회 모달-->
<admin-nm-pop ref="adminNmPop"></admin-nm-pop>
</div>
</div>
<admin-nm-pop ref="adminNmPop"></admin-nm-pop>
</div>
</template>
<script>
@@ -367,11 +367,9 @@ export default {
searchIDPopOpen: function(){
this.$refs.adminNmPop.ModalOpen();
},
searchIDCalbackFnc: function(props){
console.log(props);
if(props.result){
this.doInsert(props.result);
}
goMemberDetail: function(props){
console.log(this.row);
this.$router.push({ name: 'memberAdminDetail', params: {serviceId : this.row.serviceId} });
},
}
}

View File

@@ -0,0 +1,190 @@
<template>
<!-- <div class="wrap bg-wrap"> -->
<div>
<div class="dimmed" @click="ModalClose();"></div>
<div class="popup-wrap">
<!-- 발신번호 차단 신규 등록 -->
<div class="popup modal52 popup_form">
<div class="pop-head">
<h3 class="pop-tit">발신번호 차단 신규 등록</h3>
</div>
<form autocomplete="off">
<table>
<tbody>
<tr>
<th>발신번호</th>
<td><input type="number" v-model.trim="blckSndrno" ref="blckSndrno"></td>
</tr>
<tr>
<th>발송타입</th>
<td>
<div class="select_box">
<select name="" id="" v-model.trim="sndblckTpCd" ref="sndblckTpCd">
<option v-for="(option, i) in tpType" v-bind:value="option.code" v-bind:key="i">
{{ option.codeNm }}
</option>
<!-- <option value="">문자</option>
<option value="">RCS</option> -->
</select>
</div>
</td>
</tr>
<tr>
<th>차단사유</th>
<td>
<div class="select_box">
<select name="" id="" v-model.trim="blckRsnCd" ref="blckRsnCd">
<option v-for="(option, i) in rsnType" v-bind:value="option.code" v-bind:key="i">
{{ option.codeNm }}
</option>
</select>
</div>
</td>
</tr>
<tr>
<th>메모</th>
<td class="sender"><textarea class="memo_text" v-model.trim="meno" ref="meno"></textarea></td>
</tr>
</tbody>
</table>
</form>
<div class="pop-btn2">
<button class="btn-pcolor" @click="doInsert">등록</button>
<button class="btn-default" @click="ModalClose();">취소</button>
</div>
</div>
</div>
<!-- 신규등록 - 등록 선택 -->
<div class="popup modal54">
<div class="pop-head">
<div class="pop-tit">신규등록</div>
</div>
<div class="pop-cont">
<div>작성된 내용으로 등록 하시겠습니까?</div>
</div>
<div class="pop-btn2">
<button class="btn-pcolor">확인</button>
<button class="btn-default" onclick="ModalClose();">취소</button>
</div>
</div>
</div>
</template>
<script>
import api from '@/service/api';
import riskMgtApi from '../service/riskMgtApi'
import lodash from "lodash";
export default {
data(){
return{
row: {},
rsnType: [],
tpType: [],
blckSndrno: '',
sndblckTpCd: '',
blckRsnCd: '',
meno: '',
// params: {
// 'blckSndrno' : ''
// ,'sndblckTpCd' : '01'
// ,'blckRsnCd' : '02'
// ,'meno' : ''
// }
}
},
create(){
// this.setCodeDate();
this.formReset();
},
methods :{
//모달 띄우기
ModalOpen(){
var dimmed = document.getElementsByClassName('dimmed');
dimmed[0].style.display = 'block';
var wrap = document.getElementsByClassName('popup-wrap');
wrap[0].style.display = 'block';
var obj = document.getElementsByClassName('modal52');
obj[0].style.display = 'block';
this.setCodeDate();
},
// 모달 끄기
ModalClose(){
//this.formReset();
var dimmed = document.getElementsByClassName('dimmed');
dimmed[0].style.display = 'none';
var wrap = document.getElementsByClassName('popup-wrap');
wrap[0].style.display = 'none';
var popup = document.getElementsByClassName('modal52');
popup[0].style.display = 'none';
},
// 저장 후 부모창 호출
toComplete(){
this.$parent.$refs.table.reloadData();
this.ModalClose();
},
async doInsert(){
if(this.doValidate() && window.confirm('등록 하시겠습니까?')){
try {
const response = await riskMgtApi.insertIntrcp(this.row);
const result = response.data;
if (result != null && result.retCode == "0000") {
alert('저장 하였습니다.');
this.toComplete();
}
} catch(err) {
console.log(err);
alert("실패 하였습니다.");
}
}
},
setCodeDate(){
// 발송타입
api.commCode({'grpCd' : 'SNDBLCK_TP_CD'}).then(response => {
this.tpType = response.data.data.list;
});
api.commCode({'grpCd' : 'SNDBLCK_RSN_CD'}).then(response => {
this.rsnType = response.data.data.list;
});
},
isNull(obj){
if(lodash.isNil(obj) || lodash.trim(obj) == ''){
return true;
}
return false;
},
doValidate(){
if(this.isNull(this.blckSndrno)){
alert("번호입력.");
this.$refs._blckSndrno.focus();
return false;
}
if(this.isNull(this.meno)){
alert('메모입력');
return false;
}
this.row.blckSndrno=this.blckSndrno;
this.row.sndblckTpCd = this.sndblckTpCd;
this.row.blckRsnCd = this.blckRsnCd;
this.row.meno=this.meno;
return true;
},
formReset(){
var type= this.insertType;
Object.assign(this.$data, this.$options.data());
this.insertType = type;
},
},
}
</script>
<style>
.popup-btn-wrap {width: 500px; margin: auto; padding: 100px 0;}
.popup-btn-wrap button {width: 100%; margin-bottom: 10px; height: 50px; border-radius: 5px; box-shadow: none; border: 1px solid #000; }
.popup-btn-wrap button:hover {background: #000; color: #fff;}
</style>

View File

@@ -0,0 +1,77 @@
<template>
<!-- 메시지 차단 신규 등록 -->
<div class="popup popup_form modal57">
<div class="pop-head">
<h3 class="pop-tit">메시지 차단 신규 등록</h3>
</div>
<form autocomplete="off">
<table>
<tbody>
<tr>
<th>차단문구</th>
<td class="input_add">
<input type="text" value="">
<button class="button white add" onclick=""></button>
</td>
</tr>
<tr>
<td colspan="2" class="registration">
<ul>
<li>
<span>도박<a href="#"><img src="./images/icon-del.png"/></a></span>
</li>
<li>
<span>광고<a href="#"><img src="./images/icon-del.png"/></a></span>
</li>
<li>
<span><a href="#"><img src="./images/icon-del.png"/></a></span>
</li>
</ul>
</td>
</tr>
<tr>
<th>조건</th>
<td>
<input type="radio" name="state" value="AND" id="popup_radio3" checked="">
<label for="popup_radio3">AND</label>
<input type="radio" name="state" value="OR" id="popup_radio4">
<label for="popup_radio4">OR</label>
</td>
</tr>
<tr>
<th>차단사유</th>
<td>
<div>
<select name="" id="">
<option value="일반">일반</option>
<option selected value="대출">대출</option>
<option value="의약품">의약품</option>
<option value="도박출">도박</option>
<option value="스미싱">스미싱</option>
<option value="기타">기타</option>
</select>
</div>
</td>
</tr>
<tr>
<th>메모</th>
<td class="sender"><textarea class="memo_text"></textarea></td>
</tr>
</tbody>
</table>
</form>
<div class="popup-btn2">
<button class="btn-pcolor">저장</button>
<button class="btn-default" onClick="ModalClose();">취소</button>
</div>
</div>
</template>
<script>
export default {
}
</script>

View File

@@ -0,0 +1,193 @@
<template>
<div>
<!-- s: 팝업 -->
<div class="dimmed modal53"></div>
<div class="popup-wrap modal53">
<!-- 발신번호 차단 수정 -->
<div class="popup modal53 popup_form">
<div class="pop-head">
<h3 class="pop-tit">발신번호 차단 수정</h3>
</div>
<form autocomplete="off">
<table>
<tbody>
<tr>
<th>발신번호</th>
<td><input type="text" v-model.trim="blckSndrno"></td>
</tr>
<tr>
<th>발송타입</th>
<td>
<div class="select_box">
<select name="" id="" v-model.trim="sndblckTpCd" ref="sndblckTpCd">
<option v-for="(option, i) in tpType" v-bind:value="option.code" v-bind:key="i">
{{ option.codeNm }}
</option>
</select>
</div>
</td>
</tr>
<tr>
<th>차단사유</th>
<td>
<div class="select_box">
<select name="" id="" v-model.trim="blckRsnCd" ref="blckRsnCd">
<option v-for="(option, i) in rsnType" v-bind:value="option.code" v-bind:key="i">
{{ option.codeNm }}
</option>
</select>
</div>
</td>
</tr>
<tr>
<th>메모</th>
<td><input type="text" value="고객사요청" v-model.trim="meno" ref="meno"></td>
</tr>
<tr>
<th>차단여부</th>
<td>
<input type="radio" name="state" value="해제" id="popup_radio1" checked="">
<label for="popup_radio1">해제</label>
<input type="radio" name="state" value="차단" id="popup_radio2">
<label for="popup_radio2">차단</label>
</td>
</tr>
</tbody>
</table>
</form>
<div class="pop-btn2 pop-btn3">
<button class="btn-pcolor" @click="IntrcpUpdateModal();">수정</button>
<button class="btn-default" @click="IntrcpDetailModalClose();">취소</button>
<button class="btn-p2color" @click="IntrcpDeleteModal()">삭제</button>
</div>
</div>
</div>
</div>
</template>
<script>
//import api from '@/service/api';
import riskMgtApi from '../service/riskMgtApi';
import api from '@/service/api';
export default {
data(){
return{
row: {},
rsnType: [],
tpType: [],
blckSndrno:'',
sndblckTpCd:'',
blckYn:'',
chgDt:'',
blckRsnCd:'',
regId: '',
meno: '',
}
},
methods :{
// 모달 띄우기
async IntrcpDetailModalOpen(props){
this.setCodeDate();
this.row.blckSndrno = props.blcksndrno;
try {
const response = await riskMgtApi.intrcpDetail(this.row);
const result = response.data;
console.log(result);
if (result != null && result.retCode == "0000") {
this.blckSndrno = result.data.blcksndrno;
this.sndblckTpCd = result.data.sndblckTpCd;
this.blckYn = result.data.blckYn;
this.blckRsnCd = result.data.blckRsnCd;
this.chgDt = result.data.chgDt;
this.regId = result.data.regId;
this.meno = result.data.meno;
}
} catch(err) {
alert("실패 하였습니다.");
}
var dimmed = document.getElementsByClassName('modal53');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'block';
}
},
setCodeDate(){
// 발송타입
api.commCode({'grpCd' : 'SNDBLCK_TP_CD'}).then(response => {
this.tpType = response.data.data.list;
});
api.commCode({'grpCd' : 'SNDBLCK_RSN_CD'}).then(response => {
this.rsnType = response.data.data.list;
});
},
IntrcpDetailModalClose(){
//this.formReset();
var dimmed = document.getElementsByClassName('modal53');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
},
async IntrcpDeleteModal(){
if(window.confirm('삭제 하시겠습니까?')){
try {
let response = await riskMgtApi.deleteIntrcp(this.row);
const result = response.data;
if (result != null && result.retCode == "0000") {
alert('삭제 하였습니다.');
// grid.reloadData();
// this.$refs.table.reloadData();
this.toComplete();
}
} catch(err) {
alert("실패 하였습니다.");
}
}
},
async IntrcpUpdateModal(){
if(window.confirm('수정 하시겠습니까?')){
try {
let response = await riskMgtApi.updateIntrcp(this.row);
const result = response.data;
if (result != null && result.retCode == "0000") {
alert('수정 하였습니다.');
this.toComplete();
}
} catch(err) {
alert("실패 하였습니다.");
}
}
},
// 모달 끄기
ModalClose(){
//this.formReset();
var dimmed = document.getElementsByClassName('dimmed');
dimmed[0].style.display = 'none';
var wrap = document.getElementsByClassName('popup-wrap');
wrap[0].style.display = 'none';
var popup = document.getElementsByClassName('modal53');
popup[0].style.display = 'none';
},
toComplete(){
this.$parent.$refs.table.reloadData();
alert('1');
this.ModalClose();
},
}
}
</script>
<style>
.popup-btn-wrap {width: 500px; margin: auto; padding: 100px 0;}
.popup-btn-wrap button {width: 100%; margin-bottom: 10px; height: 50px; border-radius: 5px; box-shadow: none; border: 1px solid #000; }
.popup-btn-wrap button:hover {background: #000; color: #fff;}
</style>

View File

@@ -1,33 +1,33 @@
import IntrcpList from '../views/IntrcpList'
import ZezNum from '../views/ZezNum'
import Msg from '../views/Msg'
import All from '../views/All'
export default [
{
path: '/riskMgt/sendNum/intrcpList',
component: IntrcpList,
name: 'intrcpList',
meta: { public: true }
},
{
path: '/riskMgt/sendNum/zezNum',
component: ZezNum,
name: 'zezNum',
meta: { public: true }
},
{
path: '/riskMgt/sendNum/msg',
component: Msg,
name: 'msg',
meta: { public: true }
},
{
path: '/riskMgt/sendNum/all',
component: All,
name: 'all',
meta: { public: true }
},
]
import IntrcpList from '../views/IntrcpList'
import ZezNum from '../views/ZezNum'
import Msg from '../views/Msg'
import All from '../views/All'
export default [
{
path: '/riskMgt/sendNum/intrcpList',
component: IntrcpList,
name: 'intrcpList',
meta: { public: true }
},
{
path: '/riskMgt/sendNum/zezNum',
component: ZezNum,
name: 'zezNum',
meta: { public: true }
},
{
path: '/riskMgt/sendNum/msg',
component: Msg,
name: 'msg',
meta: { public: true }
},
{
path: '/riskMgt/sendNum/all',
component: All,
name: 'all',
meta: { public: true }
},
]

View File

@@ -0,0 +1,27 @@
import httpClient from '@/common/http-client'
// HUBEZ_BO_API_11004 발신번호 차단 수정
const updateIntrcp = (params) => {
return httpClient.post('/api/v1/bo/riskMgt/sendNum/updateIntrcp', params, { withCredentials: false });
}
// HUBEZ_BO_API_11004 발신번호 차단 상세 정보 조회
const intrcpDetail = (params) => {
return httpClient.post('/api/v1/bo/riskMgt/sendNum/intrcpDetail', params, { withCredentials: false });
}
// HUBEZ_BO_API_11003 발신번호 차단 신규 등록
const insertIntrcp = (params) => {
return httpClient.post('/api/v1/bo/riskMgt/sendNum/insertIntrcp', params, { withCredentials: false });
}
const deleteIntrcp = (params) => {
return httpClient.post('/api/v1/bo/riskMgt/sendNum/deleteIntrcp', params, { withCredentials: false });
}
export default {
updateIntrcp,
intrcpDetail,
insertIntrcp,
deleteIntrcp
}

View File

@@ -1,165 +1,245 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">차단 내역 목록 조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'intrcpList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
// params: {
// apprResult: '',
// searchType: '',
// searchText: '',
// startDate: '',
// endDate: ''
// },
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">차단내역</h3>
<p class="breadcrumb">리스크관리 &gt; 차단 내역</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="group">
<div class="input_box cal one">
<label for="right" class="label">발송일</label>
<input class="" type="text" id="" placeholder="2022-10-12">
</div>
<button type="button" class="button grey btn-a">오늘</button>
<div class="select_box id">
<label for="right" class="label">차단사유</label>
<select name="" id="" v-model="grid.params.blckRsnCd">
<option value="" selected>전체</option>
<option value="">일반</option>
<option value="">대출</option>
<option value="">의약품</option>
<option value="">도박</option>
<option value="">스미싱</option>
<option value="">기타</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">차단구분</label>
<select name="" id="" v-model="grid.params.blckTpCd">
<option value="" selected>전체</option>
<option value="">발신번호차단</option>
<option value="">메시지차단</option>
<option value="">080수신번호차단</option>
</select>
</div>
</div>
<div class="group">
<div class="input_box">
<label for="right" class="label">발신번호</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.sndrno">
</div>
<div class="input_box">
<label for="right" class="label">수신번호</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.rcvno">
</div>
<div class="select_box">
<label for="right" class="label">상세검색</label>
<select name="" id="" v-model="grid.params.searchType1">
<option value="" selected>고객사명</option>
<option value="">사업자번호</option>
<option value="">발송ID</option>
</select>
</div>
<div class="input_box">
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText1">
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
</form>
<div class="info">
<div class="count"> <span> {{ totalItems }} </span>
<div class="select_box NumberSe">
<select name="" id="perpage" v-model="grid.pagePerRows" @keyup.enter="search">
<option value="20">20</option>
<option value="50" selected>50</option>
<option value="100">100</option>
</select>
</div>
</div>
</div>
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="grid.url"
:pagePerRows="grid.pagePerRows"
:initialRequest="grid.pagination"
:pagination="grid.pagination"
:isCheckbox="grid.isCheckbox"
:columns="grid.columns"
:noDataStr="grid.noDataStr"
:addCls="grid.addCls"
:header="grid.headder">
</custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
class customBRegNo {
constructor(props) {
this.props = props;
const el = document.createElement('td');
var bizrno = String(props.colValue);
el.innerText= bizrno;
if(bizrno.length == 10){
el.innerText= bizrno.substring(0,3)+'-'+bizrno.substring(3,5)+'-'+bizrno.substring(5,10)
}
this.el = el;
}
getElement() {
return this.el;
}
addEvent(selEl) {
}
}
export default {
name: 'intrcpList',
data() {
return {
totalItems: 0,
grid: {
url: '/api/v1/bo/riskMgt/web/intrcpList',
perPage: 20,
pagination: true,
isCheckbox: false,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '차단구분', childNames: [] },
{ header: '발송ID', childNames: [] },
{ header: '발신번호', childNames: [] },
{ header: '고객사명', childNames: [] },
{ header: '사업자번호', childNames: [] },
{ header: '수신번호', childNames: [] },
{ header: '차단사유', childNames: [] },
{ header: '발송일자', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'blckTpCd', header: '차단구분', align: 'center', width: 160 },
{ name: 'userId', header: '발송ID', align: 'center', width: 100, renderer: {type: customBRegNo}},
{ name: 'sndrno', header: '발신번호', align: 'center', width: 130},
{ name: 'custNm', header: '고객사명', align: 'center', width: 130},
{ name: 'bizrno', header: '사업자번호', align: 'center', width: 90, renderer: {type: customBRegNo} },
{ name: 'rcvno', header: '수신번호', align: 'center', width: 90 },
{ name: 'blckRsnCd', header: '차단사유', align: 'center', width: 90 },
{ name: 'blckDt', header: '발송일자', align: 'center', width: 90 },
],
noDataStr: '검색 결과가 없습니다.',
params: {
blckDt: '',
blckRsnCd: '',
blckTpCd: '',
sndrno: '',
rcvno: '',
searchType1: '',
searchText1: ''
},
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
this.$store.commit('searchcondition/updateSearchCondition', {
page: 1,
perPage: 20,
params: {
blckDt: '',
blckRsnCd: '',
blckTpCd: '',
sndrno: '',
rcvno: '',
searchType1: '',
searchText1: ''
}
});
},
created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
},
mounted() {
let page = 1;
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
let isKeep = false;
if(getCondition) {
this.grid.pagePerRows = getCondition.perPage;
this.grid.params = getCondition.params;
page = getCondition.page;
isKeep = true;
}
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.grid.params);
this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData();
},
sendStoreData: function() {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: {
blckDt: '',
blckRsnCd: '',
blckTpCd: '',
sndrno: '',
rcvno: '',
searchType1: '',
searchText1: ''
}
});
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
//console.log("getCondition : "+ getCondition.perPage);
}
},
beforeRouteLeave(to, from, next) {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP._currentPage);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: this.grid.params
});
// 라우트 하기전 실행
next();
}
};
</script>

View File

@@ -1,165 +1,251 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">발신번호 차단 목록 조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'intrcpList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
// params: {
// apprResult: '',
// searchType: '',
// searchText: '',
// startDate: '',
// endDate: ''
// },
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
</script>
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">발신번호 차단</h3>
<p class="breadcrumb">리스크관리 &gt; 발신번호 차단</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="group">
<div class="input_box">
<label for="regId" class="label">등록자</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.regId" v-on:keydown.enter.prevent="search"/>
</div>
<div class="select_box">
<label for="blckRsnCd" class="label">차단사유</label>
<select name="" id="blckRsnCd" v-model="grid.params.blckRsnCd" @keyup="search">
<option value="" selected>전체</option>
<option value="">일반</option>
<option value="">대출</option>
<option value="">의약품</option>
<option value="">도박</option>
<option value="">스미싱</option>
<option value="">기타</option>
</select>
</div>
</div>
<div class="group">
<div class="select_box">
<label for="right" class="label">차단여부</label>
<select name="" id="" v-model="grid.params.blckYn">
<option value="" selected>전체</option>
<option value="">차단</option>
<option value="">해제</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">발송타입</label>
<select name="" id="" v-model="grid.params.sndblckTpCd">
<option value="" selected>전체</option>
<option value="">공용</option>
<option value="">문자</option>
<option value="">RCS</option>
</select>
</div>
<div class="input_box">
<label for="right" class="label">발신번호</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.blcksndrno">
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems }}</span>
<div class="select_box NumberSe">
<select name="" id="" v-model="perPageCnt" @change="changePerPage()">
<option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{ option.text }}</option>
</select>
</div>
</div>
<div class="button_group">
<button type="button" class="button blue add" @click="ModalOpen()">신규등록</button>
</div>
</div>
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="grid.url"
:pagePerRows="grid.pagePerRows"
:initialRequest="grid.initialRequest"
:pagination="grid.pagination"
:isCheckbox="grid.isCheckbox"
:columns="grid.columns"
:noDataStr="grid.noDataStr"
:addCls="grid.addCls"
:header="grid.headder"
></custom-grid>
</div>
<insert-intrcp-pop ref="insertIntrcpPop"> </insert-intrcp-pop>
<intrcp-detail-popup ref="intrcpDetailPopup"></intrcp-detail-popup>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
import api from '@/service/api.js';
import intrcpDetailPopup from '../components/IntrcpDetailPopup';
import insertIntrcpPop from '../components/InsertIntrcpPop';
//import api from '../service/api';
class CustomATagRenderer {
constructor(props) {
this.props = props;
const el = document.createElement('a');
el.href = 'javascript:void(0);';
el.className = 'btn_text';
el.innerText= String(props.colValue)
this.el = el;
}
getElement() {
return this.el;
}
addEvent(selEl) {
selEl.addEventListener("click", () => {
const { callback } = this.props["cgrido" + this.props.colName].options;
callback(this.props);
});
}
}
export default {
name: 'intrcpList',
data() {
return {
totalItems: 0,
perPageCnt: 50,
options: [
{ text: '20', value: 20},
{ text: '50', value: 50},
{ text: '100', value: 100}
],
grid: {
url: '/api/v1/bo/riskMgt/sendNum/intrcpList',
perPage: 20,
pagination: true,
isCheckbox: false,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '발신번호', childNames: [] },
{ header: '차단여부', childNames: [] },
{ header: '발송타입', childNames: [] },
{ header: '최근수정일', childNames: [] },
{ header: '차단사유', childNames: [] },
{ header: '등록자', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 50 },
{ name: 'blcksndrno', header: '발신번호', align: 'center', width: 160,
renderer: { type: CustomATagRenderer, options: { callback: this.inDetailPop} } },
{ name: 'blckYn', header: '차단여부', align: 'center', width: 100},
{ name: 'sndblckTpCd', header: '발송타입', align: 'center', width: 100},
{ name: 'lastChgDt', header: '최근수정일', align: 'center', width: 100},
{ name: 'blckRsnCd', header: '차단사유', width: 100, cls: 'td_line' },
{ name: 'regId', header: '등록자', width: 150 }
],
noDataStr: '검색 결과가 없습니다.',
params: {
regId: '',
blckRsnCd: '',
blckYn: '',
sndblckTpCd: '',
blcksndrno: ''
},
excelHeader: []
}
};
},
components: {
customGrid: customGrid,
intrcpDetailPopup,
insertIntrcpPop
},
destroyed() {
},
created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.setCodeData();
// this.formReset();
},
mounted() {
let page = 1;
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
let isKeep = false;
if(getCondition) {
this.grid.pagePerRows = getCondition.perPage;
this.grid.params = getCondition.params;
page = getCondition.page;
isKeep = true;
}
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.grid.params);
this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData();
},
sendStoreData: function() {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP._currentPage);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: this.grid.params
});
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
console.log("getCondition : "+ getCondition.perPage);
},
setCodeData() {
// 상태 옵션 셋팅.
api.commCode({'grpCd' : 'SVCUSER_STTUS_CD'}).then(response => {
this.statType = response.data.data.list;
});
//
api.commCode({'grpCd' : 'SVCUSER_TP_CD'}).then(response => {
this.userType = response.data.data.list;
});
},
ModalOpen: function(){
this.$refs.insertIntrcpPop.ModalOpen();
},
inDetailPop(props) {
this.$refs.intrcpDetailPopup.IntrcpDetailModalOpen(props);
},
// formReset(){
// var type= this.insertType;
// Object.assign(this.$data, this.$options.data());
// this.insertType = type;
// },
},
beforeRouteLeave(to, from, next) {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP._currentPage);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: this.grid.params
});
// 라우트 하기전 실행
next();
}
};
</script>

View File

@@ -1,165 +1,183 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">메시지 차단 목록 조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'intrcpList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
// params: {
// apprResult: '',
// searchType: '',
// searchText: '',
// startDate: '',
// endDate: ''
// },
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">메시지 차단</h3>
<p class="breadcrumb">리스크관리 &gt; 메시지 차단</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="input_box">
<label for="regId" class="label">등록자</label>
<input class="search-box" type="text" id="regId" placeholder="검색어 입력" v-model="grid.params.regId" v-on:keydown.enter.prevent="search"/>
</div>
<div class="select_box">
<label for="blckRsnCd" class="label">차단사유</label>
<select name="" id="blckRsnCd" v-model="grid.params.blckRsnCd" @keyup="search">
<option value="" selected>전체</option>
<option value="">일반</option>
<option value="">대출</option>
<option value="">의약품</option>
<option value="">도박</option>
<option value="">스미싱</option>
<option value="">기타</option>
</select>
</div>
<div class="input_box">
<label for="word" class="label">차단메시지</label>
<input class="search-box" type="text" id="word" placeholder="검색어 입력" v-model="grid.params.word" v-on:keydown.enter.prevent="search" />
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span> {{ totalItems}} </span>
<div class="select_box NumberSe">
<select name="" id="perpage" v-model="grid.pagePerRows" @keyup.enter="search">
<option value="20">20</option>
<option value="50" selected>50</option>
<option value="100">100</option>
</select>
</div>
</div>
<div class="button_group">
<button type="button" class="button blue add">신규등록</button>
</div>
</div>
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="grid.url"
:perPage="grid.perPage"
:initialRequest="grid.initialRequest"
:pagination="grid.pagination"
:isCheckbox="grid.isCheckbox"
:columns="grid.columns"
:noDataStr="grid.noDataStr"
:addCls="grid.addCls"
:header="grid.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'intrcpList',
data() {
return {
totalItems: 0,
// 테이블 리스트 데이터
perPageCnt: 20,
grid: {
url: '/api/v1/bo/riskMgt/msg/intrcpList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '차단메시지', childNames: [] },
{ header: '차단여부', childNames: [] },
{ header: '마지막 수정일', childNames: [] },
{ header: '차단사유', childNames: [] },
{ header: '등록자', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'word', header: '차단메시지', align: 'center', width: 160 },
{ name: 'blckYn', header: '차단여부', align: 'center', width: 130},
{ name: 'lastChgDt', header: '마지막 수정일', align: 'center', width: 130},
{ name: 'blckRsnCd', header: '차단사유', align: 'center', width: 130},
{ name: 'regId', header: '등록자', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
params: {
regId: '',
blckRsnCd: '',
word: ''
},
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
this.$store.commit('searchcondition/updateSearchCondition', {
page: 1,
perPage: 20,
params: {
regId: '',
blckRsnCd: '',
word: ''
}
});
},
created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
},
mounted() {
let page = 1;
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
let isKeep = false;
if(getCondition) {
this.grid.pagePerRows = getCondition.perPage;
this.grid.params = getCondition.params;
page = getCondition.page;
isKeep = true;
}
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.grid.params);
this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData();
},
sendStoreData: function() {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: {
regId: '',
blckRsnCd: '',
word: ''
}
});
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
//console.log("getCondition : "+ getCondition.perPage);
}
},
beforeRouteLeave(to, from, next) {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP._currentPage);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: this.grid.params
});
// 라우트 하기전 실행
next();
}
};
</script>

View File

@@ -1,165 +1,191 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">080수신번호 차단 목록 조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'intrcpList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
// params: {
// apprResult: '',
// searchType: '',
// searchText: '',
// startDate: '',
// endDate: ''
// },
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">080 수신번호 차단</h3>
<p class="breadcrumb">리스크관리 &gt; 080 수신번호 차단</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="input_box">
<label for="search" class="label">고객사</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.custNm"/>
</div>
<div class="input_box">
<label for="search" class="label">인증코드</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.authcd080"/>
</div>
<div class="input_box">
<label for="right" class="label">수신번호</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.rcvblckno"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span> {{ totalItems }} </span>
<div class="select_box NumberSe">
<select name="" id="perpage" v-model="grid.pagePerRows" @keyup.enter="search">
<option value="20">20</option>
<option value="50" selected>50</option>
<option value="100">100</option>
</select>
</div>
</div>
</div>
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="grid.url"
:pagePerRows="grid.pagePerRows"
:initialRequest="grid.pagination"
:pagination="grid.pagination"
:isCheckbox="grid.isCheckbox"
:columns="grid.columns"
:noDataStr="grid.noDataStr"
:addCls="grid.addCls"
:header="grid.headder">
</custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
class customBRegNo {
constructor(props) {
this.props = props;
const el = document.createElement('td');
var bizrno = String(props.colValue);
el.innerText= bizrno;
if(bizrno.length == 10){
el.innerText= bizrno.substring(0,3)+'-'+bizrno.substring(3,5)+'-'+bizrno.substring(5,10)
}
this.el = el;
}
getElement() {
return this.el;
}
addEvent(selEl) {
}
}
export default {
name: 'intrcpList',
data() {
return {
totalItems: 0,
grid: {
url: '/api/v1/bo/riskMgt/zezNum/intrcpList',
perPage: 20,
pagination: true,
isCheckbox: false,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '고객사', childNames: [] },
{ header: '사업자번호', childNames: [] },
{ header: '인증코드', childNames: [] },
{ header: '수신번호', childNames: [] },
{ header: '등록일', childNames: [] },
{ header: '등록구분', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'custNm', header: '고객사', align: 'center', width: 160 },
{ name: 'bizrno', header: '사업자번호', align: 'center', width: 100, renderer: {type: customBRegNo}},
{ name: 'authcd080', header: '인증코드', align: 'center', width: 130},
{ name: 'rcvblckno', header: '수신번호', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', align: 'center', width: 130},
{ name: 'regTpCd', header: '등록구분', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
params: {
regTpCd: '',
authcd080: '',
rcvblckno: ''
},
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
this.$store.commit('searchcondition/updateSearchCondition', {
page: 1,
perPage: 20,
params: {
regTpCd: '',
authcd080: '',
rcvblckno: ''
}
});
},
created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
},
mounted() {
let page = 1;
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
let isKeep = false;
if(getCondition) {
this.grid.pagePerRows = getCondition.perPage;
this.grid.params = getCondition.params;
page = getCondition.page;
isKeep = true;
}
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.grid.params);
this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData();
},
sendStoreData: function() {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: {
regTpCd: '',
authcd080: '',
rcvblckno: ''
}
});
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
//console.log("getCondition : "+ getCondition.perPage);
}
},
beforeRouteLeave(to, from, next) {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP._currentPage);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: this.grid.params
});
// 라우트 하기전 실행
next();
}
};
</script>

View File

@@ -1,26 +1,26 @@
import ProfileList from '../views/ProfileList'
import NumberList from '../views/NumberList'
import ApprList from '../views/ApprList'
export default [
{
path: '/sendNumMgt/profileList',
component: ProfileList,
name: 'profileList',
meta: { public: true }
},
{
path: '/sendNumMgt/numberList',
component: NumberList,
name: 'numberList',
meta: { public: true }
},
{
path: '/sendNumMgt/apprList',
component: ApprList,
name: 'apprList',
meta: { public: true }
},
]
import ProfileList from '../views/ProfileList'
import NumberList from '../views/NumberList'
import ApprList from '../views/ApprList'
export default [
{
path: '/sendNumMgt/profileList',
component: ProfileList,
name: 'profileList',
meta: { public: true }
},
{
path: '/sendNumMgt/numberList',
component: NumberList,
name: 'numberList',
meta: { public: true }
},
{
path: '/sendNumMgt/apprList',
component: ApprList,
name: 'apprList',
meta: { public: true }
},
]

View File

@@ -1,165 +1,165 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">발신번호 승인 목록 조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'profileList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
// params: {
// apprResult: '',
// searchType: '',
// searchText: '',
// startDate: '',
// endDate: ''
// },
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">발신번호 승인 목록 조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'profileList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
// params: {
// apprResult: '',
// searchType: '',
// searchText: '',
// startDate: '',
// endDate: ''
// },
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
</script>

View File

@@ -1,165 +1,229 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">문자 발신 번호 목록 조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'profileList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
// params: {
// apprResult: '',
// searchType: '',
// searchText: '',
// startDate: '',
// endDate: ''
// },
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">문자 발신 번호 목록 조회</h3>
<p class="breadcrumb">발신번호관리 &gt; 문자 발신 번호 목록 조회</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="group">
<div class="select_box">
<label for="right" class="label">승인상태</label>
<select name="" id="sttusCd" v-model="grid.params.searchType1" @keyup.enter="search">
<option value="">전체</option>
<option value="01">승인대기</option>
<option value="02">승인완료</option>
<option value="03">반려</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">명의자 구분</label>
<select name="" id="nmineeDivCd" v-model="grid.params.searchType2" @keyup.enter="search">
<option value="">전체</option>
<option value="01">사업자</option>
<option value="02">타사업자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">인입채널</label>
<select name="" id="inchDivCd" v-model="grid.params.searchType3" @keyup.enter="search">
<option value="">전체</option>
<option value="01">홈페이지</option>
<option value="02">어드민</option>
</select>
</div>
<div class="select_box id">
<label for="right" class="label">상세검색</label>
<select name="" id="category" v-model="grid.params.searchType4" @keyup.enter="search">
<option value="bregNo">사업자번호</option>
<option selected value="regNo">발신번호</option>
<option value="custNm">고객사명</option>
</select>
</div>
<div class="input_box">
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText1" v-on:keydown.enter.prevent="search"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems }}</span>
<div class="select_box NumberSe">
<select name="" id="perPage" v-model="grid.pagePerRows" @keyup.enter="search">
<option value="20" selected>20</option>
<option value="50" >50</option>
<option value="100">100</option>
</select>
</div>
</div>
<div class="button_group">
<button type="button" class="button blue add" @click="numberRegPopOpen();">등록</button>
<button type="button" class="button white del">삭제</button>
</div>
</div>
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="grid.url"
:pagePerRows="grid.pagePerRows"
:initialRequest="grid.initialRequest"
:pagination="grid.pagination"
:isCheckbox="grid.isCheckbox"
:columns="grid.columns"
:noDataStr="grid.noDataStr"
:addCls="grid.addCls"
:header="grid.headder"
></custom-grid>
</div>
<!-- <number-reg-pop ref="numberRegPop"> </number-reg-pop> -->
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
// import NumberRegPop from '../components/NumberRegPop';
export default {
name: 'numberList',
data() {
return {
row: {},
authType: [],
statType: [],
cate2Code: "",
totalItems: 0,
// 테이블 리스트 데이터
perPageCnt: 20,
grid: {
url: '/api/v1/bo/sendNumMgt/numberList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '고객사명', childNames: [] },
{ header: '관리자ID', childNames: [] },
{ header: '등록자ID', childNames: [] },
{ header: '사업자번호', childNames: [] },
{ header: '명의자 구분', childNames: [] },
{ header: '인입채널', childNames: [] },
{ header: '발신번호', childNames: [] },
{ header: '승인상태', childNames: [] },
{ header: '등록일자', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 50 },
{ name: 'custNm', header: '고객사명', align: 'left', width: 50 },
{ name: 'adminId', header: '관리자ID', align: 'left', width: 100 },
{ name: 'register', header: '등록자ID', align: 'left', width: 100 },
{ name: 'bRegNo', header: '사업자번호', align: 'center', width: 100},
{ name: 'nmineeDivCd', header: '명의자 구분', align: 'center', width: 100},
{ name: 'inchDivCd', header: '인입채널', align: 'center', width: 100},
{ name: 'regNo', header: '발신번호', align: 'center', width: 100},
{ name: 'sttusCd', header: '승인상태', align: 'center', width: 100},
{ name: 'regDt', header: '등록일', width: 100, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
params: {
searchType1: '',
searchType2: '',
searchType3: '',
searchType4: '',
searchText1: '',
pagePerRows: '',
page: ''
},
excelHeader: []
}
};
},
components: {
customGrid: customGrid,
// NumberRegPop
},
created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
},
destroyed() {
this.$store.commit('searchcondition/updateSearchCondition', {
page: 1,
perPage: 20,
params: {
searchType1: '',
searchType2: '',
searchType3: '',
searchType4: '',
searchText1: '',
pagePerRows: '',
page: ''}
});
},
mounted() {
let page = 1;
// 페이지 정보 및 검색 조건
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
// store에 저장된 페이지 정보 및 검색 조건을 불러오기
let isKeep = false;
if (getCondition) {
this.grid.pagePerRows = getCondition.perPage;
this.grid.params = getCondition.params;
page = getCondition.page;
isKeep = true;
}
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.grid.params);
this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData();
},
sendStoreData: function() {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: {
searchType1: '',
searchType2: '',
searchType3: '',
searchType4: '',
searchText1: '',
pagePerRows: '',
page: ''
}
});
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
},
numberRegPopOpen: function(){
this.$refs.numberRegPop.ModalOpen();
},
},
beforeRouteLeave(to, from, next) {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP._currentPage);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: this.grid.params
});
// 라우트 하기전 실행
next();
}
};
</script>

View File

@@ -1,165 +1,208 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">발신 프로필 목록 조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'profileList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
// params: {
// apprResult: '',
// searchType: '',
// searchText: '',
// startDate: '',
// endDate: ''
// },
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
<template>
<div class="wrap main_wrap">
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">발신프로필관리</h3>
<p class="breadcrumb">발신번호관리 &gt; 발신프로필관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="stat" class="label">상태</label>
<select name="" id="stat" v-model="grid.params.searchType1" @keyup="search">
<option value="전체">전체</option>
<option value="A">사용</option>
<option value="N">미사용</option>
<option value="H">휴면</option>
<option value="D">삭제</option>
</select>
</div>
<div class="select_box id">
<label for="searchType" class="label">상세검색</label>
<select name="" id="searchType" v-model="grid.params.searchType2" @keyup="search">
<option value="custNm">고객사명</option>
<option value="bregNo">사업자번호</option>
<option value="sendProfile">발신프로필</option>
</select>
</div>
<div class="input_box id">
<label for="search" class="label">검색어</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText1" v-on:keydown.enter.prevent="search" />
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span> {{ totalItems}} </span>
<div class="select_box NumberSe">
<select name="" id="perpage" v-model="grid.pagePerRows" @keyup.enter="search">
<option value="20">20</option>
<option value="50" selected>50</option>
<option value="100">100</option>
</select>
</div>
</div>
</div>
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="grid.url"
:pagePerRows="grid.pagePerRows"
:initialRequest="grid.pagination"
:pagination="grid.pagination"
:isCheckbox="grid.isCheckbox"
:columns="grid.columns"
:noDataStr="grid.noDataStr"
:addCls="grid.addCls"
:header="grid.headder">
</custom-grid>
</div>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
class customBRegNo {
constructor(props) {
this.props = props;
const el = document.createElement('td');
var bregNo = String(props.colValue);
el.innerText= bregNo;
if(bregNo.length == 10){
el.innerText= bregNo.substring(0,3)+'-'+bregNo.substring(3,5)+'-'+bregNo.substring(5,10)
}
this.el = el;
}
getElement() {
return this.el;
}
addEvent(selEl) {
}
}
export default {
name: 'profileList',
data() {
return {
row: {},
authType: [],
statType: [],
cate2Code: "",
totalItems: 0,
// 테이블 리스트 데이터
perPageCnt: 20,
grid: {
url: '/api/v1/bo/sendNumMgt/profileList',
perPage: 20,
pagination: true,
isCheckbox: false,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '고객사명', childNames: [] },
{ header: '사업자번호', childNames: [] },
{ header: '발신프로필', childNames: [] },
{ header: '발신프로필key', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] },
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 50 },
{ name: 'custNm', header: '고객사명', align: 'center', width: 200 },
{ name: 'bregNo', header: '사업자번호', align: 'center', width: 100, renderer: {type: customBRegNo}},
{ name: 'sendProfile', header: '발신프로필', align: 'center', width: 100},
{ name: 'sendProfileKey', header: '발신프로필key', align: 'center', width: 100},
{ name: 'stat', header: '상태', width: 100, cls: 'td_line' },
{ name: 'regDt', header: '등록일', align: 'center', width: 150},
],
noDataStr: '검색 결과가 없습니다.',
params: {
searchType1: '',
searchType2: 'custNm',
searchText1: ''
},
excelHeader: []
}
};
},
components: {
customGrid: customGrid,
},
destroyed() {
this.$store.commit('searchcondition/updateSearchCondition', {
page: 1,
perPage: 20,
params: {
searchType1: '',
searchType2: '',
searchText1: ''
}
});
},
created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/istAuthChk", true);
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
},
mounted() {
let page = 1;
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
let isKeep = false;
if(getCondition) {
this.grid.pagePerRows = getCondition.perPage;
this.grid.params = getCondition.params;
page = getCondition.page;
isKeep = true;
}
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.grid.params);
this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData();
},
sendStoreData: function() {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: {
searchType1: '',
searchType2: '',
searchText1: ''
}
});
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
//console.log("getCondition : "+ getCondition.perPage);
}
},
beforeRouteLeave(to, from, next) {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP._currentPage);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: this.grid.params
});
// 라우트 하기전 실행
next();
}
};
</script>

File diff suppressed because it is too large Load Diff

View File

@@ -1,433 +1,433 @@
<template>
<article id="content" class="content">
<ul class="breadcrumb">
<li class="home">
<a href="javascript:void(0);"></a>
</li>
<li>
<a href="javascript:void(0);">발송통계</a>
</li>
<li>
<span>상품별통계</span>
</li>
</ul>
<div class="title_area">
<h2>상품별통계</h2>
</div>
<div class="tab_wrap">
<ul class="tab_nav">
<li class="active">
<a href="javascript:void(0);" :style="isAdmin ? '' : 'cursor:default'">상품별통계</a>
</li>
<li>
<a
href="javascript:void(0);"
@click="isAdmin ? toMove('tmpltStatics') : ''"
:style="isAdmin ? '' : 'cursor:default'"
>포맷ID별통계</a>
</li>
<li>
<a href="javascript:void(0);" @click="toMove('userStatics')">사용자별통계</a>
</li>
<li>
<a href="javascript:void(0);" @click="toMove('campaignStatics')">캠페인ID별통계</a>
</li>
</ul>
</div>
<div class="box_search_area">
<div class="filter_bundle_wrap">
<div class="filter_bundle">
<strong class="tit_bundle">발송일</strong>
<div class="cont_bundle center">
<div class="box_select_period">
<div class="period_wrap">
<span class="custom_input icon_date">
<vuejs-datepicker
:language="ko"
:format="customFormatter"
:disabled-dates="disabledSDate"
:minimumView="sDateDiv"
:maximumView="sDateDiv"
v-model="startDate"
@selected="selectedStartDate(0)"
@closed="closeDate('start')"
></vuejs-datepicker>
</span>
<span class="hypen">~</span>
<span class="custom_input icon_date">
<vuejs-datepicker
:language="ko"
:format="customFormatter"
:disabled-dates="disabledEDate"
:minimumView="sDateDiv"
:maximumView="sDateDiv"
v-model="endDate"
@selected="selectedEndDate(0)"
@closed="closeDate('end')"
></vuejs-datepicker>
</span>
</div>
<div class="radio_wrap">
<span class="custom_radio">
<input
type="radio"
name="radioDate"
id="day"
v-model="sDateDiv"
value="day"
checked
>
<label for="day">일별</label>
</span>
<span class="custom_radio">
<input type="radio" name="radioDate" id="month" v-model="sDateDiv" value="month">
<label for="month">월별</label>
</span>
<span class="custom_radio">
<input type="radio" name="radioDate" id="year" v-model="sDateDiv" value="year">
<label for="year">년별</label>
</span>
</div>
</div>
</div>
</div>
</div>
<!-- end of filter_bundle_wrap -->
<div class="btn_wrap center">
<a href="javascript:void(0);" class="btn mid point" @click="searchSummary">
<span>조회</span>
</a>
</div>
</div>
<!-- end of box_search_area -->
<div class="cont_flex_bundle bottom mar_b20">
<div class="result_date left col_6">
<span>
<em class="date">{{ customFormatter(startDate) }}</em> 부터
<em class="date">{{ customFormatter(endDate) }}</em>까지의 전송/성공/성공률 입니다.
</span>
</div>
<div class="btn_wrap right col_6">
<a href="javascript:void(0)" class="btn sml bd_gray icon_down_doc" @click="excelDown()">
<span>엑셀 다운로드</span>
</a>
</div>
</div>
<custom-grid
ref="table"
:url="grid.url"
:perPage="grid.perPage"
:pagination="grid.pagination"
:header="grid.header"
:columns="grid.columns"
:noDataStr="grid.noDataStr"
:initialRequest="grid.initialRequest"
:addBodyAlign="grid.addAlign"
:addBodyTmplt="grid.summary"
></custom-grid>
</article>
</template>
<script>
import moment from 'moment';
import customGrid from '@/components/CustomGrid';
import api from '../service/api';
import xlsx from '@/common/excel';
export default {
name: 'staticsList',
data() {
return {
ko: vdp_translation_ko.js,
bbsCategoryType: 'PROD',
sDateDiv: 'day',
startDate: new Date(),
endDate: new Date(),
disabledSDate: { from: new Date() },
disabledEDate: { from: new Date() },
isAdmin: true,
grid: {
url: '/api/statics/list',
initialRequest: false,
pagination: true,
perPage: 10,
header: [
[
{ header: 'NO', childNames: [] },
{ header: '날짜', childNames: [] },
{ header: '스타일 템플릿', childNames: ['cellTmpltTot', 'cellTmpltRateStr'] },
{ header: '서술 템플릿', childNames: ['descTmpltTot', 'descTmpltRateStr'] },
{ header: '기본 템플릿', childNames: ['freeTmpltTot', 'freeTmpltRateStr'] },
{ header: '템플릿 소계', childNames: ['subSumTmpltTot', 'subSumTmpltRateStr'] },
{ header: 'RCS SMS', childNames: ['smsTot', 'smsRateStr'] },
{ header: 'RCS LMS', childNames: ['lmsTot', 'lmsRateStr'] },
{ header: 'RCS MMS', childNames: ['mmsTot', 'mmsRateStr'] },
{ header: '포맷 소계', childNames: ['formatTot', 'formatRateStr'] },
{ header: 'Fallback SMS', childNames: ['fbSmsTot', 'fbSmsRateStr'] },
{ header: 'Fallback LMS', childNames: ['fbLmsTot', 'fbLmsRateStr'] }
]
],
columns: [
{ name: 'seq', header: 'NO', width: 100 },
{ name: 'ymd', header: '날짜', width: 100 },
{ name: 'cellTmpltTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'cellTmpltRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'descTmpltTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'descTmpltRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'freeTmpltTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'freeTmpltRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'subSumTmpltTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'subSumTmpltRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'smsTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'smsRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'lmsTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'lmsRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'mmsTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'mmsRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'formatTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'formatRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'fbSmsTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'fbSmsRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'fbLmsTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'fbLmsRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' }
],
summary: '',
addAlign: '',
noDataStr: '검색 결과가 없습니다.',
params: {},
excelHeader: []
}
};
},
created() {
api.selectUserRoleInfo().then(response => {
const respList = response.data.data;
if (response.data.success && respList != null && respList.length > 0) {
let adminStr = respList[0].selIsAdmin;
if (typeof adminStr != undefined && adminStr != null && adminStr == 'false') {
this.isAdmin = false;
}
} else {
this.isAdmin = true;
}
});
this.getExcelHeader();
},
mounted() {
// 합계 조회
this.searchSummary();
},
components: {
'vuejs-datepicker': vuejsDatepicker,
customGrid: customGrid
},
methods: {
getExcelHeader() {
// 헤더를 mockup으로 관리한다.
api.getExcelHeader(this.bbsCategoryType).then(res => {
this.excelHeader = res;
});
},
customFormatter: function(date) {
if (this.sDateDiv == 'month') {
return moment(date).format('YYYY-MM');
} else if (this.sDateDiv == 'year') {
return moment(date).format('YYYY');
} else {
return moment(date).format('YYYY-MM-DD');
}
},
toPage(lifeCycle) {
const page = this.isNull(this.$route.params.page) ? 1 : this.$route.params.page;
try {
this.$refs.table.readData(page, this.grid.params);
} catch (error) {
console.log(lifeCycle, error);
}
},
toMove(routeName) {
this.$router.push({ name: routeName, params: { page: 1, searchText: '' } });
},
search: function(data) {
this.grid.params = {
sDate: moment(this.startDate).format('YYYYMMDD'),
eDate: moment(this.endDate).format('YYYYMMDD'),
dateDiv: this.sDateDiv
};
this.$refs.table.search(this.grid.params);
},
searchSummary: function(data) {
let summaryList = {};
this.grid.params = {
sDate: moment(this.startDate).format('YYYYMMDD'),
eDate: moment(this.endDate).format('YYYYMMDD'),
dateDiv: this.sDateDiv
};
api
.selectStaticsSummary(this.grid.params)
.then(response => {
const respList = response.data.data;
if (response.data.success && respList != null && respList.length > 0) {
summaryList = respList[0];
this.grid.addAlign = 'TOP';
let addBody = '';
addBody += '<tr>';
addBody += '<td colspan="2">합계</td>';
addBody += '<td>' + summaryList.cellTmpltTot + '</td>';
addBody += '<td>' + summaryList.cellTmpltSucc + '<br>(' + summaryList.cellTmpltRate + '%)</td>';
addBody += '<td>' + summaryList.descTmpltTot + '</td>';
addBody += '<td>' + summaryList.descTmpltSucc + '<br>(' + summaryList.descTmpltRate + '%)</td>';
addBody += '<td>' + summaryList.freeTmpltTot + '</td>';
addBody += '<td>' + summaryList.freeTmpltSucc + '<br>(' + summaryList.freeTmpltRate + '%)</td>';
addBody += '<td>' + summaryList.subSumTmpltTot + '</td>';
addBody += '<td>' + summaryList.subSumTmpltSucc + '<br>(' + summaryList.subSumTmpltRate + '%)</td>';
addBody += '<td>' + summaryList.smsTot + '</td>';
addBody += '<td>' + summaryList.smsSucc + '<br>(' + summaryList.smsRate + '%)</td>';
addBody += '<td>' + summaryList.lmsTot + '</td>';
addBody += '<td>' + summaryList.lmsSucc + '<br>(' + summaryList.lmsRate + '%)</td>';
addBody += '<td>' + summaryList.mmsTot + '</td>';
addBody += '<td>' + summaryList.mmsSucc + '<br>(' + summaryList.mmsRate + '%)</td>';
addBody += '<td>' + summaryList.formatTot + '</td>';
addBody += '<td>' + summaryList.formatSucc + '<br>(' + summaryList.formatRate + '%)</td>';
addBody += '<td>' + summaryList.fbSmsTot + '</td>';
addBody += '<td>' + summaryList.fbSmsSucc + '<br>(' + summaryList.fbSmsRate + '%)</td>';
addBody += '<td>' + summaryList.fbLmsTot + '</td>';
addBody += '<td>' + summaryList.fbLmsSucc + '<br>(' + summaryList.fbLmsRate + '%)</td>';
addBody += '</tr>';
this.grid.summary = addBody;
} else {
this.grid.addAlign = '';
this.grid.summary = '';
}
})
.finally(() => {
this.search();
});
},
selectedStartDate(day) {
if (this.startDate > this.endDate) {
this.startDate = this.endDate;
}
},
selectedEndDate(day) {
if (day != undefined && day != null) {
this.periodDay = day;
}
},
closeDate(type) {
if (type != undefined && type != null) {
if (type == 'start') {
this.disabledSDate = { from: this.endDate };
this.disabledEDate = { to: this.startDate, from: this.endDate };
} else if (type == 'end') {
this.disabledSDate = { from: this.endDate };
this.disabledEDate = { to: this.startDate, from: new Date() };
}
}
},
async getExcelDataDown() {
try {
let response;
const params = {
startDtXls: moment(this.startDate).format('YYYYMMDD'),
endDtXls: moment(this.endDate).format('YYYYMMDD'),
sDate: this.startDate,
eDate: this.endDate,
dateDiv: this.sDateDiv
};
response = await api.selectStaticsXls(params);
const result = response.data;
if (result != null && result.success) {
if (!this.isNull(result.data)) {
return result.data;
}
}
return false;
} catch (err) {
return false;
}
}, // end of getExcelDataDown
async getExcelSumData() {
// let sumBody = '';
try {
let response = await api.selectStaticsSummary(this.grid.params);
const result = response.data;
if (result != null && result.success) {
if (!this.isNull(result.data)) {
return result.data;
}
}
return false;
} catch (err) {
return false;
}
},
async excelDown() {
if (this.$refs.table.getData().length <= 0) {
alert('조회된 데이터가 없습니다.');
return false;
}
let today = moment().format('YYYYMMDDHHmmss');
const saveFileName = `상품별통계_${today}.xlsx`;
const data = await this.getExcelDataDown();
const sumData = await this.getExcelSumData();
let options = {
header: this.excelHeader,
summary: {
isUse: true,
position: 'first',
data: sumData,
title: { replaceKeys: ['seq', 'ymd'], name: '합계' }
},
dataOrder: 'header' // header, data, ['no', 'sendnum', 'errorDesc']
};
xlsx.export(data, saveFileName, options).then(() => {});
}
}
};
</script>
<template>
<article id="content" class="content">
<ul class="breadcrumb">
<li class="home">
<a href="javascript:void(0);"></a>
</li>
<li>
<a href="javascript:void(0);">발송통계</a>
</li>
<li>
<span>상품별통계</span>
</li>
</ul>
<div class="title_area">
<h2>상품별통계</h2>
</div>
<div class="tab_wrap">
<ul class="tab_nav">
<li class="active">
<a href="javascript:void(0);" :style="isAdmin ? '' : 'cursor:default'">상품별통계</a>
</li>
<li>
<a
href="javascript:void(0);"
@click="isAdmin ? toMove('tmpltStatics') : ''"
:style="isAdmin ? '' : 'cursor:default'"
>포맷ID별통계</a>
</li>
<li>
<a href="javascript:void(0);" @click="toMove('userStatics')">사용자별통계</a>
</li>
<li>
<a href="javascript:void(0);" @click="toMove('campaignStatics')">캠페인ID별통계</a>
</li>
</ul>
</div>
<div class="box_search_area">
<div class="filter_bundle_wrap">
<div class="filter_bundle">
<strong class="tit_bundle">발송일</strong>
<div class="cont_bundle center">
<div class="box_select_period">
<div class="period_wrap">
<span class="custom_input icon_date">
<vuejs-datepicker
:language="ko"
:format="customFormatter"
:disabled-dates="disabledSDate"
:minimumView="sDateDiv"
:maximumView="sDateDiv"
v-model="startDate"
@selected="selectedStartDate(0)"
@closed="closeDate('start')"
></vuejs-datepicker>
</span>
<span class="hypen">~</span>
<span class="custom_input icon_date">
<vuejs-datepicker
:language="ko"
:format="customFormatter"
:disabled-dates="disabledEDate"
:minimumView="sDateDiv"
:maximumView="sDateDiv"
v-model="endDate"
@selected="selectedEndDate(0)"
@closed="closeDate('end')"
></vuejs-datepicker>
</span>
</div>
<div class="radio_wrap">
<span class="custom_radio">
<input
type="radio"
name="radioDate"
id="day"
v-model="sDateDiv"
value="day"
checked
>
<label for="day">일별</label>
</span>
<span class="custom_radio">
<input type="radio" name="radioDate" id="month" v-model="sDateDiv" value="month">
<label for="month">월별</label>
</span>
<span class="custom_radio">
<input type="radio" name="radioDate" id="year" v-model="sDateDiv" value="year">
<label for="year">년별</label>
</span>
</div>
</div>
</div>
</div>
</div>
<!-- end of filter_bundle_wrap -->
<div class="btn_wrap center">
<a href="javascript:void(0);" class="btn mid point" @click="searchSummary">
<span>조회</span>
</a>
</div>
</div>
<!-- end of box_search_area -->
<div class="cont_flex_bundle bottom mar_b20">
<div class="result_date left col_6">
<span>
<em class="date">{{ customFormatter(startDate) }}</em> 부터
<em class="date">{{ customFormatter(endDate) }}</em>까지의 전송/성공/성공률 입니다.
</span>
</div>
<div class="btn_wrap right col_6">
<a href="javascript:void(0)" class="btn sml bd_gray icon_down_doc" @click="excelDown()">
<span>엑셀 다운로드</span>
</a>
</div>
</div>
<custom-grid
ref="table"
:url="grid.url"
:perPage="grid.perPage"
:pagination="grid.pagination"
:header="grid.header"
:columns="grid.columns"
:noDataStr="grid.noDataStr"
:initialRequest="grid.initialRequest"
:addBodyAlign="grid.addAlign"
:addBodyTmplt="grid.summary"
></custom-grid>
</article>
</template>
<script>
import moment from 'moment';
import customGrid from '@/components/CustomGrid';
import api from '../service/api';
import xlsx from '@/common/excel';
export default {
name: 'staticsList',
data() {
return {
ko: vdp_translation_ko.js,
bbsCategoryType: 'PROD',
sDateDiv: 'day',
startDate: new Date(),
endDate: new Date(),
disabledSDate: { from: new Date() },
disabledEDate: { from: new Date() },
isAdmin: true,
grid: {
url: '/api/statics/list',
initialRequest: false,
pagination: true,
perPage: 10,
header: [
[
{ header: 'NO', childNames: [] },
{ header: '날짜', childNames: [] },
{ header: '스타일 템플릿', childNames: ['cellTmpltTot', 'cellTmpltRateStr'] },
{ header: '서술 템플릿', childNames: ['descTmpltTot', 'descTmpltRateStr'] },
{ header: '기본 템플릿', childNames: ['freeTmpltTot', 'freeTmpltRateStr'] },
{ header: '템플릿 소계', childNames: ['subSumTmpltTot', 'subSumTmpltRateStr'] },
{ header: 'RCS SMS', childNames: ['smsTot', 'smsRateStr'] },
{ header: 'RCS LMS', childNames: ['lmsTot', 'lmsRateStr'] },
{ header: 'RCS MMS', childNames: ['mmsTot', 'mmsRateStr'] },
{ header: '포맷 소계', childNames: ['formatTot', 'formatRateStr'] },
{ header: 'Fallback SMS', childNames: ['fbSmsTot', 'fbSmsRateStr'] },
{ header: 'Fallback LMS', childNames: ['fbLmsTot', 'fbLmsRateStr'] }
]
],
columns: [
{ name: 'seq', header: 'NO', width: 100 },
{ name: 'ymd', header: '날짜', width: 100 },
{ name: 'cellTmpltTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'cellTmpltRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'descTmpltTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'descTmpltRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'freeTmpltTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'freeTmpltRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'subSumTmpltTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'subSumTmpltRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'smsTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'smsRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'lmsTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'lmsRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'mmsTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'mmsRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'formatTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'formatRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'fbSmsTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'fbSmsRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' },
{ name: 'fbLmsTot', header: '발송', width: 90, cls: 'td_line' },
{ name: 'fbLmsRateStr', header: '성공<br>(성공률)', width: 90, cls: 'td_line' }
],
summary: '',
addAlign: '',
noDataStr: '검색 결과가 없습니다.',
params: {},
excelHeader: []
}
};
},
created() {
api.selectUserRoleInfo().then(response => {
const respList = response.data.data;
if (response.data.success && respList != null && respList.length > 0) {
let adminStr = respList[0].selIsAdmin;
if (typeof adminStr != undefined && adminStr != null && adminStr == 'false') {
this.isAdmin = false;
}
} else {
this.isAdmin = true;
}
});
this.getExcelHeader();
},
mounted() {
// 합계 조회
this.searchSummary();
},
components: {
'vuejs-datepicker': vuejsDatepicker,
customGrid: customGrid
},
methods: {
getExcelHeader() {
// 헤더를 mockup으로 관리한다.
api.getExcelHeader(this.bbsCategoryType).then(res => {
this.excelHeader = res;
});
},
customFormatter: function(date) {
if (this.sDateDiv == 'month') {
return moment(date).format('YYYY-MM');
} else if (this.sDateDiv == 'year') {
return moment(date).format('YYYY');
} else {
return moment(date).format('YYYY-MM-DD');
}
},
toPage(lifeCycle) {
const page = this.isNull(this.$route.params.page) ? 1 : this.$route.params.page;
try {
this.$refs.table.readData(page, this.grid.params);
} catch (error) {
console.log(lifeCycle, error);
}
},
toMove(routeName) {
this.$router.push({ name: routeName, params: { page: 1, searchText: '' } });
},
search: function(data) {
this.grid.params = {
sDate: moment(this.startDate).format('YYYYMMDD'),
eDate: moment(this.endDate).format('YYYYMMDD'),
dateDiv: this.sDateDiv
};
this.$refs.table.search(this.grid.params);
},
searchSummary: function(data) {
let summaryList = {};
this.grid.params = {
sDate: moment(this.startDate).format('YYYYMMDD'),
eDate: moment(this.endDate).format('YYYYMMDD'),
dateDiv: this.sDateDiv
};
api
.selectStaticsSummary(this.grid.params)
.then(response => {
const respList = response.data.data;
if (response.data.success && respList != null && respList.length > 0) {
summaryList = respList[0];
this.grid.addAlign = 'TOP';
let addBody = '';
addBody += '<tr>';
addBody += '<td colspan="2">합계</td>';
addBody += '<td>' + summaryList.cellTmpltTot + '</td>';
addBody += '<td>' + summaryList.cellTmpltSucc + '<br>(' + summaryList.cellTmpltRate + '%)</td>';
addBody += '<td>' + summaryList.descTmpltTot + '</td>';
addBody += '<td>' + summaryList.descTmpltSucc + '<br>(' + summaryList.descTmpltRate + '%)</td>';
addBody += '<td>' + summaryList.freeTmpltTot + '</td>';
addBody += '<td>' + summaryList.freeTmpltSucc + '<br>(' + summaryList.freeTmpltRate + '%)</td>';
addBody += '<td>' + summaryList.subSumTmpltTot + '</td>';
addBody += '<td>' + summaryList.subSumTmpltSucc + '<br>(' + summaryList.subSumTmpltRate + '%)</td>';
addBody += '<td>' + summaryList.smsTot + '</td>';
addBody += '<td>' + summaryList.smsSucc + '<br>(' + summaryList.smsRate + '%)</td>';
addBody += '<td>' + summaryList.lmsTot + '</td>';
addBody += '<td>' + summaryList.lmsSucc + '<br>(' + summaryList.lmsRate + '%)</td>';
addBody += '<td>' + summaryList.mmsTot + '</td>';
addBody += '<td>' + summaryList.mmsSucc + '<br>(' + summaryList.mmsRate + '%)</td>';
addBody += '<td>' + summaryList.formatTot + '</td>';
addBody += '<td>' + summaryList.formatSucc + '<br>(' + summaryList.formatRate + '%)</td>';
addBody += '<td>' + summaryList.fbSmsTot + '</td>';
addBody += '<td>' + summaryList.fbSmsSucc + '<br>(' + summaryList.fbSmsRate + '%)</td>';
addBody += '<td>' + summaryList.fbLmsTot + '</td>';
addBody += '<td>' + summaryList.fbLmsSucc + '<br>(' + summaryList.fbLmsRate + '%)</td>';
addBody += '</tr>';
this.grid.summary = addBody;
} else {
this.grid.addAlign = '';
this.grid.summary = '';
}
})
.finally(() => {
this.search();
});
},
selectedStartDate(day) {
if (this.startDate > this.endDate) {
this.startDate = this.endDate;
}
},
selectedEndDate(day) {
if (day != undefined && day != null) {
this.periodDay = day;
}
},
closeDate(type) {
if (type != undefined && type != null) {
if (type == 'start') {
this.disabledSDate = { from: this.endDate };
this.disabledEDate = { to: this.startDate, from: this.endDate };
} else if (type == 'end') {
this.disabledSDate = { from: this.endDate };
this.disabledEDate = { to: this.startDate, from: new Date() };
}
}
},
async getExcelDataDown() {
try {
let response;
const params = {
startDtXls: moment(this.startDate).format('YYYYMMDD'),
endDtXls: moment(this.endDate).format('YYYYMMDD'),
sDate: this.startDate,
eDate: this.endDate,
dateDiv: this.sDateDiv
};
response = await api.selectStaticsXls(params);
const result = response.data;
if (result != null && result.success) {
if (!this.isNull(result.data)) {
return result.data;
}
}
return false;
} catch (err) {
return false;
}
}, // end of getExcelDataDown
async getExcelSumData() {
// let sumBody = '';
try {
let response = await api.selectStaticsSummary(this.grid.params);
const result = response.data;
if (result != null && result.success) {
if (!this.isNull(result.data)) {
return result.data;
}
}
return false;
} catch (err) {
return false;
}
},
async excelDown() {
if (this.$refs.table.getData().length <= 0) {
alert('조회된 데이터가 없습니다.');
return false;
}
let today = moment().format('YYYYMMDDHHmmss');
const saveFileName = `상품별통계_${today}.xlsx`;
const data = await this.getExcelDataDown();
const sumData = await this.getExcelSumData();
let options = {
header: this.excelHeader,
summary: {
isUse: true,
position: 'first',
data: sumData,
title: { replaceKeys: ['seq', 'ymd'], name: '합계' }
},
dataOrder: 'header' // header, data, ['no', 'sendnum', 'errorDesc']
};
xlsx.export(data, saveFileName, options).then(() => {});
}
}
};
</script>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,33 +1,33 @@
import StaticsList from "../components/StaticsList";
import TmpltStatics from "../components/TmpltStaticsList";
import UserStatics from "../components/UserStaticsList";
import CampaignStaticsList from "../components/CampaignStaticsList";
export default [
{
//
path: '/view/stat/prod',
name: 'staticsList',
component: StaticsList,
},
{
//
path: '/view/stat/tmplt',
name: 'tmpltStatics',
component: TmpltStatics,
},
{
//
path: '/view/stat/usr',
name: 'userStatics',
component: UserStatics,
},
{
//
path: '/view/stat/camp',
name: 'campaignStatics',
component: CampaignStaticsList,
},
]
import StaticsList from "../components/StaticsList";
import TmpltStatics from "../components/TmpltStaticsList";
import UserStatics from "../components/UserStaticsList";
import CampaignStaticsList from "../components/CampaignStaticsList";
export default [
{
//
path: '/view/stat/prod',
name: 'staticsList',
component: StaticsList,
},
{
//
path: '/view/stat/tmplt',
name: 'tmpltStatics',
component: TmpltStatics,
},
{
//
path: '/view/stat/usr',
name: 'userStatics',
component: UserStatics,
},
{
//
path: '/view/stat/camp',
name: 'campaignStatics',
component: CampaignStaticsList,
},
]

View File

@@ -1,147 +1,147 @@
import httpClient from '@/common/http-client';
import prodExcelHeader from './mock/prodExcelHeader';
import tmplExcelHeader from './mock/tmplExcelHeader';
import userExcelHeader from './mock/userExcelHeader';
import campExcelHeader from './mock/campExcelHeader';
//import lodash from "lodash";
const selectStatics = params => {
return httpClient.get('/api/statics/list');
};
const selectStaticsSummary = params => {
return httpClient.get('/api/statics/list/summary', {
params: { dateDiv: params.dateDiv, sDate: params.sDate, eDate: params.eDate }
});
};
const selectStaticsXls = params => {
return httpClient.post('/api/statics/xls/list', params);
};
const selectTmpltlist = params => {
return httpClient.get('/api/statics/tmpltList');
};
const selectTmpltXlslist = params => {
return httpClient.post('/api/statics/tmpltList/xls/list', params);
};
const selectTmpltSummary = params => {
return httpClient.get('/api/statics/tmpltList/summary', {
params: {
dateDiv: params.dateDiv,
sDate: params.sDate,
eDate: params.eDate,
searchProdCd: params.searchProdCd,
searchMsgbaseId: params.searchMsgbaseId
// searchProdCd: params.searchProdCd != undefined ? params.searchProdCd : null,
// searchMsgbaseId: params.searchMsgbaseId != undefined ? params.searchMsgbaseId : null
}
});
};
const selectUserlist = params => {
return httpClient.get('/api/statics/userList');
};
const selectUserXlslist = params => {
return httpClient.post('/api/statics/userList/xls/list', params);
};
const selectUserSummary = params => {
return httpClient.get('/api/statics/userList/summary', {
params: {
dateDiv: params.dateDiv,
sDate: params.sDate,
eDate: params.eDate,
searchDeptNm: params.searchDeptNm,
searchUserId: params.searchUserId
}
});
};
const selectCampXlslist = params => {
return httpClient.post('/api/statics/campList/xls/list', params);
};
const selectCampSummary = params => {
return httpClient.get('/api/statics/campList/summary', {
params: {
dateDiv: params.dateDiv,
sDate: params.sDate,
eDate: params.eDate,
searchCampId: params.searchCampId
}
});
};
const selectCodeProdList = codeGrp => {
// ES6에서는 key와 value가 같을경우. get은 아래와 같이 가능.
return httpClient.get('/api/statics/code/list', { params: { codeGrp } });
};
const selectMsgbaseIdList = searchProdCd => {
//console.log("api selectMsgbaseIdList productcode : " + searchProdCd);
return httpClient.get('/api/statics/msgbaseid/list', { params: { searchProdCd } });
};
const selectDeptNmList = () => {
return httpClient.get('/api/statics/deptNm/list');
};
const selectUserRoleInfo = () => {
return httpClient.get('/api/statics/userId/roleId');
};
const selectUserIdList = searchDeptNm => {
//console.log("api selectUserIdList searchDeptNm : " + searchDeptNm);
return httpClient.get('/api/statics/userId/list', { params: { searchDeptNm } });
};
const getExcelHeader = category => {
// 엑셀에 출력할 Header 정보를 Mockup 데이터로 관리한다.
return new Promise(function(resolve, reject) {
let header = [];
switch (category) {
case 'TMPL':
header = tmplExcelHeader.header;
break;
case 'USER':
header = userExcelHeader.header;
break;
case 'CAMPAIGN':
header = campExcelHeader.header;
break;
default:
header = prodExcelHeader.header;
break;
}
resolve(header);
});
};
export default {
selectStatics,
selectStaticsXls,
selectStaticsSummary,
selectTmpltlist,
selectTmpltXlslist,
selectTmpltSummary,
selectUserlist,
selectUserXlslist,
selectUserSummary,
selectCampXlslist,
selectCampSummary,
selectCodeProdList,
selectMsgbaseIdList,
selectDeptNmList,
selectUserIdList,
selectUserRoleInfo,
getExcelHeader
};
import httpClient from '@/common/http-client';
import prodExcelHeader from './mock/prodExcelHeader';
import tmplExcelHeader from './mock/tmplExcelHeader';
import userExcelHeader from './mock/userExcelHeader';
import campExcelHeader from './mock/campExcelHeader';
//import lodash from "lodash";
const selectStatics = params => {
return httpClient.get('/api/statics/list');
};
const selectStaticsSummary = params => {
return httpClient.get('/api/statics/list/summary', {
params: { dateDiv: params.dateDiv, sDate: params.sDate, eDate: params.eDate }
});
};
const selectStaticsXls = params => {
return httpClient.post('/api/statics/xls/list', params);
};
const selectTmpltlist = params => {
return httpClient.get('/api/statics/tmpltList');
};
const selectTmpltXlslist = params => {
return httpClient.post('/api/statics/tmpltList/xls/list', params);
};
const selectTmpltSummary = params => {
return httpClient.get('/api/statics/tmpltList/summary', {
params: {
dateDiv: params.dateDiv,
sDate: params.sDate,
eDate: params.eDate,
searchProdCd: params.searchProdCd,
searchMsgbaseId: params.searchMsgbaseId
// searchProdCd: params.searchProdCd != undefined ? params.searchProdCd : null,
// searchMsgbaseId: params.searchMsgbaseId != undefined ? params.searchMsgbaseId : null
}
});
};
const selectUserlist = params => {
return httpClient.get('/api/statics/userList');
};
const selectUserXlslist = params => {
return httpClient.post('/api/statics/userList/xls/list', params);
};
const selectUserSummary = params => {
return httpClient.get('/api/statics/userList/summary', {
params: {
dateDiv: params.dateDiv,
sDate: params.sDate,
eDate: params.eDate,
searchDeptNm: params.searchDeptNm,
searchUserId: params.searchUserId
}
});
};
const selectCampXlslist = params => {
return httpClient.post('/api/statics/campList/xls/list', params);
};
const selectCampSummary = params => {
return httpClient.get('/api/statics/campList/summary', {
params: {
dateDiv: params.dateDiv,
sDate: params.sDate,
eDate: params.eDate,
searchCampId: params.searchCampId
}
});
};
const selectCodeProdList = codeGrp => {
// ES6에서는 key와 value가 같을경우. get은 아래와 같이 가능.
return httpClient.get('/api/statics/code/list', { params: { codeGrp } });
};
const selectMsgbaseIdList = searchProdCd => {
//console.log("api selectMsgbaseIdList productcode : " + searchProdCd);
return httpClient.get('/api/statics/msgbaseid/list', { params: { searchProdCd } });
};
const selectDeptNmList = () => {
return httpClient.get('/api/statics/deptNm/list');
};
const selectUserRoleInfo = () => {
return httpClient.get('/api/statics/userId/roleId');
};
const selectUserIdList = searchDeptNm => {
//console.log("api selectUserIdList searchDeptNm : " + searchDeptNm);
return httpClient.get('/api/statics/userId/list', { params: { searchDeptNm } });
};
const getExcelHeader = category => {
// 엑셀에 출력할 Header 정보를 Mockup 데이터로 관리한다.
return new Promise(function(resolve, reject) {
let header = [];
switch (category) {
case 'TMPL':
header = tmplExcelHeader.header;
break;
case 'USER':
header = userExcelHeader.header;
break;
case 'CAMPAIGN':
header = campExcelHeader.header;
break;
default:
header = prodExcelHeader.header;
break;
}
resolve(header);
});
};
export default {
selectStatics,
selectStaticsXls,
selectStaticsSummary,
selectTmpltlist,
selectTmpltXlslist,
selectTmpltSummary,
selectUserlist,
selectUserXlslist,
selectUserSummary,
selectCampXlslist,
selectCampSummary,
selectCodeProdList,
selectMsgbaseIdList,
selectDeptNmList,
selectUserIdList,
selectUserRoleInfo,
getExcelHeader
};

View File

@@ -1,203 +1,203 @@
{
"header": [
[
{
"key": "seq",
"name": "NO",
"rowspan": "2"
},
{
"key": "campaignId",
"name": "캠페인ID",
"rowspan": "2"
},
{
"key": "msgbaseName",
"name": "템플릿명",
"rowspan": "2"
},
{
"key": "msgbaseId",
"name": "템플릿아이디",
"rowspan": "2"
},
{
"key": "ymd",
"name": "날짜",
"rowspan": "2"
},
{
"key": "",
"name": "스타일 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "서술 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "기본 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "템플릿 소계",
"colspan": "3"
},
{
"key": "",
"name": "RCS SMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS LMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS MMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS 소계",
"colspan": "3"
},
{
"key": "",
"name": "Fallback SMS",
"colspan": "3"
},
{
"key": "",
"name": "Fallback LMS",
"colspan": "3"
}
],
[
{
"key": "cellTmpltTot",
"name": "발송"
},
{
"key": "cellTmpltSucc",
"name": "성공"
},
{
"key": "cellTmpltRate",
"name": "성공률(%)"
},
{
"key": "descTmpltTot",
"name": "발송"
},
{
"key": "descTmpltSucc",
"name": "성공"
},
{
"key": "descTmpltRate",
"name": "성공률(%)"
},
{
"key": "freeTmpltTot",
"name": "발송"
},
{
"key": "freeTmpltSucc",
"name": "성공"
},
{
"key": "freeTmpltRate",
"name": "성공률(%)"
},
{
"key": "subSumTmpltTot",
"name": "발송"
},
{
"key": "subSumTmpltSucc",
"name": "성공"
},
{
"key": "subSumTmpltRate",
"name": "성공률(%)"
},
{
"key": "smsTot",
"name": "발송"
},
{
"key": "smsSucc",
"name": "성공"
},
{
"key": "smsRate",
"name": "성공률(%)"
},
{
"key": "lmsTot",
"name": "발송"
},
{
"key": "lmsSucc",
"name": "성공"
},
{
"key": "lmsRate",
"name": "성공률(%)"
},
{
"key": "mmsTot",
"name": "발송"
},
{
"key": "mmsSucc",
"name": "성공"
},
{
"key": "mmsRate",
"name": "성공률(%)"
},
{
"key": "formatTot",
"name": "발송"
},
{
"key": "formatSucc",
"name": "성공"
},
{
"key": "formatRate",
"name": "성공률(%)"
},
{
"key": "fbSmsTot",
"name": "발송"
},
{
"key": "fbSmsSucc",
"name": "성공"
},
{
"key": "fbSmsRate",
"name": "성공률(%)"
},
{
"key": "fbLmsTot",
"name": "발송"
},
{
"key": "fbLmsSucc",
"name": "성공"
},
{
"key": "fbLmsRate",
"name": "성공률(%)"
}
]
]
}
{
"header": [
[
{
"key": "seq",
"name": "NO",
"rowspan": "2"
},
{
"key": "campaignId",
"name": "캠페인ID",
"rowspan": "2"
},
{
"key": "msgbaseName",
"name": "템플릿명",
"rowspan": "2"
},
{
"key": "msgbaseId",
"name": "템플릿아이디",
"rowspan": "2"
},
{
"key": "ymd",
"name": "날짜",
"rowspan": "2"
},
{
"key": "",
"name": "스타일 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "서술 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "기본 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "템플릿 소계",
"colspan": "3"
},
{
"key": "",
"name": "RCS SMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS LMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS MMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS 소계",
"colspan": "3"
},
{
"key": "",
"name": "Fallback SMS",
"colspan": "3"
},
{
"key": "",
"name": "Fallback LMS",
"colspan": "3"
}
],
[
{
"key": "cellTmpltTot",
"name": "발송"
},
{
"key": "cellTmpltSucc",
"name": "성공"
},
{
"key": "cellTmpltRate",
"name": "성공률(%)"
},
{
"key": "descTmpltTot",
"name": "발송"
},
{
"key": "descTmpltSucc",
"name": "성공"
},
{
"key": "descTmpltRate",
"name": "성공률(%)"
},
{
"key": "freeTmpltTot",
"name": "발송"
},
{
"key": "freeTmpltSucc",
"name": "성공"
},
{
"key": "freeTmpltRate",
"name": "성공률(%)"
},
{
"key": "subSumTmpltTot",
"name": "발송"
},
{
"key": "subSumTmpltSucc",
"name": "성공"
},
{
"key": "subSumTmpltRate",
"name": "성공률(%)"
},
{
"key": "smsTot",
"name": "발송"
},
{
"key": "smsSucc",
"name": "성공"
},
{
"key": "smsRate",
"name": "성공률(%)"
},
{
"key": "lmsTot",
"name": "발송"
},
{
"key": "lmsSucc",
"name": "성공"
},
{
"key": "lmsRate",
"name": "성공률(%)"
},
{
"key": "mmsTot",
"name": "발송"
},
{
"key": "mmsSucc",
"name": "성공"
},
{
"key": "mmsRate",
"name": "성공률(%)"
},
{
"key": "formatTot",
"name": "발송"
},
{
"key": "formatSucc",
"name": "성공"
},
{
"key": "formatRate",
"name": "성공률(%)"
},
{
"key": "fbSmsTot",
"name": "발송"
},
{
"key": "fbSmsSucc",
"name": "성공"
},
{
"key": "fbSmsRate",
"name": "성공률(%)"
},
{
"key": "fbLmsTot",
"name": "발송"
},
{
"key": "fbLmsSucc",
"name": "성공"
},
{
"key": "fbLmsRate",
"name": "성공률(%)"
}
]
]
}

View File

@@ -1,188 +1,188 @@
{
"header": [
[
{
"key": "seq",
"name": "NO",
"rowspan": "2"
},
{
"key": "ymd",
"name": "날짜",
"rowspan": "2"
},
{
"key": "",
"name": "스타일 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "서술 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "기본 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "템플릿 소계",
"colspan": "3"
},
{
"key": "",
"name": "RCS SMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS LMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS MMS",
"colspan": "3"
},
{
"key": "",
"name": "포맷 소계",
"colspan": "3"
},
{
"key": "",
"name": "Fallback SMS",
"colspan": "3"
},
{
"key": "",
"name": "Fallback LMS",
"colspan": "3"
}
],
[
{
"key": "cellTmpltTot",
"name": "발송"
},
{
"key": "cellTmpltSucc",
"name": "성공"
},
{
"key": "cellTmpltRate",
"name": "성공률(%)"
},
{
"key": "descTmpltTot",
"name": "발송"
},
{
"key": "descTmpltSucc",
"name": "성공"
},
{
"key": "descTmpltRate",
"name": "성공률(%)"
},
{
"key": "freeTmpltTot",
"name": "발송"
},
{
"key": "freeTmpltSucc",
"name": "성공"
},
{
"key": "freeTmpltRate",
"name": "성공률(%)"
},
{
"key": "subSumTmpltTot",
"name": "발송"
},
{
"key": "subSumTmpltSucc",
"name": "성공"
},
{
"key": "subSumTmpltRate",
"name": "성공률(%)"
},
{
"key": "smsTot",
"name": "발송"
},
{
"key": "smsSucc",
"name": "성공"
},
{
"key": "smsRate",
"name": "성공률(%)"
},
{
"key": "lmsTot",
"name": "발송"
},
{
"key": "lmsSucc",
"name": "성공"
},
{
"key": "lmsRate",
"name": "성공률(%)"
},
{
"key": "mmsTot",
"name": "발송"
},
{
"key": "mmsSucc",
"name": "성공"
},
{
"key": "mmsRate",
"name": "성공률(%)"
},
{
"key": "formatTot",
"name": "발송"
},
{
"key": "formatSucc",
"name": "성공"
},
{
"key": "formatRate",
"name": "성공률(%)"
},
{
"key": "fbSmsTot",
"name": "발송"
},
{
"key": "fbSmsSucc",
"name": "성공"
},
{
"key": "fbSmsRate",
"name": "성공률(%)"
},
{
"key": "fbLmsTot",
"name": "발송"
},
{
"key": "fbLmsSucc",
"name": "성공"
},
{
"key": "fbLmsRate",
"name": "성공률(%)"
}
]
]
}
{
"header": [
[
{
"key": "seq",
"name": "NO",
"rowspan": "2"
},
{
"key": "ymd",
"name": "날짜",
"rowspan": "2"
},
{
"key": "",
"name": "스타일 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "서술 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "기본 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "템플릿 소계",
"colspan": "3"
},
{
"key": "",
"name": "RCS SMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS LMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS MMS",
"colspan": "3"
},
{
"key": "",
"name": "포맷 소계",
"colspan": "3"
},
{
"key": "",
"name": "Fallback SMS",
"colspan": "3"
},
{
"key": "",
"name": "Fallback LMS",
"colspan": "3"
}
],
[
{
"key": "cellTmpltTot",
"name": "발송"
},
{
"key": "cellTmpltSucc",
"name": "성공"
},
{
"key": "cellTmpltRate",
"name": "성공률(%)"
},
{
"key": "descTmpltTot",
"name": "발송"
},
{
"key": "descTmpltSucc",
"name": "성공"
},
{
"key": "descTmpltRate",
"name": "성공률(%)"
},
{
"key": "freeTmpltTot",
"name": "발송"
},
{
"key": "freeTmpltSucc",
"name": "성공"
},
{
"key": "freeTmpltRate",
"name": "성공률(%)"
},
{
"key": "subSumTmpltTot",
"name": "발송"
},
{
"key": "subSumTmpltSucc",
"name": "성공"
},
{
"key": "subSumTmpltRate",
"name": "성공률(%)"
},
{
"key": "smsTot",
"name": "발송"
},
{
"key": "smsSucc",
"name": "성공"
},
{
"key": "smsRate",
"name": "성공률(%)"
},
{
"key": "lmsTot",
"name": "발송"
},
{
"key": "lmsSucc",
"name": "성공"
},
{
"key": "lmsRate",
"name": "성공률(%)"
},
{
"key": "mmsTot",
"name": "발송"
},
{
"key": "mmsSucc",
"name": "성공"
},
{
"key": "mmsRate",
"name": "성공률(%)"
},
{
"key": "formatTot",
"name": "발송"
},
{
"key": "formatSucc",
"name": "성공"
},
{
"key": "formatRate",
"name": "성공률(%)"
},
{
"key": "fbSmsTot",
"name": "발송"
},
{
"key": "fbSmsSucc",
"name": "성공"
},
{
"key": "fbSmsRate",
"name": "성공률(%)"
},
{
"key": "fbLmsTot",
"name": "발송"
},
{
"key": "fbLmsSucc",
"name": "성공"
},
{
"key": "fbLmsRate",
"name": "성공률(%)"
}
]
]
}

View File

@@ -1,84 +1,84 @@
{
"header": [
[
{
"key": "seq",
"name": "NO",
"rowspan": "2"
},
{
"key": "msgbaseName",
"name": "템플릿명",
"rowspan": "2"
},
{
"key": "msgbaseId",
"name": "포맷ID",
"rowspan": "2"
},
{
"key": "ymd",
"name": "날짜",
"rowspan": "2"
},
{
"key": "productName",
"name": "상품명",
"rowspan": "2"
},
{
"key": "",
"name": "RCS",
"colspan": "3"
},
{
"key": "",
"name": "Fallback SMS",
"colspan": "3"
},
{
"key": "",
"name": "Fallback LMS",
"colspan": "3"
}
],
[
{
"key": "rcsCnt",
"name": "발송"
},
{
"key": "rcsSucc",
"name": "성공"
},
{
"key": "rcsRate",
"name": "성공률(%)"
},
{
"key": "fbSmsTot",
"name": "발송"
},
{
"key": "fbSmsSucc",
"name": "성공"
},
{
"key": "fbSmsRate",
"name": "성공률(%)"
},
{
"key": "fbLmsTot",
"name": "발송"
},
{
"key": "fbLmsSucc",
"name": "성공"
},
{
"key": "fbLmsRate",
"name": "성공률(%)"
}
]
]
}
{
"header": [
[
{
"key": "seq",
"name": "NO",
"rowspan": "2"
},
{
"key": "msgbaseName",
"name": "템플릿명",
"rowspan": "2"
},
{
"key": "msgbaseId",
"name": "포맷ID",
"rowspan": "2"
},
{
"key": "ymd",
"name": "날짜",
"rowspan": "2"
},
{
"key": "productName",
"name": "상품명",
"rowspan": "2"
},
{
"key": "",
"name": "RCS",
"colspan": "3"
},
{
"key": "",
"name": "Fallback SMS",
"colspan": "3"
},
{
"key": "",
"name": "Fallback LMS",
"colspan": "3"
}
],
[
{
"key": "rcsCnt",
"name": "발송"
},
{
"key": "rcsSucc",
"name": "성공"
},
{
"key": "rcsRate",
"name": "성공률(%)"
},
{
"key": "fbSmsTot",
"name": "발송"
},
{
"key": "fbSmsSucc",
"name": "성공"
},
{
"key": "fbSmsRate",
"name": "성공률(%)"
},
{
"key": "fbLmsTot",
"name": "발송"
},
{
"key": "fbLmsSucc",
"name": "성공"
},
{
"key": "fbLmsRate",
"name": "성공률(%)"
}
]
]
}

View File

@@ -1,198 +1,198 @@
{
"header": [
[
{
"key": "seq",
"name": "NO",
"rowspan": "2"
},
{
"key": "userId",
"name": "아이디",
"rowspan": "2"
},
{
"key": "deptNm",
"name": "부서명",
"rowspan": "2"
},
{
"key": "ymd",
"name": "날짜",
"rowspan": "2"
},
{
"key": "",
"name": "스타일 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "서술 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "기본 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "템플릿 소계",
"colspan": "3"
},
{
"key": "",
"name": "RCS SMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS LMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS MMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS 소계",
"colspan": "3"
},
{
"key": "",
"name": "Fallback SMS",
"colspan": "3"
},
{
"key": "",
"name": "Fallback LMS",
"colspan": "3"
}
],
[
{
"key": "cellTmpltTot",
"name": "발송"
},
{
"key": "cellTmpltSucc",
"name": "성공"
},
{
"key": "cellTmpltRate",
"name": "성공률(%)"
},
{
"key": "descTmpltTot",
"name": "발송"
},
{
"key": "descTmpltSucc",
"name": "성공"
},
{
"key": "descTmpltRate",
"name": "성공률(%)"
},
{
"key": "freeTmpltTot",
"name": "발송"
},
{
"key": "freeTmpltSucc",
"name": "성공"
},
{
"key": "freeTmpltRate",
"name": "성공률(%)"
},
{
"key": "subSumTmpltTot",
"name": "발송"
},
{
"key": "subSumTmpltSucc",
"name": "성공"
},
{
"key": "subSumTmpltRate",
"name": "성공률(%)"
},
{
"key": "smsTot",
"name": "발송"
},
{
"key": "smsSucc",
"name": "성공"
},
{
"key": "smsRate",
"name": "성공률(%)"
},
{
"key": "lmsTot",
"name": "발송"
},
{
"key": "lmsSucc",
"name": "성공"
},
{
"key": "lmsRate",
"name": "성공률(%)"
},
{
"key": "mmsTot",
"name": "발송"
},
{
"key": "mmsSucc",
"name": "성공"
},
{
"key": "mmsRate",
"name": "성공률(%)"
},
{
"key": "formatTot",
"name": "발송"
},
{
"key": "formatSucc",
"name": "성공"
},
{
"key": "formatRate",
"name": "성공률(%)"
},
{
"key": "fbSmsTot",
"name": "발송"
},
{
"key": "fbSmsSucc",
"name": "성공"
},
{
"key": "fbSmsRate",
"name": "성공률(%)"
},
{
"key": "fbLmsTot",
"name": "발송"
},
{
"key": "fbLmsSucc",
"name": "성공"
},
{
"key": "fbLmsRate",
"name": "성공률(%)"
}
]
]
}
{
"header": [
[
{
"key": "seq",
"name": "NO",
"rowspan": "2"
},
{
"key": "userId",
"name": "아이디",
"rowspan": "2"
},
{
"key": "deptNm",
"name": "부서명",
"rowspan": "2"
},
{
"key": "ymd",
"name": "날짜",
"rowspan": "2"
},
{
"key": "",
"name": "스타일 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "서술 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "기본 템플릿",
"colspan": "3"
},
{
"key": "",
"name": "템플릿 소계",
"colspan": "3"
},
{
"key": "",
"name": "RCS SMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS LMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS MMS",
"colspan": "3"
},
{
"key": "",
"name": "RCS 소계",
"colspan": "3"
},
{
"key": "",
"name": "Fallback SMS",
"colspan": "3"
},
{
"key": "",
"name": "Fallback LMS",
"colspan": "3"
}
],
[
{
"key": "cellTmpltTot",
"name": "발송"
},
{
"key": "cellTmpltSucc",
"name": "성공"
},
{
"key": "cellTmpltRate",
"name": "성공률(%)"
},
{
"key": "descTmpltTot",
"name": "발송"
},
{
"key": "descTmpltSucc",
"name": "성공"
},
{
"key": "descTmpltRate",
"name": "성공률(%)"
},
{
"key": "freeTmpltTot",
"name": "발송"
},
{
"key": "freeTmpltSucc",
"name": "성공"
},
{
"key": "freeTmpltRate",
"name": "성공률(%)"
},
{
"key": "subSumTmpltTot",
"name": "발송"
},
{
"key": "subSumTmpltSucc",
"name": "성공"
},
{
"key": "subSumTmpltRate",
"name": "성공률(%)"
},
{
"key": "smsTot",
"name": "발송"
},
{
"key": "smsSucc",
"name": "성공"
},
{
"key": "smsRate",
"name": "성공률(%)"
},
{
"key": "lmsTot",
"name": "발송"
},
{
"key": "lmsSucc",
"name": "성공"
},
{
"key": "lmsRate",
"name": "성공률(%)"
},
{
"key": "mmsTot",
"name": "발송"
},
{
"key": "mmsSucc",
"name": "성공"
},
{
"key": "mmsRate",
"name": "성공률(%)"
},
{
"key": "formatTot",
"name": "발송"
},
{
"key": "formatSucc",
"name": "성공"
},
{
"key": "formatRate",
"name": "성공률(%)"
},
{
"key": "fbSmsTot",
"name": "발송"
},
{
"key": "fbSmsSucc",
"name": "성공"
},
{
"key": "fbSmsRate",
"name": "성공률(%)"
},
{
"key": "fbLmsTot",
"name": "발송"
},
{
"key": "fbLmsSucc",
"name": "성공"
},
{
"key": "fbLmsRate",
"name": "성공률(%)"
}
]
]
}

View File

@@ -1,19 +1,19 @@
import MonthList from '../views/MonthList'
import BsnmMonthList from '../views/BsnmMonthList'
export default [
{
path: '/stats/monthList',
component: MonthList,
name: 'monthList',
meta: { public: true }
},
{
path: '/stats/bsnmMonthList',
component: BsnmMonthList,
name: 'bsnmMonthList',
meta: { public: true }
},
]
import MonthList from '../views/MonthList'
import BsnmMonthList from '../views/BsnmMonthList'
export default [
{
path: '/stats/monthList',
component: MonthList,
name: 'monthList',
meta: { public: true }
},
{
path: '/stats/bsnmMonthList',
component: BsnmMonthList,
name: 'bsnmMonthList',
meta: { public: true }
},
]

View File

@@ -1,164 +1,164 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">사업자 월별 통계 목록 조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'monthList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
params: {
searchType1: '',
searchType2: '',
searchText1: '',
searchText2: ''
},
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">사업자 월별 통계 목록 조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'monthList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
params: {
searchType1: '',
searchType2: '',
searchText1: '',
searchText2: ''
},
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
</script>

View File

@@ -1,165 +1,165 @@
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">월별 통계 목록 조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'monthList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
// params: {
// apprResult: '',
// searchType: '',
// searchText: '',
// startDate: '',
// endDate: ''
// },
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
<template>
<div class="contents">
<div class="contents_wrap">
<div class="top_wrap">
<h3 class="title">월별 통계 목록 조회</h3>
<p class="breadcrumb">시스템관리 &gt; 관리자/유치채널 관리</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="right" class="label">권한</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="대리점">대리점</option>
<option value="운영자">운영자</option>
</select>
</div>
<div class="select_box">
<label for="right" class="label">상태</label>
<select name="" id="right">
<option value="전체">전체</option>
<option value="사용">사용</option>
<option value="중지">중지</option>
</select>
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력"/>
</div>
<button type="button" class="button grey">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>100</span></div>
<div class="button_group">
<button type="button" class="button blue admin">관리자 등록</button>
<button type="button" class="button blue channel">유지채널 등록</button>
<button type="button" class="button white delete">삭제</button>
</div>
</div>
<!-- <div class="table">
<table>
<colgroup>
<col width="5%"/>
<col width="15%"/>
<col width="15%"/>
<col width="20%"/>
<col width="20%"/>
<col width="5%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" id="admin_check1"><label for="admin_check1"></label></th>
<th>NO</th>
<th>권한</th>
<th>이름(대리점명)</th>
<th>ID</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" checked id="admin_check2"><label for="admin_check2"></label></td>
<td>10</td>
<td>대리점</td>
<td>유플러스</td>
<td><a href="javascript:void(0)">uplus1</a></td>
<td>사용</td>
<td>2022-03-10</td>
</tr>
</tbody>
</table>
</div> -->
<div class="table">
<custom-grid
ref="table"
:totalItems="'totalItems'"
:url="testList.url"
:perPage="testList.perPage"
:initialRequest="testList.initialRequest"
:pagination="testList.pagination"
:isCheckbox="testList.isCheckbox"
:columns="testList.columns"
:noDataStr="testList.noDataStr"
:addCls="testList.addCls"
:header="testList.header"
></custom-grid>
</div>
</div>
</div>
</template>
<script>
import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
export default {
name: 'monthList',
data() {
return {
testList: {
url: '/api/v1/bo/sysMgt/adminList',
perPage: 20,
pagination: true,
isCheckbox: true,
initialRequest: false,
addCls: 'box_OFvis',
header: [
[
{ header: 'NO', childNames: [] },
{ header: '권한', childNames: [] },
{ header: '이름(대리점명)', childNames: [] },
{ header: 'ID', childNames: [] },
{ header: '상태', childNames: [] },
{ header: '등록일', childNames: [] }
]
],
columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 },
{ name: 'auth', header: '권한', align: 'left', width: 160 },
{ name: 'name', header: '이름(대리점명)', align: 'center', width: 130},
{ name: 'adminId', header: 'ID', align: 'center', width: 130},
{ name: 'adminStat', header: '상태', align: 'center', width: 130},
{ name: 'regDt', header: '등록일', width: 90, cls: 'td_line' }
],
noDataStr: '검색 결과가 없습니다.',
// params: {
// apprResult: '',
// searchType: '',
// searchText: '',
// startDate: '',
// endDate: ''
// },
excelHeader: []
}
};
},
components: {
customGrid: customGrid
},
destroyed() {
},
mounted() {
let isKeep = false;
isKeep = true;
this.search(isKeep);
},
methods: {
search: function(isKeep) {
console.log(this.testList.params);
this.$refs.table.search(this.testList.params, isKeep);
},
}
};
</script>

View File

@@ -212,6 +212,7 @@ export default {
// alert(chkList[i].adminId);
// }
const param = chkList.map((row)=>({adminId:row.adminId}));
console.log(param)
this.row.list = param;
console.log(this.row);
return true;