OWL ITS + 탐지시스템(인터넷 진흥원)
이슈 상세 화면 하위 이슈 테이블 설정
사용자 정의 필드 타입 변경시 이름 초기화 수정
10개 파일 변경됨
295 ■■■■ 파일 변경됨
src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js 42 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js 10 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js 26 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueDetail.controller.js 23 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueList.controller.js 64 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/project/projectCustomFieldConfig.controller.js 16 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/components/utils/autoComplete.controller.js 43 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueAddRelation.html 53 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueAddTableConfig.html 16 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueDetail.html 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
@@ -189,7 +189,7 @@
                                                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;
@@ -290,7 +290,7 @@
                                                }
                                            }
                                            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;
@@ -299,6 +299,11 @@
                                        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;
                                        // 하위 이슈 삭제
@@ -408,19 +413,42 @@
                                            }
                                            break;
                                        // 이슈 제목
                                        case "ISSUE_TITLE" :
                                            makeTag += '<div class="tags">';
                                            makeTag += '<i class="fa fa-star move-star" ng-show="$root.currentDetailIssueId == data.id">&nbsp;</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, '&lt;') + '</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>";
@@ -437,7 +465,7 @@
                                        // 등록자
                                        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":
@@ -614,7 +642,7 @@
                                            }
                                            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;
src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js
@@ -60,6 +60,12 @@
                        position : 6,
                        display : false
                    }, {
                        name : $filter("translate")("issue.issueStatus"), // 이슈 상태
                        key : "ISSUE_DOWN_STATUS_TYPE",
                        width : "width-100-p",
                        position : 7,
                        display : false
                    },{
                    }]
                };
@@ -131,7 +137,7 @@
                    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)
                    };
@@ -150,7 +156,7 @@
                //  사용자 정의 필드를 조회한 후 표시할 이슈 테이블 컬럼을 준비한다.
                $scope.fn.getCustomFields().then(function (result) {
                    var count = 6;
                    var count = 7;
                    angular.forEach(result, function (customField) {
                        $scope.vm.issueDownTableConfigs.push({
                            name : customField.name,
src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js
@@ -23,52 +23,58 @@
                //  변수 모음
                $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
                    }, {
                    }]
@@ -137,7 +143,7 @@
                }
                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()
                };
@@ -166,7 +172,7 @@
                //  사용자 정의 필드를 조회한 후 표시할 이슈 테이블 컬럼을 준비한다.
                $scope.fn.getCustomFields().then(function (result) {
                    var count = 7;
                    var count = 8;
                    angular.forEach(result, function (customField) {
                        $scope.vm.issueTableConfigs.push({
                            name : customField.name,
src/main/webapp/scripts/app/issue/issueDetail.controller.js
@@ -40,6 +40,7 @@
                $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;      // 연관 이슈 목록 테이블 설정
@@ -227,6 +228,10 @@
                    $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) {
@@ -339,6 +344,16 @@
                                .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")
@@ -873,10 +888,16 @@
                                    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);
@@ -888,8 +909,6 @@
                        }
                    });
                }
                // ===================================================================================
                //  이슈 이미지 미리 보기 만들기
                function makePreviewImages(attachedFileVos) {
src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -202,30 +202,37 @@
                        .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);
                        }
                    });
                }
                //  테이블의 컬럼을 만들어준다.
@@ -233,6 +240,15 @@
                    //  일반 컬럼
                    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")
src/main/webapp/scripts/app/project/projectCustomFieldConfig.controller.js
@@ -24,12 +24,14 @@
                $scope.vm = {
                    form : {
                        issueTypeId : ""
                        issueTypeId : "",
                        useValue : ""
                    },
                    issueTypes : [],
                    originCustomFields : [],
                    customFields : [],
                    relationCustomFields : []
                    relationCustomFields : [],
                    useValues : []
                };
                //  이슈 유형 목록을 가져온다.
@@ -92,12 +94,18 @@
                        $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;
@@ -144,6 +152,7 @@
                    $rootScope.spinner = true;
                    var content = {
                        useValues : $scope.vm.useValues,
                        projectId : parameter.id,
                        issueTypeId : $scope.vm.form.issueTypeId,
                        relationCustomFields : $scope.vm.relationCustomFields
@@ -152,6 +161,9 @@
                    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")); // "필드 관리 저장 완료", "사용자 정의 필드와 이슈 타입 연결 정보가 저장되었습니다."
src/main/webapp/scripts/components/utils/autoComplete.controller.js
@@ -31,6 +31,7 @@
                $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;    //  업체 목록 정보를 조회한다.
@@ -168,6 +169,48 @@
                    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,
src/main/webapp/views/issue/issueAddRelation.html
@@ -9,11 +9,11 @@
    </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"
@@ -24,10 +24,23 @@
                       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">
@@ -49,10 +62,10 @@
                    <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"
@@ -71,11 +84,11 @@
                        </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"
@@ -94,10 +107,10 @@
                        </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"
@@ -141,8 +154,8 @@
                <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
@@ -368,7 +381,7 @@
                               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>
@@ -385,7 +398,7 @@
                               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>
@@ -474,7 +487,7 @@
                               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>
@@ -491,7 +504,7 @@
                               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>
@@ -580,7 +593,7 @@
                               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>
@@ -597,7 +610,7 @@
                               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>
@@ -647,8 +660,8 @@
            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>
src/main/webapp/views/issue/issueAddTableConfig.html
@@ -28,14 +28,14 @@
                </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>
src/main/webapp/views/issue/issueDetail.html
@@ -524,7 +524,7 @@
                            <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"