로그인 / 고객관리 / 시스템관리 ... 디자인 및 기능 수정 적용

This commit is contained in:
kimre
2022-07-12 22:22:17 +09:00
parent 3d7032432c
commit c64cf89919
32 changed files with 787 additions and 636 deletions

View File

@@ -1428,7 +1428,7 @@ header .user_wrap .user_info .logout {
padding: 5px 0 5px 10px; padding: 5px 0 5px 10px;
} }
.popup.b-popup tr:nth-child(1) .memo:nth-child(1){ .popup.b-popup tr:nth-child(n) .memo:nth-child(n){
height: 100px; height: 100px;
display: block; display: block;
overflow: auto; overflow: auto;

View File

@@ -1,4 +1,5 @@
<template> <template>
<div>
<header> <header>
<h1 class="logo"><a href="javascript:void(0)">uplus 메시지허브이지<span>BACKOFFICE</span></a></h1> <h1 class="logo"><a href="javascript:void(0)">uplus 메시지허브이지<span>BACKOFFICE</span></a></h1>
<div class="user_wrap"> <div class="user_wrap">
@@ -12,12 +13,15 @@
</div> </div>
</div> </div>
</header> </header>
<logout-modal ref="logoutModal"></logout-modal>
</div>
</template> </template>
<script> <script>
//import tokenSvc from '@/common/token-service'; //import tokenSvc from '@/common/token-service';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import loginApi from '@/modules/login/service/api'; import loginApi from '@/modules/login/service/api';
import logoutModal from "./logoutModal";
export default { export default {
name: "hubWebHeader", name: "hubWebHeader",
@@ -27,6 +31,7 @@ export default {
isLogin: false, isLogin: false,
isErrPage: false, isErrPage: false,
navActive: false, navActive: false,
} }
}, },
created() { created() {
@@ -59,6 +64,9 @@ export default {
} }
}, },
}, },
components: {
logoutModal,
},
methods: { methods: {
userInfoToggle(){ userInfoToggle(){
var click = "clicked"; var click = "clicked";
@@ -71,19 +79,22 @@ export default {
} }
}, },
logout(){ logout(){
let result = confirm("로그아웃 하시겠습니까?"); //commonModal
if (result) { this.$refs.logoutModal.logoutModalOpen();
loginApi.logout().then(response => {
if(response.data.retCode == '0000'){
// tokenSvc.removeToken(); // let result = confirm("로그아웃 하시겠습니까?");
// if (result) {
this.$router.push({ // loginApi.logout().then(response => {
path: "/login" // if(response.data.retCode == '0000'){
}); //
} // // tokenSvc.removeToken();
}); //
} // this.$router.push({
// path: "/login"
// });
// }
// });
// }
} }
} }
}; };

View File

@@ -0,0 +1,81 @@
<template>
<div class="wrap bg-wrap">
<div class="dimmed logoutConfirm" @click="logoutModalCancel();"></div>
<div class="popup-wrap logoutConfirm">
<!-- 수정 확인 -->
<div class="popup logoutConfirm">
<div class="pop-head">
<h3 class="pop-tit">로그아웃</h3>
</div>
<div class="pop-cont">
<p>로그아웃 하시겠습니까?</p>
</div>
<div class="popup-btn2">
<button class="btn-pcolor" @click="logoutModalClose();">확인</button>
<button class="btn-default" @click="logoutModalCancel();">취소</button>
</div>
</div>
</div>
</div>
</template>
<script>
import loginApi from "@/modules/login/service/api";
export default {
name: "confirm",
data(){
return{
row:{},
}
},
methods : {
// 모달 오픈
logoutModalOpen() {
var dimmed = document.getElementsByClassName('logoutConfirm');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'block';
}
},
// 모달 끄기(ok)
logoutModalClose() {
var dimmed = document.getElementsByClassName('logoutConfirm');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
loginApi.logout().then(response => {
if(response.data.retCode == '0000'){
this.$store.commit("login/isLogin", false);
this.$store.commit("login/isAuthChk", false);
this.$router.push({
path: "/login"
});
}
});
},
// 모달 끄기(취소)
logoutModalCancel() {
var dimmed = document.getElementsByClassName('logoutConfirm');
for (var i = 0; i < dimmed.length; i++) {
dimmed[i].style.display = 'none';
}
var click = "clicked";
var userBtn = document.querySelector('.user_wrap .user');
if(userBtn.classList.contains(click)){
userBtn.classList.remove(click);
}
else{
userBtn.classList.add(click);
}
}
}
}
</script>
<style>
.dimmed {z-index:1;}
.popup-btn-wrap {width: 500px; margin: auto; padding: 100px 0; z-index:10;}
.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 {z-index:10;}
</style>

View File

@@ -1,7 +1,7 @@
<template> <template>
<!-- <div class="wrap bg-wrap"> --> <!-- <div class="wrap bg-wrap"> -->
<div> <div>
<div class="dimmed modal33" @click="excelPopClose();"></div> <div class="dimmed modal33" @click="excelPopClose()"></div>
<div class="popup-wrap modal33"> <div class="popup-wrap modal33">
<div class="popup modal33 popup_form"> <div class="popup modal33 popup_form">
<div class="pop-head"> <div class="pop-head">
@@ -17,7 +17,13 @@
<th>사용자 ID 업로드</th> <th>사용자 ID 업로드</th>
<td> <td>
<div class="popup-btn2 bulk"> <div class="popup-btn2 bulk">
<input type="file" ref="file" style="display: none" @change="readFile" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/> <input
type="file"
ref="file"
style="display: none"
@change="readFile"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
/>
<button class="btn-default" @click="sampleDown">샘플 다운로드</button> <button class="btn-default" @click="sampleDown">샘플 다운로드</button>
<button class="button btn-p2color" @click="$refs.file.click()">파일 업로드</button> <button class="button btn-p2color" @click="$refs.file.click()">파일 업로드</button>
</div> </div>
@@ -38,15 +44,15 @@
<script> <script>
import api from '@/service/api'; import api from '@/service/api';
import custMgtApi from "../service/custMgtApi.js"; import custMgtApi from '../service/custMgtApi.js';
import { utils_mixin, chkPattern2 } from '../service/mixins'; import { utils_mixin, chkPattern2 } from '../service/mixins';
import xlsx from '@/common/excel'; import xlsx from '@/common/excel';
import moment from 'moment'; import moment from 'moment';
import XLSX from 'xlsx'; import XLSX from 'xlsx';
import commonModal from "@/components/modal/commonModal"; import commonModal from './commonModal';
export default { export default {
name: "memberBulkRegPop", name: 'memberBulkRegPop',
mixins: [utils_mixin, chkPattern2], mixins: [utils_mixin, chkPattern2],
data() { data() {
return { return {
@@ -54,12 +60,12 @@ export default {
excelHeader: [], excelHeader: [],
pageType: 'SAMPLE', pageType: 'SAMPLE',
adminId: '', adminId: '',
varList : ["이름","휴대폰번호","기타1","기타2","기타3","기타4"], varList: ['이름', '휴대폰번호', '기타1', '기타2', '기타3', '기타4'],
varList2 : ["이름","기타1","기타2","기타3","기타4"], varList2: ['이름', '기타1', '기타2', '기타3', '기타4'],
nData: [], nData: [],
oData: [], oData: [],
totalItems: 0, totalItems: 0,
} };
}, },
components: { components: {
commonModal, commonModal,
@@ -72,7 +78,7 @@ export default {
excelPopOpen(adminId, totalItems) { excelPopOpen(adminId, totalItems) {
this.adminId = adminId; this.adminId = adminId;
this.totalItems = totalItems; this.totalItems = totalItems;
console.log(totalItems) console.log(totalItems);
var excelPop = document.getElementsByClassName('modal33'); var excelPop = document.getElementsByClassName('modal33');
for (var i = 0; i < excelPop.length; i++) { for (var i = 0; i < excelPop.length; i++) {
excelPop[i].style.display = 'block'; excelPop[i].style.display = 'block';
@@ -85,19 +91,27 @@ export default {
for (var i = 0; i < excelPop.length; i++) { for (var i = 0; i < excelPop.length; i++) {
excelPop[i].style.display = 'none'; excelPop[i].style.display = 'none';
} }
// this.$refs.file.reset()
let element = document.getElementById('uploadFile');
while (element.firstChild) {
element.removeChild(element.firstChild);
}
}, },
// 저장 후 부모창 호출. // 저장 후 부모창 호출.
toComplete() { toComplete() {
this.getParent('custList').$refs.table.reloadData(); this.row.serviceId = this.adminId;
// 팝업으로 교체 예정
if (confirm('정상 업로드 되었습니다.')){
this.excelPopClose(); this.excelPopClose();
this.$parent.memberDetail(this.adminId);
}
}, },
async doInsert() { async doInsert() {
if (this.doValidate() && window.confirm('등록 하시겠습니까?')) { if (this.doValidate() && window.confirm('등록 하시겠습니까?')) {
try { try {
const response = await custMgtApi.insertTestId(this.row); const response = await custMgtApi.insertTestId(this.row);
const result = response.data; const result = response.data;
if (result != null && result.retCode == "0000") { if (result != null && result.retCode == '0000') {
this.row.title = '청약고객관리'; this.row.title = '청약고객관리';
this.row.msg1 = '저장 하였습니다.'; this.row.msg1 = '저장 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commmonModal.alertModalOpen(this.row);
@@ -116,20 +130,19 @@ export default {
let options = { let options = {
header: this.excelHeader, header: this.excelHeader,
dataOrder: 'header' dataOrder: 'header',
}; };
xlsx.export([], saveFileName, options).then(() => {}); xlsx.export([], saveFileName, options).then(() => {});
}, },
getExcelHeader() { getExcelHeader() {
// 헤더를 mockup으로 관리한다. // 헤더를 mockup으로 관리한다.
custMgtApi.getExcelHeader(this.pageType).then(res => { custMgtApi.getExcelHeader(this.pageType).then((res) => {
this.excelHeader = res; this.excelHeader = res;
}); });
}, },
readFile(event) { readFile(event) {
this.nData = [];
this.nData = [] this.oData = [];
this.oData = []
const file = event.target.files[0]; const file = event.target.files[0];
console.log(file.name); console.log(file.name);
@@ -140,13 +153,12 @@ export default {
text.innerText = file.name; text.innerText = file.name;
button.addEventListener('click', () => { button.addEventListener('click', () => {
this.delFile(event); this.delFile(event);
}) });
button.innerText = 'X';
const root = document.getElementById('uploadFile'); const root = document.getElementById('uploadFile');
root.appendChild(text); root.appendChild(text);
root.appendChild(button); root.appendChild(button);
let reader = new FileReader(); let reader = new FileReader();
let tmpResult = {}; let tmpResult = {};
const vm = this; const vm = this;
@@ -154,16 +166,13 @@ export default {
this.row.title = '청약고객관리'; this.row.title = '청약고객관리';
this.row.msg1 = '파일을 읽는 동안 에러가 발생 했습니다.'; this.row.msg1 = '파일을 읽는 동안 에러가 발생 했습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commmonModal.alertModalOpen(this.row);
} };
reader.onloadend = (e) => { reader.onloadend = (e) => {};
}
reader.onload = (e) => { reader.onload = (e) => {
let data = reader.result; let data = reader.result;
let workbook = XLSX.read(data, { type: 'binary' }); let workbook = XLSX.read(data, { type: 'binary' });
workbook.SheetNames.forEach(sheetName => { workbook.SheetNames.forEach((sheetName) => {
const rowObj = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], { raw: true }); const rowObj = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], { raw: true });
tmpResult = rowObj; tmpResult = rowObj;
const limitCnt = 100; const limitCnt = 100;
@@ -197,8 +206,10 @@ export default {
let { retVal, msg } = vm.validXlxs({ ID, 이름, 휴대폰번호, 이메일, ID잠금 }); let { retVal, msg } = vm.validXlxs({ ID, 이름, 휴대폰번호, 이메일, ID잠금 });
if (retVal) { if (retVal) {
const pVal = [{ name:'이름',val:이름, len:20,}, const pVal = [
{ name:'ID잠금',val:ID잠금, len:4,},]; { name: '이름', val: 이름, len: 20 },
{ name: 'ID잠금', val: ID잠금, len: 4 },
];
const rVal = vm.isTitle(pVal); const rVal = vm.isTitle(pVal);
@@ -207,7 +218,6 @@ export default {
} else { } else {
vm.oData.push({ ID, 이름, 휴대폰번호, 이메일, ID잠금, 오류내용: rVal.msg }); vm.oData.push({ ID, 이름, 휴대폰번호, 이메일, ID잠금, 오류내용: rVal.msg });
} }
} else { } else {
vm.oData.push({ ID, 이름, 휴대폰번호, 이메일, ID잠금, 오류내용: msg }); vm.oData.push({ ID, 이름, 휴대폰번호, 이메일, ID잠금, 오류내용: msg });
} }
@@ -244,19 +254,18 @@ export default {
} }
const strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]*$'; const strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]*$';
const regExp_g = new RegExp(strRegExp, 'g'); const regExp_g = new RegExp(strRegExp, 'g');
if(!(regExp_g.test(o.val))){ if (!regExp_g.test(o.val)) {
return { retVal: false, msg: `${o.name} 컬럼: 특수 문자 오류` }; return { retVal: false, msg: `${o.name} 컬럼: 특수 문자 오류` };
} }
} }
return { retVal: true, msg: '정상' }; return { retVal: true, msg: '정상' };
}, },
delFile(event) { delFile(event) {
console.log("del~~~~");
const file = event.target.files[0]; const file = event.target.files[0];
console.log(file.name); console.log(file.name);
//this.$refs.file.reset(); //this.$refs.file.reset();
this.$refs.file.value = null; this.$refs.file.value = null;
let element = document.getElementById("uploadFile"); let element = document.getElementById('uploadFile');
while (element.firstChild) { while (element.firstChild) {
element.removeChild(element.firstChild); element.removeChild(element.firstChild);
} }
@@ -269,32 +278,39 @@ export default {
try { try {
const response = await custMgtApi.insertMassUser(this.row); const response = await custMgtApi.insertMassUser(this.row);
//console.log(response);
const result = response.data; const result = response.data;
console.log(result); console.log(result);
if (result != null && result.retCode == "0000") { if (result != null && result.retCode == '0000') {
this.totalCnt = result.data.totalCnt;
this.successCnt = result.data.successCnt;
this.failCnt = result.data.failCnt;
// this.totalCnt = result.data.totalCnt; if(result.data.failCnt > 0){
// this.successCnt = result.data.successCnt; // 팝업으로 교체 예정
// this.failCnt = result.data.failCnt; var resultMsg = '파일 업로드 중 오류가 발생하여 정상건만 업로드 완료하였습니다.\n\n 총 '+result.data.totalCnt+'건, 정상 '+ result.data.successCnt+'건, 오류 '+result.data.failCnt+'건\n\n오류건은 확인 후 재등록 부탁 드립니다.';
// this.toComplete();/ alert(resultMsg);
this.excelPopClose();
this.$parent.memberDetail(this.adminId);
}else{
this.toComplete();
}
} }
} catch (error) { } catch (error) {
console.log(error); console.log(error);
this.row.title = '청약고객관리'; // 팝업으로 교체 예정
this.row.msg1 = '실패 하였습니다.'; var title ='청약고객 관리\n';
this.$refs.commmonModal.alertModalOpen(this.row); var msg1 = '실패 하였습니다.';
alert(title + msg1);
// this.row.title = '청약고객관리';
// this.row.msg1 = '실패 하였습니다.';
// this.$refs.commmonModal.alertModalOpen(this.row);
} }
// 오류건수. // 오류건수.
console.log(this.oData.length); console.log(this.oData.length);
}, },
},
} };
}
</script> </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

@@ -3,59 +3,6 @@
<div> <div>
<div class="dimmed memberUpdate" @click="memberUpdateModalClose();"></div> <div class="dimmed memberUpdate" @click="memberUpdateModalClose();"></div>
<div class="popup-wrap memberUpdate"> <div class="popup-wrap memberUpdate">
<!-- 수정 확인 -->
<!-- <div class="popup memberUpdate popup_form">-->
<!-- <div class="pop-head">-->
<!-- <h3 class="pop-tit">사용자 ID 수정</h3>-->
<!-- </div>-->
<!-- <form autocomplete="off">-->
<!-- <table>-->
<!-- <tbody>-->
<!-- <tr>-->
<!-- <th>관리자 ID</th>-->
<!-- <td>{{adminId}}</td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <th>ID</th>-->
<!-- <td>{{userId}}</td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <th>비밀번호</th>-->
<!-- <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>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <th>이름</th>-->
<!-- <td><input type="text" v-model.trim="userNm" ref="_userNm"></td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <th>휴대폰번호</th>-->
<!-- <td><input type="text" v-model.trim="mdn" ref="_phone"></td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <th>이메일</th>-->
<!-- <td><input type="email" v-model.trim="email" ref="_email"></td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <th class="center">상태</th>-->
<!-- <td>-->
<!-- <input type="radio" name="userStateUpdate" value="01" id="user_popup_update_radio1" v-model="userStat">-->
<!-- <label for="user_popup_update_radio1">사용</label>-->
<!-- <input type="radio" name="userStateUpdate" value="02" id="user_popup_update_radio2" v-model="userStat">-->
<!-- <label for="user_popup_update_radio2">정지</label>-->
<!-- </td>-->
<!-- </tr>-->
<!-- </tbody>-->
<!-- </table>-->
<!-- </form>-->
<!-- <div class="pop-btn2">-->
<!-- <button class="btn-pcolor" @click="memberUpdateConfirm();">저장</button>-->
<!-- <button class="btn-default" @click="memberUpdateModalClose();">취소</button>-->
<!-- </div>-->
<!-- </div>-->
<div class="popup modal32 popup_form memberUpdate"> <div class="popup modal32 popup_form memberUpdate">
<div class="pop-head"> <div class="pop-head">
<h3 class="pop-tit">사용자 ID 수정</h3> <h3 class="pop-tit">사용자 ID 수정</h3>
@@ -212,9 +159,9 @@ export default {
console.log(result); console.log(result);
this.row = {} this.row = {}
if (result != null && result.retCode == "0000") { if (result != null && result.retCode == "0000") {
this.row.title = '청약고객관리'; // this.row.title = '청약고객관리';
this.row.msg1 = '수정 완료하였습니다.'; // this.row.msg1 = '수정 완료하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); // this.$refs.commmonModal.alertModalOpen(this.row);
// this.memberUpdateModalClose(); // this.memberUpdateModalClose();
this.toComplete(); this.toComplete();

View File

@@ -170,6 +170,7 @@ export default {
this.adminId = targetAdminId; this.adminId = targetAdminId;
}, },
doValidate(){ doValidate(){
console.log(this.userTotalCnt)
if(this.userTotalCnt >= 100){ if(this.userTotalCnt >= 100){
// 사용자등록제한_최대100개까지 // 사용자등록제한_최대100개까지
this.$refs.validationConfirmPopModal.validationMaxlimitOpen(); this.$refs.validationConfirmPopModal.validationMaxlimitOpen();

View File

@@ -7,6 +7,7 @@
<div class="popup memoTotal popup_form b-popup"> <div class="popup memoTotal popup_form b-popup">
<div class="pop-head"> <div class="pop-head">
<h3 class="pop-tit">전체 메모보기</h3> <h3 class="pop-tit">전체 메모보기</h3>
<span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span>
</div> </div>
<table class="table-c"> <table class="table-c">
<custom-grid <custom-grid
@@ -79,13 +80,13 @@ export default {
memorow: {}, memorow: {},
totalItems: 0, totalItems: 0,
// 테이블 리스트 데이터 // 테이블 리스트 데이터
perPageCnt: 10, perPageCnt: 5,
userId: '', userId: '',
seqNo:'', seqNo:'',
grid: { grid: {
url: '/api/v1/bo/custMgt/allMemoList', url: '/api/v1/bo/custMgt/allMemoList',
pagePerRows: 10, pagePerRows: 5,
pagination: true, pagination: true,
isCheckbox: false, // true:첫번째 컬럼 앞에 체크박스 생성 / false:체크박스 제거 isCheckbox: false, // true:첫번째 컬럼 앞에 체크박스 생성 / false:체크박스 제거
initialRequest: false, initialRequest: false,
@@ -119,22 +120,40 @@ export default {
created(){ created(){
}, },
// mounted() {
// let pageMemo = 1;
// // 페이지 정보 및 검색 조건
// const getCondition_memo = this.$store.getters['searchcondition/getSearchCondition'];
// console.log('getCondition_memo : '+getCondition_memo);
//
// // store에 저장된 페이지 정보 및 검색 조건을 불러오기
// let isKeepMemo = false;
// if (getCondition_memo) {
// this.grid.pagePerRows = getCondition_memo.perPage;
// this.grid.params = getCondition_memo.params;
// pageMemo = getCondition_memo.page;
// isKeepMemo = true;
// }
//
// // this.search(isKeep);
// },
mounted() { mounted() {
let pageMemo = 1; // 달력 세팅
let page = 1;
// 페이지 정보 및 검색 조건 // 페이지 정보 및 검색 조건
const getCondition_memo = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
console.log('getCondition_memo : '+getCondition_memo); console.log('getCondition : '+getCondition);
// store에 저장된 페이지 정보 및 검색 조건을 불러오기 // store에 저장된 페이지 정보 및 검색 조건을 불러오기
let isKeepMemo = false; let isKeep = false;
if (getCondition_memo) { if (getCondition) {
this.grid.pagePerRows = getCondition_memo.perPage; this.grid.pagePerRows = getCondition.perPage;
this.grid.params = getCondition_memo.params; this.grid.params = getCondition.params;
pageMemo = getCondition_memo.page; page = getCondition.page;
isKeepMemo = true; isKeep = true;
} }
this.search(isKeep);
// this.search(isKeep);
}, },
methods :{ methods :{
search: function(isKeep) { search: function(isKeep) {
@@ -148,9 +167,7 @@ export default {
this.$store.commit('searchcondition/updateSearchCondition', { this.$store.commit('searchcondition/updateSearchCondition', {
page: getP_memo._currentPage, page: getP_memo._currentPage,
perPage: this.perPageCnt, perPage: this.perPageCnt,
params: { params: this.grid.params
userId : this.userId,
}
}); });
const getCondition_memo = this.$store.getters['searchcondition/getSearchCondition']; const getCondition_memo = this.$store.getters['searchcondition/getSearchCondition'];
@@ -169,11 +186,10 @@ export default {
dimmed[i].style.display = 'block'; dimmed[i].style.display = 'block';
} }
// 리스트 그리드 오픈
let page = 1; let page = 1;
// 페이지 정보 및 검색 조건 // 페이지 정보 및 검색 조건
const getCondition = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
console.log('getCondition : '+getCondition); console.log('momo getCondition : '+getCondition);
// store에 저장된 페이지 정보 및 검색 조건을 불러오기 // store에 저장된 페이지 정보 및 검색 조건을 불러오기
let isKeep = false; let isKeep = false;

View File

@@ -73,7 +73,7 @@
</div> </div>
<!-- 사용자 등록 - 최대 등록 제한 --> <!-- 사용자 등록 - 최대 등록 제한 -->
<div class="dimmed valication-maxlimit" @click="validationMaxlimitClose();"></div> <div class="dimmed validation-maxlimit" @click="validationMaxlimitClose();"></div>
<div class="popup-wrap validation-maxlimit"> <div class="popup-wrap validation-maxlimit">
<div class="popup validation-maxlimit"> <div class="popup validation-maxlimit">
<div class="pop-head"> <div class="pop-head">
@@ -82,7 +82,7 @@
<div class="pop-cont"> <div class="pop-cont">
<p>사용자는 최대 100개까지 등록 가능합니다.</p> <p>사용자는 최대 100개까지 등록 가능합니다.</p>
</div> </div>
<div class="pop-btn1"> <div class="popup-btn1">
<button class="btn-pcolor" @click="validationMaxlimitClose();">확인</button> <button class="btn-pcolor" @click="validationMaxlimitClose();">확인</button>
</div> </div>
</div> </div>
@@ -148,7 +148,7 @@
<div class="pop-cont"> <div class="pop-cont">
<p>변경된 내용을 저장하시겠습니까?</p> <p>변경된 내용을 저장하시겠습니까?</p>
</div> </div>
<div class="pop-btn2"> <div class="popup-btn2">
<button class="btn-pcolor" @click="confirmUpdateSub();">확인</button> <button class="btn-pcolor" @click="confirmUpdateSub();">확인</button>
<button class="btn-default" @click="confirmUpdateSubClose();">취소</button> <button class="btn-default" @click="confirmUpdateSubClose();">취소</button>
</div> </div>
@@ -327,11 +327,11 @@ export default {
}, },
// 최대 등록 제한 Open // 최대 등록 제한 Open
validationMaxlimitOpen(){ validationMaxlimitOpen(){
console.log("1231232323")
var dimmed = document.getElementsByClassName('validation-maxlimit'); var dimmed = document.getElementsByClassName('validation-maxlimit');
for(var i = 0; i < dimmed.length; i++){ for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'block'; dimmed[i].style.display = 'block';
} }
}, },
// 최대 등록 제한 Close // 최대 등록 제한 Close
validationMaxlimitClose(){ validationMaxlimitClose(){
@@ -340,7 +340,7 @@ export default {
dimmed[i].style.display = 'none'; dimmed[i].style.display = 'none';
} }
this.$parent.toComplete(); // this.$parent.toComplete();
}, },
// 휴대폰번호 형식 체크 Open // 휴대폰번호 형식 체크 Open

View File

@@ -95,7 +95,7 @@
<div class="count">사용자ID 정보 <div class="count">사용자ID 정보
<p>( 최대 100개까지 등록 가능 )</p> <p>( 최대 100개까지 등록 가능 )</p>
</div> </div>
<div class="button_group"> <div class="button_group" v-show="isActive">
<button type="button" class="button blue add" @click="memberInsertPopOpen();">사용자 ID 생성</button> <button type="button" class="button blue add" @click="memberInsertPopOpen();">사용자 ID 생성</button>
<button type="button" class="button blue add" @click="excelPopOpen();">사용자 ID 대량생성</button> <button type="button" class="button blue add" @click="excelPopOpen();">사용자 ID 대량생성</button>
<button type="button" class="button white del" @click="deleteMember();">삭제</button> <button type="button" class="button white del" @click="deleteMember();">삭제</button>
@@ -135,7 +135,8 @@
<input type="checkbox" id="user_id_status01" name="user_id_status" v-model="option.userStat" true-value='정상' false-value='사용중지' 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> <label class="toggle_switch" for="user_id_status01"></label>
</td> </td>
<td><button type="button" class="button white btn-a" @click="memberUpdatePopOpen(option.userId);">수정</button></td> <td v-if="isActive"><button type="button" class="button white btn-a" @click="memberUpdatePopOpen(option.userId);">수정</button></td>
<td v-else></td>
</tr> </tr>
<tr v-if="list.length === 0"> <tr v-if="list.length === 0">
<td colspan="7">등록된 사용자 정보가 없습니다.</td> <td colspan="7">등록된 사용자 정보가 없습니다.</td>
@@ -155,7 +156,7 @@
<member-modify-pop ref="memberModifyPop"> </member-modify-pop> <member-modify-pop ref="memberModifyPop"> </member-modify-pop>
<memo-total-pop ref="memoTatalListPop"> </memo-total-pop> <memo-total-pop ref="memoTatalListPop"> </memo-total-pop>
<common-modal ref="commmonModal"></common-modal> <common-modal ref="commmonModal"></common-modal>
<validation-confirm-pop ref="validationConfirmPopModal"> </validation-confirm-pop>
</div> </div>
</div> </div>
</template> </template>
@@ -167,6 +168,7 @@ import MemberRegPop from '../components/MemberRegPop';
import MemberModifyPop from '../components/MemberModifyPop'; import MemberModifyPop from '../components/MemberModifyPop';
import MemoTotalPop from '../components/MemoTotalPop'; import MemoTotalPop from '../components/MemoTotalPop';
import commonModal from "@/components/modal/commonModal"; import commonModal from "@/components/modal/commonModal";
import ValidationConfirmPop from "@/modules/custMgt/components/ValidationConfirmPop";
export default { export default {
name: 'memberAdminDetail', name: 'memberAdminDetail',
@@ -197,7 +199,8 @@ export default {
userTotalCnt:0, userTotalCnt:0,
selected: [], selected: [],
svcUserId:'', svcUserId:'',
ezSvcUserAuthKey:'' ezSvcUserAuthKey:'',
isActive:true,
} }
}, },
props: { props: {
@@ -212,6 +215,7 @@ export default {
MemberModifyPop, MemberModifyPop,
MemoTotalPop, MemoTotalPop,
commonModal, commonModal,
ValidationConfirmPop,
}, },
created(){ created(){
this.memberDetail(this.$route.params.serviceId); this.memberDetail(this.$route.params.serviceId);
@@ -273,6 +277,9 @@ export default {
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.lineType = result.data.lineType; this.lineType = result.data.lineType;
this.userStat = result.data.userStat; this.userStat = result.data.userStat;
if(this.userStat === '02'){
this.isActive = false;
}
this.lastLoginDt = result.data.lastLoginDt; this.lastLoginDt = result.data.lastLoginDt;
this.memo = result.data.memo; this.memo = result.data.memo;
this.mdn = result.data.mdn; this.mdn = result.data.mdn;
@@ -291,7 +298,7 @@ export default {
}, },
async updateAdminInfoTotal(){ async updateAdminInfoTotal(){
this.row = {}
this.row.userId = this.adminId; this.row.userId = this.adminId;
this.row.sendingLimit = this.sendingLimit; this.row.sendingLimit = this.sendingLimit;
this.row.lineType = this.lineType; this.row.lineType = this.lineType;
@@ -302,13 +309,14 @@ export default {
try { try {
const response = await custMgtApi.updateAdminInfoTotal(this.row); const response = await custMgtApi.updateAdminInfoTotal(this.row);
console.log(response)
const result = response.data; const result = response.data;
if (result != null && result.retCode == "0000") { if (result != null && result.retCode == "0000") {
this.row.title = '청약고객관리'; this.row.title = '청약고객관리';
this.row.msg1 = '저장 하였습니다.'; this.row.msg1 = '저장 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commmonModal.alertModalOpen(this.row);
this.memberDetail(this.row.userId);
}else if(result != null && result.retCode == "4019"){ }else if(result != null && result.retCode == "4019"){
this.row.title = '청약고객관리'; this.row.title = '청약고객관리';
this.row.msg1 = '발송한도금액이 정액한도금액보다 작습니다.'; this.row.msg1 = '발송한도금액이 정액한도금액보다 작습니다.';
@@ -331,6 +339,12 @@ export default {
this.$router.push({ name: 'memberList', params: this.row }); this.$router.push({ name: 'memberList', params: this.row });
}, },
excelPopOpen() { excelPopOpen() {
console.log("memberInsertPopOpen >> " + this.userTotalCnt)
if(this.userTotalCnt >= 100){
// 사용자등록제한_최대100개까지
this.$refs.validationConfirmPopModal.validationMaxlimitOpen();
return false;
}
console.log(this.adminId); console.log(this.adminId);
this.$refs.memberBulkRegPop.excelPopOpen(this.adminId, this.totalItems); this.$refs.memberBulkRegPop.excelPopOpen(this.adminId, this.totalItems);
}, },
@@ -340,6 +354,12 @@ export default {
this.$refs.memberModifyPop.memberUpdateModalOpen(this.row); this.$refs.memberModifyPop.memberUpdateModalOpen(this.row);
}, },
memberInsertPopOpen() { memberInsertPopOpen() {
console.log("memberInsertPopOpen >> " + this.userTotalCnt)
if(this.userTotalCnt >= 100){
// 사용자등록제한_최대100개까지
this.$refs.validationConfirmPopModal.validationMaxlimitOpen();
return false;
}
this.row.adminId = this.adminId; this.row.adminId = this.adminId;
this.row.userTotalCnt = this.userTotalCnt; this.row.userTotalCnt = this.userTotalCnt;
this.$refs.memberRegPop.memberInsertModalOpen(this.row); this.$refs.memberRegPop.memberInsertModalOpen(this.row);

View File

@@ -125,26 +125,21 @@ export default {
const rsp = response.data; const rsp = response.data;
console.log("RESULT_CODE : "+rsp.retCode); console.log("RESULT_CODE : "+rsp.retCode);
if(rsp.retCode == '0000') { if(rsp.retCode == '0000') {
// vm.chgChkUserId();
this.row.title = '비밀번호 변경'; this.row.title = '비밀번호 변경';
this.row.msg1 = '비밀번호가 정상적으로 변경되었습니다.'; this.row.msg1 = '비밀번호가 정상적으로 변경되었습니다.';
this.row.msg2 = '변경된 비밀번호로 다시 로그인 해주세요.'; this.row.msg2 = '변경된 비밀번호로 다시 로그인 해주세요.';
this.callFnc = 'login'
this.$refs.commonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
// if(vm.ModalOpen('modal16')){
// }
} else if(rsp.retCode == '4016') { } else if(rsp.retCode == '4016') {
this.row.title = '비밀번호 변경'; this.row.title = '비밀번호 변경';
this.row.msg1 = '비밀번호를 확인해주세요.'; this.row.msg1 = '비밀번호를 확인해주세요.';
this.$refs.commonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
// vm.ModalOpen('modal14')
} else if(rsp.retCode == '4017') { } else if(rsp.retCode == '4017') {
this.row.title = '비밀번호 오류'; this.row.title = '비밀번호 오류';
this.row.msg1 = '비밀번호를 사용할 수 없습니다.'; this.row.msg1 = '비밀번호를 사용할 수 없습니다.';
this.row.msg2 = '비밀번호는 영문/숫자/특수기호를 혼합하여'; this.row.msg2 = '비밀번호는 영문/숫자/특수기호를 혼합하여';
this.row.msg3 = '8~16자리로 설정해주세요.'; this.row.msg3 = '8~16자리로 설정해주세요.';
this.$refs.commonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
// vm.ModalOpen('modal15')
} else if(rsp.retCode == '4003') { } else if(rsp.retCode == '4003') {
this.row.title = '아이디 오류'; this.row.title = '아이디 오류';
this.row.msg1 = '등록되지 않은 아이디입니다.'; this.row.msg1 = '등록되지 않은 아이디입니다.';
@@ -159,39 +154,6 @@ export default {
this.$refs.commonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
return false; return false;
} }
// api.updatePassword(params).then(function(response) {
// var rsp = response.data;
// // var pofo = document.getElementById('oldPw');
//
// if(rsp.retCode == '0000') {
// // vm.chgChkUserId();
// this.row.title = '비밀번호 변경';
// this.row.msg1 = '비밀번호가 정상적으로 변경되었습니다.';
// this.row.msg2 = '변경된 비밀번호로 다시 로그인 해주세요.';
// this.$refs.commonModal.alertModalOpen(this.row);
// // if(vm.ModalOpen('modal16')){
// vm.$router.push({ path: '/login' });
// // }
// } else if(rsp.retCode == '4016') {
// this.row.title = '비밀번호 변경';
// this.row.msg1 = '비밀번호를 확인해주세요.';
// this.$refs.commonModal.alertModalOpen(this.row);
// // vm.ModalOpen('modal14')
// } else if(rsp.retCode == '4017') {
// this.row.title = '비밀번호 오류';
// this.row.msg1 = '비밀번호를 사용할 수 없습니다.';
// this.row.msg2 = '비밀번호는 영문/숫자/특수기호를 혼합하여';
// this.row.msg3 = '8~16자리로 설정해주세요.';
// this.$refs.commonModal.alertModalOpen(this.row);
// // vm.ModalOpen('modal15')
// } else if(rsp.retCode == '4003') {
// this.row.title = '아이디 오류';
// this.row.msg1 = '등록되지 않은 아이디입니다.';
// this.row.msg1 = '아이디를 다시 확인하세요';
// this.$refs.commonModal.alertModalOpen(this.row);
//
// }
// });
} }
}, },
@@ -213,7 +175,11 @@ export default {
this.$refs.LoginPopup.ModalOpen(target); this.$refs.LoginPopup.ModalOpen(target);
this.$refs.oldPw.focus(target); this.$refs.oldPw.focus(target);
}, },
alertCalbackFnc(callFnc){
if(callFnc === 'login'){
this.$router.push({ name: 'login',params: {}});
}
},
} }
} }
</script> </script>

View File

@@ -53,7 +53,7 @@
</div> </div>
</form> </form>
<div class="info"> <div class="info">
<div class="count"> <span>{{ totalItems }}</span> <div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span>
<div class="select_box NumberSe"> <div class="select_box NumberSe">
<select name="" id="" v-model="perPageCnt" @change="changePerPage()"> <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>

View File

@@ -120,6 +120,9 @@ export default {
props: ['sendData'], props: ['sendData'],
created(){ created(){
// this.formReset(); // this.formReset();
},
destroyed() {
}, },
methods :{ methods :{
// 모달 띄우기 // 모달 띄우기
@@ -142,6 +145,7 @@ export default {
console.log(props) console.log(props)
this.row.regReqNo = props.regReqNo this.row.regReqNo = props.regReqNo
this.row.sndrno = props.sndrno this.row.sndrno = props.sndrno
this.row.seqNo = props.seqNo
const response = await sendNumMgtApi.numberDetail(this.row); const response = await sendNumMgtApi.numberDetail(this.row);
const result = response.data; const result = response.data;
console.log(result); console.log(result);
@@ -177,6 +181,8 @@ export default {
var popup = document.getElementsByClassName('modal53'); var popup = document.getElementsByClassName('modal53');
popup[0].style.display = 'none'; popup[0].style.display = 'none';
this.formReset();
}, },
formReset(){ formReset(){
Object.assign(this.$data, this.$options.data()); Object.assign(this.$data, this.$options.data());

View File

@@ -39,7 +39,7 @@
</div> </div>
</form> </form>
<div class="info"> <div class="info">
<div class="count"> <span>{{ totalItems }}</span> <div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span>
<div class="select_box NumberSe"> <div class="select_box NumberSe">
<select name="" id="" v-model="perPageCnt" @keyup.enter="search"> <select name="" id="" v-model="perPageCnt" @keyup.enter="search">
<option value="20">20</option> <option value="20">20</option>

View File

@@ -58,7 +58,7 @@
</div> </div>
</form> </form>
<div class="info"> <div class="info">
<div class="count"> <span>{{ totalItems }}</span> <div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span>
<div class="select_box NumberSe"> <div class="select_box NumberSe">
<select name="" id="perPage" v-model="perPageCnt" @keyup.enter="search"> <select name="" id="perPage" v-model="perPageCnt" @keyup.enter="search">
<option value="20">20</option> <option value="20">20</option>
@@ -69,7 +69,7 @@
</div> </div>
<div class="button_group"> <div class="button_group">
<button type="button" class="button blue add" @click="numberRegPopOpen();">등록</button> <button type="button" class="button blue add" @click="numberRegPopOpen();">등록</button>
<button type="button" class="button white del" @click="numberDelete">삭제</button> <button type="button" class="button white del" @click="deleteNumber()">삭제</button>
</div> </div>
</div> </div>
<div class="table"> <div class="table">
@@ -272,27 +272,31 @@ export default {
commonModalOpen(row){ commonModalOpen(row){
this.$refs.commmonModal.alertModalOpen(row); this.$refs.commmonModal.alertModalOpen(row);
}, },
deleteNumber(){
if(this.doValidate()){
this.row.title ='문자발신번호 관리';
this.row.msg1 ='삭제 하시겠습니까?'
this.$refs.commmonModal.confirmModalOpen2(this.row);
}
},
async numberDelete(){ async numberDelete(){
if(this.doValidate() && window.confirm('삭제 하시겠습니까?')){
try { try {
let response = await sendNumMgtApi.deleteNumber(this.row); let response = await sendNumMgtApi.deleteNumber(this.row);
const result = response.data; const result = response.data;
if (result != null && result.retCode == "0000") { if (result != null && result.retCode == "0000") {
this.row.title = '문자발신번호 관리';
this.row.msg1 = '삭제 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.table.reloadData(); this.$refs.table.reloadData();
return; return;
} } else {
this.row.title = '문자발신번호 관리'; this.row.title = '문자발신번호 관리';
this.row.msg1 = '실패 하였습니다.'; this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commmonModal.alertModalOpen(this.row);
}
} catch(err) { } catch(err) {
this.row.title = '문자발신번호 관리'; this.row.title = '문자발신번호 관리';
this.row.msg1 = '실패 하였습니다.'; this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commmonModal.alertModalOpen(this.row);
} }
}
}, },
doValidate(){ //로우데이터 삭제하도록 수정 doValidate(){ //로우데이터 삭제하도록 수정
@@ -310,15 +314,19 @@ export default {
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commmonModal.alertModalOpen(this.row);
return false; return false;
} }
// for(var i = 0; i < chkList.length; i++){ //const param = chkList.map((row)=>({regReqNo:row.regReqNo} ));
// alert(chkList[i].adminId); const param = chkList.map((row)=>({seqNo:row.seqNo} ));
// }
const param = chkList.map((row)=>({regReqNo:row.regReqNo} ));
console.log(param) console.log(param)
this.row.list = param; this.row.list = param;
console.log(this.row); console.log(this.row);
return true; return true;
}, },
confirmCalbackFnc(props){
console.log(props)
if(props.result){
this.numberDelete();
}
},
}, },
// beforeRouteLeave(to, from, next) { // beforeRouteLeave(to, from, next) {
// //

View File

@@ -34,7 +34,7 @@
</div> </div>
</form> </form>
<div class="info"> <div class="info">
<div class="count"> <span> {{ totalItems}} </span> <div class="count"> <span> {{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')}} </span>
<div class="select_box NumberSe"> <div class="select_box NumberSe">
<select name="" id="perpage" v-model="grid.pagePerRows" @keyup.enter="search"> <select name="" id="perpage" v-model="grid.pagePerRows" @keyup.enter="search">
<option value="20">20</option> <option value="20">20</option>
@@ -142,7 +142,7 @@ export default {
destroyed() { destroyed() {
this.$store.commit('searchcondition/updateSearchCondition', { this.$store.commit('searchcondition/updateSearchCondition', {
page: 1, page: 1,
perPage: 20, perPage: 50,
params: { params: {
searchType1: '', searchType1: '',
searchType2: '', searchType2: '',

View File

@@ -240,7 +240,7 @@ export default {
}, },
created(){ created(){
this.setPeriodDay(0); this.setPeriodDay(0);
this.getExcelHeader();
}, },
destroyed() { destroyed() {
this.grid.params.custNm=''; this.grid.params.custNm='';
@@ -406,7 +406,7 @@ export default {
}, },
getExcelHeader() { getExcelHeader() {
// 헤더를 mockup으로 관리한다. // 헤더를 mockup으로 관리한다.
custMgtApi.getExcelHeader(this.pageType).then(res => { statsApi.getExcelHeader(this.pageType).then(res => {
this.excelHeader = res; this.excelHeader = res;
}); });
}, },

View File

@@ -380,7 +380,7 @@ export default {
}, },
getExcelHeader() { getExcelHeader() {
// 헤더를 mockup으로 관리한다. // 헤더를 mockup으로 관리한다.
custMgtApi.getExcelHeader(this.pageType).then(res => { statsApi.getExcelHeader(this.pageType).then(res => {
this.excelHeader = res; this.excelHeader = res;
}); });
}, },

View File

@@ -144,6 +144,7 @@ export default {
row: {}, row: {},
list:[], list:[],
totalCnt: '', totalCnt: '',
pageType:'MONTH'
}; };
}, },
components: { components: {
@@ -153,6 +154,7 @@ export default {
created(){ created(){
this.setPeriodDay(0); this.setPeriodDay(0);
this.getMonthList(); this.getMonthList();
this.getExcelHeader();
}, },
destroyed() { destroyed() {
}, },
@@ -264,6 +266,7 @@ export default {
header: this.excelHeader, header: this.excelHeader,
dataOrder: 'header' dataOrder: 'header'
}; };
// console.log(data); // console.log(data);
xlsx.export(this.list, saveFileName, options).then(() => {}); xlsx.export(this.list, saveFileName, options).then(() => {});
}, },

View File

@@ -6,9 +6,9 @@
<!-- 관리자/유치채널 상세정보 --> <!-- 관리자/유치채널 상세정보 -->
<div class="popup modal21 popup_form"> <div class="popup modal21 popup_form">
<div class="pop-head"> <div class="pop-head">
<h3 class="pop-tit" v-if="code === null || code === ''">관리자 상세정보</h3> <h3 class="pop-tit">관리자 상세정보</h3>
<h3 class="pop-tit" v-else>유치채널 상세정보</h3>
</div> </div>
<form autocomplete="off">
<table> <table>
<tbody> <tbody>
<tr> <tr>
@@ -37,7 +37,7 @@
</tr> </tr>
<tr> <tr>
<th>권한</th> <th>권한</th>
<td v-if="code === null || code === ''"> <td v-if="auth === '1001'">
<div v:class="select_box"> <div v:class="select_box">
<select name="" id="right" v-model="auth" ref="_auth"> <select name="" id="right" v-model="auth" ref="_auth">
<option value="">선택</option> <option value="">선택</option>
@@ -64,13 +64,15 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
<div class="pop-btn2"> </form>
<button class="btn-default" @click="adminDetailModalClose();">취소</button> <div class="popup-btn2">
<button class="btn-pcolor" @click="doInsert">저장</button> <button class="btn-pcolor" @click="doInsert">저장</button>
<button class="btn-default" @click="adminDetailModalClose();">취소</button>
</div> </div>
</div> </div>
<!-- 관리자 상세정보 팝업 --> <!-- 관리자 상세정보 팝업 -->
</div> </div>
<common-modal ref="commmonModal"></common-modal>
</div> </div>
</template> </template>
@@ -80,6 +82,8 @@ import api from '@/service/api';
import sysMgtApi from "../service/sysMgtApi.js"; import sysMgtApi from "../service/sysMgtApi.js";
import { utils_mixin, chkPattern2 } from '../service/mixins'; import { utils_mixin, chkPattern2 } from '../service/mixins';
import lodash from "lodash"; import lodash from "lodash";
import commonModal from "../components/commonModal";
import SearchIdPopup from "@/modules/sysMgt/components/SearchIdPopup";
export default { export default {
name: "adminDetailPop", name: "adminDetailPop",
@@ -115,22 +119,34 @@ export default {
//this.formReset(); //this.formReset();
this.setAuthData(); this.setAuthData();
this.formReset(); this.formReset();
},
components: {
commonModal,
}, },
methods :{ methods :{
doPwdValidate(){ doPwdValidate(){
if(this.isNull(this.userPwd2)){ if(this.isNull(this.userPwd2)){
alert("비밀번호 확인을 입력해 주세요."); // alert("비밀번호 확인을 입력해 주세요.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호를 입력해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._pwd2.focus(); this.$refs._pwd2.focus();
return false; return false;
} }
if(!lodash.isEqual(this.userPwd1, this.userPwd2)){ if(!lodash.isEqual(this.userPwd1, this.userPwd2)){
alert("비밀번호가 일치하지 않습니다."); // alert("비밀번호가 일치하지 않습니다.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호가 일치하지 않습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._pwd2.focus(); this.$refs._pwd2.focus();
return false; return false;
} }
const pwdLen = this.bytes(this.userPwd1); const pwdLen = this.bytes(this.userPwd1);
if(!(pwdLen >= 8 && pwdLen <= 16)){ if(!(pwdLen >= 8 && pwdLen <= 16)){
alert("비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다."); // alert("비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._pwd1.focus(); this.$refs._pwd1.focus();
return false; return false;
} }
@@ -138,9 +154,12 @@ export default {
const pNum = /[0-9]/g; // 숫자 const pNum = /[0-9]/g; // 숫자
const pSpc = /[!@$%^&*]/g; // 특수문자 const pSpc = /[!@$%^&*]/g; // 특수문자
if(!(pEng.test(this.userPwd1) && pNum.test(this.userPwd1) && pSpc.test(this.userPwd1))) { if(!(pEng.test(this.userPwd1) && pNum.test(this.userPwd1) && pSpc.test(this.userPwd1))) {
alert("비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다."); // alert("비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._pwd1.focus(); this.$refs._pwd1.focus();
return; return false;
} }
this.row.adminPw=this.userPwd1; this.row.adminPw=this.userPwd1;
return true; return true;
@@ -166,6 +185,8 @@ export default {
}, },
// 모달 띄우기 // 모달 띄우기
async adminDetailModalOpen(props){ async adminDetailModalOpen(props){
this.formReset();
this.setAuthData();
this.row.adminId = props.adminId; this.row.adminId = props.adminId;
try { try {
const response = await sysMgtApi.adminDetail(this.row); const response = await sysMgtApi.adminDetail(this.row);
@@ -180,7 +201,10 @@ export default {
this.stat = result.data.stat; this.stat = result.data.stat;
} }
} catch(err) { } catch(err) {
alert("실패 하였습니다."); // alert("실패 하였습니다.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
} }
var dimmed = document.getElementsByClassName('modal21'); var dimmed = document.getElementsByClassName('modal21');
for(var i = 0; i < dimmed.length; i++){ for(var i = 0; i < dimmed.length; i++){
@@ -205,11 +229,14 @@ export default {
const response = await sysMgtApi.updateAdmin(this.row); const response = await sysMgtApi.updateAdmin(this.row);
const result = response.data; const result = response.data;
if (result != null && result.retCode == "0000") { if (result != null && result.retCode == "0000") {
alert('저장 하였습니다.'); // alert('저장 하였습니다.');
this.toComplete(); this.toComplete();
} }
} catch(err) { } catch(err) {
alert("실패 하였습니다."); alert("실패 하였습니다.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
} }
} }
}, },
@@ -227,8 +254,3 @@ export default {
} }
} }
</script> </script>
<style>
.popup-btn-wrap {width: 500px; margin: auto; padding: 100px 0;}
.popup-btn-wrap button {width: 100%; margin-bottom: 10px; height: 50px; border-radius: 5px; box-shadow: none; border: 1px solid #000; }
.popup-btn-wrap button:hover {background: #000; color: #fff;}
</style>

View File

@@ -1,8 +1,8 @@
<template> <template>
<!-- <div class="wrap bg-wrap"> --> <!-- <div class="wrap bg-wrap"> -->
<div> <div>
<div class="dimmed" @click="ModalClose();"></div> <div class="dimmed modal20" @click="ModalClose();"></div>
<div class="popup-wrap"> <div class="popup-wrap modal20">
<!-- 관리자/유치채널 등록 --> <!-- 관리자/유치채널 등록 -->
<div class="popup modal20 popup_form"> <div class="popup modal20 popup_form">
<div class="pop-head"> <div class="pop-head">
@@ -254,9 +254,10 @@ export default {
async searchMadangId(){ async searchMadangId(){
if(!this.madangId){ if(!this.madangId){
this.row.title = '관리자/유치채널 관리'; // this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '마당ID를 입력해주세요.'; // this.row.msg1 = '마당ID를 입력해주세요.';
this.$refs.commmonModal.alertModalOpen(this.row); // this.$refs.commmonModal.alertModalOpen(this.row);
// this.$refs.searchIdPopModal.searchIdModalOpen();
this.$refs.madangId.focus(); this.$refs.madangId.focus();
return false; return false;
} }
@@ -281,32 +282,32 @@ export default {
this.idCheck = true; this.idCheck = true;
this.$refs._pwd1.focus(); this.$refs._pwd1.focus();
return false;
}else if(result.retCode == '1004'){ }else if(result.retCode == '1004'){
//alert('마당ID 정보가 없습니다.'); //alert('마당ID 정보가 없습니다.');
this.row.title = '관리자/유치채널 관리'; // this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '마당ID 정보가 없습니다.'; // this.row.msg1 = '마당ID 정보가 없습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); // this.$refs.commmonModal.alertModalOpen(this.row);
// this.searchIdFailPop(); this.searchIdFailPop();
this.idCheck = false; this.idCheck = false;
this.$refs.madangId.focus(); this.$refs.madangId.focus();
return false; return false;
}else { }else {
//alert('마당ID 조회에 실패하였습니다.'); //alert('마당ID 조회에 실패하였습니다.');
this.row.title = '관리자/유치채널 관리'; // this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '마당ID 정보가 없습니다.'; // this.row.msg1 = '마당ID 정보가 없습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); // this.$refs.commmonModal.alertModalOpen(this.row);
// this.searchIdFailPop(); this.searchIdFailPop();
this.idCheck = false; this.idCheck = false;
this.$refs.madangId.focus(); this.$refs.madangId.focus();
return false; return false;
} }
} catch(err) { } catch(err) {
//alert("실패 하였습니다."); //alert("실패 하였습니다.");
this.row.title = '관리자/유치채널 관리'; // this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '마당ID 정보가 없습니다.'; // this.row.msg1 = '마당ID 정보가 없습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); // this.$refs.commmonModal.alertModalOpen(this.row);
// this.searchIdFailPop(); this.searchIdFailPop();
this.idCheck = false; this.idCheck = false;
this.$refs.madangId.focus(); this.$refs.madangId.focus();
return false; return false;
@@ -337,22 +338,18 @@ export default {
ModalOpen(insertType){ ModalOpen(insertType){
this.formReset(); this.formReset();
this.insertType=insertType; this.insertType=insertType;
var dimmed = document.getElementsByClassName('dimmed'); var dimmed = document.getElementsByClassName('modal20');
dimmed[0].style.display = 'block'; for(var i = 0; i < dimmed.length; i++){
var wrap = document.getElementsByClassName('popup-wrap'); dimmed[i].style.display = 'block';
wrap[0].style.display = 'block'; }
var obj = document.getElementsByClassName('modal20');
obj[0].style.display = 'block';
this.setAuthData(); this.setAuthData();
}, },
// 모달 끄기 // 모달 끄기
ModalClose(){ ModalClose(){
var dimmed = document.getElementsByClassName('dimmed'); var dimmed = document.getElementsByClassName('modal20');
dimmed[0].style.display = 'none'; for(var i = 0; i < dimmed.length; i++){
var wrap = document.getElementsByClassName('popup-wrap'); dimmed[i].style.display = 'none';
wrap[0].style.display = 'none'; }
var popup = document.getElementsByClassName('modal20');
popup[0].style.display = 'none';
}, },
// 저장 후 부모창 호출. // 저장 후 부모창 호출.

View File

@@ -12,9 +12,9 @@
<h3 class="pop-tit">ID 조회</h3> <h3 class="pop-tit">ID 조회</h3>
</div> </div>
<div class="pop-cont"> <div class="pop-cont">
<p>입력하신 마당ID를 조회할 없습니다</p> <p>입력하신 마당ID를 조회할 없습니다.</p>
</div> </div>
<div class="pop-btn1"> <div class="popup-btn1">
<button class="btn-pcolor" @click="searchIdFailModalClose();">확인</button> <button class="btn-pcolor" @click="searchIdFailModalClose();">확인</button>
</div> </div>
</div> </div>

View File

@@ -37,7 +37,7 @@
</div> </div>
</form> </form>
<div class="info"> <div class="info">
<div class="count"> <span>{{ totalItems }}</span></div> <div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</span></div>
<div class="button_group"> <div class="button_group">
<button type="button" class="button blue admin add" @click="adminRegPopOpen();">관리자 등록</button> <button type="button" class="button blue admin add" @click="adminRegPopOpen();">관리자 등록</button>
<button type="button" class="button blue channel add" @click="adminReg2PopOpen();">유치채널 등록</button> <button type="button" class="button blue channel add" @click="adminReg2PopOpen();">유치채널 등록</button>

View File

@@ -34,6 +34,8 @@ public interface CustMgtMapper {
int selectMemberDetailListTotalCnt(MemberAdminDetailReqDto memberDetailListReqDto); int selectMemberDetailListTotalCnt(MemberAdminDetailReqDto memberDetailListReqDto);
/** 사용자 아이디 목록 조회.*/ /** 사용자 아이디 목록 조회.*/
List<MemberDetail> selectMemberDetailList(MemberAdminDetailReqDto memberDetailListReqDto); List<MemberDetail> selectMemberDetailList(MemberAdminDetailReqDto memberDetailListReqDto);
int selectMemoListTotalCnt(AllMemoListReqDto allMemoListReqDto);
/** 사용자 메모 목록 조회.*/ /** 사용자 메모 목록 조회.*/
List<AllMemoList> selectMemoList(AllMemoListReqDto allMemoListReqDto); List<AllMemoList> selectMemoList(AllMemoListReqDto allMemoListReqDto);
/** 사용자 유무 확인.*/ /** 사용자 유무 확인.*/

View File

@@ -5,6 +5,7 @@ import kr.co.uplus.ez.common.components.HubeasyApiComponents;
import kr.co.uplus.ez.common.data.*; import kr.co.uplus.ez.common.data.*;
import kr.co.uplus.ez.common.utils.EncryptionUtil; import kr.co.uplus.ez.common.utils.EncryptionUtil;
import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.SqlSessionTemplate;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -452,14 +453,38 @@ public class CustMgtService {
CustMgtMapper custMgtMapper = sqlSessionSlave.getMapper(CustMgtMapper.class); CustMgtMapper custMgtMapper = sqlSessionSlave.getMapper(CustMgtMapper.class);
List<AllMemoList> allMemoLists = custMgtMapper.selectMemoList(allMemoListReqDto); String nowPage = String.valueOf(allMemoListReqDto.getPage());
int totalCnt = custMgtMapper.selectMemoListTotalCnt(allMemoListReqDto);
// 조회 결과 없음. if (totalCnt == 0) {
if (allMemoLists == null) {
return new AllMemoListResDto(ApiResponseCode.CM_NOT_FOUND); AllMemoListRes allMemoListRes = new AllMemoListRes();
allMemoListRes.setList(new ArrayList<>());
Paging paging = new Paging();
paging.setPage(nowPage);
paging.setTotalCnt(String.valueOf(totalCnt));
allMemoListRes.setPaging(paging);
return new AllMemoListResDto(ApiResponseCode.CM_NOT_FOUND, allMemoListRes);
} }
return new AllMemoListResDto(new AllMemoListRes(allMemoLists)); int page = allMemoListReqDto.getPage();
int pagePerRows = allMemoListReqDto.getPagePerRows();
page = (page - 1) * pagePerRows;
allMemoListReqDto.setPage(page);
List<AllMemoList> allMemoLists = custMgtMapper.selectMemoList(allMemoListReqDto);
AllMemoListRes allMemoListRes = new AllMemoListRes();
allMemoListRes.setList(allMemoLists);
Paging paging = new Paging();
paging.setPage(nowPage);
paging.setTotalCnt(String.valueOf(totalCnt));
allMemoListRes.setPaging(paging);
return new AllMemoListResDto(ApiResponseCode.SUCCESS, allMemoListRes);
} }
/** /**
@@ -788,7 +813,7 @@ public class CustMgtService {
// 3. 발송 한도 update // 3. 발송 한도 update
if(updateAdminInfoTotalReqDto.getSendingLimit() != null) { if(updateAdminInfoTotalReqDto.getSendingLimit() != null) {
BigDecimal sendingLimitAmt = new BigDecimal(updateAdminInfoTotalReqDto.getSendingLimit()); BigDecimal sendingLimitAmt = new BigDecimal(StringUtils.remove(updateAdminInfoTotalReqDto.getSendingLimit(), ","));
paramMap.put("userId", updateAdminInfoTotalReqDto.getUserId()); paramMap.put("userId", updateAdminInfoTotalReqDto.getUserId());
// 3-1. 기존 정액한도금액 조회 // 3-1. 기존 정액한도금액 조회

View File

@@ -1,12 +1,11 @@
package kr.co.uplus.ez.api.custMgt.dto; package kr.co.uplus.ez.api.custMgt.dto;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Data @Data
public class AllMemoListReqDto implements Serializable { public class AllMemoListReqDto implements Serializable {
@@ -15,4 +14,11 @@ public class AllMemoListReqDto implements Serializable {
@ApiModelProperty(example = "사용자 ID", name = "사용자 ID", dataType = "String") @ApiModelProperty(example = "사용자 ID", name = "사용자 ID", dataType = "String")
private String userId; private String userId;
@NotNull
@ApiModelProperty(example = "페이지당 조회할 목록 수",notes = "페이지당 조회할 목록 수", name = "페이지당 조회할 목록 수", dataType = "int")
private int pagePerRows;
@NotNull
@ApiModelProperty(example = "현재 페이지", name = "현재 페이지", dataType = "int")
private int page;
} }

View File

@@ -1,16 +1,22 @@
package kr.co.uplus.ez.api.custMgt.dto; package kr.co.uplus.ez.api.custMgt.dto;
import kr.co.uplus.ez.common.data.Paging;
import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
import lombok.Data;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Data @Data
public class AllMemoListRes implements Serializable{ public class AllMemoListRes implements Serializable{
private Paging paging;
private List<AllMemoList> list; private List<AllMemoList> list;
public AllMemoListRes(){
super();
}
public AllMemoListRes(List<AllMemoList> list) { public AllMemoListRes(List<AllMemoList> list) {
super(); super();
this.list = list; this.list = list;

View File

@@ -244,6 +244,7 @@ public class LoginService {
authUser.setTmpPwdYn(Const.COMM_YES); authUser.setTmpPwdYn(Const.COMM_YES);
authUser.setPwd(EncryptionUtil.getCustomSHA512(resetPasswordReqDto.getUserId(), randomPw)); authUser.setPwd(EncryptionUtil.getCustomSHA512(resetPasswordReqDto.getUserId(), randomPw));
authUser.setPwdChgDt(Const.COMM_YES); authUser.setPwdChgDt(Const.COMM_YES);
authUser.setAuthchrFailCnt(0);
int reslut = loginMapper.updateAdmUser(authUser); int reslut = loginMapper.updateAdmUser(authUser);
@@ -294,6 +295,7 @@ public class LoginService {
authUser.setOprtrId(updatePasswordReqDto.getUserId()); authUser.setOprtrId(updatePasswordReqDto.getUserId());
authUser.setPwd(newPw); authUser.setPwd(newPw);
authUser.setPwdChgDt(Const.COMM_YES); authUser.setPwdChgDt(Const.COMM_YES);
authUser.setAuthchrFailCnt(0);
int reslut = loginMapper.updateAdmUser(authUser); int reslut = loginMapper.updateAdmUser(authUser);

View File

@@ -9,7 +9,9 @@ import java.io.Serializable;
@Data @Data
public class DeleteNumber implements Serializable{ public class DeleteNumber implements Serializable{
@ApiModelProperty(example = "등록번호", name = "등록번호", dataType = "String") // @ApiModelProperty(example = "등록번호", name = "등록번호", dataType = "String")
private String regReqNo; // private String regReqNo;
@ApiModelProperty(example = "발신일련번호", name = "발신일련번호", dataType = "String")
private String seqNo;
} }

View File

@@ -15,4 +15,7 @@ public class DetailNumberReqDto implements Serializable{
@ApiModelProperty(example = "발신번호", name = "발신번호", dataType = "String") @ApiModelProperty(example = "발신번호", name = "발신번호", dataType = "String")
private String sndrno; private String sndrno;
@ApiModelProperty(example = "발신일련번호", name = "발신일련번호", dataType = "String")
private String seqNo;
} }

View File

@@ -33,5 +33,7 @@ public class SendNumberInfo implements Serializable{
private String regDt; private String regDt;
@ApiModelProperty(example = "발신번호등록번호", name = "발신번호등록번호", dataType = "String") @ApiModelProperty(example = "발신번호등록번호", name = "발신번호등록번호", dataType = "String")
private String regReqNo; private String regReqNo;
@ApiModelProperty(example = "발신일련번호", name = "발신일련번호", dataType = "String")
private String seqNo;
} }

View File

@@ -114,10 +114,10 @@
</select> </select>
<sql id="subsListCondition"> <sql id="subsListCondition">
<if test="startDt != null and startDt != ''"> <if test="startDt != null and startDt != ''">
AND esi.SUBS_DT <![CDATA[ >= ]]> STR_TO_DATE(REPLACE( #{startDt}, '-', '' ), '%Y%m%d') AND esi.SUBS_DT <![CDATA[ >= ]]> STR_TO_DATE(concat(REPLACE(#{startDt}, '-', '' ),'000000') , '%Y%m%d%H%i%s')
</if> </if>
<if test="endDt != null and endDt != ''"> <if test="endDt != null and endDt != ''">
AND esi.SUBS_DT <![CDATA[ <= ]]> STR_TO_DATE(REPLACE( #{endDt}, '-', '' ), '%Y%m%d') AND esi.SUBS_DT <![CDATA[ <= ]]> STR_TO_DATE(concat(REPLACE(#{endDt}, '-', '' ),'235959'), '%Y%m%d%H%i%s')
</if> </if>
<if test="searchType1 != null and searchType1 != ''"> <if test="searchType1 != null and searchType1 != ''">
AND esu.USER_STTUS_CD = #{searchType1} AND esu.USER_STTUS_CD = #{searchType1}
@@ -432,10 +432,10 @@
<sql id="svcUserListCondition"> <sql id="svcUserListCondition">
<if test="startDt != null and startDt != ''"> <if test="startDt != null and startDt != ''">
AND esu.REG_DT <![CDATA[ >= ]]> STR_TO_DATE(REPLACE( #{startDt}, '-', '' ), '%Y%m%d') AND esu.REG_DT <![CDATA[ >= ]]> STR_TO_DATE(concat(REPLACE(#{startDt}, '-', '' ),'000000') , '%Y%m%d%H%i%s')
</if> </if>
<if test="endDt != null and endDt != ''"> <if test="endDt != null and endDt != ''">
AND esu.REG_DT <![CDATA[ <= ]]> STR_TO_DATE(REPLACE( #{endDt}, '-', '' ), '%Y%m%d') AND esu.REG_DT <![CDATA[ <= ]]> STR_TO_DATE(concat(REPLACE(#{endDt}, '-', '' ),'235959'), '%Y%m%d%H%i%s')
</if> </if>
<if test="searchType1 != null and searchType1 != ''"> <if test="searchType1 != null and searchType1 != ''">
AND esu.USER_STTUS_CD = #{searchType1} AND esu.USER_STTUS_CD = #{searchType1}
@@ -539,6 +539,18 @@
( SELECT @ROWNUM := 0 ) AS R ( SELECT @ROWNUM := 0 ) AS R
</select> </select>
<select id="selectMemoListTotalCnt" parameterType="kr.co.uplus.ez.api.custMgt.dto.AllMemoListReqDto" resultType="int">
/* custMgt-mapper.xml(selectMemoList) */
SELECT
COUNT(*)
FROM
hubez_common.EZ_USER_MEMO EUM
INNER JOIN hubez_common.EZ_SVC_USER ESU
ON EUM.USER_SEQ = ESU.USER_SEQ
WHERE
ESU.USER_ID = #{userId}
</select>
<select id="selectMemoList" parameterType="kr.co.uplus.ez.api.custMgt.dto.AllMemoListReqDto" resultType="kr.co.uplus.ez.api.custMgt.dto.AllMemoList"> <select id="selectMemoList" parameterType="kr.co.uplus.ez.api.custMgt.dto.AllMemoListReqDto" resultType="kr.co.uplus.ez.api.custMgt.dto.AllMemoList">
/* custMgt-mapper.xml(selectMemoList) */ /* custMgt-mapper.xml(selectMemoList) */
SELECT SELECT
@@ -553,6 +565,7 @@
WHERE WHERE
ESU.USER_ID = #{userId} ESU.USER_ID = #{userId}
ORDER BY EUM.REG_DT DESC ORDER BY EUM.REG_DT DESC
LIMIT #{page}, #{pagePerRows}
</select> </select>
<select id="selectCustInfoCount" parameterType="String" resultType="int"> <select id="selectCustInfoCount" parameterType="String" resultType="int">

View File

@@ -100,6 +100,9 @@
INNER JOIN hubez_common.EZ_SNDRNO_REG esr INNER JOIN hubez_common.EZ_SNDRNO_REG esr
ON ON
esr.USER_SEQ = esu.USER_SEQ esr.USER_SEQ = esu.USER_SEQ
INNER JOIN hubez_common.EZ_SVC_SNDRNO ess
ON
esr.REG_REQ_NO = ess.REG_REQ_NO
WHERE 1=1 WHERE 1=1
<include refid="numberListCondition"></include> <include refid="numberListCondition"></include>
</select> </select>
@@ -118,30 +121,29 @@
(SELECT esu2.USER_ID FROM hubez_common.EZ_SVC_USER esu2 WHERE esu2.USER_SEQ = esu.PRNTS_USER_SEQ)AS ADMIN_ID, (SELECT esu2.USER_ID FROM hubez_common.EZ_SVC_USER esu2 WHERE esu2.USER_SEQ = esu.PRNTS_USER_SEQ)AS ADMIN_ID,
esr.REG_ID AS register, esr.REG_ID AS register,
eci.BIZRNO AS bRegNo, eci.BIZRNO AS bRegNo,
(SELECT ( (SELECT
SELECT
ecd.DTL_CD_NM ecd.DTL_CD_NM
FROM FROM
hubez_common.EZ_CD_DTL ecd hubez_common.EZ_CD_DTL ecd
WHERE WHERE
ecd.GRP_CD = 'NMINEE_DIV_CD' ecd.GRP_CD = 'NMINEE_DIV_CD'
AND ecd.DTL_CD = ess.NMINEE_DIV_CD) FROM hubez_common.EZ_SVC_SNDRNO ess WHERE ess.REG_REQ_NO = esr.REG_REQ_NO LIMIT 1) AS NMINEE_DIV_CD, AND ecd.DTL_CD = ess.NMINEE_DIV_CD) AS NMINEE_DIV_CD,
(SELECT (SELECT (SELECT
ecd.DTL_CD_NM ecd.DTL_CD_NM
FROM FROM
hubez_common.EZ_CD_DTL ecd hubez_common.EZ_CD_DTL ecd
WHERE WHERE
ecd.GRP_CD = 'INCH_DIV_CD' ecd.GRP_CD = 'INCH_DIV_CD'
AND ecd.DTL_CD = ess.INCH_DIV_CD) FROM hubez_common.EZ_SVC_SNDRNO ess WHERE ess.REG_REQ_NO = esr.REG_REQ_NO LIMIT 1) AS INCH_DIV_CD, AND ecd.DTL_CD = ess.INCH_DIV_CD) AS INCH_DIV_CD,
( (SELECT
SELECT
ecd.DTL_CD_NM ecd.DTL_CD_NM
FROM FROM
hubez_common.EZ_CD_DTL ecd hubez_common.EZ_CD_DTL ecd
WHERE WHERE
ecd.GRP_CD = 'SNDRNO_REQ_STTUS_CD' ecd.GRP_CD = 'SNDRNO_REQ_STTUS_CD'
AND ecd.DTL_CD = esr.REQ_STTUS_CD) AS sttusCd, AND ecd.DTL_CD = esr.REQ_STTUS_CD) AS sttusCd,
(SELECT ess.SNDRNO FROM hubez_common.EZ_SVC_SNDRNO ess WHERE ess.REG_REQ_NO = esr.REG_REQ_NO LIMIT 1) AS SNDRNO, ess.SNDRNO AS SNDRNO,
ess.SEQ_NO,
DATE_FORMAT(esr.REG_DT, '%Y-%m-%d') AS REG_DT DATE_FORMAT(esr.REG_DT, '%Y-%m-%d') AS REG_DT
FROM FROM
hubez_common.EZ_CUST_INFO eci hubez_common.EZ_CUST_INFO eci
@@ -151,6 +153,9 @@
INNER JOIN hubez_common.EZ_SNDRNO_REG esr INNER JOIN hubez_common.EZ_SNDRNO_REG esr
ON ON
esr.USER_SEQ = esu.USER_SEQ esr.USER_SEQ = esu.USER_SEQ
INNER JOIN hubez_common.EZ_SVC_SNDRNO ess
ON
esr.REG_REQ_NO = ess.REG_REQ_NO
WHERE 1=1 WHERE 1=1
<include refid="numberListCondition"></include> <include refid="numberListCondition"></include>
ORDER BY eci.BIZRNO ORDER BY eci.BIZRNO
@@ -228,20 +233,12 @@
/* sendNumMgt-mapper.xml(deleteNumber) */ /* sendNumMgt-mapper.xml(deleteNumber) */
DELETE DELETE
FROM FROM
esr hubez_common.EZ_SVC_SNDRNO
, esd
USING hubez_common.EZ_SNDRNO_REG AS esr
INNER JOIN hubez_common.EZ_SNDRNO_DOC AS esd
ON
esr.REG_REQ_NO = esd.REG_REQ_NO
INNER JOIN hubez_common.EZ_SVC_SNDRNO AS ess
ON
esr.REG_REQ_NO = ess.REG_REQ_NO
<where> <where>
esr.REG_REQ_NO IN SEQ_NO IN
<foreach collection="list" item="item" index="i" open="(" <foreach collection="list" item="item" index="i" open="("
separator="," close=")"> separator="," close=")">
#{item.regReqNo} #{item.seqNo}
</foreach> </foreach>
</where> </where>
</delete> </delete>
@@ -451,10 +448,9 @@
esu.USER_SEQ = esr.USER_SEQ esu.USER_SEQ = esr.USER_SEQ
INNER JOIN hubez_common.EZ_SVC_SNDRNO ess INNER JOIN hubez_common.EZ_SVC_SNDRNO ess
ON ON
eci.CUST_SEQ = ess.CUST_SEQ esr.REG_REQ_NO = ess.REG_REQ_NO
WHERE 1 = 1 WHERE 1 = 1
AND ess.SNDRNO = #{sndrno} AND ess.SEQ_NO = #{seqNo}
AND esr.REG_REQ_NO = #{regReqNo}
</select> </select>
<select id="selectAuthFileList" parameterType="kr.co.uplus.ez.api.sendNumMgt.dto.DetailNumberReqDto" resultType="kr.co.uplus.ez.api.sendNumMgt.dto.AuthFileInfo"> <select id="selectAuthFileList" parameterType="kr.co.uplus.ez.api.sendNumMgt.dto.DetailNumberReqDto" resultType="kr.co.uplus.ez.api.sendNumMgt.dto.AuthFileInfo">