From add0cdefd56c50c5427945c895574f71202e7ed6 Mon Sep 17 00:00:00 2001 From: minhee <alsdldlfrl@gmail.com> Date: 수, 16 3월 2022 18:12:51 +0900 Subject: [PATCH] - api로 이슈 추가 시 사용자정의필드 타입으로 체크 => 정규식표현검사로 체크로 변경 --- src/main/java/kr/wisestone/owl/repository/CompanyFieldRepository.java | 2 src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java | 19 + src/main/resources/mybatis/query-template/companyField-template.xml | 18 + src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js | 119 ++++++++++ src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java | 154 +++++++++++-- src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js | 136 +++++++++++ src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java | 23 ++ src/main/webapp/i18n/ko/global.json | 6 src/main/webapp/views/companyField/companyFieldModify.html | 66 +++-- src/main/resources/migration/V1_11__alter_data.sql | 6 src/main/webapp/assets/styles/main.css | 19 + src/main/webapp/views/companyField/companyFieldAdd.html | 69 +++-- 12 files changed, 538 insertions(+), 99 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/repository/CompanyFieldRepository.java b/src/main/java/kr/wisestone/owl/repository/CompanyFieldRepository.java index 5c0f392..5c91c4a 100644 --- a/src/main/java/kr/wisestone/owl/repository/CompanyFieldRepository.java +++ b/src/main/java/kr/wisestone/owl/repository/CompanyFieldRepository.java @@ -19,4 +19,6 @@ List<CompanyField> findByIspId(@Param("isp_id") Long id); List<CompanyField> findByHostingId(@Param("hosting_id") Long id); + + List<CompanyField> findByIdNot(@Param("id") Long id); } diff --git a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java index f2f56c6..0b9734d 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java @@ -84,30 +84,41 @@ // �뾽泥대챸 以묐났 泥댄겕 this.verifyTitle(companyFieldForm.getName(), null); - if (companyFieldForm.getIpStart() != null && companyFieldForm.getIpEnd() != null) { - // �븘�씠�뵾 �쑀�슚�꽦 泥댄겕 - this.verifyIp(companyFieldForm.getIpStart(), companyFieldForm.getIpEnd(), null); - } - if (companyFieldForm.getUrl() != null) { // url �쑀�슚�꽦 泥댄겕 this.verifyUrl(companyFieldForm.getUrl(), null); } + if (companyFieldForm.getIpStarts() != null && companyFieldForm.getIpStarts().size() > 0 + && companyFieldForm.getIpEnds() != null && companyFieldForm.getIpEnds().size() > 0) { + + for (int i=0; i<companyFieldForm.getIpStarts().size(); i++) { + // �븘�씠�뵾 �쑀�슚�꽦 泥댄겕 + this.verifyIp(companyFieldForm.getIpStarts().get(i), companyFieldForm.getIpEnds().get(i), null); + } + + String startIps = companyFieldForm.getIpStarts().toString(); + // ��愿꾪샇 �젣嫄� + startIps = this.removeSquare(startIps); + companyFieldForm.setIpStart(startIps.trim()); + + String endIps = companyFieldForm.getIpEnds().toString(); + // ��愿꾪샇 �젣嫄� + endIps = this.removeSquare(endIps); + companyFieldForm.setIpEnd(endIps.trim()); + } + if (companyFieldForm.getTelList() != null && companyFieldForm.getTelList().size() > 0) { String tels = companyFieldForm.getTelList().toString(); - if (tels.contains("[")) { - tels = tels.substring(1, tels.indexOf("]")); - } + // ��愿꾪샇 �젣嫄� + tels = this.removeSquare(tels); companyFieldForm.setTel(tels.trim()); } if (companyFieldForm.getEmailList() != null && companyFieldForm.getEmailList().size() > 0) { String emails = companyFieldForm.getEmailList().toString(); - String email = ""; - if (emails.contains("[")) { - email = emails.substring(1, emails.indexOf("]")); - } - companyFieldForm.setEmail(email.trim()); + // ��愿꾪샇 �젣嫄� + emails = this.removeSquare(emails); + companyFieldForm.setEmail(emails.trim()); } CompanyField companyField = ConvertUtil.copyProperties(companyFieldForm, CompanyField.class); @@ -116,8 +127,23 @@ } /** + * ��愿꾪샇([]) �젣嫄� �븿�닔 + * @param str String + * @return str + */ + private String removeSquare(String str) { + if (str.contains("[")) { + str = str.substring(1, str.indexOf("]")); + } + + return str; + } + + /** * IP �쑀�슚�꽦 泥댄겕 * @param ip String + * @param ip2 String + * @param id Long */ private void verifyIp(String ip, String ip2, Long id) { if (!StringUtils.isEmpty(ip)) { @@ -146,14 +172,76 @@ condition.setIpEnd(String.valueOf(ipEnd)); if (id != null) { condition.setId(id); - companyFields = this.companyFieldMapper.findByIpsAndIdNot(condition); + companyFields = this.companyFieldRepository.findByIdNot(condition.getId()); } else { - companyFields = this.companyFieldMapper.findByIps(condition); + companyFields = this.companyFieldRepository.findAll(); } // IP���뿭�� 以묐났 泥댄겕 - if (companyFields != null && companyFields.size() > 0) { + this.ipOverlapChk(companyFields, ipStart, ipEnd); + + /*if (companyFields != null && companyFields.size() > 0) { throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.COMPANY_EXIST_IP)); + }*/ + } + } + + /** + * ip ���뿭�� 以묐났 泥댄겕 + * @param companyFields List<CompanyField> + */ + private void ipOverlapChk(List<CompanyField> companyFields, long ipStart, long ipEnd) { + String[] ipStartArr = null; + String[] ipEndArr = null; + List<String> startIpList = Lists.newArrayList(); + List<String> endIpList = Lists.newArrayList(); + String startIp = ""; + String endIp = ""; + List<Long> startIps = Lists.newArrayList(); + List<Long> endIps = Lists.newArrayList(); + + if (companyFields.size() > 0) { + for (CompanyField companyField : companyFields) { + if(companyField.getIpStart() != null && companyField.getIpEnd() != null) { + startIp = companyField.getIpStart(); + if (startIp.contains(" ")) { + startIp = startIp.replace(" ",""); + } + if (startIp.contains(",")) { + ipStartArr = startIp.split(","); + startIpList.addAll(Arrays.asList(ipStartArr)); + } else { + startIpList.add(startIp.trim()); + } + + endIp = companyField.getIpEnd(); + if (endIp.contains(" ")) { + endIp = endIp.replace(" ",""); + } + if (endIp.contains(",")) { + ipEndArr = endIp.split(","); + endIpList.addAll(Arrays.asList(ipEndArr)); + } else { + endIpList.add(endIp.trim()); + } + } + } + if (startIpList.size() > 0) { + for (String ipS : startIpList) { + long start = ConvertUtil.ipToLong(ipS); + startIps.add(start); + } + for (String ipE : endIpList) { + long end = ConvertUtil.ipToLong(ipE); + endIps.add(end); + } + } + + for (int i=0; i<startIps.size(); i++) { + if (startIps.get(i) >= ipStart && startIps.get(i) <= ipEnd || endIps.get(i) >= ipStart && endIps.get(i) <= ipEnd + || ipStart >= startIps.get(i) && ipStart <= endIps.get(i) || ipEnd >= startIps.get(i) && ipEnd <= endIps.get(i)) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.COMPANY_EXIST_IP)); + } } } } @@ -297,28 +385,40 @@ // �뾽泥대챸 �쑀�슚�꽦 泥댄겕 this.verifyTitle(companyFieldForm.getName(), companyFieldForm.getId()); - if (companyFieldForm.getIpStart() != null && companyFieldForm.getIpEnd() != null) { - // �븘�씠�뵾 �쑀�슚�꽦 泥댄겕 - this.verifyIp(companyFieldForm.getIpStart(), companyFieldForm.getIpEnd(), companyFieldForm.getId()); - } - if (companyFieldForm.getUrl() != null) { // url �쑀�슚�꽦 泥댄겕 this.verifyUrl(companyFieldForm.getUrl(), companyFieldForm.getId()); } + if (companyFieldForm.getIpStarts() != null && companyFieldForm.getIpStarts().size() > 0 + && companyFieldForm.getIpEnds() != null && companyFieldForm.getIpEnds().size() > 0) { + + for (int i=0; i<companyFieldForm.getIpStarts().size(); i++) { + // �븘�씠�뵾 �쑀�슚�꽦 泥댄겕 + this.verifyIp(companyFieldForm.getIpStarts().get(i), companyFieldForm.getIpEnds().get(i), companyFieldForm.getId()); + } + + String startIps = companyFieldForm.getIpStarts().toString(); + // ��愿꾪샇 �젣嫄� + startIps = this.removeSquare(startIps); + companyFieldForm.setIpStart(startIps.trim()); + + String endIps = companyFieldForm.getIpEnds().toString(); + // ��愿꾪샇 �젣嫄� + endIps = this.removeSquare(endIps); + companyFieldForm.setIpEnd(endIps.trim()); + } + if (companyFieldForm.getTelList() != null && companyFieldForm.getTelList().size() > 0) { String tels = companyFieldForm.getTelList().toString(); - if (tels.contains("[")) { - tels = tels.substring(1, tels.indexOf("]")); - } + // ��愿꾪샇 �젣嫄� + tels = this.removeSquare(tels); companyFieldForm.setTel(tels.trim()); } if (companyFieldForm.getEmailList() != null && companyFieldForm.getEmailList().size() > 0) { String emails = companyFieldForm.getEmailList().toString(); - if (emails.contains("[")) { - emails = emails.substring(1, emails.indexOf("]")); - } + // ��愿꾪샇 �젣嫄� + emails = this.removeSquare(emails); companyFieldForm.setEmail(emails.trim()); } diff --git a/src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java b/src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java index e55ccf4..e97f840 100644 --- a/src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java +++ b/src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java @@ -2,6 +2,7 @@ import kr.wisestone.owl.util.ConvertUtil; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -16,6 +17,8 @@ private long ip; private String ipStart; private String ipEnd; + private List<String> ipStarts = new ArrayList<>(); + private List<String> ipEnds = new ArrayList<>(); private String memo; private Long ispId; private Long hostingId; @@ -131,6 +134,22 @@ this.ipEnd = ipEnd; } + public List<String> getIpStarts() { + return ipStarts; + } + + public void setIpStarts(List<String> ipStarts) { + this.ipStarts = ipStarts; + } + + public List<String> getIpEnds() { + return ipEnds; + } + + public void setIpEnds(List<String> ipEnds) { + this.ipEnds = ipEnds; + } + public Long getIspId() { return ispId; } diff --git a/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java b/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java index dbd1d3f..6d2c96d 100644 --- a/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java +++ b/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java @@ -13,6 +13,8 @@ private String url; private String ipStart; private String ipEnd; + private List<String> ipStarts = new ArrayList<>(); + private List<String> ipEnds = new ArrayList<>(); private String memo; private String tel; private Long ispId; @@ -43,6 +45,11 @@ if (MapUtil.getStrings(params, "emails") != null) { form.setEmailList(MapUtil.getStrings(params, "emails")); + } + + if (MapUtil.getStrings(params, "ipStarts") != null && MapUtil.getStrings(params, "ipEnds") != null) { + form.setIpStarts(MapUtil.getStrings(params, "ipStarts")); + form.setIpEnds(MapUtil.getStrings(params, "ipEnds")); } if (MapUtil.getLongs(params,"removeIds") != null) { @@ -91,6 +98,22 @@ this.ipEnd = ipEnd; } + public List<String> getIpStarts() { + return ipStarts; + } + + public void setIpStarts(List<String> ipStarts) { + this.ipStarts = ipStarts; + } + + public List<String> getIpEnds() { + return ipEnds; + } + + public void setIpEnds(List<String> ipEnds) { + this.ipEnds = ipEnds; + } + public String getMemo() { return memo; } diff --git a/src/main/resources/migration/V1_11__alter_data.sql b/src/main/resources/migration/V1_11__alter_data.sql new file mode 100644 index 0000000..f4212ab --- /dev/null +++ b/src/main/resources/migration/V1_11__alter_data.sql @@ -0,0 +1,6 @@ + +/* �뾽泥� IP ���뿭�� 而щ읆 蹂�寃� */ +ALTER TABLE `company_field` MODIFY COLUMN `ip_start` varchar(255) NULL; +ALTER TABLE `company_field` MODIFY COLUMN `ip_end` varchar(255) NULL; +ALTER TABLE `issue_company` MODIFY COLUMN `ip_start` varchar(255) NULL; +ALTER TABLE `issue_company` MODIFY COLUMN `ip_end` varchar(255) NULL; \ No newline at end of file diff --git a/src/main/resources/mybatis/query-template/companyField-template.xml b/src/main/resources/mybatis/query-template/companyField-template.xml index a4a8708..6e3eab6 100644 --- a/src/main/resources/mybatis/query-template/companyField-template.xml +++ b/src/main/resources/mybatis/query-template/companyField-template.xml @@ -97,7 +97,9 @@ cf.id as id, cf.name as name, cf.email as email, - cf.url as url + cf.url as url, + cf.ip_start AS ipStart, + cf.ip_end AS ipEnd FROM company_field cf WHERE 1=1 @@ -122,13 +124,16 @@ cf.id as id, cf.name as name, cf.email as email, - cf.url as url + cf.url as url, + cf.ip_start AS ipStart, + cf.ip_end AS ipEnd FROM company_field cf WHERE 1=1 <choose> <when test="ipStart != null and ipStart != '' and ipEnd != null and ipEnd != ''"> - AND INET_ATON(cf.ip_start) BETWEEN #{ipStart} AND #{ipEnd} OR INET_ATON(cf.ip_end) BETWEEN #{ipStart} AND #{ipEnd} + AND (INET_ATON(cf.ip_start) BETWEEN #{ipStart} AND #{ipEnd} OR INET_ATON(cf.ip_end) BETWEEN #{ipStart} AND #{ipEnd} + OR #{ipStart} BETWEEN INET_ATON(cf.ip_start) AND INET_ATON(cf.ip_end) OR #{ipEnd} BETWEEN INET_ATON(cf.ip_start) AND INET_ATON(cf.ip_end)) </when> </choose> </select> @@ -138,13 +143,16 @@ cf.id as id, cf.name as name, cf.email as email, - cf.url as url + cf.url as url, + cf.ip_start AS ipStart, + cf.ip_end AS ipEnd FROM company_field cf WHERE 1=1 <choose> <when test="ipStart != null and ipStart != '' and ipEnd != null and ipEnd != ''"> - AND (INET_ATON(cf.ip_start) BETWEEN #{ipStart} AND #{ipEnd} OR INET_ATON(cf.ip_end) BETWEEN #{ipStart} AND #{ipEnd}) + AND (INET_ATON(cf.ip_start) BETWEEN #{ipStart} AND #{ipEnd} OR INET_ATON(cf.ip_end) BETWEEN #{ipStart} AND #{ipEnd} + OR #{ipStart} BETWEEN INET_ATON(cf.ip_start) AND INET_ATON(cf.ip_end) OR #{ipEnd} BETWEEN INET_ATON(cf.ip_start) AND INET_ATON(cf.ip_end)) </when> </choose> <if test="id != '' and id != null"> diff --git a/src/main/webapp/assets/styles/main.css b/src/main/webapp/assets/styles/main.css index 0d485e4..b53f33d 100644 --- a/src/main/webapp/assets/styles/main.css +++ b/src/main/webapp/assets/styles/main.css @@ -11326,11 +11326,28 @@ .select3-selection__email__remove { color: #0066ff; margin-left: 8px; - margin-top: 7px; + margin-top: 9px; cursor: pointer; font-size: 0.79rem; } +.select3-selection__ipRange__remove { + color: #0066ff; + padding-left: 9px; + margin-top: 7px; + margin-left: -2px; + margin-right: 9px; + cursor: pointer; + font-size: 0.79rem; +} + +.select3-selection__ipRange__tilde { + padding-left: 9px; + margin-top: 7px; + margin-left: 6px; + margin-right: -18px; +} + .select4-selection__choice { font-size: 0.66rem; letter-spacing: -0.01em; diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json index 045c675..4c8e0ee 100644 --- a/src/main/webapp/i18n/ko/global.json +++ b/src/main/webapp/i18n/ko/global.json @@ -1017,6 +1017,12 @@ "invalidTelFormat": "�쟾�솕踰덊샇 �삎�떇�씠 留욎� �븡�뒿�땲�떎. xxx-xxx-xxxx �삎�떇�쑝濡� �엯�젰�븯�꽭�슂.", "writeCompanyTel": "�쟾�솕踰덊샇瑜� �엯�젰�빐二쇱꽭�슂.", "writeTel": "�쟾�솕踰덊샇瑜� �엯�젰�븯�뀛�빞 異붽��븷�닔 �엳�뒿�땲�떎.", + "ipRangeError": "IP ���뿭�� �엯�젰 �떎�뙣", + "ipStartNotLargerThanEnd": "�떆�옉 IP媛� �걹 IP 蹂대떎 �겢 �닔 �뾾�뒿�땲�떎.", + "ipRangeNotEnter": "�떆�옉 IP�� �걹 IP 紐⑤몢 �엯�젰 �빐�빞 �빀�땲�떎.", + "ipRangeNotOverlap": "以묐났�릺�뒗 ip ���뿭��媛� 議댁옱�빀�땲�떎.", + "writeCompanyIpRange": "IP ���뿭��瑜� �엯�젰�빐二쇱꽭�슂.", + "writeIpRange": "IP ���뿭��瑜� �엯�젰�븯�뀛�빞 異붽��븷�닔 �엳�뒿�땲�떎.", "registerExcelCompanyFields": "�뿊��濡� �뾽泥� �벑濡앺븯湲�", "registerExcelUploadCompanyField": "�뿊�� �뾽濡쒕뱶 �뾽泥� �벑濡�", "succeededCompanyFieldRegistration": "�뾽泥� �벑濡� �꽦怨�", diff --git a/src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js b/src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js index e2a2c5c..5465d18 100644 --- a/src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js +++ b/src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js @@ -23,8 +23,10 @@ getStatusListCallBack : getStatusListCallBack, addTel : addTel, addMail : addMail, + addIpRange : addIpRange, removeTelInput : removeTelInput, - removeMailInput : removeMailInput + removeMailInput : removeMailInput, + removeIpRangeInput : removeIpRangeInput }; $scope.vm = { @@ -52,9 +54,13 @@ statusId : "", status : "", //�긽�깭 inputTels : [0], //�뿰�씫泥� - tels : {}, + tels : [], inputMails : [0], //�씠硫붿씪 - emails : {} + emails : [], + inputIpStarts : [0], //ip �떆�옉�젏 + ipStarts : [], + inputIpEnds : [0], //ip 醫낅즺�젏 + ipEnds : [] }, typeCategory : { companyType : "COMPANYTYPE", @@ -260,8 +266,30 @@ } return url; })(), - ipStart : $scope.vm.form.ipStart, // ip�떆�옉二쇱냼 - ipEnd : $scope.vm.form.ipEnd, // ip醫낅즺二쇱냼 + ipStarts : (function () { + var ipStarts = []; + if ($scope.vm.form.ipStarts != null) { + angular.forEach($scope.vm.form.ipStarts, function (ipS) { + ipStarts.push(ipS); + }); + ipStarts = ipStarts.filter(function(item) { //�벐�젅湲� �뜲�씠�꽣 �븘�꽣留� + return item !== null && item !== undefined && item !== ''; + }); + } + return ipStarts; + })(), + ipEnds : (function () { + var ipEnds = []; + if ($scope.vm.form.ipEnds != null) { + angular.forEach($scope.vm.form.ipEnds, function (ipE) { + ipEnds.push(ipE); + }); + ipEnds = ipEnds.filter(function(item) { //�벐�젅湲� �뜲�씠�꽣 �븘�꽣留� + return item !== null && item !== undefined && item !== ''; + }); + } + return ipEnds; + })(), memo : $scope.vm.form.memo, //鍮꾧퀬 companyTypeId : (function () { var companyTypeId = null; @@ -303,6 +331,13 @@ statusName : $scope.vm.form.status }; + // ip ���뿭�� �쑀�슚�꽦 泥댄겕 + let result = ipRangeChk(content.ipStarts, content.ipEnds); + if (!result) { + $rootScope.spinner = false; + return; + } + CompanyField.add($resourceProvider.getContent(content, $resourceProvider.getPageContent(0, 10))).then(function (result) { @@ -312,12 +347,62 @@ $rootScope.$broadcast("getPageList", {}); } else { - SweetAlert.error($filter("translate")("companyField.failedCompanyFieldRegistration"), result.data.message.message); + SweetAlert.warning($filter("translate")("companyField.failedCompanyFieldRegistration"), result.data.message.message); } $rootScope.spinner = false; }); + } + + // ip ���뿭�� �쑀�슚�꽦 寃��궗 + function ipRangeChk(ipStarts, ipEnds) { + let result = true; + if ($rootScope.isDefined(ipStarts) && $rootScope.isDefined(ipEnds)) { + if (ipStarts.length !== ipEnds.length) { + SweetAlert.warning($filter("translate")("companyField.ipRangeError"), $filter("translate")("companyField.ipRangeNotEnter")); + result = false; + return; + } + + let ipStartArr = []; + let ipEndArr = []; + + for (let i=0; i<ipStarts.length; i++) { + let ipStart = ipToLong(ipStarts[i]); + let ipEnd = ipToLong(ipEnds[i]); + if (ipEnd < ipStart) { + SweetAlert.warning($filter("translate")("companyField.ipRangeError"), $filter("translate")("companyField.ipStartNotLargerThanEnd")); + result = false; + return; + } + ipStartArr.push(ipStart); + ipEndArr.push(ipEnd); + } + + for (let i=0; i<ipStartArr.length; i++) { + if ($rootScope.isDefined(ipStartArr[i+1])) { + if((ipStartArr[i] >= ipStartArr[i+1] && ipStartArr[i] <= ipEndArr[i+1]) + || (ipEndArr[i] >= ipStartArr[i+1] && ipEndArr[i] <= ipEndArr[i+1])) { + SweetAlert.warning($filter("translate")("companyField.ipRangeError"), $filter("translate")("companyField.ipRangeNotOverlap")); + result = false; + return; + } + } + } + } + return result; + } + + // ip 二쇱냼 �닽�옄濡� 蹂��솚 + function ipToLong(ip) { + let result = 0; + let ipArr = ip.split("."); + + for (let i=0; i<ipArr.length; i++) { + result += parseInt(ipArr[i]) * Math.pow(256, 3-i); + } + return result; } // �뿰�씫泥� input 李� 異붽� 踰꾪듉 @@ -358,14 +443,53 @@ } } + // IPRange input 李� 異붽� 踰꾪듉 + function addIpRange() { + var arrayFull = true; // 諛곗뿴�씠 媛��뱷 李� �엳�뒗吏� �뿬遺� + var startIdx = 0; + var endIdx = 0; + $scope.vm.form.inputIpStarts.forEach(function (start) { + if (!$rootScope.isDefined($scope.vm.form.ipStarts[startIdx])) { + arrayFull = false; + } + startIdx++; + }); + + $scope.vm.form.inputIpEnds.forEach(function (start) { + if (!$rootScope.isDefined($scope.vm.form.ipEnds[endIdx])) { + arrayFull = false; + } + endIdx++; + }); + + if (arrayFull) { + $scope.vm.form.inputIpStarts.push(startIdx); + $scope.vm.form.ipStarts[startIdx] = ""; + $scope.vm.form.inputIpEnds.push(endIdx); + $scope.vm.form.ipEnds[endIdx] = ""; + } else { + SweetAlert.warning($filter("translate")("companyField.writeCompanyIpRange"), $filter("translate")("companyField.writeIpRange")); // 異붽�踰꾪듉 寃쎄퀬 + } + } + // �뿰�씫泥� input �궘�젣 function removeTelInput(index) { $scope.vm.form.inputTels.splice(index, 1); + $scope.vm.form.tels.splice(index, 1); } // �씠硫붿씪 二쇱냼 input �궘�젣 function removeMailInput(index) { $scope.vm.form.inputMails.splice(index, 1); + $scope.vm.form.emails.splice(index, 1); + } + + // ipRange input �궘�젣 + function removeIpRangeInput(index) { + $scope.vm.form.inputIpStarts.splice(index, 1); + $scope.vm.form.ipStarts.splice(index, 1); + $scope.vm.form.inputIpEnds.splice(index, 1); + $scope.vm.form.ipEnds.splice(index, 1); } // �뙘�뾽 李� �떕湲� diff --git a/src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js b/src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js index de4a45f..0a71bb4 100644 --- a/src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js +++ b/src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js @@ -25,8 +25,10 @@ getStatusListCallBack : getStatusListCallBack, addTel : addTel, addMail : addMail, + addIpRange : addIpRange, removeTelInput : removeTelInput, - removeMailInput : removeMailInput + removeMailInput : removeMailInput, + removeIpRangeInput : removeIpRangeInput }; $scope.vm = { @@ -55,9 +57,13 @@ statusId : "", status : "", //�긽�깭 inputTels : [0], - tels : {}, + tels : [], inputMails : [0], - emails : {} + emails : [], + inputIpStarts : [0], //ip �떆�옉�젏 + ipStarts : [], + inputIpEnds : [0], //ip 醫낅즺�젏 + ipEnds : [] }, typeCategory : { companyType : "COMPANYTYPE", @@ -270,8 +276,30 @@ } return url; })(), - ipStart : $scope.vm.form.ipStart, // ip�떆�옉二쇱냼 - ipEnd : $scope.vm.form.ipEnd, // ip醫낅즺二쇱냼 + ipStarts : (function () { + var ipStarts = []; + if ($scope.vm.form.ipStarts != null) { + angular.forEach($scope.vm.form.ipStarts, function (ipS) { + ipStarts.push(ipS); + }); + ipStarts = ipStarts.filter(function(item) { //�벐�젅湲� �뜲�씠�꽣 �븘�꽣留� + return item !== null && item !== undefined && item !== ''; + }); + } + return ipStarts; + })(), + ipEnds : (function () { + var ipEnds = []; + if ($scope.vm.form.ipEnds != null) { + angular.forEach($scope.vm.form.ipEnds, function (ipE) { + ipEnds.push(ipE); + }); + ipEnds = ipEnds.filter(function(item) { //�벐�젅湲� �뜲�씠�꽣 �븘�꽣留� + return item !== null && item !== undefined && item !== ''; + }); + } + return ipEnds; + })(), memo : $scope.vm.form.memo, companyTypeId : (function () { var companyTypeId = null; @@ -377,14 +405,53 @@ } } + // IPRange input 李� 異붽� 踰꾪듉 + function addIpRange() { + var arrayFull = true; // 諛곗뿴�씠 媛��뱷 李� �엳�뒗吏� �뿬遺� + var startIdx = 0; + var endIdx = 0; + $scope.vm.form.inputIpStarts.forEach(function (start) { + if (!$rootScope.isDefined($scope.vm.form.ipStarts[startIdx])) { + arrayFull = false; + } + startIdx++; + }); + + $scope.vm.form.inputIpEnds.forEach(function (start) { + if (!$rootScope.isDefined($scope.vm.form.ipEnds[endIdx])) { + arrayFull = false; + } + endIdx++; + }); + + if (arrayFull) { + $scope.vm.form.inputIpStarts.push(startIdx); + $scope.vm.form.ipStarts[startIdx] = ""; + $scope.vm.form.inputIpEnds.push(endIdx); + $scope.vm.form.ipEnds[endIdx] = ""; + } else { + SweetAlert.warning($filter("translate")("companyField.writeCompanyIpRange"), $filter("translate")("companyField.writeIpRange")); // 異붽�踰꾪듉 寃쎄퀬 + } + } + // �뿰�씫泥� input �궘�젣 function removeTelInput(index) { $scope.vm.form.inputTels.splice(index, 1); + $scope.vm.form.tels.splice(index, 1); } // �씠硫붿씪 二쇱냼 input �궘�젣 function removeMailInput(index) { $scope.vm.form.inputMails.splice(index, 1); + $scope.vm.form.emails.splice(index, 1); + } + + // ipRange input �궘�젣 + function removeIpRangeInput(index) { + $scope.vm.form.inputIpStarts.splice(index, 1); + $scope.vm.form.ipStarts.splice(index, 1); + $scope.vm.form.inputIpEnds.splice(index, 1); + $scope.vm.form.ipEnds.splice(index, 1); } // �뙘�뾽 李� �떕湲� @@ -453,6 +520,48 @@ $scope.vm.form.emails = angular.copy(inputMails); } + if (result.data.content.ipStart != null) { + var inputIpStarts = $scope.vm.form.inputIpStarts; + var ipStarts = result.data.content.ipStart + if (result.data.content.ipStart.indexOf("[") !== -1){ + ipStarts = result.data.content.ipStart.substr(1, result.data.content.ipStart.indexOf("]")-1); + } + var ipStartArr = ipStarts.split(","); + angular.forEach(ipStartArr, function (ipS) { + var ipStart = ipS.trim(); + inputIpStarts.push(ipStart); + }); + inputIpStarts = inputIpStarts.filter(function(item) { + return item !== null && item !== undefined && item !== ''; + }); + if(inputIpStarts[0] === 0 || inputIpStarts[0] === "") { // 泥ル쾲吏� 諛곗뿴�� 怨듬갚�쑝濡� + inputIpStarts.shift(); + } + inputIpStarts.push(""); + $scope.vm.form.ipStarts = angular.copy(inputIpStarts); + } + + if (result.data.content.ipEnd != null) { + var inputIpEnds = $scope.vm.form.inputIpEnds; + var ipEnds = result.data.content.ipEnd + if (result.data.content.ipEnd.indexOf("[") !== -1){ + ipEnds = result.data.content.ipEnd.substr(1, result.data.content.ipEnd.indexOf("]")-1); + } + var ipEndArr = ipEnds.split(","); + angular.forEach(ipEndArr, function (ipS) { + var ipEnd = ipS.trim(); + inputIpEnds.push(ipEnd); + }); + inputIpEnds = inputIpEnds.filter(function(item) { + return item !== null && item !== undefined && item !== ''; + }); + if(inputIpEnds[0] === 0 || inputIpEnds[0] === "") { // 泥ル쾲吏� 諛곗뿴�� 怨듬갚�쑝濡� + inputIpEnds.shift(); + } + inputIpEnds.push(""); + $scope.vm.form.ipEnds = angular.copy(inputIpEnds); + } + $scope.vm.form.url = result.data.content.url; $scope.vm.form.ipStart = result.data.content.ipStart; $scope.vm.form.ipEnd = result.data.content.ipEnd; diff --git a/src/main/webapp/views/companyField/companyFieldAdd.html b/src/main/webapp/views/companyField/companyFieldAdd.html index 2f7d840..bf104c4 100644 --- a/src/main/webapp/views/companyField/companyFieldAdd.html +++ b/src/main/webapp/views/companyField/companyFieldAdd.html @@ -53,45 +53,58 @@ </div> <div class="row"> - <div class="col-lg-6 mw-49"> + <div class="col-lg-5 mw-49"> <div class="form-group"> <label for="companyFieldAddForm11" class="issue-label"> <span translate="companyField.ipRange">ip ���뿭��</span> </label> - <input id="companyFieldAddForm11" - name="ipStart" - type="text" - class="form-control" - kr-input - ng-pattern="/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/" - placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎." - autocomplete="off" - ng-model="vm.form.ipStart" - > + <div ng-repeat="s in vm.form.inputIpStarts" style="display: flex"> + <input id="companyFieldAddForm11" + name="ipStart" + type="text" + class="form-control mt-1" + kr-input + ng-model="vm.form.ipStarts[$index]" + ng-pattern="/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/" + placeholder="IP �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎." + autocomplete="off" + style="width: 189px;" + > + <div class="issue-label select3-selection__ipRange__tilde">~</div> + </div> <div ng-if="companyFieldAddForm.ipStart.$error.pattern" class="help-block form-text text-danger" translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎. </div> </div> </div> - <div class="mt-30"> - <label class="issue-label">~</label> - </div> - <div class="col-lg-6 mw-49"> + <div class="col-lg-5 mw-49" style="margin-top: 4px;"> <div class="form-group"> <label for="companyFieldAddForm12" class="issue-label"></label> - <input id="companyFieldAddForm12" - name="ipEnd" - type="text" - class="form-control" - kr-input - ng-pattern="/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/" - placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎." - autocomplete="off" - ng-model="vm.form.ipEnd" - > + <div ng-repeat="e in vm.form.inputIpEnds" style="display: flex"> + <input id="companyFieldAddForm12" + name="ipEnd" + type="text" + class="form-control mt-1" + kr-input + ng-model="vm.form.ipEnds[$index]" + ng-pattern="/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/" + placeholder="IP �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎." + autocomplete="off" + style="width: 189px;" + > + <div class="select3-selection__ipRange__remove" + ng-click="fn.removeIpRangeInput($index)">횞</div> + </div> <div ng-if="companyFieldAddForm.ipEnd.$error.pattern" class="help-block form-text text-danger" translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎. </div> + </div> + </div> + <div class="col-lg-2 mt-25" style="margin-left: -15px"> + <div> + <button type="button" class="btn btn-secondary" ng-click="fn.addIpRange()"> + <span translate="common.add">異붽�</span> + </button> </div> </div> </div> @@ -158,14 +171,14 @@ </div>--> </div> </div> - <div class="col-lg-2 mt-25" style="margin-left: -15px"> + <div class="col-lg-2" style="margin-left: -19px; margin-top: 28px;"> <div> <button type="button" class="btn btn-secondary" ng-click="fn.addTel()"> <span translate="common.add">異붽�</span> </button> </div> </div> - <div class="col-lg-5"> + <div class="col-lg-5 ml--12"> <div class="form-group"> <label class="issue-label"> <span translate="companyField.email">�씠硫붿씪</span> @@ -185,7 +198,7 @@ </div> </div> </div> - <div class="col-lg-2 mt-25" style="margin-left: -15px; margin-right: -16px;"> + <div class="col-lg-2" style="margin-left: -19px; margin-right: -16px; margin-top: 28px;"> <div> <button type="button" class="btn btn-secondary" ng-click="fn.addMail()"> <span translate="common.add">異붽�</span> diff --git a/src/main/webapp/views/companyField/companyFieldModify.html b/src/main/webapp/views/companyField/companyFieldModify.html index 33ed903..1602c25 100644 --- a/src/main/webapp/views/companyField/companyFieldModify.html +++ b/src/main/webapp/views/companyField/companyFieldModify.html @@ -50,48 +50,60 @@ </div>--> </div> <div class="row"> - <div class="col-lg-6 mw-49"> + <div class="col-lg-5 mw-49"> <div class="form-group"> <label for="companyFieldModifyForm11" class="issue-label"> <span translate="companyField.ipRange">ip ���뿭��</span> </label> - <input id="companyFieldModifyForm11" - name="ipStart" - type="text" - class="form-control" - kr-input - ng-pattern="/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/" - placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎." - autocomplete="off" - ng-model="vm.form.ipStart" - > + <div ng-repeat="s in vm.form.inputIpStarts" style="display: flex"> + <input id="companyFieldModifyForm11" + name="ipStart" + type="text" + class="form-control mt-1" + kr-input + ng-model="vm.form.ipStarts[$index]" + ng-pattern="/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/" + placeholder="IP �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎." + autocomplete="off" + style="width: 189px;" + > + <div class="issue-label select3-selection__ipRange__tilde">~</div> + </div> <div ng-if="companyFieldModifyForm.ipStart.$error.pattern" class="help-block form-text text-danger" translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎. </div> </div> </div> - <div class="mt-30"> - <label class="issue-label">~</label> - </div> - <div class="col-lg-6 mw-49"> + <div class="col-lg-5 mw-49" style="margin-top: 4px;"> <div class="form-group"> - <label for="companyFieldModifyForm12" class="issue-label"> - </label> - <input id="companyFieldModifyForm12" - name="ipEnd" - type="text" - class="form-control" - kr-input - ng-pattern="/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/" - placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎." - autocomplete="off" - ng-model="vm.form.ipEnd" - > + <label for="companyFieldModifyForm12" class="issue-label"></label> + <div ng-repeat="e in vm.form.inputIpEnds" style="display: flex"> + <input id="companyFieldModifyForm12" + name="ipEnd" + type="text" + class="form-control mt-1" + kr-input + ng-model="vm.form.ipEnds[$index]" + ng-pattern="/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/" + placeholder="IP �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎." + autocomplete="off" + style="width: 189px;" + > + <div class="select3-selection__ipRange__remove" + ng-click="fn.removeIpRangeInput($index)">횞</div> + </div> <div ng-if="companyFieldModifyForm.ipEnd.$error.pattern" class="help-block form-text text-danger" translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎. </div> </div> </div> + <div class="col-lg-2 mt-25" style="margin-left: -15px"> + <div> + <button type="button" class="btn btn-secondary" ng-click="fn.addIpRange()"> + <span translate="common.add">異붽�</span> + </button> + </div> + </div> </div> <div class="row"> <div class="col-lg-6"> -- Gitblit v1.8.0