diff --git a/build.gradle b/build.gradle
index 2395961..dfac81d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -103,6 +103,10 @@ dependencies {
// mysql libs
implementation 'mysql:mysql-connector-java'
+ // https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api
+ implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
+
+
}
bootJar {
diff --git a/frontend/src/assets/css/style.css b/frontend/src/assets/css/style.css
index d93ce68..a9a1a2a 100644
--- a/frontend/src/assets/css/style.css
+++ b/frontend/src/assets/css/style.css
@@ -562,7 +562,7 @@ header .user_wrap .user_info .logout {
.contents .input_box.cal input {
display: inline-block;
- width: 90%;
+ width: 70%;
float: left;
background: #fff url(../images/icon-calender.png) no-repeat right 6% center;
}
@@ -1373,6 +1373,12 @@ header .user_wrap .user_info .logout {
.popup.price table th{
width:20%;
+ padding:0;
+ text-align: center;
+}
+.popup.price table td{
+ padding: 0;
+ text-align: center;
}
.popup label{
diff --git a/frontend/src/modules/attractMgt/service/channelMgtApi.js b/frontend/src/modules/attractMgt/service/channelMgtApi.js
index 9ed29e4..584781c 100644
--- a/frontend/src/modules/attractMgt/service/channelMgtApi.js
+++ b/frontend/src/modules/attractMgt/service/channelMgtApi.js
@@ -1,6 +1,6 @@
import httpClient from '@/common/http-client';
import channelExcelHeader from "@/modules/attractMgt/service/mock/channelExcelHeader.json";
-
+import channelDetailExcelHeader from "@/modules/attractMgt/service/mock/channelDetailExcelHeader.json";
// 공통 코드.
const getCommCode = (params) => {
@@ -17,6 +17,11 @@ const channelDetail = (params) => {
return httpClient.post('/api/v1/bo/attractMgt/channelDetail', params, { withCredentials: false});
}
+// 발송건수 엑셀 다운로드
+const sendNumberListExcel = (params) => {
+ return httpClient.post('/api/v1/bo/attractMgt/sendNumberListExcel', params, { withCredentials: false});
+}
+
const getExcelHeader = category => {
// 엑셀에 출력할 Header 정보를 Mockup 데이터로 관리한다.
return new Promise(function(resolve, reject) {
@@ -25,6 +30,9 @@ const getExcelHeader = category => {
case 'CHANNEL':
header = channelExcelHeader.header;
break;
+ case 'CHANNELDETAIL':
+ header = channelDetailExcelHeader.header;
+ break;
default:
header = '';
break;
@@ -38,4 +46,5 @@ export default {
getExcelHeader,
channelListExcel,
channelDetail,
+ sendNumberListExcel,
}
diff --git a/frontend/src/modules/attractMgt/service/mock/channelDetailExcelHeader.json b/frontend/src/modules/attractMgt/service/mock/channelDetailExcelHeader.json
new file mode 100644
index 0000000..dd7d04f
--- /dev/null
+++ b/frontend/src/modules/attractMgt/service/mock/channelDetailExcelHeader.json
@@ -0,0 +1,37 @@
+{
+ "header": [
+ [
+ {
+ "key": "sumYm",
+ "name": "날짜",
+ "rowspan": 2
+ },
+ {
+ "name": "채널별 발송건수",
+ "colspan": 5
+ }
+
+ ],
+ [{
+ "key": "sndCnt",
+ "name": "전체"
+ },
+ {
+ "key": "sndCntS",
+ "name": "SMS"
+ },
+ {
+ "key": "sndCntL",
+ "name": "LMS"
+ },
+ {
+ "key": "sndCntM",
+ "name": "MMS"
+ },
+ {
+ "key": "sndCntA",
+ "name": "알림톡"
+ }]
+ ]
+ }
+
\ No newline at end of file
diff --git a/frontend/src/modules/attractMgt/views/ChannelDetail.vue b/frontend/src/modules/attractMgt/views/ChannelDetail.vue
index df7e6e4..e9724d2 100644
--- a/frontend/src/modules/attractMgt/views/ChannelDetail.vue
+++ b/frontend/src/modules/attractMgt/views/ChannelDetail.vue
@@ -22,36 +22,36 @@
| 가입일 |
- |
+ |
상태 |
- |
+ |
| 고객사 |
- |
+ |
요금제 |
- |
+ |
| 대표자 |
- |
+ |
사용자 구분 |
- |
+ |
| 사업자등록번호 |
-
-
-
+
+
+
|
법인등록번호 |
-
-
+
+
|
@@ -59,9 +59,9 @@
사업장 주소 |
-
-
-
+
+
+
|
@@ -69,16 +69,16 @@
유치자명 |
-
-
+
+
|
관리자명 |
-
-
-
+
+
+
|
@@ -91,12 +91,13 @@
( 최근 3년 사용 전월까지 확인 가능하며, 청구금액은 유큐브에서 확인 가능합니다. )
-
+
-
+
-
-
+
+
+
\ No newline at end of file
diff --git a/frontend/src/modules/channelMgt/views/TmpltList.vue b/frontend/src/modules/channelMgt/views/TmpltList.vue
index c4408df..83492f7 100644
--- a/frontend/src/modules/channelMgt/views/TmpltList.vue
+++ b/frontend/src/modules/channelMgt/views/TmpltList.vue
@@ -212,7 +212,7 @@ export default {
noDataStr: '검색 결과가 없습니다.',
params: {
searchType1: '',
- searchType2: '',
+ searchType2: 'custNm',
searchText1: ''
},
excelHeader: []
@@ -236,7 +236,7 @@ export default {
perPage: 50,
params: {
searchType1: '',
- searchType2: '',
+ searchType2: 'custNm',
searchText1: ''}
});
@@ -271,7 +271,7 @@ export default {
perPage: this.perPageCnt,
params: {
searchType1: '',
- searchType2: '',
+ searchType2: 'custNm',
searchText1: ''
}
});
diff --git a/frontend/src/modules/custMgt/components/AdminNmPop.vue b/frontend/src/modules/custMgt/components/AdminNmPop.vue
index e55f9cb..5c31e25 100644
--- a/frontend/src/modules/custMgt/components/AdminNmPop.vue
+++ b/frontend/src/modules/custMgt/components/AdminNmPop.vue
@@ -54,6 +54,9 @@ export default {
agencyNm:"",
idCheck: false,
props: {},
+ serviceId: '',
+ parentDiv: '',
+ serviceSeq:'',
}
},
components: {
@@ -141,6 +144,44 @@ export default {
this.formReset();
this.$refs.madangId.focus();
},
+ async adminIdNmChangeOk(){
+ // 관리자명 수정 api 호출
+ var params = {
+ "adminId": this.madangId,
+ "adminNm": this.userNm,
+ "serviceId": this.serviceId
+ }
+ console.log(params);
+ try {
+ const response = await custMgtApi.updateAdminInfo(params);
+ const result = response.data;
+ console.log(result);
+ if (result != null && result.retCode == "0000") {
+ console.log('adminNm modal close');
+ //alert('관리자정보 수정에 성공하였습니다.');
+ // adminNm modal close
+ var dimmed = document.getElementsByClassName('modal26');
+ for(var i = 0; i < dimmed.length; i++){
+ dimmed[i].style.display = 'none';
+ }
+
+ if(this.parentDiv === 'subsDetail'){
+ this.$parent.subsDetail(this.serviceId);
+ } else if(this.parentDiv === 'channelDetail'){
+ this.$parent.channelDetail(this.serviceSeq);
+ }
+
+ }else {
+ //alert('관리자정보 수정에 실패하였습니다.');
+ this.formReset();
+ this.$refs.madangId.focus();
+ }
+ } catch(err) {
+ //alert("실패 하였습니다.");
+ this.formReset();
+ this.$refs.madangId.focus();
+ }
+ },
setAuthData() {
// 권한 옵션.
api.commAuth().then(response => {
@@ -151,12 +192,16 @@ export default {
Object.assign(this.$data, this.$options.data());
},
// 모달 띄우기
- ModalOpen(){
+ ModalOpen(target){
+ console.log(target);
this.formReset();
var dimmed = document.getElementsByClassName('modal26');
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'block';
}
+ this.serviceId = target.serviceId;
+ this.serviceSeq = target.serviceSeq;
+ this.parentDiv = target.parentDiv;
},
// 모달 끄기
ModalClose(){
diff --git a/frontend/src/modules/custMgt/components/CarryOverListPop.vue b/frontend/src/modules/custMgt/components/CarryOverListPop.vue
index 2e5899e..224578e 100644
--- a/frontend/src/modules/custMgt/components/CarryOverListPop.vue
+++ b/frontend/src/modules/custMgt/components/CarryOverListPop.vue
@@ -26,12 +26,15 @@
- | {{ option.date }} |
+ {{ option.lmtYm }} |
{{ option.startAmount }} |
{{ option.useAmount }} |
{{ option.krrrAmount }} |
{{ option.extshAmount }} |
+
+ | 검색 결과가 없습니다. |
+
@@ -82,7 +85,7 @@ export default {
console.log(result);
if (result != null && result.retCode == "0000") {
this.list = result.data.list;
- this.totalCnt = result.data.totalCnt;
+ this.totalCnt = result.data.list.length;
}
} catch(err) {
this.row.title = '청약고객관리';
diff --git a/frontend/src/modules/custMgt/components/SearchIdPopup.vue b/frontend/src/modules/custMgt/components/SearchIdPopup.vue
index aa1b82c..d6b5088 100644
--- a/frontend/src/modules/custMgt/components/SearchIdPopup.vue
+++ b/frontend/src/modules/custMgt/components/SearchIdPopup.vue
@@ -85,6 +85,8 @@ export default {
for(var i = 0; i < dimmed.length; i++){
dimmed[i].style.display = 'none';
}
+
+ this.$parent.adminIdNmChangeOk();
},
// 성공 모달 끄기(cancel)
searchIdModalCancelClose(){
diff --git a/frontend/src/modules/custMgt/views/MemberList.vue b/frontend/src/modules/custMgt/views/MemberList.vue
index 3395f73..4e190b9 100644
--- a/frontend/src/modules/custMgt/views/MemberList.vue
+++ b/frontend/src/modules/custMgt/views/MemberList.vue
@@ -78,7 +78,7 @@
-
총
{{ totalItems }}건
+
총
{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}건
-
-
+
@@ -70,7 +70,7 @@
-
+
@@ -86,7 +86,7 @@
-
총
{{ totalItems }}건
+
총
{{ totalItems.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') }}건
@@ -269,6 +269,7 @@ export default {
this.$router.push({ name: routeName, params: { page: 1, searchText: '' } });
},
custDetail(props){
+ console.log(props);
this.row.serviceId = props.serviceId;
this.$router.push({ name: 'subsDetail', params: this.row });
},
diff --git a/frontend/src/modules/login/views/LoginAuth.vue b/frontend/src/modules/login/views/LoginAuth.vue
index fd0984a..921b57d 100644
--- a/frontend/src/modules/login/views/LoginAuth.vue
+++ b/frontend/src/modules/login/views/LoginAuth.vue
@@ -179,8 +179,24 @@ export default {
async ajaxAuth(){
var vm = this;
let userId = vm.$route.params.userId;
- if (!vm.formCheck()){
- alert(vm.errors[0]);
+
+ if(!this.mdn){
+ this.row.title = '휴대폰번호 확인';
+ this.row.msg1 = '휴대폰번호를 확인해 주세요.';
+ this.$refs.commmonModal.alertModalOpen(this.row);
+ return false;
+ }
+ if(!this.isAuthNum){
+ this.row.title = '인증번호 입력';
+ this.row.msg1 = '인증요청을 먼저 해주세요.';
+ this.$refs.commmonModal.alertModalOpen(this.row);
+ return false;
+ }
+
+ if(!this.confirmNum){
+ this.row.title = '인증번호 입력';
+ this.row.msg1 = '인증번호를 입력하세요.';
+ this.$refs.commmonModal.alertModalOpen(this.row);
return false;
}
diff --git a/frontend/src/modules/mntrng/router/index.js b/frontend/src/modules/mntrng/router/index.js
index 6127795..b32a790 100644
--- a/frontend/src/modules/mntrng/router/index.js
+++ b/frontend/src/modules/mntrng/router/index.js
@@ -1,19 +1,19 @@
-import SendList from '../views/SendList'
-import LiveSendSttus from '../views/LiveSendSttus'
-
-export default [
- {
- path: '/mntrng/sendList',
- component: SendList,
- name: 'sendList',
- meta: { public: true }
- },
- {
- path: '/mntrng/liveSendSttus',
- component: LiveSendSttus,
- name: 'liveSendSttus',
- meta: { public: true }
- },
-
-]
-
+import SendList from '../views/SendList'
+import LiveSendSttus from '../views/LiveSendSttus'
+
+export default [
+ {
+ path: '/mntrng/sendList',
+ component: SendList,
+ name: 'sendList',
+ meta: { public: true }
+ },
+ {
+ path: '/mntrng/liveSendSttus',
+ component: LiveSendSttus,
+ name: 'liveSendSttus',
+ meta: { public: true }
+ },
+
+]
+
diff --git a/frontend/src/modules/mntrng/service/mixins.js b/frontend/src/modules/mntrng/service/mixins.js
new file mode 100644
index 0000000..887f0a3
--- /dev/null
+++ b/frontend/src/modules/mntrng/service/mixins.js
@@ -0,0 +1,353 @@
+import lodash from "lodash";
+
+const utils_mixin = {
+ methods:{
+ /** * 이메일 형식 체크 * * @param 데이터 */
+ emailCheck(email,rtnArrYn) {
+ if(this.isNull(rtnArrYn)){
+ rtnArrYn='N';
+ }
+ // var regExp = /(^[A-Za-z0-9_\.\-]+)@([A-Za-z0-9\-]+\.[A-Za-z0-9\-]+)/;
+ var regExp = /^([0-9a-zA-Z_\.\-]([-_.]?[0-9a-zA-Z_\.\-])*)@([0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$)/i;//이메일 정규식
+
+ if(regExp.test(email) == false) {
+ // 이메일 형식이 알파벳+숫자@알파벳+숫자.알파벳+숫자 형식이 아닐경우
+ if(rtnArrYn == 'Y'){
+ return email;
+ }
+ return false;
+ }else{
+ var myArray = regExp.exec(email);
+ if(rtnArrYn == 'Y'){
+ return myArray;
+ }
+ return true;
+ }
+
+ },
+ /** * 전화번호 포맷으로 변환 * * @param 데이터 */
+ formatPhone(phoneNum,fmt,rtnArrYn) {
+ if(this.isNull(fmt)){
+ fmt='';
+ }
+ if(this.isNull(rtnArrYn)){
+ fmt='N';
+ }
+ if(this.isPhone(phoneNum)) {
+ var rtnNum;
+ var regExp =/(02)([0-9]{3,4})([0-9]{4})$/;
+ var myArray;
+ if(regExp.test(phoneNum)){
+ myArray = regExp.exec(phoneNum);
+ rtnNum = myArray[1]+fmt + myArray[2]+fmt+myArray[3];
+ if(rtnArrYn == 'Y'){
+ return myArray;
+ }
+ return rtnNum;
+ } else {
+ regExp =/(0[3-9]{1}[0-9]{1})([0-9]{3,4})([0-9]{4})$/;
+ if(regExp.test(phoneNum)){
+ myArray = regExp.exec(phoneNum);
+ rtnNum = myArray[1]+fmt+myArray[2]+fmt+myArray[3];
+ if(rtnArrYn == 'Y'){
+ return myArray;
+ }
+ return rtnNum;
+ } else {
+ return phoneNum;
+ }
+ }
+ } else {
+ return phoneNum;
+ }
+ },
+ /** * 핸드폰번호 포맷으로 변환 * * @param 데이터 */
+ formatMobile(phoneNum,fmt,rtnArrYn) {
+
+ if(this.isNull(fmt)){
+ fmt='';
+ }
+ if(this.isNull(rtnArrYn)){
+ fmt='N';
+ }
+ if(this.isMobile(phoneNum)) {
+
+ var rtnNum;
+ var regExp =/(01[016789])([0-9]{3,4})([0-9]{4})$/;
+ var myArray;
+
+ if(regExp.test(phoneNum)){
+
+ myArray = regExp.exec(phoneNum);
+ rtnNum = myArray[1]+fmt+myArray[2]+fmt+myArray[3];
+ if(rtnArrYn == 'Y'){
+ return myArray;
+ }
+ return rtnNum;
+ } else {
+ return phoneNum;
+ }
+ } else {
+ return phoneNum;
+ }
+ },
+
+ /** * 전화번호 형식 체크 * * @param 데이터 */
+ isPhone(phoneNum) {
+ var regExp =/(02)([0-9]{3,4})([0-9]{4})$/;
+ if(regExp.test(phoneNum)){
+ return true;
+ } else {
+ regExp =/(0[3-9]{1}[0-9]{1})([0-9]{3,4})([0-9]{4})$/;
+ if(regExp.test(phoneNum)){
+ return true;
+ } else {
+ return false;
+ }
+ }
+ },
+
+ /** * 핸드폰번호 형식 체크 * * @param 데이터 */
+ isMobile(phoneNum) {
+ var regExp =/(01[016789])([0-9]{3,4})([0-9]{4})$/;
+ var myArray;
+ if(regExp.test(phoneNum)){
+ myArray = regExp.exec(phoneNum);
+ return true;
+ } else {
+ return false;
+ }
+ },
+ isMobile2(phoneNum) {
+ var regExp =/(1[016789])([0-9]{3,4})([0-9]{4})$/;
+ var myArray;
+ if(regExp.test(phoneNum)){
+ myArray = regExp.exec(phoneNum);
+ return true;
+ } else {
+ return false;
+ }
+ },
+
+ isNull(obj){
+ if(lodash.isNil(obj) || lodash.trim(obj) == ''){
+ return true;
+ }
+ return false;
+ },
+ getParent(name){
+ let p = this.$parent;
+ while(typeof p !== 'undefined'){
+ if(p.$options.name == name) {
+ return p;
+ }else {
+ p = p.$parent;
+ }
+ }
+ return false;
+ },
+ getJsonObj(str){
+ return JSON.parse(JSON.stringify(str));
+ },
+ }
+ };
+
+ var chkPattern2 = {
+ data: function () {
+ return {
+ }
+ },
+ methods: {
+ selSesStorage(keyLike){
+ if(this.isNull(keyLike)){
+ return null;
+ }
+ if(sessionStorage.length > 0){
+ let keyList = [];
+ for(let i=0;i -1){
+ keyList.push({name : keyNm, value : sessionStorage.getItem(keyNm)});
+ }
+ }
+ if(keyList.length > 0){
+ return keyList;
+ }
+ return null;
+ }
+ return null;
+ },
+
+ delSesStorage(keyList){
+ if(this.isNull(keyList)){
+ return null;
+ }
+ if(keyList.length > 0){
+ keyList.map((o) => (sessionStorage.removeItem(o.name)));
+ return true;
+ }
+ },
+
+ setGridMouseDownActive(){
+ const ele = document.querySelector(`div.tui-grid-container.tui-grid-show-lside-area`);
+ if(window.getEventListeners(ele).mousedown){
+ ele.removeEventListener('mousedown',window.getEventListeners(ele).mousedown[0].listener);
+ }
+ },
+ restrictChars : function($event,regExp,hanYn){
+
+ if(this.isNull(hanYn)){
+ hanYn='N';
+ }
+ if(hanYn === 'N' && $event.type === 'keydown'){
+ if($event.keyCode === 229){
+ $event.preventDefault();
+ return false;
+ }
+ }
+
+ if($event.type === 'keypress'){
+ //한글 처리 불가
+ if(regExp.test(String.fromCharCode($event.charCode))) {
+ return true;
+ }else{
+ $event.preventDefault();
+ return false;
+ }
+ }
+
+ if(hanYn === 'N' && ( $event.type === 'keyup' || $event.type === 'input' || $event.type === 'change' || $event.type === 'blur')){
+ $event.target.value = $event.target.value.replace(/[ㄱ-ㅎㅏ-ㅣ가-힣]/g,'');
+ $event.preventDefault();
+ return false;
+ }
+ return true;
+ },
+ setLenth: function (e, len) {
+ this.cut(e, len);
+ },
+ onlyCustom: function (e,strRegExp,hanYn) {
+ var regExp_g = new RegExp(strRegExp,'g');
+ this.cut(e);
+ return this.restrictChars(e,regExp_g,hanYn);
+ },
+ onlyCommon: function(strRegExp, e, len, isEventCall, hanYn) {
+ var regExp_g = new RegExp(strRegExp,'g');
+ if(isEventCall === 'N'){
+ if(!this.cut(e, len, isEventCall)){
+ return false;
+ }
+ if(!regExp_g.test(e.value)){
+ return false;
+ }
+ return true;
+ }
+ this.cut(e, len);
+ return this.restrictChars(e,regExp_g,hanYn);
+ },
+ onlyNum: function (e, len, isEventCall) {
+ var strRegExp = '^[0-9]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall);
+ },
+ onlyEng: function (e, len, isEventCall) {
+ var strRegExp = '^[A-Za-z]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall);
+ },
+ onlyLowerEng: function (e, len, isEventCall) {
+ var strRegExp = '^[a-z]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall);
+ },
+ onlyUpperEng: function (e, len, isEventCall) {
+ var strRegExp = '^[A-Z]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall);
+ },
+ onlyEmail: function (e, len, isEventCall) {
+ var strRegExp = '^[a-zA-Z0-9_\.\-@._-]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall);
+ },
+ onlyName: function (e, len, isEventCall) {
+ var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall,'Y');
+ },
+ onlyTitle: function (e, len, isEventCall) {
+ var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall,'Y');
+ },
+ onlyText: function (e, len, isEventCall) {
+ var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9_-]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall,'Y');
+ },
+ onlyPassword: function (e, len, isEventCall) {
+ var strRegExp = '^[A-Za-z0-9!@#$%^&*]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall);
+ },
+ onlyId: function (e, len, isEventCall) {
+ var strRegExp = '^[A-Za-z0-9_\.\-]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall);
+ },
+ onlyIp: function (e, len, isEventCall) {
+ var strRegExp = '^[0-9,.*]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall);
+ },
+ onlyRoleNm_Space: function (e, len, isEventCall) {
+ var strRegExp = '^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall,'Y');
+ },
+ onlyRoleId_UnderBar: function (e, len, isEventCall) {
+ var strRegExp = '^[a-zA-Z0-9_]*$';
+ return this.onlyCommon(strRegExp, e, len, isEventCall);
+ },
+ cut: function (ele, len, isValidChk) {
+ let e=ele;
+ if (typeof ele.target != "undefined") {
+ e=ele.target;
+ }
+ let max = this.isNull(len) ? e.attributes.maxlength.value : len;
+ let str = e.value;
+
+ if (this.bytes(str) > max) {
+ if(this.isNull(isValidChk)){
+ e.value = this.cutBytes(str, max);
+ }
+ return false;
+ }
+ return true;
+ },
+ cutBytes: function (str, len) {
+ while(1 === 1){
+ if(this.bytes(str) <= len){
+ return str;
+ }
+ str = str.slice(0,-1);
+ }
+ },
+ bytes: function (str) {
+ var length = ((s,b,i,c) => {
+ // for(b=i=0;c=s.charCodeAt(i++);b+=c>>11?3:c>>7?2:1); // 한글 3바이트
+ // for(b=i=0;c=s.charCodeAt(i++);b+=c>>11?2:c>>7?1:1); //한글 2바이트
+ b=0,i=0;
+ while(1 === 1){
+ c = s.charCodeAt(i++);
+ if (isNaN(c)) {
+ break;
+ }
+ b += c >> 11 ? 2 : c >> 7 ? 1 : 1;
+ }
+ return b
+ })(str);
+ return length;
+ },
+ checkPhone: function(str) {
+ str = str.replace(/[-\s]+/g, '');
+ if (str.charAt(0)!="0"){
+ str = "0"+str;
+ }
+ if (str.length<10||str.length>12){return "";}
+ if (isNaN(str)){return ""; }
+ if (str.substr(0,2)!="01" && str.substr(0,3)!="070" && str.substr(0,4)!="0505" && str.substr(0,4)!="0503"){return ""; }
+ return str;
+
+ },
+ }
+ };
+ export { utils_mixin, chkPattern2 };
\ No newline at end of file
diff --git a/frontend/src/modules/mntrng/service/mntrngApi.js b/frontend/src/modules/mntrng/service/mntrngApi.js
new file mode 100644
index 0000000..8f2d602
--- /dev/null
+++ b/frontend/src/modules/mntrng/service/mntrngApi.js
@@ -0,0 +1,16 @@
+import httpClient from '@/common/http-client';
+
+// HUBEZ_BO_API - 일별 통계 목록 조회.
+const sendList = (params) => {
+ return httpClient.post('/api/v1/bo/mntrng/sendList', params, { withCredentials: false });
+}
+
+// HUBEZ_BO_API - 월별 통계 목록 조회.
+const liveSendSttus = (params) => {
+ return httpClient.post('/api/v1/bo/mntrng/liveSendSttus', params, { withCredentials: false });
+}
+
+export default {
+ sendList,
+ liveSendSttus,
+}
\ No newline at end of file
diff --git a/frontend/src/modules/mntrng/views/LiveSendSttus.vue b/frontend/src/modules/mntrng/views/LiveSendSttus.vue
index 8d27a7c..cd02204 100644
--- a/frontend/src/modules/mntrng/views/LiveSendSttus.vue
+++ b/frontend/src/modules/mntrng/views/LiveSendSttus.vue
@@ -1,165 +1,322 @@
-
-
-
-
-
-
실시간 발송 현황 정보 조회
-
시스템관리 > 관리자/유치채널 관리
-
-
-
-
총 100건
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/modules/mntrng/views/SendList.vue b/frontend/src/modules/mntrng/views/SendList.vue
index 9013378..b47c661 100644
--- a/frontend/src/modules/mntrng/views/SendList.vue
+++ b/frontend/src/modules/mntrng/views/SendList.vue
@@ -1,165 +1,321 @@
-
-
-
-
-
-
발송내역 목록 조회
-
시스템관리 > 관리자/유치채널 관리
-
-
-
-
총 100건
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/src/modules/riskMgt/views/IntrcpList.vue b/frontend/src/modules/riskMgt/views/IntrcpList.vue
index 119e5d2..632f4a6 100644
--- a/frontend/src/modules/riskMgt/views/IntrcpList.vue
+++ b/frontend/src/modules/riskMgt/views/IntrcpList.vue
@@ -250,7 +250,6 @@ export default {
this.$refs.commonModal.confirmModalOpen(props);
},
confirmCalbackFnc: function(props){
- console.log('dsfsd');
// if(props.result){
// // this.doInsert(props.result);
// }
diff --git a/frontend/src/modules/sendNumMgt/components/AdminListPop.vue b/frontend/src/modules/sendNumMgt/components/AdminListPop.vue
index 35164ea..8ee6d1d 100644
--- a/frontend/src/modules/sendNumMgt/components/AdminListPop.vue
+++ b/frontend/src/modules/sendNumMgt/components/AdminListPop.vue
@@ -8,167 +8,63 @@
-
-
\ No newline at end of file
diff --git a/frontend/src/modules/sendNumMgt/components/NumberDetailPop.vue b/frontend/src/modules/sendNumMgt/components/NumberDetailPop.vue
index 6c1843a..9506798 100644
--- a/frontend/src/modules/sendNumMgt/components/NumberDetailPop.vue
+++ b/frontend/src/modules/sendNumMgt/components/NumberDetailPop.vue
@@ -1,7 +1,7 @@