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

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;
}
.popup.b-popup tr:nth-child(1) .memo:nth-child(1){
.popup.b-popup tr:nth-child(n) .memo:nth-child(n){
height: 100px;
display: block;
overflow: auto;

View File

@@ -1,4 +1,5 @@
<template>
<div>
<header>
<h1 class="logo"><a href="javascript:void(0)">uplus 메시지허브이지<span>BACKOFFICE</span></a></h1>
<div class="user_wrap">
@@ -12,12 +13,15 @@
</div>
</div>
</header>
<logout-modal ref="logoutModal"></logout-modal>
</div>
</template>
<script>
//import tokenSvc from '@/common/token-service';
import { mapGetters } from 'vuex';
import loginApi from '@/modules/login/service/api';
import logoutModal from "./logoutModal";
export default {
name: "hubWebHeader",
@@ -27,6 +31,7 @@ export default {
isLogin: false,
isErrPage: false,
navActive: false,
}
},
created() {
@@ -59,6 +64,9 @@ export default {
}
},
},
components: {
logoutModal,
},
methods: {
userInfoToggle(){
var click = "clicked";
@@ -71,19 +79,22 @@ export default {
}
},
logout(){
let result = confirm("로그아웃 하시겠습니까?");
if (result) {
loginApi.logout().then(response => {
if(response.data.retCode == '0000'){
//commonModal
this.$refs.logoutModal.logoutModalOpen();
// tokenSvc.removeToken();
this.$router.push({
path: "/login"
});
}
});
}
// let result = confirm("로그아웃 하시겠습니까?");
// if (result) {
// loginApi.logout().then(response => {
// 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>
<!-- <div class="wrap bg-wrap"> -->
<div>
<div class="dimmed modal33" @click="excelPopClose();"></div>
<div class="dimmed modal33" @click="excelPopClose()"></div>
<div class="popup-wrap modal33">
<div class="popup modal33 popup_form">
<div class="pop-head">
@@ -17,7 +17,13 @@
<th>사용자 ID 업로드</th>
<td>
<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="button btn-p2color" @click="$refs.file.click()">파일 업로드</button>
</div>
@@ -38,15 +44,15 @@
<script>
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 xlsx from '@/common/excel';
import moment from 'moment';
import XLSX from 'xlsx';
import commonModal from "@/components/modal/commonModal";
import commonModal from './commonModal';
export default {
name: "memberBulkRegPop",
name: 'memberBulkRegPop',
mixins: [utils_mixin, chkPattern2],
data() {
return {
@@ -54,12 +60,12 @@ export default {
excelHeader: [],
pageType: 'SAMPLE',
adminId: '',
varList : ["이름","휴대폰번호","기타1","기타2","기타3","기타4"],
varList2 : ["이름","기타1","기타2","기타3","기타4"],
varList: ['이름', '휴대폰번호', '기타1', '기타2', '기타3', '기타4'],
varList2: ['이름', '기타1', '기타2', '기타3', '기타4'],
nData: [],
oData: [],
totalItems: 0,
}
};
},
components: {
commonModal,
@@ -72,7 +78,7 @@ export default {
excelPopOpen(adminId, totalItems) {
this.adminId = adminId;
this.totalItems = totalItems;
console.log(totalItems)
console.log(totalItems);
var excelPop = document.getElementsByClassName('modal33');
for (var i = 0; i < excelPop.length; i++) {
excelPop[i].style.display = 'block';
@@ -85,19 +91,27 @@ export default {
for (var i = 0; i < excelPop.length; i++) {
excelPop[i].style.display = 'none';
}
// this.$refs.file.reset()
let element = document.getElementById('uploadFile');
while (element.firstChild) {
element.removeChild(element.firstChild);
}
},
// 저장 후 부모창 호출.
toComplete() {
this.getParent('custList').$refs.table.reloadData();
this.row.serviceId = this.adminId;
// 팝업으로 교체 예정
if (confirm('정상 업로드 되었습니다.')){
this.excelPopClose();
this.$parent.memberDetail(this.adminId);
}
},
async doInsert() {
if (this.doValidate() && window.confirm('등록 하시겠습니까?')) {
try {
const response = await custMgtApi.insertTestId(this.row);
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);
@@ -116,20 +130,19 @@ export default {
let options = {
header: this.excelHeader,
dataOrder: 'header'
dataOrder: 'header',
};
xlsx.export([], saveFileName, options).then(() => {});
},
getExcelHeader() {
// 헤더를 mockup으로 관리한다.
custMgtApi.getExcelHeader(this.pageType).then(res => {
custMgtApi.getExcelHeader(this.pageType).then((res) => {
this.excelHeader = res;
});
},
readFile(event) {
this.nData = []
this.oData = []
this.nData = [];
this.oData = [];
const file = event.target.files[0];
console.log(file.name);
@@ -140,13 +153,12 @@ export default {
text.innerText = file.name;
button.addEventListener('click', () => {
this.delFile(event);
})
});
button.innerText = 'X';
const root = document.getElementById('uploadFile');
root.appendChild(text);
root.appendChild(button);
let reader = new FileReader();
let tmpResult = {};
const vm = this;
@@ -154,16 +166,13 @@ export default {
this.row.title = '청약고객관리';
this.row.msg1 = '파일을 읽는 동안 에러가 발생 했습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
}
reader.onloadend = (e) => {
}
};
reader.onloadend = (e) => {};
reader.onload = (e) => {
let data = reader.result;
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 });
tmpResult = rowObj;
const limitCnt = 100;
@@ -197,8 +206,10 @@ export default {
let { retVal, msg } = vm.validXlxs({ ID, 이름, 휴대폰번호, 이메일, ID잠금 });
if (retVal) {
const pVal = [{ name:'이름',val:이름, len:20,},
{ name:'ID잠금',val:ID잠금, len:4,},];
const pVal = [
{ name: '이름', val: 이름, len: 20 },
{ name: 'ID잠금', val: ID잠금, len: 4 },
];
const rVal = vm.isTitle(pVal);
@@ -207,7 +218,6 @@ export default {
} else {
vm.oData.push({ ID, 이름, 휴대폰번호, 이메일, ID잠금, 오류내용: rVal.msg });
}
} else {
vm.oData.push({ ID, 이름, 휴대폰번호, 이메일, ID잠금, 오류내용: msg });
}
@@ -244,19 +254,18 @@ export default {
}
const strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]*$';
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: true, msg: '정상' };
},
delFile(event) {
console.log("del~~~~");
const file = event.target.files[0];
console.log(file.name);
//this.$refs.file.reset();
this.$refs.file.value = null;
let element = document.getElementById("uploadFile");
let element = document.getElementById('uploadFile');
while (element.firstChild) {
element.removeChild(element.firstChild);
}
@@ -269,32 +278,39 @@ export default {
try {
const response = await custMgtApi.insertMassUser(this.row);
//console.log(response);
const result = response.data;
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;
// this.successCnt = result.data.successCnt;
// this.failCnt = result.data.failCnt;
// this.toComplete();/
if(result.data.failCnt > 0){
// 팝업으로 교체 예정
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();
}
}
} catch (error) {
console.log(error);
this.row.title = '청약고객관리';
this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
// 팝업으로 교체 예정
var title ='청약고객 관리\n';
var msg1 = '실패 하였습니다.';
alert(title + msg1);
// this.row.title = '청약고객관리';
// this.row.msg1 = '실패 하였습니다.';
// this.$refs.commmonModal.alertModalOpen(this.row);
}
// 오류건수.
console.log(this.oData.length);
},
}
}
},
};
</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 class="dimmed memberUpdate" @click="memberUpdateModalClose();"></div>
<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="pop-head">
<h3 class="pop-tit">사용자 ID 수정</h3>
@@ -212,9 +159,9 @@ export default {
console.log(result);
this.row = {}
if (result != null && result.retCode == "0000") {
this.row.title = '청약고객관리';
this.row.msg1 = '수정 완료하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
// this.row.title = '청약고객관리';
// this.row.msg1 = '수정 완료하였습니다.';
// this.$refs.commmonModal.alertModalOpen(this.row);
// this.memberUpdateModalClose();
this.toComplete();

View File

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

View File

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

View File

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

View File

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

View File

@@ -125,26 +125,21 @@ export default {
const rsp = response.data;
console.log("RESULT_CODE : "+rsp.retCode);
if(rsp.retCode == '0000') {
// vm.chgChkUserId();
this.row.title = '비밀번호 변경';
this.row.msg1 = '비밀번호가 정상적으로 변경되었습니다.';
this.row.msg2 = '변경된 비밀번호로 다시 로그인 해주세요.';
this.callFnc = 'login'
this.$refs.commonModal.alertModalOpen(this.row);
// if(vm.ModalOpen('modal16')){
// }
} 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 = '등록되지 않은 아이디입니다.';
@@ -159,39 +154,6 @@ export default {
this.$refs.commonModal.alertModalOpen(this.row);
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.oldPw.focus(target);
},
alertCalbackFnc(callFnc){
if(callFnc === 'login'){
this.$router.push({ name: 'login',params: {}});
}
},
}
}
</script>

View File

@@ -53,7 +53,7 @@
</div>
</form>
<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">
<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>

View File

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

View File

@@ -39,7 +39,7 @@
</div>
</form>
<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">
<select name="" id="" v-model="perPageCnt" @keyup.enter="search">
<option value="20">20</option>

View File

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

View File

@@ -34,7 +34,7 @@
</div>
</form>
<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">
<select name="" id="perpage" v-model="grid.pagePerRows" @keyup.enter="search">
<option value="20">20</option>
@@ -142,7 +142,7 @@ export default {
destroyed() {
this.$store.commit('searchcondition/updateSearchCondition', {
page: 1,
perPage: 20,
perPage: 50,
params: {
searchType1: '',
searchType2: '',

View File

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

View File

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

View File

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

View File

@@ -6,9 +6,9 @@
<!-- 관리자/유치채널 상세정보 -->
<div class="popup modal21 popup_form">
<div class="pop-head">
<h3 class="pop-tit" v-if="code === null || code === ''">관리자 상세정보</h3>
<h3 class="pop-tit" v-else>유치채널 상세정보</h3>
<h3 class="pop-tit">관리자 상세정보</h3>
</div>
<form autocomplete="off">
<table>
<tbody>
<tr>
@@ -37,7 +37,7 @@
</tr>
<tr>
<th>권한</th>
<td v-if="code === null || code === ''">
<td v-if="auth === '1001'">
<div v:class="select_box">
<select name="" id="right" v-model="auth" ref="_auth">
<option value="">선택</option>
@@ -64,13 +64,15 @@
</tr>
</tbody>
</table>
<div class="pop-btn2">
<button class="btn-default" @click="adminDetailModalClose();">취소</button>
</form>
<div class="popup-btn2">
<button class="btn-pcolor" @click="doInsert">저장</button>
<button class="btn-default" @click="adminDetailModalClose();">취소</button>
</div>
</div>
<!-- 관리자 상세정보 팝업 -->
</div>
<common-modal ref="commmonModal"></common-modal>
</div>
</template>
@@ -80,6 +82,8 @@ 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 SearchIdPopup from "@/modules/sysMgt/components/SearchIdPopup";
export default {
name: "adminDetailPop",
@@ -115,22 +119,34 @@ export default {
//this.formReset();
this.setAuthData();
this.formReset();
},
components: {
commonModal,
},
methods :{
doPwdValidate(){
if(this.isNull(this.userPwd2)){
alert("비밀번호 확인을 입력해 주세요.");
// alert("비밀번호 확인을 입력해 주세요.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '비밀번호를 입력해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._pwd2.focus();
return false;
}
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();
return false;
}
const pwdLen = this.bytes(this.userPwd1);
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();
return false;
}
@@ -138,9 +154,12 @@ export default {
const pNum = /[0-9]/g; // 숫자
const pSpc = /[!@$%^&*]/g; // 특수문자
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();
return;
return false;
}
this.row.adminPw=this.userPwd1;
return true;
@@ -166,6 +185,8 @@ export default {
},
// 모달 띄우기
async adminDetailModalOpen(props){
this.formReset();
this.setAuthData();
this.row.adminId = props.adminId;
try {
const response = await sysMgtApi.adminDetail(this.row);
@@ -180,7 +201,10 @@ export default {
this.stat = result.data.stat;
}
} catch(err) {
alert("실패 하였습니다.");
// alert("실패 하였습니다.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
}
var dimmed = document.getElementsByClassName('modal21');
for(var i = 0; i < dimmed.length; i++){
@@ -205,11 +229,14 @@ export default {
const response = await sysMgtApi.updateAdmin(this.row);
const result = response.data;
if (result != null && result.retCode == "0000") {
alert('저장 하였습니다.');
// alert('저장 하였습니다.');
this.toComplete();
}
} catch(err) {
alert("실패 하였습니다.");
this.row.title = '관리자/유치채널 관리';
this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
}
}
},
@@ -227,8 +254,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

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

View File

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

View File

@@ -37,7 +37,7 @@
</div>
</form>
<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">
<button type="button" class="button blue admin add" @click="adminRegPopOpen();">관리자 등록</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);
/** 사용자 아이디 목록 조회.*/
List<MemberDetail> selectMemberDetailList(MemberAdminDetailReqDto memberDetailListReqDto);
int selectMemoListTotalCnt(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.utils.EncryptionUtil;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.spring.SqlSessionTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -452,14 +453,38 @@ public class CustMgtService {
CustMgtMapper custMgtMapper = sqlSessionSlave.getMapper(CustMgtMapper.class);
List<AllMemoList> allMemoLists = custMgtMapper.selectMemoList(allMemoListReqDto);
String nowPage = String.valueOf(allMemoListReqDto.getPage());
int totalCnt = custMgtMapper.selectMemoListTotalCnt(allMemoListReqDto);
// 조회 결과 없음.
if (allMemoLists == null) {
return new AllMemoListResDto(ApiResponseCode.CM_NOT_FOUND);
if (totalCnt == 0) {
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
if(updateAdminInfoTotalReqDto.getSendingLimit() != null) {
BigDecimal sendingLimitAmt = new BigDecimal(updateAdminInfoTotalReqDto.getSendingLimit());
BigDecimal sendingLimitAmt = new BigDecimal(StringUtils.remove(updateAdminInfoTotalReqDto.getSendingLimit(), ","));
paramMap.put("userId", updateAdminInfoTotalReqDto.getUserId());
// 3-1. 기존 정액한도금액 조회

View File

@@ -1,12 +1,11 @@
package kr.co.uplus.ez.api.custMgt.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 AllMemoListReqDto implements Serializable {
@@ -15,4 +14,11 @@ public class AllMemoListReqDto implements Serializable {
@ApiModelProperty(example = "사용자 ID", name = "사용자 ID", dataType = "String")
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;
import kr.co.uplus.ez.common.data.Paging;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
@SuppressWarnings("serial")
@Data
public class AllMemoListRes implements Serializable{
private Paging paging;
private List<AllMemoList> list;
public AllMemoListRes(){
super();
}
public AllMemoListRes(List<AllMemoList> list) {
super();
this.list = list;

View File

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

View File

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

View File

@@ -114,10 +114,10 @@
</select>
<sql id="subsListCondition">
<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 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 test="searchType1 != null and searchType1 != ''">
AND esu.USER_STTUS_CD = #{searchType1}
@@ -432,10 +432,10 @@
<sql id="svcUserListCondition">
<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 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 test="searchType1 != null and searchType1 != ''">
AND esu.USER_STTUS_CD = #{searchType1}
@@ -539,6 +539,18 @@
( SELECT @ROWNUM := 0 ) AS R
</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">
/* custMgt-mapper.xml(selectMemoList) */
SELECT
@@ -553,6 +565,7 @@
WHERE
ESU.USER_ID = #{userId}
ORDER BY EUM.REG_DT DESC
LIMIT #{page}, #{pagePerRows}
</select>
<select id="selectCustInfoCount" parameterType="String" resultType="int">

View File

@@ -100,6 +100,9 @@
INNER JOIN hubez_common.EZ_SNDRNO_REG esr
ON
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
<include refid="numberListCondition"></include>
</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,
esr.REG_ID AS register,
eci.BIZRNO AS bRegNo,
(SELECT (
SELECT
(SELECT
ecd.DTL_CD_NM
FROM
hubez_common.EZ_CD_DTL ecd
WHERE
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,
(SELECT (SELECT
AND ecd.DTL_CD = ess.NMINEE_DIV_CD) AS NMINEE_DIV_CD,
(SELECT
ecd.DTL_CD_NM
FROM
hubez_common.EZ_CD_DTL ecd
WHERE
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,
(
SELECT
AND ecd.DTL_CD = ess.INCH_DIV_CD) AS INCH_DIV_CD,
(SELECT
ecd.DTL_CD_NM
FROM
hubez_common.EZ_CD_DTL ecd
WHERE
ecd.GRP_CD = 'SNDRNO_REQ_STTUS_CD'
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
FROM
hubez_common.EZ_CUST_INFO eci
@@ -151,6 +153,9 @@
INNER JOIN hubez_common.EZ_SNDRNO_REG esr
ON
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
<include refid="numberListCondition"></include>
ORDER BY eci.BIZRNO
@@ -228,20 +233,12 @@
/* sendNumMgt-mapper.xml(deleteNumber) */
DELETE
FROM
esr
, 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
hubez_common.EZ_SVC_SNDRNO
<where>
esr.REG_REQ_NO IN
SEQ_NO IN
<foreach collection="list" item="item" index="i" open="("
separator="," close=")">
#{item.regReqNo}
#{item.seqNo}
</foreach>
</where>
</delete>
@@ -451,10 +448,9 @@
esu.USER_SEQ = esr.USER_SEQ
INNER JOIN hubez_common.EZ_SVC_SNDRNO ess
ON
eci.CUST_SEQ = ess.CUST_SEQ
esr.REG_REQ_NO = ess.REG_REQ_NO
WHERE 1 = 1
AND ess.SNDRNO = #{sndrno}
AND esr.REG_REQ_NO = #{regReqNo}
AND ess.SEQ_NO = #{seqNo}
</select>
<select id="selectAuthFileList" parameterType="kr.co.uplus.ez.api.sendNumMgt.dto.DetailNumberReqDto" resultType="kr.co.uplus.ez.api.sendNumMgt.dto.AuthFileInfo">