이슈 상세 화면 하위 이슈 테이블 설정
사용자 정의 필드 타입 변경시 이름 초기화 수정
| | |
| | | makeTag += "<span translate='common.noDate'>기간 없음</span>"; |
| | | } |
| | | else { |
| | | makeTag += "<span>" + scope.data.startDate + " ~ " + scope.data.completeDate + "</span>"; |
| | | makeTag += '<span class="cursor" ng-click="event.changeDetailView(data.id)">' + scope.data.startDate + ' ~ ' + scope.data.completeDate + '</span>'; |
| | | } |
| | | break; |
| | | |
| | |
| | | } |
| | | } |
| | | angular.forEach(values, function (value) { |
| | | makeTag += '<span class="table-word-break-all">' + value + '<span><br>'; |
| | | makeTag += '<span class="table-word-break-all cursor">' + value + '<span><br>'; |
| | | }); |
| | | |
| | | break; |
| | |
| | | case "ISSUE_DOWN_MOVE" : |
| | | |
| | | makeTag += "<span class=\"titlename cursor\" ng-click=\"event.changeDetailView(data)\">" + scope.data.title + "</span></a>"; |
| | | break; |
| | | |
| | | // 하위 이슈 타입 |
| | | case "ISSUE_DOWN_STATUS_TYPE" : |
| | | makeTag += "<span class='badge' ng-style='{ \"background-color\" : \"" + scope.data.issueStatusVo.color + "\"," + "\"border-color\"" + " : \"" + scope.data.issueStatusVo.color + "\", \"color\": \"#FFFFFF\" }'>" + scope.data.issueStatusVo.name + "</span>"; |
| | | break; |
| | | |
| | | // 하위 이슈 삭제 |
| | |
| | | } |
| | | |
| | | break; |
| | | // 이슈 제목 |
| | | case "ISSUE_TITLE" : |
| | | makeTag += '<div class="tags">'; |
| | | makeTag += '<i class="fa fa-star move-star" ng-show="$root.currentDetailIssueId == data.id"> </i>'; |
| | | 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 += '</div>'; |
| | | makeTag += '<div class="titlename cursor" ng-click="event.changeDetailView(data.id)">' + scope.data.title.replace(/</gi, '<') + '</div>'; |
| | | makeTag += '<div class="extra-infodiv">'; |
| | | makeTag += '<span class="extra-info">'; |
| | | makeTag += '<i class="os-icon os-icon-mail-12"></i>'; |
| | | makeTag += '<span>' + scope.data.issueCommentCount + '</span>'; |
| | | makeTag += '</span>'; |
| | | makeTag += '<span class="extra-info">'; |
| | | makeTag += '<i class="os-icon os-icon-ui-51"></i>'; |
| | | makeTag += '<span>' + scope.data.attachedFileCount + '</span>'; |
| | | makeTag += '</span>'; |
| | | makeTag += '</div>'; |
| | | break; |
| | | |
| | | // 우선 순위 |
| | | case "COMMON_PRIORITY" : |
| | | makeTag += "<span class='badge' ng-style='{ \"background-color\" : \"" + scope.data.priorityColor + "\"," + "\"border-color\"" + " : \"" + scope.data.priorityColor + "\", \"color\": \"#FFFFFF\" }' translate='" + scope.data.priorityName + "'></span>"; |
| | | makeTag += "<span ng-click=\"event.changeDetailView(data.id)\" class='badge cursor' ng-style='{ \"background-color\" : \"" + scope.data.priorityColor + "\"," + "\"border-color\"" + " : \"" + scope.data.priorityColor + "\", \"color\": \"#FFFFFF\" }' translate='" + scope.data.priorityName + "'></span>"; |
| | | break; |
| | | |
| | | // 중요도 |
| | | case "COMMON_SEVERITY" : |
| | | makeTag += "<span class='badge' ng-style='{ \"background-color\" : \"" + scope.data.severityColor + "\"," + "\"border-color\"" + " : \"" + scope.data.severityColor + "\", \"color\": \"#FFFFFF\" }' translate='" + scope.data.severityName + "'></span>"; |
| | | makeTag += "<span ng-click=\"event.changeDetailView(data.id)\" class='badge cursor' ng-style='{ \"background-color\" : \"" + scope.data.severityColor + "\"," + "\"border-color\"" + " : \"" + scope.data.severityColor + "\", \"color\": \"#FFFFFF\" }' translate='" + scope.data.severityName + "'></span>"; |
| | | break; |
| | | |
| | | // 담당 부서 |
| | | case "ISSUE_DEPARTMENT" : |
| | | makeTag += "<ul class='ul-not-comma'>"; |
| | | makeTag += "<ul ng-click=\"event.changeDetailView(data.id)\" class='ul-not-comma cursor'>"; |
| | | makeTag += "<div style='color: #000000'>"; |
| | | angular.forEach(scope.data.departmentVos, function (departments) { |
| | | makeTag += "<li>" + departments.departmentName + "</li>"; |
| | |
| | | // 등록자 |
| | | case "REGISTER" : |
| | | scope.data.registerVos = [scope.data.registerVo]; |
| | | makeTag += '<div owl-profile-over class="" table-user-image="data" target="registerVos"></div>'; |
| | | makeTag += '<div ng-click=\"event.changeDetailView(data.id)\" owl-profile-over class="cursor" table-user-image="data" target="registerVos"></div>'; |
| | | break; |
| | | |
| | | case "WORKFLOW_NAME": |
| | |
| | | } |
| | | |
| | | angular.forEach(values, function (value) { |
| | | makeTag += '<span class="table-word-break-all">' + value + '<span><br>'; |
| | | makeTag += '<span ng-click="event.changeDetailView(data.id)" class="table-word-break-all cursor">' + value + '<span><br>'; |
| | | }); |
| | | |
| | | break; |
| | |
| | | position : 6, |
| | | display : false |
| | | }, { |
| | | name : $filter("translate")("issue.issueStatus"), // 이슈 상태 |
| | | key : "ISSUE_DOWN_STATUS_TYPE", |
| | | width : "width-100-p", |
| | | position : 7, |
| | | display : false |
| | | },{ |
| | | }] |
| | | }; |
| | | |
| | |
| | | |
| | | var content = { |
| | | issueId : $rootScope.currentDetailIssueId, |
| | | delValue : $scope.vm.issueDownTableConfigs.splice(6,1), |
| | | delValue : $scope.vm.issueDownTableConfigs.splice(7,1), |
| | | issueTypeId : $rootScope.getCurrentIssueTypeId(), |
| | | issueTableConfigs : JSON.stringify($scope.vm.issueDownTableConfigs) |
| | | }; |
| | |
| | | |
| | | // 사용자 정의 필드를 조회한 후 표시할 이슈 테이블 컬럼을 준비한다. |
| | | $scope.fn.getCustomFields().then(function (result) { |
| | | var count = 6; |
| | | var count = 7; |
| | | angular.forEach(result, function (customField) { |
| | | $scope.vm.issueDownTableConfigs.push({ |
| | | name : customField.name, |
| | |
| | | // 변수 모음 |
| | | $scope.vm = { |
| | | issueTableConfigs : [{ |
| | | name : $filter("translate")("issue.issueTitle"), // 이슈 제목 |
| | | key : "ISSUE_TITLE", |
| | | width : "width-140-p", |
| | | position : 1, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("common.priority"), // 우선순위 |
| | | key : "PRIORITY", |
| | | width : "width-80-p", |
| | | position : 1, |
| | | position : 2, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("common.importance"), // 중요도 |
| | | key : "SEVERITY", |
| | | width : "width-80-p", |
| | | position : 2, |
| | | position : 3, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("issue.issueType"), // 이슈 타입 |
| | | key : "ISSUE_TYPE", |
| | | width : "width-140-p", |
| | | position : 3, |
| | | position : 4, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("common.assigneeTeam"), // 담당부서 |
| | | key : "ASSIGNEE_TEAM", |
| | | width : "width-100-p", |
| | | position : 4, |
| | | position : 5, |
| | | display : true |
| | | }, { |
| | | name : $filter("translate")("common.countDownIssue"), // 하위이슈 카운트 |
| | | key : "COUNT_DOWN_ISSUE", |
| | | width : "width-100-p", |
| | | position : 5, |
| | | position : 6, |
| | | display : false |
| | | }, { |
| | | name : $filter("translate")("common.register"), // 등록자 |
| | | key : "REGISTER", |
| | | width : "width-100-p", |
| | | position : 6, |
| | | position : 7, |
| | | display : false |
| | | }, { |
| | | name : $filter("translate")("common.period"), // 기간 |
| | | key : "PERIOD", |
| | | width : "width-140-p", |
| | | position : 7, |
| | | position : 8, |
| | | display : false |
| | | }, { |
| | | name : $filter("translate")("common.lastChangeDate"), // 최근 변경일 |
| | | key : "MODIFY_DATE", |
| | | width : "width-100-p", |
| | | position : 8, |
| | | position : 9, |
| | | display : false |
| | | }, { |
| | | }] |
| | |
| | | } |
| | | |
| | | var content = { |
| | | delValue : $scope.vm.issueTableConfigs.splice(8,1), |
| | | delValue : $scope.vm.issueTableConfigs.splice(9,1), |
| | | issueTableConfigs : JSON.stringify($scope.vm.issueTableConfigs), |
| | | issueTypeId : $rootScope.getCurrentIssueTypeId() |
| | | }; |
| | |
| | | |
| | | // 사용자 정의 필드를 조회한 후 표시할 이슈 테이블 컬럼을 준비한다. |
| | | $scope.fn.getCustomFields().then(function (result) { |
| | | var count = 7; |
| | | var count = 8; |
| | | angular.forEach(result, function (customField) { |
| | | $scope.vm.issueTableConfigs.push({ |
| | | name : customField.name, |
| | |
| | | $scope.fn.versionView = versionView; // 버전 정보를 표시한다. |
| | | $scope.fn.reservation = reservation; // 예약 정보를 확인 및 변경 한다. |
| | | $scope.fn.getIssueListCallBack = getIssueListCallBack; |
| | | $scope.fn.getDownIssueListCallBack = getDownIssueListCallBack; |
| | | $scope.fn.addRelationIssue = addRelationIssue; // 연관 이슈 추가 |
| | | $scope.fn.addDownIssue = addDownIssue; // 하위 이슈 추가 |
| | | $scope.fn.addRelationIssueTableConfig = addRelationIssueTableConfig; // 연관 이슈 목록 테이블 설정 |
| | |
| | | $scope.vm.autoCompletePage.issue.totalPage = result.data.page.totalPage; |
| | | } |
| | | |
| | | function getDownIssueListCallBack(result) { |
| | | $scope.vm.autoCompletePage.issue.totalPage = result.data.page.totalPage; |
| | | } |
| | | |
| | | // 테이블의 연관 이슈 컬럼을 만들어준다. |
| | | function setRelTableColumn(Rel_issueTableConfig) { |
| | | |
| | |
| | | .setDAlign("text-center") |
| | | .setDRenderer("ISSUE_DOWN_MOVE")); |
| | | break; |
| | | |
| | | case "ISSUE_DOWN_STATUS_TYPE" : // 이슈 상태 |
| | | $scope.vm.downTableConfigs.push($tableProvider.config() |
| | | .setHName("issue.issueStatus") |
| | | .setDType("renderer") |
| | | .setHWidth("bold " + Down_issueTableConfig.width) |
| | | .setDAlign("text-center") |
| | | .setDRenderer("ISSUE_DOWN_STATUS_TYPE")); |
| | | break; |
| | | |
| | | case "PRIORITY" : // 하위 이슈 우선순위 |
| | | $scope.vm.downTableConfigs.push($tableProvider.config() |
| | | .setHName("common.priority") |
| | |
| | | angular.forEach(result.data.data.issueDownVos, function (issueDownVo){ |
| | | //$scope.vm.form.issuesDown.push(issueDownVo.issueDown); |
| | | $scope.vm.form.issuesDown.push(issueDownVo); |
| | | // 간헐적인 하위 이슈 갱신 오류 방지 |
| | | $rootScope.$on("getIssueDetail", function (event, args) { |
| | | $scope.fn.getIssueDetail(); |
| | | }); |
| | | |
| | | }); |
| | | } |
| | | $scope.vm.viewer.issueRelationVos = result.data.data.issueRelationVos; |
| | | $scope.vm.viewer.issueDownVos = result.data.data.issueDownVos; |
| | | |
| | | |
| | | if ($rootScope.workProject.id > -1 && result.data.data.projectVo !== null) { |
| | | $rootScope.changeLastProject(result.data.data.projectVo.id); |
| | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // =================================================================================== |
| | | |
| | | // 이슈 이미지 미리 보기 만들기 |
| | | function makePreviewImages(attachedFileVos) { |
| | |
| | | .setDAlign("text-center")); |
| | | |
| | | // 상세형 일때때 |
| | | if ($scope.vm.detailView) { |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("issue.issueTitle") |
| | | .setDName("title") |
| | | .setDType("renderer") |
| | | .setHWidth("width-100 bold") |
| | | .setDRenderer("ISSUE_DETAIL_FLOATING")); |
| | | } |
| | | else { |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("issue.issueTitle") |
| | | .setDName("title") |
| | | .setDType("renderer") |
| | | .setHWidth("bold") |
| | | .setDRenderer("ISSUE_DETAIL_FLOATING")); |
| | | |
| | | angular.forEach($scope.vm.issueTableConfigs, function (issueTableConfig) { |
| | | // 표시 대상인 컬럼만 화면에 그려준다. |
| | | if (issueTableConfig.display) { |
| | | // 테이블의 컬럼을 만들어준다. |
| | | $scope.fn.setTableColumn(issueTableConfig); |
| | | } |
| | | }); |
| | | } |
| | | // if ($scope.vm.detailView) { |
| | | // $scope.vm.tableConfigs.push($tableProvider.config() |
| | | // .setHName("issue.issueTitle") |
| | | // .setDName("title") |
| | | // .setDType("renderer") |
| | | // .setHWidth("bold") |
| | | // .setDRenderer("ISSUE_DETAIL_FLOATING")); |
| | | // } |
| | | // else { |
| | | // $scope.vm.tableConfigs.push($tableProvider.config() |
| | | // .setHName("issue.issueTitle") |
| | | // .setDName("title") |
| | | // .setDType("renderer") |
| | | // .setHWidth("bold") |
| | | // .setDRenderer("ISSUE_DETAIL_FLOATING")); |
| | | // |
| | | // angular.forEach($scope.vm.issueTableConfigs, function (issueTableConfig) { |
| | | // // 표시 대상인 컬럼만 화면에 그려준다. |
| | | // if (issueTableConfig.display) { |
| | | // // 테이블의 컬럼을 만들어준다. |
| | | // $scope.fn.setTableColumn(issueTableConfig); |
| | | // } |
| | | // }); |
| | | // } |
| | | angular.forEach($scope.vm.issueTableConfigs, function (issueTableConfig) { |
| | | // 표시 대상인 컬럼만 화면에 그려준다. |
| | | if (issueTableConfig.display) { |
| | | // 테이블의 컬럼을 만들어준다. |
| | | $scope.fn.setTableColumn(issueTableConfig); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // 테이블의 컬럼을 만들어준다. |
| | |
| | | |
| | | // 일반 컬럼 |
| | | switch(issueTableConfig.key) { |
| | | case "ISSUE_TITLE" : // 이슈 제목 |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("issue.issueTitle") |
| | | .setDType("renderer") |
| | | .setHWidth("bold " + issueTableConfig.width) |
| | | .setDAlign("text-center") |
| | | .setDRenderer("ISSUE_TITLE")); |
| | | break; |
| | | |
| | | case "PRIORITY" : // 우선순위 |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("common.priority") |
| | |
| | | |
| | | $scope.vm = { |
| | | form : { |
| | | issueTypeId : "" |
| | | issueTypeId : "", |
| | | useValue : "" |
| | | }, |
| | | issueTypes : [], |
| | | originCustomFields : [], |
| | | customFields : [], |
| | | relationCustomFields : [] |
| | | relationCustomFields : [], |
| | | useValues : [] |
| | | }; |
| | | |
| | | // 이슈 유형 목록을 가져온다. |
| | |
| | | $resourceProvider.getPageContent(0, 0))).then(function (result) { |
| | | |
| | | if (result.data.message.status === "success") { |
| | | |
| | | // 화면에서 이름을 표시하기 위해 사용자 정의 필드 명을 name 에 셋팅한다. |
| | | angular.forEach(result.data.data, function (issueTypeCustomField) { |
| | | var relationCustomField = angular.copy(issueTypeCustomField.customFieldVo); |
| | | relationCustomField.checked = issueTypeCustomField.fieldOption == '01'; // 필수 값 여부 |
| | | $scope.vm.relationCustomFields.push(relationCustomField); |
| | | |
| | | for (var i=0; i < result.data.data.length; i++){ |
| | | $scope.vm.useValues.push(result.data.data[i].useValue) |
| | | } |
| | | }); |
| | | |
| | | |
| | | angular.forEach($scope.vm.originCustomFields, function (originCustomField) { |
| | | var search = false; |
| | |
| | | $rootScope.spinner = true; |
| | | |
| | | var content = { |
| | | useValues : $scope.vm.useValues, |
| | | projectId : parameter.id, |
| | | issueTypeId : $scope.vm.form.issueTypeId, |
| | | relationCustomFields : $scope.vm.relationCustomFields |
| | |
| | | IssueTypeCustomField.modify($resourceProvider.getContent( |
| | | content, |
| | | $resourceProvider.getPageContent(0, 10))).then(function (result) { |
| | | if ($scope.vm.useValues === false) { |
| | | alert("이미 사용중인 필드 입니다.") |
| | | } |
| | | |
| | | if (result.data.message.status === "success") { |
| | | SweetAlert.success($filter("translate")("project.saveCompleteFieldManagement"), $filter("translate")("project.saveUserDefinedFieldAndIssueTypeConnection")); // "필드 관리 저장 완료", "사용자 정의 필드와 이슈 타입 연결 정보가 저장되었습니다." |
| | |
| | | $scope.fn.getUserList = getUserList; // 사용자 목록 정보를 조회한다. |
| | | $scope.fn.getProjectList = getProjectList; // 프로젝트 목록 정보를 조회한다. |
| | | $scope.fn.getIssueList = getIssueList; // 일감 목록 정보를 조회한다. |
| | | $scope.fn.getDownIssueList = getDownIssueList; // 하위 이슈 목록 정보를 조회한다. |
| | | $scope.fn.getWorkflowList = getWorkflowList; // 워크플로우 목록 정보를 조회한다. |
| | | $scope.fn.getUserDepartmentList = getUserDepartmentList; // 부서 목록 정보를 조회한다. |
| | | $scope.fn.getIssueCompanyFieldList = getIssueCompanyFieldList; // 업체 목록 정보를 조회한다. |
| | |
| | | return deferred.promise; |
| | | } |
| | | |
| | | |
| | | function getDownIssueList(query, issueTypeId, excludeList, page, callBack) { |
| | | var conditions = { |
| | | name : query, |
| | | // issueTypeIds : (function () { |
| | | // var ids = []; |
| | | // |
| | | // ids.push(issueTypeId); |
| | | // |
| | | // return ids; |
| | | // })(), |
| | | excludeIds : (function () { |
| | | var excludeIds = []; |
| | | |
| | | angular.forEach(excludeList, function (exclude) { |
| | | excludeIds.push(exclude.id); |
| | | }); |
| | | |
| | | return excludeIds; |
| | | })() |
| | | }; |
| | | |
| | | var deferred = $q.defer(); |
| | | |
| | | Issue.find($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. |
| | | conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) { |
| | | if (result.data.message.status === "success") { |
| | | |
| | | if ($rootScope.isDefined(callBack)) { |
| | | callBack(result); |
| | | } |
| | | |
| | | deferred.resolve(result.data.data); |
| | | } |
| | | else { |
| | | SweetAlert.swal($filter("translate")("common.failedToIssueListLookUp"), result.data.message.message, "error"); // "워크플로우 목록 조회 실패" |
| | | } |
| | | }); |
| | | |
| | | return deferred.promise; |
| | | } |
| | | |
| | | function getWorkflowList(query, excludeList, page, callBack) { |
| | | var conditions = { |
| | | name : query, |
| | |
| | | </div> |
| | | |
| | | <div class="modal-body"> |
| | | <form role="form" name="issueAddForm"> |
| | | <form role="form" name="issueAddRelationForm"> |
| | | <div class="form-group mb10"> |
| | | <label for="issueAddForm1" class="issue-label"><span translate="issue.issueTitle">이슈 제목</span> <code |
| | | <label for="issueAddRelationForm1" class="issue-label"><span translate="issue.issueTitle">이슈 제목</span> <code |
| | | class="highlighter-rouge">*</code></label> |
| | | <input id="issueAddForm1" |
| | | <input id="issueAddRelationForm1" |
| | | class="form-control input-sm" |
| | | ng-model="vm.form.title" |
| | | name="title" |
| | |
| | | autofocus |
| | | owl-auto-focus> |
| | | <small class="help-block form-text text-danger" |
| | | ng-if="issueAddForm.title.$touched && issueAddForm.title.$error.required" |
| | | ng-if="issueAddRelationForm.title.$touched && issueAddRelationForm.title.$error.required" |
| | | translate="issue.requireIssueTitle">이슈 제목을 입력하세요. |
| | | </small> |
| | | </div> |
| | | |
| | | <!-- <div class="form-group mb10 col-sm-4">--> |
| | | <!-- <label class="issue-label"><span class="highlighter-rouge">연관 이슈 구분</span></label>--> |
| | | <!-- <select id="relationIssueType"--> |
| | | <!-- name="relationIssueType"--> |
| | | <!-- class="form-control input-sm"--> |
| | | <!-- ng-options="option.name for option in vm.relationIssueTypes track by option.id"--> |
| | | <!-- ng-model="vm.relationIssueType"--> |
| | | <!-- required>--> |
| | | <!-- </select>--> |
| | | |
| | | <!-- </div>--> |
| | | |
| | | <div class="row"> |
| | | <div class="col-lg-4"> |
| | | <div class="form-group mb10"> |
| | |
| | | <div class="row"> |
| | | <div class="col-md-4"> |
| | | <div class="form-group mb10"> |
| | | <label for="issueAddForm4" class="issue-label"> <span |
| | | <label for="issueAddRelationForm4" class="issue-label"> <span |
| | | translate="issue.issueType">이슈 타입</span> |
| | | <code class="highlighter-rouge">*</code></label> |
| | | <select id="issueAddForm4" |
| | | <select id="issueAddRelationForm4" |
| | | name="issueType" |
| | | class="form-control input-sm issue-select-label" |
| | | ng-model="vm.form.issueTypeId" |
| | |
| | | </div> |
| | | <div class="col-md-4"> |
| | | <div class="form-group mb10"> |
| | | <label for="issueAddForm2" class="issue-label"> |
| | | <label for="issueAddRelationForm2" class="issue-label"> |
| | | <span translate="common.priority">우선 순위</span> |
| | | <code class="highlighter-rouge">*</code> |
| | | </label> |
| | | <select id="issueAddForm2" |
| | | <select id="issueAddRelationForm2" |
| | | name="priority" |
| | | class="form-control input-sm issue-select-label" |
| | | ng-model="vm.form.priorityId" |
| | |
| | | </div> |
| | | <div class="col-md-4"> |
| | | <div class="form-group mb10"> |
| | | <label for="issueAddForm3" class="issue-label"> <span |
| | | <label for="issueAddRelationForm3" class="issue-label"> <span |
| | | translate="common.importance">중요도</span> <code |
| | | class="highlighter-rouge">*</code></label> |
| | | <select id="issueAddForm3" |
| | | <select id="issueAddRelationForm3" |
| | | name="severity" |
| | | class="form-control input-sm issue-select-label" |
| | | ng-model="vm.form.severityId" |
| | |
| | | |
| | | <div class="col-lg-4"> |
| | | <div class="form-group mb10"> |
| | | <label for="issueAddForm5" class="issue-label"> <span translate="common.period">기간</span></label> |
| | | <input id="issueAddForm5" |
| | | <label for="issueAddRelationForm5" class="issue-label"> <span translate="common.period">기간</span></label> |
| | | <input id="issueAddRelationForm5" |
| | | tabindex="-1" |
| | | type="text" |
| | | readonly |
| | |
| | | autocomplete="off" |
| | | ng-model="vm.companyTel" |
| | | maxlength="20"> |
| | | <div ng-show="issueAddForm.companyTel.$error.pattern" class="help-block form-text text-danger" |
| | | <div ng-show="issueAddRelationForm.companyTel.$error.pattern" class="help-block form-text text-danger" |
| | | translate="companyField.invalidTelFormat">전화번호 형식이 맞지 않습니다. xxx-xxx-xxxx 형식으로 입력하세요. |
| | | </div> |
| | | </div> |
| | |
| | | ng-model="vm.companyEmail" |
| | | kr-input |
| | | ng-pattern="/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/"> |
| | | <div ng-show="issueAddForm.companyEmail.$error.pattern" class="help-block form-text text-danger" |
| | | <div ng-show="issueAddRelationForm.companyEmail.$error.pattern" class="help-block form-text text-danger" |
| | | translate="users.invalidEmailFormat">이메일 형식이 맞지 않습니다. |
| | | </div> |
| | | </div> |
| | |
| | | autocomplete="off" |
| | | ng-model="vm.ispTel" |
| | | maxlength="20"> |
| | | <div ng-show="issueAddForm.ispTel.$error.pattern" class="help-block form-text text-danger" |
| | | <div ng-show="issueAddRelationForm.ispTel.$error.pattern" class="help-block form-text text-danger" |
| | | translate="companyField.invalidTelFormat">전화번호 형식이 맞지 않습니다. xxx-xxx-xxxx 형식으로 입력하세요. |
| | | </div> |
| | | </div> |
| | |
| | | ng-model="vm.ispEmail" |
| | | kr-input |
| | | ng-pattern="/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/"> |
| | | <div ng-show="issueAddForm.ispEmail.$error.pattern" class="help-block form-text text-danger" |
| | | <div ng-show="issueAddRelationForm.ispEmail.$error.pattern" class="help-block form-text text-danger" |
| | | translate="users.invalidEmailFormat">이메일 형식이 맞지 않습니다. |
| | | </div> |
| | | </div> |
| | |
| | | autocomplete="off" |
| | | ng-model="vm.hostingTel" |
| | | maxlength="20"> |
| | | <div ng-show="issueAddForm.hostingTel.$error.pattern" class="help-block form-text text-danger" |
| | | <div ng-show="issueAddRelationForm.hostingTel.$error.pattern" class="help-block form-text text-danger" |
| | | translate="companyField.invalidTelFormat">전화번호 형식이 맞지 않습니다. xxx-xxx-xxxx 형식으로 입력하세요. |
| | | </div> |
| | | </div> |
| | |
| | | ng-model="vm.hostingEmail" |
| | | kr-input |
| | | ng-pattern="/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/"> |
| | | <div ng-show="issueAddForm.hostingEmail.$error.pattern" class="help-block form-text text-danger" |
| | | <div ng-show="issueAddRelationForm.hostingEmail.$error.pattern" class="help-block form-text text-danger" |
| | | translate="users.invalidEmailFormat">이메일 형식이 맞지 않습니다. |
| | | </div> |
| | | </div> |
| | |
| | | translate="common.cancel">취소</span></button> |
| | | <button type="button" class="btn btn-md btn-primary bold" |
| | | js-short-cut |
| | | js-short-cut-action="(fn.formCheck(issueAddForm.$invalid) || $root.spinner) ? null : fn.formSubmit()" |
| | | ng-disabled="fn.formCheck(issueAddForm.$invalid)" |
| | | js-short-cut-action="(fn.formCheck(issueAddRelationForm.$invalid) || $root.spinner) ? null : fn.formSubmit()" |
| | | ng-disabled="fn.formCheck(issueAddRelationForm.$invalid)" |
| | | ng-click="fn.formSubmit()"><span translate="common.save">저장</span> |
| | | </button> |
| | | </div> |
| | |
| | | </tr> |
| | | </thead> |
| | | <tbody> |
| | | <tr> |
| | | <td class="text-center"> |
| | | <span class="bold" translate="issue.issueTitle">이슈 제목</span> |
| | | </td> |
| | | <td class="text-center" colspan="3"> |
| | | <span class="text-danger bold" translate="issue.cannotChangedIssueTitle">이슈 제목은 변경할 수 없습니다.</span> |
| | | </td> |
| | | </tr> |
| | | <!-- <tr>--> |
| | | <!-- <td class="text-center">--> |
| | | <!-- <span class="bold" translate="issue.issueTitle">이슈 제목</span>--> |
| | | <!-- </td>--> |
| | | <!-- <td class="text-center" colspan="3">--> |
| | | <!-- <span class="text-danger bold" translate="issue.cannotChangedIssueTitle">이슈 제목은 변경할 수 없습니다.</span>--> |
| | | <!-- </td>--> |
| | | <!-- </tr>--> |
| | | <tr ng-repeat="issueTableConfig in vm.issueTableConfigs"> |
| | | <td class="text-center"> |
| | | <span class="bold">{{issueTableConfig.name}}</span> |
| | |
| | | <js-autocomplete-single data-input-name="issue" |
| | | selected-model="vm.form.issuesDown" |
| | | search="vm.issueNameDown" |
| | | source="fn.getIssueList(vm.issueNameDown, vm.issueTypeId, vm.form.issuesDown, vm.autoCompletePageDown.issue.page, fn.getIssueListCallBack)" |
| | | source="fn.getDownIssueList(vm.issueNameDown, vm.issueTypeId, vm.form.issuesDown, vm.autoCompletePageDown.issue.page, fn.getDownIssueListCallBack)" |
| | | page="vm.autoCompletePageDown.issue.page" |
| | | total-page="vm.autoCompletePageDown.issue.totalPage" |
| | | input-disabled="false" |