diff --git a/frontend/src/assets/css/style.css b/frontend/src/assets/css/style.css index 1c63609..db7c081 100644 --- a/frontend/src/assets/css/style.css +++ b/frontend/src/assets/css/style.css @@ -560,8 +560,6 @@ header .user_wrap .user_info .logout { margin-left: 10px; } -/*******************20220715 퍼블 수정*******************/ - .contents .input_box.cal input { display: inline-block; width: 100%; @@ -570,22 +568,19 @@ header .user_wrap .user_info .logout { background-color:#fff; } -.contents .input_box.cal .term span:nth-of-type(1){ +/*******************20220718 퍼블 수정*******************/ + +.contents .input_box.cal .term .icon_date:first-of-type{ margin-right: 4%; } -.contents .input_box.cal .term span:nth-of-type(2){ +.contents .input_box.cal .term .icon_date:nth-of-type(2){ margin-left: 4%; } /*******************************************/ -/***** 20220715 퍼블 삭제 -.contents .input_box.cal input + input{ - margin-left: 5%; -} **/ - .contents .input_box.cal.one{ width: 13.67%; } @@ -604,11 +599,6 @@ header .user_wrap .user_info .logout { align-items: center; } -/** 20220715 퍼블 삭제 -.contents .input_box.cal .term input:nth-child(1){ - margin-right: 4%; -} ***********/ - .contents .input_box .search-box { background: #fff url(../images/icon-search.png) no-repeat 6% center/14px auto; padding-left: 43px; @@ -1582,11 +1572,25 @@ header .user_wrap .user_info .logout { background: url(../images/icon-add-b.png) no-repeat center center; } -.popup.popup_form.register .input_add div:nth-child(2){ - width: 89%; +/********** 20220718 퍼블 수정 ************/ + +.popup.popup_form.register .input_add div+div{ + width: 89%; padding-top: 5px; } +/********** 20220718 퍼블 추가 ************/ + +.popup.popup_inside{ + max-height: 60vh; +} + +.popup.popup_inside .pop-head{ + left: 0px; +} + +/****************************************/ + .popup .button.white{ background-color: #fff; border-radius: 6px; @@ -1744,11 +1748,15 @@ header .user_wrap .user_info .logout { align-items: flex-start; } -.essential span{ - /*color:#eb008b;*/ +/*******************20220718 퍼블 수정*******************/ + +.essential label span{ + color:#eb008b; padding-right: 3px; } +/**************************************/ + textarea{ resize: none; min-height: 100px; @@ -1784,7 +1792,7 @@ textarea:focus{ .datepicker .datepicker-calender tr td:first-child a{color:#ff2e76;} .datepicker .datepicker-head .datepicker-btn span{position: relative;} .datepicker .datepicker-head .datepicker-prev span::after{position: absolute; left: 70px; top: 10px; content: ''; width: 10px; height: 10px; border-top: 2px solid #5f5f5f; border-right: 2px solid #5f5f5f; transform: rotate(225deg);} -.datepicker .datepicker-head .datepicker-next span::after{position: absolute; left: 70px; top: 10px; content: ''; width: 10px; height: 10px; border-top: 2px solid #5f5f5f; border-right: 2px solid #5f5f5f; transform: rotate(45deg);} +.datepicker .datepicker-head .datepicker-next span::after{position: absolute; left: 185px; top: 10px; content: ''; width: 10px; height: 10px; border-top: 2px solid #5f5f5f; border-right: 2px solid #5f5f5f; transform: rotate(45deg);} .datepicker .datepicker-calender td:hover:not(.disabled){background-color: #efefef; border-radius: 50%;} .datepicker .datepicker-calender td:hover a{color:#000;} .datepicker .datepicker-calender .today{background-color: #7c7c7c; border-radius: 50%;} diff --git a/frontend/src/components/modal/commonModal.vue b/frontend/src/components/modal/commonModal.vue index efc7722..de2550a 100644 --- a/frontend/src/components/modal/commonModal.vue +++ b/frontend/src/components/modal/commonModal.vue @@ -1,13 +1,13 @@ \ No newline at end of file diff --git a/frontend/src/modules/attractMgt/service/mock/channelExcelHeader.json b/frontend/src/modules/attractMgt/service/mock/channelExcelHeader.json index 2edd1a7..01b5079 100644 --- a/frontend/src/modules/attractMgt/service/mock/channelExcelHeader.json +++ b/frontend/src/modules/attractMgt/service/mock/channelExcelHeader.json @@ -30,11 +30,11 @@ "name": "이름" }, { - "key": "subsSttusCd", + "key": "subsSttusNm", "name": "상태" }, { - "key": "custTyCd", + "key": "custTyNm", "name": "구분" }, { diff --git a/frontend/src/modules/custMgt/components/MemberBulkRegPop.vue b/frontend/src/modules/custMgt/components/MemberBulkRegPop.vue index 12c9217..341fffe 100644 --- a/frontend/src/modules/custMgt/components/MemberBulkRegPop.vue +++ b/frontend/src/modules/custMgt/components/MemberBulkRegPop.vue @@ -22,7 +22,7 @@ ref="file" style="display: none" @change="readFile" - accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /> @@ -38,6 +38,7 @@ + @@ -49,6 +50,7 @@ import {utils_mixin, chkPattern2} from '../service/mixins'; import xlsx from '@/common/excel'; import moment from 'moment'; import XLSX from 'xlsx'; +import commonModal from "../components/commonModal"; // import ValidationConfirmPop from "./ValidationConfirmPop"; export default { @@ -65,10 +67,14 @@ export default { nData: [], oData: [], totalItems: 0, + totalCnt: 0, + failCnt: 0, + insertRowCnt: 0 }; }, components: { // ValidationConfirmPop, + commonModal }, created() { this.getExcelHeader(); @@ -102,7 +108,7 @@ export default { this.row.serviceId = this.adminId; // 팝업으로 교체 예정 // if (confirm('정상 업로드 되었습니다.')) { - this.excelPopClose(); + this.excelPopClose(); this.$parent.memberDetail(this.adminId); // } }, @@ -115,7 +121,7 @@ export default { this.row.title = '청약고객관리'; this.row.msg1 = '저장 하였습니다.'; this.$refs.commmonModal.alertModalOpen(this.row); - this.toComplete(); + this.toComplete(); } } catch (err) { this.row.title = '청약고객관리'; @@ -145,8 +151,32 @@ export default { this.nData = []; this.oData = []; + + + + const file = event.target.files[0]; + + // 파일 개수 제한 + if(file != null){ + let element = document.getElementById('uploadFile'); + while (element.firstChild) { + element.removeChild(element.firstChild); + } + } console.log(file.name); + // 파일 이름 체크 + var fileName = file.name; + var fileExpend = fileName .slice(fileName .indexOf(".") + 1).toLowerCase(); + if(fileExpend != "xlsx"){ + //alert("파일은 (xlsx) 형식만 등록 가능합니다."); + this.row.title = '파일 업로드'; + this.row.msg1 = '샘플과 동일한 확장자가 아닙니다.'; + this.row.msg1 = '다시 업로드 해주세요.'; + this.$refs.commmonModal.alertModalOpen(this.row); + return false; + } + // inner Html. const button = document.createElement('button'); @@ -176,18 +206,20 @@ export default { let workbook = XLSX.read(data, {type: 'binary'}); workbook.SheetNames.forEach((sheetName) => { const rowObj = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], {raw: true}); + console.log(rowObj); tmpResult = rowObj; const limitCnt = 100; - const totalCnt = Number(this.totalItems) + rowObj.length; - - if (totalCnt > limitCnt) { + this.totalCnt = Number(this.totalItems) + rowObj.length; + this.insertRowCnt = rowObj.length; + console.log('totalCnt : '+this.totalCnt +' limitCnt : '+limitCnt); + if (this.totalCnt > limitCnt) { this.row.title = '청약고객관리'; this.row.msg1 = '100건이상은 등록되지 않습니다.'; this.$refs.commmonModal.alertModalOpen(this.row); return false; } - + for (const [idx, r] of rowObj.entries()) { if (idx > limitCnt - 1) { break; @@ -286,12 +318,12 @@ export default { const result = response.data; console.log(result); if (result != null && result.retCode == '0000') { - this.totalCnt = result.data.totalCnt; + //this.totalCnt = result.data.totalCnt; this.successCnt = result.data.successCnt; - this.failCnt = result.data.failCnt; + this.failCnt = Number(this.failCnt) + Number(result.data.failCnt); if (result.data.failCnt > 0) { - this.row.totalCnt = this.totalCnt + this.row.totalCnt = this.insertRowCnt this.row.successCnt = this.successCnt this.row.failCnt = this.failCnt this.$parent.$refs.validationConfirmPopModal.failFileuploadOpen(this.row); @@ -319,6 +351,14 @@ export default { this.$parent.memberDetail(this.adminId); } }, + + checkFocus() { + this.$refs.file.value = null; + let element = document.getElementById('uploadFile'); + while (element.firstChild) { + element.removeChild(element.firstChild); + } + } }, }; \ No newline at end of file diff --git a/frontend/src/modules/custMgt/components/ValidationConfirmPop.vue b/frontend/src/modules/custMgt/components/ValidationConfirmPop.vue index f6075d6..c65bc94 100644 --- a/frontend/src/modules/custMgt/components/ValidationConfirmPop.vue +++ b/frontend/src/modules/custMgt/components/ValidationConfirmPop.vue @@ -338,8 +338,8 @@ export default { for (var i = 0; i < dimmed.length; i++) { dimmed[i].style.display = 'none'; } - // 목록페이지 이동 - this.$parent.toComplete(); + // 화면 리로드 + this.$parent.successFileuploadOk(); }, // 정상완료 후 목록페이지 이동 toComplete() { diff --git a/frontend/src/modules/custMgt/views/MemberAdminDetail.vue b/frontend/src/modules/custMgt/views/MemberAdminDetail.vue index 62458fd..f7429a5 100644 --- a/frontend/src/modules/custMgt/views/MemberAdminDetail.vue +++ b/frontend/src/modules/custMgt/views/MemberAdminDetail.vue @@ -439,6 +439,20 @@ export default { this.memberDelete(); } }, + + // 대량 등록후 확인 처리 + failFileuploadOk(){ + // 대량등록 팝업 닫기 + this.$refs.memberBulkRegPop.excelPopClose(); + // reroad + this.memberDetail(this.$route.params.serviceId); + } + ,successFileuploadOk(){ + // 대량등록 팝업 닫기 + this.$refs.memberBulkRegPop.excelPopClose(); + // reroad + this.memberDetail(this.$route.params.serviceId); + } }, }; diff --git a/frontend/src/modules/custMgt/views/SubsList.vue b/frontend/src/modules/custMgt/views/SubsList.vue index 1948f17..4f26278 100644 --- a/frontend/src/modules/custMgt/views/SubsList.vue +++ b/frontend/src/modules/custMgt/views/SubsList.vue @@ -73,7 +73,7 @@
-
diff --git a/frontend/src/modules/login/views/LoginMain.vue b/frontend/src/modules/login/views/LoginMain.vue index 1d6a44a..92af810 100644 --- a/frontend/src/modules/login/views/LoginMain.vue +++ b/frontend/src/modules/login/views/LoginMain.vue @@ -123,11 +123,17 @@ export default { if(rsp.retCode == '0000'){ var path = rsp.data.nextUrl; console.log(path); + console.log(rsp.data); vm.chgChkUserId(); vm.$store.commit("login/isLogin", true); vm.$store.commit("login/savePwd", oprtrPw); vm.$router.push({ name: 'loginAuth',params: {userId : oprtrId}}); - } else if(rsp.retCode == '4003') { // ID 조회 없음. + } else if(rsp.retCode == '1001'){ // 비밀번호 변경 + console.log('=-==-=-=-'); + console.log(this.userId); + vm.chgChkUserId(); + this.$router.push({ name: 'updatePassword',params: {userId : this.userId}}); + }else if(rsp.retCode == '4003') { // ID 조회 없음. this.row.title = '로그인 실패'; this.row.msg1 = '등록되지 않은 아이디입니다.'; this.row.msg2 = '아이디를 다시 확인하세요'; diff --git a/frontend/src/modules/login/views/UpdatePassword.vue b/frontend/src/modules/login/views/UpdatePassword.vue index 58a0228..b74a50f 100644 --- a/frontend/src/modules/login/views/UpdatePassword.vue +++ b/frontend/src/modules/login/views/UpdatePassword.vue @@ -128,7 +128,7 @@ export default { this.row.title = '비밀번호 변경'; this.row.msg1 = '비밀번호가 정상적으로 변경되었습니다.'; this.row.msg2 = '변경된 비밀번호로 다시 로그인 해주세요.'; - this.callFnc = 'login' + this.row.callFnc = 'login' this.$refs.commonModal.alertModalOpen(this.row); } else if(rsp.retCode == '4016') { this.row.title = '비밀번호 변경'; @@ -176,7 +176,8 @@ export default { this.$refs.oldPw.focus(target); }, alertCalbackFnc(callFnc){ - if(callFnc === 'login'){ + console.log(callFnc); + if(callFnc === 'login'){ this.$router.push({ name: 'login',params: {}}); } }, diff --git a/frontend/src/modules/riskMgt/components/IntrcpMsgDetail.vue b/frontend/src/modules/riskMgt/components/IntrcpMsgDetail.vue index c251d6b..82aea1a 100644 --- a/frontend/src/modules/riskMgt/components/IntrcpMsgDetail.vue +++ b/frontend/src/modules/riskMgt/components/IntrcpMsgDetail.vue @@ -14,7 +14,7 @@ 차단문구 - + @@ -292,7 +292,40 @@ export default { this.$refs.ValidationConfirmPopup.msgConfirmDeleteOpen(); } }, + // 바이트길이 구하기 + 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) // 글자 한 개가 몇 바이트 길이인지 구해주기 + // console.log(byte) + // 현재까지의 바이트 길이와 더해 최대 바이트 길이를 넘지 않으면 + if (totalByte + byte <= maxByte) { + totalByte += byte // 바이트 길이 값을 더해 현재까지의 총 바이트 길이 값을 구함 + validText += character // 글자를 더해 현재까지의 총 문자열 값을 구함 + } else { // 최대 바이트 길이를 넘으면 + break // for 루프 종료 + } + } + return validText + }, + msgLimitByte(){ + this.word = this.getLimitedByteText(this.word, 10); + } }, diff --git a/frontend/src/modules/sendNumMgt/components/AdminListPop.vue b/frontend/src/modules/sendNumMgt/components/AdminListPop.vue index 88e582e..d2ac4fe 100644 --- a/frontend/src/modules/sendNumMgt/components/AdminListPop.vue +++ b/frontend/src/modules/sendNumMgt/components/AdminListPop.vue @@ -1,7 +1,7 @@ @@ -133,7 +132,6 @@