src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/java/kr/wisestone/owl/util/CommonUtil.java | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/webapp/scripts/app/api/apiMonitor.controller.js | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/webapp/scripts/app/project/projectList.controller.js | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/webapp/scripts/components/utils/issueSearchFieldKeyViewElement.directive.js | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/webapp/scripts/config.js | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/webapp/views/api/apiMonitor.html | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/webapp/views/issue/issueListNormal.html | ●●●●● 패치 | 보기 | raw | blame | 히스토리 |
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -915,15 +915,19 @@ public void findApiIssue(ApiMonitorCondition apiMonitorCondition, Map<String, Object> resJsonData) { IssueTypeCondition issueTypeCondition = new IssueTypeCondition(); issueTypeCondition.setIsApi(Issue.IS_API_YES); List<IssueTypeVo> issueTypes = this.issueTypeService.findIssueType(issueTypeCondition); // 값이 없을 경우 초기값 입력 if (StringUtils.isEmpty(apiMonitorCondition.getSearchPeriod())) { apiMonitorCondition.setSearchPeriod(DateUtil.LAST_SEVEN_DAYS); } // 검색 일자를 구한다. List<Date> searchDates = CommonUtil.findSearchPeriod(apiMonitorCondition.getSearchPeriod()); List<Date> searchDates = Lists.newArrayList(); if (apiMonitorCondition.getSearchPeriod().equals(DateUtil.CUSTOM_INPUT)) { Date startDate = DateUtil.convertStrToDate(apiMonitorCondition.getSearchStartDate(), "yyyy-MM-dd"); Date endDate = DateUtil.addDays(DateUtil.convertStrToDate(apiMonitorCondition.getSearchEndDate(), "yyyy-MM-dd"), 1); searchDates = CommonUtil.findSearchPeriod(startDate, endDate); } else { searchDates = CommonUtil.findSearchPeriod(apiMonitorCondition.getSearchPeriod()); } // 날짜가 검색되지 않았으면 오류 if (searchDates.size() < 1) { src/main/java/kr/wisestone/owl/util/CommonUtil.java
@@ -40,6 +40,7 @@ import java.security.MessageDigest; import java.security.spec.KeySpec; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.*; public class CommonUtil { @@ -761,6 +762,20 @@ return stringBuilder.toString(); } public static List<Date> findSearchPeriod(Date startDate, Date endDate) { Calendar cal = Calendar.getInstance(); cal.setTime(endDate); List<Date> days = Lists.newArrayList(); // 이번달 날짜 리스트 가져오기 while (cal.getTime().after(startDate)){ days.add(cal.getTime()); cal.add(Calendar.DATE, -1); } return days; } // 검색 일자를 구한다. public static List<Date> findSearchPeriod(String searchPeriod) { List<Date> searchDates = Lists.newArrayList(); src/main/webapp/scripts/app/api/apiMonitor.controller.js
@@ -17,7 +17,8 @@ $scope.vm = { search : { searchPeriod : "LAST_SEVEN_DAYS" searchPeriod : "LAST_SEVEN_DAYS", startEndDateRange : "" // 이슈 기록 조회 날짜 }, apiMonitorVos : [], issueTypeVos : [], @@ -35,8 +36,24 @@ } }; // 직접 입력에서 날짜 선택시 이슈 기록 정보 조회 $scope.$watch("vm.search.startEndDateRange", function (newValue) { if ($rootScope.isDefined(newValue)) { $scope.fn.drawChart(); } }); // 사용자 수 function changeSearchPeriod() { drawChart(); switch ($scope.vm.search.searchPeriod) { case "CUSTOM_INPUT" : $scope.vm.search.startEndDateRange = ""; break; default : $scope.vm.search.startEndDateRange = ""; $scope.fn.drawChart(); } } $scope.fn.drawChart(); @@ -49,6 +66,12 @@ searchEndDate : "" }; if ($rootScope.isDefined($scope.vm.search.startEndDateRange)) { var startEndDateRange = $scope.vm.search.startEndDateRange.split("~"); content.searchStartDate = startEndDateRange[0].trim(); content.searchEndDate = startEndDateRange[1].trim(); } Api.findHistory($resourceProvider.getContent(content, $resourceProvider.getPageContent(0, 0))).then(function (result) { src/main/webapp/scripts/app/project/projectList.controller.js
@@ -362,7 +362,7 @@ function changeLastProject(projectId) { $rootScope.changeLastProject(projectId) $state.go("issues.list") $state.go("dashboards.dashboard") } $scope.fn.makeTableConfigs(); src/main/webapp/scripts/components/utils/issueSearchFieldKeyViewElement.directive.js
@@ -52,7 +52,7 @@ } } makeTag += "<span ng-click='fn.remove(" + key.fieldKey + ")'>×</span>"; // makeTag += "<span ng-click='fn.remove(" + key.fieldKey + ")'>×</span>"; makeTag += "</p>"; }); src/main/webapp/scripts/config.js
@@ -351,12 +351,12 @@ $rootScope.$broadcast("changedLastProject", {id: el.id}); $state.go("issues.list"); } /*if (reload) { if (reload) { $state.go('dashboards.dashboard'); }*/ } } }); //$state.go($state.current, {}, {reload: reload}); // $state.go($state.current, {}, {reload: reload}); } }); } src/main/webapp/views/api/apiMonitor.html
@@ -12,23 +12,40 @@ </h6> <div class="element-box"> <select class="form-control form-control-sm rounded width-30 d-inline-block mb-10" ng-model="vm.search.searchPeriod" ng-change="fn.changeSearchPeriod()"> <option value="LAST_SEVEN_DAYS" translate="common.last7Days">최근 7일</option> <option value="THIS_WEEK" translate="common.thisWeek">이번 주</option> <option value="LAST_WEEK" translate="common.lastWeek">지난 주</option> <option value="THIS_MONTH" translate="common.thisMonth">이번 달</option> <option value="LAST_MONTH" translate="common.lastMonth">지난 달(1일~말일)</option> <option value="LAST_THIRTY_DAYS" translate="common.last30Days">최근 30일</option> <option value="CUSTOM_INPUT" translate="common.directInput">직접입력</option> </select> <div> <select class="form-control form-control-sm rounded width-30 d-inline-block mb-10" ng-model="vm.search.searchPeriod" ng-change="fn.changeSearchPeriod()"> <option value="LAST_SEVEN_DAYS" translate="common.last7Days">최근 7일</option> <option value="THIS_WEEK" translate="common.thisWeek">이번 주</option> <option value="LAST_WEEK" translate="common.lastWeek">지난 주</option> <option value="THIS_MONTH" translate="common.thisMonth">이번 달</option> <option value="LAST_MONTH" translate="common.lastMonth">지난 달(1일~말일)</option> <option value="LAST_THIRTY_DAYS" translate="common.last30Days">최근 30일</option> <option value="CUSTOM_INPUT" translate="common.directInput">직접입력</option> </select> <input type="text" ng-show="vm.search.searchPeriod == 'CUSTOM_INPUT'" class="form-control form-control-sm rounded col-md-4 d-inline-block input-readonly" ng-model="vm.search.startEndDateRange" modal-form-auto-scroll parent-el="'#createdWidget'" range-type="date" onfocus="this.blur()" style="height: 32px !important; padding: 0.25rem 0.5rem; font-size: 0.8rem; line-height: 1.5;" date-range-picker> <div class="row"> <div class="col-xs-12"> <div id="createdWidget" class="bootstrap-datepicker"></div> </div> </div> <div class="no-cont1" ng-if="vm.chartData.columns.length < 1" translate="common.noRecord"> 기록이 없습니다. <div class="no-cont1" ng-if="vm.chartData.columns.length < 1" translate="common.noRecord"> 기록이 없습니다. </div> </div> <div ng-if="vm.chartData.columns.length > 0"> <google-chart columns="vm.chartData.columns" src/main/webapp/views/issue/issueListNormal.html
@@ -5,7 +5,7 @@ <div class="element-box"> <div class="row" > <div class="col-sm-12"> <div class="searchdiv"> <div class="searchdiv" ng-if="!$root.isMainSearch"> <form name="issueSearchForm" role="form" ng-enter="fn.getPageList(0)"> <div class="row"> <div class="col-sm-6"> @@ -272,9 +272,93 @@ <div ng-switch on="customField.customFieldType"> <div ng-switch-when="INPUT"> <input type="text" class="form-control input-sm" <input type="text" class="form-control input-sm" ng-model="customField.useValues" maxlength="100"> </div> <div ng-switch-when="NUMBER"> <input type="text" class="form-control input-sm" name="numberType" ng-model="customField.useValues" kr-input placeholder="숫자만 입력 가능합니다." ng-pattern="/^[0-9]*$/" autocomplete="off"> <div ng-show="issueSearchForm.numberType.$error.pattern" class="help-block form-text text-danger" translate="common.invalidNumberFormat">숫자만 입력 가능합니다. </div> </div> <!-- todo : 날짜 검색 문제 --> <div ng-switch-when="DATETIME"> <input type="text" class="form-control input-sm" name="dateTime" ng-model="customField.useValues" maxlength="100" range-type="singleDate" date-range-picker> <div class="row"> <div class="col-xs-12"> <div id="createdWidget" class="bootstrap-datepicker "></div> </div> </div> </div> <div ng-switch-when="IP_ADDRESS"> <input type="text" class="form-control input-sm" name="ipAdress" ng-model="customField.useValues" 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"> <div ng-show="issueSearchForm.ipAdress.$error.pattern" class="help-block form-text text-danger" translate="common.invalidipAdressFormat">IP주소 형식이 맞지 않습니다. </div> </div> <div ng-switch-when="EMAIL"> <input type="email" class="form-control input-sm" name="email" ng-model="customField.useValues" kr-input ng-pattern="/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/" placeholder="이메일 형식만 입력 가능합니다." autocomplete="off"> <div ng-show="issueSearchForm.email.$error.pattern" class="help-block form-text text-danger" translate="common.invalidEmailFormat">이메일 형식이 맞지 않습니다. </div> </div> <div ng-switch-when="SITE"> <input type="text" class="form-control input-sm" name="site" ng-model="customField.useValues" kr-input ng-pattern="/((http|https):\/\/)?(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/" placeholder="홈페이지 주소 형식만 입력 가능합니다." autocomplete="off"> <div ng-show="issueSearchForm.site.$error.pattern" class="help-block form-text text-danger" translate="common.invalidSiteFormat">홈페이지 주소 형식이 맞지 않습니다.(http://로 시작하셔야합니다) </div> </div> <div ng-switch-when="TEL"> <input type="text" class="form-control input-sm" name="tel" ng-model="customField.useValues" kr-input ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/" placeholder="연락처 형식만 입력 가능합니다." autocomplete="off"> <div ng-show="issueSearchForm.tel.$error.pattern" class="help-block form-text text-danger" translate="common.invalidTelFormat">전화번호 형식이 맞지 않습니다. </div> </div> <div ng-switch-default> @@ -336,8 +420,8 @@ <!-- 우측 --> <div class="col-5" > <span class="issue-detail-label" ng-if="vm.listMode === 0" style="position: relative; left: 2.8rem; bottom: 5px"><span style="color: #0a7cf8">◆</span> 하위 이슈 숨기기</span> <label class='switch' ng-if="vm.listMode === 0" style="left: 3.3rem"><input type='checkbox' ng-model='vm.hideDownIssue' ng-click='fn.getPageList(0)'> <span class="issue-detail-label" style="position: relative; left: 2.8rem; bottom: 5px"><span style="color: #0a7cf8">◆</span> 하위 이슈 숨기기</span> <label class='switch' style="left: 3.3rem"><input type='checkbox' ng-model='vm.hideDownIssue' ng-click='fn.getPageList(0)'> <span class='slider round'></span> </label> <span class="issue-detail-label" style="position: relative; left: 5.8rem; bottom: 5px"><span style="color: #0a7cf8">◆</span> 완료 이슈 숨기기</span>