TC 기능 수정 / 디자인 수정 변경

This commit is contained in:
kimre
2022-07-15 14:21:03 +09:00
parent a4e5cde9f6
commit 34e7957081
91 changed files with 9087 additions and 8673 deletions

View File

@@ -130,7 +130,7 @@ 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 .popup-btn1 {display: flex; justify-content: flex-start; align-items: center; margin: 35px 0 25px;}
.popup .popup-btn1 {display: flex; justify-content: center; 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

@@ -1708,7 +1708,6 @@ header .user_wrap .user_info .logout {
}
.essential span{
color:#eb008b;
padding-right: 3px;
}

View File

@@ -8,7 +8,7 @@
<a href="javascript:void(0)" class="btn_user">{{ this.$store.getters['login/userId'] }}</a>
</div>
<div class="user_info">
<a href="javascript:void(0)" class="modify">정보수정</a>
<!-- <a href="javascript:void(0)" class="modify">정보수정</a>-->
<a href="javascript:void(0)" class="logout" @click="logout();">로그아웃</a>
</div>
</div>

View File

@@ -1,141 +0,0 @@
<template>
<!-- <div class="dimmed" @click="calendarCancel();"></div>-->
<div class="datepicker">
<div class="datepicker-head">
<div class="datepicker-btn">
<a href="#" class="datepicker-prev" @click="calendarData(-1)"><span></span></a>
<a href="#" class="datepicker-next" @click="calendarData(1)"><span></span></a></div>
<div class="datepicker-title">
<span>{{ year }}.</span>
<span>{{ month }}</span>
</div>
</div>
<table class="datepicker-calender">
<tbody>
<tr v-for="(date, idx) in dates" :key="idx">
<td v-for="(day, secondIdx) in date"
:key="secondIdx"
:class="{
'disabled': idx === 0 && day >= lastMonthStart || dates.length - 1 === idx && nextMonthStart > day,
'today': day === today && month === currentMonth && year === currentYear
}"
>
<a href="#" @click="selectDay(day)">{{ day }}</a>
</td>
</tr>
</tbody>
</table>
</div>
</template>
<script>
export default {
data() {
return {
dates: [],
currentYear: 0,
currentMonth: 0,
year: 0,
month: 0,
lastMonthStart: 0,
nextMonthStart: 0,
today: 0,
};
},
created() { // 데이터에 접근이 가능한 첫 번째 라이프 사이클
const date = new Date();
this.currentYear = date.getFullYear(); // 이하 현재 년, 월 가지고 있기
this.currentMonth = date.getMonth() + 1;
this.year = this.currentYear;
this.month = this.currentMonth;
this.today = date.getDate(); // 오늘 날짜
this.calendarData();
},
methods: {
calendarData(arg) { // 인자를 추가
if (arg < 0) { // -1이 들어오면 지난 달 달력으로 이동
this.month -= 1;
} else if (arg === 1) { // 1이 들어오면 다음 달 달력으로 이동
this.month += 1;
}
if (this.month === 0) { // 작년 12월
this.year -= 1;
this.month = 12;
} else if (this.month > 12) { // 내년 1월
this.year += 1;
this.month = 1;
}
const [
monthFirstDay,
monthLastDate,
lastMonthLastDate,
] = this.getFirstDayLastDate(this.year, this.month);
this.dates = this.getMonthOfDays(
monthFirstDay,
monthLastDate,
lastMonthLastDate,
);
console.log(this.lastMonthStart)
},
getFirstDayLastDate(year, month) {
const firstDay = new Date(year, month - 1, 1).getDay(); // 이번 달 시작 요일
const lastDate = new Date(year, month, 0).getDate(); // 이번 달 마지막 날짜
let lastYear = year;
let lastMonth = month - 1;
if (month === 1) {
lastMonth = 12;
lastYear -= 1;
}
const prevLastDate = new Date(lastYear, lastMonth, 0).getDate(); // 지난 달 마지막 날짜
return [firstDay, lastDate, prevLastDate];
},
getMonthOfDays(
monthFirstDay,
monthLastDate,
prevMonthLastDate,
) {
let day = 1;
let prevDay = (prevMonthLastDate - monthFirstDay) + 1;
const dates = [];
let weekOfDays = [];
while (day <= monthLastDate) {
if (day === 1) {
// 1일이 어느 요일인지에 따라 테이블에 그리기 위한 지난 셀의 날짜들을 구할 필요가 있다.
for (let j = 0; j < monthFirstDay; j += 1) {
if (j === 0) this.lastMonthStart = prevDay; // 지난 달에서 제일 작은 날짜
weekOfDays.push(prevDay);
prevDay += 1;
}
}
weekOfDays.push(day);
if (weekOfDays.length === 7) {
// 일주일 채우면
dates.push(weekOfDays);
weekOfDays = []; // 초기화
}
day += 1;
}
const len = weekOfDays.length;
if (len > 0 && len < 7) {
for (let k = 1; k <= 7 - len; k += 1) {
weekOfDays.push(k);
}
}
if (weekOfDays.length > 0) dates.push(weekOfDays); // 남은 날짜 추가
this.nextMonthStart = weekOfDays[0]; // 이번 달 마지막 주에서 제일 작은 날짜
return dates;
},
selectDay(day){
const year = this.year
const month = this.month.toString().length < 2 ? '0'+ this.month : this.month
const dd = day.toString().length < 2 ? '0' + day : day;
const getDate = year + '-' + month + '-' + dd
this.$parent.calendarCalbackFnc(getDate);
},
calendarCancel(){
this.$parent.openEndPicker= false
this.$parent.openStartPicker= false
}
},
};
</script>

View File

@@ -2,10 +2,10 @@
<!-- <div class="wrap bg-wrap"> -->
<div>
<div class="dimmed modal01" @click="alertModalCancel();"></div>
<div class="popup-wrap modal01">
<div class="dimmed alertCommon" @click="alertModalCancel();"></div>
<div class="popup-wrap alertCommon">
<!-- 로그인실패: 확인 -->
<div class="popup modal01">
<div class="popup alertCommon">
<div class="pop-head">
<h3 class="pop-tit">{{title}}</h3>
</div>
@@ -79,7 +79,9 @@ export default {
},
methods :{
alertModalOpen(props){
var dimmed = document.getElementsByClassName('modal01');
console.log("@@@@@@@@@@")
console.log(props)
var dimmed = document.getElementsByClassName('alertCommon');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'block';
}
@@ -90,13 +92,13 @@ export default {
this.msg4 = props.msg4;
},
alertModalClose(){
var dimmed = document.getElementsByClassName('modal01');
var dimmed = document.getElementsByClassName('alertCommon');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
},
alertModalCancel(){
var dimmed = document.getElementsByClassName('modal01');
var dimmed = document.getElementsByClassName('alertCommon');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}

View File

@@ -9,7 +9,6 @@
<div class="title">상세 정보</div>
</div>
<div class="table table_form m50">
<form autocomplete="off">
<table>
<colgroup>
<col style="width:140px">
@@ -24,7 +23,7 @@
<th>가입일</th>
<td colspan="2"><input type="text" disabled v-model="subsDt"></td>
<th>상태</th>
<td colspan="2"><input type="text" disabled v-model="subsSttusCd"></td>
<td colspan="2"><input type="text" disabled v-model="subsSttusNm"></td>
</tr>
<tr class="tr_input w75">
<th>고객사</th>
@@ -36,7 +35,7 @@
<th>대표자</th>
<td colspan="2"><input type="text" disabled v-model="reprNm"></td>
<th>사용자 구분</th>
<td colspan="2"><input type="text" disabled v-model="custTyCd"></td>
<td colspan="2"><input type="text" disabled v-model="custTyNm"></td>
</tr>
<tr class="tr_input">
<th>사업자등록번호</th>
@@ -84,7 +83,6 @@
</tr>
</tbody>
</table>
</form>
</div>
<div class="info">
<div class="count">발송건수
@@ -156,6 +154,7 @@ import channelMgtApi from '../service/channelMgtApi';
import moment from 'moment';
import xlsx from '@/common/excel';
import AdminNmPop from '../../custMgt/components/AdminNmPop';
export default {
name: "channelDetail",
data() {
@@ -207,6 +206,8 @@ export default {
excelHeader: [],
pageType: 'CHANNELDETAIL',
serviceId: '',
subsSttusNm: '',
custTyNm: '',
}
},
props: {
@@ -274,6 +275,8 @@ export default {
this.adr3 = result.data.adr3;
this.custTyCd = result.data.custTyCd;
this.plan = result.data.plan;
this.subsSttusNm = result.data.subsSttusNm;
this.custTyNm = result.data.custTyNm;
if (this.bizrno != '' && this.bizrno != null) {
this.bizrno1 = this.bizrno.substr(0, 3);
this.bizrno2 = this.bizrno.substr(3, 2);
@@ -315,7 +318,8 @@ export default {
dataOrder: 'header'
};
// console.log(data);
xlsx.export(data.list, saveFileName, options).then(() => {});
xlsx.export(data.list, saveFileName, options).then(() => {
});
},
async getExcelDataDown() {
@@ -359,5 +363,4 @@ export default {
}
</script>

View File

@@ -5,7 +5,6 @@
<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">
@@ -53,11 +52,11 @@
</div>
<div class="input_box">
<label for="right" class="label">유치자 마당ID</label>
<input class="" type="text" id="" placeholder="검색어 입력" v-model="grid.params.loginId"/>
<input class="" type="text" id="" placeholder="검색어 입력" v-model.trim="grid.params.loginId" maxlength="50"/>
</div>
<div class="input_box">
<label for="right" class="label">유치업체</label>
<input class="" type="text" id="" placeholder="검색어 입력" v-model="grid.params.norgNm"/>
<input class="" type="text" id="" placeholder="검색어 입력" v-model.trim="grid.params.norgNm" maxlength="50"/>
</div>
</div>
<div class="group">
@@ -66,21 +65,24 @@
<select name="searchType" id="searchType" v-model="searchType" @keyup.enter="search">
<option value="01">고객사명</option>
<option value="02">이름</option>
<option value="03">사업자등록번호(생년월일)</option>
<option value="03">사업자등록번호</option>
</select>
</div>
<div class="input_box">
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText"/>
<input class="search-box" type="text" id="search" placeholder="검색어 입력"
v-model.trim="grid.params.searchText" maxlength="100"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</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>
<option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{
option.text
}}
</option>
</select>
</div>
</div>
@@ -111,8 +113,6 @@
</div>
</div>
</template>
@@ -184,7 +184,8 @@ export default {
{name: 'subsDt', header: '가입일', align: 'center', width: '11%'},
{name: 'norgNm', header: '유치업체', align: 'center', width: '10%'},
{name: 'userSeq', header: '사용자일련번호', align: 'center', width: '10%', hidden: true},
{ name: 'loginId', header: '마당ID(이름)', align: 'center', width: '10%', renderer: {
{
name: 'loginId', header: '마당ID(이름)', align: 'center', width: '10%', renderer: {
type: CustomATagRenderer
, options: {
callback: this.channelDetail,
@@ -192,16 +193,14 @@ export default {
}
},
{name: 'custNm', header: '고객사명', align: 'center', width: '10%'},
{ name: 'bizrno', header: '사업자번호', align: 'center', width: '12%'
,formatter: props => {
let result = props.bizrno.substring(0,3)+'-'+ props.bizrno.substring(3,5)+'-'+ props.bizrno.substring(5,10)
return result;
}
},
{name: 'bizrno', header: '사업자번호', align: 'center', width: '12%'},
{name: 'userNm', header: '이름', align: 'center', width: '10%'},
{ name: 'subsSttusCd', header: '상태', align: 'center', width: '10%'},
{ name: 'custTyCd', header: '구분', align: 'center', width: '10%'},
{ name: 'sndCnt', header: '전체발송건수', align: 'center', width: '11%',
{name: 'subsSttusCd', header: '상태', align: 'center', width: '10%', hidden: true},
{name: 'subsSttusNm', header: '상태', align: 'center', width: '10%'},
{name: 'custTyCd', header: '구분', align: 'center', width: '10%', hidden: true},
{name: 'custTyNm', header: '구분', align: 'center', width: '10%'},
{
name: 'sndCnt', header: '전체발송건수', align: 'center', width: '11%',
formatter: props => {
let result = props.sndCnt;
//.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
@@ -217,10 +216,12 @@ export default {
subsStDt: '',
subsEdDt: '',
subsSttusCd: '',
subsSttusNm: '',
loginId: '',
norgNm: '',
sndCnt: '',
custTyCd: '',
custTyNm: '',
},
excelHeader: []
}
@@ -330,7 +331,8 @@ export default {
dataOrder: 'header'
};
// console.log(data);
xlsx.export(data.list, saveFileName, options).then(() => {});
xlsx.export(data.list, saveFileName, options).then(() => {
});
},
getExcelHeader() {
// 헤더를 mockup으로 관리한다.

View File

@@ -6,7 +6,6 @@
<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">
@@ -23,6 +22,7 @@
v-model="startDate"
@selected="selectedStartDate(0)"
@closed="closeDate('start')"
:picker-options="startDateOptions"
></vuejs-datepicker>
</span>
<span class="hypen">~</span>
@@ -36,6 +36,7 @@
v-model="endDate"
@selected="selectedEndDate(0)"
@closed="closeDate('end')"
:picker-options="endDateOptions"
></vuejs-datepicker>
</span>
</div>
@@ -44,21 +45,25 @@
<div class="group">
<div class="input_box">
<label for="right" class="label">고객사명</label>
<input class="search-box" type="text" id="" placeholder="검색어 입력" v-model="grid.params.custNm"/>
<input class="search-box" type="text" id="" placeholder="검색어 입력" v-model="grid.params.custNm"
maxlength="100" @keyup.enter="search"/>
</div>
<div class="input_box">
<label for="right" class="label">사업자번호</label>
<input class="search-box" type="text" id="" placeholder="검색어 입력" v-model="grid.params.bizrno"/>
<input class="search-box" type="text" id="" placeholder="검색어 입력" v-model="grid.params.bizrno"
@keypress="onlyNum" @input="onlyNum" maxlength="10" @keyup.enter="search"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</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>
<option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{
option.text
}}
</option>
</select>
</div>
</div>
@@ -98,9 +103,11 @@ import xlsx from '@/common/excel';
import lodash from 'lodash';
import commonModal from "@/components/modal/commonModal";
import calcMgtApi from "@/modules/calculate/service/calcMgtApi";
import {utils_mixin, chkPattern2} from '../service/mixins';
export default {
name: 'calcList',
mixins: [utils_mixin, chkPattern2],
data() {
return {
// 달력 데이터
@@ -109,7 +116,8 @@ export default {
sDateDiv: 'month',
startDate: new Date(),
endDate: new Date(),
startDateOptions: {disabledDate: this.disabledStDate},
endDateOptions: {disabledDate: this.disabledEdDate},
startDt: '',
endDt: '',
startYear: '',
@@ -158,79 +166,92 @@ export default {
columns: [
{name: 'useYm', header: '날짜', align: 'center'},
{name: 'custNm', header: '고객사명', align: 'center', width: '130px'},
{ name: 'bizrno', header: '사업자번호', align: 'center', width: '120px'
,formatter: props => {
let result = props.bizrno.substring(0,3)+'-'+ props.bizrno.substring(3,5)+'-'+ props.bizrno.substring(5,10)
return result;
}
{
name: 'bizrno', header: '사업자번호', align: 'center', width: '120px'
// ,formatter: props => {
// let result = props.bizrno.substring(0,3)+'-'+ props.bizrno.substring(3,5)+'-'+ props.bizrno.substring(5,10)
// return result;
// }
},
{ name: 'prodNm', header: '요금제', align: 'center', width: '160px'
{
name: 'prodNm', header: '요금제', align: 'center', width: '160px'
, formatter: props => {
let result = "<p>" + props.prodNm + "</p>\n<p>(" + props.prodAmt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ")</p>";
return result;
}
},
{ name: 'startAmt', header: '시작금액', align: 'center'
{
name: 'startAmt', header: '시작금액', align: 'center'
, formatter: props => {
let result = props.startAmt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'useAmt', header: '사용금액', align: 'center'
{
name: 'useAmt', header: '사용금액', align: 'center'
, formatter: props => {
let result = props.useAmt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'cfwdAmt', header: '이월금액', align: 'center'
{
name: 'cfwdAmt', header: '이월금액', align: 'center'
, formatter: props => {
let result = props.cfwdAmt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'mrtUseAmt', header: '종량금액', align: 'center'
{
name: 'mrtUseAmt', header: '종량금액', align: 'center'
, formatter: props => {
let result = props.mrtUseAmt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'extncAmt', header: '소멸금액', align: 'center'
{
name: 'extncAmt', header: '소멸금액', align: 'center'
, formatter: props => {
let result = props.extncAmt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'billingAmt', header: '청구금액', align: 'center'
{
name: 'billingAmt', header: '청구금액', align: 'center'
, formatter: props => {
let result = props.billingAmt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'totalSndCnt', header: '전체', align: 'center', cls: 'td_line'
{
name: 'totalSndCnt', header: '전체', align: 'center', cls: 'td_line'
, formatter: props => {
let result = props.totalSndCnt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'smsSndCnt', header: 'SMS', align: 'center', cls: 'td_line'
{
name: 'smsSndCnt', header: 'SMS', align: 'center', cls: 'td_line'
, formatter: props => {
let result = props.smsSndCnt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'lmsSndCnt', header: 'LMS', align: 'center', cls: 'td_line'
{
name: 'lmsSndCnt', header: 'LMS', align: 'center', cls: 'td_line'
, formatter: props => {
let result = props.lmsSndCnt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'mmsSndCnt', header: 'MMS', align: 'center', cls: 'td_line'
{
name: 'mmsSndCnt', header: 'MMS', align: 'center', cls: 'td_line'
, formatter: props => {
let result = props.mmsSndCnt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'atlkSndCnt', header: '알림톡', align: 'center', cls: 'td_line'
{
name: 'atlkSndCnt', header: '알림톡', align: 'center', cls: 'td_line'
, formatter: props => {
let result = props.atlkSndCnt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
@@ -313,13 +334,13 @@ export default {
return false
}
*/
if (moment(this.grid.params.startMonth).isBefore(moment(this.grid.params.endMonth).subtract(2, 'months').format('YYYYMM'))) {
//alert('검색 기간은 전월 최대 3개월까지 선택 가능 합니다.');
this.row.title = '발송통계';
this.row.msg1 = '검색 기간은 전월 최대 3개월까지 선택 가능 합니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
return false
}
// if (moment(this.grid.params.startMonth).isBefore(moment(this.grid.params.endMonth).subtract(2, 'months').format('YYYYMM'))) {
// //alert('검색 기간은 전월 최대 3개월까지 선택 가능 합니다.');
// this.row.title = '발송통계';
// this.row.msg1 = '검색 기간은 전월 최대 3개월까지 선택 가능 합니다.';
// this.$refs.commmonModal.alertModalOpen(this.row);
// return false
// }
this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData();
@@ -327,12 +348,16 @@ export default {
},
setPeriodDay(day) {
this.periodDay = day;
// this.endDate = new Date();
this.endDate = new Date();
// this.startDate = moment(this.endDate)
// .subtract(day, 'day')
// .subtract(day, 'month')
// .toDate();
console.log(this.startDt)
this.initSetStartDate();
this.initSetEndDate();
// this.disabledStDate(this.startDate)
// this.disabledEndDate(this.endDate)
this.closeDate('start');
this.closeDate('end');
@@ -355,17 +380,25 @@ export default {
},
closeDate(type) {
if (type != undefined && type != null) {
let initStartDate = new Date();
initStartDate.setMonth(Number(moment(initStartDate).format('MM')) - 4)
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.disabledSDate = {to: initStartDate, from: new Date()};
if (this.startDate !== initStartDate) {
this.disabledEDate = {to: this.startDate, from: new Date()};
}
} else if (type == 'end') {
this.disabledEDate = {to: initStartDate, from: new Date()};
if (this.endDate !== new Date()) {
this.disabledSDate = {from: this.endDate};
this.disabledSDate = {to: initStartDate, from: new Date()};
}
}
}
},
customFormatter: function (date) {
console.log(this.sDateDiv)
// console.log(this.sDateDiv)
if (this.sDateDiv == 'month') {
return moment(date).format('YYYY-MM');
} else if (this.sDateDiv == 'year') {
@@ -380,7 +413,7 @@ export default {
},
sendStoreData: function () {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP._currentPage);
// console.log("==========getP : " + getP._currentPage);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
@@ -388,7 +421,7 @@ export default {
});
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
console.log("getCondition : "+ getCondition.perPage);
// console.log("getCondition : " + getCondition.perPage);
},
gridParamSet() {
this.grid.params = {
@@ -398,7 +431,7 @@ export default {
bizrno: this.grid.params.bizrno
}
console.log("gridParamSet()-startMonth : "+ this.grid.params.startMonth);
// console.log("gridParamSet()-startMonth : " + this.grid.params.startMonth);
},
getExcelHeader() {
// 헤더를 mockup으로 관리한다.
@@ -423,7 +456,8 @@ export default {
dataOrder: 'header'
};
// console.log(data);
xlsx.export(data.list, saveFileName, options).then(() => {});
xlsx.export(data.list, saveFileName, options).then(() => {
});
},
async getExcelDataDown() {
try {
@@ -445,14 +479,15 @@ export default {
let initStartDate = new Date();
initStartDate.setMonth(Number(moment(initStartDate).format('MM')) - 4);
this.startDate = initStartDate;
console.log(moment(this.startDate).format('YYYY-MM-DD'));
// console.log(moment(this.startDate).format('YYYY-MM-DD'));
},
initSetEndDate() {
let initEndDate = new Date();
initEndDate.setMonth(Number(moment(initEndDate).format('MM')) -2);
initEndDate.setMonth(Number(moment(initEndDate).format('MM')) - 1);
this.endDate = initEndDate;
console.log(moment(this.endDate).format('YYYY-MM-DD'));
// console.log(moment(this.endDate).format('YYYY-MM-DD'));
},
}
};
}
;
</script>

View File

@@ -6,7 +6,6 @@
<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>
@@ -26,11 +25,11 @@
</div>
<div class="input_box id">
<label for="search" class="label">검색어</label>
<input type="text" id="id1" placeholder="검색어 입력" v-model="grid.params.searchText1" v-on:keydown.enter.prevent="search"/>
<input type="text" id="id1" placeholder="검색어 입력" v-model.trim="grid.params.searchText1"
@keyup.enter="search" maxlength="100"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span>
<div class="select_box NumberSe">
@@ -41,9 +40,6 @@
</select>
</div>
</div>
<!-- <div class="button_group">-->
<!-- <button type="button" class="button blue admin" @click="excelDown();">엑셀다운로드</button>-->
<!-- </div>-->
</div>
<div class="table">
<custom-grid
@@ -74,94 +70,6 @@ import xlsx from '@/common/excel';
import moment from 'moment';
import commonModal from "@/components/modal/commonModal";
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) {
}
}
class customTmpltType {
constructor(props) {
this.props = props;
const el = document.createElement('td');
var tmpltType = String(props.colValue);
el.innerText= "";
switch(tmpltType){
case '01' :
el.innerText= "기본형";
break;
case '02' :
el.innerText= "부가정보형";
break;
case '03' :
el.innerText= "광고추가형";
break;
case '04' :
el.innerText= "복잡형";
break;
default :
break;
}
this.el = el;
}
getElement() {
return this.el;
}
addEvent(selEl) {
}
}
class customStat {
constructor(props) {
this.props = props;
const el = document.createElement('td');
var stat = String(props.colValue);
el.innerText= "";
switch(stat){
case 'T' :
el.innerText= "신청완료";
break;
case 'R' :
el.innerText= "검수요청완료";
break;
case 'Q' :
el.innerText= "카카오 검수중";
break;
case 'A' :
el.innerText= "템플릿승인";
break;
case 'S' :
el.innerText= "반려(" + props.returnReason + ")";
break;
default :
break;
}
this.el = el;
}
getElement() {
return this.el;
}
addEvent(selEl) {
}
}
export default {
name: 'temltList',
data() {
@@ -194,7 +102,7 @@ export default {
{header: '템플릿코드', childNames: []},
{header: '템플릿명', childNames: []},
{header: '템플릿 유형', childNames: []},
{ header: '상태(반려사유)', childNames: [] },
{header: '상태', childNames: []},
{header: '발신프로필', childNames: []},
{header: '최종수정일', childNames: []}
]
@@ -203,11 +111,11 @@ export default {
columns: [
{name: 'no', header: 'NO', align: 'center', width: '4%'},
{name: 'custNm', header: '고객사명', align: 'center', width: '12%'},
{ name: 'bregNo', header: '사업자번호', align: 'center', width: '12%',renderer: {type: customBRegNo}},
{name: 'bregNo', header: '사업자번호', align: 'center', width: '12%'},
{name: 'tmpltCd', header: '템플릿코드', align: 'center', width: '12%'},
{name: 'tmpltNm', header: '템플릿명', align: 'center', width: '12%'},
{ name: 'tmpltType', header: '템플릿 유형', align: 'center', width: '12%',renderer: {type: customTmpltType}},
{ name: 'stat', header: '상태(반려사유)', align: 'center', width: '12%',renderer: {type: customStat}},
{name: 'tmpltType', header: '템플릿 유형', align: 'center', width: '12%'},
{name: 'stat', header: '상태', align: 'center', width: '12%'},
{name: 'sendProfile', header: '발신프로필', align: 'center', width: '125'},
{name: 'lastChgDt', header: '최종수정일', width: '12%', cls: 'td_line'}
],
@@ -237,7 +145,8 @@ export default {
params: {
searchType1: '',
searchType2: 'custNm',
searchText1: ''}
searchText1: ''
}
});
},
@@ -320,7 +229,8 @@ export default {
dataOrder: 'header'
};
// console.log(data);
xlsx.export(data.list, saveFileName, options).then(() => {});
xlsx.export(data.list, saveFileName, options).then(() => {
});
},
getExcelHeader() {
// 헤더를 mockup으로 관리한다.

View File

@@ -21,7 +21,7 @@
<common-modal ref="commmonModal"></common-modal>
</div>
</div>
</template>
<script>
@@ -167,6 +167,14 @@ export default {
this.$parent.channelDetail(this.serviceSeq);
}
}else if(result != null && result.retCode == "1009"){
this.row.title = '관리자명 조회';
this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.madangId.focus();
this.formReset();
this.$refs.madangId.focus();
return false;
}else {
//alert('관리자정보 수정에 실패하였습니다.');
this.formReset();

View File

@@ -37,7 +37,7 @@
<button class="btn-default" @click="excelPopClose">취소</button>
</div>
</div>
<common-modal ref="commmonModal"></common-modal>
<validationConfirm-modal ref="validationConfirmPop"></validationConfirm-modal>
</div>
</div>
</template>
@@ -49,7 +49,7 @@ import { utils_mixin, chkPattern2 } from '../service/mixins';
import xlsx from '@/common/excel';
import moment from 'moment';
import XLSX from 'xlsx';
import commonModal from './commonModal';
import ValidationConfirmPop from "@/modules/custMgt/components/ValidationConfirmPop";
export default {
name: 'memberBulkRegPop',
@@ -68,7 +68,7 @@ export default {
};
},
components: {
commonModal,
ValidationConfirmPop,
},
created() {
this.getExcelHeader();
@@ -132,7 +132,8 @@ export default {
header: this.excelHeader,
dataOrder: 'header',
};
xlsx.export([], saveFileName, options).then(() => {});
xlsx.export([], saveFileName, options).then(() => {
});
},
getExcelHeader() {
// 헤더를 mockup으로 관리한다.
@@ -167,7 +168,8 @@ export default {
this.row.msg1 = '파일을 읽는 동안 에러가 발생 했습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
};
reader.onloadend = (e) => {};
reader.onloadend = (e) => {
};
reader.onload = (e) => {
let data = reader.result;
@@ -272,6 +274,7 @@ export default {
// uploadFile
},
async saveExcel() {
this.row = {}
//
this.row.adminId = this.adminId;
this.row.list = this.nData;
@@ -287,12 +290,17 @@ export default {
this.failCnt = result.data.failCnt;
if (result.data.failCnt > 0) {
this.row.totalCnt = this.totalCnt
this.row.successCnt = this.successCnt
this.row.failCnt = this.failCnt
this.$refs.validationConfirmPop.failFileuploadOpen(this.row);
// 팝업으로 교체 예정
var resultMsg = '파일 업로드 중 오류가 발생하여 정상건만 업로드 완료하였습니다.\n\n 총 '+result.data.totalCnt+'건, 정상 '+ result.data.successCnt+'건, 오류 '+result.data.failCnt+'건\n\n오류건은 확인 후 재등록 부탁 드립니다.';
alert(resultMsg);
this.excelPopClose();
this.$parent.memberDetail(this.adminId);
// var resultMsg = '파일 업로드 중 오류가 발생하여 정상건만 업로드 완료하였습니다.\n\n 총 '+result.data.totalCnt+'건, 정상 '+ result.data.successCnt+'건, 오류 '+result.data.failCnt+'건\n\n오류건은 확인 후 재등록 부탁 드립니다.';
// alert(resultMsg);
// this.excelPopClose();
// this.$parent.memberDetail(this.adminId);
} else {
this.toComplete();
}
}
@@ -302,15 +310,20 @@ export default {
var title = '청약고객 관리\n';
var msg1 = '실패 하였습니다.';
alert(title + msg1);
// this.row.title = '청약고객관리';
// this.row.msg1 = '실패 하였습니다.';
// this.$refs.commmonModal.alertModalOpen(this.row);
// this.$refs.validationConfirmPop.failFileuploadOpen(this.row);
}
// 오류건수.
console.log(this.oData.length);
},
failFileuploadOk(result) {
console.log(result)
if (result) {
this.excelPopClose();
this.$parent.memberDetail(this.adminId);
}
},
},
};
</script>

View File

@@ -27,15 +27,18 @@
</tr>
<tr>
<th>이름</th>
<td><input type="text" v-model.trim="userNm" ref="_userNm"></td>
<td><input type="text" v-model.trim="userNm" ref="_userNm" @keypress="onlyRoleNm_Space"
@input="onlyRoleNm_Space" maxlength="100"></td>
</tr>
<tr>
<th>휴대폰번호</th>
<td><input type="text" v-model.trim="mdn" ref="_phone"></td>
<td><input type="text" placeholder="- 자 제외 숫자만 입력" v-model.trim="mdn" ref="_phone" @keypress="onlyNum"
@input="onlyNum" minlength="10" maxlength="11"></td>
</tr>
<tr>
<th>이메일</th>
<td><input type="email" v-model.trim="email" ref="_email"></td>
<td><input type="email" v-model.trim="email" ref="_email" @keypress="onlyEmail" @input="onlyEmail"
maxlength="100"></td>
</tr>
<tr>
<th class="center">상태</th>
@@ -182,6 +185,11 @@ export default {
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
this.formReset();
},
formReset() {
this.userPwd1 = '';
this.userPwd2 = '';
},
toComplete(){
this.row.serviceId = this.adminId;

View File

@@ -14,19 +14,23 @@
</tr>
<tr>
<th>ID</th>
<td><input type="text" v-model.trim="userId" ref="_userId"></td>
<td><input type="text" v-model.trim="userId" ref="_userId" @keypress="onlyId" @input="onlyId" minlength="6"
maxlength="16"></td>
</tr>
<tr>
<th>이름</th>
<td><input type="text" v-model.trim="userNm" ref="_userNm"></td>
<td><input type="text" v-model.trim="userNm" ref="_userNm" @keypress="onlyRoleNm_Space"
@input="onlyRoleNm_Space" maxlength="100"></td>
</tr>
<tr>
<th>휴대폰번호</th>
<td><input type="text" placeholder="- 자 제외 숫자만 입력" v-model.trim="mdn" ref="_phone"></td>
<td><input type="text" placeholder="- 자 제외 숫자만 입력" v-model.trim="mdn" ref="_phone" @keypress="onlyNum"
@input="onlyNum" minlength="10" maxlength="11"></td>
</tr>
<tr>
<th>이메일</th>
<td><input type="email" v-model.trim="email" ref="_email"></td>
<td><input type="email" v-model.trim="email" ref="_email" @keypress="onlyEmail" @input="onlyEmail"
maxlength="100"></td>
</tr>
<tr>
<th class="center">ID 잠금</th>
@@ -185,6 +189,16 @@ export default {
this.$refs.commmonModal.alertModalOpen(this.row);
return false;
}
// 청약 ID 길이 체크 6~16
var userIdlength = this.userId.length;
if (userIdlength < 6 || userIdlength > 16) {
this.row.title = '청약고객관리';
this.row.msg1 = 'ID 형식에 맞지 않습니다.';
this.row.msg2 = '확인하여 다시 등록 부탁 드립니다.';
this.row.focusTaget = '1';
this.$refs.commmonModal.alertModalOpen(this.row);
return false;
}
if (this.isNull(this.userNm)) {
this.row.title = '청약고객관리';
@@ -204,7 +218,12 @@ export default {
const hp = this.mdn;
if (!this.isNull(hp) && !this.isMobile(hp)) {
this.row.focusTaget = '3';
this.$refs.validationConfirmPopModal.validationPhonenumberOpen();
//this.$refs.validationConfirmPopModal.validationPhonenumberOpen();
this.row.title = '청약고객관리';
this.row.msg1 = '휴대폰번호 형식에 맞지 않습니다.';
this.row.msg2 = '확인하여 다시 등록 부탁 드립니다.';
this.row.focusTaget = '3';
this.$refs.commmonModal.alertModalOpen(this.row);
return false;
}
@@ -217,7 +236,12 @@ export default {
}
const email = this.email;
if (!this.isNull(email) && !lodash.isEqual(email, '@') && !this.emailCheck(email)) {
this.$refs.validationConfirmPopModal.validationEmailOpen();
// this.$refs.validationConfirmPopModal.validationEmailOpen();
this.row.title = '청약고객관리';
this.row.msg1 = 'E-mail 형식에 맞지 않습니다.';
this.row.msg2 = '확인하여 다시 등록 부탁 드립니다.';
this.row.focusTaget = '4';
this.$refs.commmonModal.alertModalOpen(this.row);
return false;
}

View File

@@ -7,8 +7,9 @@
<div class="popup memoTotal popup_form b-popup">
<div class="pop-head">
<h3 class="pop-tit">전체 메모보기</h3>
<span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span>
<!-- <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span> -->
</div>
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span></div>
<table class="table-c">
<custom-grid
ref="table"

View File

@@ -41,7 +41,6 @@
<!-- 시스템관리 팝업 -->
<!-- e: 팝업 -->
</div>
</template>

View File

@@ -1,8 +1,8 @@
<template>
<!-- <div class="wrap bg-wrap"> -->
<div>
<div class="dimmed" @click="ModalClose();"></div>
<div class="popup-wrap">
<div class="dimmed modal29" @click="ModalClose();"></div>
<div class="popup-wrap modal29">
<!-- 테스트 ID 생성 -->
<div class="popup modal29 popup_form">
<div class="pop-head">
@@ -13,7 +13,7 @@
<tbody>
<tr>
<th>ID</th>
<td><input type="text" placeholder="아이디 입력" v-model.trim="userId" ref="_userId" /></td>
<td><input type="text" placeholder="아이디 입력" v-model.trim="userId" ref="_userId" @keypress="onlyId" @input="onlyId" minlength="6" maxlength="16"/></td>
</tr>
<tr>
<th>비밀번호</th>
@@ -25,15 +25,15 @@
</tr>
<tr>
<th>이름</th>
<td><input type="text" @keypress="onlyName" @input="onlyName" v-model.trim="userNm" ref="_userNm" required maxlength="40"></td>
<td><input type="text" @keypress="onlyText" @input="onlyText" v-model.trim="userNm" ref="_userNm" required maxlength="40"></td>
</tr>
<tr>
<th>휴대폰번호</th>
<td><input type="number" placeholder="- 자 제외 숫자만 입력" v-model.trim="mdn" v-on:keyup="onlyNum" @input="onlyNum" minlength="10" maxlength="11" ref="_phone"></td>
<td><input type="text" placeholder="- 자 제외 숫자만 입력" v-model.trim="mdn" @keypress="onlyNum" @input="onlyNum" minlength="10" maxlength="11" ref="_phone"></td>
</tr>
<tr>
<th>이메일</th>
<td><input type="email" v-model.trim="email" @keypress="onlyEmail" @input="onlyEmail" maxlength="20" ref="_email"></td>
<td><input type="email" v-model.trim="email" @keypress="onlyEmail" @input="onlyEmail" maxlength="100" ref="_email"></td>
</tr>
<tr>
<th class="center">상태</th>
@@ -150,6 +150,17 @@ export default {
this.$refs._userId.focus();
return false;
}
// 청약 ID 길이 체크 6~16
var userIdlength = this.userId.length;
if (userIdlength < 6 || userIdlength > 16) {
this.row.title = '청약고객관리';
this.row.msg1 = 'ID 형식에 맞지 않습니다.';
this.row.msg2 = '확인하여 다시 등록 부탁 드립니다.';
this.row.focusTaget = '1';
this.$refs.commmonModal.alertModalOpen(this.row);
return false;
}
if(!this.doPwdValidate()){
return false;
}
@@ -206,24 +217,19 @@ export default {
},
// 모달 띄우기
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('modal29');
obj[0].style.display = 'block';
// 모달 오픈
var dimmed = document.getElementsByClassName('modal29');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
this.formReset();
},
// 모달 끄기
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('modal29');
popup[0].style.display = 'none';
var dimmed = document.getElementsByClassName('modal29');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
},
// 저장 후 부모창 호출.
toComplete(){
@@ -238,10 +244,11 @@ export default {
const response = await custMgtApi.insertTestId(this.row);
const result = response.data;
if (result != null && result.retCode == "0000") {
// this.row.title = '청약고객관리';
// this.row.msg1 = '저장 하였습니다.';
// this.$refs.commmonModal.alertModalOpen(this.row);
this.toComplete();
}else if(result != null && result.retCode == "1009"){
this.row.title = '청약고객관리';
this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
}
} catch(err) {
this.row.title = '청약고객관리';

View File

@@ -165,12 +165,37 @@
<div class="pop-cont">
<p>정상 업로드 되었습니다.</p>
</div>
<div class="pop-btn1">
<div class="popup-btn1">
<button class="btn-pcolor" @click="successFileuploadClose();">확인</button>
</div>
</div>
</div>
<div class="dimmed fail-fileupload" @click="failFileuploadClose();"></div>
<div class="popup-wrap fail-fileupload">
<!-- 사용자 ID 생성 파일 업로드 -->
<div class="popup fail-fileupload">
<div class="pop-head">
<h3 class="pop-tit">사용자 ID 생성 파일 업로드</h3>
</div>
<div class="pop-cont">
<p>파일 업로드 오류가 발생하여 정상건만</p>
<p>업로드 완료하였습니다.</p>
</div>
<ul class="pop-cont-detail">
<li> <span class="number">{{ totalCnt }}</span> ( 정상 <span class="number blue">{{ successCnt }}</span> 오류
<span class="number red">{{ failCnt }}</span> )
</li>
</ul>
<div class="pop-cont bottom">
<p>오류 건은 확인 재등록 부탁 드립니다.</p>
</div>
<div class="popup-btn2">
<button class="btn-pcolor" @click="failFileuploadOk();">확인</button>
<!-- <button class="btn-default" @click="failFileuploadClose();">취소</button>-->
</div>
</div>
</div>
</div>
</template>
@@ -184,6 +209,9 @@ export default {
row: {},
title: '',
msg: '',
failCnt: 0,
successCnt: 0,
totalCnt: 0,
}
},
methods: {
@@ -193,7 +221,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
},
//사용자등록 - 최초등록
confirmInsert() {
@@ -201,9 +228,7 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
this.$parent.memberInsert();
},
//사용자등록 - 최초등록 Close
confirmInsertClose() {
@@ -211,7 +236,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
},
// 사용자 삭제 Open
confirmDeleteOpen() {
@@ -219,7 +243,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
},
//사용자 삭제
confirmDelete() {
@@ -227,7 +250,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
},
//사용자 삭제 Close
confirmDeleteClose() {
@@ -235,7 +257,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
},
//사용자 수정 확인 Open
confirmUpdateOpen() {
@@ -243,7 +264,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
},
//사용자 수정 확인
confirmUpdate() {
@@ -251,9 +271,7 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
this.$parent.memberUpdate();
},
// 사용자 수정 Close
confirmUpdateClose() {
@@ -261,7 +279,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
},
//사용자 수정(청약고객-sub) 확인 Open
confirmUpdateSubOpen() {
@@ -269,7 +286,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
},
//사용자 수정(청약고객-sub) 확인
confirmUpdateSub() {
@@ -277,9 +293,7 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
this.$parent.updateAdminInfo();
},
// 사용자 수정(청약고객-sub) Close
confirmUpdateSubClose() {
@@ -287,7 +301,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
},
// 이메일 형식 체크 Open
validationEmailOpen() {
@@ -295,7 +308,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
},
// 이메일 형식 체크 Close
validationEmailClose() {
@@ -303,9 +315,7 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
this.$parent.checkEmailFocus();
},
// 아이디 중복 체크 Open
validationIdDuplicateOpen() {
@@ -313,7 +323,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
},
// 아이디 중복 체크 Close
validationIdDuplicateClose() {
@@ -321,13 +330,10 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
this.$parent.checkIdDupFocus();
},
// 최대 등록 제한 Open
validationMaxlimitOpen() {
console.log("1231232323")
var dimmed = document.getElementsByClassName('validation-maxlimit');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
@@ -339,9 +345,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
// this.$parent.toComplete();
},
// 휴대폰번호 형식 체크 Open
validationPhonenumberOpen() {
@@ -349,7 +352,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
},
// 휴대폰번호 형식 체크 Close
validationPhonenumberClose() {
@@ -358,7 +360,6 @@ export default {
dimmed[i].style.display = 'none';
}
this.$parent.checkPhoneFocus();
},
// 사용자 ID 생성 파일 업로드 - 성공 Open
successFileuploadOpen() {
@@ -366,7 +367,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
},
// 사용자 ID 생성 파일 업로드 - 성공 Close
successFileuploadClose() {
@@ -374,10 +374,8 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
// 목록페이지 이동
this.toComplete();
},
// 정상완료 후 목록페이지 이동
toComplete() {
@@ -388,23 +386,40 @@ export default {
this.row.startDt = '';
this.row.endDt = '';
this.row.page = 1;
this.$router.push({name: 'subsList', params: this.row});
},
// 사용자 ID 생성 파일 업로드 - 성공 Open
failFileuploadOpen(props) {
var dimmed = document.getElementsByClassName('fail-fileupload');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
this.totalCnt = props.totalCnt
this.successCnt = props.successCnt
this.failCnt = props.failCnt
},
failFileuploadOk() {
var dimmed = document.getElementsByClassName('fail-fileupload');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
this.row.result = true;
// 부모 함수 호출.
this.$parent.failFileuploadOk(this.row);
},
// 사용자 ID 생성 파일 업로드 - 성공 Close
failFileuploadClose() {
var dimmed = document.getElementsByClassName('fail-fileupload');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
},
// 모달 오픈
confirmModalOpen(props) {
var dimmed = document.getElementsByClassName('confirm');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
// var modal41 = document.getElementsByClassName('modal41');
// modal41[0].style.display = 'block';
this.title = props.title;
this.msg = props.msg;
},
@@ -414,7 +429,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
this.row.result = true;
// 부모 함수 호출.
this.$parent.confirmCalbackFnc(this.row);
@@ -425,7 +439,6 @@ export default {
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
this.row.result = false;
// 부모 함수 호출.
this.$parent.confirmCalbackFnc(this.row);
@@ -433,9 +446,3 @@ export default {
}
}
</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

@@ -236,9 +236,3 @@ export default {
}
}
</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

@@ -45,8 +45,11 @@
</tr>
<tr class="tr_input w30">
<th>발송한도 설정</th>
<td colspan="2">
<input type="text" v-model="sendingLimit" ref="_sendingLimit">
<td colspan="2" v-if="sendingLimit=='0'">
<input type="text" v-model="sendingLimit" ref="_sendingLimit" disabled>
</td>
<td colspan="2" v-if="sendingLimit!='0'">
<input type="text" v-model.trim="sendingLimit" ref="_sendingLimit" @keypress="onlyNum" @input="onlyNum" maxlength="20">
</td>
<th class="center">라인타입</th>
<td colspan="2">
@@ -132,6 +135,7 @@
<td>{{ option.userNm }}</td>
<td>{{ option.mdn }}</td>
<td>
<!-- <input type="checkbox" id="user_id_status01" name="user_id_status" v-model="option.userStat" true-value='정상' false-value='사용중지' :style="{cursor: 'default'}" disabled/> -->
<input type="checkbox" id="user_id_status01" name="user_id_status" v-model="option.userStat" true-value='정상' false-value='사용중지' disabled/>
<label class="toggle_switch" for="user_id_status01"></label>
</td>
@@ -160,9 +164,14 @@
</div>
</div>
</template>
<style>
.defaultCursor{
cursor : default;
}
</style>
<script>
import custMgtApi from "../service/custMgtApi.js";
import { utils_mixin, chkPattern2 } from '../service/mixins';
import MemberBulkRegPop from '../components/MemberBulkRegPop';
import MemberRegPop from '../components/MemberRegPop';
import MemberModifyPop from '../components/MemberModifyPop';
@@ -172,6 +181,7 @@ import ValidationConfirmPop from "@/modules/custMgt/components/ValidationConfirm
export default {
name: 'memberAdminDetail',
mixins: [utils_mixin, chkPattern2],
watch:{
stat(){
console.log('watch : ', this.stat)
@@ -201,6 +211,7 @@ export default {
svcUserId:'',
ezSvcUserAuthKey:'',
isActive:true,
//applyTbStyle: 'cursor: default;',
}
},
props: {
@@ -274,7 +285,8 @@ export default {
this.userType = result.data.userType;
this.adminId = result.data.adminId;
this.adminNm = result.data.adminNm;
this.sendingLimit = result.data.sendingLimit.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
//this.sendingLimit = result.data.sendingLimit.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
this.sendingLimit = result.data.sendingLimit;
this.lineType = result.data.lineType;
this.userStat = result.data.userStat;
if(this.userStat === '02'){

View File

@@ -42,7 +42,7 @@
</div>
<div class="select_box id">
<label for="right" class="label">상태</label>
<select name="" id="" v-model="searchType1">
<select name="" id="" v-model="searchType1" @keyup.enter="search">
<option value="" selected>전체</option>
<option v-for="(option, i) in statType" v-bind:value="option.code" v-bind:key="i">
{{ option.codeNm }}
@@ -51,9 +51,9 @@
</div>
<div class="select_box">
<label for="right" class="label">구분</label>
<select name="" id="" v-model="searchType2">
<select name="" id="" v-model="searchType2" @keyup.enter="search">
<option value="" selected>전체</option>
<option value="01" >관리자</option>
<option value="01" selected>관리자</option>
<option value="02">사용자</option>
<option value="03">테스트</option>
</select>
@@ -62,15 +62,15 @@
<div class="group">
<div class="select_box">
<label for="right" class="label">상세검색</label>
<select name="" id="" v-model="searchType3">
<option value="" selected>전체</option>
<select name="" id="" v-model="searchType3" @keyup.enter="search">
<option value="01" selected>ID</option>
<option value="02">이름</option>
<option value="03">관리자ID</option>
</select>
</div>
<div class="input_box">
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText1"/>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" maxlength="100"
v-model.trim="grid.params.searchText1" @keyup.enter="search"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
@@ -81,7 +81,10 @@
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</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>
<option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{
option.text
}}
</option>
</select>
</div>
</div>
@@ -158,7 +161,7 @@ export default {
userType: [],
searchType1: '',
searchType2: '',
searchType3:'',
searchType3: '01',
row: {},
// 테이블 리스트 데이터
@@ -182,7 +185,8 @@ export default {
{name: 'userNm', header: '이름', align: 'center', width: 130},
{name: 'userType', header: '구분', align: 'center', width: 130},
{name: 'adminId', header: '관리자ID', align: 'center', width: 130, cls: 'td_line'},
{ name: 'userId', header: 'ID', align: 'center', width: 130, renderer: {
{
name: 'userId', header: 'ID', align: 'center', width: 130, renderer: {
type: CustomATagRenderer
, options: {
callback: this.memberDetail,

View File

@@ -65,7 +65,6 @@
<div class="title">사용정보</div>
</div>
<div class="table table_form">
<!-- <form autocomplete="off">-->
<table>
<colgroup>
<col style="width:140px">
@@ -107,10 +106,8 @@
</div>
</td>
</tr>
</tbody>
</table>
<!-- </form>-->
</div>
<div class="info">
<div class="title">사용자 데이터</div>
@@ -382,7 +379,8 @@ export default {
},
searchIDPopOpen: function () {
var params = {
"serviceId": this.row.serviceId,
// "serviceId": this.row.serviceId,
"serviceId": this.serviceId,
"serviceSeq": '',
"parentDiv": 'subsDetail'
}
@@ -396,5 +394,4 @@ export default {
}
</script>

View File

@@ -67,14 +67,14 @@
<div class="select_box">
<label for="right" class="label">상세검색</label>
<select name="" id="" v-model="searchType3" @keyup.enter="search">
<option value="">전체</option>
<option value="01">고객사명</option>
<option value="02">가입번호</option>
<option value="03">서비스ID</option>
</select>
</div>
<div class="input_box">
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText1"/>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText1"
maxlength="100" @keyup.enter="search"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
@@ -85,7 +85,10 @@
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</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>
<option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{
option.text
}}
</option>
</select>
</div>
</div>
@@ -164,7 +167,7 @@ export default {
pageType: 'SUBS',
searchType1: '',
searchType2: '',
searchType3:'',
searchType3: '01',
// 테이블 리스트 데이터
perPageCnt: 50,
options: [
@@ -183,7 +186,8 @@ export default {
columns: [
{name: 'no', header: 'No', align: 'center', width: 60},
{ name: 'serviceId', header: '서비스 ID\n(관리자 ID)', align: 'center', width: 160 , renderer: {
{
name: 'serviceId', header: '서비스 ID\n(관리자 ID)', align: 'center', width: 160, renderer: {
type: CustomATagRenderer
, options: {
callback: this.custDetail,
@@ -357,7 +361,8 @@ export default {
dataOrder: 'header'
};
// console.log(data);
xlsx.export(data.list, saveFileName, options).then(() => {});
xlsx.export(data.list, saveFileName, options).then(() => {
});
},
getExcelHeader() {
// 헤더를 mockup으로 관리한다.

View File

@@ -6,12 +6,10 @@
<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 essential">
<label for="right" class="label"><span>*</span>발송일</label>
<!-- <input class="" type="text" id="" placeholder="2022-10-12"> -->
<div class="term">
<span class="custom_input icon_date">
<vuejs-datepicker
@@ -39,25 +37,32 @@
<div class="group">
<div class="input_box essential">
<label for="right" class="label"><span>*</span>수신번호</label>
<input class="search-box" type="number" id="search" placeholder="- 자 제외 숫자만 입력" v-model="grid.params.searchText1" v-on:keyup="onlyNum" @input="onlyNum" minlength="10" maxlength="11" ref="_searchText2">
<input class="search-box" type="text" id="search" placeholder="- 자 제외 숫자만 입력" @keyup.enter="search"
v-model.trim="grid.params.searchText1" @keypress="onlyNum" @input="onlyNum" maxlength="11"
ref="_searchText2">
</div>
<div class="input_box essential">
<label for="right" class="label"><span>*</span>발신번호</label>
<input class="search-box" type="number" id="search" placeholder="- 자 제외 숫자만 입력" v-model="grid.params.searchText2" v-on:keyup="onlyNum" @input="onlyNum" minlength="10" maxlength="11" ref="_searchText2">
<input class="search-box" type="text" id="search" placeholder="- 자 제외 숫자만 입력" @keyup.enter="search"
v-model.trim="grid.params.searchText2" @keypress="onlyNum" @input="onlyNum" maxlength="11"
ref="_searchText2">
</div>
<div class="input_box">
<label for="right" class="label">고객사명</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText3" ref="_searchText3">
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model.trim="grid.params.searchText3"
@keypress="onlyName" @input="onlyName" @keyup.enter="search" ref="_searchText3" maxlength="100">
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</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>
<option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{
option.text
}}
</option>
</select>
</div>
</div>
@@ -81,9 +86,9 @@
</table>
</div>
<common-modal ref="commmonModal"></common-modal>
</div>
<common-modal ref="commmonModal"></common-modal>
</div>
</template>
@@ -91,8 +96,6 @@
import customGrid from '@/components/CustomGrid';
import {utils_mixin, chkPattern2} from '../service/mixins';
import moment from 'moment';
import xlsx from '@/common/excel';
//import commonModal from "@/components/modal/commonModal";
import commonModal from "../components/commonModal";
class CustomATagRenderer {
@@ -132,7 +135,7 @@ export default {
statType: [],
userType: [],
row: {},
initMode: false,
pageType: 'SUBS',
// 테이블 리스트 데이터
@@ -205,7 +208,10 @@ export default {
// this.getExcelHeader();
this.setPeriodDay(0);
this.grid.params.searchType1 = '';
// this.$refs.table.cleanData();
this.initMode = true;
},
destroyed() {
this.grid.params.searchType1 = '';
this.grid.params.searchText1 = '';
@@ -229,7 +235,7 @@ export default {
page = getCondition.page;
isKeep = true;
}
//this.search(isKeep);
this.search(isKeep);
},
beforeRouteLeave(to, from, next) {
@@ -245,6 +251,10 @@ export default {
},
methods: {
search: function (isKeep) {
if (this.initMode) {
this.grid.params.phone = 99999999999;
this.grid.params.callbackNumber = 99999999999;
} else {
if (this.doValidate()) {
this.grid.params.sentDate = moment(this.startDate).format('YYYYMMDD');
this.grid.params.reqChennel = this.grid.params.searchType1;
@@ -252,9 +262,11 @@ export default {
this.grid.params.callbackNumber = this.grid.params.searchText2;
this.grid.params.custNm = this.grid.params.searchText3;
console.log(this.grid.params);
}
}
this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData();
}
this.initMode = false;
},
setPeriodDay(day) {
this.periodDay = day;

View File

@@ -1,8 +1,8 @@
<template>
<!-- <div class="wrap bg-wrap"> -->
<div>
<div class="dimmed" @click="ModalClose();"></div>
<div class="popup-wrap">
<div class="dimmed modal52" @click="ModalClose();"></div>
<div class="popup-wrap modal52">
<!-- 발신번호 차단 신규 등록 -->
<div class="popup modal52 popup_form">
@@ -14,7 +14,8 @@
<tbody>
<tr>
<th>발신번호</th>
<td><input type="number" placeholder="- 자 제외 숫자만 입력" maxlength="11" v-model.trim="blckSndrno" v-on:keyup="onlyNum" @input="onlyNum" ref="_blckSndrno"></td>
<td><input type="text" placeholder="- 자 제외 숫자만 입력" v-model.trim="blckSndrno"
@keypress="onlyNum" @input="onlyNum" minlength="10" maxlength="11" ref="_blckSndrno"></td>
</tr>
<tr>
<th>발송타입</th>
@@ -24,16 +25,7 @@
<option v-for="(option, i) in tpType" :value="option.code" v-bind:key="i">
{{ option.codeNm }}
</option>
<!--
<option v-for="(option, i) in tpType"
:v-bind:value="option.grpCd"
v-bind:key="i"
:selected="code === option.grpCd"
>
{{ option.codeNm }}
</option> -->
<!-- <option value="">문자</option>
<option value="">RCS</option> -->
</select>
</div>
</td>
@@ -52,7 +44,8 @@
</tr>
<tr>
<th>메모</th>
<td class="sender"><textarea class="memo_text" v-model.trim="meno" ref="meno" @input="memoLimitByte()"></textarea></td>
<td class="sender"><textarea class="memo_text" v-model.trim="meno" ref="meno" maxlength="1000"
@input="memoLimitByte()"></textarea></td>
</tr>
</tbody>
</table>
@@ -74,8 +67,9 @@ import api from '@/service/api';
import riskMgtApi from '../service/riskMgtApi'
import {utils_mixin, chkPattern2} from '../service/mixins';
import lodash from "lodash";
import commonModal from "@/components/modal/commonModal";
// import commonModal from "@/components/modal/commonModal";
import ValidationConfirmPopup from './ValidationConfirmPopup.vue';
export default {
mixins: [utils_mixin, chkPattern2],
data() {
@@ -107,29 +101,27 @@ export default {
//this.sndblckTpCd = '01'
},
components: {
commonModal,
// commonModal,
ValidationConfirmPopup
},
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';
var dimmed = document.getElementsByClassName('modal52');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].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';
this.formReset();
var dimmed = document.getElementsByClassName('modal52');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
},
// 저장 후 부모창 호출
@@ -249,7 +241,23 @@ export default {
</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;}
.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,8 +1,8 @@
<template>
<!-- <div class="wrap bg-wrap"> -->
<div>
<div class="dimmed" @click="ModalClose();"></div>
<div class="popup-wrap">
<div class="dimmed modal57" @click="ModalClose();"></div>
<div class="popup-wrap modal57">
<!-- 메시지 차단 신규 등록 -->
<div class="popup popup_form modal57">
<div class="pop-head">
@@ -75,6 +75,7 @@ import riskMgtApi from '../service/riskMgtApi';
import lodash from "lodash";
import {utils_mixin, chkPattern2} from '../service/mixins';
import ValidationConfirmPopup from './ValidationConfirmPopup.vue';
export default {
mixins: [utils_mixin, chkPattern2],
data() {
@@ -112,25 +113,19 @@ export default {
methods: {
ModalOpen() {
this.formReset();
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('modal57');
obj[0].style.display = 'block';
var dimmed = document.getElementsByClassName('modal57');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].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('modal57');
popup[0].style.display = 'none';
this.formReset();
var dimmed = document.getElementsByClassName('modal57');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
},
setCodeDate() {

View File

@@ -154,8 +154,7 @@ const utils_mixin = {
var chkPattern2 = {
data: function () {
return {
}
return {}
},
methods: {
selSesStorage(keyLike) {
@@ -342,9 +341,15 @@ const utils_mixin = {
if (str.charAt(0) != "0") {
str = "0" + str;
}
if (str.length<10||str.length>12){return "";}
if (isNaN(str)){return ""; }
if (str.substr(0,2)!="01" && str.substr(0,3)!="070" && str.substr(0,4)!="0505" && str.substr(0,4)!="0503"){return ""; }
if (str.length < 10 || str.length > 12) {
return "";
}
if (isNaN(str)) {
return "";
}
if (str.substr(0, 2) != "01" && str.substr(0, 3) != "070" && str.substr(0, 4) != "0505" && str.substr(0, 4) != "0503") {
return "";
}
return str;
},

View File

@@ -7,7 +7,6 @@
<h3 class="title">웹발송 차단내역</h3>
<p class="breadcrumb">리스크관리 &gt; 차단 내역</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<label for="right" class="label">발송일</label>
<div class="group">
@@ -18,13 +17,6 @@
v-model="startDate"
@selected="selectedStartDate(0)"
></vuejs-datepicker>
<!-- <input class="" type="text" id=""
placeholder="2022-10-12"
v-model="grid.params.startDt"
@click="openStartPicker = true" />
<div v-show="openStartPicker === true">
<calendar ref="calendar"/> -->
<!-- </div> -->
</div>
<button type="button" class="button grey btn-a" @click="todayDate">오늘</button>
<div class="select_box id">
@@ -52,11 +44,13 @@
<div class="group">
<div class="input_box">
<label for="right" class="label">발신번호</label>
<input class="search-box" type="number" id="search" placeholder="검색어 입력" v-model="grid.params.sndrno" v-on:keyup="onlyNum" @input="onlyNum" maxlength="12">
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model.trim="grid.params.sndrno"
@keypress="onlyNum" @input="onlyNum" maxlength="11">
</div>
<div class="input_box">
<label for="right" class="label">수신번호</label>
<input class="search-box" type="number" id="search" placeholder="검색어 입력" v-model="grid.params.rcvno" v-on:keyup="onlyNum" @input="onlyNum" maxlength="12">
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model.trim="grid.params.rcvno"
@keypress="onlyNum" @input="onlyNum" maxlength="11">
</div>
<div class="select_box">
<label for="right" class="label">상세검색</label>
@@ -67,17 +61,20 @@
</select>
</div>
<div class="input_box">
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText1">
<input class="search-box" type="text" id="search" placeholder="검색어 입력"
v-model.trim="grid.params.searchText1" maxlength="100">
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</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>
<option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{
option.text
}}
</option>
</select>
</div>
</div>
@@ -130,6 +127,7 @@ class CustomATagRenderer {
});
}
}
export default {
name: 'intrcpList',
mixins: [utils_mixin, chkPattern2],
@@ -181,12 +179,14 @@ export default {
{name: 'blckTpCd', header: '차단구분', align: 'center', width: '11%'},
{name: 'userId', header: '발송ID', align: 'center', width: '11%'},
{name: 'sndrno', header: '발신번호', align: 'center', width: '11%'},
{ name: 'custNm', header: '고객사명', align: 'center', width: '11%', renderer: {
{
name: 'custNm', header: '고객사명', align: 'center', width: '11%', renderer: {
type: CustomATagRenderer
, options: {
callback: this.custDetail,
}
}},
}
},
{name: 'bizrno', header: '사업자번호', align: 'center', width: '11%'},
{name: 'rcvno', header: '수신번호', align: 'center', width: '11%'},
{name: 'blckRsnCd', header: '차단사유', align: 'center', width: '7%'},

View File

@@ -6,12 +6,12 @@
<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" v-on:keyup="onlyEng" @input="onlyEng" maxlength="20" />
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model.trim="grid.params.regId"
v-on:keydown.enter.prevent="search" v-on:keyup="onlyEng" @input="onlyEng" maxlength="20"/>
</div>
<div class="select_box">
<label for="blckRsnCd" class="label">차단사유</label>
@@ -46,17 +46,20 @@
</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">
<input class="search-box" type="text" id="search" placeholder="검색어 입력"
v-model.trim="grid.params.blckSndrno">
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</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>
<option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{
option.text
}}
</option>
</select>
</div>
</div>
@@ -80,11 +83,11 @@
:header="grid.headder"
></custom-grid>
</div>
</div>
<insert-intrcp-pop ref="insertIntrcpPop"></insert-intrcp-pop>
<intrcp-detail-popup ref="intrcpDetailPopup"></intrcp-detail-popup>
<common-modal ref="commonModal"></common-modal>
</div>
</div>
</template>
<script>
@@ -94,7 +97,6 @@ import intrcpDetailPopup from '../components/IntrcpDetailPopup';
import insertIntrcpPop from '../components/InsertIntrcpPop';
import commonModal from "@/components/modal/commonModal";
import {utils_mixin, chkPattern2} from '../service/mixins';
//import api from '../service/api';
class CustomATagRenderer {
constructor(props) {
@@ -156,8 +158,10 @@ export default {
columns: [
{name: 'no', header: 'NO', align: 'center', width: '5%'},
{ name: 'blcksndrno', header: '발신번호', align: 'center', width: '25%',
renderer: { type: CustomATagRenderer, options: { callback: this.inDetailPop} } },
{
name: 'blcksndrno', header: '발신번호', align: 'center', width: '25%',
renderer: {type: CustomATagRenderer, options: {callback: this.inDetailPop}}
},
{name: 'blckYn', header: '차단여부', align: 'center', width: '15%'},
{name: 'sndblckTpCd', header: '발송타입', align: 'center', width: '15%', hidden: true},
{name: 'sndblckTpNm', header: '발송타입', align: 'center', width: '15%'},

View File

@@ -10,7 +10,8 @@
<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" v-on:keyup="onlyEng" @input="onlyEng" maxlength="20"/>
<input class="search-box" type="text" id="regId" placeholder="검색어 입력" v-model.trim="grid.params.regId"
v-on:keydown.enter.prevent="search" v-on:keyup="onlyEng" @input="onlyEng" maxlength="20"/>
</div>
<div class="select_box">
<label for="blckRsnCd" class="label">차단사유</label>
@@ -26,7 +27,8 @@
</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" />
<input class="search-box" type="text" id="word" placeholder="검색어 입력" v-model.trim="grid.params.word"
v-on:keydown.enter.prevent="search" maxlength="50"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
@@ -35,7 +37,10 @@
<div class="count"> <span> {{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }} </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>
<option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{
option.text
}}
</option>
</select>
</div>
</div>
@@ -71,7 +76,7 @@ import InsertMsgPop from '../components/InsertMsgPop';
import IntrcpMsgDetail from '../components/IntrcpMsgDetail';
import commonModal from "@/components/modal/commonModal";
import {utils_mixin, chkPattern2} from '../service/mixins';
//import api from '../service/api';
class CustomATagRenderer {
constructor(props) {
this.props = props;
@@ -93,6 +98,7 @@ class CustomATagRenderer {
});
}
}
export default {
name: 'intrcpList',
mixins: [utils_mixin, chkPattern2],
@@ -131,8 +137,10 @@ export default {
columns: [
{name: 'no', header: 'NO', align: 'center', width: '5%'},
{name: 'seqNo', header: '일련번호', align: 'center', width: '19%', hidden: true},
{ name: 'word', header: '차단메시지', align: 'center', width: '19%',
renderer: {type: CustomATagRenderer, options: { callback: this.msgDetailPop}} },
{
name: 'word', header: '차단메시지', align: 'center', width: '19%',
renderer: {type: CustomATagRenderer, options: {callback: this.msgDetailPop}}
},
{name: 'blckYn', header: '차단여부', align: 'center', width: '19%'},
{name: 'lastChgDt', header: '마지막 수정일', align: 'center', width: '19%'},
{name: 'blckRsnCd', header: '차단사유', align: 'center', width: '19%'},

View File

@@ -11,15 +11,19 @@
<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" v-on:keyup="onlyName" @input="onlyName" maxlength="20"/>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model.trim="grid.params.custNm"
@keypress="onlyName" @input="onlyName" maxlength="20"/>
</div>
<div class="input_box">
<label for="search" class="label">인증코드</label>
<input class="search-box" type="number" id="search" placeholder="검색어 입력" v-model="grid.params.authcd080" v-on:keyup="onlyNum" @input="onlyNum" maxlength="6"/>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model.trim="grid.params.authcd080"
@keypress="onlyNum" @input="onlyNum" maxlength="6"/>
</div>
<div class="input_box">
<label for="search" class="label">수신번호</label>
<input class="search-box" type="number" id="search" placeholder="검색어 입력" v-model="grid.params.rcvblckno" v-on:keyup="onlyNum" @input="onlyNum" maxlength="11"/>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model.trim="grid.params.rcvblckno"
@keypress="onlyNum"
@input="onlyNum" maxlength="11"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
@@ -28,7 +32,10 @@
<div class="count"> <span> {{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }} </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>
<option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{
option.text
}}
</option>
</select>
</div>
</div>
@@ -58,6 +65,7 @@
import customGrid from '@/components/CustomGrid';
import commonModal from "@/components/modal/commonModal";
import {utils_mixin, chkPattern2} from '../service/mixins';
//import api from '../service/api';
class CustomATagRenderer {
constructor(props) {
@@ -80,6 +88,7 @@ class CustomATagRenderer {
});
}
}
class customBRegNo {
constructor(props) {
//this.props = props;
@@ -99,6 +108,7 @@ class customBRegNo {
addEvent(selEl) {
}
}
export default {
name: 'intrcpList',
mixins: [utils_mixin, chkPattern2],
@@ -134,18 +144,15 @@ export default {
columns: [
{name: 'no', header: 'NO', align: 'center', width: '5%'},
{ name: 'custNm', header: '고객사', align: 'center', width: '15%', renderer: {
{
name: 'custNm', header: '고객사', align: 'center', width: '15%', renderer: {
type: CustomATagRenderer
, options: {
callback: this.memberDetail,
}
} },
{ name: 'bizrno', header: '사업자번호', align: 'center', width: '15%',
formatter: props => {
let result = props.bizrno.substring(0,3)+'-'+ props.bizrno.substring(3,5)+'-'+ props.bizrno.substring(5,10)
return result;
}
},
{name: 'bizrno', header: '사업자번호', align: 'center', width: '15%'},
{name: 'authcd080', header: '인증코드', align: 'center', width: '15%'},
{name: 'rcvblckno', header: '수신번호', align: 'center', width: '15%'},
{name: 'regDt', header: '등록일', align: 'center', width: '20%'},

View File

@@ -8,7 +8,7 @@
<div class="pop-cont-detail input_box">
<label>ID</label>
<div class="input_search">
<input class="search-box" type="text" value="" v-model="searchText1">
<input class="search-box" type="text" value="" v-model="searchText1" maxlength="100">
<button type="button" class="button btn-p2color" @click="adminList">조회</button>
</div>
</div>

View File

@@ -1,8 +1,8 @@
<template>
<!-- <div class="wrap bg-wrap"> -->
<div>
<div class="dimmed" @click="apprDetailPopClose"></div>
<div class="popup-wrap">
<div class="dimmed modal55" @click="apprDetailPopClose"></div>
<div class="popup-wrap modal55">
<!-- 발신번호 상세 (타사업자)-->
<div class="popup modal55 popup_form">
<div class="pop-head">
@@ -137,14 +137,10 @@ export default {
// 모달 띄우기
apprDetailPopOpen(props){
// this.formReset();
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('modal55');
obj[0].style.display = 'block';
var dimmed = document.getElementsByClassName('modal55');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
this.apprDetail(props);
},
@@ -198,12 +194,10 @@ export default {
},
// 모달 끄기
apprDetailPopClose(){
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('modal55');
popup[0].style.display = 'none';
var dimmed = document.getElementsByClassName('modal55');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
},
allApprSttus(event) {
var data = event.target.value;

View File

@@ -29,9 +29,11 @@
<tr v-show="bizrAuthYn !== 'Y'">
<th>명의자 구분</th>
<td>
<input type="radio" name="nmineeDivCd" value="01" id="popup_radio5" v-model="nmineeDivCd" @change="changeNmineDiv($event)">
<input type="radio" name="nmineeDivCd" value="01" id="popup_radio5" v-model="nmineeDivCd"
@change="changeNmineDiv($event)">
<label for="popup_radio5">사업자</label>
<input type="radio" name="nmineeDivCd" value="02" id="popup_radio6" v-model="nmineeDivCd" @change="changeNmineDiv($event)">
<input type="radio" name="nmineeDivCd" value="02" id="popup_radio6" v-model="nmineeDivCd"
@change="changeNmineDiv($event)">
<label for="popup_radio6">타사업자</label>
</td>
</tr>
@@ -41,12 +43,14 @@
<div class="input_add">
<div>
<input type="text" placeholder="발신번호명" v-model="sendNm" maxlength="20">
<input type="text" placeholder="발신번호(숫자만입력)" v-model="sendNum" v-on:keyup="onlyNum" @input="onlyNum" maxlength="16">
<input type="text" placeholder="발신번호(숫자만입력)" v-model="sendNum" @keypress="onlyNum" @input="onlyNum"
maxlength="11">
<button class="button white add" @click="addNumberInput"></button>
</div>
<div v-for="(numberInput, index) in numberInputs">
<input type="text" placeholder="발신번호명" v-model="numberInput.sendNm" maxlength="20">
<input type="text" placeholder="발신번호(숫자만입력)" v-model="numberInput.sendNum" v-on:keyup="onlyNum" @input="onlyNum" maxlength="16">
<input type="text" placeholder="발신번호(숫자만입력)" v-model="numberInput.sendNum" @keypress="onlyNum"
@input="onlyNum" maxlength="11">
</div>
</div>
</td>
@@ -56,37 +60,43 @@
<td>
<div class="attach" v-show="fileType === 2">
<p class="essential list"><span>*</span>위임-수임관계 확인 서류</p>
<input type="file" ref="trustFile" style="display: none" @change="readTrustFile" accept=".jpg,.png,.pdf,.tiff"/>
<input type="file" ref="trustFile" style="display: none" @change="readTrustFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.trustFile.click()">파일업로드</button>
<p class="file" id="trustNm"></p>
</div>
<div class="attach" v-show="fileType === 2">
<p class="essential list"><span>*</span>위임장</p>
<input type="file" ref="warrantFile" style="display: none" @change="readWarrantFile" accept=".jpg,.png,.pdf,.tiff"/>
<input type="file" ref="warrantFile" style="display: none" @change="readWarrantFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.warrantFile.click()">파일업로드</button>
<p class="file" id="warrantNm"></p>
</div>
<div class="attach" v-show="fileType === 2">
<p class="essential list"><span>*</span>대리인 신분증 사본 인증</p>
<input type="file" ref="deputyFile" style="display: none" @change="readDeputyFile" accept=".jpg,.png,.pdf,.tiff"/>
<input type="file" ref="deputyFile" style="display: none" @change="readDeputyFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.deputyFile.click()">파일업로드</button>
<p class="file" id="deputyNm"></p>
</div>
<div class="attach">
<p class="essential list"><span>*</span>통신서비스 이용증명원</p>
<input type="file" ref="communicationFile" style="display: none" @change="readCommunicationFile" accept=".jpg,.png,.pdf,.tiff"/>
<input type="file" ref="communicationFile" style="display: none" @change="readCommunicationFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.communicationFile.click()">파일업로드</button>
<p class="file" id="communicationNm"></p>
</div>
<div class="attach">
<p class="essential list"><span>*</span>재직증명서</p>
<input type="file" ref="tenureFile" style="display: none" @change="readTenureFile" accept=".jpg,.png,.pdf,.tiff"/>
<input type="file" ref="tenureFile" style="display: none" @change="readTenureFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.tenureFile.click()">파일업로드</button>
<p class="file" id="tenureNm"></p>
</div>
<div class="attach" v-show="fileType === 2">
<p class="essential list"><span>*</span>사업자등록증</p>
<input type="file" ref="otherBusinessFile" style="display: none" @change="readOtherBusinessFile" accept=".jpg,.png,.pdf,.tiff"/>
<input type="file" ref="otherBusinessFile" style="display: none" @change="readOtherBusinessFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.otherBusinessFile.click()">파일업로드</button>
<p class="file" id="otherBusinessNm"></p>
</div>
@@ -98,7 +108,8 @@
<td v-show="bizrAuthYn !== 'Y'">
<div class="attach">
<p class="essential list"><span>*</span>사업자등록증</p>
<input type="file" ref="businessFile" style="display: none" @change="readBusinessFile" accept=".jpg,.png,.pdf,.tiff"/>
<input type="file" ref="businessFile" style="display: none" @change="readBusinessFile"
accept=".jpg,.png,.pdf,.tiff"/>
<button class="button btn-p2color" @click="$refs.businessFile.click()">파일업로드</button>
<p class="file" id="businessNm"></p>
</div>

View File

@@ -0,0 +1,183 @@
<template>
<!-- <div class="wrap bg-wrap"> -->
<div>
<div class="dimmed alertCommon" @click="alertModalCancel();"></div>
<div class="popup-wrap alertCommon">
<!-- 로그인실패: 확인 -->
<div class="popup alertCommon">
<div class="pop-head">
<h3 class="pop-tit">{{title}}</h3>
</div>
<div class="pop-cont">
<p>{{ msg1 }}</p>
<p v-if="msg2 !== ''">{{ msg2 }}</p>
<p v-if="msg3 !== ''">{{ msg3 }}</p>
<p v-if="msg4 !== ''">{{ msg4 }}</p>
</div>
<div class="popup-btn1">
<button class="btn-pcolor" @click="alertModalClose();">확인</button>
</div>
</div>
</div>
<div class="dimmed confirm" @click="confirmModalCancel();"></div>
<div class="popup-wrap confirm">
<!-- 수정 확인 -->
<div class="popup confirm">
<div class="pop-head">
<h3 class="pop-tit">{{title}}</h3>
</div>
<div class="pop-cont">
<p>{{ msg1 }}</p>
<p v-if="msg2 !== ''">{{ msg2 }}</p>
<p v-if="msg3 !== ''">{{ msg3 }}</p>
<p v-if="msg4 !== ''">{{ msg4 }}</p>
</div>
<div class="popup-btn2">
<button class="btn-pcolor" @click="confirmModalClose();">확인</button>
<button class="btn-default" @click="confirmModalCancel();">취소</button>
</div>
</div>
</div>
<div class="dimmed confirm2" @click="confirmModalCancel2();"></div>
<div class="popup-wrap confirm2">
<!-- 수정 확인 -->
<div class="popup confirm2">
<div class="pop-head">
<h3 class="popup-tit">{{title}}</h3>
</div>
<div class="pop-cont">
<p>{{ msg1 }}</p>
<p v-if="msg2 !== ''">{{ msg2 }}</p>
<p v-if="msg3 !== ''">{{ msg3 }}</p>
<p v-if="msg4 !== ''">{{ msg4 }}</p>
</div>
<div class="popup-btn2">
<button class="btn-pcolor" @click="confirmModalClose2();">확인</button>
<button class="btn-default" @click="confirmModalCancel2();">취소</button>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "confirm",
data(){
return{
row:{},
title:'',
msg1: '',
msg2: '',
msg3: '',
msg4: '',
}
},
methods :{
alertModalOpen(props){
console.log("@@@@@@@@@@")
console.log(props)
var dimmed = document.getElementsByClassName('alertCommon');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'block';
}
this.title = props.title;
this.msg1 = props.msg1;
this.msg2 = props.msg2;
this.msg3 = props.msg3;
this.msg4 = props.msg4;
},
alertModalClose(){
var dimmed = document.getElementsByClassName('alertCommon');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
},
alertModalCancel(){
var dimmed = document.getElementsByClassName('alertCommon');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
},
// 모달 오픈
confirmModalOpen(props){
var dimmed = document.getElementsByClassName('confirm');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'block';
}
this.title = props.title;
this.msg1 = props.msg1;
this.msg2 = props.msg2;
this.msg3 = props.msg3;
this.msg4 = props.msg4;
},
confirmModalOpen2(props){
var dimmed = document.getElementsByClassName('confirm2');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'block';
}
this.title = props.title;
this.msg1 = props.msg1;
this.msg2 = props.msg2;
this.msg3 = props.msg3;
this.msg4 = props.msg4;
},
// 모달 끄기(ok)
confirmModalClose(){
var dimmed = document.getElementsByClassName('confirm');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
this.row.result = true;
// 부모 함수 호출.
this.$parent.confirmCalbackFnc(this.row);
},
// 모달 끄기(ok)
confirmModalClose2(){
var dimmed = document.getElementsByClassName('confirm2');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
this.row.result = true;
// 부모 함수 호출.
this.$parent.confirmCalbackFnc(this.row);
},
// 모달 끄기(취소)
confirmModalCancel(){
var dimmed = document.getElementsByClassName('confirm');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
this.row.result = false;
// 부모 함수 호출.
this.$parent.confirmCalbackFnc(this.row);
},
// 모달 끄기(취소)
confirmModalCancel2(){
var dimmed = document.getElementsByClassName('confirm2');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
this.row.result = false;
// 부모 함수 호출.
this.$parent.confirmCalbackFnc(this.row);
},
}
}
</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

@@ -6,7 +6,6 @@
<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">
@@ -19,7 +18,8 @@
</div>
<div class="input_box">
<label for="right" class="label">사업자번호</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText1" @keyup.enter="search"/>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText1"
@keypress="onlyNum" @input="onlyNum" maxlength="10" @keyup.enter="search"/>
</div>
<div class="select_box id">
<label for="right" class="label">명의자 구분</label>
@@ -31,13 +31,13 @@
</div>
<div class="input_box">
<label for="right" class="label">고객사명</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText2" @keyup.enter="search"/>
<input class="search-box" type="text" id="search" placeholder="검색어 입력"
v-model.trim="grid.params.searchText2"
@keyup.enter="search" maxlength="100"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span>
<div class="select_box NumberSe">
@@ -74,26 +74,7 @@
<script>
import customGrid from '@/components/CustomGrid';
import ApprDetailPop from "@/modules/sendNumMgt/components/ApprDetailPop";
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) {
}
}
import {utils_mixin, chkPattern2} from '../service/mixins';
class CustomATagRenderer {
constructor(props) {
@@ -119,6 +100,7 @@ class CustomATagRenderer {
export default {
name: 'apprList',
mixins: [utils_mixin, chkPattern2],
data() {
return {
row: {},
@@ -142,10 +124,11 @@ export default {
{name: 'regReqNo', hidden: true},
{name: 'regDt', header: '요청일', align: 'center', width: '12%'},
{name: 'adminId', header: '관리자ID', align: 'center', width: '10%'},
{ name: 'bizrno', header: '사업자번호', align: 'center', width: '13%', renderer: {type: customBRegNo}},
{name: 'bizrno', header: '사업자번호', align: 'center', width: '13%'},
{name: 'nmineeDivCd', header: '명의자 구분', align: 'center', width: '10%'},
{name: 'custNm', header: '고객사명', align: 'center', width: '10%'},
{ name: 'reqCnt', header: '요청건수', align: 'center', width: '6%', renderer: {
{
name: 'reqCnt', header: '요청건수', align: 'center', width: '6%', renderer: {
type: CustomATagRenderer
, options: {
callback: this.apprDetail,

View File

@@ -6,7 +6,6 @@
<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">
@@ -51,12 +50,13 @@
</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"/>
<input class="search-box" type="text" id="search" placeholder="검색어 입력"
v-model.trim="grid.params.searchText1"
maxlength="100" @keyup.enter="search"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span>
<div class="select_box NumberSe">
@@ -176,7 +176,8 @@ export default {
{name: 'bregNo', header: '사업자번호', align: 'center', width: '10%'},
{name: 'nmineeDivCd', header: '명의자 구분', align: 'center', width: '10%'},
{name: 'inchDivCd', header: '인입채널', align: 'center', width: '10%'},
{ name: 'sndrno', header: '발신번호', align: 'center', width: '10%', renderer: {
{
name: 'sndrno', header: '발신번호', align: 'center', width: '10%', renderer: {
type: CustomATagRenderer
, options: {
callback: this.numberDetail,
@@ -221,7 +222,8 @@ export default {
searchType4: '',
searchText1: '',
pagePerRows: '',
page: ''}
page: ''
}
});
},
mounted() {

View File

@@ -6,7 +6,6 @@
<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>
@@ -28,11 +27,11 @@
</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" />
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model.trim="grid.params.searchText1"
maxlength="100" @keyup="search"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span> {{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }} </span>
<div class="select_box NumberSe">
@@ -65,26 +64,9 @@
<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() {
@@ -120,7 +102,7 @@ export default {
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: 'bregNo', header: '사업자번호', align: 'center', width: 100},
{name: 'sendProfile', header: '발신프로필', align: 'center', width: 100},
{name: 'sendProfileKey', header: '발신프로필key', align: 'center', width: 100},
{name: 'stat', header: '상태', width: 100, cls: 'td_line'},

View File

@@ -5,7 +5,6 @@
<h3 class="title">080수신거부 인증코드 조회</h3>
<p class="breadcrumb">서비스관리 &gt; 080수신거부 인증코드 조회</p>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="select_box">
<label for="stat" class="label">사용상태</label>
@@ -25,16 +24,19 @@
</div>
<div class="input_box id">
<label for="search" class="label">검색어</label>
<input type="text" id="id1" placeholder="검색어 입력" v-model="grid.params.searchText1" v-on:keydown.enter.prevent="search"/>
<input type="text" id="id1" placeholder="검색어 입력" v-model.trim="grid.params.searchText1"
@keyup.enter="search" maxlength="100"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</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>
<option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{
option.text
}}
</option>
</select>
</div>
@@ -68,27 +70,6 @@ import customGrid from '@/components/CustomGrid';
//import api from '../service/api';
import commonModal from "@/components/modal/commonModal";
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: 'rejectRecvList',
data() {
@@ -130,7 +111,7 @@ export default {
columns: [
{name: 'no', header: 'NO', align: 'center', width: '5%'},
{name: 'custNm', header: '고객사명', align: 'center', width: '15%'},
{ name: 'bregNo', header: '사업자번호', align: 'center', width: '10%', renderer: {type: customBRegNo}},
{name: 'bregNo', header: '사업자번호', align: 'center', width: '10%'},
{name: 'userId', header: '관리자ID', align: 'center', width: '15%'},
{name: 'authcd080', header: '인증코드', align: 'center', width: '10%'},
{name: 'useYN', header: '사용여부', align: 'center', width: '10%', cls: 'td_line'},
@@ -161,7 +142,8 @@ export default {
params: {
searchType1: '',
searchType2: '',
searchText1: ''}
searchText1: ''
}
});
},
mounted() {

View File

@@ -0,0 +1,358 @@
import lodash from "lodash";
const utils_mixin = {
methods: {
/** * 이메일 형식 체크 * * @param 데이터 */
emailCheck(email, rtnArrYn) {
if (this.isNull(rtnArrYn)) {
rtnArrYn = 'N';
}
// var regExp = /(^[A-Za-z0-9_\.\-]+)@([A-Za-z0-9\-]+\.[A-Za-z0-9\-]+)/;
var regExp = /^([0-9a-zA-Z_\.\-]([-_.]?[0-9a-zA-Z_\.\-])*)@([0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$)/i;//이메일 정규식
if (regExp.test(email) == false) {
// 이메일 형식이 알파벳+숫자@알파벳+숫자.알파벳+숫자 형식이 아닐경우
if (rtnArrYn == 'Y') {
return email;
}
return false;
} else {
var myArray = regExp.exec(email);
if (rtnArrYn == 'Y') {
return myArray;
}
return true;
}
},
/** * 전화번호 포맷으로 변환 * * @param 데이터 */
formatPhone(phoneNum, fmt, rtnArrYn) {
if (this.isNull(fmt)) {
fmt = '';
}
if (this.isNull(rtnArrYn)) {
fmt = 'N';
}
if (this.isPhone(phoneNum)) {
var rtnNum;
var regExp = /(02)([0-9]{3,4})([0-9]{4})$/;
var myArray;
if (regExp.test(phoneNum)) {
myArray = regExp.exec(phoneNum);
rtnNum = myArray[1] + fmt + myArray[2] + fmt + myArray[3];
if (rtnArrYn == 'Y') {
return myArray;
}
return rtnNum;
} else {
regExp = /(0[3-9]{1}[0-9]{1})([0-9]{3,4})([0-9]{4})$/;
if (regExp.test(phoneNum)) {
myArray = regExp.exec(phoneNum);
rtnNum = myArray[1] + fmt + myArray[2] + fmt + myArray[3];
if (rtnArrYn == 'Y') {
return myArray;
}
return rtnNum;
} else {
return phoneNum;
}
}
} else {
return phoneNum;
}
},
/** * 핸드폰번호 포맷으로 변환 * * @param 데이터 */
formatMobile(phoneNum, fmt, rtnArrYn) {
if (this.isNull(fmt)) {
fmt = '';
}
if (this.isNull(rtnArrYn)) {
fmt = 'N';
}
if (this.isMobile(phoneNum)) {
var rtnNum;
var regExp = /(01[016789])([0-9]{3,4})([0-9]{4})$/;
var myArray;
if (regExp.test(phoneNum)) {
myArray = regExp.exec(phoneNum);
rtnNum = myArray[1] + fmt + myArray[2] + fmt + myArray[3];
if (rtnArrYn == 'Y') {
return myArray;
}
return rtnNum;
} else {
return phoneNum;
}
} else {
return phoneNum;
}
},
/** * 전화번호 형식 체크 * * @param 데이터 */
isPhone(phoneNum) {
var regExp = /(02)([0-9]{3,4})([0-9]{4})$/;
if (regExp.test(phoneNum)) {
return true;
} else {
regExp = /(0[3-9]{1}[0-9]{1})([0-9]{3,4})([0-9]{4})$/;
if (regExp.test(phoneNum)) {
return true;
} else {
return false;
}
}
},
/** * 핸드폰번호 형식 체크 * * @param 데이터 */
isMobile(phoneNum) {
var regExp = /(01[016789])([0-9]{3,4})([0-9]{4})$/;
var myArray;
if (regExp.test(phoneNum)) {
myArray = regExp.exec(phoneNum);
return true;
} else {
return false;
}
},
isMobile2(phoneNum) {
var regExp = /(1[016789])([0-9]{3,4})([0-9]{4})$/;
var myArray;
if (regExp.test(phoneNum)) {
myArray = regExp.exec(phoneNum);
return true;
} else {
return false;
}
},
isNull(obj) {
if (lodash.isNil(obj) || lodash.trim(obj) == '') {
return true;
}
return false;
},
getParent(name) {
let p = this.$parent;
while (typeof p !== 'undefined') {
if (p.$options.name == name) {
return p;
} else {
p = p.$parent;
}
}
return false;
},
getJsonObj(str) {
return JSON.parse(JSON.stringify(str));
},
}
};
var chkPattern2 = {
data: function () {
return {}
},
methods: {
selSesStorage(keyLike) {
if (this.isNull(keyLike)) {
return null;
}
if (sessionStorage.length > 0) {
let keyList = [];
for (let i = 0; i < sessionStorage.length; i++) {
const keyNm = sessionStorage.key(i);
if (keyNm.indexOf(keyLike) > -1) {
keyList.push({name: keyNm, value: sessionStorage.getItem(keyNm)});
}
}
if (keyList.length > 0) {
return keyList;
}
return null;
}
return null;
},
delSesStorage(keyList) {
if (this.isNull(keyList)) {
return null;
}
if (keyList.length > 0) {
keyList.map((o) => (sessionStorage.removeItem(o.name)));
return true;
}
},
setGridMouseDownActive() {
const ele = document.querySelector(`div.tui-grid-container.tui-grid-show-lside-area`);
if (window.getEventListeners(ele).mousedown) {
ele.removeEventListener('mousedown', window.getEventListeners(ele).mousedown[0].listener);
}
},
restrictChars: function ($event, regExp, hanYn) {
if (this.isNull(hanYn)) {
hanYn = 'N';
}
if (hanYn === 'N' && $event.type === 'keydown') {
if ($event.keyCode === 229) {
$event.preventDefault();
return false;
}
}
if ($event.type === 'keypress') {
//한글 처리 불가
if (regExp.test(String.fromCharCode($event.charCode))) {
return true;
} else {
$event.preventDefault();
return false;
}
}
if (hanYn === 'N' && ($event.type === 'keyup' || $event.type === 'input' || $event.type === 'change' || $event.type === 'blur')) {
$event.target.value = $event.target.value.replace(/[ㄱ-ㅎㅏ-ㅣ가-힣]/g, '');
$event.preventDefault();
return false;
}
return true;
},
setLenth: function (e, len) {
this.cut(e, len);
},
onlyCustom: function (e, strRegExp, hanYn) {
var regExp_g = new RegExp(strRegExp, 'g');
this.cut(e);
return this.restrictChars(e, regExp_g, hanYn);
},
onlyCommon: function (strRegExp, e, len, isEventCall, hanYn) {
var regExp_g = new RegExp(strRegExp, 'g');
if (isEventCall === 'N') {
if (!this.cut(e, len, isEventCall)) {
return false;
}
if (!regExp_g.test(e.value)) {
return false;
}
return true;
}
this.cut(e, len);
return this.restrictChars(e, regExp_g, hanYn);
},
onlyNum: function (e, len, isEventCall) {
var strRegExp = '^[0-9]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall);
},
onlyEng: function (e, len, isEventCall) {
var strRegExp = '^[A-Za-z]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall);
},
onlyLowerEng: function (e, len, isEventCall) {
var strRegExp = '^[a-z]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall);
},
onlyUpperEng: function (e, len, isEventCall) {
var strRegExp = '^[A-Z]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall);
},
onlyEmail: function (e, len, isEventCall) {
var strRegExp = '^[a-zA-Z0-9_\.\-@._-]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall);
},
onlyName: function (e, len, isEventCall) {
var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall, 'Y');
},
onlyTitle: function (e, len, isEventCall) {
var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall, 'Y');
},
onlyText: function (e, len, isEventCall) {
var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9_-]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall, 'Y');
},
onlyPassword: function (e, len, isEventCall) {
var strRegExp = '^[A-Za-z0-9!@#$%^&*]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall);
},
onlyId: function (e, len, isEventCall) {
var strRegExp = '^[A-Za-z0-9_\.\-]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall);
},
onlyIp: function (e, len, isEventCall) {
var strRegExp = '^[0-9,.*]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall);
},
onlyRoleNm_Space: function (e, len, isEventCall) {
var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall, 'Y');
},
onlyRoleId_UnderBar: function (e, len, isEventCall) {
var strRegExp = '^[a-zA-Z0-9_]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall);
},
cut: function (ele, len, isValidChk) {
let e = ele;
if (typeof ele.target != "undefined") {
e = ele.target;
}
let max = this.isNull(len) ? e.attributes.maxlength.value : len;
let str = e.value;
if (this.bytes(str) > max) {
if (this.isNull(isValidChk)) {
e.value = this.cutBytes(str, max);
}
return false;
}
return true;
},
cutBytes: function (str, len) {
while (1 === 1) {
if (this.bytes(str) <= len) {
return str;
}
str = str.slice(0, -1);
}
},
bytes: function (str) {
var length = ((s, b, i, c) => {
// for(b=i=0;c=s.charCodeAt(i++);b+=c>>11?3:c>>7?2:1); // 한글 3바이트
// for(b=i=0;c=s.charCodeAt(i++);b+=c>>11?2:c>>7?1:1); //한글 2바이트
b = 0, i = 0;
while (1 === 1) {
c = s.charCodeAt(i++);
if (isNaN(c)) {
break;
}
b += c >> 11 ? 2 : c >> 7 ? 1 : 1;
}
return b
})(str);
return length;
},
checkPhone: function (str) {
str = str.replace(/[-\s]+/g, '');
if (str.charAt(0) != "0") {
str = "0" + str;
}
if (str.length < 10 || str.length > 12) {
return "";
}
if (isNaN(str)) {
return "";
}
if (str.substr(0, 2) != "01" && str.substr(0, 3) != "070" && str.substr(0, 4) != "0505" && str.substr(0, 4) != "0503") {
return "";
}
return str;
},
}
};
export {utils_mixin, chkPattern2};

View File

@@ -6,14 +6,10 @@
<h3 class="title">사업자별 통계</h3>
<p class="breadcrumb">발송통계 &gt; 사업자별 통계</p>
</div>
<div class="top_tab">
<a href="javascript:void(0);" @click="toMove('bsnmMonthList')">월별통계</a>
<a href="javascript:void(0);" class="on">일별통계</a>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="input_box cal">
<label for="right" class="label txt">날짜</label>
@@ -51,15 +47,15 @@
</div>
<div class="input_box id">
<label for="name" class="label">고객사명</label>
<input type="text" id="name" placeholder="검색어 입력" v-model="grid.params.custNm">
<input type="text" id="name" placeholder="검색어 입력" v-model.trim="grid.params.custNm">
</div>
<div class="input_box">
<label for="name" class="label">사업자등록번호</label>
<input type="text" id="name" placeholder="검색어 입력" v-model="grid.params.bizrno">
<input type="text" id="name" placeholder="검색어 입력" v-model.trim="grid.params.bizrno" @keypress="onlyNum"
@input="onlyNum" maxlength="10">
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</form>
<div class="info">
<div class="count">집계결과</div>
<div class="button_group">
@@ -94,9 +90,11 @@ import statsApi from "../service/statsApi.js";
import customGrid from '@/components/CustomGrid';
import xlsx from '@/common/excel';
import commonModal from "@/components/modal/commonModal";
import {utils_mixin, chkPattern2} from '../service/mixins';
export default {
name: 'bsnmDayList',
mixins: [utils_mixin, chkPattern2],
data() {
return {
// 달력 데이터
@@ -151,13 +149,15 @@ export default {
{name: 'sumYmd', header: '날짜', align: 'center'},
{name: 'custNm', header: '고객사명', align: 'center'},
{name: 'bizrno', header: '사업자번호', align: 'center'},
{ name: 'sndCnt', header: '발송건수', align: 'center', cls: 'td_line',
{
name: 'sndCnt', header: '발송건수', align: 'center', cls: 'td_line',
formatter: props => {
let result = props.sndCnt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'succCntRt',
{
name: 'succCntRt',
header: '성공건수/(%)',
align: 'center',
cls: 'td_line',
@@ -165,13 +165,15 @@ export default {
return "<p>" + props.succCnt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + "</p>\n<p>(" + props.succRt + "%)</p>";
}
},
{ name: 'sndCntS', header: '발송건수', align: 'center', cls: 'td_line',
{
name: 'sndCntS', header: '발송건수', align: 'center', cls: 'td_line',
formatter: props => {
let result = props.sndCntS.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'succCntRtS',
{
name: 'succCntRtS',
header: '성공건수/(%)',
align: 'center',
cls: 'td_line',
@@ -179,13 +181,15 @@ export default {
return "<p>" + props.succCntS.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + "</p>\n<p>(" + props.succRtS + "%)</p>";
}
},
{ name: 'sndCntL', header: '발송건수', align: 'center', cls: 'td_line',
{
name: 'sndCntL', header: '발송건수', align: 'center', cls: 'td_line',
formatter: props => {
let result = props.sndCntL.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'succCntRtL',
{
name: 'succCntRtL',
header: '성공건수/(%)',
align: 'center',
cls: 'td_line',
@@ -193,13 +197,15 @@ export default {
return "<p>" + props.succCntL.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + "</p>\n<p>(" + props.succRtL + "%)</p>";
}
},
{ name: 'sndCntM', header: '발송건수', align: 'center', cls: 'td_line',
{
name: 'sndCntM', header: '발송건수', align: 'center', cls: 'td_line',
formatter: props => {
let result = props.sndCntM.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'succCntRtM',
{
name: 'succCntRtM',
header: '성공건수/(%)',
align: 'center',
cls: 'td_line',
@@ -207,13 +213,15 @@ export default {
return "<p>" + props.succCntM.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + "</p>\n<p>(" + props.succRtM + "%)</p>";
}
},
{ name: 'sndCntR', header: '발송건수', align: 'center', cls: 'td_line',
{
name: 'sndCntR', header: '발송건수', align: 'center', cls: 'td_line',
formatter: props => {
let result = props.sndCntR.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'succCntRtR',
{
name: 'succCntRtR',
header: '성공건수/(%)',
align: 'center',
cls: 'td_line',
@@ -402,7 +410,8 @@ export default {
dataOrder: 'header'
};
// console.log(data);
xlsx.export(data.list, saveFileName, options).then(() => {});
xlsx.export(data.list, saveFileName, options).then(() => {
});
},
getExcelHeader() {
// 헤더를 mockup으로 관리한다.

View File

@@ -6,24 +6,15 @@
<h3 class="title">사업자별 통계</h3>
<p class="breadcrumb">발송통계 &gt; 사업자별 통계</p>
</div>
<div class="top_tab">
<a href="javascript:void(0);" class="on">월별통계</a>
<a href="javascript:void(0);" @click="toMove('bsnmDayList')">일별통계</a>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="input_box cal">
<label for="right" class="label txt">날짜</label>
<p> 최대 3개월까지 조회 가능합니다.</p>
<div class="term">
<!--
<input class="date" type="text" id="" placeholder="2022-10-12"/>
~
<input class="" type="text" id="" placeholder="2022-10-12"/>
-->
<div class="group" style="width:500px;">
<span class="custom_input icon_date">
<vuejs-datepicker
@@ -55,15 +46,15 @@
</div>
<div class="input_box id">
<label for="name" class="label">고객사명</label>
<input type="text" id="name" placeholder="검색어 입력" v-model="grid.params.custNm">
<input type="text" id="name" placeholder="검색어 입력" v-model.trim="grid.params.custNm" maxlength="100">
</div>
<div class="input_box">
<label for="name" class="label">사업자등록번호</label>
<input type="text" id="name" placeholder="검색어 입력" v-model="grid.params.bizrno">
<input type="text" id="name" placeholder="검색어 입력" v-model.trim="grid.params.bizrno" @keypress="onlyNum"
@input="onlyNum" minlength="10" maxlength="10">
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</form>
<div class="info">
<div class="count">집계결과</div>
<div class="button_group">
@@ -97,9 +88,11 @@ import statsApi from "../service/statsApi.js";
import customGrid from '@/components/CustomGrid';
import xlsx from '@/common/excel';
import commonModal from "@/components/modal/commonModal";
import {utils_mixin, chkPattern2} from '../service/mixins';
export default {
name: 'bsnmMonthList',
mixins: [utils_mixin, chkPattern2],
data() {
return {
// 달력 데이터
@@ -153,19 +146,22 @@ export default {
columns: [
{name: 'sumYm', header: '날짜', align: 'center'},
{name: 'custNm', header: '고객사명', align: 'center'},
{ name: 'bizrno', header: '사업자번호', align: 'center'
,formatter: props => {
let result = props.bizrno.substring(0,3)+'-'+ props.bizrno.substring(3,5)+'-'+ props.bizrno.substring(5,10)
return result;
}
{
name: 'bizrno', header: '사업자번호', align: 'center'
// , formatter: props => {
// let result = props.bizrno.substring(0, 3) + '-' + props.bizrno.substring(3, 5) + '-' + props.bizrno.substring(5, 10)
// return result;
// }
},
{ name: 'sndCnt', header: '발송건수', align: 'center', cls: 'td_line',
{
name: 'sndCnt', header: '발송건수', align: 'center', cls: 'td_line',
formatter: props => {
let result = props.sndCnt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'succCntRt',
{
name: 'succCntRt',
header: '성공건수/(%)',
align: 'center',
cls: 'td_line',
@@ -173,13 +169,15 @@ export default {
return "<p>" + props.succCnt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + "</p>\n<p>(" + props.succRt + "%)</p>";
}
},
{ name: 'sndCntS', header: '발송건수', align: 'center', cls: 'td_line',
{
name: 'sndCntS', header: '발송건수', align: 'center', cls: 'td_line',
formatter: props => {
let result = props.sndCntS.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'succCntRtS',
{
name: 'succCntRtS',
header: '성공건수/(%)',
align: 'center',
cls: 'td_line',
@@ -187,13 +185,15 @@ export default {
return "<p>" + props.succCntS.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + "</p>\n<p>(" + props.succRtS + "%)</p>";
}
},
{ name: 'sndCntL', header: '발송건수', align: 'center', cls: 'td_line',
{
name: 'sndCntL', header: '발송건수', align: 'center', cls: 'td_line',
formatter: props => {
let result = props.sndCntL.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'succCntRtL',
{
name: 'succCntRtL',
header: '성공건수/(%)',
align: 'center',
cls: 'td_line',
@@ -201,13 +201,15 @@ export default {
return "<p>" + props.succCntL.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + "</p>\n<p>(" + props.succRtL + "%)</p>";
}
},
{ name: 'sndCntM', header: '발송건수', align: 'center', cls: 'td_line',
{
name: 'sndCntM', header: '발송건수', align: 'center', cls: 'td_line',
formatter: props => {
let result = props.sndCntM.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'succCntRtM',
{
name: 'succCntRtM',
header: '성공건수/(%)',
align: 'center',
cls: 'td_line',
@@ -215,13 +217,15 @@ export default {
return "<p>" + props.succCntM.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + "</p>\n<p>(" + props.succRtM + "%)</p>";
}
},
{ name: 'sndCntR', header: '발송건수', align: 'center', cls: 'td_line',
{
name: 'sndCntR', header: '발송건수', align: 'center', cls: 'td_line',
formatter: props => {
let result = props.sndCntR.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return result;
}
},
{ name: 'succCntRtR',
{
name: 'succCntRtR',
header: '성공건수/(%)',
align: 'center',
cls: 'td_line',
@@ -418,7 +422,8 @@ export default {
dataOrder: 'header'
};
console.log(data);
xlsx.export(data.list, saveFileName, options).then(() => {});
xlsx.export(data.list, saveFileName, options).then(() => {
});
},
}
};

View File

@@ -5,14 +5,10 @@
<h3 class="title">날짜별 통계</h3>
<p class="breadcrumb">발송통계 &gt; 날짜별 통계</p>
</div>
<div class="top_tab">
<a href="javascript:void(0);" @click="toMove('monthList')">월별통계</a>
<a href="javascript:void(0);" class="on">일별통계</a>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="input_box cal">
<label for="right" class="label txt">날짜</label>
@@ -42,7 +38,6 @@
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</form>
<div class="info">
<div class="count">집계결과</div>
<div class="button_group">
@@ -293,7 +288,8 @@ export default {
dataOrder: 'header'
};
// console.log(data);
xlsx.export(this.list, saveFileName, options).then(() => {});
xlsx.export(this.list, saveFileName, options).then(() => {
});
},
getExcelHeader() {
// 헤더를 mockup으로 관리한다.

View File

@@ -5,14 +5,10 @@
<h3 class="title">날짜별 통계</h3>
<p class="breadcrumb">발송통계 &gt; 날짜별 통계</p>
</div>
<div class="top_tab">
<a href="javascript:void(0);" class="on">월별통계</a>
<a href="javascript:void(0);" @click="toMove('dayList')">일별통계</a>
</div>
<form autocomplete="off" class="search_form">
<div class="search_wrap">
<div class="input_box cal">
<label for="right" class="label txt">날짜</label>
@@ -42,13 +38,10 @@
@closed="closeDate('end')"
></vuejs-datepicker>
</span>
</div>
</div>
<button type="button" class="button grey" @click="search">조회</button>
<!--<button type="button" class="button grey">조회</button>-->
</div>
</form>
<div class="info">
<div class="count">집계결과</div>
<div class="button_group">
@@ -268,7 +261,8 @@ export default {
};
// console.log(data);
xlsx.export(this.list, saveFileName, options).then(() => {});
xlsx.export(this.list, saveFileName, options).then(() => {
});
},
getExcelHeader() {
// 헤더를 mockup으로 관리한다.

View File

@@ -72,7 +72,7 @@
</div>
<!-- 관리자 상세정보 팝업 -->
</div>
<common-modal ref="commmonModal"></common-modal>
<!-- <common-modal ref="commmonModal"></common-modal>-->
</div>
</template>
@@ -82,7 +82,7 @@ import api from '@/service/api';
import sysMgtApi from "../service/sysMgtApi.js";
import { utils_mixin, chkPattern2 } from '../service/mixins';
import lodash from "lodash";
import commonModal from "../components/commonModal";
// import commonModal from "../components/commonModal";
import SearchIdPopup from "@/modules/sysMgt/components/SearchIdPopup";
export default {
@@ -121,7 +121,7 @@ export default {
this.formReset();
},
components: {
commonModal,
// commonModal,
},
methods :{
doPwdValidate(){
@@ -129,7 +129,7 @@ export default {
// alert("비밀번호 확인을 입력해 주세요.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호를 입력해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._pwd2.focus();
return false;
}
@@ -137,7 +137,7 @@ export default {
// alert("비밀번호가 일치하지 않습니다.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호가 일치하지 않습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._pwd2.focus();
return false;
}
@@ -146,7 +146,7 @@ export default {
// alert("비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._pwd1.focus();
return false;
}
@@ -157,7 +157,7 @@ export default {
// alert("비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$parent.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._pwd1.focus();
return false;
}

View File

@@ -9,7 +9,6 @@
<h3 class="pop-tit" v-if="insertType === 1">관리자 등록</h3>
<h3 class="pop-tit" v-else>유치채널 사용자 등록</h3>
</div>
<!-- <form autocomplete="off" ref="adminRegForm">-->
<table>
<tbody>
<tr>
@@ -21,23 +20,28 @@
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" @keypress="onlyPassword" @input="onlyPassword" required minlength="8" maxlength="16" ref="_pwd1" v-model.trim="userPwd1"></td>
<td><input type="password" @keypress="onlyPassword" @input="onlyPassword" required minlength="8"
maxlength="16" ref="_pwd1" v-model.trim="userPwd1"></td>
</tr>
<tr>
<th>비밀번호 확인</th>
<td><input type="password" @keypress="onlyPassword" @input="onlyPassword" required minlength="8" maxlength="16" ref="_pwd2" v-model.trim="userPwd2"></td>
<td><input type="password" @keypress="onlyPassword" @input="onlyPassword" required minlength="8"
maxlength="16" ref="_pwd2" v-model.trim="userPwd2"></td>
</tr>
<tr>
<th>이름</th>
<td><input type="text" @keypress="onlyName" @input="onlyName" v-model.trim="userNm" ref="_userNm" required maxlength="40"></td>
<td><input type="text" @keypress="onlyName" @input="onlyName" v-model.trim="userNm" ref="_userNm" required
maxlength="40"></td>
</tr>
<tr>
<th>휴대폰번호</th>
<td><input type="number" placeholder="- 자 제외 숫자만 입력" v-model.trim="mdn" v-on:keyup="onlyNum" @input="onlyNum" minlength="10" maxlength="11" ref="_phone"></td>
<td><input type="text" placeholder="- 자 제외 숫자만 입력" v-model.trim="mdn" ref="_phone" @keypress="onlyNum"
@input="onlyNum" minlength="10" maxlength="11"></td>
</tr>
<tr>
<th>이메일</th>
<td><input type="email" v-model.trim="email" @keypress="onlyEmail" @input="onlyEmail" maxlength="20" ref="_email"></td>
<td><input type="email" v-model.trim="email" @keypress="onlyEmail" @input="onlyEmail" maxlength="20"
ref="_email"></td>
</tr>
<tr v-if="insertType === 2">
<th>코드</th>
@@ -68,17 +72,14 @@
</tr>
</tbody>
</table>
<!-- </form>-->
<div class="popup-btn2">
<button class="btn-pcolor" @click="doInsert">저장</button>
<button class="btn-default" @click="ModalClose();">취소</button>
</div>
</div>
<search-id-popup ref="searchIdPopModal"> </search-id-popup>
<common-modal ref="commmonModal"></common-modal>
</div>
<search-id-popup ref="searchIdPopModal"></search-id-popup>
<common-modal ref="commmonSysModal"></common-modal>
</div>
</template>
@@ -136,21 +137,21 @@ export default {
if (this.isNull(this.userPwd1)) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호를 입력해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.$refs._pwd1.focus();
return false;
}
if (this.isNull(this.userPwd2)) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호 확인을 입력해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.$refs._pwd2.focus();
return false;
}
if (!lodash.isEqual(this.userPwd1, this.userPwd2)) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호가 일치하지 않습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.$refs._pwd2.focus();
return false;
}
@@ -158,7 +159,7 @@ export default {
if (!(pwdLen >= 8 && pwdLen <= 16)) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.$refs._pwd1.focus();
return false;
}
@@ -168,7 +169,7 @@ export default {
if (!(pEng.test(this.userPwd1) && pNum.test(this.userPwd1) && pSpc.test(this.userPwd1))) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.$refs._pwd1.focus();
return;
}
@@ -179,7 +180,7 @@ export default {
if (!this.idCheck) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '유효한 마당ID가 아닙니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.$refs.madangId.focus();
return false;
}
@@ -189,14 +190,14 @@ export default {
if (this.isNull(this.userNm)) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '이름을 입력해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.$refs._userNm.focus();
return false;
}
if (this.isNull(this.mdn)) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '휴대폰번호를 입력해주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.$refs._phone.focus();
return false;
}
@@ -204,14 +205,14 @@ export default {
if (!this.isNull(hp) && !this.isMobile(hp)) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '휴대폰 번호 형식이 잘못되었습니다. 확인해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.$refs._phone.focus();
return false;
}
if (this.isNull(this.email)) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '이메일을 입력해주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.$refs._email.focus();
return false;
}
@@ -220,21 +221,21 @@ export default {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '이메일 형식이 잘못되었습니다.';
this.row.msg2 = '확인해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.$refs._email.focus();
return false;
}
if (this.isNull(this.auth)) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '권한을 선택 해주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.$refs._auth.focus();
return false;
}
if (this.isNull(this.stat)) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '상태를 선택 해주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
// this.$refs._auth.focus();
return false;
}
@@ -242,22 +243,15 @@ export default {
this.row.name = this.userNm;
this.row.mdn = hp;
this.row.email = email;
if(this.insertType == 2){
this.row.auth='1003';
}else{
this.row.auth = this.auth;
}
this.row.stat = this.stat;
return true;
},
// 마당ID 조회
async searchMadangId() {
if (!this.madangId) {
// this.row.title = '관리자/유치채널 관리';
// this.row.msg1 = '마당ID를 입력해주세요.';
// this.$refs.commmonModal.alertModalOpen(this.row);
// this.$refs.searchIdPopModal.searchIdModalOpen();
this.$refs.madangId.focus();
return false;
}
@@ -275,7 +269,7 @@ export default {
this.userNm = result.data.name;
this.email = result.data.email;
this.mdn = result.data.mdn;
this.code = result.data.code;
// 마당ID조회 성공 팝업노출
this.searchIdPop();
//console.log(this.userNm);
@@ -284,29 +278,17 @@ export default {
this.$refs._pwd1.focus();
return false;
} else if (result.retCode == '1004') {
//alert('마당ID 정보가 없습니다.');
// this.row.title = '관리자/유치채널 관리';
// this.row.msg1 = '마당ID 정보가 없습니다.';
// this.$refs.commmonModal.alertModalOpen(this.row);
this.searchIdFailPop();
this.idCheck = false;
this.$refs.madangId.focus();
return false;
} else {
//alert('마당ID 조회에 실패하였습니다.');
// this.row.title = '관리자/유치채널 관리';
// this.row.msg1 = '마당ID 정보가 없습니다.';
// this.$refs.commmonModal.alertModalOpen(this.row);
this.searchIdFailPop();
this.idCheck = false;
this.$refs.madangId.focus();
return false;
}
} catch (err) {
//alert("실패 하였습니다.");
// this.row.title = '관리자/유치채널 관리';
// this.row.msg1 = '마당ID 정보가 없습니다.';
// this.$refs.commmonModal.alertModalOpen(this.row);
this.searchIdFailPop();
this.idCheck = false;
this.$refs.madangId.focus();
@@ -338,6 +320,10 @@ export default {
ModalOpen(insertType) {
this.formReset();
this.insertType = insertType;
console.log(insertType)
if(insertType === 2){
this.auth = '1002';
}
var dimmed = document.getElementsByClassName('modal20');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
@@ -365,13 +351,13 @@ export default {
if (result != null && result.retCode == "0000") {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '저장 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
this.toComplete();
}
} catch (err) {
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.commmonSysModal.alertSysModalOpen(this.row);
}
}
},

View File

@@ -42,6 +42,27 @@
</div>
</div>
<!-- 시스템관리 팝업 -->
<!-- <div class="dimmed alertSysModal1" @click="alertSysModalCancel();"></div>-->
<!-- <div class="popup-wrap alertSysModal1">-->
<!-- &lt;!&ndash; 로그인실패: 확인 &ndash;&gt;-->
<!-- <div class="popup alertSysModal1">-->
<!-- <div class="pop-head">-->
<!-- <h3 class="pop-tit">{{ title }}</h3>-->
<!-- </div>-->
<!-- <div class="pop-cont">-->
<!-- <p>{{ msg1 }}</p>-->
<!-- <p v-if="msg2 !== ''">{{ msg2 }}</p>-->
<!-- <p v-if="msg3 !== ''">{{ msg3 }}</p>-->
<!-- <p v-if="msg4 !== ''">{{ msg4 }}</p>-->
<!-- </div>-->
<!-- <div class="popup-btn1">-->
<!-- <button class="btn-pcolor" @click="alertSysModalClose();">확인</button>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
</div>
<!-- e: 팝업 -->
</div>
@@ -49,9 +70,6 @@
</template>
<script>
//import api from '@/service/api';
import sysMgtApi from '../service/sysMgtApi';
export default {
data() {
@@ -63,7 +81,15 @@ export default {
mdn: '',
email: '',
auth: '',
stat: ''
code: '',
stat: '',
row:{},
title:'',
msg1: '',
msg2: '',
msg3: '',
msg4: '',
targetFocus: '',
}
},
methods: {
@@ -116,7 +142,7 @@ export default {
this.name = params.userNm;
this.email = params.email;
this.mdn = params.mdn;
this.code = params.code
//alert( userName + ': 조회 성공');
var dimmed = document.getElementsByClassName('modal18');
for (var i = 0; i < dimmed.length; i++) {
@@ -131,31 +157,33 @@ export default {
dimmed[i].style.display = 'block';
}
},
//메뉴바
testClick(){
const menuList = document.querySelectorAll('.main_menu .is-sub');
for(const menu of menuList){
menu.addEventListener('click', (e)=> {
if(e.target.classList.contains('menu_target') || e.target.classList.contains('menu_btn')){
const menuListCheck = e.target.parentNode;
if(menuListCheck.classList.contains('is-current')){
menuListCheck.classList.remove('is-current');
} else {
for(const other of menuList){
other.classList.remove('is-current');
}
menuListCheck.classList.add('is-current');
}
}
})
}
}
// alertSysModalOpen(props) {
// console.log(props);
// this.title = props.title;
// this.msg1 = props.msg1;
// this.msg2 = props.msg2;
// this.msg3 = props.msg3;
// this.msg4 = props.msg4;
//
// var dimmed = document.getElementsByClassName('alertSysModal1');
// for (var i = 0; i < dimmed.length; i++) {
// dimmed[i].style.display = 'block';
// }
// },
// alertSysModalClose() {
// var dimmed = document.getElementsByClassName('alertSysModal1');
// for (var i = 0; i < dimmed.length; i++) {
// dimmed[i].style.display = 'none';
// }
// this.$parent.checkFocus();
// },
// alertSysModalCancel() {
// var dimmed = document.getElementsByClassName('alertSysModal1');
// for (var i = 0; i < dimmed.length; i++) {
// dimmed[i].style.display = 'none';
// }
// this.$parent.checkFocus();
// },
}
}
</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

@@ -2,10 +2,10 @@
<!-- <div class="wrap bg-wrap"> -->
<div>
<div class="dimmed alertModal" @click="alertModalCancel();"></div>
<div class="popup-wrap alertModal">
<div class="dimmed alertSysModal" @click="alertSysModalCancel();"></div>
<div class="popup-wrap alertSysModal">
<!-- 로그인실패: 확인 -->
<div class="popup alertModal">
<div class="popup alertSysModal">
<div class="pop-head">
<h3 class="pop-tit">{{ title }}</h3>
</div>
@@ -16,7 +16,7 @@
<p v-if="msg4 !== ''">{{ msg4 }}</p>
</div>
<div class="popup-btn1">
<button class="btn-pcolor" @click="alertModalClose();">확인</button>
<button class="btn-pcolor" @click="alertSysModalClose();">확인</button>
</div>
</div>
</div>
@@ -79,8 +79,7 @@ export default {
}
},
methods: {
alertModalOpen(props){
console.log('>>>>>>>>>> alertModalOpen');
alertSysModalOpen(props) {
console.log(props.msg1);
this.title = props.title;
this.msg1 = props.msg1;
@@ -88,21 +87,21 @@ export default {
this.msg3 = props.msg3;
this.msg4 = props.msg4;
var dimmed = document.getElementsByClassName('alertModal');
var dimmed = document.getElementsByClassName('alertSysModal');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
},
alertModalClose(){
var dimmed = document.getElementsByClassName('alertModal');
alertSysModalClose() {
var dimmed = document.getElementsByClassName('alertSysModal');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
this.$parent.checkFocus();
},
alertModalCancel(){
var dimmed = document.getElementsByClassName('alertModal');
alertSysModalCancel() {
var dimmed = document.getElementsByClassName('alertSysModal');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}

View File

@@ -154,8 +154,7 @@ const utils_mixin = {
var chkPattern2 = {
data: function () {
return {
}
return {}
},
methods: {
selSesStorage(keyLike) {
@@ -342,9 +341,15 @@ const utils_mixin = {
if (str.charAt(0) != "0") {
str = "0" + str;
}
if (str.length<10||str.length>12){return "";}
if (isNaN(str)){return ""; }
if (str.substr(0,2)!="01" && str.substr(0,3)!="070" && str.substr(0,4)!="0505" && str.substr(0,4)!="0503"){return ""; }
if (str.length < 10 || str.length > 12) {
return "";
}
if (isNaN(str)) {
return "";
}
if (str.substr(0, 2) != "01" && str.substr(0, 3) != "070" && str.substr(0, 4) != "0505" && str.substr(0, 4) != "0503") {
return "";
}
return str;
},

View File

@@ -5,7 +5,6 @@
<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>
@@ -27,15 +26,16 @@
</div>
<div class="input_box id">
<label for="id1" class="label">ID</label>
<input type="text" id="id1" placeholder="검색어 입력" v-model="grid.params.searchText1" @keyup.enter="search"/>
<input type="text" id="id1" placeholder="검색어 입력" v-model.trim="grid.params.searchText1"
@keyup.enter="search"/>
</div>
<div class="input_box">
<label for="name" class="label">이름(대리점명)</label>
<input type="text" id="name" placeholder="검색어 입력" v-model="grid.params.searchText2" @keyup.enter="search"/>
<input type="text" id="name" placeholder="검색어 입력" v-model.trim="grid.params.searchText2"
@keyup.enter="search"/>
</div>
<button type="button" class="button grey" @click="search">조회</button>
</div>
</form>
<div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span></div>
<div class="button_group">
@@ -60,7 +60,6 @@
></custom-grid>
</div>
<admin-reg-pop ref="adminRegModal"></admin-reg-pop>
<!-- <admin-reg2-pop ref="adminReg2Modal"> </admin-reg2-pop> -->
<admin-detail-pop ref="adminDetailModal"></admin-detail-pop>
<common-modal ref="commmonModal"></common-modal>
</div>
@@ -123,7 +122,8 @@ export default {
{name: 'no', header: 'NO', align: 'center', width: '15%'},
{name: 'auth', header: '권한', align: 'center', width: '15%'},
{name: 'name', header: '이름(대리점명)', align: 'center', width: '20%'},
{ name: 'adminId', header: 'ID', align: 'center', width: '20%', renderer: {
{
name: 'adminId', header: 'ID', align: 'center', width: '20%', renderer: {
type: CustomATagRenderer
, options: {
callback: this.detailPop,
@@ -164,7 +164,7 @@ export default {
// 페이지 정보 및 검색 조건
const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
console.log('getCondition : ' + getCondition);
console.log(getCondition)
// store에 저장된 페이지 정보 및 검색 조건을 불러오기
let isKeep = false;
if (getCondition) {
@@ -177,11 +177,11 @@ export default {
},
methods: {
search: function (isKeep) {
console.log(isKeep)
console.log('this.perPageCnt' + this.perPageCnt);
//console.log(this.grid.params);
this.grid.params.searchType1 = this.searchType1
this.grid.params.searchType2 = this.searchType2
this.grid.pagePerRows = this.perPageCnt
this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData();
},

View File

@@ -9,7 +9,6 @@
<div class="title">권한 추가</div>
</div>
<div class="table table_form">
<form autocomplete="off">
<table>
<tbody>
<tr class="tr_input w30">
@@ -34,7 +33,7 @@
<tr class="tr_checkbox">
<td class="check" rowspan="2">
<p>메뉴 권한 체크</p>
<input type="checkbox" id="right_check0" v-model="checkedAuthMenuAll">
<input type="checkbox" id="right_check0" ref="checkedAuthMenuAll_" v-model="checkedAuthMenuAll">
<div class="label_group">
<label for="right_check0"></label>
<label for="right_check0">전체 체크</label>
@@ -50,16 +49,6 @@
</td>
<td class="check">
<p>유치현황관리</p>
<!-- <input type="checkbox" id="right_check2" value="" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check2"></label>
<label for="right_check2">유치현황관리</label>
</div>
<input type="checkbox" id="right_check3" value="2003" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check3"></label>
<label for="right_check3">유치관리자 현황</label>
</div> -->
<div class="label_group">
<tr>
<td class="td_radio">
@@ -181,7 +170,6 @@
</tr>
</tbody>
</table>
</form>
</div>
<div class="pop-btn2">
<button class="btn-default" type="button" @click="authAddCancel()">취소</button>
@@ -363,10 +351,16 @@ export default {
// 체크박스 전체선택 기능
checkedAuthMenuAll: {
get: function () {
return this.defaultAuthMenu.length === this.checkedAuthMenu.length;
if (this.defaultAuthMenu.length === this.checkedAuthMenu.length) {
if (this.channelAuth === '') {
return false;
}
return true;
} else {
return false;
}
},
set: function (e) {
//this.checkedAuthMenu = e ? this.defaultAuthMenu : [];
if (e) {
this.checkedAuthMenu = this.defaultAuthMenu;
if (this.channelAuth === '') {
@@ -379,6 +373,5 @@ export default {
}
}
}
};
</script>

View File

@@ -38,10 +38,6 @@
<td>{{ option.authNm }}</td>
<td>{{ option.authStat }}</td>
<td>{{ option.regDt }}</td>
<!-- <td v-if="option.authCd !== '1001' && option.authCd !== '1002'" class="two_btn_group">
<button type="button" class="button grey" @click="updateAuth(option.authCd)">수정</button>
<button type="button" class="button white delete" @click="deleteAuth(option.authCd)">삭제</button>
</td> -->
<td v-if="option.authCd === '1001' || option.authCd === '1002'" class="two_btn_group">
</td>
<td v-else class="two_btn_group">
@@ -49,19 +45,6 @@
<button type="button" class="button white delete" @click="authDelete(option.authCd)">삭제</button>
</td>
</tr>
<!--
<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>
-->
</tbody>
</table>
</div>

View File

@@ -9,7 +9,6 @@
<div class="title">권한 수정</div>
</div>
<div class="table table_form">
<form autocomplete="off">
<table>
<tbody>
<tr class="tr_input w30">
@@ -50,16 +49,6 @@
</td>
<td class="check">
<p>유치현황관리</p>
<!-- <input type="checkbox" id="right_check2" value="2002" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check2"></label>
<label for="right_check2">유치채널 현황</label>
</div>
<input type="checkbox" id="right_check3" value="2003" v-model="checkedAuthMenu">
<div class="label_group">
<label for="right_check3"></label>
<label for="right_check3">유치관리자 현황</label>
</div> -->
<div class="label_group">
<tr>
<td class="td_radio">
@@ -181,7 +170,6 @@
</tr>
</tbody>
</table>
</form>
</div>
<div class="pop-btn2">
<button class="btn-default" type="button" @click="authModifyCancel()">취소</button>

View File

@@ -27,7 +27,6 @@ export default {
name: "hubwebLayout",
components: {
NavBar,
// vuejsDatepicker,
HubWebHeader,
HubWebFooter,
},

View File

@@ -2,17 +2,18 @@ package kr.co.uplus.ez.api.attractMgt;
import kr.co.uplus.ez.api.attractMgt.dto.*;
import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.data.ApiResponseMessage;
import kr.co.uplus.ez.common.data.Const;
import kr.co.uplus.ez.common.data.Paging;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Service;
import org.thymeleaf.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class AttractMgtService {
@@ -32,10 +33,20 @@ public class AttractMgtService {
* @param channelListReqDto
* @return
*/
@SuppressWarnings("rawtypes")
public ChannelListResDto channelList(ChannelListReqDto channelListReqDto) {
AttractMgtMapper attractMgtMapper = sqlSessionSlave.getMapper(AttractMgtMapper.class);
String nowPage = String.valueOf(channelListReqDto.getPage());
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetails userDetails = (UserDetails) principal;
String attrctorId = userDetails.getUsername();
ArrayList auth = (ArrayList) userDetails.getAuthorities();
if(StringUtils.equals(Const.AUTH_CD_AGENCY, auth.get(0).toString())){
channelListReqDto.setAttrctorId(attrctorId);
}
int totalCnt = attractMgtMapper.selectAttractListTotalCnt(channelListReqDto);
if (totalCnt == 0) {

View File

@@ -9,27 +9,27 @@ import java.io.Serializable;
@Data
public class ChannelDetail implements Serializable {
@ApiModelProperty(example = "날짜", name = "날짜", dataType = "String")
@ApiModelProperty(example = "20220101", name = "날짜", dataType = "String")
private String sumYm;
@ApiModelProperty(example = "전체발송건수", name = "전체발송건수", dataType = "String")
@ApiModelProperty(example = "100", name = "전체발송건수", dataType = "String")
private String sndCnt;
@ApiModelProperty(example = "전체 성공건수", name = "전체 성공건수", dataType = "String")
@ApiModelProperty(example = "99", name = "전체 성공건수", dataType = "String")
private String succCnt;
@ApiModelProperty(example = "SMS발송건수", name = "SMS발송건수", dataType = "String")
@ApiModelProperty(example = "10", name = "SMS발송건수", dataType = "String")
private String sndCntS;
@ApiModelProperty(example = "SMS 성공건수", name = "SMS 성공건수", dataType = "String")
@ApiModelProperty(example = "10", name = "SMS 성공건수", dataType = "String")
private String succCntS;
@ApiModelProperty(example = "LMS발송건수", name = "LMS발송건수", dataType = "String")
@ApiModelProperty(example = "10", name = "LMS발송건수", dataType = "String")
private String sndCntL;
@ApiModelProperty(example = "LMS 성공건수", name = "LMS 성공건수", dataType = "String")
@ApiModelProperty(example = "10", name = "LMS 성공건수", dataType = "String")
private String succCntL;
@ApiModelProperty(example = "MMS발송건수", name = "MMS발송건수", dataType = "String")
@ApiModelProperty(example = "10", name = "MMS발송건수", dataType = "String")
private String sndCntM;
@ApiModelProperty(example = "MMS 성공건수", name = "MMS 성공건수", dataType = "String")
@ApiModelProperty(example = "10", name = "MMS 성공건수", dataType = "String")
private String succCntM;
@ApiModelProperty(example = "알림톡발송건수", name = "알림톡발송건수", dataType = "String")
@ApiModelProperty(example = "10", name = "알림톡발송건수", dataType = "String")
private String sndCntA;
@ApiModelProperty(example = "알림톡 성공건수", name = "알림톡 성공건수", dataType = "String")
@ApiModelProperty(example = "10", name = "알림톡 성공건수", dataType = "String")
private String succCntA;
}

View File

@@ -9,7 +9,7 @@ import java.io.Serializable;
@Data
public class ChannelDetailReqDto implements Serializable {
@ApiModelProperty(example = "사용자일련번호", name = "사용자일련번호", dataType = "String")
@ApiModelProperty(example = "1012001", name = "사용자일련번호", dataType = "String")
private String userSeq;
}

View File

@@ -14,48 +14,52 @@ public class ChannelDetailRes implements Serializable {
private Paging paging;
private List<ChannelDetail> list;
@ApiModelProperty(example = "리스트번호", name = "리스트번호", dataType = "String")
@ApiModelProperty(example = "1", name = "리스트번호", dataType = "String")
private String no;
@ApiModelProperty(example = "가입일", name = "가입일", dataType = "String")
@ApiModelProperty(example = "20220101", name = "가입일", dataType = "String")
private String subsDt;
@ApiModelProperty(example = "유치업체", name = "유치업체", dataType = "String")
@ApiModelProperty(example = "대리점", name = "유치업체", dataType = "String")
private String norgNm;
@ApiModelProperty(example = "사업장주소1", name = "사업장주소1", dataType = "String")
@ApiModelProperty(example = "서울시", name = "사업장주소1", dataType = "String")
private String adr1;
@ApiModelProperty(example = "사업장주소2", name = "사업장주소2", dataType = "String")
@ApiModelProperty(example = "서초구", name = "사업장주소2", dataType = "String")
private String adr2;
@ApiModelProperty(example = "사업장주소3", name = "사업장주소3", dataType = "String")
@ApiModelProperty(example = "1동", name = "사업장주소3", dataType = "String")
private String adr3;
@ApiModelProperty(example = "사용자일련번호", name = "사용자일련번호", dataType = "String")
@ApiModelProperty(example = "10110201", name = "사용자일련번호", dataType = "String")
private String userSeq;
@ApiModelProperty(example = "마당ID(이름)", name = "마당ID(이름)", dataType = "String")
@ApiModelProperty(example = "test", name = "마당ID(이름)", dataType = "String")
private String loginId;
@ApiModelProperty(example = "고객사명", name = "고객사명", dataType = "String")
@ApiModelProperty(example = "TEST", name = "고객사명", dataType = "String")
private String custNm;
@ApiModelProperty(example = "대표자명", name = "대표자명", dataType = "String")
@ApiModelProperty(example = "홍길동", name = "대표자명", dataType = "String")
private String reprNm;
@ApiModelProperty(example = "사업자등록번호", name = "사업자등록번호", dataType = "String")
@ApiModelProperty(example = "1010120202", name = "사업자등록번호", dataType = "String")
private String bizrno;
@ApiModelProperty(example = "법인등록번호", name = "법인등록번호", dataType = "String")
@ApiModelProperty(example = "1234561234567", name = "법인등록번호", dataType = "String")
private String cprRegNo;
@ApiModelProperty(example = "이름", name = "이름" , dataType = "String")
@ApiModelProperty(example = "홍길동", name = "이름" , dataType = "String")
private String userNm;
@ApiModelProperty(example = "상태", name = "상태", dataType = "String")
@ApiModelProperty(example = "청약", name = "상태", dataType = "String")
private String subsSttusCd;
@ApiModelProperty(example = "법인사업자", name = "구분", dataType = "String")
private String subsSttusNm;
@ApiModelProperty(example = "구분", name = "구분", dataType = "String")
private String custTyCd;
@ApiModelProperty(example = "LTE5만원", name = "청약요금제명", dataType = "String")
private String custTyNm;
@ApiModelProperty(example = "청약요금제명", name = "청약요금제명", dataType = "String")
private String plan;
@ApiModelProperty(example = "전체발송건수", name = "전체발송건수", dataType = "String")
@ApiModelProperty(example = "100", name = "전체발송건수", dataType = "String")
private String sndCnt;
@ApiModelProperty(example = "관리자ID", name = "관리자ID", dataType = "String")
@ApiModelProperty(example = "adminTest", name = "관리자ID", dataType = "String")
private String adminId;
@ApiModelProperty(example = "관리자명", name = "관리자명", dataType = "String")
@ApiModelProperty(example = "어드민", name = "관리자명", dataType = "String")
private String adminNm;
@ApiModelProperty(example = "유치자ID", name = "유치자ID", dataType = "String")
@ApiModelProperty(example = "admin", name = "유치자ID", dataType = "String")
private String channelId;
@ApiModelProperty(example = "유치자명", name = "유치자명", dataType = "String")
@ApiModelProperty(example = "관리자", name = "유치자명", dataType = "String")
private String channelNm;
@ApiModelProperty(example = "USER ID", name = "USER ID", dataType = "String", hidden = true)
@ApiModelProperty(example = "test", name = "USER ID", dataType = "String", hidden = true)
private String userId;
}

View File

@@ -9,26 +9,30 @@ import java.io.Serializable;
@Data
public class ChannelInfo implements Serializable {
@ApiModelProperty(example = "리스트번호", name = "리스트번호", dataType = "Integer")
@ApiModelProperty(example = "1", name = "리스트번호", dataType = "Integer")
private Integer no;
@ApiModelProperty(example = "가입일", name = "가입일", dataType = "String")
@ApiModelProperty(example = "20220101", name = "가입일", dataType = "String")
private String subsDt;
@ApiModelProperty(example = "유치업체", name = "유치업체", dataType = "String")
@ApiModelProperty(example = "대리점", name = "유치업체", dataType = "String")
private String norgNm;
@ApiModelProperty(example = "사용자일련번호", name = "사용자일련번호", dataType = "String")
@ApiModelProperty(example = "10122112", name = "사용자일련번호", dataType = "String")
private String userSeq;
@ApiModelProperty(example = "마당ID(이름)", name = "마당ID(이름)", dataType = "String")
@ApiModelProperty(example = "madang01", name = "마당ID", dataType = "String")
private String loginId;
@ApiModelProperty(example = "고객사명", name = "고객사명", dataType = "String")
@ApiModelProperty(example = "홍길동", name = "고객사명", dataType = "String")
private String custNm;
@ApiModelProperty(example = "사업자등록번호", name = "사업자등록번호", dataType = "String")
@ApiModelProperty(example = "1234512345", name = "사업자등록번호", dataType = "String")
private String bizrno;
@ApiModelProperty(example = "이름", name = "이름" , dataType = "String")
@ApiModelProperty(example = "홍길동", name = "이름" , dataType = "String")
private String userNm;
@ApiModelProperty(example = "상태", name = "상태", dataType = "String")
@ApiModelProperty(example = "01", name = "상태", dataType = "String")
private String subsSttusCd;
@ApiModelProperty(example = "구분", name = "구분", dataType = "String")
@ApiModelProperty(example = "청약", name = "상태명", dataType = "String")
private String subsSttusNm;
@ApiModelProperty(example = "01", name = "고객구분", dataType = "String")
private String custTyCd;
@ApiModelProperty(example = "전체발송건수", name = "전체발송건수", dataType = "String")
@ApiModelProperty(example = "법인", name = "고객구분명", dataType = "String")
private String custTyNm;
@ApiModelProperty(example = "100", name = "전체발송건수", dataType = "String")
private String sndCnt;
}

View File

@@ -9,22 +9,22 @@ import java.io.Serializable;
@Data
public class ChannelListExcelReqDto implements Serializable {
@ApiModelProperty(example = "사용상태", name = "사용상태", notes = "항목 : 전체(Default)/사용 : Y/중지 : N", dataType = "String")
@ApiModelProperty(example = "Y", name = "사용상태", notes = "항목 : 전체(Default)/사용 : Y/중지 : N", dataType = "String")
private String searchType;
@ApiModelProperty(example = "검색조건", name = "검색조건", notes = "항목 : 고객사명 : custNm / 사업자번호 : bizNo / 인증코드 : authCd", dataType = "String")
@ApiModelProperty(example = "custNm", name = "검색조건", notes = "항목 : 고객사명 : custNm / 사업자번호 : bizNo / 인증코드 : authCd", dataType = "String")
private String searchType1;
@ApiModelProperty(example = "검색어(입력)", name = "검색어(입력)", dataType = "String")
@ApiModelProperty(example = "임시회사", name = "검색어(입력)", dataType = "String")
private String searchText;
@ApiModelProperty(example = "조회 시작 날짜", name = "조회 시작 날짜", notes = "YYYYMMDD", dataType = "String")
@ApiModelProperty(example = "20220101", name = "조회 시작 날짜", notes = "YYYYMMDD", dataType = "String")
private String subsStDt;
@ApiModelProperty(example = "조회 종료 날짜", name = "조회 종료 날짜", notes = "YYYYMMDD", dataType = "String")
@ApiModelProperty(example = "20220131", name = "조회 종료 날짜", notes = "YYYYMMDD", dataType = "String")
private String subsEdDt;
@ApiModelProperty(example = "조회 시작 날짜", name = "조회 시작 날짜", notes = "YYYYMMDD", dataType = "String")
@ApiModelProperty(example = "01", name = "청약상태", dataType = "String")
private String subsSttusCd;
@ApiModelProperty(example = "조회 종료 날짜", name = "조회 종료 날짜", notes = "YYYYMMDD", dataType = "String")
@ApiModelProperty(example = "test", name = "로그인아이디", dataType = "String")
private String loginId;
@ApiModelProperty(example = "조회 종료 날짜", name = "조회 종료 날짜", notes = "YYYYMMDD", dataType = "String")
@ApiModelProperty(example = "유치", name = "유치채널", dataType = "String")
private String norgNm;
@ApiModelProperty(example = "조회 종료 날짜", name = "조회 종료 날짜", notes = "YYYYMMDD", dataType = "String")
@ApiModelProperty(example = "01", name = "고객유형", dataType = "String")
private String custTyCd;
}

View File

@@ -9,26 +9,29 @@ import java.io.Serializable;
@Data
public class ChannelListReqDto implements Serializable {
@ApiModelProperty(example = "검색시작일", name = "검색시작일", dataType = "String")
@ApiModelProperty(example = "20220101", name = "검색시작일", dataType = "String")
private String subsStDt;
@ApiModelProperty(example = "검색종료일", name = "검색종료일", dataType = "String")
@ApiModelProperty(example = "20220131", name = "검색종료일", dataType = "String")
private String subsEdDt;
@ApiModelProperty(example = "상태", name = "상태", dataType = "String")
@ApiModelProperty(example = "01", name = "상태", dataType = "String")
private String subsSttusCd;
@ApiModelProperty(example = "회원구분", name = "회원구분", dataType = "String")
@ApiModelProperty(example = "01", name = "회원구분", dataType = "String")
private String custTyCd;
@ApiModelProperty(example = "유치자ID", name = "유치자ID", dataType = "String")
@ApiModelProperty(example = "test", name = "유치자ID", dataType = "String")
private String loginId;
@ApiModelProperty(example = "전체발송건수", name = "전체발송건수", dataType = "String")
@ApiModelProperty(example = "10", name = "전체발송건수", dataType = "String")
private String sndCnt;
@ApiModelProperty(example = "유치업체", name = "유치업체", dataType = "String")
@ApiModelProperty(example = "유치", name = "유치업체", dataType = "String")
private String norgNm;
@ApiModelProperty(example = "상세검색조건", name = "상세검색조건", dataType = "String")
@ApiModelProperty(example = "01", name = "상세검색조건", dataType = "String")
private String searchType;
@ApiModelProperty(example = "검색어", name = "검색어", dataType = "String")
@ApiModelProperty(example = "홍길동", name = "검색어", dataType = "String")
private String searchText;
@ApiModelProperty(example = "페이지당 조회할 목록 수", name = "페이지당 조회할 목록 수", dataType = "String")
@ApiModelProperty(example = "50", name = "페이지당 조회할 목록 수", dataType = "String")
private int pagePerRows;
@ApiModelProperty(example = "현재 페이지", name = "현재 페이지", dataType = "String")
@ApiModelProperty(example = "1", name = "현재 페이지", dataType = "String")
private int page;
@ApiModelProperty(name = "유치자ID", dataType = "String", hidden = true)
private String attrctorId;
}

View File

@@ -1,45 +1,45 @@
package kr.co.uplus.ez.api.calculate.dto;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class CalcList implements Serializable {
@ApiModelProperty(example = "날짜", name = "날짜", dataType = "String")
@ApiModelProperty(example = "202201", name = "날짜", dataType = "String")
private String useYm;
@ApiModelProperty(example = "고객사명(이름)", name = "고객사명", dataType = "String")
@ApiModelProperty(example = "홍길동", name = "고객사명", dataType = "String")
private String custNm;
@ApiModelProperty(example = "사업자번호(생년월일)", name = "사업자번호", dataType = "String")
@ApiModelProperty(example = "1234512345", name = "사업자번호", dataType = "String")
private String bizrno;
@ApiModelProperty(example = "요금제", name = "요금제", dataType = "String")
@ApiModelProperty(example = "LTE5만원", name = "요금제", dataType = "String")
private String prodNm;
@ApiModelProperty(example = "요금액", name = "요금액", dataType = "String")
@ApiModelProperty(example = "10000", name = "요금액", dataType = "String")
private String prodAmt;
@ApiModelProperty(example = "시작금액", name = "시작금액", dataType = "String")
@ApiModelProperty(example = "10000", name = "시작금액", dataType = "String")
private String startAmt;
@ApiModelProperty(example = "사용금액", name = "사용금액", dataType = "String")
@ApiModelProperty(example = "10000", name = "사용금액", dataType = "String")
private String useAmt;
@ApiModelProperty(example = "이월금액", name = "이월금액", dataType = "String")
@ApiModelProperty(example = "10000", name = "이월금액", dataType = "String")
private String cfwdAmt;
@ApiModelProperty(example = "종량금액", name = "종량금액", dataType = "String")
@ApiModelProperty(example = "10000", name = "종량금액", dataType = "String")
private String mrtUseAmt;
@ApiModelProperty(example = "소멸금액", name = "소멸금액", dataType = "String")
@ApiModelProperty(example = "1000", name = "소멸금액", dataType = "String")
private String extncAmt;
@ApiModelProperty(example = "청구금액", name = "청구금액", dataType = "String")
@ApiModelProperty(example = "10000", name = "청구금액", dataType = "String")
private String billingAmt;
@ApiModelProperty(example = "전체 발송건수", name = "전체 발송건수", dataType = "String")
@ApiModelProperty(example = "100", name = "전체 발송건수", dataType = "String")
private String totalSndCnt;
@ApiModelProperty(example = "SMS 발송건수", name = "SMS 발송건수", dataType = "String")
@ApiModelProperty(example = "100", name = "SMS 발송건수", dataType = "String")
private String smsSndCnt;
@ApiModelProperty(example = "LMS 발송건수", name = "LMS 발송건수", dataType = "String")
@ApiModelProperty(example = "100", name = "LMS 발송건수", dataType = "String")
private String lmsSndCnt;
@ApiModelProperty(example = "MMS 발송건수", name = "MMS 발송건수", dataType = "String")
@ApiModelProperty(example = "100", name = "MMS 발송건수", dataType = "String")
private String mmsSndCnt;
@ApiModelProperty(example = "알림톡 발송건수", name = "알림톡 발송건수", dataType = "String")
@ApiModelProperty(example = "100", name = "알림톡 발송건수", dataType = "String")
private String atlkSndCnt;
}

View File

@@ -11,17 +11,17 @@ import java.io.Serializable;
public class CalcListExcelReqDto implements Serializable {
@NotNull
@ApiModelProperty(example = "검색시작월", name = "검색시작월",dataType = "String")
@ApiModelProperty(example = "202201", name = "검색시작월",dataType = "String")
private String startMonth;
@NotNull
@ApiModelProperty(example = "검색종료월", name = "검색종료월",dataType = "String")
@ApiModelProperty(example = "202203", name = "검색종료월",dataType = "String")
private String endMonth;
@ApiModelProperty(example = "고객사명", name = "고객사명", dataType = "String")
@ApiModelProperty(example = "홍길동", name = "고객사명", dataType = "String")
private String custNm;
@ApiModelProperty(example = "사업자번호", name = "사업자번호", dataType = "String")
@ApiModelProperty(example = "1234512345", name = "사업자번호", dataType = "String")
private String bizrno;
}

View File

@@ -1,36 +1,35 @@
package kr.co.uplus.ez.api.calculate.dto;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class CalcListReqDto implements Serializable {
@NotNull
@ApiModelProperty(example = "페이지당 조회할 목록 수", name = "페이지당 조회할 목록 수", dataType = "String")
@ApiModelProperty(example = "50", name = "페이지당 조회할 목록 수", dataType = "String")
private int pagePerRows;
@NotNull
@ApiModelProperty(example = "현재 페이지", name = "현재 페이지", dataType = "int")
@ApiModelProperty(example = "1", name = "현재 페이지", dataType = "int")
private int page;
@NotNull
@ApiModelProperty(example = "검색시작월", name = "검색시작월",dataType = "String")
@ApiModelProperty(example = "202201", name = "검색시작월",dataType = "String")
private String startMonth;
@NotNull
@ApiModelProperty(example = "검색종료월", name = "검색종료월",dataType = "String")
@ApiModelProperty(example = "202203", name = "검색종료월",dataType = "String")
private String endMonth;
@ApiModelProperty(example = "고객사명", name = "고객사명", dataType = "String")
@ApiModelProperty(example = "홍길동", name = "고객사명", dataType = "String")
private String custNm;
@ApiModelProperty(example = "사업자번호", name = "사업자번호", dataType = "String")
@ApiModelProperty(example = "1234512345", name = "사업자번호", dataType = "String")
private String bizrno;
}

View File

@@ -1,12 +1,11 @@
package kr.co.uplus.ez.api.channelMgt;
import java.util.List;
import kr.co.uplus.ez.api.channelMgt.dto.TmpltInfo;
import kr.co.uplus.ez.api.channelMgt.dto.TmpltListExcelReqDto;
import kr.co.uplus.ez.api.channelMgt.dto.TmpltListReqDto;
import org.apache.ibatis.annotations.Mapper;
import kr.co.uplus.ez.api.channelMgt.dto.TmpltInfo;
import kr.co.uplus.ez.api.channelMgt.dto.TmpltListReqDto;
import java.util.List;
@Mapper
public interface ChannelMgtMapper {
@@ -17,5 +16,7 @@ public interface ChannelMgtMapper {
List<TmpltInfo> selectTmpltListExcel(TmpltListExcelReqDto tmpltListExcelReqDto);
String selectChannelAuthMenuNo(String targetUserId);
default String selectChannelAuthMenuNo(String targetUserId) {
return null;
}
}

View File

@@ -9,24 +9,24 @@ import java.io.Serializable;
@Data
public class TmpltInfo implements Serializable {
@ApiModelProperty(example = "리스트번호", name = "리스트번호", dataType = "Integer")
@ApiModelProperty(example = "1", name = "리스트번호", dataType = "Integer")
private Integer no;
@ApiModelProperty(example = "고객사명(이름)", name = "고객사명(이름)", dataType = "String")
@ApiModelProperty(example = "홍길동", name = "고객사명", dataType = "String")
private String custNm;
@ApiModelProperty(example = "사업자번호(생년월일)", name = "사업자번호(생년월일)", dataType = "String")
@ApiModelProperty(example = "1234512345", name = "사업자번호", dataType = "String")
private String bRegNo;
@ApiModelProperty(example = "템플릿 코드", name = "템플릿 코드", dataType = "String")
@ApiModelProperty(example = "01", name = "템플릿 코드", dataType = "String")
private String tmpltCd;
@ApiModelProperty(example = "템플릿명", name = "템플릿명", dataType = "String")
@ApiModelProperty(example = "테스트", name = "템플릿명", dataType = "String")
private String tmpltNm;
@ApiModelProperty(example = "템플릿 유형", name = "템플릿 유형", notes = "항목 : (01: 기본형(Default), 02:부가정보형, 03:광고추가형, 04:복합형)", dataType = "String")
@ApiModelProperty(example = "01", name = "템플릿 유형", notes = "항목 : (01: 기본형(Default), 02:부가정보형, 03:광고추가형, 04:복합형)", dataType = "String")
private String tmpltType;
@ApiModelProperty(example = "상태", name = "상태" , notes = "항목 : (T:신청완료, R:검수요청완료, Q:카카오 검수중, A:템플릿승인, S:반려)" , dataType = "String")
@ApiModelProperty(example = "T", name = "상태" , notes = "항목 : (T:신청완료, R:검수요청완료, Q:카카오 검수중, A:템플릿승인, S:반려)" , dataType = "String")
private String stat;
@ApiModelProperty(example = "반려사유", name = "반려사유", dataType = "String")
@ApiModelProperty(example = "01", name = "반려사유", dataType = "String")
private String returnReason;
@ApiModelProperty(example = "발신프로필", name = "발신프로필", dataType = "String")
@ApiModelProperty(example = "1230123023", name = "발신프로필", dataType = "String")
private String sendProfile;
@ApiModelProperty(example = "최종수정일자", name = "최종수정일자", dataType = "String")
@ApiModelProperty(example = "20220320", name = "최종수정일자", dataType = "String")
private String lastChgDt;
}

View File

@@ -3,21 +3,21 @@ package kr.co.uplus.ez.api.channelMgt.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class TmpltListExcelReqDto implements Serializable {
@ApiModelProperty(example = "사용상태", name = "사용상태", notes = "항목 : 전체(Default)/사용 : Y/중지 : N", dataType = "String")
@ApiModelProperty(example = "Y", name = "사용상태", notes = "항목 : 전체(Default)/사용 : Y/중지 : N", dataType = "String")
private String searchType1;
@ApiModelProperty(example = "검색조건", name = "검색조건", notes = "항목 : 고객사명 : custNm / 사업자번호 : bizNo / 인증코드 : authCd", dataType = "String")
@ApiModelProperty(example = "custNm", name = "검색조건", notes = "항목 : 고객사명 : custNm / 사업자번호 : bizNo / 인증코드 : authCd", dataType = "String")
private String searchType2;
@ApiModelProperty(example = "검색어(입력)", name = "검색어(입력)", dataType = "String")
@ApiModelProperty(example = "홍길동", name = "검색어(입력)", dataType = "String")
private String searchText1;
@ApiModelProperty(example = "1122", name = "채널메뉴번호", dataType = "String")
private String channelAuthMenuNo;
@ApiModelProperty(example = "test", name = "사용자아이디", dataType = "String")
private String userId;
}

View File

@@ -1,31 +1,31 @@
package kr.co.uplus.ez.api.channelMgt.dto;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class TmpltListReqDto implements Serializable {
@ApiModelProperty(example = "사용상태", name = "사용상태", notes = "항목 : 전체(Default)/사용 : Y/중지 : N", dataType = "String")
@ApiModelProperty(example = "Y", name = "사용상태", notes = "항목 : 전체(Default)/사용 : Y/중지 : N", dataType = "String")
private String searchType1;
@ApiModelProperty(example = "검색조건", name = "검색조건", notes = "항목 : 고객사명 : custNm / 사업자번호 : bizNo / 인증코드 : authCd", dataType = "String")
@ApiModelProperty(example = "custNm", name = "검색조건", notes = "항목 : 고객사명 : custNm / 사업자번호 : bizNo / 인증코드 : authCd", dataType = "String")
private String searchType2;
@ApiModelProperty(example = "검색어(입력)", name = "검색어(입력)", dataType = "String")
@ApiModelProperty(example = "홍길동", name = "검색어(입력)", dataType = "String")
private String searchText1;
@NotNull
@ApiModelProperty(example = "페이지당 조회할 목록 수",notes = "페이지당 조회할 목록 수", name = "페이지당 조회할 목록 수", dataType = "int")
@ApiModelProperty(example = "50",notes = "페이지당 조회할 목록 수", name = "페이지당 조회할 목록 수", dataType = "int")
private int pagePerRows;
@NotNull
@ApiModelProperty(example = "현재 페이지", name = "현재 페이지", dataType = "int")
@ApiModelProperty(example = "1", name = "현재 페이지", dataType = "int")
private int page;
@ApiModelProperty(example = "1", name = "채널메뉴번호", dataType = "int")
private String channelAuthMenuNo;
@ApiModelProperty(example = "test", name = "사용자아이디", dataType = "int")
private String userId;
}

View File

@@ -1,14 +1,18 @@
package kr.co.uplus.ez.api.comm.dto;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class Auth implements Serializable{
@ApiModelProperty(example = "1001", name = "권한코드", dataType = "int")
private String autCd;
@ApiModelProperty(example = "어드민", name = "권한명", dataType = "int")
private String autNm;
@ApiModelProperty(example = "N", name = "사용여부", dataType = "int")
private String useYn;
}

View File

@@ -1,16 +1,16 @@
package kr.co.uplus.ez.api.comm.dto;
import java.io.Serializable;
import java.util.List;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@SuppressWarnings("serial")
@Data
public class AuthRes implements Serializable {
@ApiModelProperty(name = "권한리스트", example = "권한리스트", dataType = "List<Auth>")
@ApiModelProperty(name = "권한리스트", dataType = "List<Auth>")
private List<Auth> list;
}

View File

@@ -1,23 +1,23 @@
package kr.co.uplus.ez.api.comm.dto;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class Code implements Serializable {
@ApiModelProperty(name = "그룹코드", example = "그룹코드", dataType = "String")
@ApiModelProperty(name = "그룹코드", example = "1001", dataType = "String")
private String grpCd;
@ApiModelProperty(name = "상세코드", example = "상세코드", dataType = "String")
@ApiModelProperty(name = "상세코드", example = "01", dataType = "String")
private String code;
@ApiModelProperty(name = "상세코드명", example = "상세코드명", dataType = "String")
@ApiModelProperty(name = "상세코드명", example = "TEST", dataType = "String")
private String codeNm;
@ApiModelProperty(name = "정렬순서", example = "정렬순서", dataType = "Integer")
@ApiModelProperty(name = "정렬순서", example = "1", dataType = "Integer")
private Integer sortOrder;
@ApiModelProperty(name = "사용여부", example = "사용여부", dataType = "String")
@ApiModelProperty(name = "사용여부", example = "Y", dataType = "String")
private String useYn;
}

View File

@@ -1,15 +1,15 @@
package kr.co.uplus.ez.api.comm.dto;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class CodeReqDto implements Serializable{
@ApiModelProperty(example = "그룹코드", name = "그룹코드", dataType = "String")
@ApiModelProperty(example = "1001", name = "그룹코드", dataType = "String")
private String grpCd;
}

View File

@@ -1,16 +1,16 @@
package kr.co.uplus.ez.api.comm.dto;
import java.io.Serializable;
import java.util.List;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@SuppressWarnings("serial")
@Data
public class CodeRes implements Serializable {
@ApiModelProperty(name = "코드리스트", example = "코드리스트", dataType = "List<Code>")
@ApiModelProperty(name = "코드리스트", dataType = "List<Code>")
private List<Code> list;
}

View File

@@ -1,41 +1,41 @@
package kr.co.uplus.ez.api.comm.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class Menu implements Serializable{
@ApiModelProperty(name = "메뉴 번호", example = "메뉴 번호", dataType = "Integer")
@ApiModelProperty(name = "메뉴 번호", example = "1001", dataType = "Integer")
private Integer menuNo;
@ApiModelProperty(name = "부모 메뉴 번호", example = "부모 메뉴 번호", dataType = "Integer")
@ApiModelProperty(name = "부모 메뉴 번호", example = "1001", dataType = "Integer")
private Integer prntsMenuNo;
@ApiModelProperty(name = "메뉴 명", example = "메뉴 명")
@ApiModelProperty(name = "메뉴 명", example = "고객관리")
private String menuNm;
@ApiModelProperty(name = "메뉴 순서", example = "메뉴 순서", dataType = "Integer")
@ApiModelProperty(name = "메뉴 순서", example = "1", dataType = "Integer")
private Integer menuOdrg;
@ApiModelProperty(name = "사용 여부", example = "사용 여부")
@ApiModelProperty(name = "사용 여부", example = "Y")
private String useYn;
@ApiModelProperty(name = "권한체크 그룹번호", example = "권한체크 그룹번호", dataType = "Integer")
@ApiModelProperty(name = "권한체크 그룹번호", example = "1001", dataType = "Integer")
private Integer autchkGrpno;
@ApiModelProperty(name = "메뉴 레벨", example = "메뉴 레벨", dataType = "Integer")
@ApiModelProperty(name = "메뉴 레벨", example = "1", dataType = "Integer")
private Integer menuLvl;
@ApiModelProperty(name = "메뉴 URL", example = "메뉴 URL")
@ApiModelProperty(name = "메뉴 URL", example = "/login")
private String menuUrl;
@ApiModelProperty(name = "등록 ID", example = "등록 ID")
@ApiModelProperty(name = "등록 ID", example = "test")
private String regId;
@ApiModelProperty(name = "등록 일시", example = "등록 일시")
@ApiModelProperty(name = "등록 일시", example = "20110101")
private String regDt;
@ApiModelProperty(name = "변경 ID", example = "변경 ID")
@ApiModelProperty(name = "변경 ID", example = "test")
private String chgId;
@ApiModelProperty(name = "변경 일시", example = "변경 일시")
@ApiModelProperty(name = "변경 일시", example = "20110101")
private String chgDt;
@ApiModelProperty(name = "하위 메뉴 정보", example = "하위 메뉴 정보", dataType = "List<Menu>")
@ApiModelProperty(name = "하위 메뉴 정보", dataType = "List<Menu>")
private List<Menu> children = new ArrayList<>();
public void addChild(Menu menu) {

View File

@@ -1,17 +1,17 @@
package kr.co.uplus.ez.api.comm.dto;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class RefreshToken implements Serializable{
@ApiModelProperty(name = "인증토큰", example = "인증토큰", dataType = "String")
@ApiModelProperty(name = "인증토큰", example = "adwd121dd", dataType = "String")
private String accessToken;
@ApiModelProperty(name = "토큰 만료시간", example = "토큰 만료시간", dataType = "String")
@ApiModelProperty(name = "토큰 만료시간", example = "1800", dataType = "String")
private String expireTime;
}

View File

@@ -1,16 +1,16 @@
package kr.co.uplus.ez.api.comm.dto;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class RefreshTokenReqDto implements Serializable{
@ApiModelProperty(example = "사용자 ID", name = "사용자 ID", dataType = "String")
@ApiModelProperty(example = "test", name = "사용자 ID", dataType = "String")
private String userId;
@ApiModelProperty(example = "Refresh 토큰", name = "Refresh 토큰", dataType = "String")
@ApiModelProperty(example = "dadw242rdwad2", name = "Refresh 토큰", dataType = "String")
private String refreshToken;
}

View File

@@ -289,7 +289,13 @@ public class CustMgtController {
if(validComponents.validParameter(bindingResult)) {
return new InsertTestIdResDto(ApiResponseCode.CM_PARAMETER_ERROR);
}
try {
return custService.insertTestId(insertTestIdReqDto);
}catch(Exception e) {
logger.info(e.toString());
return new InsertTestIdResDto(ApiResponseCode.CM_DB_QUERY_ERR);
}
}
/**

View File

@@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
@@ -36,34 +37,54 @@ public class CustMgtService {
@Autowired
private HubeasyApiComponents hubeasyApi;
/** 요금제. */
/**
* 요금제.
*/
@Value("${testId.prodCd}")
private String prodCd;
/** 생년월일. */
/**
* 생년월일.
*/
@Value("${testId.rpsnBday}")
private String rpsnBday;
/** 사업자번호. */
/**
* 사업자번호.
*/
@Value("${testId.brno}")
private String brno;
/** 법인번호. */
/**
* 법인번호.
*/
@Value("${testId.cono}")
private String cono;
/** 우편번호. */
/**
* 우편번호.
*/
@Value("${testId.zipCd}")
private String zipCd;
/** 주소. */
/**
* 주소.
*/
@Value("${testId.badr}")
private String badr;
/** 상세주소. */
/**
* 상세주소.
*/
@Value("${testId.dadr}")
private String dadr;
/** 회사명. */
/**
* 회사명.
*/
@Value("${testId.cmpyNm}")
private String cmpyNm;
/** 청구방법. */
/**
* 청구방법.
*/
@Value("${testId.paymMthd}")
private String paymMthd;
/** 고객유형코드. */
/**
* 고객유형코드.
*/
@Value("${testId.custTyCd}")
private String custTyCd;
@@ -217,6 +238,7 @@ public class CustMgtService {
try {
custMgtMapper.updateAdminInfo(subsDetail);
} catch (Exception e) {
logger.info(e.toString());
// TODO: handle exception
return new UpdateAdminInfoResDto(ApiResponseCode.CM_DB_QUERY_ERR);
}
@@ -366,6 +388,7 @@ public class CustMgtService {
* @param insertTestIdReqDto
* @return
*/
@Transactional(value="db1TransactionManager")
public InsertTestIdResDto insertTestId(InsertTestIdReqDto insertTestIdReqDto){
CustMgtMapper custMgtMapper = sqlSessionMaster.getMapper(CustMgtMapper.class);
@@ -795,6 +818,7 @@ public class CustMgtService {
* date : 2022. 4. 25.
* auth : ckr
* desc : 관리자 정보(종합) 수정
*
* @param updateAdminInfoTotalReqDto
* @return UpdateAdminInfoTotalResDto
* @

View File

@@ -1,21 +1,21 @@
package kr.co.uplus.ez.api.custMgt.dto;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class AdminInfo implements Serializable {
@ApiModelProperty(example = "관리자ID", name = "관리자ID", dataType = "String")
@ApiModelProperty(example = "admin", name = "관리자ID", dataType = "String")
private String adminId;
@ApiModelProperty(example = "관리자코드", name = "관리자코드", dataType = "String")
@ApiModelProperty(example = "1001", name = "관리자코드", dataType = "String")
private String adminCd;
@ApiModelProperty(example = "관리자명", name = "관리자명", dataType = "String")
@ApiModelProperty(example = "ADMIN", name = "관리자명", dataType = "String")
private String adminNm;
@ApiModelProperty(example = "대리점명", name = "대리점명", dataType = "String")
@ApiModelProperty(example = "본사", name = "대리점명", dataType = "String")
private String agencyNm;
}

View File

@@ -1,15 +1,15 @@
package kr.co.uplus.ez.api.custMgt.dto;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class AdminInfoReqDto implements Serializable {
@ApiModelProperty(example = "관리자ID", name = "관리자ID", dataType = "String")
@ApiModelProperty(example = "admin", name = "관리자ID", dataType = "String")
private String adminId;
}

View File

@@ -1,23 +1,16 @@
package kr.co.uplus.ez.api.mntrng;
import java.util.ArrayList;
import java.util.List;
import kr.co.uplus.ez.api.mntrng.dto.*;
import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.data.Paging;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.data.ApiResponseMessage;
import kr.co.uplus.ez.common.data.Paging;
import kr.co.uplus.ez.api.mntrng.dto.SendListResDto;
import kr.co.uplus.ez.api.mntrng.dto.LiveSendSttusRes;
import kr.co.uplus.ez.api.mntrng.dto.LiveSendSttusResDto;
import kr.co.uplus.ez.api.mntrng.dto.SendList;
import kr.co.uplus.ez.api.mntrng.dto.SendListReqDto;
import kr.co.uplus.ez.api.mntrng.dto.SendListRes;
import kr.co.uplus.ez.api.mntrng.dto.LiveSendSttus;
import java.util.ArrayList;
import java.util.List;
@Service
public class MntrngService {
@@ -44,16 +37,13 @@ public class MntrngService {
String nowPage = String.valueOf(sendListReqDto.getPage());
int totalCnt = mntrngMapper.selectSendListTotalCnt(sendListReqDto);
if (totalCnt == 0) {
if (totalCnt == 0 || StringUtils.isBlank(sendListReqDto.getSentDate())) {
SendListRes sendListRes = new SendListRes();
sendListRes.setList(new ArrayList<>());
Paging paging = new Paging();
paging.setPage(nowPage);
paging.setTotalCnt(String.valueOf(totalCnt));
sendListRes.setPaging(paging);
return new SendListResDto(ApiResponseCode.CM_NOT_FOUND, sendListRes);
}

View File

@@ -1,16 +1,16 @@
package kr.co.uplus.ez.api.mntrng.dto;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class SendList implements Serializable {
@ApiModelProperty(example = "no", name = "no", dataType = "String")
private String no;
private int no;
@ApiModelProperty(example = "발송일자", name = "발송일자", dataType = "String")
private String sentDate;
@ApiModelProperty(example = "고객사명", name = "고객사명", dataType = "String")

View File

@@ -1,11 +1,11 @@
package kr.co.uplus.ez.api.mntrng.dto;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@SuppressWarnings("serial")
@Data
public class SendListReqDto implements Serializable {
@@ -18,7 +18,6 @@ public class SendListReqDto implements Serializable {
@ApiModelProperty(example = "현재 페이지", name = "현재 페이지", dataType = "int")
private int page;
@NotNull
@ApiModelProperty(example = "발송일", name = "발송일",dataType = "String")
private String sentDate;

View File

@@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@@ -285,6 +286,7 @@ public class RiskMgtService {
* @param paramMap
* @return
*/
@Transactional(value="db1TransactionManager")
public MsgInsertIntrcpResDto msgInsertIntrcp(MsgInsertIntrcpReqDto msgInsertIntrcpReqDto) {
RiskMgtMapper riskMgtMapper = sqlSessionMaster.getMapper(RiskMgtMapper.class);
@@ -292,7 +294,7 @@ public class RiskMgtService {
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetails userDetails = (UserDetails) principal;
String regId = userDetails.getUsername();
try {
String seqNoStr = riskMgtMapper.selectMsgBlckWordSeq();
long seqNo = Long.parseLong(seqNoStr);
// seq select
@@ -300,21 +302,14 @@ public class RiskMgtService {
msgInsertIntrcpReqDto.setRegId(regId);
msgInsertIntrcpReqDto.setBlckYn(Const.COMM_YES);
riskMgtMapper.insertMsgBlckword(msgInsertIntrcpReqDto);
// TODO 차단문구 등록
// 리스트에 regId 넣기
List<MsgBlckwordList> list = msgInsertIntrcpReqDto.getList();
for (MsgBlckwordList msgBlckword : list) {
msgBlckword.setSeqNo(seqNo);
msgBlckword.setRegId(regId);
}
riskMgtMapper.insertBlckwordDtl(list);
} catch (Exception e) {
return new MsgInsertIntrcpResDto(ApiResponseCode.CM_DB_QUERY_ERR);
}
return new MsgInsertIntrcpResDto(ApiResponseCode.SUCCESS);
}
@@ -324,6 +319,7 @@ public class RiskMgtService {
* @param msgUpdateIntrcplReqDto
* @return
*/
@Transactional(value="db1TransactionManager")
public MsgUpdateIntrcpResDto msgUpdateIntrcp(MsgUpdateIntrcplReqDto msgUpdateIntrcplReqDto) {
RiskMgtMapper riskMgtMapper = sqlSessionMaster.getMapper(RiskMgtMapper.class);

View File

@@ -15,6 +15,9 @@ public class Const {
public static final String AUTH_STTUS_CD_01 = "01"; // 인증대기
public static final String AUTH_STTUS_CD_02 = "02"; // 인증완료
public static final String AUTH_CD_ADMIN = "1001";
public static final String AUTH_CD_AGENCY = "1002";
// paging
public static final String TOTAL_CNT = "totalCnt";
public static final String CURRENT_PAGE = "currentPage";

View File

@@ -1,155 +0,0 @@
//package kr.co.uplus.ez.common.utils;
//
//import java.io.UnsupportedEncodingException;
//import java.lang.reflect.Method;
//import java.lang.reflect.Parameter;
//import java.util.Arrays;
//import java.util.Enumeration;
//
//import javax.servlet.http.HttpServletRequest;
//
//import org.joda.time.DateTime;
//import org.joda.time.format.DateTimeFormat;
//import org.joda.time.format.DateTimeFormatter;
//import org.springframework.util.LinkedMultiValueMap;
//import org.springframework.util.MultiValueMap;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.util.ContentCachingRequestWrapper;
//
//import kr.co.uplus.ez.common.auth.AuthUser;
//import kr.co.uplus.ez.common.consts.Const;
//
//
//public class LogUtils {
// public static final String HANG_LOG_KEY = "hangfile";
//
// private static final String HANG_LOG_ROOT = "/logs/uplus/hang/ui";
// private static final DateTimeFormatter FMT_TO_DAY = DateTimeFormat.forPattern("yyyyMMdd");
// private static final DateTimeFormatter FMT_TO_HOUR = DateTimeFormat.forPattern("yyyyMMddHH");
// private static final DateTimeFormatter FMT_TO_SECOND = DateTimeFormat.forPattern("yyyyMMddHHmmss");
// private static final DateTimeFormatter FMT_TO_MILSEC = DateTimeFormat.forPattern("yyyyMMddHHmmssSSS");
//
// public static String getTloLogfileName(String tloRoot) {
// DateTime now = DateTime.now();
// String dir = now.toString(FMT_TO_DAY);
// String suffix = now.toString(FMT_TO_HOUR);
// int min = 5 * (now.getMinuteOfHour() / 5);
// int NODE_NO = 1;
// return String.format("%s/%s/RCS.ADMIN.%03d.%s%02d.log", tloRoot, dir, NODE_NO, suffix, min);
// }
//
// public static String getLoginId() {
// AuthUser user = SpringUtils.getCurrentUser();
// if (user == null)
// return "anonymousUser";
//
// return user.getUsername();
// }
//
// public static String getCurrentTime() {
// return DateTime.now().toString(FMT_TO_MILSEC);
// }
//
//// public static void addTloOrdinaryInfo(TloLog tlo, HttpServletRequest request, HttpServletResponse response) {
//// DateTime now = DateTime.now();
//// tlo.setRspTime(now.toString(FMT_TO_MILSEC));
//// tlo.setClientIp(LogUtils.clientIp(request));
////
//// int status = response.getStatus();
//// if (status == 404) {
//// tlo.setResultCode(ResultCode.SS_NOT_FOUND.getValue());
//// }
//// }
////
//// public static void addTloCustomInfo(TloLog tlo, HttpServletRequest request) {
//// tlo.setReqUri(request.getRequestURI());
//// tlo.setReqParam(getReqMultiMap(request).toString());
//// }
////
//// public static void addTloFailInfo(Object rspObj, HttpServletRequest request) {
//// if (rspObj instanceof Result) {
//// Result<?> result = (Result<?>) rspObj;
//// if (!result.isSuccess()) {
//// TloLog tlo = (TloLog) request.getAttribute(Const.KEY_LOG_OBJ);
//// String code = result.getCode();
//// tlo.setResultCode(code != null ? code : ResultCode.SE_UNKNOWN.getValue());
//// }
//// }
//// else if (rspObj instanceof RestResult) {
//// RestResult<?> result = (RestResult<?>) rspObj;
//// if (!result.isSuccess()) {
//// TloLog tlo = (TloLog) request.getAttribute(Const.KEY_LOG_OBJ);
//// ResultCode code = result.getCode();
//// tlo.setResultCode(code != null ? code.getValue() : ResultCode.SE_UNKNOWN.getValue());
//// }
//// }
//// }
////
//// public static void addTloExceptionInfo(TloLog tlo, Exception ex) {
//// if (ex == null)
//// return;
////
//// if (ex instanceof ServletException) {
//// Throwable e = ((ServletException) ex).getRootCause();
//// if (e instanceof SQLException || e instanceof DataAccessException) {
//// tlo.setResultCode(ResultCode.SE_DB.getValue());
//// }
//// else {
//// tlo.setResultCode(ResultCode.SE_INTERNAL.getValue());
//// }
//// }
//// else {
//// tlo.setResultCode(ResultCode.SE_INTERNAL.getValue());
//// }
//// }
// public static String clientIp(HttpServletRequest request) {
// String ip = request.getHeader("X-Forwarded-For");
// if (ip == null)
// ip = request.getRemoteAddr();
// return ip;
// }
//
//
// public static MultiValueMap<String,String> getReqMultiMap(HttpServletRequest request) {
// MultiValueMap<String,String> params = new LinkedMultiValueMap<>();
// Enumeration<String> names = request.getParameterNames();
// while (names.hasMoreElements()) {
// String name = names.nextElement();
// if (Const.NOT_LOG_PARAMS.contains(name))
// continue;
// String[] value = request.getParameterValues(name);
// params.put(name, Arrays.asList(value));
// }
// return params;
// }
//
// public static boolean isResourceUri(String uri) {
// return uri.startsWith("/static/");
// }
//
// public static String getRequestBody(HttpServletRequest request, Method method) {
// Parameter[] parameters = method.getParameters();
//
// for (Parameter param : parameters) {
// if (param.getAnnotation(RequestBody.class) != null) {
// // CommonsRequestLoggingFilter.getMessagePayload()
// ContentCachingRequestWrapper wrapper =
// org.springframework.web.util.WebUtils.getNativeRequest(request, ContentCachingRequestWrapper.class);
// if (wrapper != null) {
// byte[] buf = wrapper.getContentAsByteArray();
// if (buf.length > 0) {
// int length = Math.min(buf.length, 10000);
// try {
// return new String(buf, 0, length, wrapper.getCharacterEncoding());
// }
// catch (UnsupportedEncodingException ex) {
// return "[unknown]";
// }
// }
// }
// }
// }
// return "";
// }
//
//}

View File

@@ -25,11 +25,28 @@
/* attractMgt-mapper.xml(selectAttractList) */
SELECT
@ROWNUM := @ROWNUM + 1 AS NO
, A.*
, A.SUBS_DT
, A.NORG_NM
, A.USER_SEQ
, A.LOGIN_ID
, A.CUST_NM
, A.BIZRNO
, A.USER_NM
, (SELECT DTL_CD_NM FROM hubez_common.EZ_CD_DTL WHERE GRP_CD = 'SUBS_STTUS_CD' AND DTL_CD = A.SUBS_STTUS_CD) as SUBS_STTUS_CD
, (SELECT DTL_CD_NM FROM hubez_common.EZ_CD_DTL WHERE GRP_CD = 'CUST_KD_CD' AND DTL_CD = A.CUST_TY_CD) as CUST_TY_CD
, (
SELECT
sum(IFNULL(ecm.SND_CNT,0) + IFNULL(ecm.FBACK_CNT,0))
FROM
hubez_common.EZ_CUST_MSTAT ecm
WHERE
ecm.USER_SEQ = A.USER_SEQ
AND ecm.SUM_YM BETWEEN DATE_ADD(NOW(), INTERVAL -37 MONTH) AND DATE_ADD(NOW(), INTERVAL -1 MONTH)
) AS SND_CNT
FROM
(
SELECT
DATE_FORMAT(esi.SUBS_DT, '%Y-%m-%d') AS SUBS_DT
ifnull(DATE_FORMAT(esi.OPN_DT, '%Y-%m-%d'), DATE_FORMAT(esi.SUBS_DT , '%Y-%m-%d')) AS SUBS_DT
, eig.NORG_NM
, esi.USER_SEQ
, eiu.LOGIN_ID
@@ -38,14 +55,6 @@
, esu.USER_NM
, esi.SUBS_STTUS_CD
, eci.CUST_TY_CD
,(
SELECT
sum(IFNULL(ecm.SND_CNT,0) + IFNULL(ecm.FBACK_CNT,0))
FROM
hubez_common.EZ_CUST_MSTAT ecm
WHERE
ecm.USER_SEQ = esu.USER_SEQ
AND ecm.SUM_YM BETWEEN DATE_ADD(NOW(), INTERVAL -37 MONTH) AND DATE_ADD(NOW(), INTERVAL -1 MONTH)) AS SND_CNT
FROM
hubez_common.EZ_SUBS_INFO esi
INNER JOIN hubez_common.EZ_CUST_INFO eci
@@ -67,26 +76,36 @@
/* attractMgt-mapper.xml(selectAttractExcelList) */
SELECT
@ROWNUM := @ROWNUM + 1 AS NO
, A.*
FROM
(
SELECT
DATE_FORMAT(esi.SUBS_DT, '%Y-%m-%d') AS SUBS_DT
, eig.NORG_NM
, eiu.LOGIN_ID
, eci.CUST_NM
, eci.BIZRNO
, esu.USER_NM
, esi.SUBS_STTUS_CD
, eci.CUST_TY_CD
, A.SUBS_DT
, A.NORG_NM
, A.USER_SEQ
, A.LOGIN_ID
, A.CUST_NM
, A.BIZRNO
, A.USER_NM
, (SELECT DTL_CD_NM FROM hubez_common.EZ_CD_DTL WHERE GRP_CD = 'SUBS_STTUS_CD' AND DTL_CD = A.SUBS_STTUS_CD) as SUBS_STTUS_CD
, (SELECT DTL_CD_NM FROM hubez_common.EZ_CD_DTL WHERE GRP_CD = 'CUST_KD_CD' AND DTL_CD = A.CUST_TY_CD) as CUST_TY_CD
, (
SELECT
sum(IFNULL(ecm.SND_CNT,0) + IFNULL(ecm.FBACK_CNT,0))
FROM
hubez_common.EZ_CUST_MSTAT ecm
WHERE
ecm.USER_SEQ = esu.USER_SEQ
AND ecm.SUM_YM BETWEEN DATE_ADD(NOW(), INTERVAL -37 MONTH) AND DATE_ADD(NOW(), INTERVAL -1 MONTH)) AS SND_CNT
ecm.USER_SEQ = A.USER_SEQ
AND ecm.SUM_YM BETWEEN DATE_ADD(NOW(), INTERVAL -37 MONTH) AND DATE_ADD(NOW(), INTERVAL -1 MONTH)
) AS SND_CNT
FROM
(
SELECT
ifnull(DATE_FORMAT(esi.OPN_DT, '%Y-%m-%d'), DATE_FORMAT(esi.SUBS_DT , '%Y-%m-%d')) AS SUBS_DT
, eig.NORG_NM
, esi.USER_SEQ
, eiu.LOGIN_ID
, eci.CUST_NM
, eci.BIZRNO
, esu.USER_NM
, esi.SUBS_STTUS_CD
, eci.CUST_TY_CD
FROM
hubez_common.EZ_SUBS_INFO esi
INNER JOIN hubez_common.EZ_CUST_INFO eci
@@ -99,9 +118,7 @@
ON eiu.EX_DEPT_CD = eig.NORG_CD
WHERE 1 = 1
<include refid="attractListCondition"/>
ORDER BY
esi.SUBS_DT DESC
LIMIT 100) A ,
ORDER BY esi.SUBS_DT DESC) A ,
( SELECT @ROWNUM := 0 ) AS R
</select>
@@ -133,6 +150,9 @@
AND eci.BIZRNO = #{searchText}
</if>
</if>
<if test="attrctorId != null and attrctorId != ''">
and esi.ATTRCTOR_ID = #{attrctorId}
</if>
</sql>
<select id="selectAttractDetail" parameterType="kr.co.uplus.ez.api.attractMgt.dto.ChannelDetailReqDto" resultType="kr.co.uplus.ez.api.attractMgt.dto.ChannelDetailRes">
@@ -140,10 +160,24 @@
SELECT
DATE_FORMAT(esi.SUBS_DT, '%Y-%m-%d') AS SUBS_DT
, esi.SUBS_STTUS_CD
,(SELECT
T2.DTL_CD_NM AS codeNm
FROM hubez_common.EZ_CD_GRP T1
LEFT JOIN hubez_common.EZ_CD_DTL T2
ON T1.GRP_CD = T2.GRP_CD
WHERE T1.GRP_CD = 'SUBS_STTUS_CD'
AND T2.DTL_CD = esi.SUBS_STTUS_CD) AS SUBS_STTUS_NM
, eci.CUST_NM
, esi.PROD_CD
, eci.REPR_NM
, eci.CUST_TY_CD
,(SELECT
T2.DTL_CD_NM AS codeNm
FROM hubez_common.EZ_CD_GRP T1
LEFT JOIN hubez_common.EZ_CD_DTL T2
ON T1.GRP_CD = T2.GRP_CD
WHERE T1.GRP_CD = 'CUST_KD_CD'
AND T2.DTL_CD = eci.CUST_TY_CD) AS CUST_TY_NM
, eci.BIZRNO
, eci.CORPNO AS CPR_REG_NO
, eci.ZIPCD AS ADR1

View File

@@ -27,8 +27,22 @@
(eci.BIZRNO)AS bRegNo,
eat.TMPLT_CD AS tmpltCd,
eat.TMPLT_NM AS tmpltNm,
(eat.TMPLT_TP_CD) AS tmpltType,
eat.TMPLT_STTUS_CD AS stat,
<!-- (eat.TMPLT_TP_CD) AS tmpltType, -->
(SELECT
T2.DTL_CD_NM AS codeNm
FROM hubez_common.EZ_CD_GRP T1
LEFT JOIN hubez_common.EZ_CD_DTL T2
ON T1.GRP_CD = T2.GRP_CD
WHERE T1.GRP_CD = 'TMPLT_TP_CD'
AND T2.DTL_CD=eat.TMPLT_TP_CD) AS tmpltType,
<!-- eat.TMPLT_STTUS_CD AS stat, -->
(SELECT
T2.DTL_CD_NM AS codeNm
FROM hubez_common.EZ_CD_GRP T1
LEFT JOIN hubez_common.EZ_CD_DTL T2
ON T1.GRP_CD = T2.GRP_CD
WHERE T1.GRP_CD = 'TMPLT_STTUS_CD'
AND T2.DTL_CD=eat.TMPLT_STTUS_CD) AS stat,
eat.REJCT_RSN AS returnReason,
eat.SNDRPROF_KEY AS sendProfile,
<!-- (select CHNL_ID from hubez_common.EZ_KKO_CHNL ekc WHERE eat.SNDRPROF_KEY = ekc.SNDRPROF_KEY) AS sendProfile, -->

View File

@@ -12,6 +12,7 @@
INNER JOIN hubez_common.EZ_SVC_USER esu
ON
esu.USER_SEQ = esi.USER_SEQ
AND esu.USER_TP_CD IN ('01','03')
INNER JOIN hubez_common.EZ_CUST_INFO eci
ON
eci.CUST_SEQ = esi.CUST_SEQ
@@ -23,8 +24,49 @@
<select id="selectSubsLists" parameterType="kr.co.uplus.ez.api.custMgt.dto.SubsListReqDto" resultType="kr.co.uplus.ez.api.custMgt.dto.SubsList">
/* custMgt-mapper.xml(selectSubsLists) */
SELECT
@ROWNUM := @ROWNUM + 1 AS NO,
A.*
@ROWNUM := @ROWNUM + 1 AS NO
, A.SERVICE_ID
, A.CUST_NM
, A.REG_NO
, A.REG_DT
, (
SELECT
DTL_CD_NM
FROM
hubez_common.EZ_CD_DTL
WHERE
GRP_CD = 'SUBS_STTUS_CD'
AND DTL_CD = A.SUBS_STTUS_CD
) AS STAT
, ifnull((
select case when EX_PROVUSERTYPE in ( 'CCS-CS1'
, 'CCS-CB1'
, 'CCS-CB2'
, 'CCS-CJ'
, 'CCS-LS2'
, 'CCS-LS3'
, 'CCS-M'
, 'CCS-MJ'
, 'CCS-P'
, 'CCS-P2'
, 'CCS-D'
, 'CCS-G'
, 'CCS-S') then '고객센터'
when EX_PROVUSERTYPE = 'DEALER' then '대리점'
else '직접영업'
end as ATTRACT_CHANNEL
from hubez_imdb.EZ_IM_USER
where LOGIN_ID = A.attrctorId
) , '고객셀프가입') as CHANNEL
, (
SELECT
PROD_NM
FROM
hubez_common.EZ_PROD_INFO
WHERE
PROD_CD = A.PROD_CD
) AS PLAN
, IFNULL((SELECT CFWD_AMT FROM hubez_admin.EZ_USER_LMT WHERE USER_SEQ = A.adminSeq AND LMT_YM = DATE_FORMAT(NOW(), '%Y%m')), 0) AS CARRY_OVER -- 년월까지만 비교 해야 함.
FROM
(
SELECT
@@ -32,46 +74,71 @@
eci.CUST_NM as CUST_NM ,
esi.ENTR_NO as REG_NO,
DATE_FORMAT(esi.OPN_DT, '%Y-%m-%d') AS REG_DT,
(
SELECT
DTL_CD_NM
FROM
hubez_common.EZ_CD_DTL
WHERE
GRP_CD = 'SUBS_STTUS_CD'
AND DTL_CD = esi.SUBS_STTUS_CD) AS STAT
,
(
SELECT
PROD_NM
FROM
hubez_common.EZ_PROD_INFO
WHERE
PROD_CD = esi.PROD_CD) AS PLAN
,
IFNULL((SELECT CFWD_AMT FROM hubez_admin.EZ_USER_LMT WHERE USER_SEQ = esi.USER_SEQ AND LMT_YM = DATE_FORMAT(NOW(), '%Y%m%d')), 0) AS CARRY_OVER
esi.SUBS_STTUS_CD ,
esi.PROD_CD,
esi.USER_SEQ as adminSeq,
esi.ATTRCTOR_ID as attrctorId
FROM
hubez_common.EZ_SUBS_INFO esi
INNER JOIN hubez_common.EZ_SVC_USER esu
ON
esu.USER_SEQ = esi.USER_SEQ
ON esu.USER_SEQ = esi.USER_SEQ
and esu.USER_TP_CD in ('01','03')
INNER JOIN hubez_common.EZ_CUST_INFO eci
ON
eci.CUST_SEQ = esi.CUST_SEQ
AND esi.CUST_SEQ = esu.CUST_SEQ
WHERE 1 = 1
<include refid="subsListCondition"/>
ORDER BY
esi.OPN_DT DESC
LIMIT #{page}, #{pagePerRows}) A,
( SELECT @ROWNUM := #{page} ) AS R
ORDER BY esi.OPN_DT DESC
LIMIT #{page}, #{pagePerRows}) A, ( SELECT @ROWNUM := #{page} ) AS R
</select>
<select id="selectSubsListsExcel" parameterType="kr.co.uplus.ez.api.custMgt.dto.SubsListReqDto" resultType="kr.co.uplus.ez.api.custMgt.dto.SubsList">
/* custMgt-mapper.xml(selectSubsListsExcel) */
SELECT
@ROWNUM := @ROWNUM + 1 AS NO,
A.*
@ROWNUM := @ROWNUM + 1 AS NO
, A.SERVICE_ID
, A.CUST_NM
, A.REG_NO
, A.REG_DT
, (
SELECT
DTL_CD_NM
FROM
hubez_common.EZ_CD_DTL
WHERE
GRP_CD = 'SUBS_STTUS_CD'
AND DTL_CD = A.SUBS_STTUS_CD
) AS STAT
, ifnull((
select case when EX_PROVUSERTYPE in ( 'CCS-CS1'
, 'CCS-CB1'
, 'CCS-CB2'
, 'CCS-CJ'
, 'CCS-LS2'
, 'CCS-LS3'
, 'CCS-M'
, 'CCS-MJ'
, 'CCS-P'
, 'CCS-P2'
, 'CCS-D'
, 'CCS-G'
, 'CCS-S') then '고객센터'
when EX_PROVUSERTYPE = 'DEALER' then '대리점'
else '직접영업'
end as ATTRACT_CHANNEL
from hubez_imdb.EZ_IM_USER
where LOGIN_ID = A.attrctorId
) , '고객셀프가입') as CHANNEL
, (
SELECT
PROD_NM
FROM
hubez_common.EZ_PROD_INFO
WHERE
PROD_CD = A.PROD_CD
) AS PLAN
, IFNULL((SELECT CFWD_AMT FROM hubez_admin.EZ_USER_LMT WHERE USER_SEQ = A.adminSeq AND LMT_YM = DATE_FORMAT(NOW(), '%Y%m')), 0) AS CARRY_OVER -- 년월까지만 비교 해야 함.
FROM
(
SELECT
@@ -79,38 +146,22 @@
eci.CUST_NM as CUST_NM ,
esi.ENTR_NO as REG_NO,
DATE_FORMAT(esi.OPN_DT, '%Y-%m-%d') AS REG_DT,
(
SELECT
DTL_CD_NM
FROM
hubez_common.EZ_CD_DTL
WHERE
GRP_CD = 'SUBS_STTUS_CD'
AND DTL_CD = esi.SUBS_STTUS_CD) AS STAT
,
(
SELECT
PROD_NM
FROM
hubez_common.EZ_PROD_INFO
WHERE
PROD_CD = esi.PROD_CD) AS PLAN
,
IFNULL((SELECT CFWD_AMT FROM hubez_admin.EZ_USER_LMT WHERE USER_SEQ = esi.USER_SEQ AND LMT_YM = DATE_FORMAT(NOW(), '%Y%m%d')), 0) AS CARRY_OVER
esi.SUBS_STTUS_CD ,
esi.PROD_CD,
esi.USER_SEQ as adminSeq,
esi.ATTRCTOR_ID as attrctorId
FROM
hubez_common.EZ_SUBS_INFO esi
INNER JOIN hubez_common.EZ_SVC_USER esu
ON
esu.USER_SEQ = esi.USER_SEQ
ON esu.USER_SEQ = esi.USER_SEQ
and esu.USER_TP_CD in ('01','03')
INNER JOIN hubez_common.EZ_CUST_INFO eci
ON
eci.CUST_SEQ = esi.CUST_SEQ
AND esi.CUST_SEQ = esu.CUST_SEQ
WHERE 1 = 1
<include refid="subsListCondition"></include>
ORDER BY
esi.OPN_DT DESC) A,
( SELECT @ROWNUM := 0 ) AS R
<include refid="subsListCondition"/>
ORDER BY esi.OPN_DT DESC ) A, ( SELECT @ROWNUM := 0 ) AS R
</select>
<sql id="subsListCondition">
<if test="startDt != null and startDt != ''">
@@ -246,7 +297,7 @@
eci.REPR_NM,
(
SELECT
DTL_CD_NM
ifnull(DTL_CD_NM, '-')
FROM
hubez_common.EZ_CD_DTL
WHERE
@@ -258,7 +309,7 @@
eci.BIZRNO AS B_REG_NO,
eci.CORPNO AS CPR_REG_NO,
-- 사용정보
DATE_FORMAT(esi.OPN_DT, '%Y-%m-%d') AS SUBS_DT,
ifnull(DATE_FORMAT(esi.OPN_DT, '%Y-%m-%d'), DATE_FORMAT(esi.SUBS_DT , '%Y-%m-%d')) AS SUBS_DT,
esi.PROD_CD,
(
SELECT
@@ -294,8 +345,8 @@
AND DTL_CD = esu.USER_TP_CD) AS USE_AUTH,
esu.USER_NM,
esu.HP_NO,
IFNULL((SELECT CFWD_AMT + CFWD_RSTRT_BLNC FROM hubez_admin.EZ_USER_LMT WHERE USER_SEQ = esi.USER_SEQ AND LMT_YM = DATE_FORMAT(NOW(), '%Y%m%d')), 0) AS CARRY_OVER,
(SELECT COUNT(*) FROM hubez_common.EZ_SVC_USER WHERE PRNTS_USER_SEQ =esu.USER_SEQ) AS USER_CNT
IFNULL((SELECT CFWD_AMT + CFWD_RSTRT_BLNC FROM hubez_admin.EZ_USER_LMT WHERE USER_SEQ = esi.USER_SEQ AND LMT_YM = DATE_FORMAT(NOW(), '%Y%m')), 0) AS CARRY_OVER,
(SELECT COUNT(*) FROM hubez_common.EZ_SVC_USER WHERE PRNTS_USER_SEQ = esu.USER_SEQ and USER_TP_CD = '02' ) AS USER_CNT
FROM
hubez_common.EZ_SUBS_INFO esi
INNER JOIN hubez_common.EZ_SVC_USER esu
@@ -306,7 +357,7 @@
eci.CUST_SEQ = esi.CUST_SEQ
AND esi.CUST_SEQ = esu.CUST_SEQ
WHERE 1 = 1
AND esu.USER_TP_CD = '01'
AND esu.USER_TP_CD in( '01','03')
AND esu.USER_ID = #{serviceId}
</select>
@@ -322,12 +373,12 @@
<if test="adminNm != null and adminNm != ''">
,SUBSMNGR_NM= #{adminNm}
</if>
WHERE USER_SEQ = (SELECT esi.USER_SEQ
WHERE USER_SEQ = (SELECT USER_SEQ FROM (SELECT esi.USER_SEQ
FROM hubez_common.EZ_SUBS_INFO esi
INNER JOIN hubez_common.EZ_SVC_USER esu
ON esu.USER_SEQ = esi.USER_SEQ
WHERE esu.USER_TP_CD = '01'
AND esu.USER_ID = #{serviceId})
AND esu.USER_ID = #{serviceId}) as sub1)
</update>
<update id="updateUserInfo" parameterType="kr.co.uplus.ez.api.custMgt.dto.UpdateUserReqDto">
@@ -356,8 +407,18 @@
<select id="selectCarryOverList" parameterType="kr.co.uplus.ez.api.custMgt.dto.CarryOverListReqDto" resultType="kr.co.uplus.ez.api.custMgt.dto.CarryOver">
/* custMgt-mapper.xml(selectCarryOverList) */
SELECT
MAX(eud.COLEC_TMS) AS COLEC_TMS
SELECT null AS COLEC_TMS
, DATE_FORMAT(STR_TO_DATE(eul.LMT_YM ,'%Y%m'),'%Y-%m') AS LMT_YM
, esu1.USER_ID AS USER_ID
, SUM(FX_LMT_AMT + CFWD_AMT) AS START_AMOUNT
, ROUND(0) AS USE_AMOUNT
, ROUND(0) AS KRRR_AMOUNT
, ROUND(0) AS EXTSH_AMOUNT
FROM hubez_admin.EZ_USER_LMT eul
JOIN hubez_common.EZ_SVC_USER esu1 ON eul.USER_SEQ = esu1.USER_SEQ
WHERE esu1.USER_ID =#{serviceId} and eul.LMT_YM = DATE_FORMAT(now(), '%Y%m')
UNION ALL
(SELECT MAX(eud.COLEC_TMS) AS COLEC_TMS
,DATE_FORMAT(eud.USE_YM, '%Y-%m') AS LMT_YM
,esu.USER_ID
,ROUND(SUM(IFNULL(eud.FX_LMT_AMT,0) + IFNULL(eud.CFWD_AMT,0))) AS START_AMOUNT
@@ -365,10 +426,8 @@
,ROUND(IFNULL(eud.CFWD_AMT,0)) AS KRRR_AMOUNT
,ROUND(IFNULL(eud.EXTNC_AMT,0)) AS EXTSH_AMOUNT
FROM hubez_admin.EZ_UTXNCOLEC_DTL eud
JOIN hubez_common.EZ_SUBS_INFO esi
ON eud.SUBS_ID = esi.SUBS_ID
JOIN hubez_common.EZ_SVC_USER esu
ON esi.USER_SEQ = esu.USER_SEQ
JOIN hubez_common.EZ_SUBS_INFO esi ON eud.SUBS_ID = esi.SUBS_ID
JOIN hubez_common.EZ_SVC_USER esu ON esi.USER_SEQ = esu.USER_SEQ
WHERE 1=1
<![CDATA[
AND eud.USE_YM >= DATE_ADD(NOW(), INTERVAL -4 MONTH)
@@ -376,7 +435,7 @@
]]>
AND esu.USER_ID = #{serviceId}
GROUP BY eud.USE_YM, eud.SUBS_ID
ORDER BY eud.USE_YM DESC
ORDER BY eud.USE_YM DESC)
</select>
<select id="selectImUser" parameterType="kr.co.uplus.ez.common.data.ImUser" resultType="kr.co.uplus.ez.common.data.ImUser">
@@ -461,7 +520,7 @@
SELECT
USER_NM
,DATE_FORMAT(esu.REG_DT, '%Y-%m-%d') AS REG_DT
,esu.USER_TP_CD AS USER_TYPE
,(SELECT DTL_CD_NM FROM hubez_common.EZ_CD_DTL WHERE GRP_CD='SVCUSER_TP_CD' AND esu.USER_TP_CD = DTL_CD) AS USER_TYPE
,USER_ID
,(SELECT USER_ID FROM hubez_common.EZ_SVC_USER where USER_SEQ = esu.PRNTS_USER_SEQ LIMIT 1) AS ADMIN_ID
,esu.USER_STTUS_CD AS USER_STAT
@@ -798,7 +857,7 @@
FROM hubez_admin.EZ_USER_LMT eul
INNER JOIN hubez_common.EZ_SVC_USER esu
ON eul.USER_SEQ = esu.USER_SEQ
WHERE esu.USER_SEQ = #{userId}
WHERE esu.USER_ID = #{userId}
AND eul.LMT_YM = DATE_FORMAT(NOW(),'%Y%m')
</select>

View File

@@ -126,7 +126,6 @@
INTO hubez_send.${tableName} (
CLIENT_KEY
, REQ_PRODUCT
, TRAFFIC_TYPE
, MSG_STATUS
, REQ_DATE
, CALLBACK_NUMBER
@@ -137,7 +136,6 @@
)value(
#{clientKey}
, 'SMS'
, 'real'
, 'ready'
, NOW()
, '15445992'

View File

@@ -37,7 +37,13 @@
ON T1.GRP_CD = T2.GRP_CD
WHERE T1.GRP_CD = 'SNDBLCK_RSN_CD'
and T2.DTL_CD=esb.BLCK_RSN_CD) AS BLCK_RSN_NM
, IF(esb.BLCK_YN = 'Y', '차단', '미차단') AS BLCK_YN
, (SELECT
T2.DTL_CD_NM AS codeNm
FROM hubez_common.EZ_CD_GRP T1
LEFT JOIN hubez_common.EZ_CD_DTL T2
ON T1.GRP_CD = T2.GRP_CD
WHERE T1.GRP_CD = 'SNDBLCK_YN_CD'
AND T2.DTL_CD=esb.BLCK_YN) AS BLCK_YN
, esb.REG_ID
, esb.CHG_ID
, DATE_FORMAT(esb.CHG_DT, '%Y-%m-%d') As LAST_CHG_DT
@@ -231,7 +237,13 @@
SELECT
emb.SEQ_NO
, ebd.WORD
, IF(emb.BLCK_YN = 'Y', '차단', '미차단') AS BLCK_YN
, (SELECT
T2.DTL_CD_NM AS codeNm
FROM hubez_common.EZ_CD_GRP T1
LEFT JOIN hubez_common.EZ_CD_DTL T2
ON T1.GRP_CD = T2.GRP_CD
WHERE T1.GRP_CD = 'SNDBLCK_YN_CD'
AND T2.DTL_CD=emb.BLCK_YN) AS BLCK_YN
, DATE_FORMAT(emb.CHG_DT , '%Y-%m-%d') AS LAST_CHG_DT
,(
SELECT
@@ -329,7 +341,7 @@
) VALUES
<foreach collection="list" item="item" index="i"
separator=",">
(#{item.seqNo}, #{item.word}, #{item.regId}, NOW() )
(#{item.seqNo},#{item.seqNm}, #{item.word}, #{item.regId}, NOW() )
</foreach>
</insert>