로그인 관련 / 메뉴 링크 추가 / 홈페이지 로그인 적용

This commit is contained in:
kimre
2022-07-08 14:07:33 +09:00
parent 3d05b45299
commit b2ff509948
73 changed files with 1251 additions and 668 deletions

View File

@@ -1,4 +1,6 @@
NODE_ENV = "dev" NODE_ENV = "development"
BASE_URL: "/" BASE_URL: "/"
VUE_APP_TARGET_URL=https://console.ums-dev.uplus.co.kr/ VUE_APP_TARGET_URL=http://localhost:7071
VUE_APP_PORT=3000 VUE_APP_PORT=7070
VUE_APP_HOME_PAGE_URL=https://mhez-dev.uplus.co.kr/auth/bo
VUE_APP_AUTHKEY=bohubez!@#$%

6
frontend/.env.live Normal file
View File

@@ -0,0 +1,6 @@
NODE_ENV = "production"
BASE_URL: "/"
VUE_APP_TARGET_URL=http://localhost:7070
VUE_APP_PORT=7070
VUE_APP_HOME_PAGE_URL=https://mhez.uplus.co.kr/auth/bo
VUE_APP_AUTHKEY=bohubez!@#$%

6
frontend/.env.local Normal file
View File

@@ -0,0 +1,6 @@
NODE_ENV = "development"
BASE_URL: "/"
VUE_APP_TARGET_URL=http://localhost:7070
VUE_APP_PORT=7070
VUE_APP_HOME_PAGE_URL=https://mhez-dev.uplus.co.kr/auth/bo
VUE_APP_AUTHKEY=bohubez!@#$%

6
frontend/.env.stg Normal file
View File

@@ -0,0 +1,6 @@
NODE_ENV = "dev"
BASE_URL: "/"
VUE_APP_TARGET_URL=http://localhost:7070
VUE_APP_PORT=7070
VUE_APP_HOME_PAGE_URL=https://mhez-dev.uplus.co.kr
VUE_APP_AUTHKEY=bohubez!@#$%

View File

@@ -7,7 +7,11 @@
"serve": "vue-cli-service serve --port 3000", "serve": "vue-cli-service serve --port 3000",
"build": "vue-cli-service build", "build": "vue-cli-service build",
"lint": "vue-cli-service lint", "lint": "vue-cli-service lint",
"test:unit": "vue-cli-service test:unit" "test:unit": "vue-cli-service test:unit",
"local": "vue-cli-service serve --port 3000 --mode local",
"dev": "vue-cli-service serve --port 3000 --mode dev",
"stg": "vue-cli-service serve --port 3000 --mode stg",
"live": "vue-cli-service serve --port 3000 --mode live"
}, },
"dependencies": { "dependencies": {
"@toast-ui/vue-grid": "2.1.0", "@toast-ui/vue-grid": "2.1.0",
@@ -27,6 +31,7 @@
"vue-tiny-slider": "^0.1.35", "vue-tiny-slider": "^0.1.35",
"vuejs-daum-postcode": "^1.0.4", "vuejs-daum-postcode": "^1.0.4",
"vuex": "^3.0.1", "vuex": "^3.0.1",
"vuex-persistedstate": "^4.1.0",
"xlsx": "^0.15.3" "xlsx": "^0.15.3"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -3,11 +3,11 @@
<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">
<div class="user" @click="userInfoToggle();"> <div class="user" @click="userInfoToggle();">
<p>슈퍼관리자</p> <p>{{ this.$store.getters['login/userNm'] }}</p>
<a href="javascript:void(0)" class="btn_user">Uplus01</a> <a href="javascript:void(0)" class="btn_user">{{ this.$store.getters['login/userId'] }}</a>
</div> </div>
<div class="user_info"> <div class="user_info">
<a href="superadmin_info.html" class="modify">정보수정</a> <a href="javascript:void(0)" class="modify">정보수정</a>
<a href="javascript:void(0)" class="logout" @click="logout();">로그아웃</a> <a href="javascript:void(0)" class="logout" @click="logout();">로그아웃</a>
</div> </div>
</div> </div>
@@ -30,12 +30,13 @@ export default {
} }
}, },
created() { created() {
// console.log(this.$store["login/isLogin"])
// this.$store.getters.getCounter
}, },
computed: { computed: {
...mapGetters({ ...mapGetters({
getLogin: 'login/isLogin', getLogin: 'login/isLogin',
getErrorPage: 'login/isErrorPage', getErrorPage: 'login/isErrorPage'
}), }),
}, },
watch: { watch: {
@@ -75,7 +76,7 @@ export default {
loginApi.logout().then(response => { loginApi.logout().then(response => {
if(response.data.retCode == '0000'){ if(response.data.retCode == '0000'){
//tokenSvc.removeToken(); // tokenSvc.removeToken();
this.$router.push({ this.$router.push({
path: "/login" path: "/login"

View File

@@ -277,8 +277,8 @@ export default {
} }
</script> </script>
<style> <!--<style>-->
.popup-btn-wrap {width: 500px; margin: auto; padding: 100px 0;} <!--.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 {width: 100%; margin-bottom: 10px; height: 50px; border-radius: 5px; box-shadow: none; border: 1px solid #000; }-->
.popup-btn-wrap button:hover {background: #000; color: #fff;} <!--.popup-btn-wrap button:hover {background: #000; color: #fff;}-->
</style> <!--</style>-->

View File

@@ -4,7 +4,7 @@
<!-- 선택한 메뉴 li.is-current --> <!-- 선택한 메뉴 li.is-current -->
<li v-for="child in menuList" :key="child.menuNo" :class="child.classNm"> <li v-for="child in menuList" :key="child.menuNo" :class="child.classNm">
<div class="menu_btn" ></div> <div class="menu_btn" ></div>
<a class="menu_target" @click="actionMenu" :data-menu-no="child.menuNo">{{child.menuNm}}</a> <a href="javascript:void(0);" class="menu_target" @click="actionMenu" :data-menu-no="child.menuNo">{{child.menuNm}}</a>
<div class="sub_menu_wrap"> <div class="sub_menu_wrap">
<ul class="sub_menu" v-if="child.children.length > 0"> <ul class="sub_menu" v-if="child.children.length > 0">
<li v-for="child2 in child.children" :key="child2.menuNo"> <li v-for="child2 in child.children" :key="child2.menuNo">
@@ -115,11 +115,11 @@ export default {
//this.$store.commit("login/isAuthChk", true); //this.$store.commit("login/isAuthChk", true);
} else { } else {
window.top.location.href = '/'; window.top.location.href = '/';
this.isLogin = false; // this.isLogin = false;
this.menuList = null; this.menuList = null;
} }
}).catch(rsponse => { }).catch(rsponse => {
this.isLogin = false; // this.isLogin = false;
this.menuList = null; this.menuList = null;
}) })
}, },

View File

@@ -254,8 +254,6 @@ export default {
vuejsDatepicker, vuejsDatepicker,
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.setPeriodDay(0); this.setPeriodDay(0);
this.gridParamSet(); this.gridParamSet();
}, },

View File

@@ -225,8 +225,6 @@ export default {
commonModal, commonModal,
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
const getCondition = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
this.getExcelHeader(); this.getExcelHeader();
}, },

View File

@@ -27,10 +27,10 @@
<tbody> <tbody>
<tr v-for="(option, i) in list" v-bind:key="i"> <tr v-for="(option, i) in list" v-bind:key="i">
<td>{{ option.lmtYm }}</td> <td>{{ option.lmtYm }}</td>
<td>{{ option.startAmount }}</td> <td>{{ option.startAmount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</td>
<td>{{ option.useAmount }}</td> <td>{{ option.useAmount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</td>
<td>{{ option.krrrAmount }}</td> <td>{{ option.krrrAmount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</td>
<td>{{ option.extshAmount }}</td> <td>{{ option.extshAmount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</td>
</tr> </tr>
<tr v-if="list.length === 0"> <tr v-if="list.length === 0">
<td colspan="5">검색 결과가 없습니다.</td> <td colspan="5">검색 결과가 없습니다.</td>

View File

@@ -19,14 +19,6 @@
<th>ID</th> <th>ID</th>
<td><input type="text" v-model.trim="userId" ref="_userId"></td> <td><input type="text" v-model.trim="userId" ref="_userId"></td>
</tr> </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> <tr>
<th>이름</th> <th>이름</th>
<td><input type="text" v-model.trim="userNm" ref="_userNm"></td> <td><input type="text" v-model.trim="userNm" ref="_userNm"></td>
@@ -104,8 +96,6 @@ export default {
stat: "", stat: "",
userId:"", userId:"",
userNm:"", userNm:"",
userPwd1:"",
userPwd2:"",
code:"", code:"",
userTotalCnt:0, userTotalCnt:0,
} }
@@ -133,7 +123,6 @@ export default {
async memberInsert(){ async memberInsert(){
this.row.adminId = this.adminId; this.row.adminId = this.adminId;
this.row.userId = this.userId; this.row.userId = this.userId;
this.row.userPw = this.userPwd1;
this.row.userNm = this.userNm; this.row.userNm = this.userNm;
this.row.userEmail = this.email; this.row.userEmail = this.email;
this.row.mdn = this.mdn; this.row.mdn = this.mdn;
@@ -185,43 +174,6 @@ export default {
// Object.assign(this.$data, this.$options.data()); // Object.assign(this.$data, this.$options.data());
// this.adminId = targetAdminId; // this.adminId = targetAdminId;
// }, // },
doPwdValidate(){
if(this.isNull(this.userPwd2)){
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)){
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)){
this.row.title = '청약고객관리';
this.row.msg1 = '비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._pwd1.focus();
return false;
}
const pEng = /[A-Za-z]/g; // 영문자
const pNum = /[0-9]/g; // 숫자
const pSpc = /[!@$%^&*]/g; // 특수문자
if(!(pEng.test(this.userPwd1) && pNum.test(this.userPwd1) && pSpc.test(this.userPwd1))) {
this.row.title = '청약고객관리';
this.row.msg1 = '비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._pwd1.focus();
return false;
}
return true;
},
doValidate(){ doValidate(){
if(this.userTotalCnt >= 100){ if(this.userTotalCnt >= 100){
// 사용자등록제한_최대100개까지 // 사용자등록제한_최대100개까지
@@ -237,28 +189,6 @@ export default {
return false; return false;
} }
if(this.isNull(this.userPwd1)){
this.row.title = '청약고객관리';
this.row.msg1 = '비밀번호를 입력해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.__pwd1.focus();
return false;
}
if(this.isNull(this.userPwd2)){
this.row.title = '청약고객관리';
this.row.msg1 = '비밀번호 확인을 입력해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs.__pwd2.focus();
return false;
}
if(!this.isNull(this.userPwd1)){
if(!this.doPwdValidate()){
return false;
}
}
if(this.isNull(this.userNm)){ if(this.isNull(this.userNm)){
this.row.title = '청약고객관리'; this.row.title = '청약고객관리';
this.row.msg1 = '이름을 입력해 주세요.'; this.row.msg1 = '이름을 입력해 주세요.';

View File

@@ -7,7 +7,13 @@
</div> </div>
<div class="table table_form"> <div class="table table_form">
<form autocomplete="off"> <form action=""
target="_blank"
method="post"
ref="form">
<input type="hidden" name="svcUserId" id="svcUserId" v-model="svcUserId"/>
<input type="hidden" name="ezSvcUserAuthKey" id="ezSvcUserAuthKey" v-model="ezSvcUserAuthKey"/>
</form>
<table> <table>
<colgroup> <colgroup>
<col style="width:140px"> <col style="width:140px">
@@ -32,7 +38,7 @@
<th>ID</th> <th>ID</th>
<td colspan="2"> <td colspan="2">
{{userId}} {{userId}}
<button type="button" class="button grey btn-a">로그인</button> <button type="button" class="button grey btn-a" @click="homeLogin">로그인</button>
</td> </td>
<th class="center">관리자명</th> <th class="center">관리자명</th>
<td colspan="2">{{adminId}} / {{adminNm}}</td> <td colspan="2">{{adminId}} / {{adminNm}}</td>
@@ -81,7 +87,7 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
</form>
</div> </div>
<div> <div>
@@ -149,7 +155,6 @@
</div> </div>
</div> </div>
</template> </template>
<script> <script>
@@ -188,7 +193,8 @@ export default {
email: '', email: '',
userTotalCnt:0, userTotalCnt:0,
selected: [], selected: [],
svcUserId:'',
ezSvcUserAuthKey:''
} }
}, },
props: { props: {
@@ -206,8 +212,6 @@ export default {
}, },
created(){ created(){
this.memberDetail(this.$route.params.serviceId); this.memberDetail(this.$route.params.serviceId);
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
}, },
destroyed() { destroyed() {
this.$store.commit('searchcondition/updateSearchCondition', { this.$store.commit('searchcondition/updateSearchCondition', {
@@ -263,7 +267,7 @@ export default {
this.userType = result.data.userType; this.userType = result.data.userType;
this.adminId = result.data.adminId; this.adminId = result.data.adminId;
this.adminNm = result.data.adminNm; this.adminNm = result.data.adminNm;
this.sendingLimit = result.data.sendingLimit; 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;
this.lastLoginDt = result.data.lastLoginDt; this.lastLoginDt = result.data.lastLoginDt;
@@ -374,7 +378,14 @@ export default {
formReset(){ formReset(){
Object.assign(this.$data, this.$options.data()); Object.assign(this.$data, this.$options.data());
}, },
homeLogin(){
console.log(process.env.VUE_APP_HOME_PAGE_URL)
console.log(process.env.VUE_APP_AUTHKEY)
this.$refs.form.action = process.env.VUE_APP_HOME_PAGE_URL
this.svcUserId = this.userId
this.ezSvcUserAuthKey = process.env.VUE_APP_AUTHKEY
this.$refs.form.submit()
},
}, },
}; };

View File

@@ -7,7 +7,13 @@
</div> </div>
<div class="table table_form"> <div class="table table_form">
<form autocomplete="off"> <form action=""
target="_blank"
method="post"
ref="form">
<input type="hidden" name="svcUserId" id="svcUserId" v-model="svcUserId"/>
<input type="hidden" name="ezSvcUserAuthKey" id="ezSvcUserAuthKey" v-model="ezSvcUserAuthKey"/>
</form>
<table> <table>
<colgroup> <colgroup>
<col style="width:140px"> <col style="width:140px">
@@ -34,7 +40,7 @@
<th>ID</th> <th>ID</th>
<td colspan="2"> <td colspan="2">
{{userId}} {{userId}}
<button type="button" class="button grey btn-a">로그인</button> <button type="button" class="button grey btn-a" @click="homeLogin">로그인</button>
</td> </td>
<th class="center">구분</th> <th class="center">구분</th>
<td colspan="2">{{userType}}</td> <td colspan="2">{{userType}}</td>
@@ -62,7 +68,6 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
</form>
</div> </div>
<div class="pop-btn2"> <div class="pop-btn2">
@@ -112,6 +117,8 @@ export default {
mdn : '', mdn : '',
email: '', email: '',
stat:'', stat:'',
svcUserId:'',
ezSvcUserAuthKey:''
} }
}, },
@@ -127,8 +134,6 @@ export default {
}, },
created(){ created(){
this.memberDetail(this.$route.params.serviceId); this.memberDetail(this.$route.params.serviceId);
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
}, },
destroyed() { destroyed() {
@@ -266,6 +271,14 @@ export default {
//this.email = ''; //this.email = '';
this.$refs._email.focus(); this.$refs._email.focus();
}, },
homeLogin(){
console.log(process.env.VUE_APP_HOME_PAGE_URL)
console.log(process.env.VUE_APP_AUTHKEY)
this.$refs.form.action = process.env.VUE_APP_HOME_PAGE_URL
this.svcUserId = this.userId
this.ezSvcUserAuthKey = process.env.VUE_APP_AUTHKEY
this.$refs.form.submit()
},
}, },
}; };
</script> </script>

View File

@@ -210,8 +210,6 @@ export default {
vuejsDatepicker, vuejsDatepicker,
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.setCodeData(); this.setCodeData();
this.setPeriodDay(0); this.setPeriodDay(0);
}, },
@@ -249,10 +247,24 @@ export default {
} }
this.search(isKeep); this.search(isKeep);
}, },
beforeRouteLeave(to, from, next) {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP._currentPage);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: this.grid.params
});
// 라우트 하기전 실행
next();
},
methods: { methods: {
search: function(isKeep) { search: function(isKeep) {
this.grid.params.startDt = moment(this.startDate).format('YYYYMMDD');
this.grid.params.endDt = moment(this.endDate).format('YYYYMMDD');
console.log('this.perPageCnt'+this.perPageCnt); console.log('this.perPageCnt'+this.perPageCnt);
//console.log(this.grid.params); console.log(this.grid.params);
this.$refs.table.search(this.grid.params, isKeep); this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData(); this.sendStoreData();
}, },
@@ -302,9 +314,10 @@ export default {
setPeriodDay(day) { setPeriodDay(day) {
this.periodDay = day; this.periodDay = day;
this.endDate = new Date(); this.endDate = new Date();
this.startDate = moment(this.endDate) //this.startDate = moment(this.endDate)
.subtract(day, 'day') // .subtract(day, 'day')
.toDate(); // .toDate();
this.initSetStartDate();
this.closeDate('start'); this.closeDate('start');
this.closeDate('end'); this.closeDate('end');
@@ -345,18 +358,14 @@ export default {
return moment(date).format('YYYY-MM-DD'); return moment(date).format('YYYY-MM-DD');
} }
}, },
initSetStartDate(){
let setYear = Number(moment(new Date()).format('YYYY'));
let initStartDate = new Date(setYear, 0, 1);
this.startDate = initStartDate;
console.log(moment(this.startDate).format('YYYY-MM-DD'));
},
}, },
beforeRouteLeave(to, from, next) {
const getP = this.$refs.table.getPagination();
console.log("==========getP : " + getP._currentPage);
this.$store.commit('searchcondition/updateSearchCondition', {
page: getP._currentPage,
perPage: this.perPageCnt,
params: this.grid.params
});
// 라우트 하기전 실행
next();
},
}; };
</script> </script>

View File

@@ -239,8 +239,6 @@ export default {
commonModal, commonModal,
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
console.log(this.$route.params.serviceId); console.log(this.$route.params.serviceId);
this.subsDetail(this.$route.params.serviceId); this.subsDetail(this.$route.params.serviceId);
// checkVaildBizNum // checkVaildBizNum

View File

@@ -219,13 +219,25 @@ export default {
vuejsDatepicker, vuejsDatepicker,
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.setCodeData(); this.setCodeData();
this.getExcelHeader(); this.getExcelHeader();
this.setPeriodDay(0); this.setPeriodDay(0);
}, },
destroyed() { destroyed() {
this.$store.commit('searchcondition/updateSearchCondition', {
page: 1,
perPage: 50,
params: {
searchType1: '',
searchType2: '',
searchType3: '',
searchText1: '',
startDt: '',
endDt: ''
}
});
}, },
mounted() { mounted() {
@@ -260,8 +272,10 @@ export default {
}, },
methods: { methods: {
search: function(isKeep) { search: function(isKeep) {
this.grid.params.startDt = moment(this.startDate).format('YYYYMMDD');
this.grid.params.endDt = moment(this.endDate).format('YYYYMMDD');
console.log('this.perPageCnt'+this.perPageCnt); console.log('this.perPageCnt'+this.perPageCnt);
//console.log(this.grid.params); console.log(this.grid.params);
this.$refs.table.search(this.grid.params, isKeep); this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData(); this.sendStoreData();
}, },
@@ -351,9 +365,10 @@ export default {
setPeriodDay(day) { setPeriodDay(day) {
this.periodDay = day; this.periodDay = day;
this.endDate = new Date(); this.endDate = new Date();
this.startDate = moment(this.endDate) // this.startDate = moment(this.endDate)
.subtract(day, 'day') // .subtract(day, 'day')
.toDate(); // .toDate();
this.initSetStartDate();
this.closeDate('start'); this.closeDate('start');
this.closeDate('end'); this.closeDate('end');
@@ -394,6 +409,12 @@ export default {
return moment(date).format('YYYY-MM-DD'); return moment(date).format('YYYY-MM-DD');
} }
}, },
initSetStartDate(){
let setYear = Number(moment(new Date()).format('YYYY'));
let initStartDate = new Date(setYear, 0, 1);
this.startDate = initStartDate;
console.log(moment(this.startDate).format('YYYY-MM-DD'));
},
}, },
}; };
</script> </script>

View File

@@ -3,6 +3,8 @@ const state = {
isLogin: false, isLogin: false,
isErrorPage: false, isErrorPage: false,
isAuthChk: false, isAuthChk: false,
userId:null,
userNm:null,
pwd: null pwd: null
}; };
@@ -11,6 +13,8 @@ const getters = {
isLogin: state => state.isLogin, isLogin: state => state.isLogin,
isErrorPage: state => state.isErrorPage, isErrorPage: state => state.isErrorPage,
isAuthChk: state => state.isAuthChk, isAuthChk: state => state.isAuthChk,
userId: state => state.userId,
userNm: state => state.userNm,
getPwd: state => state.pwd, getPwd: state => state.pwd,
}; };
@@ -38,6 +42,12 @@ const mutations = {
savePwd: (state, value) => { savePwd: (state, value) => {
state.pwd = value; state.pwd = value;
}, },
userId: (state, value) => {
state.userId = value;
},
userNm: (state, value) => {
state.userNm = value;
}
}; };
const actions = { const actions = {

View File

@@ -65,7 +65,8 @@ export default {
confirmNum: '', confirmNum: '',
userId: '', userId: '',
isAuthNum: false, isAuthNum: false,
isLogin: true, isLogin: false,
isAuth: false,
pwd: '', pwd: '',
text: '', text: '',
number: '', number: '',
@@ -79,15 +80,15 @@ export default {
,commonModal ,commonModal
}, },
created() { created() {
if(!!tokenSvc.getToken()){ // if(!!tokenSvc.getToken()){
this.$store.commit("login/isLogin", true); // this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true); // this.$store.commit("login/isAuthChk", true);
this.$router.push({ path: '/' }); // this.$router.push({ path: '/' });
}else{ // }else{
if(!this.getLogin){ // if(!this.getLogin){
this.$router.push({ path: '/login' }); // this.$router.push({ path: '/login' });
} // }
} // }
}, },
mounted() { mounted() {
if (localStorage.hubwebUserId) { if (localStorage.hubwebUserId) {
@@ -116,6 +117,13 @@ export default {
if(data != null && data != ''){ if(data != null && data != ''){
this.pwd = data; this.pwd = data;
} }
},
getAuthChk(data){
if (data != null && data != '' && data == true) {
this.isAuth = true;
} else {
this.isAuth = false;
}
} }
}, },
destroyed() { destroyed() {
@@ -216,11 +224,13 @@ export default {
try { try {
const response = await api.confirmNum(params) const response = await api.confirmNum(params)
const rsp = response.data; const rsp = response.data;
console.log("RESULT_CODE : "+rsp.retCode); console.log("LOGIN ßRESUßLT_CODE : "+rsp.retCode);
console.log(rsp);
if(rsp.retCode == '0000'){ if(rsp.retCode == '0000'){
vm.$store.commit("login/isLogin", true); vm.$store.commit("login/isLogin", true);
//var nextUrl = rsp.data.nextUrl; vm.$store.commit("login/isAuthChk", true);
//vm.$router.push({ path: nextUrl}); vm.$store.commit("login/userId", rsp.data.userId)
vm.$store.commit("login/userNm", rsp.data.userNm)
vm.$router.push({ path: '/'}); vm.$router.push({ path: '/'});
}else if (rsp.retCode == '4008'){ }else if (rsp.retCode == '4008'){
this.row.title = '휴대폰번호 확인'; this.row.title = '휴대폰번호 확인';

View File

@@ -1,5 +1,4 @@
<template> <template>
<div class="wrap bg-wrap">
<div class="login-box adm-login"> <div class="login-box adm-login">
<div class="wbox"> <div class="wbox">
<div class="logo"></div> <div class="logo"></div>
@@ -23,9 +22,8 @@
</div> </div>
</div> </div>
</div>
<login-popup ref="LoginPopup"> </login-popup> <login-popup ref="LoginPopup"> </login-popup>
<common-modal ref="commmonModal"></common-modal> <common-modal ref="commonModal"></common-modal>
</div> </div>
</template> </template>
@@ -92,13 +90,13 @@ export default {
if (!this.userId){ if (!this.userId){
this.row.title = '로그인 실패'; this.row.title = '로그인 실패';
this.row.msg1 = '아이디,비밀번호를 확인해주세요.'; this.row.msg1 = '아이디,비밀번호를 확인해주세요.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
return false; return false;
} }
if (!this.userPwd){ if (!this.userPwd){
this.row.title = '비밀번호 오류'; this.row.title = '비밀번호 오류';
this.row.msg1 = '비밀번호를 확인해주세요.'; this.row.msg1 = '비밀번호를 확인해주세요.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
return false; return false;
} }
@@ -128,28 +126,29 @@ export default {
this.row.title = '로그인 실패'; this.row.title = '로그인 실패';
this.row.msg1 = '등록되지 않은 아이디입니다.'; this.row.msg1 = '등록되지 않은 아이디입니다.';
this.row.msg2 = '아이디를 다시 확인하세요'; this.row.msg2 = '아이디를 다시 확인하세요';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
} else if(rsp.retCode == '4004') { // ID/PWD 불일치 } else if(rsp.retCode == '4004') { // ID/PWD 불일치
this.row.title = '비밀번호 오류'; this.row.title = '비밀번호 오류';
this.row.msg1 = '비밀번호를 확인해주세요.'; this.row.msg1 = '비밀번호를 확인해주세요.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
} else if(rsp.retCode == '4005') { // ID/PWD 불일치 횟수초과로 계정 잠김 4005 } else if(rsp.retCode == '4005') { // ID/PWD 불일치 횟수초과로 계정 잠김 4005
this.row.title = '로그인 실패'; this.row.title = '로그인 실패';
this.row.msg1 = '로그인 5회 실패하였습니다.'; this.row.msg1 = '로그인 5회 실패하였습니다.';
this.row.msg2 = '비밀번호 초기화 후 비밀번호를 변경해 주세요.'; this.row.msg2 = '비밀번호 초기화 후 비밀번호를 변경해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
} else if(rsp.retCode == '4006') { } else if(rsp.retCode == '4006') {
// msg = '비밀번호를 변경하신지 90일이 지났습니다.\n비밀번호 변경 화면으로 이동합니다.'; // msg = '비밀번호를 변경하신지 90일이 지났습니다.\n비밀번호 변경 화면으로 이동합니다.';
this.row.title = '로그인 실패'; this.row.title = '로그인 실패';
this.row.msg1 = '비밀번호를 변경하지 않은지 90일이'; this.row.msg1 = '비밀번호를 변경하지 않은지 90일이';
this.row.msg2 = '지났습니다. 비밀번호를 변경하여'; this.row.msg2 = '지났습니다. 비밀번호를 변경하여';
this.row.msg3 = '이용 부탁드립니다.'; this.row.msg3 = '이용 부탁드립니다.';
this.$refs.commmonModal.alertModalOpen(this.row); vm.$router.push({ name: 'updatePassword',params: {userId : oprtrId}});
this.$refs.commonModal.alertModalOpen(this.row);
} else if(rsp.retCode == '4007') { } else if(rsp.retCode == '4007') {
this.row.title = '로그인 실패'; this.row.title = '로그인 실패';
this.row.msg1 = '아이디 상태를 확인해 주세요.'; this.row.msg1 = '아이디 상태를 확인해 주세요.';
this.row.msg2 = '(사용중인 상태만 로그인 가능합니다.)'; this.row.msg2 = '(사용중인 상태만 로그인 가능합니다.)';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
} else { } else {
vm.$store.commit("login/isLogin", false); vm.$store.commit("login/isLogin", false);
return; return;

View File

@@ -26,8 +26,8 @@
</div> </div>
</div> </div>
<common-modal ref="commonModal"></common-modal>
<login-popup ref="LoginPopup"> </login-popup> <login-popup ref="LoginPopup"> </login-popup>
<common-modal ref="commmonModal"></common-modal>
</div> </div>
@@ -44,6 +44,7 @@ export default {
return { return {
errors: [], errors: [],
userId: '', userId: '',
row:{},
} }
}, },
created() { created() {
@@ -61,7 +62,7 @@ export default {
if (!this.userId) { if (!this.userId) {
this.row.title = '아이디 오류'; this.row.title = '아이디 오류';
this.row.msg1 = '아이디를 입력해 주세요.'; this.row.msg1 = '아이디를 입력해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
// this.errors.push('아이디를 입력해 주세요.'); // this.errors.push('아이디를 입력해 주세요.');
} }
@@ -89,7 +90,7 @@ export default {
this.row.title = '비밀번호 초기화'; this.row.title = '비밀번호 초기화';
this.row.msg1 = '해당 아이디에 저장되어 있는 핸드폰번호로'; this.row.msg1 = '해당 아이디에 저장되어 있는 핸드폰번호로';
this.row.msg2 = '비밀번호 초기화 문자가 발송되었습니다.'; this.row.msg2 = '비밀번호 초기화 문자가 발송되었습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
// vm.ModalOpen('modal12'); // vm.ModalOpen('modal12');
//vm.$router.push({ path : 'view/login'}); //vm.$router.push({ path : 'view/login'});
@@ -97,7 +98,7 @@ export default {
this.row.title = '비밀번호 초기화'; this.row.title = '비밀번호 초기화';
this.row.msg1 = '등록되지 않은 아이디입니다.'; this.row.msg1 = '등록되지 않은 아이디입니다.';
this.row.msg2 = '아이디를 다시 확인하세요.'; this.row.msg2 = '아이디를 다시 확인하세요.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
// vm.ModalOpen('modal13'); // vm.ModalOpen('modal13');
} }
// document.getElementsByClassName('modal12')[0].getElementsByClassName('btn-pcolor')[0].addEventListener('click',() => { // document.getElementsByClassName('modal12')[0].getElementsByClassName('btn-pcolor')[0].addEventListener('click',() => {
@@ -106,7 +107,7 @@ export default {
//alert("실패 하였습니다."); //alert("실패 하였습니다.");
this.row.title = '비밀번호 초기화'; this.row.title = '비밀번호 초기화';
this.row.msg1 = '실패 하였습니다.'; this.row.msg1 = '실패 하였습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
return false; return false;
} }
} }

View File

@@ -18,8 +18,8 @@
</form> </form>
</div> </div>
</div> </div>
<common-modal ref="commonModal"></common-modal>
<login-popup ref="LoginPopup"> </login-popup> <login-popup ref="LoginPopup"> </login-popup>
<common-modal ref="commmonModal"></common-modal>
</div> </div>
@@ -43,6 +43,7 @@ export default {
newPw: '', newPw: '',
newPw2: '', newPw2: '',
passwordValidFlag: true, passwordValidFlag: true,
row: {},
}; };
}, },
@@ -114,14 +115,14 @@ export default {
if(lodash.isNil(this.newPw)){ if(lodash.isNil(this.newPw)){
this.row.title = '비밀번호 변경'; this.row.title = '비밀번호 변경';
this.row.msg1 = '비밀번호 확인을 입력해 주세요.'; this.row.msg1 = '비밀번호 확인을 입력해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
this.$refs._newPw2.focus(); this.$refs._newPw2.focus();
return false; return false;
} }
if(!lodash.isEqual(this.newPw, this.newPw2)){ if(!lodash.isEqual(this.newPw, this.newPw2)){
this.row.title = '비밀번호 변경'; this.row.title = '비밀번호 변경';
this.row.msg1 = '비밀번호가 일치하지 않습니다.'; this.row.msg1 = '비밀번호가 일치하지 않습니다.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
this.$refs._newPw2.focus(); this.$refs._newPw2.focus();
return false; return false;
} }
@@ -129,7 +130,7 @@ export default {
if(!(pwdLen >= 8 && pwdLen <= 16)){ if(!(pwdLen >= 8 && pwdLen <= 16)){
this.row.title = '비밀번호 변경'; this.row.title = '비밀번호 변경';
this.row.msg1 = '비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.'; this.row.msg1 = '비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
this.$refs._newPw2.focus(); this.$refs._newPw2.focus();
return false; return false;
} }
@@ -139,7 +140,7 @@ export default {
if(!(pEng.test(this.newPw) && pNum.test(this.newPw) && pSpc.test(this.newPw))) { if(!(pEng.test(this.newPw) && pNum.test(this.newPw) && pSpc.test(this.newPw))) {
this.row.title = '비밀번호 변경'; this.row.title = '비밀번호 변경';
this.row.msg1 = '비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.'; this.row.msg1 = '비밀번호는 8~16자의 영문, 숫자, 특수문자(!,@, $, %, ^, &, *) 조합이 필요합니다.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
this.$refs._newPw2.focus(); this.$refs._newPw2.focus();
return; return;
} }
@@ -168,27 +169,27 @@ export default {
this.row.title = '비밀번호 변경'; this.row.title = '비밀번호 변경';
this.row.msg1 = '비밀번호가 정상적으로 변경되었습니다.'; this.row.msg1 = '비밀번호가 정상적으로 변경되었습니다.';
this.row.msg2 = '변경된 비밀번호로 다시 로그인 해주세요.'; this.row.msg2 = '변경된 비밀번호로 다시 로그인 해주세요.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
// if(vm.ModalOpen('modal16')){ // if(vm.ModalOpen('modal16')){
vm.$router.push({ path: '/login' }); vm.$router.push({ path: '/login' });
// } // }
} else if(rsp.retCode == '4016') { } else if(rsp.retCode == '4016') {
this.row.title = '비밀번호 변경'; this.row.title = '비밀번호 변경';
this.row.msg1 = '비밀번호를 확인해주세요.'; this.row.msg1 = '비밀번호를 확인해주세요.';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
// vm.ModalOpen('modal14') // 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.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
// vm.ModalOpen('modal15') // 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 = '등록되지 않은 아이디입니다.';
this.row.msg1 = '아이디를 다시 확인하세요'; this.row.msg1 = '아이디를 다시 확인하세요';
this.$refs.commmonModal.alertModalOpen(this.row); this.$refs.commonModal.alertModalOpen(this.row);
} }
}); });

View File

@@ -285,6 +285,10 @@ const utils_mixin = {
var strRegExp = '^[A-Za-z0-9_\.\-]*$'; var strRegExp = '^[A-Za-z0-9_\.\-]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall); return this.onlyCommon(strRegExp, e, len, isEventCall);
}, },
onlyHen: function (e, len, isEventCall) {
var strRegExp = '^[ㄱ-ㅎ|가-힣|a-z|A-Z|0-9|]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall);
},
onlyIp: function (e, len, isEventCall) { onlyIp: function (e, len, isEventCall) {
var strRegExp = '^[0-9,.*]*$'; var strRegExp = '^[0-9,.*]*$';
return this.onlyCommon(strRegExp, e, len, isEventCall); return this.onlyCommon(strRegExp, e, len, isEventCall);

View File

@@ -227,8 +227,6 @@ export default {
customGrid: customGrid customGrid: customGrid
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.getLiveSendSttus(); this.getLiveSendSttus();
this.timer = setInterval(this.getLiveSendSttus, this.selectedKey * 1000 * 60) this.timer = setInterval(this.getLiveSendSttus, this.selectedKey * 1000 * 60)

View File

@@ -28,7 +28,7 @@
<div class="select_box id"> <div class="select_box id">
<label for="right" class="label">요청채널</label> <label for="right" class="label">요청채널</label>
<select name="" id="" v-model="grid.params.searchType1" @keyup.enter="search"> <select name="" id="" v-model="grid.params.searchType1" @keyup.enter="search">
<option value="ALL" selected>전체</option> <option value="" selected>전체</option>
<option value="SMS">SMS</option> <option value="SMS">SMS</option>
<option value="LMS">LMS</option> <option value="LMS">LMS</option>
<option value="MMS">MMS</option> <option value="MMS">MMS</option>
@@ -39,15 +39,15 @@
<div class="group"> <div class="group">
<div class="input_box essential"> <div class="input_box essential">
<label for="right" class="label"><span>*</span>수신번호</label> <label for="right" class="label"><span>*</span>수신번호</label>
<input class="search-box" type="number" id="search" placeholder="- 자 제외 숫자만 입력" v-model="grid.params.searchText1" v-on:keyup="onlyNum" @input="onlyNum" minlength="10" maxlength="11"> <input class="search-box" type="number" id="search" placeholder="- 자 제외 숫자만 입력" v-model="grid.params.searchText1" v-on:keyup="onlyNum" @input="onlyNum" minlength="10" maxlength="11" ref="_searchText2">
</div> </div>
<div class="input_box essential"> <div class="input_box essential">
<label for="right" class="label"><span>*</span>발신번호</label> <label for="right" class="label"><span>*</span>발신번호</label>
<input class="search-box" type="number" id="search" placeholder="- 자 제외 숫자만 입력" v-model="grid.params.searchText2" v-on:keyup="onlyNum" @input="onlyNum" minlength="10" maxlength="11"> <input class="search-box" type="number" id="search" placeholder="- 자 제외 숫자만 입력" v-model="grid.params.searchText2" v-on:keyup="onlyNum" @input="onlyNum" minlength="10" maxlength="11" ref="_searchText2">
</div> </div>
<div class="input_box"> <div class="input_box">
<label for="right" class="label">고객사명</label> <label for="right" class="label">고객사명</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText3" > <input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.searchText3" ref="_searchText3">
</div> </div>
<button type="button" class="button grey" @click="search">조회</button> <button type="button" class="button grey" @click="search">조회</button>
</div> </div>
@@ -184,7 +184,7 @@ export default {
], ],
noDataStr: '검색 결과가 없습니다.', noDataStr: '검색 결과가 없습니다.',
params: { params: {
searchType1: 'ALL', searchType1: '',
searchText1: '', searchText1: '',
searchText2: '', searchText2: '',
searchText3: '', searchText3: '',
@@ -200,8 +200,6 @@ export default {
vuejsDatepicker, vuejsDatepicker,
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
// this.setCodeData(); // this.setCodeData();
// this.getExcelHeader(); // this.getExcelHeader();
this.setPeriodDay(0); this.setPeriodDay(0);
@@ -211,6 +209,8 @@ export default {
}, },
mounted() { mounted() {
this.grid.params.searchType1 = 'ALL';
let page = 1; let page = 1;
// 페이지 정보 및 검색 조건 // 페이지 정보 및 검색 조건
const getCondition = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
@@ -240,12 +240,7 @@ export default {
}, },
methods: { methods: {
search: function(isKeep) { search: function(isKeep) {
// 발송일자 필수입력체크 this.doValidate();
// 수신번호 필수입력체크
// 발신번호 필수입력체크
this.grid.params.sentDate = moment(this.startDate).format('YYYYMMDD'); this.grid.params.sentDate = moment(this.startDate).format('YYYYMMDD');
this.grid.params.reqChennel = this.grid.params.searchType1; this.grid.params.reqChennel = this.grid.params.searchType1;
this.grid.params.phone = this.grid.params.searchText1; this.grid.params.phone = this.grid.params.searchText1;
@@ -316,6 +311,34 @@ export default {
const getCondition = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
console.log("getCondition : "+ getCondition.perPage); console.log("getCondition : "+ getCondition.perPage);
}, },
doValidate(){
// 발송일자 필수입력체크
if(this.isNull(this.startDate)) {
this.row.title = '발송내역';
this.row.msg1 = '발송일을 선택해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
return false;
}
// 수신번호 필수입력체크
if(this.isNull(this.grid.params.searchText1)) {
this.row.title = '발송내역';
this.row.msg1 = '수신번호를 입력해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._searchText1.focus();
return false;
}
// 발신번호 필수입력체크
if(this.isNull(this.grid.params.searchText2)) {
this.row.title = '발송내역';
this.row.msg1 = '수신번호를 입력해 주세요.';
this.$refs.commmonModal.alertModalOpen(this.row);
this.$refs._searchText2.focus();
return false;
}
},
} }
}; };
</script> </script>

View File

@@ -20,13 +20,18 @@
<th>발송타입</th> <th>발송타입</th>
<td v-if="code === null || code === ''"> <td v-if="code === null || code === ''">
<div v:class="select_box"> <div v:class="select_box">
<select name="" id="right" v-model.trim="sndblckTpCd" ref="sndblckTpCd"> <select name="" id="right" v-model.trim="sndblckTpCd" ref="sndblckTpCd" @keyup.enter="search">
<option v-for="(option, i) in tpType" <option v-for="(option, i) in tpType" :value="option.code" v-bind:key="i">
:value="sndblckTpCd"
v-bind:key="i"
>
{{ option.codeNm }} {{ option.codeNm }}
</option> </option>
<!--
<option v-for="(option, i) in tpType"
:v-bind:value="option.grpCd"
v-bind:key="i"
:selected="code === option.grpCd"
>
{{ option.codeNm }}
</option> -->
<!-- <option value="">문자</option> <!-- <option value="">문자</option>
<option value="">RCS</option> --> <option value="">RCS</option> -->
</select> </select>
@@ -38,7 +43,7 @@
<td> <td>
<div> <div>
<select name="" id="" v-model.trim="blckRsnCd" ref="blckRsnCd"> <select name="" id="" v-model.trim="blckRsnCd" ref="blckRsnCd">
<option v-for="(option, i) in rsnType" :value="blckRsnCd" v-bind:key="i"> <option v-for="(option, i) in rsnType" :value="option.code" v-bind:key="i">
{{ option.codeNm }} {{ option.codeNm }}
</option> </option>
</select> </select>
@@ -47,7 +52,7 @@
</tr> </tr>
<tr> <tr>
<th>메모</th> <th>메모</th>
<td class="sender"><textarea class="memo_text" v-model.trim="meno" ref="meno"></textarea></td> <td class="sender"><textarea class="memo_text" v-model.trim="meno" ref="meno" @input="memoLimitByte()"></textarea></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@@ -80,11 +85,12 @@ export default {
rsnType: [], rsnType: [],
tpType: [], tpType: [],
blckSndrno: '', blckSndrno: '',
sndblckTpCd: '', sndblckTpCd: '01',
blckRsnCd: '', blckRsnCd: '01',
meno: '', meno: '',
code:"", code:"",
LINE_FEED : 10, // '\n',
maxByte: 2000,
// params: { // params: {
// 'blckSndrno' : '' // 'blckSndrno' : ''
// ,'sndblckTpCd' : '01' // ,'sndblckTpCd' : '01'
@@ -94,13 +100,16 @@ export default {
} }
}, },
create(){ create(){
// this.setCodeDate(); this.setCodeDate();
this.formReset(); this.formReset();
},
mounted(){
//this.sndblckTpCd = '01'
}, },
components: { components: {
commonModal, commonModal,
ValidationConfirmPopup ValidationConfirmPopup
}, },
methods :{ methods :{
//모달 띄우기 //모달 띄우기
ModalOpen(){ ModalOpen(){
@@ -124,12 +133,19 @@ export default {
}, },
// 저장 후 부모창 호출 // 저장 후 부모창 호출
toComplete(){z toComplete(){
this.$parent.$refs.table.reloadData(); this.$parent.$refs.table.reloadData();
this.ModalClose(); this.ModalClose();
}, },
async doInsert(){ async doInsert(){
// if(this.doValidate() && this.regisConfirm()){ // if(this.doValidate() && this.regisConfirm()){
this.row.blckSndrno = this.blckSndrno;
this.row.sndblckTpCd = this.sndblckTpCd;
this.row.blckRsnCd = this.blckRsnCd;
this.row.meno = this.meno;
this.regId = 'admin';
console.log(this.row);
try { try {
const response = await riskMgtApi.insertIntrcp(this.row); const response = await riskMgtApi.insertIntrcp(this.row);
const result = response.data; const result = response.data;
@@ -137,8 +153,8 @@ export default {
this.row.title = '발신번호 차단'; this.row.title = '발신번호 차단';
this.row.msg1 = '성공 하였습니다.'; this.row.msg1 = '성공 하였습니다.';
this.$parent.alertInsert(this.row); this.$parent.alertInsert(this.row);
this.toComplete();
} }
this.toComplete();
} catch(err) { } catch(err) {
console.log(err); console.log(err);
this.row.title = '발신번호 차단'; this.row.title = '발신번호 차단';
@@ -189,6 +205,44 @@ export default {
this.$refs.ValidationConfirmPopup.confirmInsertOpen(); this.$refs.ValidationConfirmPopup.confirmInsertOpen();
} }
}, },
// 바이트길이 구하기
getByteLength: function (decimal) {
return (decimal >> 7) || (this.LINE_FEED === decimal) ? 2 : 1
},
getByte: function (str) {
return str
.split('')
.map((s) => s.charCodeAt(0))
.reduce((prev, unicodeDecimalValue) => prev + this.getByteLength(unicodeDecimalValue), 0)
},
getLimitedByteText: function (inputText, maxByte) {
const characters = inputText.split('')
let validText = ''
let totalByte = 0
for (let i = 0; i < characters.length; i += 1) {
const character = characters[i]
const decimal = character.charCodeAt(0)
const byte = this.getByteLength(decimal) // 글자 한 개가 몇 바이트 길이인지 구해주기
// 현재까지의 바이트 길이와 더해 최대 바이트 길이를 넘지 않으면
if (totalByte + byte <= maxByte) {
totalByte += byte // 바이트 길이 값을 더해 현재까지의 총 바이트 길이 값을 구함
validText += character // 글자를 더해 현재까지의 총 문자열 값을 구함
} else { // 최대 바이트 길이를 넘으면
break // for 루프 종료
}
}
return validText
},
memoLimitByte() {
this.meno = this.getLimitedByteText(this.meno, this.maxByte);
}, //END 바이트길이 구하기
}, },
} }

View File

@@ -14,7 +14,7 @@
<tr> <tr>
<th>차단문구</th> <th>차단문구</th>
<td class="input_add"> <td class="input_add">
<input v-model="word" ref="_word"> <input v-model="word" ref="_word" maxlength="50">
<button type="button" class="button white add" @click="doAdd"></button> <button type="button" class="button white add" @click="doAdd"></button>
</td> </td>
</tr> </tr>
@@ -43,9 +43,8 @@
<div> <div>
<select name="" id="" v-model.trim="blckRsnCd" ref="blckRsnCd"> <select name="" id="" v-model.trim="blckRsnCd" ref="blckRsnCd">
<option v-for="(option, i) in rsnType" <option v-for="(option, i) in rsnType"
:value="blckRsnCd" :value="option.code"
v-bind:key="i" v-bind:key="i">
:selected="blckRsnCd === option.code">
{{ option.codeNm }} {{ option.codeNm }}
</option> </option>
</select> </select>
@@ -54,7 +53,7 @@
</tr> </tr>
<tr> <tr>
<th>메모</th> <th>메모</th>
<td class="sender"><textarea class="memo_text" v-model.trim="memo" ref="memo"></textarea></td> <td class="sender"><textarea class="memo_text" v-model.trim="memo" ref="memo" ></textarea></td>
</tr> </tr>
</tbody> </tbody>
@@ -94,9 +93,9 @@ export default {
word: '', // 차단문구 word: '', // 차단문구
blckSndrno:'', blckSndrno:'',
sndblckTpCd:'', sndblckTpCd:'',
blckRsnCd: '', // 차단사유 blckRsnCd: '01', // 차단사유
blckYn:'', blckYn:'',
blckContCd:'', //차단 조건 blckContCd:'01', //차단 조건
chgDt:'', chgDt:'',
regId: '', regId: '',
regDt: '', regDt: '',
@@ -216,9 +215,10 @@ export default {
if(this.doValidate()){ if(this.doValidate()){
this.$refs.ValidationConfirmPopup.msgConfirmInsertOpen(); this.$refs.ValidationConfirmPopup.msgConfirmInsertOpen();
} }
}, }
}
},
} }
</script> </script>

View File

@@ -43,14 +43,14 @@
</tr> </tr>
<tr> <tr>
<th>메모</th> <th>메모</th>
<td><input type="text" value="고객사요청" v-model.trim="meno" ref="meno"></td> <td><input type="text" value="고객사요청" v-model.trim="meno" ref="meno" @input="memoLimitByte()"></td>
</tr> </tr>
<tr> <tr>
<th>차단여부</th> <th>차단여부</th>
<td> <td>
<input type="radio" name="state" value="해제" id="popup_radio1" checked=""> <input type="radio" name="state" value="N" id="popup_radio1" v-model="blckYn">
<label for="popup_radio1">해제</label> <label for="popup_radio1">해제</label>
<input type="radio" name="state" value="차단" id="popup_radio2"> <input type="radio" name="state" value="Y" id="popup_radio2" v-model="blckYn">
<label for="popup_radio2">차단</label> <label for="popup_radio2">차단</label>
</td> </td>
</tr> </tr>
@@ -87,11 +87,17 @@ export default {
blckRsnCd:'', blckRsnCd:'',
regId: '', regId: '',
meno: '', meno: '',
LINE_FEED : 10, // '\n',
maxByte: 2000,
} }
}, },
components: { components: {
ValidationConfirmPopup ValidationConfirmPopup
}, },
created(){
this.setCodeDate();
// this.formReset();
},
methods :{ methods :{
// 모달 띄우기 // 모달 띄우기
async IntrcpDetailModalOpen(props){ async IntrcpDetailModalOpen(props){
@@ -161,6 +167,7 @@ export default {
try { try {
const response = await riskMgtApi.updateIntrcp(this.row); const response = await riskMgtApi.updateIntrcp(this.row);
const result = response.data; const result = response.data;
console.log(result);
if (result != null && result.retCode == "0000") { if (result != null && result.retCode == "0000") {
this.row.title = '발신번호 차단'; this.row.title = '발신번호 차단';
this.row.msg1 = '수정 하였습니다.'; this.row.msg1 = '수정 하였습니다.';
@@ -209,6 +216,48 @@ export default {
this.$refs.ValidationConfirmPopup.confirmDeleteOpen(); this.$refs.ValidationConfirmPopup.confirmDeleteOpen();
} }
}, },
// formReset(){
// var type= this.insertType;
// Object.assign(this.$data, this.$options.data());
// this.insertType = type;
// },
// 바이트길이 구하기
getByteLength: function (decimal) {
return (decimal >> 7) || (this.LINE_FEED === decimal) ? 2 : 1
},
getByte: function (str) {
return str
.split('')
.map((s) => s.charCodeAt(0))
.reduce((prev, unicodeDecimalValue) => prev + this.getByteLength(unicodeDecimalValue), 0)
},
getLimitedByteText: function (inputText, maxByte) {
const characters = inputText.split('')
let validText = ''
let totalByte = 0
for (let i = 0; i < characters.length; i += 1) {
const character = characters[i]
const decimal = character.charCodeAt(0)
const byte = this.getByteLength(decimal) // 글자 한 개가 몇 바이트 길이인지 구해주기
// 현재까지의 바이트 길이와 더해 최대 바이트 길이를 넘지 않으면
if (totalByte + byte <= maxByte) {
totalByte += byte // 바이트 길이 값을 더해 현재까지의 총 바이트 길이 값을 구함
validText += character // 글자를 더해 현재까지의 총 문자열 값을 구함
} else { // 최대 바이트 길이를 넘으면
break // for 루프 종료
}
}
return validText
},
memoLimitByte() {
this.meno = this.getLimitedByteText(this.meno, this.maxByte);
}, //END 바이트길이 구하기

View File

@@ -14,7 +14,7 @@
<tr> <tr>
<th>차단문구</th> <th>차단문구</th>
<td class="input_add"> <td class="input_add">
<input v-model="word"> <input v-model="word" ref="_word">
<button type="button" class="button white add" @click="doAdd"></button> <button type="button" class="button white add" @click="doAdd"></button>
</td> </td>
</tr> </tr>
@@ -31,10 +31,10 @@
<tr> <tr>
<th>조건</th> <th>조건</th>
<td> <td>
<input type="radio" name="state" value="01" id="popup_radio3" v-model="blckContCd" > <input type="radio" name="state02" value="01" id="popup_radio5" v-model="blckContCd" >
<label for="popup_radio3">AND</label> <label for="popup_radio5">AND</label>
<input type="radio" name="state" value="02" id="popup_radio4" v-model="blckContCd"> <input type="radio" name="state02" value="02" id="popup_radio6" v-model="blckContCd">
<label for="popup_radio4">OR</label> <label for="popup_radio6">OR</label>
</td> </td>
</tr> </tr>
<tr> <tr>
@@ -59,9 +59,9 @@
<tr> <tr>
<th>차단여부</th> <th>차단여부</th>
<td> <td>
<input type="radio" name="state01" value="AND" id="popup_radio7"> <input type="radio" name="state01" value="N" id="popup_radio7" v-model="blckYn">
<label for="popup_radio7">해제</label> <label for="popup_radio7">해제</label>
<input type="radio" name="state01" value="OR" id="popup_radio8"> <input type="radio" name="state01" value="Y" id="popup_radio8" v-model="blckYn">
<label for="popup_radio8">차단</label> <label for="popup_radio8">차단</label>
</td> </td>
</tr> </tr>
@@ -83,7 +83,9 @@
import api from '@/service/api'; import api from '@/service/api';
import riskMgtApi from '../service/riskMgtApi'; import riskMgtApi from '../service/riskMgtApi';
import ValidationConfirmPopup from './ValidationConfirmPopup.vue'; import ValidationConfirmPopup from './ValidationConfirmPopup.vue';
import { utils_mixin, chkPattern2 } from '../service/mixins';
export default { export default {
mixins: [utils_mixin, chkPattern2],
data(){ data(){
return{ return{
@@ -140,6 +142,7 @@ export default {
try { try {
const response = await riskMgtApi.msgIntrcpDetail(this.row); const response = await riskMgtApi.msgIntrcpDetail(this.row);
const result = response.data; const result = response.data;
console.log('----------------');
console.log(result); console.log(result);
if (result != null && result.retCode == "0000") { if (result != null && result.retCode == "0000") {
this.blckContCd = result.data.blckContCd; this.blckContCd = result.data.blckContCd;
@@ -154,6 +157,7 @@ export default {
} catch(err) { } catch(err) {
alert("실패 하였습니다."); alert("실패 하였습니다.");
} }
console.log(this.blckContCd);
console.log('-----------') console.log('-----------')
console.log(this.row) console.log(this.row)
var dimmed = document.getElementsByClassName('modal58'); var dimmed = document.getElementsByClassName('modal58');
@@ -191,12 +195,19 @@ export default {
}, },
//신규등록 팝업에서 문구 추가 버튼 //신규등록 팝업에서 문구 추가 버튼
doAdd: function() { doAdd: function() {
if(this.isNull(this.word)){
this.row.title = '메세지 차단';
this.row.msg1 = '문구를 입력해주세요.';
this.$parent.msgAlertModalOpen(this.row);
this.$refs._word.focus();
return false;
}
if(this.msgBlckwordList.length < 10){ if(this.msgBlckwordList.length < 10){
this.msgBlckwordList.push({ this.msgBlckwordList.push({
//seqNo: '', //seqNo: '',
word: this.word word: this.word
}); });
this.word = '';
} }
}, },
//신규등록 팝업에서 문구 삭제 버튼 //신규등록 팝업에서 문구 삭제 버튼

View File

@@ -52,11 +52,11 @@
<div class="group"> <div class="group">
<div class="input_box"> <div class="input_box">
<label for="right" class="label">발신번호</label> <label for="right" class="label">발신번호</label>
<input class="search-box" type="number" id="search" placeholder="검색어 입력" v-model="grid.params.sndrno"> <input class="search-box" type="number" id="search" placeholder="검색어 입력" v-model="grid.params.sndrno" v-on:keyup="onlyNum" @input="onlyNum" maxlength="12">
</div> </div>
<div class="input_box"> <div class="input_box">
<label for="right" class="label">수신번호</label> <label for="right" class="label">수신번호</label>
<input class="search-box" type="number" id="search" placeholder="검색어 입력" v-model="grid.params.rcvno"> <input class="search-box" type="number" id="search" placeholder="검색어 입력" v-model="grid.params.rcvno" v-on:keyup="onlyNum" @input="onlyNum" maxlength="12">
</div> </div>
<div class="select_box"> <div class="select_box">
<label for="right" class="label">상세검색</label> <label for="right" class="label">상세검색</label>
@@ -74,12 +74,10 @@
</div> </div>
</form> </form>
<div class="info"> <div class="info">
<div class="count"> <span> {{ totalItems }} </span> <div class="count"> <span>{{ totalItems }}</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="" v-model="perPageCnt" @change="changePerPage()">
<option value="20">20</option> <option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{ option.text }}</option>
<option value="50" selected>50</option>
<option value="100">100</option>
</select> </select>
</div> </div>
</div> </div>
@@ -108,6 +106,7 @@
import customGrid from '@/components/CustomGrid'; import customGrid from '@/components/CustomGrid';
import moment from 'moment'; import moment from 'moment';
import commonModal from "@/components/modal/commonModal"; import commonModal from "@/components/modal/commonModal";
import { utils_mixin, chkPattern2 } from '../service/mixins';
//import api from '../service/api'; //import api from '../service/api';
class CustomATagRenderer { class CustomATagRenderer {
@@ -133,22 +132,29 @@ class CustomATagRenderer {
} }
export default { export default {
name: 'intrcpList', name: 'intrcpList',
mixins: [utils_mixin, chkPattern2],
data() { data() {
return { return {
totalItems: 0, totalItems: 0,
perPageCnt: 50,
// 달력 데이터 // 달력 데이터
ko: vdp_translation_ko.js, ko: vdp_translation_ko.js,
periodDay: 7, periodDay: 7,
sDateDiv: 'day', sDateDiv: 'day',
startDate: new Date(), startDate: new Date(),
endDate: new Date(), endDate: new Date(),
options: [
{ text: '20', value: 20},
{ text: '50', value: 50},
{ text: '100', value: 100}
],
statType: [], statType: [],
userType: [], userType: [],
row:{}, row:{},
grid: { grid: {
url: '/api/v1/bo/riskMgt/web/intrcpList', url: '/api/v1/bo/riskMgt/web/intrcpList',
perPage: 20, perPage: 20,
pagePerRows: 20,
pagination: true, pagination: true,
isCheckbox: false, isCheckbox: false,
initialRequest: false, initialRequest: false,
@@ -168,20 +174,20 @@ export default {
], ],
columns: [ columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 }, { name: 'no', header: 'NO', align: 'center', width: '5%' },
{ name: 'blckTpCd', header: '차단구분', align: 'center', width: 160 }, { name: 'blckTpCd', header: '차단구분', align: 'center', width: '11%' },
{ name: 'userId', header: '발송ID', align: 'center', width: 100}, { name: 'userId', header: '발송ID', align: 'center', width: '11%'},
{ name: 'sndrno', header: '발신번호', align: 'center', width: 130}, { name: 'sndrno', header: '발신번호', align: 'center', width: '11%'},
{ name: 'custNm', header: '고객사명', align: 'center', width: 130, renderer: { { name: 'custNm', header: '고객사명', align: 'center', width: '11%', renderer: {
type: CustomATagRenderer type: CustomATagRenderer
, options: { , options: {
callback: this.custDetail, callback: this.custDetail,
} }
}}, }},
{ name: 'bizrno', header: '사업자번호', align: 'center', width: 90}, { name: 'bizrno', header: '사업자번호', align: 'center', width: '11%'},
{ name: 'rcvno', header: '수신번호', align: 'center', width: 90 }, { name: 'rcvno', header: '수신번호', align: 'center', width: '11%' },
{ name: 'blckRsnCd', header: '차단사유', align: 'center', width: 90 }, { name: 'blckRsnCd', header: '차단사유', align: 'center', width: '7%' },
{ name: 'blckDt', header: '발송일자', align: 'center', width: 90 }, { name: 'blckDt', header: '발송일자', align: 'center', width: '11%' },
], ],
noDataStr: '검색 결과가 없습니다.', noDataStr: '검색 결과가 없습니다.',
@@ -220,8 +226,6 @@ export default {
}); });
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
const getCondition = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
this.setPeriodDay(0); this.setPeriodDay(0);
}, },
@@ -241,6 +245,11 @@ export default {
methods: { methods: {
search: function(isKeep) { search: function(isKeep) {
console.log(this.grid.params); console.log(this.grid.params);
this.grid.params.blckDt = moment(this.startDate).format('YYYYMMDD');
this.grid.params.blckRsnCd = this.grid.params.searchType1;
this.grid.params.blckTpCd = this.grid.params.searchText1;
this.grid.params.sndrno = this.grid.params.searchText2;
this.grid.params.custNm = this.grid.params.searchText3;
this.$refs.table.search(this.grid.params, isKeep); this.$refs.table.search(this.grid.params, isKeep);
this.sendStoreData(); this.sendStoreData();
}, },

View File

@@ -11,7 +11,7 @@
<div class="group"> <div class="group">
<div class="input_box"> <div class="input_box">
<label for="regId" class="label">등록자</label> <label for="regId" class="label">등록자</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.regId" v-on:keydown.enter.prevent="search"/> <input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.regId" v-on:keydown.enter.prevent="search" v-on:keyup="onlyEng" @input="onlyEng" maxlength="20" />
</div> </div>
<div class="select_box"> <div class="select_box">
<label for="blckRsnCd" class="label">차단사유</label> <label for="blckRsnCd" class="label">차단사유</label>
@@ -93,6 +93,7 @@ import api from '@/service/api.js';
import intrcpDetailPopup from '../components/IntrcpDetailPopup'; import intrcpDetailPopup from '../components/IntrcpDetailPopup';
import insertIntrcpPop from '../components/InsertIntrcpPop'; import insertIntrcpPop from '../components/InsertIntrcpPop';
import commonModal from "@/components/modal/commonModal"; import commonModal from "@/components/modal/commonModal";
import { utils_mixin, chkPattern2 } from '../service/mixins';
//import api from '../service/api'; //import api from '../service/api';
class CustomATagRenderer { class CustomATagRenderer {
@@ -112,6 +113,7 @@ class CustomATagRenderer {
addEvent(selEl) { addEvent(selEl) {
selEl.addEventListener("click", () => { selEl.addEventListener("click", () => {
const { callback } = this.props["cgrido" + this.props.colName].options; const { callback } = this.props["cgrido" + this.props.colName].options;
console.log(this.props);
callback(this.props); callback(this.props);
}); });
} }
@@ -119,6 +121,7 @@ class CustomATagRenderer {
export default { export default {
name: 'intrcpList', name: 'intrcpList',
mixins: [utils_mixin, chkPattern2],
data() { data() {
return { return {
totalItems: 0, totalItems: 0,
@@ -149,21 +152,25 @@ export default {
], ],
columns: [ columns: [
{ name: 'no', header: 'NO', align: 'center', width: 50 }, { name: 'no', header: 'NO', align: 'center', width: '5%' },
{ name: 'blcksndrno', header: '발신번호', align: 'center', width: 160, { name: 'blcksndrno', header: '발신번호', align: 'center', width: '25%',
renderer: { type: CustomATagRenderer, options: { callback: this.inDetailPop} } }, renderer: { type: CustomATagRenderer, options: { callback: this.inDetailPop} } },
{ name: 'blckYn', header: '차단여부', align: 'center', width: 100}, { name: 'blckYn', header: '차단여부', align: 'center', width: '15%'},
{ name: 'sndblckTpCd', header: '발송타입', align: 'center', width: 100}, { name: 'sndblckTpCd', header: '발송타입', align: 'center', width: '15%', hidden: true},
{ name: 'lastChgDt', header: '최근수정일', align: 'center', width: 100}, { name: 'sndblckTpNm', header: '발송타입', align: 'center', width: '15%'},
{ name: 'blckRsnCd', header: '차단사유', width: 100, cls: 'td_line' }, { name: 'lastChgDt', header: '최근수정일', align: 'center', width: '15%'},
{ name: 'regId', header: '등록자', width: 150 } { name: 'blckRsnCd', header: '차단사유', width: '15%', cls: 'td_line', hidden: true },
{ name: 'blckRsnNm', header: '차단사유', width: '15%', cls: 'td_line' },
{ name: 'regId', header: '등록자', width: '15%' }
], ],
noDataStr: '검색 결과가 없습니다.', noDataStr: '검색 결과가 없습니다.',
params: { params: {
regId: '', regId: '',
blckRsnCd: '', blckRsnCd: '',
blckRsnNm: '',
blckYn: '', blckYn: '',
sndblckTpCd: '', sndblckTpCd: '',
sndblckTpNm: '',
blcksndrno: '' blcksndrno: ''
}, },
excelHeader: [] excelHeader: []
@@ -180,8 +187,6 @@ export default {
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.setCodeData(); this.setCodeData();
// this.formReset(); // this.formReset();
}, },
@@ -229,11 +234,17 @@ export default {
api.commCode({'grpCd' : 'SVCUSER_TP_CD'}).then(response => { api.commCode({'grpCd' : 'SVCUSER_TP_CD'}).then(response => {
this.userType = response.data.data.list; this.userType = response.data.data.list;
}); });
//발송타입
api.commCode({'grpCd' : 'SNDBLCK_TP_CD'}).then(response => {
this.tpType = response.data.data.list;
});
}, },
ModalOpen: function(){ ModalOpen: function(){
this.$refs.insertIntrcpPop.ModalOpen(); this.$refs.insertIntrcpPop.ModalOpen();
}, },
inDetailPop(props) { inDetailPop(props) {
console.log('======');
console.log(props);
this.$refs.intrcpDetailPopup.IntrcpDetailModalOpen(props); this.$refs.intrcpDetailPopup.IntrcpDetailModalOpen(props);
}, },
// formReset(){ // formReset(){

View File

@@ -10,7 +10,7 @@
<div class="search_wrap"> <div class="search_wrap">
<div class="input_box"> <div class="input_box">
<label for="regId" class="label">등록자</label> <label for="regId" class="label">등록자</label>
<input class="search-box" type="text" id="regId" placeholder="검색어 입력" v-model="grid.params.regId" v-on:keydown.enter.prevent="search"/> <input class="search-box" type="text" id="regId" placeholder="검색어 입력" v-model="grid.params.regId" v-on:keydown.enter.prevent="search" v-on:keyup="onlyEng" @input="onlyEng" maxlength="20"/>
</div> </div>
<div class="select_box"> <div class="select_box">
<label for="blckRsnCd" class="label">차단사유</label> <label for="blckRsnCd" class="label">차단사유</label>
@@ -70,7 +70,7 @@ import customGrid from '@/components/CustomGrid';
import InsertMsgPop from '../components/InsertMsgPop'; import InsertMsgPop from '../components/InsertMsgPop';
import IntrcpMsgDetail from '../components/IntrcpMsgDetail'; import IntrcpMsgDetail from '../components/IntrcpMsgDetail';
import commonModal from "@/components/modal/commonModal"; import commonModal from "@/components/modal/commonModal";
undefined import { utils_mixin, chkPattern2 } from '../service/mixins';
//import api from '../service/api'; //import api from '../service/api';
class CustomATagRenderer { class CustomATagRenderer {
constructor(props) { constructor(props) {
@@ -95,6 +95,7 @@ class CustomATagRenderer {
} }
export default { export default {
name: 'intrcpList', name: 'intrcpList',
mixins: [utils_mixin, chkPattern2],
data() { data() {
return { return {
totalItems: 0, totalItems: 0,
@@ -127,21 +128,22 @@ export default {
], ],
columns: [ columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 }, { name: 'no', header: 'NO', align: 'center', width: '5%' },
{ name: 'seqNo', header: '일련번호', align: 'center', width: 60, hidden: true}, { name: 'seqNo', header: '일련번호', align: 'center', width: '19%', hidden: true},
{ name: 'word', header: '차단메시지', align: 'center', width: 160, { name: 'word', header: '차단메시지', align: 'center', width: '19%',
renderer: {type: CustomATagRenderer, options: { callback: this.msgDetailPop}} }, renderer: {type: CustomATagRenderer, options: { callback: this.msgDetailPop}} },
{ name: 'blckYn', header: '차단여부', align: 'center', width: 130}, { name: 'blckYn', header: '차단여부', align: 'center', width: '19%'},
{ name: 'lastChgDt', header: '마지막 수정일', align: 'center', width: 130}, { name: 'lastChgDt', header: '마지막 수정일', align: 'center', width: '19%'},
{ name: 'blckRsnCd', header: '차단사유', align: 'center', width: 130}, { name: 'blckRsnCd', header: '차단사유', align: 'center', width: '19%'},
{ name: 'regId', header: '등록자', width: 90, cls: 'td_line' } { name: 'regId', header: '등록자', width: '19%', cls: 'td_line' }
], ],
noDataStr: '검색 결과가 없습니다.', noDataStr: '검색 결과가 없습니다.',
params: { params: {
regId: '', regId: '',
blckRsnCd: '', blckRsnCd: '',
word: '', word: '',
seqNo: '' seqNo: '',
blckYn: '',
}, },
excelHeader: [] excelHeader: []
} }
@@ -157,8 +159,6 @@ export default {
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
const getCondition = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
}, },
mounted() { mounted() {

View File

@@ -11,15 +11,15 @@
<div class="search_wrap"> <div class="search_wrap">
<div class="input_box"> <div class="input_box">
<label for="search" class="label">고객사</label> <label for="search" class="label">고객사</label>
<input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.custNm"/> <input class="search-box" type="text" id="search" placeholder="검색어 입력" v-model="grid.params.custNm" v-on:keyup="onlyName" @input="onlyName" maxlength="20"/>
</div> </div>
<div class="input_box"> <div class="input_box">
<label for="search" class="label">인증코드</label> <label for="search" class="label">인증코드</label>
<input class="search-box" type="number" id="search" placeholder="검색어 입력" v-model="grid.params.authcd080"/> <input class="search-box" type="number" id="search" placeholder="검색어 입력" v-model="grid.params.authcd080" v-on:keyup="onlyNum" @input="onlyNum" maxlength="6"/>
</div> </div>
<div class="input_box"> <div class="input_box">
<label for="right" class="label">수신번호</label> <label for="search" class="label">수신번호</label>
<input class="search-box" type="number" id="search" placeholder="검색어 입력" v-model="grid.params.rcvblckno"/> <input class="search-box" type="number" id="search" placeholder="검색어 입력" v-model="grid.params.rcvblckno" v-on:keyup="onlyNum" @input="onlyNum" maxlength="11"/>
</div> </div>
<button type="button" class="button grey" @click="search">조회</button> <button type="button" class="button grey" @click="search">조회</button>
</div> </div>
@@ -57,6 +57,7 @@
<script> <script>
import customGrid from '@/components/CustomGrid'; import customGrid from '@/components/CustomGrid';
import commonModal from "@/components/modal/commonModal"; import commonModal from "@/components/modal/commonModal";
import { utils_mixin, chkPattern2 } from '../service/mixins';
//import api from '../service/api'; //import api from '../service/api';
class CustomATagRenderer { class CustomATagRenderer {
constructor(props) { constructor(props) {
@@ -79,8 +80,28 @@ class CustomATagRenderer {
}); });
} }
} }
class customBRegNo {
constructor(props) {
this.props = props;
const el = document.createElement('td');
var bregNo = String(props.colValue);
el.innerText= bregNo;
if(bregNo.length == 10){
el.innerText= bregNo.substring(0,3)+'-'+bregNo.substring(3,5)+'-'+bregNo.substring(5,10)
}
this.el = el;
}
getElement() {
return this.el;
}
addEvent(selEl) {
}
}
export default { export default {
name: 'intrcpList', name: 'intrcpList',
mixins: [utils_mixin, chkPattern2],
data() { data() {
return { return {
totalItems: 0, totalItems: 0,
@@ -112,18 +133,18 @@ export default {
], ],
columns: [ columns: [
{ name: 'no', header: 'NO', align: 'center', width: 60 }, { name: 'no', header: 'NO', align: 'center', width: '5%' },
{ name: 'custNm', header: '고객사', align: 'center', width: 160, renderer: { { name: 'custNm', header: '고객사', align: 'center', width: '15%', renderer: {
type: CustomATagRenderer type: CustomATagRenderer
, options: { , options: {
callback: this.memberDetail, callback: this.memberDetail,
} }
} }, } },
{ name: 'bizrno', header: '사업자번호', align: 'center', width: 100}, { name: 'bizrno', header: '사업자번호', align: 'center', width: '15%', renderer: {type: customBRegNo}},
{ name: 'authcd080', header: '인증코드', align: 'center', width: 130}, { name: 'authcd080', header: '인증코드', align: 'center', width: '15%'},
{ name: 'rcvblckno', header: '수신번호', align: 'center', width: 130}, { name: 'rcvblckno', header: '수신번호', align: 'center', width: '15%'},
{ name: 'regDt', header: '등록일', align: 'center', width: 130}, { name: 'regDt', header: '등록일', align: 'center', width: '20%'},
{ name: 'regTpCd', header: '등록구분', width: 90, cls: 'td_line' } { name: 'regTpCd', header: '등록구분', width: '15%', cls: 'td_line' }
], ],
noDataStr: '검색 결과가 없습니다.', noDataStr: '검색 결과가 없습니다.',
params: { params: {
@@ -143,8 +164,6 @@ export default {
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
const getCondition = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
}, },
mounted() { mounted() {

View File

@@ -171,8 +171,6 @@ export default {
ApprDetailPop ApprDetailPop
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
}, },
destroyed() { destroyed() {
this.$store.commit('searchcondition/updateSearchCondition', { this.$store.commit('searchcondition/updateSearchCondition', {

View File

@@ -199,8 +199,6 @@ export default {
commonModal, commonModal,
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
const getCondition = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
}, },
destroyed() { destroyed() {

View File

@@ -149,8 +149,6 @@ export default {
}); });
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/istAuthChk", true);
const getCondition = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
}, },

View File

@@ -33,10 +33,8 @@
<div class="info"> <div class="info">
<div class="count"> <span>{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}</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="" v-model="perPageCnt" @change="changePerPage()">
<option value="20">20</option> <option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">{{ option.text }}</option>
<option value="50" selected>50</option>
<option value="100">100</option>
</select> </select>
</div> </div>
@@ -102,9 +100,14 @@ export default {
totalItems: 0, totalItems: 0,
// 테이블 리스트 데이터 // 테이블 리스트 데이터
perPageCnt: 50, perPageCnt: 50,
options: [
{ text: '20', value: 20},
{ text: '50', value: 50},
{ text: '100', value: 100}
],
grid: { grid: {
url: '/api/v1/bo/servMgt/rejectRecvList', url: '/api/v1/bo/servMgt/rejectRecvList',
perPage: 50, pagePerRows: 20,
pagination: true, pagination: true,
isCheckbox: false, isCheckbox: false,
initialRequest: false, initialRequest: false,
@@ -147,8 +150,6 @@ export default {
commonModal commonModal
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
const getCondition = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
}, },
destroyed() { destroyed() {
@@ -198,7 +199,11 @@ export default {
const getCondition = this.$store.getters['searchcondition/getSearchCondition']; const getCondition = this.$store.getters['searchcondition/getSearchCondition'];
//console.log("getCondition : "+ getCondition.perPage); //console.log("getCondition : "+ getCondition.perPage);
} },
changePerPage: function(){ // 페이지당 조회할 개수
this.grid.pagePerRows = this.perPageCnt;
this.search(true);
},
}, },
beforeRouteLeave(to, from, next) { beforeRouteLeave(to, from, next) {

View File

@@ -239,8 +239,6 @@ export default {
vuejsDatepicker, vuejsDatepicker,
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.setPeriodDay(0); this.setPeriodDay(0);
}, },

View File

@@ -247,8 +247,6 @@ export default {
vuejsDatepicker, vuejsDatepicker,
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.setPeriodDay(0); this.setPeriodDay(0);
}, },

View File

@@ -142,8 +142,6 @@ export default {
vuejsDatepicker, vuejsDatepicker,
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
// this.startDt = moment().format('YYYY-MM-DD'); // this.startDt = moment().format('YYYY-MM-DD');
// this.endDt = moment().format('YYYY-MM-DD'); // this.endDt = moment().format('YYYY-MM-DD');
this.setPeriodDay(0); this.setPeriodDay(0);

View File

@@ -151,8 +151,6 @@ export default {
vuejsDatepicker, vuejsDatepicker,
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.setPeriodDay(0); this.setPeriodDay(0);
this.getMonthList(); this.getMonthList();
}, },

View File

@@ -150,8 +150,6 @@ export default {
AdminDetailPop, AdminDetailPop,
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.setCodeData(); this.setCodeData();
//let cont = document.querySelector(".wrap"); //let cont = document.querySelector(".wrap");
//cont.classList.add("main_wrap"); //cont.classList.add("main_wrap");

View File

@@ -50,16 +50,29 @@
</td> </td>
<td class="check"> <td class="check">
<p>유치현황관리</p> <p>유치현황관리</p>
<input type="checkbox" id="right_check2" value="2002" v-model="checkedAuthMenu"> <!-- <input type="checkbox" id="right_check2" value="" v-model="checkedAuthMenu">
<div class="label_group"> <div class="label_group">
<label for="right_check2"></label> <label for="right_check2"></label>
<label for="right_check2">유치채널 현황</label> <label for="right_check2">유치현황관리</label>
</div> </div>
<input type="checkbox" id="right_check3" value="2003" v-model="checkedAuthMenu"> <input type="checkbox" id="right_check3" value="2003" v-model="checkedAuthMenu">
<div class="label_group"> <div class="label_group">
<label for="right_check3"></label> <label for="right_check3"></label>
<label for="right_check3">유치관리자 현황</label> <label for="right_check3">유치관리자 현황</label>
</div> -->
<div class="label_group">
<tr>
<td class="td_radio" >
<input type="radio" name="userStat" value="2002" id="channel_radio1" v-model="channelAuth">
<label for="channel_radio1">유치채널현황</label>
<br/><br/>
<input type="radio" name="userStat" value="2003" id="channel_radio2" v-model="channelAuth">
<label for="channel_radio2">유치현황관리</label>
</td>
</tr>
</div> </div>
</td> </td>
<td class="check"> <td class="check">
<p>서비스관리</p> <p>서비스관리</p>
@@ -196,15 +209,14 @@ export default {
authCd: "", authCd: "",
authDesc: "", authDesc: "",
stat: "01", // 등록화면 상태 Default 값 지정(사용:01) stat: "01", // 등록화면 상태 Default 값 지정(사용:01)
defaultAuthMenu:["2001","2002","2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019"], defaultAuthMenu:["2001","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019"],
checkedAuthMenu:[], checkedAuthMenu:[],
channelAuth: "",
}; };
}, },
components: { components: {
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
//this.setCodeData(); //this.setCodeData();
}, },
destroyed() { destroyed() {
@@ -253,6 +265,10 @@ export default {
var reqAuthMenuArr = this.checkedAuthMenu; var reqAuthMenuArr = this.checkedAuthMenu;
var listArr = []; var listArr = [];
var dataMap = {}; var dataMap = {};
if(this.channelAuth !== ''){
dataMap.menuNo = this.channelAuth;
listArr.push(dataMap);
}
for(var i = 0; i< reqAuthMenuArr.length; i++){ for(var i = 0; i< reqAuthMenuArr.length; i++){
dataMap = {}; dataMap = {};
dataMap.menuNo = reqAuthMenuArr[i]; dataMap.menuNo = reqAuthMenuArr[i];
@@ -295,7 +311,16 @@ export default {
return this.defaultAuthMenu.length === this.checkedAuthMenu.length; return this.defaultAuthMenu.length === this.checkedAuthMenu.length;
}, },
set: function (e) { set: function (e) {
this.checkedAuthMenu = e ? this.defaultAuthMenu : []; //this.checkedAuthMenu = e ? this.defaultAuthMenu : [];
if(e){
this.checkedAuthMenu = this.defaultAuthMenu;
if(this.channelAuth === ''){
this.channelAuth = '2002';
}
} else {
this.checkedAuthMenu = [];
this.channelAuth = '';
}
} }
} }
} }

View File

@@ -38,7 +38,13 @@
<td>{{ option.authNm }}</td> <td>{{ option.authNm }}</td>
<td>{{ option.authStat }}</td> <td>{{ option.authStat }}</td>
<td>{{ option.regDt }}</td> <td>{{ option.regDt }}</td>
<td class="two_btn_group"> <!-- <td v-if="option.authCd !== '1001' && option.authCd !== '1002'" class="two_btn_group">
<button type="button" class="button grey" @click="updateAuth(option.authCd)">수정</button>
<button type="button" class="button white delete" @click="deleteAuth(option.authCd)">삭제</button>
</td> -->
<td v-if="option.authCd === '1001' || option.authCd === '1002'" class="two_btn_group">
</td>
<td v-else class="two_btn_group">
<button type="button" class="button grey" @click="updateAuth(option.authCd)">수정</button> <button type="button" class="button grey" @click="updateAuth(option.authCd)">수정</button>
<button type="button" class="button white delete" @click="deleteAuth(option.authCd)">삭제</button> <button type="button" class="button white delete" @click="deleteAuth(option.authCd)">삭제</button>
</td> </td>
@@ -78,8 +84,6 @@ export default {
components: { components: {
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
this.getAuthList(); this.getAuthList();
}, },
destroyed() { destroyed() {

View File

@@ -50,7 +50,7 @@
</td> </td>
<td class="check"> <td class="check">
<p>유치현황관리</p> <p>유치현황관리</p>
<input type="checkbox" id="right_check2" value="2002" v-model="checkedAuthMenu"> <!-- <input type="checkbox" id="right_check2" value="2002" v-model="checkedAuthMenu">
<div class="label_group"> <div class="label_group">
<label for="right_check2"></label> <label for="right_check2"></label>
<label for="right_check2">유치채널 현황</label> <label for="right_check2">유치채널 현황</label>
@@ -59,6 +59,17 @@
<div class="label_group"> <div class="label_group">
<label for="right_check3"></label> <label for="right_check3"></label>
<label for="right_check3">유치관리자 현황</label> <label for="right_check3">유치관리자 현황</label>
</div> -->
<div class="label_group">
<tr>
<td class="td_radio" >
<input type="radio" name="userStat" value="2002" id="channel_radio1" v-model="channelAuth">
<label for="channel_radio1">유치채널현황</label>
<br/><br/>
<input type="radio" name="userStat" value="2003" id="channel_radio2" v-model="channelAuth">
<label for="channel_radio2">유치현황관리</label>
</td>
</tr>
</div> </div>
</td> </td>
<td class="check"> <td class="check">
@@ -196,8 +207,9 @@ export default {
authCd: "", authCd: "",
authDesc: "", authDesc: "",
stat: "", stat: "",
defaultAuthMenu:["2001","2002","2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019"], defaultAuthMenu:["2001","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019"],
checkedAuthMenu:[], checkedAuthMenu:[],
channelAuth: "",
}; };
}, },
props: { props: {
@@ -209,8 +221,6 @@ export default {
components: { components: {
}, },
created(){ created(){
this.$store.commit("login/isLogin", true);
this.$store.commit("login/isAuthChk", true);
//this.setCodeData(); //this.setCodeData();
this.authDetail(); this.authDetail();
}, },
@@ -274,8 +284,13 @@ export default {
var rsArr = []; var rsArr = [];
for(var i=0; i< dataList.length; i++){ for(var i=0; i< dataList.length; i++){
if(dataList[i].upperMenuNo != null || dataList[i].upperMenuNo != ""){ if(dataList[i].upperMenuNo != null || dataList[i].upperMenuNo != ""){
if(dataList[i].menuNo === '2002' || dataList[i].menuNo === '2003'){
this.channelAuth = dataList[i].menuNo;
} else {
this.checkedAuthMenu.push(dataList[i].menuNo); this.checkedAuthMenu.push(dataList[i].menuNo);
} }
}
} }
} else { } else {
@@ -291,6 +306,10 @@ export default {
var reqAuthMenuArr = this.checkedAuthMenu; var reqAuthMenuArr = this.checkedAuthMenu;
var listArr = []; var listArr = [];
var dataMap = {}; var dataMap = {};
if(this.channelAuth !== ''){
dataMap.menuNo = this.channelAuth;
listArr.push(dataMap);
}
for(var i = 0; i< reqAuthMenuArr.length; i++){ for(var i = 0; i< reqAuthMenuArr.length; i++){
dataMap = {}; dataMap = {};
dataMap.menuNo = reqAuthMenuArr[i]; dataMap.menuNo = reqAuthMenuArr[i];
@@ -329,7 +348,16 @@ export default {
return this.defaultAuthMenu.length === this.checkedAuthMenu.length; return this.defaultAuthMenu.length === this.checkedAuthMenu.length;
}, },
set: function (e) { set: function (e) {
this.checkedAuthMenu = e ? this.defaultAuthMenu : []; //this.checkedAuthMenu = e ? this.defaultAuthMenu : [];
if(e){
this.checkedAuthMenu = this.defaultAuthMenu;
if(this.channelAuth === ''){
this.channelAuth = '2002';
}
} else {
this.checkedAuthMenu = [];
this.channelAuth = '';
}
} }
} }
} }

View File

@@ -2,6 +2,7 @@ import Vue from 'vue'
import Vuex from 'vuex' import Vuex from 'vuex'
import searchcondition from './store/search-condition' import searchcondition from './store/search-condition'
import login from './modules/login/store/index' import login from './modules/login/store/index'
import createPersistedState from 'vuex-persistedstate';
Vue.use(Vuex) Vue.use(Vuex)
@@ -9,5 +10,6 @@ export default new Vuex.Store({
modules: { modules: {
searchcondition, searchcondition,
login login
} },
plugins: [createPersistedState({ paths: ["login"] })],
}) })

View File

@@ -1,6 +1,6 @@
<template> <template>
<body> <body>
<div class="wrap" v-bind:class="{'main_wrap': (isLogin && isAuthChk), 'login-wrap': (!isLogin && !isAuthChk), 'bg-wrap': (isLogin && !isAuthChk) }" > <div class="wrap" v-bind:class="{'main_wrap': (isAuthChk), 'login-wrap': (!isLogin && !isAuthChk), 'bg-wrap': (isLogin && !isAuthChk) }" >
<hub-web-header v-if="isAuthChk == true"></hub-web-header> <hub-web-header v-if="isAuthChk == true"></hub-web-header>
<nav-bar v-if="isAuthChk == true"></nav-bar> <nav-bar v-if="isAuthChk == true"></nav-bar>
<router-view :key="$route.fullPath"></router-view> <router-view :key="$route.fullPath"></router-view>
@@ -39,11 +39,12 @@ export default {
} }
}, },
created() { created() {
this.getLogin; // this.getLogin;
this.getAuthChk; // this.getAuthChk;
}, },
mounted() { mounted() {
this.isLogin = this.$store.getters["login/isLogin"]
this.isAuthChk = this.$store.getters["login/isAuthChk"]
} }
,computed: { ,computed: {
...mapGetters({ ...mapGetters({

View File

@@ -4,7 +4,7 @@ module.exports = {
? '../src/main/resources/templates' : 'dist', // html, ico 파일 저장 ? '../src/main/resources/templates' : 'dist', // html, ico 파일 저장
assetsDir: process.env.NODE_ENV === 'production' assetsDir: process.env.NODE_ENV === 'production'
? '../static' : '', // css, img, js 저장. outputDir에 대한 상대 경로 ? '../static' : '', // css, img, js 저장. outputDir에 대한 상대 경로
lintOnSave: false,
/** /**
* /api/** 요청은 backend 서버로 전달한다. * /api/** 요청은 backend 서버로 전달한다.
* 이 설정이 없으면 axios에서 baseURL 설정하고 backend에서는 cors 설정 해야한다. * 이 설정이 없으면 axios에서 baseURL 설정하고 backend에서는 cors 설정 해야한다.

View File

@@ -15,6 +15,9 @@ import kr.co.uplus.ez.api.channelMgt.dto.TmpltListResDto;
import kr.co.uplus.ez.common.components.ValidComponents; import kr.co.uplus.ez.common.components.ValidComponents;
import kr.co.uplus.ez.common.data.ApiResponseCode; import kr.co.uplus.ez.common.data.ApiResponseCode;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -49,7 +52,10 @@ public class ChannelMgtController {
return new TmpltListResDto(ApiResponseCode.CM_PARAMETER_ERROR); return new TmpltListResDto(ApiResponseCode.CM_PARAMETER_ERROR);
} }
return channelService.tmpltList(tmpltListReqDto); Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String userId = auth.getName();
return channelService.tmpltList(tmpltListReqDto, userId);
} }
/** /**
@@ -70,6 +76,9 @@ public class ChannelMgtController {
return new TmpltListExcelResDto(ApiResponseCode.CM_PARAMETER_ERROR); return new TmpltListExcelResDto(ApiResponseCode.CM_PARAMETER_ERROR);
} }
return channelService.tmpltListExcel(tmpltListExcelReqDto); Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String userId = auth.getName();
return channelService.tmpltListExcel(tmpltListExcelReqDto, userId);
} }
} }

View File

@@ -16,4 +16,6 @@ public interface ChannelMgtMapper {
List<TmpltInfo> selectTmpltList(TmpltListReqDto tmpltListReqDto); List<TmpltInfo> selectTmpltList(TmpltListReqDto tmpltListReqDto);
List<TmpltInfo> selectTmpltListExcel(TmpltListExcelReqDto tmpltListExcelReqDto); List<TmpltInfo> selectTmpltListExcel(TmpltListExcelReqDto tmpltListExcelReqDto);
String selectChannelAuthMenuNo(String targetUserId);
} }

View File

@@ -33,11 +33,15 @@ public class ChannelMgtService {
* @param tmpltListReqDto * @param tmpltListReqDto
* @return * @return
*/ */
public TmpltListResDto tmpltList(TmpltListReqDto tmpltListReqDto) { public TmpltListResDto tmpltList(TmpltListReqDto tmpltListReqDto, String targetUserId) {
ChannelMgtMapper channelMgtMapper = sqlSessionSlave.getMapper(ChannelMgtMapper.class); ChannelMgtMapper channelMgtMapper = sqlSessionSlave.getMapper(ChannelMgtMapper.class);
String nowPage = String.valueOf(tmpltListReqDto.getPage()); String nowPage = String.valueOf(tmpltListReqDto.getPage());
int totalCnt = channelMgtMapper.selectTmpltTotalCnt(tmpltListReqDto);
String channelAuthMenuNo = channelMgtMapper.selectChannelAuthMenuNo(targetUserId);
tmpltListReqDto.setChannelAuthMenuNo(channelAuthMenuNo);
tmpltListReqDto.setUserId(targetUserId);
int totalCnt = channelMgtMapper.selectTmpltTotalCnt(tmpltListReqDto);
if(totalCnt == 0) { if(totalCnt == 0) {
Paging paging = new Paging(); Paging paging = new Paging();
@@ -68,36 +72,16 @@ public class ChannelMgtService {
} }
// //
public TmpltListExcelResDto tmpltListExcel(TmpltListExcelReqDto tmpltListExcelReqDto) { public TmpltListExcelResDto tmpltListExcel(TmpltListExcelReqDto tmpltListExcelReqDto, String targetUserId) {
ChannelMgtMapper channelMgtMapper = sqlSessionSlave.getMapper(ChannelMgtMapper.class); ChannelMgtMapper channelMgtMapper = sqlSessionSlave.getMapper(ChannelMgtMapper.class);
//String nowPage = String.valueOf(tmpltListReqDto.getPage()); String channelAuthMenuNo = channelMgtMapper.selectChannelAuthMenuNo(targetUserId);
// int totalCnt = channelMgtMapper.selectTmpltTotalCnt(tmpltListReqDto); tmpltListExcelReqDto.setChannelAuthMenuNo(channelAuthMenuNo);
// tmpltListExcelReqDto.setUserId(targetUserId);
//
// if(totalCnt == 0) {
// Paging paging = new Paging();
// paging.setPage(nowPage);
// paging.setTotalCnt(String.valueOf(totalCnt));
// TmpltListRes tmpltListRes = new TmpltListRes();
// tmpltListRes.setList(new ArrayList<>());
// tmpltListRes.setPaging(paging);
// return new TmpltListResDto(ApiResponseCode.CM_NOT_FOUND, tmpltListRes);
// }
// logger.info("perPage : "+tmpltListReqDto.getPagePerRows());
// int page = tmpltListReqDto.getPage();
// int pagePerRows = tmpltListReqDto.getPagePerRows();
// page = (page -1) * pagePerRows;
// tmpltListReqDto.setPage(page);
List<TmpltInfo> tmpltInfos = channelMgtMapper.selectTmpltListExcel(tmpltListExcelReqDto); List<TmpltInfo> tmpltInfos = channelMgtMapper.selectTmpltListExcel(tmpltListExcelReqDto);
// Paging paging = new Paging();
// paging.setPage(nowPage);
// paging.setTotalCnt(String.valueOf(totalCnt));
//
TmpltListRes tmpltListRes = new TmpltListRes(); TmpltListRes tmpltListRes = new TmpltListRes();
tmpltListRes.setList(tmpltInfos); tmpltListRes.setList(tmpltInfos);
// tmpltListRes.setPaging(paging);
return new TmpltListExcelResDto(ApiResponseCode.SUCCESS, tmpltListRes); return new TmpltListExcelResDto(ApiResponseCode.SUCCESS, tmpltListRes);
} }

View File

@@ -17,4 +17,7 @@ public class TmpltListExcelReqDto implements Serializable {
@ApiModelProperty(example = "검색어(입력)", name = "검색어(입력)", dataType = "String") @ApiModelProperty(example = "검색어(입력)", name = "검색어(입력)", dataType = "String")
private String searchText1; private String searchText1;
private String channelAuthMenuNo;
private String userId;
} }

View File

@@ -25,4 +25,7 @@ public class TmpltListReqDto implements Serializable {
@NotNull @NotNull
@ApiModelProperty(example = "현재 페이지", name = "현재 페이지", dataType = "int") @ApiModelProperty(example = "현재 페이지", name = "현재 페이지", dataType = "int")
private int page; private int page;
private String channelAuthMenuNo;
private String userId;
} }

View File

@@ -1,35 +1,12 @@
package kr.co.uplus.ez.api.custMgt; package kr.co.uplus.ez.api.custMgt;
import kr.co.uplus.ez.api.custMgt.dto.*;
import kr.co.uplus.ez.common.data.ImUser;
import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import kr.co.uplus.ez.api.custMgt.dto.AllMemoList;
import kr.co.uplus.ez.api.custMgt.dto.AllMemoListReqDto;
import kr.co.uplus.ez.api.custMgt.dto.CarryOver;
import kr.co.uplus.ez.api.custMgt.dto.CarryOverListReqDto;
import kr.co.uplus.ez.api.custMgt.dto.CustInfo;
import kr.co.uplus.ez.api.custMgt.dto.DeleteUserReqDto;
import kr.co.uplus.ez.api.custMgt.dto.InsertUserReqDto;
import kr.co.uplus.ez.api.custMgt.dto.MemberAdminDetailReqDto;
import kr.co.uplus.ez.api.custMgt.dto.MemberAdminDetailRes;
import kr.co.uplus.ez.api.custMgt.dto.MemberDetail;
import kr.co.uplus.ez.api.custMgt.dto.MemberDetailReqDto;
import kr.co.uplus.ez.api.custMgt.dto.MemberDetailRes;
import kr.co.uplus.ez.api.custMgt.dto.MemberList;
import kr.co.uplus.ez.api.custMgt.dto.MemberListReqDto;
import kr.co.uplus.ez.api.custMgt.dto.SubsDetail;
import kr.co.uplus.ez.api.custMgt.dto.SubsDetailReqDto;
import kr.co.uplus.ez.api.custMgt.dto.SubsInfo;
import kr.co.uplus.ez.api.custMgt.dto.SubsList;
import kr.co.uplus.ez.api.custMgt.dto.SubsListExcelReqDto;
import kr.co.uplus.ez.api.custMgt.dto.SubsListReqDto;
import kr.co.uplus.ez.api.custMgt.dto.SvcUserInfo;
import kr.co.uplus.ez.api.custMgt.dto.UpdateAdminInfoTotalReqDto;
import kr.co.uplus.ez.api.custMgt.dto.UpdateUserReqDto;
import kr.co.uplus.ez.common.data.ImUser;
@Mapper @Mapper
public interface CustMgtMapper { public interface CustMgtMapper {
@@ -102,4 +79,11 @@ public interface CustMgtMapper {
Map<String, Object> selectAdminSendingLimt(Map<String, Object> paramMap); Map<String, Object> selectAdminSendingLimt(Map<String, Object> paramMap);
SvcUserInfo selectSvcUserInfo(String userId); SvcUserInfo selectSvcUserInfo(String userId);
String selectApiAuthToken(String apiApplicationId);
String getSubId();
String getEntrNo();
} }

View File

@@ -1,6 +1,7 @@
package kr.co.uplus.ez.api.custMgt; package kr.co.uplus.ez.api.custMgt;
import kr.co.uplus.ez.api.custMgt.dto.*; import kr.co.uplus.ez.api.custMgt.dto.*;
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;
@@ -31,6 +32,9 @@ public class CustMgtService {
@Qualifier("sqlSessionTemplateDb2") @Qualifier("sqlSessionTemplateDb2")
private SqlSessionTemplate sqlSessionSlave; private SqlSessionTemplate sqlSessionSlave;
@Autowired
private HubeasyApiComponents hubeasyApi;
/** 요금제. */ /** 요금제. */
@Value("${testId.prodCd}") @Value("${testId.prodCd}")
private String prodCd; private String prodCd;
@@ -62,6 +66,18 @@ public class CustMgtService {
@Value("${testId.custTyCd}") @Value("${testId.custTyCd}")
private String custTyCd; private String custTyCd;
@Value("${msghubez.homepage-url:https://mhez.uplus.co.kr}")
private String mailTempleteHomeUrl;
@Value("${msghubez.applicationId:EZ_ADMIN}")
private String apiApplicationId;
@Value("${mail.from:msghubez@lguplus.co.kr}")
private String fromEmail;
@Value("${mail.templeteCode:E0005}")
private String templeteCode;
/** /**
* date : 2022. 4. 25. auth : ckr desc : 청약 고객 정보 목록 조회 * date : 2022. 4. 25. auth : ckr desc : 청약 고객 정보 목록 조회
* *
@@ -408,10 +424,10 @@ public class CustMgtService {
// 3. 청약정보 등록 // 3. 청약정보 등록
SubsInfo subsInfo = new SubsInfo(); SubsInfo subsInfo = new SubsInfo();
// TODO 향후 수정 필요. String subId = custMgtMapper.getSubId();
subsInfo.setSubsId(""); subsInfo.setSubsId(subId);
// TODO 향후 수정 필요. String entrNo =custMgtMapper.getEntrNo();
subsInfo.setUqvSbscNo(""); subsInfo.setEntrNo(entrNo);
subsInfo.setUserSeq(userSeq); subsInfo.setUserSeq(userSeq);
subsInfo.setCustSeq(custSeq); subsInfo.setCustSeq(custSeq);
subsInfo.setSubsSttusCd(Const.SUBS_STTUS_CD_NORMAL); subsInfo.setSubsSttusCd(Const.SUBS_STTUS_CD_NORMAL);
@@ -493,12 +509,13 @@ public class CustMgtService {
*/ */
public InsertUserResDto insertUser(InsertUserReqDto insertUserReqDto) { public InsertUserResDto insertUser(InsertUserReqDto insertUserReqDto) {
CustMgtMapper custMgtMapper = sqlSessionMaster.getMapper(CustMgtMapper.class); CustMgtMapper custMgtMapper = sqlSessionMaster.getMapper(CustMgtMapper.class);
Map<Object,Object> mailReqMap = new HashMap<Object,Object>();
Map<Object,Object> mailResultMap = new HashMap<Object,Object>();
// 임시패스워드 평문 생성 // 임시패스워드 평문 생성
String imsiPw = RandomStringUtils.randomAlphanumeric(10); String imsiPw = RandomStringUtils.randomAlphanumeric(10);
String userId = insertUserReqDto.getUserId(); String userId = insertUserReqDto.getUserId();
String encPwd = "";
int userCnt = 0; int userCnt = 0;
try { try {
@@ -508,16 +525,47 @@ public class CustMgtService {
} }
// 패스워드 암호화 // 패스워드 암호화
encPwd = EncryptionUtil.getCustomSHA512(userId, imsiPw); String encPwd = EncryptionUtil.getCustomSHA512(userId, imsiPw);
insertUserReqDto.setUserPw(encPwd); insertUserReqDto.setUserPw(encPwd);
// 사용자 정보 등록 // 사용자 정보 등록
custMgtMapper.insertUserInfo(insertUserReqDto); custMgtMapper.insertUserInfo(insertUserReqDto);
// API authToken 조회
String apiAuthToken = custMgtMapper.selectApiAuthToken(apiApplicationId);
// 임시패스워드(평문) 이메일 발송처리 // 임시패스워드(평문) 이메일 발송처리
// TODO: 임시패스워드(평문) 이메일 발송처리 mailReqMap.put("applicationId", apiApplicationId);
mailReqMap.put("authToken", apiAuthToken);
mailReqMap.put("userId", userId);
mailReqMap.put("tmpPwd", imsiPw);
mailReqMap.put("toEmail", insertUserReqDto.getUserEmail());
mailReqMap.put("fromEmail", fromEmail);
mailReqMap.put("templeteCode", templeteCode);
mailReqMap.put("homeUrl", mailTempleteHomeUrl);
logger.debug("############## [Email Send Start] ###############");
logger.debug("[Email Send Request - applicationId : {}]", mailReqMap.get("applicationId"));
logger.debug("[Email Send Request - authToken : {}]", mailReqMap.get("authToken"));
logger.debug("[Email Send Request - userId : {}]", mailReqMap.get("userId"));
logger.debug("[Email Send Request - tmpPwd : {}]", mailReqMap.get("tmpPwd"));
logger.debug("[Email Send Request - toEmail : {}]", mailReqMap.get("toEmail"));
logger.debug("[Email Send Request - fromEmail : {}]", mailReqMap.get("fromEmail"));
logger.debug("[Email Send Request - templeteCode : {}]", mailReqMap.get("templeteCode"));
logger.debug("[Email Send Request - homeUrl : {}]", mailReqMap.get("homeUrl"));
mailResultMap = hubeasyApi.sendTemplateMailApi(mailReqMap);
if(mailResultMap != null) {
logger.debug("[Email Send API RESULT : {}]", mailResultMap.get("API_RSLT"));
if("F".equals(mailResultMap.get("API_RSLT"))) {
logger.debug("[Email Send API ERROR : {}]", mailResultMap.get("API_RSLT_MSG"));
}
}
logger.debug("############## [Email Send End] ###############");
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage());
return new InsertUserResDto(ApiResponseCode.CM_DB_QUERY_ERR); return new InsertUserResDto(ApiResponseCode.CM_DB_QUERY_ERR);
} }
@@ -545,8 +593,6 @@ public class CustMgtService {
// 사용자 정보 수정 // 사용자 정보 수정
custMgtMapper.updateUserInfo(updateUserReqDto); custMgtMapper.updateUserInfo(updateUserReqDto);
// 임시패스워드(평문) 이메일 발송처리
// TODO: 임시패스워드(평문) 이메일 발송처리
} catch (Exception e) { } catch (Exception e) {
return new UpdateUserResDto(ApiResponseCode.CM_DB_QUERY_ERR); return new UpdateUserResDto(ApiResponseCode.CM_DB_QUERY_ERR);
@@ -591,6 +637,11 @@ public class CustMgtService {
} }
} }
// 이메일발송 API 사용을 위한 authToken 조회
String apiAuthToken = custMgtMapper.selectApiAuthToken(apiApplicationId);
Map<Object, Object> mailReqMap = new HashMap<Object, Object>();
Map<Object, Object> mailResultMap = new HashMap<Object, Object>();
InsertMassUserRes insertMassUserRes = new InsertMassUserRes(); InsertMassUserRes insertMassUserRes = new InsertMassUserRes();
int successCnt = 0; int successCnt = 0;
for (int j = 0; j < insertMassUsers.size(); j++) { for (int j = 0; j < insertMassUsers.size(); j++) {
@@ -622,6 +673,40 @@ public class CustMgtService {
custMgtMapper.insertSvcUserInfo(svcUserInfo2); custMgtMapper.insertSvcUserInfo(svcUserInfo2);
successCnt++; successCnt++;
// 임시비밀번호 이메일발송
mailReqMap = new HashMap<Object, Object>();
mailResultMap = new HashMap<Object, Object>();
mailReqMap.put("applicationId", apiApplicationId);
mailReqMap.put("authToken", apiAuthToken);
mailReqMap.put("userId", userId);
mailReqMap.put("tmpPwd", imsiPw);
mailReqMap.put("toEmail", insertMassUsers.get(j).getEmail());
mailReqMap.put("fromEmail", fromEmail);
mailReqMap.put("templeteCode", templeteCode);
mailReqMap.put("homeUrl", mailTempleteHomeUrl);
logger.debug("############## [Email Send Start] ###############");
logger.debug("[Email Send Request - applicationId : {}]", mailReqMap.get("applicationId"));
logger.debug("[Email Send Request - authToken : {}]", mailReqMap.get("authToken"));
logger.debug("[Email Send Request - userId : {}]", mailReqMap.get("userId"));
logger.debug("[Email Send Request - tmpPwd : {}]", mailReqMap.get("tmpPwd"));
logger.debug("[Email Send Request - toEmail : {}]", mailReqMap.get("toEmail"));
logger.debug("[Email Send Request - fromEmail : {}]", mailReqMap.get("fromEmail"));
logger.debug("[Email Send Request - templeteCode : {}]", mailReqMap.get("templeteCode"));
logger.debug("[Email Send Request - homeUrl : {}]", mailReqMap.get("homeUrl"));
mailResultMap = hubeasyApi.sendTemplateMailApi(mailReqMap);
if(mailResultMap != null) {
logger.debug("[Email Send API RESULT : {}]", mailResultMap.get("API_RSLT"));
if("F".equals(mailResultMap.get("API_RSLT"))) {
logger.debug("[Email Send API ERROR : {}]", mailResultMap.get("API_RSLT_MSG"));
}
}
logger.debug("############## [Email Send End] ###############");
} catch (Exception e) { } catch (Exception e) {
errInsertMassUsers.add(insertMassUsers.get(j)); errInsertMassUsers.add(insertMassUsers.get(j));
} }

View File

@@ -19,4 +19,6 @@ public class CarryOver implements Serializable {
private String krrrAmount; private String krrrAmount;
@ApiModelProperty(example = "소멸금액", name = "소멸금액", dataType = "String") @ApiModelProperty(example = "소멸금액", name = "소멸금액", dataType = "String")
private String extshAmount; private String extshAmount;
private String colecTms;
} }

View File

@@ -1,9 +1,9 @@
package kr.co.uplus.ez.api.custMgt.dto; package kr.co.uplus.ez.api.custMgt.dto;
import java.io.Serializable;
import lombok.Data; import lombok.Data;
import java.io.Serializable;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Data @Data
public class SubsInfo implements Serializable{ public class SubsInfo implements Serializable{
@@ -11,7 +11,7 @@ public class SubsInfo implements Serializable{
/** 청약_ID . */ /** 청약_ID . */
private String subsId; private String subsId;
/** 유큐브_가입_번호 */ /** 유큐브_가입_번호 */
private String uqvSbscNo; private String entrNo;
/** 관리자_일련번호. */ /** 관리자_일련번호. */
private String userSeq; private String userSeq;
/** 고객_일련번호 . */ /** 고객_일련번호 . */

View File

@@ -142,7 +142,13 @@ public class LoginController {
String nextUrl = getReturnUrl(request, response); String nextUrl = getReturnUrl(request, response);
logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl); logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl);
ChkAuthNumResDto result = new ChkAuthNumResDto(ApiResponseCode.SUCCESS, new LoginRes(SecurityConfig.LOGIN_SUCC_URL)); AuthUser authUser = loginService.getUser(authentication.getName());
LoginRes loginRes = new LoginRes(SecurityConfig.LOGIN_SUCC_URL);
loginRes.setUserId(authUser.getOprtrId());
loginRes.setUserNm(authUser.getOprtrNm());
ChkAuthNumResDto result = new ChkAuthNumResDto(ApiResponseCode.SUCCESS, loginRes);
return result; return result;
} }
} }
@@ -159,7 +165,13 @@ public class LoginController {
String nextUrl = getReturnUrl(request, response); String nextUrl = getReturnUrl(request, response);
logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl); logger.debug("login SUCCESS - nextUrl = [{}]", nextUrl);
ChkAuthNumResDto result = new ChkAuthNumResDto(rCode, new LoginRes(SecurityConfig.LOGIN_SUCC_URL)); AuthUser authUser = loginService.getUser(authentication.getName());
LoginRes loginRes = new LoginRes(SecurityConfig.LOGIN_SUCC_URL);
loginRes.setUserId(authUser.getOprtrId());
loginRes.setUserNm(authUser.getOprtrNm());
ChkAuthNumResDto result = new ChkAuthNumResDto(rCode, loginRes);
return result; return result;
}else { }else {
ChkAuthNumResDto result = new ChkAuthNumResDto(rCode); ChkAuthNumResDto result = new ChkAuthNumResDto(rCode);

View File

@@ -1,12 +1,12 @@
package kr.co.uplus.ez.api.login; package kr.co.uplus.ez.api.login;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import kr.co.uplus.ez.api.login.dto.AuthNum; import kr.co.uplus.ez.api.login.dto.AuthNum;
import kr.co.uplus.ez.api.login.dto.AuthUser; import kr.co.uplus.ez.api.login.dto.AuthUser;
import kr.co.uplus.ez.api.login.dto.SendMsgDto;
import kr.co.uplus.ez.api.login.dto.SmsAuthNum; import kr.co.uplus.ez.api.login.dto.SmsAuthNum;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper @Mapper
public interface LoginMapper { public interface LoginMapper {
@@ -30,4 +30,6 @@ public interface LoginMapper {
// 관리자 정보 수정. // 관리자 정보 수정.
int updateAdmUser(AuthUser authUser); int updateAdmUser(AuthUser authUser);
void insertSendMsg(SendMsgDto sendMsgDto);
} }

View File

@@ -1,7 +1,12 @@
package kr.co.uplus.ez.api.login; package kr.co.uplus.ez.api.login;
import java.util.List; import kr.co.uplus.ez.api.login.dto.*;
import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.data.Const;
import kr.co.uplus.ez.common.utils.DateUtils;
import kr.co.uplus.ez.common.utils.EncryptionUtil;
import kr.co.uplus.ez.common.utils.TextUtils;
import kr.co.uplus.ez.config.SecurityConfig;
import org.apache.commons.codec.binary.StringUtils; import org.apache.commons.codec.binary.StringUtils;
import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomStringUtils;
import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.SqlSessionTemplate;
@@ -12,23 +17,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import kr.co.uplus.ez.api.login.dto.AuthNum; import java.util.List;
import kr.co.uplus.ez.api.login.dto.AuthNumReqDto;
import kr.co.uplus.ez.api.login.dto.AuthNumResDto;
import kr.co.uplus.ez.api.login.dto.AuthUser;
import kr.co.uplus.ez.api.login.dto.ChkAuthNumReqDto;
import kr.co.uplus.ez.api.login.dto.LoginReqDto;
import kr.co.uplus.ez.api.login.dto.LoginRes;
import kr.co.uplus.ez.api.login.dto.LoginResDto;
import kr.co.uplus.ez.api.login.dto.ResetPasswordReqDto;
import kr.co.uplus.ez.api.login.dto.ResetPasswordResDto;
import kr.co.uplus.ez.api.login.dto.UpdatePasswordReqDto;
import kr.co.uplus.ez.api.login.dto.UpdatePasswordResDto;
import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.data.Const;
import kr.co.uplus.ez.common.utils.EncryptionUtil;
import kr.co.uplus.ez.common.utils.TextUtils;
import kr.co.uplus.ez.config.SecurityConfig;
@Service @Service
public class LoginService { public class LoginService {
@@ -160,7 +149,13 @@ public class LoginService {
loginMapper.addAuthNum(anum); loginMapper.addAuthNum(anum);
// 문자발송 // 문자발송
// TODO -> hubez_send.EZ_MSG_REAL 등록 필요. String clientKey = DateUtils.date2strYMDHMS() + "AD" + RandomStringUtils.randomAlphanumeric(8);
SendMsgDto sendMsgDto = new SendMsgDto();
sendMsgDto.setClientKey(clientKey);
sendMsgDto.setMsg("인증 번호는 [" + authNum + "] 입니다.");
sendMsgDto.setPhone(user.getHpNo());
loginMapper.insertSendMsg(sendMsgDto);
return new AuthNumResDto(); return new AuthNumResDto();
@@ -254,7 +249,13 @@ public class LoginService {
} }
// 4. 임시 비밀번호 문자발송 // 4. 임시 비밀번호 문자발송
// TODO -> hubez_send.EZ_MSG_REAL 등록 필요. String clientKey = DateUtils.date2strYMDHMS() + "AD" + RandomStringUtils.randomAlphanumeric(8);
SendMsgDto sendMsgDto = new SendMsgDto();
sendMsgDto.setClientKey(clientKey);
sendMsgDto.setMsg("[U+메시지허브이지] \n임시 비밀번호 안내 : " + randomPw + "\n로그인 후, 비밀번호 변경해주세요.\n");
sendMsgDto.setPhone(user.getHpNo());
loginMapper.insertSendMsg(sendMsgDto);
return new ResetPasswordResDto(); return new ResetPasswordResDto();
} }

View File

@@ -1,10 +1,10 @@
package kr.co.uplus.ez.api.login.dto; package kr.co.uplus.ez.api.login.dto;
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Data @Data
public class LoginRes implements Serializable { public class LoginRes implements Serializable {
@@ -12,6 +12,12 @@ public class LoginRes implements Serializable {
@ApiModelProperty(name = "메인 URL", example = "메인 URL", dataType = "String") @ApiModelProperty(name = "메인 URL", example = "메인 URL", dataType = "String")
private String nextUrl; private String nextUrl;
@ApiModelProperty(name = "사용자ID", example = "사용자ID", dataType = "String")
private String userId;
@ApiModelProperty(name = "사용자명", example = "사용자명", dataType = "String")
private String userNm;
public LoginRes(String nextUrl) { public LoginRes(String nextUrl) {
super(); super();

View File

@@ -0,0 +1,12 @@
package kr.co.uplus.ez.api.login.dto;
import lombok.Data;
// 인증문자
@Data
public class SendMsgDto {
private String clientKey; // 클라이언트키
private String msg; // 발송 메시지
private String phone; // 수신번호
}

View File

@@ -0,0 +1,77 @@
package kr.co.uplus.ez.common.components;
import java.util.HashMap;
import java.util.Map;
import org.json.simple.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.client.MultipartBodyBuilder;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
@Component
public class HubeasyApiComponents {
private static final Logger log = LoggerFactory.getLogger(HubeasyApiComponents.class);
@Autowired
private WebClientRequestService clientRequestService;
@Value("${msghubez.api-url:http://localhost:7070}")
private String apiDomain;
@Value("${msghubez.uri.sendTemplateMail:/api/v1/fo/sendTemplateMail}")
private String apiSendTemplateMail;
@SuppressWarnings("unchecked")
public Map<Object, Object> sendTemplateMailApi(Map<Object, Object> apiReqMap) {
Map<Object, Object> apiResultMap = new HashMap<Object, Object>();
JSONObject jsonObject = new JSONObject();
String callUrl = apiDomain + apiSendTemplateMail;
String applicationId = (String) apiReqMap.get("applicationId");
String authToken = (String) apiReqMap.get("authToken");
jsonObject.put("userId", apiReqMap.get("userId"));
jsonObject.put("tmpPwd", apiReqMap.get("tmpPwd"));
jsonObject.put("homeUrl", apiReqMap.get("homeUrl"));
String jsonString = jsonObject.toString();
MultipartBodyBuilder builder = new MultipartBodyBuilder();
builder.part("fromEmail", apiReqMap.get("fromEmail"));
builder.part("toEmail", apiReqMap.get("toEmail"));
builder.part("templeteCode", apiReqMap.get("templeteCode"));
builder.part("templeteReplace", jsonString);
MultiValueMap<String, HttpEntity<?>> parts = builder.build();
try {
apiResultMap = (Map<Object, Object>) clientRequestService.callBySyncPostWithTokenMultipart(callUrl, applicationId, authToken, parts);
if(apiResultMap == null) {
apiResultMap.put("API_RSLT", "F");
apiResultMap.put("API_RSLT_MSG", "API Result Recive null error");
} else {
if("0000".equals(apiResultMap.get("retCode"))) {
apiResultMap.put("API_RSLT", "S");
} else {
apiResultMap.put("API_RSLT", "F");
apiResultMap.put("API_RSLT_MSG", apiResultMap.get("retMsg"));
}
}
} catch(Exception e) {
apiResultMap.put("API_RSLT", "F");
apiResultMap.put("API_RSLT_MSG", e.getMessage());
}
return apiResultMap;
}
}

View File

@@ -7,6 +7,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
@@ -40,6 +41,34 @@ public class WebClientRequestService {
return result; return result;
} }
public Object callBySyncPostWithToken(String uri, String applicationId, String token, Object param) {
LinkedMultiValueMap<Object, Object> reqHearderMap = new LinkedMultiValueMap<Object, Object>();
reqHearderMap.add("ApplicationId", applicationId);
reqHearderMap.add("AuthToken", token);
Date startTime = new Date();
log.info(param.toString());
Object result = webClient.mutate().defaultHeaders(this.setHttpHeader(reqHearderMap)).build().post().uri(uri)
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(param).retrieve()
.bodyToMono(Object.class).block();
log.info("callBySyncPostWithToken duration Time : {}", (new Date().getTime() - startTime.getTime()) / 1000f);
return result;
}
public Object callBySyncPostWithTokenMultipart(String uri, String applicationId, String token, Object param) {
LinkedMultiValueMap<Object, Object> reqHearderMap = new LinkedMultiValueMap<Object, Object>();
reqHearderMap.add("ApplicationId", applicationId);
reqHearderMap.add("AuthToken", token);
Date startTime = new Date();
log.info(param.toString());
Object result = webClient.mutate().defaultHeaders(this.setHttpHeader(reqHearderMap)).build().post().uri(uri)
.contentType(MediaType.MULTIPART_FORM_DATA)
.bodyValue(param).retrieve()
.bodyToMono(Object.class).block();
log.info("callBySyncPostWithToken duration Time : {}", (new Date().getTime() - startTime.getTime()) / 1000f);
return result;
}
/** /**
* 헤더 추가. * 헤더 추가.

View File

@@ -37,6 +37,18 @@ authentication:
without: without:
id: superadminuser,jambler01,jambler02,jambler03,jambler04,jambler05,jambler06 id: superadminuser,jambler01,jambler02,jambler03,jambler04,jambler05,jambler06
mail:
from: msghubez@lguplus.co.kr
templeteCode: E0005
msghubez:
homepage-url: https://mhez-dev.uplus.co.kr
api-url: https://api-int.mhez-dev.uplus.co.kr
applicationId: EZ_ADMIN
uri:
sendTemplateMail: /api/v1/fo/sendTemplateMail
testId: testId:
prodCd: LPZ0045389 prodCd: LPZ0045389
rpsnBday: 19800101 rpsnBday: 19800101

View File

@@ -37,6 +37,16 @@ authentication:
without: without:
id: jambler01,jambler02,jambler03,jambler04,jambler05,jambler06 id: jambler01,jambler02,jambler03,jambler04,jambler05,jambler06
mail:
from: msghubez@lguplus.co.kr
templeteCode: E0005
msghubez:
homepage-url: https://mhez-dev.uplus.co.kr
api-url: https://localhost:7071
applicationId: EZ_ADMIN
uri:
sendTemplateMail: /api/v1/fo/sendTemplateMail
testId: testId:
prodCd: LPZ0045389 prodCd: LPZ0045389

View File

@@ -37,6 +37,17 @@ authentication:
without: without:
id: superadminuser,jambler01,jambler02,jambler03,jambler04,jambler05,jambler06 id: superadminuser,jambler01,jambler02,jambler03,jambler04,jambler05,jambler06
mail:
from: msghubez@lguplus.co.kr
templeteCode: E0005
msghubez:
homepage-url: https://mhez.uplus.co.kr
api-url: https://api-int.mhez.uplus.co.kr
applicationId: EZ_ADMIN
uri:
sendTemplateMail: /api/v1/fo/sendTemplateMail
testId: testId:
prodCd: LPZ0045389 prodCd: LPZ0045389
rpsnBday: 19800101 rpsnBday: 19800101

View File

@@ -37,6 +37,17 @@ authentication:
without: without:
id: superadminuser,jambler01,jambler02,jambler03,jambler04,jambler05,jambler06 id: superadminuser,jambler01,jambler02,jambler03,jambler04,jambler05,jambler06
mail:
from: msghubez@lguplus.co.kr
templeteCode: E0005
msghubez:
homepage-url: https://mhez-qa.uplus.co.kr
api-url: https://api-int.mhez-qa.uplus.co.kr
applicationId: EZ_ADMIN
uri:
sendTemplateMail: /api/v1/fo/sendTemplateMail
testId: testId:
prodCd: LPZ0045389 prodCd: LPZ0045389
rpsnBday: 19800101 rpsnBday: 19800101

View File

@@ -70,6 +70,11 @@
</choose> </choose>
</if> </if>
</if> </if>
<if test='channelAuthMenuNo != null and channelAuthMenuNo != ""'>
<if test='channelAuthMenuNo == "2003"'>
and esi.ATTRCTOR_ID = #{userId}
</if>
</if>
</sql> </sql>
<select id="selectTmpltListExcel" parameterType="kr.co.uplus.ez.api.channelMgt.dto.TmpltListReqDto" resultType="kr.co.uplus.ez.api.channelMgt.dto.TmpltInfo"> <select id="selectTmpltListExcel" parameterType="kr.co.uplus.ez.api.channelMgt.dto.TmpltListReqDto" resultType="kr.co.uplus.ez.api.channelMgt.dto.TmpltInfo">
SELECT SELECT
@@ -102,4 +107,16 @@
SELECT SELECT
@ROWNUM := 0 ) AS R @ROWNUM := 0 ) AS R
</select> </select>
<select id="selectChannelAuthMenuNo" parameterType="String" resultType="String">
SELECT
eaa.MENU_NO
FROM hubez_admin.EZ_ADM_USER eau
INNER JOIN hubez_admin.EZ_ADM_AUTMENU eaa
ON eau.AUT_CD = eaa.AUT_CD
WHERE 1=1
AND eau.OPRTR_ID = #{userId}
AND eaa.MENU_NO IN ('2002','2003')
LIMIT 1
</select>
</mapper> </mapper>

View File

@@ -357,26 +357,26 @@
<select id="selectCarryOverList" parameterType="kr.co.uplus.ez.api.custMgt.dto.CarryOverListReqDto" resultType="kr.co.uplus.ez.api.custMgt.dto.CarryOver"> <select id="selectCarryOverList" parameterType="kr.co.uplus.ez.api.custMgt.dto.CarryOverListReqDto" resultType="kr.co.uplus.ez.api.custMgt.dto.CarryOver">
/* custMgt-mapper.xml(selectCarryOverList) */ /* custMgt-mapper.xml(selectCarryOverList) */
SELECT SELECT
eul.LMT_YM MAX(eud.COLEC_TMS) AS COLEC_TMS
,SUM(IFNULL(eul.FX_LMT_AMT,0) + IFNULL(CFWD_AMT,0)) AS START_AMOUNT ,DATE_FORMAT(eud.USE_YM, '%Y-%m') AS LMT_YM
,SUM(IFNULL(eul.FX_LMT_AMT,0) + IFNULL(CFWD_AMT,0) + IFNULL(eld.DDCT_AMT,0)) AS USE_AMOUNT
,SUM(IFNULL(eul.FX_BLNC,0) + IFNULL(eul.CFWD_RSTRT_BLNC,0)) AS KRRR_AMOUNT
,SUM(IFNULL(eul.EXTNC_AMT,0)) AS EXTSH_AMOUNT
,esu.USER_ID ,esu.USER_ID
FROM ,ROUND(SUM(IFNULL(eud.FX_LMT_AMT,0) + IFNULL(eud.CFWD_AMT,0))) AS START_AMOUNT
hubez_common.EZ_SVC_USER esu ,ROUND(SUM(IFNULL(eud.FX_USE_AMT,0) + IFNULL(eud.CFWD_USE_AMT,0) + IFNULL(eud.MRT_USE_AMT,0))) AS USE_AMOUNT
INNER JOIN hubez_admin.EZ_USER_LMT eul ,ROUND(IFNULL(eud.CFWD_AMT,0)) AS KRRR_AMOUNT
ON eul.USER_SEQ = esu.USER_SEQ ,ROUND(IFNULL(eud.EXTNC_AMT,0)) AS EXTSH_AMOUNT
INNER JOIN hubez_admin.EZ_LMTDCT_DTL eld FROM hubez_admin.EZ_UTXNCOLEC_DTL eud
ON eld.USER_SEQ = eul.USER_SEQ JOIN hubez_common.EZ_SUBS_INFO esi
AND eld.LMT_YM = eul.LMT_YM ON eud.SUBS_ID = esi.SUBS_ID
JOIN hubez_common.EZ_SVC_USER esu
ON esi.USER_SEQ = esu.USER_SEQ
WHERE 1=1 WHERE 1=1
<![CDATA[
AND eud.USE_YM >= DATE_ADD(NOW(), INTERVAL -4 MONTH)
AND eud.USE_YM < NOW()
]]>
AND esu.USER_ID = #{serviceId} AND esu.USER_ID = #{serviceId}
AND eul.LMT_YM BETWEEN DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 4 MONTH) , '%Y%m') AND DATE_FORMAT(NOW() , '%Y%m') GROUP BY eud.USE_YM, eud.SUBS_ID
AND eld.DDCT_TP_CD IN ('01','03') ORDER BY eud.USE_YM DESC
GROUP BY eul.LMT_YM, eul.USER_SEQ
ORDER BY
eul.LMT_YM DESC
</select> </select>
<select id="selectImUser" parameterType="kr.co.uplus.ez.common.data.ImUser" resultType="kr.co.uplus.ez.common.data.ImUser"> <select id="selectImUser" parameterType="kr.co.uplus.ez.common.data.ImUser" resultType="kr.co.uplus.ez.common.data.ImUser">
@@ -461,10 +461,9 @@
SELECT SELECT
USER_NM USER_NM
,DATE_FORMAT(esu.REG_DT, '%Y-%m-%d') AS REG_DT ,DATE_FORMAT(esu.REG_DT, '%Y-%m-%d') AS REG_DT
,(SELECT DTL_CD_NM FROM ${HUBEZ_COMMON}.EZ_CD_DTL WHERE GRP_CD = 'SVCUSER_TP_CD' AND DTL_CD = esu.USER_TP_CD) AS USER_TYPE ,esu.USER_TP_CD AS USER_TYPE
,USER_ID ,USER_ID
,(SELECT USER_ID FROM ${HUBEZ_COMMON}.EZ_SVC_USER where USER_SEQ = esu.PRNTS_USER_SEQ) AS ADMIN_ID ,(SELECT USER_ID FROM ${HUBEZ_COMMON}.EZ_SVC_USER where USER_SEQ = esu.PRNTS_USER_SEQ LIMIT 1) AS ADMIN_ID
<!-- ,(SELECT DTL_CD_NM FROM ${HUBEZ_COMMON}.EZ_CD_DTL WHERE GRP_CD = 'SVCUSER_STTUS_CD' AND DTL_CD = esu.USER_STTUS_CD) AS USER_STAT -->
,esu.USER_STTUS_CD AS USER_STAT ,esu.USER_STTUS_CD AS USER_STAT
,DATE_FORMAT(esu.LAST_LOGIN_DT, '%Y-%m-%d %H:%i:%s') AS LAST_LOGIN_DT ,DATE_FORMAT(esu.LAST_LOGIN_DT, '%Y-%m-%d %H:%i:%s') AS LAST_LOGIN_DT
,esu.HP_NO AS MDN ,esu.HP_NO AS MDN
@@ -474,17 +473,16 @@
</select> </select>
<select id="selectMemberAdminDetail" parameterType="kr.co.uplus.ez.api.custMgt.dto.MemberAdminDetailReqDto" resultType="kr.co.uplus.ez.api.custMgt.dto.MemberAdminDetailRes"> <select id="selectMemberAdminDetail" parameterType="kr.co.uplus.ez.api.custMgt.dto.MemberAdminDetailReqDto" resultType="kr.co.uplus.ez.api.custMgt.dto.MemberAdminDetailRes">
/* custMgt-mapper.xml(selectMemberDetail) */ /* custMgt-mapper.xml(selectMemberAdminDetail) */
SELECT SELECT
USER_NM USER_NM
,DATE_FORMAT(esu.REG_DT, '%Y-%m-%d') AS REG_DT ,DATE_FORMAT(esu.REG_DT, '%Y-%m-%d') AS REG_DT
,(SELECT DTL_CD_NM FROM ${HUBEZ_COMMON}.EZ_CD_DTL WHERE GRP_CD = 'SVCUSER_TP_CD' AND DTL_CD = esu.USER_TP_CD) AS USER_TYPE ,(SELECT DTL_CD_NM FROM hubez_common.EZ_CD_DTL WHERE GRP_CD = 'SVCUSER_TP_CD' AND DTL_CD = esu.USER_TP_CD LIMIT 1) AS USER_TYPE
,USER_ID ,USER_ID
,(SELECT USER_ID FROM ${HUBEZ_COMMON}.EZ_SVC_USER where USER_SEQ = esu.PRNTS_USER_SEQ) AS ADMIN_ID ,(SELECT USER_ID FROM hubez_common.EZ_SVC_USER where USER_SEQ = esu.PRNTS_USER_SEQ LIMIT 1) AS ADMIN_ID
,(SELECT USER_NM FROM ${HUBEZ_COMMON}.EZ_SVC_USER where USER_SEQ = esu.PRNTS_USER_SEQ) AS ADMIN_NM ,(SELECT USER_NM FROM hubez_common.EZ_SVC_USER where USER_SEQ = esu.PRNTS_USER_SEQ LIMIT 1) AS ADMIN_NM
,(SELECT FX_LMT_AMT + MRT_LMT_AMT FROM ${HUBEZ_ADMIN}.EZ_USER_LMT WHERE USER_SEQ = esu.PRNTS_USER_SEQ) AS SENDING_LIMIT ,IFNULL((SELECT ROUND(SUM(IFNULL(FX_LMT_AMT,0) + IFNULL(MRT_LMT_AMT,0))) FROM hubez_admin.EZ_USER_LMT WHERE USER_SEQ = esu.PRNTS_USER_SEQ AND LMT_YM = DATE_FORMAT(NOW(),'%Y%m')),0) AS SENDING_LIMIT
,(SELECT DTL_CD_NM FROM ${HUBEZ_COMMON}.EZ_CD_DTL WHERE GRP_CD = 'LINE_TP_CD' AND DTL_CD = esu.LINE_TP_CD) AS LINE_TYPE ,esu.LINE_TP_CD AS LINE_TYPE
<!-- ,(SELECT DTL_CD_NM FROM ${HUBEZ_COMMON}.EZ_CD_DTL WHERE GRP_CD = 'SVCUSER_STTUS_CD' AND DTL_CD = esu.USER_STTUS_CD) AS USER_STTUS -->
,esu.USER_STTUS_CD AS USER_STAT ,esu.USER_STTUS_CD AS USER_STAT
,DATE_FORMAT(esu.LAST_LOGIN_DT, '%Y-%m-%d %H:%i:%s') AS LAST_LOGIN_DT ,DATE_FORMAT(esu.LAST_LOGIN_DT, '%Y-%m-%d %H:%i:%s') AS LAST_LOGIN_DT
,(SELECT MEMO FROM ${HUBEZ_COMMON}.EZ_USER_MEMO EUM WHERE USER_SEQ = esu.USER_SEQ ORDER BY REG_DT DESC LIMIT 1) AS MEMO ,(SELECT MEMO FROM ${HUBEZ_COMMON}.EZ_USER_MEMO EUM WHERE USER_SEQ = esu.USER_SEQ ORDER BY REG_DT DESC LIMIT 1) AS MEMO
@@ -501,7 +499,7 @@
SELECT SELECT
COUNT(*) COUNT(*)
FROM ${HUBEZ_COMMON}.EZ_SVC_USER esu FROM ${HUBEZ_COMMON}.EZ_SVC_USER esu
WHERE esu.PRNTS_USER_SEQ = (SELECT USER_SEQ FROM ${HUBEZ_COMMON}.EZ_SVC_USER WHERE USER_ID = #{userId}) WHERE esu.PRNTS_USER_SEQ = (SELECT USER_SEQ FROM ${HUBEZ_COMMON}.EZ_SVC_USER WHERE USER_ID = #{userId} LIMIT 1)
</select> </select>
<select id="selectMemberDetailList" parameterType="kr.co.uplus.ez.api.custMgt.dto.MemberDetailReqDto" resultType="kr.co.uplus.ez.api.custMgt.dto.MemberDetail"> <select id="selectMemberDetailList" parameterType="kr.co.uplus.ez.api.custMgt.dto.MemberDetailReqDto" resultType="kr.co.uplus.ez.api.custMgt.dto.MemberDetail">
@@ -534,7 +532,7 @@
,HP_NO AS mdn ,HP_NO AS mdn
,(SELECT DTL_CD_NM FROM ${HUBEZ_COMMON}.EZ_CD_DTL WHERE GRP_CD = 'SVCUSER_STTUS_CD' AND DTL_CD = esu.USER_STTUS_CD) AS userStat ,(SELECT DTL_CD_NM FROM ${HUBEZ_COMMON}.EZ_CD_DTL WHERE GRP_CD = 'SVCUSER_STTUS_CD' AND DTL_CD = esu.USER_STTUS_CD) AS userStat
FROM ${HUBEZ_COMMON}.EZ_SVC_USER esu FROM ${HUBEZ_COMMON}.EZ_SVC_USER esu
WHERE esu.PRNTS_USER_SEQ = (SELECT USER_SEQ FROM ${HUBEZ_COMMON}.EZ_SVC_USER WHERE USER_ID = #{userId}) WHERE esu.PRNTS_USER_SEQ = (SELECT USER_SEQ FROM ${HUBEZ_COMMON}.EZ_SVC_USER WHERE USER_ID = #{userId} LIMIT 1)
ORDER BY esu.REG_DT DESC) A, ORDER BY esu.REG_DT DESC) A,
( SELECT @ROWNUM := 0 ) AS R ( SELECT @ROWNUM := 0 ) AS R
</select> </select>
@@ -542,15 +540,17 @@
<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
MEMO AS memo, EUM.MEMO AS memo,
EUM.SEQ_NO AS seqNo, EUM.SEQ_NO AS seqNo,
EUM.MKER_NM AS register, EUM.MKER_NM AS register,
DATE_FORMAT(EUM.REG_DT, '%Y-%m-%d') AS regDt DATE_FORMAT(EUM.REG_DT, '%Y-%m-%d') AS regDt
FROM FROM
${HUBEZ_COMMON}.EZ_USER_MEMO EUM ${HUBEZ_COMMON}.EZ_USER_MEMO EUM
INNER JOIN ${HUBEZ_COMMON}.EZ_SVC_USER ESU
ON EUM.USER_SEQ = ESU.USER_SEQ
WHERE WHERE
EUM.USER_SEQ = (SELECT USER_SEQ FROM ${HUBEZ_COMMON}.EZ_SVC_USER WHERE USER_ID = #{userId}) ESU.USER_ID = #{userId}
ORDER BY REG_DT ORDER BY EUM.REG_DT DESC
</select> </select>
<select id="selectCustInfoCount" parameterType="String" resultType="int"> <select id="selectCustInfoCount" parameterType="String" resultType="int">
@@ -678,6 +678,7 @@
/* custMgt-mapper.xml(insertSubsInfo) */ /* custMgt-mapper.xml(insertSubsInfo) */
INSERT INTO ${HUBEZ_COMMON}.EZ_SUBS_INFO( INSERT INTO ${HUBEZ_COMMON}.EZ_SUBS_INFO(
SUBS_ID SUBS_ID
,ENTR_NO
,USER_SEQ ,USER_SEQ
,CUST_SEQ ,CUST_SEQ
,SUBS_STTUS_CD ,SUBS_STTUS_CD
@@ -691,6 +692,7 @@
,CHG_DT ,CHG_DT
)values( )values(
#{subsId} #{subsId}
,#{entrNo}
, #{userSeq} , #{userSeq}
, #{custSeq} , #{custSeq}
, #{subsSttusCd} , #{subsSttusCd}
@@ -821,4 +823,20 @@
FROM ${HUBEZ_COMMON}.EZ_SVC_USER FROM ${HUBEZ_COMMON}.EZ_SVC_USER
WHERE USER_ID = #{userId} WHERE USER_ID = #{userId}
</select> </select>
<select id="selectApiAuthToken" parameterType="String" resultType="String">
/* custMgt-mapper.xml(selectApiAuthToken) */
SELECT AUTHTKN
FROM ${HUBEZ_COMMON}.EZ_IFSYS_INFO
WHERE SYS_ID = #{apiApplicationId}
</select>
<select id="getSubId" resultType="String">
SELECT CONCAT('TESTSUBID', LPAD(hubez_common.FUN_NEXT_SEQ('TEST_SUBS_SEQ'), 11, 0)) AS SUB_ID
</select>
<select id="getEntrNo" resultType="String">
SELECT CONCAT('TESTENTRN', LPAD(hubez_common.FUN_NEXT_SEQ('TEST_SUBS_SEQ'), 11, 0)) as ENTR_NO
</select>
</mapper> </mapper>

View File

@@ -121,6 +121,33 @@
) )
</insert> </insert>
<insert id="insertSendMsg" parameterType="kr.co.uplus.ez.api.login.dto.SendMsgDto">
INSERT
INTO hubez_send.EZ_MSG_REAL (
CLIENT_KEY
, REQ_PRODUCT
, TRAFFIC_TYPE
, MSG_STATUS
, REQ_DATE
, CALLBACK_NUMBER
, MSG
, PHONE
, WEB_REQ_ID
, ORDER_ID
)value(
#{clientKey}
, 'SMS'
, 'real'
, 'req'
, NOW()
, '15445992'
, #{msg}
, #{phone}
, '2'
, '2'
)
</insert>
<select id="getAuthNum" parameterType="kr.co.uplus.ez.api.login.dto.AuthNum" resultType="kr.co.uplus.ez.api.login.dto.AuthNum"> <select id="getAuthNum" parameterType="kr.co.uplus.ez.api.login.dto.AuthNum" resultType="kr.co.uplus.ez.api.login.dto.AuthNum">
/* login-mapper.xml(getAuthNum) */ /* login-mapper.xml(getAuthNum) */
SELECT SELECT

View File

@@ -63,7 +63,7 @@
FROM ${HUBEZ_SEND}.EZ_MSG_LOG eml FROM ${HUBEZ_SEND}.EZ_MSG_LOG eml
WHERE 1=1 WHERE 1=1
AND DATE_FORMAT(eml.SENT_DATE,'%Y%m%d') = #{sentDate} AND DATE_FORMAT(eml.SENT_DATE,'%Y%m%d') = #{sentDate}
<if test='reqChennel != null and reqChennel != "" and reqChennel != "ALL"'> <if test='reqChennel != null and reqChennel != ""'>
AND eml.REQ_PRODUCT = #{reqChennel} AND eml.REQ_PRODUCT = #{reqChennel}
</if> </if>
<if test='phone != null and phone != ""'> <if test='phone != null and phone != ""'>

View File

@@ -20,13 +20,27 @@
FROM FROM
( (
SELECT SELECT
BLCK_SNDRNO esb.BLCK_SNDRNO
, SNDBLCK_TP_CD ,esb.SNDBLCK_TP_CD
, BLCK_RSN_CD , (SELECT
, BLCK_YN T2.DTL_CD_NM as codeNm
, REG_ID FROM hubez_common.EZ_CD_GRP T1
, CHG_ID LEFT JOIN hubez_common.EZ_CD_DTL T2
, DATE_FORMAT(CHG_DT, '%Y-%m-%d') As LAST_CHG_DT ON T1.GRP_CD = T2.GRP_CD
WHERE T1.GRP_CD = 'SNDBLCK_TP_CD'
and T2.DTL_CD=esb.SNDBLCK_TP_CD) AS SNDBLCK_TP_NM
,esb.BLCK_RSN_CD
,(SELECT
T2.DTL_CD_NM as codeNm
FROM hubez_common.EZ_CD_GRP T1
LEFT JOIN hubez_common.EZ_CD_DTL T2
ON T1.GRP_CD = T2.GRP_CD
WHERE T1.GRP_CD = 'SNDBLCK_RSN_CD'
and T2.DTL_CD=esb.BLCK_RSN_CD) AS BLCK_RSN_NM
, IF(esb.BLCK_YN = 'Y', '차단', '미차단') AS BLCK_YN
, esb.REG_ID
, esb.CHG_ID
, DATE_FORMAT(esb.CHG_DT, '%Y-%m-%d') As LAST_CHG_DT
FROM FROM
${HUBEZ_COMMON}.EZ_SNDRNO_BLCK esb ${HUBEZ_COMMON}.EZ_SNDRNO_BLCK esb
WHERE 1 = 1 WHERE 1 = 1
@@ -209,8 +223,8 @@
SELECT SELECT
emb.SEQ_NO emb.SEQ_NO
, ebd.WORD , ebd.WORD
, emb.BLCK_YN , IF(emb.BLCK_YN = 'Y', '차단', '미차단') AS BLCK_YN
, DATE_FORMAT(emb.REG_DT , '%Y-%m-%d') AS LAST_CHG_DT , DATE_FORMAT(emb.CHG_DT , '%Y-%m-%d') AS LAST_CHG_DT
,( ,(
SELECT SELECT
DTL_CD_NM DTL_CD_NM
@@ -355,7 +369,7 @@
COUNT(*) COUNT(*)
FROM FROM
${HUBEZ_COMMON}.EZ_WEBSND_BLCK ewb ${HUBEZ_COMMON}.EZ_WEBSND_BLCK ewb
WHERE 1 = 1 WHERE 1=1
<include refid="websndBlckListCondition"/> <include refid="websndBlckListCondition"/>
</select> </select>