Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa
| | |
| | | |
| | | void removeIssues(IssueForm issueForm); |
| | | |
| | | void removeAllIssues(IssueForm issueForm); |
| | | |
| | | void removeDownIssues(IssueForm issueForm); |
| | | |
| | | void modifyIssueStatus(IssueForm issueForm, User user); |
| | | |
| | | Issue getIssue(Long taskId); |
| | |
| | | List<Issue> removeIssues = Lists.newArrayList(); |
| | | |
| | | for (Long issueId : issueForm.getRemoveIds()) { |
| | | //하위이슈 체크 |
| | | List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId); |
| | | if(downIssues != null && downIssues.size() > 0){ |
| | | for(Issue downIssue : downIssues){ |
| | | if(downIssue.getParentIssue() != null){ |
| | | downIssue.setParentIssue(null); |
| | | } |
| | | } |
| | | } |
| | | |
| | | Issue issue = this.issueRemoves(issueId, user); |
| | | removeIssues.add(issue); |
| | | } |
| | | |
| | | if (removeIssues.size() > 0) { |
| | | //this.issueRepository.deleteAll(removeIssues); |
| | | } |
| | | /*if (removeIssues.size() > 0) { |
| | | this.issueRepository.deleteAll(removeIssues); |
| | | }*/ |
| | | |
| | | // 사용자 시스템 기능 사용 정보 수집 |
| | | log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE)); |
| | | } |
| | | |
| | | // 이슈를 삭제한다. |
| | | @Override |
| | | @Transactional |
| | | public void removeAllIssues(IssueForm issueForm) { |
| | | // 사용하고 있는 업무 공간이 활성 상태인지 확인한다. 사용 공간에서 로그인한 사용자가 비활성인지 확인한다. |
| | | User user = this.webAppUtil.getLoginUserObject(); |
| | | this.workspaceService.checkUseWorkspace(); |
| | | |
| | | if (issueForm.getRemoveIds().size() < 1) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.ISSUE_REMOVE_NOT_SELECT)); |
| | | } |
| | | |
| | | List<Issue> removeIssues = Lists.newArrayList(); |
| | | |
| | | for (Long issueId : issueForm.getRemoveIds()) { |
| | | //하위이슈 체크 |
| | | List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId); |
| | | if(downIssues != null && downIssues.size() > 0){ |
| | | for(Issue downIssue : downIssues){ |
| | | Long downIssueId = downIssue.getId(); |
| | | downIssue = this.issueRemoves(downIssueId, user); |
| | | removeIssues.add(downIssue); |
| | | } |
| | | } |
| | | Issue issue = this.issueRemoves(issueId, user); |
| | | removeIssues.add(issue); |
| | | } |
| | | // 사용자 시스템 기능 사용 정보 수집 |
| | | log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE)); |
| | | } |
| | | |
| | | // 하위이슈를 삭제한다. |
| | | @Override |
| | | @Transactional |
| | | public void removeDownIssues(IssueForm issueForm) { |
| | | // 사용하고 있는 업무 공간이 활성 상태인지 확인한다. 사용 공간에서 로그인한 사용자가 비활성인지 확인한다. |
| | | User user = this.webAppUtil.getLoginUserObject(); |
| | | this.workspaceService.checkUseWorkspace(); |
| | | |
| | | if (issueForm.getRemoveIds().size() < 1) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.ISSUE_REMOVE_NOT_SELECT)); |
| | | } |
| | | |
| | | List<Issue> removeIssues = Lists.newArrayList(); |
| | | Long downIssueId = 0L; |
| | | for (Long issueId : issueForm.getRemoveIds()) { |
| | | //삭제 할 이슈의 하위이슈 체크 |
| | | List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId); |
| | | if(downIssues != null && downIssues.size() > 0){ |
| | | for(Issue downIssue : downIssues){ |
| | | downIssueId = downIssue.getId(); |
| | | } |
| | | } |
| | | Issue issue = this.issueRemoves(downIssueId, user); |
| | | removeIssues.add(issue); |
| | | } |
| | | // 사용자 시스템 기능 사용 정보 수집 |
| | | log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE)); |
| | | } |
| | | |
| | | private Issue issueRemoves(Long issueId, User user) { |
| | | Issue issue = this.getIssue(issueId); |
| | | Issue issue = null; |
| | | if(issueId != null){ |
| | | issue = this.getIssue(issueId); |
| | | } |
| | | // 이슈 수정 권한을 갖고 있는지 확인 |
| | | this.verifyIssueModifyPermission(issue, user); |
| | | |
| | |
| | | private Long severityId; |
| | | private String severityName; |
| | | private String severityColor; |
| | | private String isApi; |
| | | private ProjectVo projectVo; // 이슈 상세에서 사용 |
| | | private IssueStatusVo issueStatusVo; // 이슈 상세에서 사용 |
| | | private IssueTypeVo issueTypeVo; // 이슈 상세에서 사용 |
| | |
| | | this.severityColor = severityColor; |
| | | } |
| | | |
| | | public String getIsApi() { |
| | | return isApi; |
| | | } |
| | | |
| | | public void setIsApi(String isApi) { |
| | | this.isApi = isApi; |
| | | } |
| | | |
| | | public Boolean getModifyPermissionCheck() { |
| | | return modifyPermissionCheck; |
| | | } |
| | |
| | | private Long workspaceId; |
| | | private String projectType; |
| | | private String deep; |
| | | private String isApi; |
| | | private Long parentIssueId; // 상위 일감 |
| | | private String useValue; |
| | | private List<Long> projectIds = Lists.newArrayList(); |
| | |
| | | this.deep = deep; |
| | | } |
| | | |
| | | public String getIsApi() { |
| | | return isApi; |
| | | } |
| | | |
| | | public void setIsApi(String isApi) { |
| | | this.isApi = isApi; |
| | | } |
| | | |
| | | public List<Long> getProjectIds() { |
| | | return projectIds; |
| | | } |
| | |
| | | return this.setSuccessMessage(resJsonData); |
| | | } |
| | | |
| | | // 하위이슈 삭제 |
| | | @RequestMapping(value = "/issue/removeAll", produces = MediaType.APPLICATION_JSON_VALUE) |
| | | public |
| | | @ResponseBody |
| | | Map<String, Object> removesAll(@RequestBody Map<String, Map<String, Object>> params) { |
| | | Map<String, Object> resJsonData = new HashMap<>(); |
| | | |
| | | this.issueService.removeAllIssues(IssueForm.make(params.get(Constants.REQ_KEY_CONTENT))); |
| | | |
| | | return this.setSuccessMessage(resJsonData); |
| | | } |
| | | |
| | | // 하위이슈 삭제 |
| | | /*@RequestMapping(value = "/issue/removeDown", produces = MediaType.APPLICATION_JSON_VALUE) |
| | | public |
| | | @ResponseBody |
| | | Map<String, Object> removesDown(@RequestBody Map<String, Map<String, Object>> params) { |
| | | Map<String, Object> resJsonData = new HashMap<>(); |
| | | |
| | | this.issueService.removeDownIssues(IssueForm.make(params.get(Constants.REQ_KEY_CONTENT))); |
| | | |
| | | return this.setSuccessMessage(resJsonData); |
| | | }*/ |
| | | |
| | | // 이슈 다중 상태 변경 |
| | | @RequestMapping(value = "/issue/modifyMultiIssueStatus", produces = MediaType.APPLICATION_JSON_VALUE) |
| | | public |
| | |
| | | issue.complete_date as completeDate, |
| | | issue.issue_number as issueNumber, |
| | | issue.register_date as registerDate, |
| | | issue.is_api as isApi, |
| | | SUBSTRING(issue.modify_date, 1, 19) as modifyDate, |
| | | project.id as projectId, |
| | | project.name as projectName, |
| | |
| | | '<i class="fa fa-calendar glyphicon glyphicon-calendar"></i>' + |
| | | '<div class="calendar-time">' + |
| | | '<div></div>' + |
| | | '<i class="fa fa-clock-o glyphicon glyphicon-time"></i>' + |
| | | '<i class="fa fa-clock-o glyphicon glyphicon-time" style="position: relative; left:12.3rem; bottom: 1.23rem "></i>' + |
| | | '</div>' + |
| | | '</div>' + |
| | | '<div class="calendar-table"></div>' + |
| | |
| | | // 프로젝트 이름(프로젝트 리스트에서 사용) |
| | | case "PROJECT_NAME" : |
| | | if ($rootScope.workProject != null && $rootScope.workProject.id == scope.data.id) { |
| | | // makeTag += "<span class='titlenameSelect cursor table-word-break-all sub-line' ng-click='event.changeLastProject(data.id)'>" + myToken + scope.data.name.replace(/</gi, '<') + "</span>"; |
| | | makeTag += "<span class='titlenameSelect cursor table-word-break-all sub-line' ng-click='event.moveIssue(data.id)'>" + myToken + scope.data.name.replace(/</gi, '<') + "</span>"; |
| | | // makeTag += "<span class='titlenameSelect cursor table-word-break-all sub-line' ng-click='event.changeDetailView(data.id)'>" + myToken + scope.data.name.replace(/</gi, '<') + "</span>"; |
| | | makeTag += "<span class='titlenameSelect cursor table-word-break-all sub-line' ng-click='event.changeLastProject(data.id)'>" + myToken + scope.data.name.replace(/</gi, '<') + "</span>"; |
| | | } else { |
| | | // makeTag += "<span class='titlename cursor table-word-break-all sub-line' ng-click='event.changeLastProject(data.id)'>" + myToken + scope.data.name.replace(/</gi, '<') + "</span>"; |
| | | makeTag += "<span class='titlename cursor table-word-break-all sub-line' ng-click='event.moveIssue(data.id)'>" + myToken + scope.data.name.replace(/</gi, '<') + "</span>"; |
| | | // makeTag += "<span class='titlename cursor table-word-break-all sub-line' ng-click='event.changeDetailView(data.id)'>" + myToken + scope.data.name.replace(/</gi, '<') + "</span>"; |
| | | makeTag += "<span class='titlename cursor table-word-break-all sub-line' ng-click='event.changeLastProject(data.id)'>" + myToken + scope.data.name.replace(/</gi, '<') + "</span>"; |
| | | } |
| | | break; |
| | | |
| | |
| | | |
| | | // 하위 이슈 이동(제목) |
| | | case "ISSUE_DOWN_MOVE" : |
| | | |
| | | makeTag += "<span class=\"titlename cursor\" ng-click=\"event.changeDetailView(data)\">" + scope.data.title + "</span></a>"; |
| | | break; |
| | | |
| | |
| | | makeTag += '<span class="number-tag">' + scope.data.projectKey + ' - ' + scope.data.issueNumber + '</span>'; |
| | | makeTag += ' <span class="tag"> / </span> '; |
| | | makeTag += "<span class='badge' ng-style='{ \"background-color\" : \"" + scope.data.issueStatusColor + "\"," + "\"border-color\"" + " : \"" + scope.data.issueStatusColor + "\", \"color\": \"#FFFFFF\" }'>" + scope.data.issueStatusName + "</span>"; |
| | | // makeTag += ' <span class="tag"> / </span> '; |
| | | // makeTag += '<span class="tag">' + scope.data.projectName + '</span>'; |
| | | makeTag += '<span class="tag"> / </span> '; |
| | | makeTag += '<span class="tag">' +'<span>API: </span>' + scope.data.isApi + '</span>'; |
| | | makeTag += '</div>'; |
| | | makeTag += '<div class="titlename cursor text-left" ng-click="event.changeDetailView(data.id)">' + scope.data.title.replace(/</gi, '<') + '</div>'; |
| | | makeTag += '<div class="extra-infodiv text-left">'; |
| | |
| | | "settingTableDisplay": "테이블 표시 설정", |
| | | "deleteIssue": "이슈 삭제", |
| | | "wantToDeleteSelectIssue": "선택한 이슈를 삭제하겠습니까? \n 사용자가 직접 삭제한 이슈는 어떠한 경우에도 복구가 불가능합니다.", |
| | | "wantToDeleteOnlySelectIssue": "선택한 이슈만 삭제하겠습니까? \n 사용자가 직접 삭제한 이슈는 어떠한 경우에도 복구가 불가능합니다.", |
| | | "wantToDeleteSelectDownIssue": "선택한 이슈의 하위 이슈가 존재 합니다. \n 선택한 이슈와 하위 이슈 모두 삭제하겠습니까? \n 사용자가 직접 삭제한 이슈는 어떠한 경우에도 복구가 불가능합니다.", |
| | | "wantToDeleteSelectRelationIssue": "선택한 연관 이슈를 삭제하겠습니까? \n 사용자가 직접 삭제한 연관 이슈는 복구가 불가능합니다.", |
| | | "failedToSaveFieldConditions": "검색 필드 조건 저장 실패", |
| | | "failedToGetSearchFieldCondition": "검색 필드 조건 가져오기 실패", |
| | |
| | | "createIssue": "이슈 생성", |
| | | "updateIssue": "이슈 변경", |
| | | "deleteIssue": "이슈 삭제", |
| | | "deleteDownIssue": "하위 이슈 삭제", |
| | | "sendMailIssue": "이슈 메일 전송", |
| | | "updateTitle": "제목이 변경되었습니다.", |
| | | "updateContent": "내용이 변경되었습니다.", |
| | |
| | | $scope.fn.setDownTableConfigs = setDownTableConfigs; |
| | | $scope.fn.containsPartner = containsPartner; |
| | | $scope.fn.onActivate = onActivate; |
| | | $scope.fn.issueBack = issueBack; |
| | | |
| | | // 이슈 목록 컨트롤러 vm, fn 상속 중 |
| | | $scope.vm.viewer = {}; |
| | |
| | | //$rootScope.$broadcast("makeIssueSearch",issue); |
| | | $scope.$parent.tableEvent.changeDetailView(issue.id); |
| | | $scope.fn.onActivate(); |
| | | } |
| | | |
| | | // 상위 이슈 클릭시 상위 이슈로 이동 |
| | | function issueBack() { |
| | | $rootScope.currentDetailIssueId = $scope.vm.viewer.parentIssueVo.id |
| | | $rootScope.$broadcast("getIssueDetail", {id: $rootScope.currentDetailIssueId}); |
| | | } |
| | | |
| | | function onActivate() { |
| | |
| | | // $scope.fn.getIssueDetail(); |
| | | // }); |
| | | |
| | | // todo 이건 또 뭐지 |
| | | $scope.$watch(function() { |
| | | return $rootScope.currentDetailIssueId; |
| | | }, function() { |
| | |
| | | angular.forEach(result.data.data.issueDownVos, function (issueDownVo){ |
| | | //$scope.vm.form.issuesDown.push(issueDownVo.issueDown); |
| | | $scope.vm.form.issuesDown.push(issueDownVo); |
| | | // 간헐적인 하위 이슈 갱신 오류 방지 |
| | | // $scope.$on("getIssueDetail", function (event, args) { |
| | | // $scope.fn.getIssueDetail(); |
| | | // }); |
| | | |
| | | |
| | | }); |
| | | } |
| | | $scope.vm.viewer.issueRelationVos = result.data.data.issueRelationVos; |
| | |
| | | function removes() { |
| | | var removeIds = []; |
| | | var removePermission = true; |
| | | var downIssueIds = false; |
| | | |
| | | angular.forEach($scope.vm.responseData.data, function (data) { |
| | | if (data.checked && data.modifyPermissionCheck) { |
| | |
| | | |
| | | if (data.checked && !data.modifyPermissionCheck) { |
| | | removePermission = false; |
| | | } |
| | | |
| | | if (data.downIssueAllCount > 0){ |
| | | downIssueIds = true; |
| | | } |
| | | }); |
| | | |
| | |
| | | return; |
| | | } |
| | | |
| | | // 삭제 알림 |
| | | SweetAlert.swal({ |
| | | title : $filter("translate")("issue.deleteIssue"), // 이슈 삭제 |
| | | text : $filter("translate")("issue.wantToDeleteSelectIssue"), // 선택한 이슈을 삭제하겠습니까? 삭제된 이슈은 복구할 수 없습니다. |
| | | if (downIssueIds) { |
| | | SweetAlert.swal({ |
| | | title : $filter("translate")("common.deleteIssue"), // 이슈 삭제 |
| | | text : $filter("translate")("issue.wantToDeleteSelectDownIssue"), // 하위 이슈가 존재 합니다. 선택한 이슈와 하위 이슈 모두 삭제하겠습니까? 삭제된 이슈는 복구할 수 없습니다. |
| | | type : "warning", |
| | | showCancelButton : true, |
| | | confirmButtonColor : "#DD6B55", |
| | | confirmButtonText : $filter("translate")("common.delete"), // 삭제 |
| | | cancelButtonText : $filter("translate")("common.cancel"), // 취소 |
| | | closeOnConfirm : false, |
| | | closeOnCancel : true |
| | | closeOnCancel : false |
| | | }, |
| | | function (isConfirm) { |
| | | SweetAlert.close(); |
| | | |
| | | if (isConfirm) { |
| | | if (isConfirm) { //이슈 + 하위 삭제 |
| | | $rootScope.spinner = true; |
| | | |
| | | Issue.remove($resourceProvider.getContent( |
| | | Issue.removeAllIssues($resourceProvider.getContent( |
| | | { removeIds : removeIds }, |
| | | $resourceProvider.getPageContent(0, 0))).then(function (result) { |
| | | |
| | |
| | | $timeout(function () { |
| | | SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // 삭제 성공 |
| | | }, 100); |
| | | |
| | | $scope.fn.listView(); |
| | | |
| | | $scope.fn.getPageList(0); |
| | | } |
| | | else { |
| | |
| | | SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // 삭제 실패 |
| | | }, 100); |
| | | } |
| | | |
| | | $rootScope.spinner = false; |
| | | }); |
| | | |
| | | } else {// 선택 한 이슈만 삭제 |
| | | // 삭제 알림 |
| | | SweetAlert.swal({ |
| | | title : $filter("translate")("issue.deleteIssue"), // 이슈 삭제 |
| | | text : $filter("translate")("issue.wantToDeleteOnlySelectIssue"), // 선택한 이슈만 삭제하겠습니까? 삭제된 이슈은 복구할 수 없습니다. |
| | | type : "warning", |
| | | showCancelButton : true, |
| | | confirmButtonColor : "#DD6B55", |
| | | confirmButtonText : $filter("translate")("common.delete"), // 삭제 |
| | | cancelButtonText : $filter("translate")("common.cancel"), // 취소 |
| | | closeOnConfirm : false, |
| | | closeOnCancel : true |
| | | }, |
| | | function (isConfirm) { |
| | | SweetAlert.close(); |
| | | |
| | | if (isConfirm) { |
| | | $rootScope.spinner = true; |
| | | |
| | | Issue.remove($resourceProvider.getContent( |
| | | { removeIds : removeIds }, |
| | | $resourceProvider.getPageContent(0, 0))).then(function (result) { |
| | | |
| | | if (result.data.message.status === "success") { |
| | | $timeout(function () { |
| | | SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // 삭제 성공 |
| | | }, 100); |
| | | |
| | | $scope.fn.listView(); |
| | | |
| | | $scope.fn.getPageList(0); |
| | | } |
| | | else { |
| | | $timeout(function () { |
| | | SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // 삭제 실패 |
| | | }, 100); |
| | | } |
| | | |
| | | $rootScope.spinner = false; |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | } else { |
| | | // 삭제 알림 |
| | | SweetAlert.swal({ |
| | | title : $filter("translate")("issue.deleteIssue"), // 이슈 삭제 |
| | | text : $filter("translate")("issue.wantToDeleteSelectIssue"), // 선택한 이슈을 삭제하겠습니까? 삭제된 이슈은 복구할 수 없습니다. |
| | | type : "warning", |
| | | showCancelButton : true, |
| | | confirmButtonColor : "#DD6B55", |
| | | confirmButtonText : $filter("translate")("common.delete"), // 삭제 |
| | | cancelButtonText : $filter("translate")("common.cancel"), // 취소 |
| | | closeOnConfirm : false, |
| | | closeOnCancel : true |
| | | }, |
| | | function (isConfirm) { |
| | | SweetAlert.close(); |
| | | |
| | | if (isConfirm) { |
| | | $rootScope.spinner = true; |
| | | |
| | | Issue.remove($resourceProvider.getContent( |
| | | { removeIds : removeIds }, |
| | | $resourceProvider.getPageContent(0, 0))).then(function (result) { |
| | | |
| | | if (result.data.message.status === "success") { |
| | | $timeout(function () { |
| | | SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // 삭제 성공 |
| | | }, 100); |
| | | |
| | | $scope.fn.listView(); |
| | | |
| | | $scope.fn.getPageList(0); |
| | | } |
| | | else { |
| | | $timeout(function () { |
| | | SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // 삭제 실패 |
| | | }, 100); |
| | | } |
| | | |
| | | $rootScope.spinner = false; |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // 이슈 목록 테이블 설정 |
| | |
| | | $scope.tableEvent = { |
| | | modify : modify, |
| | | projectCustomFieldConfig : projectCustomFieldConfig, |
| | | changeLastProject : changeLastProject, |
| | | moveIssue : moveIssue, |
| | | changeDetailView : changeDetailView |
| | | changeLastProject : changeLastProject |
| | | }; |
| | | |
| | | angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector})); |
| | |
| | | } |
| | | |
| | | function changeLastProject(projectId) { |
| | | $rootScope.changeLastProject(projectId); |
| | | } |
| | | |
| | | function moveIssue(projectId) { |
| | | // $rootScope.currentDetailIssueId = null; |
| | | // 이슈 번호를 저장한 후 이슈 목록으로 이동한다. |
| | | // $rootScope.$broadcast("makeIssueSearch", {id :$rootScope.currentDetailIssueId}); |
| | | //$rootScope.$broadcast("makeIssueSearch", {id :$rootScope.issueTypeMenu.id}); |
| | | $rootScope.$broadcast("makeIssueSearch",projectId); |
| | | } |
| | | |
| | | function changeDetailView() { |
| | | // $rootScope.$broadcast("getIssueDetail", {id: $rootScope.currentDetailIssueId}); |
| | | //$scope.$broadcast("getIssueDetail", {id: $rootScope.currentDetailIssueId}); |
| | | // $rootScope.$broadcast("getIssueDetail", {id :$rootScope.currentDetailIssueId}); |
| | | //$rootScope.$broadcast("getIssueList", {id :$rootScope.issueTypeMenu.id}); |
| | | //$rootScope.changeLastProject(projectId); |
| | | $state.go("issues.list") |
| | | } |
| | | |
| | | $scope.fn.makeTableConfigs(); |
| | |
| | | return response; |
| | | }); |
| | | }, |
| | | removeAllIssues : function (conditions) { |
| | | return $http.post("issue/removeAll", conditions).then(function (response) { |
| | | $log.debug("하위이슈 삭제 결과 : ", response); |
| | | return response; |
| | | }); |
| | | }, |
| | | /*removeDownIssues : function (conditions) { |
| | | return $http.post("issue/removeDown", conditions).then(function (response) { |
| | | $log.debug("하위이슈 삭제 결과 : ", response); |
| | | return response; |
| | | }); |
| | | },*/ |
| | | importExcel : function (conditions) { |
| | | conditions.url = "issue/importExcel"; |
| | | return $upload.upload(conditions).then(function (response) { |
| | |
| | | }); |
| | | } else if ($attrs["rangeType"] === "singleDate") { |
| | | $($element).daterangepicker({ |
| | | timePicker: false, |
| | | timePicker: true, |
| | | timePickerSeconds : true, |
| | | autoUpdateInput: true, |
| | | autoApply : true, |
| | | singleDatePicker : true, |
| | |
| | | |
| | | //parentEl : $scope.parentEl !== undefined ? $scope.parentEl : "", |
| | | locale: { |
| | | format: 'YYYY-MM-DD', |
| | | format: 'YYYY-MM-DD/hh-mm-ss A', |
| | | applyLabel: options.applyLabel, |
| | | cancelLabel: options.cancelLabel, |
| | | daysOfWeek: options.daysOfWeek, |
| | |
| | | <div class="support-ticket-content-w" ng-controller="issueDetailController"> |
| | | <div class="support-ticket-content"> |
| | | <span ng-if="vm.viewer.parentIssueVo != null" class="badge" ng-style="{'background-color' : '#353535', 'border-color' : vm.viewer.issueStatusVo.color, 'color' : '#FFFFFF' }"> |
| | | <span>상위 이슈:{{vm.viewer.parentIssueVo.title}}</span> |
| | | <span class="cursor" ng-click="fn.issueBack()">상위 이슈:{{vm.viewer.parentIssueVo.title}}</span> |
| | | </span> |
| | | |
| | | <div class=""> |
| | |
| | | <span class="ticket-header"> |
| | | <div class="tasks-header-w"> |
| | | <span class="tags"> |
| | | <span class="tag">{{vm.viewer.projectVo.projectKey}}-{{vm.viewer.issueNumber}} / {{vm.viewer.projectVo.name}}</span> |
| | | <span class="tag">{{vm.viewer.projectVo.projectKey}}-{{vm.viewer.issueNumber}} / {{vm.viewer.projectVo.name}} / <span>API : {{vm.viewer.isApi}}</span></span> |
| | | </span> |
| | | </div> |
| | | </span> |
| | |
| | | <div class="content-i"> |
| | | <div class="content-box"> |
| | | <div class="row mt-30"> |
| | | <div class="row mt-30" style="margin-right: 32rem"> |
| | | <div class="m-0"> |
| | | <div class="flex"> |
| | | <div class="loginbackdiv"> |
| | | <div class="loginback"> |
| | | <img src="/assets/images/logo-kisa-vertical.png"/> |
| | | <div class="stardiv"> |
| | | <!-- <div class="stars"></div> |
| | | <div class="twinkling"></div> |
| | | </div> |
| | | <div class="bgdiv"> |
| | | </div> |
| | | <div class="login-circle"> |
| | | <div class="circle1"></div> |
| | | <div class="circle2"></div> |
| | | <div class="circle3"></div>--> |
| | | </div> |
| | | </div> |
| | | <!-- <div class="loginback">--> |
| | | <!-- <img src="/assets/images/logo-kisa-vertical.png"/>--> |
| | | <!-- <div class="stardiv">--> |
| | | <!-- <div class="stars"></div>--> |
| | | <!-- <div class="twinkling"></div>--> |
| | | <!-- </div>--> |
| | | <!-- <div class="bgdiv">--> |
| | | <!-- </div>--> |
| | | <!-- <div class="login-circle">--> |
| | | <!-- <div class="circle1"></div>--> |
| | | <!-- <div class="circle2"></div>--> |
| | | <!-- <div class="circle3"></div>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | </div> |
| | | <div class="logincont"> |
| | | <div class="auth-box-w"> |
| | |
| | | </div> |
| | | --> |
| | | <div class="footer-s" > |
| | | <small>CopyRight WISESTONE All rights reserved.</small> |
| | | <small style="margin-left: 8.8rem">CopyRight WISESTONE All rights reserved.</small> |
| | | </div> |
| | | </div> |
| | | </div> |