OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-11-24 8e7861e68cfba8f27d413437654f435a22f05cac
Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa
10개 파일 변경됨
243 ■■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/domain/enumType/IssueModifyType.java 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js 10 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/i18n/ko/global.json 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js 34 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js 62 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueDetail.controller.js 103 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueAddDownTableConfig.html 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueAddRelationTableConfig.html 12 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueDetail.html 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/domain/enumType/IssueModifyType.java
@@ -7,6 +7,7 @@
    RELATION_ISSUE_TYPE,
    RELATION_ISSUE_TITLE,
    DOWN_ISSUE_TITLE,
    DOWN_ISSUE_DELETE,
    SEVERITY,
    PRIORITY,
    ISSUE_STATUS,
src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js
@@ -254,6 +254,7 @@
                                            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>";
                                            break;
@@ -262,13 +263,12 @@
                                            makeTag += "<span class='badge' ng-style='{ \"background-color\" : \"" + scope.data.severityColor + "\"," + "\"border-color\"" + " : \"" + scope.data.severityColor + "\", \"color\": \"#FFFFFF\" }' translate='" + scope.data.severityName + "'></span>";
                                            break;
                                        case "ISSUE_USER" :
                                            makeTag += '<div owl-profile-over class="" table-user-image="data" target="userVos"></div>';
                                        case "ISSUE_DEPARTMENT" :
                                            makeTag += "<span>" + scope.data.departmentVos.departmentName + "</span>";
                                            break;
                                        case "ISSUE_DEPARTMENT" :
                                            scope.data.registsrVos = [scope.data.registerVo];
                                            makeTag += '<div owl-profile-over class="" table-user-image="data" target="departmentVos"></div>';
                                        case "ISSUE_USER" :
                                            makeTag += '<div owl-profile-over class="" table-user-image="data" target="userVos"></div>';
                                            break;
                                        case "REGISTER" :
src/main/webapp/i18n/ko/global.json
@@ -271,6 +271,7 @@
        "displayed": "표시 여부",
        "sequence": "순서",
        "cannotChangedIssueTitle": "이슈 제목은 변경할 수 없습니다.",
        "cannotChangedIssueType": "이슈 구분은 변경할 수 없습니다.",
        "selectSendIssueMail": "이슈 메일 발송 대상자 선택",
        "sendIssueSelectedUsers": "프로젝트에 참여하고 있는 다른 사용자에게 이슈 정보를 보냅니다.",
        "sendMail": "이메일 발송",
src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js
@@ -23,53 +23,47 @@
                //  변수 모음
                $scope.vm = {
                    issueId : "",
                    issueTableConfigs : [{
                        name : $filter("translate")("issue.downIssueTitle"), //
                        key : "DOWN_ISSUE_TITLE",
                        width : "width-100-p",
                        position : 1,
                        display : true
                    }, {
                    issueDownTableConfigs : [{
                        name : $filter("translate")("common.priority"), // 우선순위
                        key : "PRIORITY",
                        width : "width-80-p",
                        position : 2,
                        position : 1,
                        display : true
                    }, {
                        name : $filter("translate")("common.importance"), // 중요도
                        key : "SEVERITY",
                        width : "width-80-p",
                        position : 3,
                        position : 2,
                        display : true
                    }, {
                        name : $filter("translate")("issue.issueType"), // 이슈 타입
                        key : "ISSUE_TYPE",
                        width : "width-140-p",
                        position : 4,
                        position : 3,
                        display : true
                    }, {
                        name : $filter("translate")("common.assigneeTeam"), // 담당부서
                        key : "ASSIGNEE_TEAM",
                        width : "width-100-p",
                        position : 5,
                        position : 4,
                        display : true
                    }, {
                        name : $filter("translate")("common.register"), // 등록자
                        key : "REGISTER",
                        width : "width-100-p",
                        position : 6,
                        position : 5,
                        display : false
                    }, {
                        name : $filter("translate")("common.period"), // 기간
                        key : "PERIOD",
                        width : "width-140-p",
                        position : 7,
                        position : 6,
                        display : false
                    }, {
                        name : $filter("translate")("common.lastChangeDate"), // 최근 변경일
                        key : "MODIFY_DATE",
                        width : "width-100-p",
                        position : 8,
                        position : 7,
                        display : false
                    }, {
                    }]
@@ -91,7 +85,7 @@
                    var content = {
                        issueId : $rootScope.currentDetailIssueId,
                        issueTableConfigs : JSON.stringify($scope.vm.issueTableConfigs)
                        issueTableConfigs : JSON.stringify($scope.vm.issueDownTableConfigs)
                    };
                    IssueTableConfig.downAdd($resourceProvider.getContent(content,
@@ -102,7 +96,7 @@
                            swal.close();
                            $scope.fn.cancel();
                            //  변경된 이슈 테이블 정보를 이슈 목록 테이블에 갱신한다.
                            $rootScope.$broadcast("getDownIssueTableConfigs", {});
                            $rootScope.$broadcast("getIssueDetail", { id : $rootScope.currentDetailIssueId});
                        }
                        else {
@@ -142,7 +136,7 @@
                    var deferred = $q.defer();
                    var content = {
                        issueId : $rootScope.currentDetailIssueId,
                        issueTableConfigs : JSON.stringify($scope.vm.issueTableConfigs)
                        issueTableConfigs : JSON.stringify($scope.vm.issueDownTableConfigs)
                    };
                    IssueTableConfig.downDetail($resourceProvider.getContent(content,
@@ -161,7 +155,7 @@
                $scope.fn.getCustomFields().then(function (result) {
                    var count = 8;
                    angular.forEach(result, function (customField) {
                        $scope.vm.issueTableConfigs.push({
                        $scope.vm.issueDownTableConfigs.push({
                            name : customField.name,
                            key : "CUSTOM_FIELD_" + customField.id,
                            width : "width-100-p",
@@ -181,8 +175,8 @@
                            angular.forEach(saveTableConfigs, function (saveTableConfig) {
                                for (var count in $scope.vm.issueTableConfigs) {
                                    var issueTableConfig = $scope.vm.issueTableConfigs[count];
                                for (var count in $scope.vm.issueDownTableConfigs) {
                                    var issueTableConfig = $scope.vm.issueDownTableConfigs[count];
                                    if (issueTableConfig.key === saveTableConfig.key) {
                                        issueTableConfig.display = saveTableConfig.display;
src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js
@@ -24,60 +24,48 @@
                //  변수 모음
                $scope.vm = {
                    issueId: "",
                    issueTableConfigs : [{
                        name : $filter("translate")("issue.relationIssueType"), //
                        key : "RELATION_ISSUE_TYPE",
                    issueRelTableConfigs : [{
                        name : $filter("translate")("common.priority"), // 우선순위
                        key : "PRIORITY",
                        width : "width-100-p",
                        position : 1,
                        display : true
                    }, {
                        name : $filter("translate")("issue.relationIssueTitle"), //
                        key : "RELATION_ISSUE_TITLE",
                        width : "width-80-p",
                        position : 2,
                        display : true
                    },{
                        name : $filter("translate")("common.priority"), // 우선순위
                        key : "PRIORITY",
                        width : "width-80-p",
                        position : 3,
                        display : true
                    }, {
                        name : $filter("translate")("common.importance"), // 중요도
                        key : "SEVERITY",
                        width : "width-80-p",
                        position : 4,
                        width : "width-100-p",
                        position : 2,
                        display : true
                    }, {
                        name : $filter("translate")("issue.issueType"), // 이슈 타입
                        key : "ISSUE_TYPE",
                        width : "width-140-p",
                        position : 5,
                        width : "width-100-p",
                        position : 3,
                        display : true
                    }, {
                        name : $filter("translate")("common.assigneeTeam"), // 담당부서
                        key : "ASSIGNEE_TEAM",
                        width : "width-100-p",
                        position : 6,
                        width : "width-50-p",
                        position : 4,
                        display : true
                    }, {
                        name : $filter("translate")("common.register"), // 등록자
                        key : "REGISTER",
                        width : "width-100-p",
                        position : 7,
                        display : false
                        width : "width-50-p",
                        position : 5,
                        display : true
                    }, {
                        name : $filter("translate")("common.period"), // 기간
                        key : "PERIOD",
                        width : "width-140-p",
                        position : 8,
                        display : false
                        width : "width-100-p",
                        position : 6,
                        display : true
                    }, {
                        name : $filter("translate")("common.lastChangeDate"), // 최근 변경일
                        key : "MODIFY_DATE",
                        width : "width-100-p",
                        position : 9,
                        display : false
                        position : 7,
                        display : true
                    }, {
                    }]
                };
@@ -98,7 +86,7 @@
                    var content = {
                        issueId : $rootScope.currentDetailIssueId,
                        issueTableConfigs : JSON.stringify($scope.vm.issueTableConfigs)
                        issueTableConfigs : JSON.stringify($scope.vm.issueRelTableConfigs)
                    };
                    IssueTableConfig.relationAdd($resourceProvider.getContent(content,
@@ -108,10 +96,8 @@
                            SweetAlert.success($filter("translate")("issue.completedSavingIssueTable"), $filter("translate")("issue.saveIssueTableSettingsInformation")); // "이슈 테이블 설정 저장 완료", "이슈 테이블 설정 정보가 저장되었습니다."
                            swal.close();
                            $scope.fn.cancel();
                            //  변경된 이슈 테이블 정보를 이슈 목록 테이블에 갱신한다.
                            $rootScope.$broadcast("getRelIssueTableConfigs", {});
                            $rootScope.$broadcast("getIssueDetail", { id : $rootScope.currentDetailIssueId});
                        }
                        else {
                            SweetAlert.error($filter("translate")("issue.failedToSaveIssueTableSetting"), result.data.message.message); // 이슈 테이블 설정 저장 실패
@@ -151,7 +137,7 @@
                    var content = {
                        issueId : $rootScope.currentDetailIssueId,
                        issueTableConfigs : JSON.stringify($scope.vm.issueTableConfigs)
                        issueTableConfigs : JSON.stringify($scope.vm.issueRelTableConfigs)
                    };
                    IssueTableConfig.relationDetail($resourceProvider.getContent(content,
@@ -168,9 +154,9 @@
                //  사용자 정의 필드를 조회한 후 표시할 이슈 테이블 컬럼을 준비한다.
                $scope.fn.getCustomFields().then(function (result) {
                    var count = 8;
                    var count = 9;
                    angular.forEach(result, function (customField) {
                        $scope.vm.issueTableConfigs.push({
                        $scope.vm.issueRelTableConfigs.push({
                            name : customField.name,
                            key : "CUSTOM_FIELD_" + customField.id,
                            width : "width-100-p",
@@ -190,8 +176,8 @@
                            angular.forEach(saveTableConfigs, function (saveTableConfig) {
                                for (var count in $scope.vm.issueTableConfigs) {
                                    var issueTableConfig = $scope.vm.issueTableConfigs[count];
                                for (var count in $scope.vm.issueRelTableConfigs) {
                                    var issueTableConfig = $scope.vm.issueRelTableConfigs[count];
                                    if (issueTableConfig.key === saveTableConfig.key) {
                                        issueTableConfig.display = saveTableConfig.display;
src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js
@@ -17,13 +17,13 @@
                    formSubmit : formSubmit,    //  폼 전송
                    formCheck : formCheck,  //  폼 체크
                    getCustomFields : getCustomFields,   //  사용자 정의 필드 목록을 가져온다.
                    getIssueTableConfigs : getIssueTableConfigs //  이슈 목록 테이블 설정 정보를 가져온다.
                    getIssueAddTableConfigs : getIssueAddTableConfigs //  이슈 목록 테이블 설정 정보를 가져온다.
                };
                //  변수 모음
                $scope.vm = {
                    issueTableConfigs : [{
                        name : $filter("translate")("common.importance"), // 우선순위
                        name : $filter("translate")("common.priority"), // 우선순위
                        key : "PRIORITY",
                        width : "width-80-p",
                        position : 1,
@@ -130,7 +130,7 @@
                }
                //  이슈 목록 테이블 설정 정보를 가져온다.
                function getIssueTableConfigs() {
                function getIssueAddTableConfigs() {
                    var deferred = $q.defer();
                    IssueTableConfig.detail($resourceProvider.getContent({},
@@ -161,7 +161,7 @@
                    });
                    //  이슈 목록 테이블 설정 정보를 가져온다.
                    $scope.fn.getIssueTableConfigs().then(function (issueTableConfigs) {
                    $scope.fn.getIssueAddTableConfigs().then(function (issueTableConfigs) {
                        if ($rootScope.isDefined(issueTableConfigs)) {
                            $rootScope.spinner = true;
src/main/webapp/scripts/app/issue/issueDetail.controller.js
@@ -8,8 +8,8 @@
        'angular'
    ],
    function (app, angular) {
        app.controller('issueDetailController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', '$state', '$uibModal', 'SweetAlert', '$timeout', 'Issue', 'IssueComment', 'IssueRelation', 'AttachedFile', 'IssueStatus', 'IssueTableConfig', '$filter',
            function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, $state, $uibModal, SweetAlert, $timeout, Issue, IssueComment, IssueRelation, AttachedFile, IssueStatus, IssueTableConfig, $filter) {
        app.controller('issueDetailController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', '$state', '$uibModal', '$q','SweetAlert', '$timeout', 'Issue', 'IssueComment', 'IssueRelation', 'AttachedFile', 'IssueStatus', 'IssueTableConfig', '$filter',
            function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, $state, $uibModal, $q, SweetAlert, $timeout, Issue, IssueComment, IssueRelation, AttachedFile, IssueStatus, IssueTableConfig, $filter) {
                //  IssueListController vm, fn 변수 상속.
@@ -112,11 +112,11 @@
                    $scope.$parent.tableEvent.changeDetailView(issue.id);
                }
                // 하위 일감 삭제
                // 하위 이슈 삭제
                function removeDownIssue(id) {
                    //  삭제 알림
                    SweetAlert.swal({
                            title : $filter("translate")("issue.downIssueRemove"), // 연관 일감 삭제
                            title : $filter("translate")("issue.downIssueRemove"), // 하위 이슈 삭제
                            text : $filter("translate")("issue.wantToDeleteSelectIssue"),
                            type : "warning",
                            showCancelButton : true,
@@ -154,11 +154,11 @@
                }
                // 연관 일감 삭제
                // 연관 이슈 삭제
                function removeRelationIssue(id) {
                    //  삭제 알림
                    SweetAlert.swal({
                            title : $filter("translate")("issue.relationIssueRemove"), // 연관 일감 삭제
                            title : $filter("translate")("issue.relationIssueRemove"), // 연관 이슈 삭제
                            text : $filter("translate")("issue.wantToDeleteSelectIssue"),
                            type : "warning",
                            showCancelButton : true,
@@ -204,7 +204,7 @@
                //  테이블의 연관 이슈 컬럼을 만들어준다.
                function setRelTableColumn(issueTableConfig) {
                    //  연관 이슈  컬럼
                    //  연관 이슈 컬럼
                    switch(issueTableConfig.key) {
                        case "RELATION_ISSUE_TYPE" :
                            $scope.vm.relTableConfigs.push($tableProvider.config()
@@ -278,6 +278,14 @@
                                .setDAlign("text-center")
                                .setDName("modifyDate"));
                            break;
                        // default :"ISSUE_RELATION_DELETE" //  연관 삭제
                        //     $scope.vm.relTableConfigs.push($tableProvider.config()
                        //         .setHName("issue.downIssueTitle")
                        //         .setDType("renderer")
                        //         .setHWidth("bold" + issueTableConfig.width)
                        //         .setHSort(false)
                        //         .setDRenderer("ISSUE_RELATION_DELETE"));
                        //     break;
                    }
                    //  사용자 정의 필드 컬럼
@@ -287,7 +295,7 @@
                            var customField = $scope.vm.customFields[count];
                            if (customField.id === Number(issueTableConfig.key.substring(13))) {
                                $scope.vm.relTableConfigs.push($tableProvider.config()
                                $scope.vm.tableConfigs.push($tableProvider.config()
                                    .setHName(customField.name)
                                    .setDType("renderer")
                                    .setHWidth("bold " + issueTableConfig.width)
@@ -307,7 +315,7 @@
                    //  하위 이슈 컬럼
                    switch(issueTableConfig.key) {
                        case "DOWN_ISSUE_TITLE" :   //  우선순위
                        case "DOWN_ISSUE_TITLE" :   //  하위 이슈 제목
                            $scope.vm.downTableConfigs.push($tableProvider.config()
                                .setHName("issue.downIssueTitle")
                                .setDType("renderer")
@@ -394,23 +402,28 @@
                }
                //  연관 이슈 테이블 설정
                function makeRelTableConfigs() {
                    $scope.vm.relTableConfigs = [];
                    $scope.vm.relTableConfigs.push($tableProvider.config()
                        .setHName("issue.relationIssueType")
                        .setDType("renderer")
                        .setHWidth("width-30 bold")
                        .setHWidth("width-30-p bold")
                        .setHSort(false)
                        .setDRenderer("ISSUE_RELATION_TYPE"))
                    $scope.vm.relTableConfigs.push($tableProvider.config()
                        .setHName("issue.relationIssueTitle")
                        .setDType("renderer")
                        .setHWidth("width-60 bold")
                        .setHWidth("width-60-p bold")
                        .setHSort(false)
                        .setDRenderer("ISSUE_RELATION_MOVE"))
                    $scope.vm.relTableConfigs.push($tableProvider.config()
                        .setHName("issue.relationIssueDelete")
                        .setDType("renderer")
                        .setHWidth("width-20-p bold")
                        .setDRenderer("ISSUE_RELATION_DELETE")
                        .setHSort(false)
                        .setDAlign("text-center"))
                    angular.forEach($scope.vm.relTableConfigs, function (issueTableConfig) {
                        //  표시 대상인 컬럼만 화면에 그려준다.
@@ -427,16 +440,17 @@
                    $scope.vm.downTableConfigs.push($tableProvider.config()
                        .setHName("issue.downIssueTitle")
                        .setDType("renderer")
                        .setHWidth("width-60 bold")
                        .setHWidth("width-60-p bold")
                        .setHSort(false)
                        .setDRenderer("ISSUE_DOWN_MOVE"))
                    $scope.vm.downTableConfigs.push($tableProvider.config()
                        .setHName("issue.relationIssueDelete")
                        .setDType("renderer")
                        .setHWidth("width-10 bold")
                        .setHWidth("width-20-p bold")
                        .setDRenderer("ISSUE_DOWN_DELETE")
                        .setHSort(false)
                        .setDAlign("text-center"))
                    angular.forEach($scope.vm.downTableConfigs, function (issueTableConfig) {
                        //  표시 대상인 컬럼만 화면에 그려준다.
                        if (issueTableConfig.display) {
@@ -462,19 +476,41 @@
                            //  연관 슈 목록 테이블 설정 값을 가져와서 적용한다.
                            if ($rootScope.isDefined(issueTableConfigs)) {
                                //  이슈 테이블 설정 정보를 저장 한다.
                                $scope.vm.issueRelTableConfigs = [];
                                $scope.vm.issueRelTableConfigs = JSON.parse(issueTableConfigs);
                                $scope.vm.issueRelTableConfigs.sort(function (a, b) {
                                    return a.position < b.position ? -1 : a.position > b.position ? 1 : 0;
                                });
                                $scope.vm.relTableConfigs = [];
                                $scope.vm.relTableConfigs.push($tableProvider.config()
                                    .setHName("issue.relationIssueType")
                                    .setDType("renderer")
                                    .setHWidth("width-30-p bold")
                                    .setHSort(false)
                                    .setDRenderer("ISSUE_RELATION_TYPE"))
                                $scope.vm.relTableConfigs.push($tableProvider.config()
                                    .setHName("issue.relationIssueTitle")
                                    .setDType("renderer")
                                    .setHWidth("width-60-p bold")
                                    .setHSort(false)
                                    .setDRenderer("ISSUE_RELATION_MOVE"))
                                angular.forEach($scope.vm.issueRelTableConfigs, function (issueTableConfig) {
                                    //  표시 대상인 컬럼만 화면에 그려준다.
                                    if (issueTableConfig.display) {
                                        //  테이블의 컬럼을 만들어준다.
                                        $scope.fn.setRelTableColumn(issueTableConfig);
                                    }
                                });
                                $scope.vm.relTableConfigs.push($tableProvider.config()
                                    .setHName("issue.relationIssueDelete")
                                    .setDType("renderer")
                                    .setHWidth("width-20-p bold")
                                    .setDRenderer("ISSUE_RELATION_DELETE")
                                    .setHSort(false)
                                    .setDAlign("text-center"))
                            } else {
                                makeRelTableConfigs();
@@ -507,7 +543,13 @@
                                $scope.vm.issueDownTableConfigs.sort(function (a, b) {
                                    return a.position < b.position ? -1 : a.position > b.position ? 1 : 0;
                                });
                                $scope.vm.downTableConfigs = [];
                                $scope.vm.downTableConfigs.push($tableProvider.config()
                                    .setHName("issue.downIssueTitle")
                                    .setDType("renderer")
                                    .setHWidth("width-60-p bold")
                                    .setHSort(false)
                                    .setDRenderer("ISSUE_DOWN_MOVE"))
                                angular.forEach($scope.vm.issueDownTableConfigs, function (issueTableConfig) {
                                    //  표시 대상인 컬럼만 화면에 그려준다.
                                    if (issueTableConfig.display) {
@@ -515,6 +557,13 @@
                                        $scope.fn.setDownTableColumn(issueTableConfig);
                                    }
                                });
                                $scope.vm.downTableConfigs.push($tableProvider.config()
                                    .setHName("issue.relationIssueDelete")
                                    .setDType("renderer")
                                    .setHWidth("width-20-p bold")
                                    .setDRenderer("ISSUE_DOWN_DELETE")
                                    .setHSort(false)
                                    .setDAlign("text-center"))
                            } else {
                                makeDownTableConfigs();
@@ -541,7 +590,8 @@
                    var contents = {
                        relationIssueType : $scope.vm.relationIssueType.id,
                        issueId : $rootScope.currentDetailIssueId,
                        relationIssueId : $scope.vm.form.issues[0].id
                        relationIssueId : $scope.vm.form.issues[0].id,
                        priorityName : $scope.vm.priorityName
                    };
                    IssueRelation.add($resourceProvider.getContent(
@@ -583,6 +633,12 @@
                        }
                    });
                }
                //  이슈명을 클릭하면 이슈 상세 정보를 조회한다.
                $rootScope.$on("getIssueDetail", function (event, args) {
                    $scope.vm.viewer.id = args["id"];
                    $scope.fn.getIssueDetail();
                });
                //  이슈명을 클릭하면 이슈 상세 정보를 조회한다.
                $scope.$on("getIssueDetail", function (event, args) {
@@ -660,7 +716,7 @@
                //  연관 이슈 목록 테이블 설정
                function addRelationIssueTableConfig() {
                    $uibModal.open({
                        templateUrl : 'views/issue/issueRelationTableConfig.html',
                        templateUrl : 'views/issue/issueAddRelationTableConfig.html',
                        size : "lg",
                        controller : 'issueAddRelationTableConfigController',
                        backdrop : 'static',
@@ -671,7 +727,7 @@
                //  하위 이슈 목록 테이블 설정
                function addDownIssueTableConfig() {
                    $uibModal.open({
                        templateUrl : 'views/issue/issueDownTableConfig.html',
                        templateUrl : 'views/issue/issueAddDownTableConfig.html',
                        size : "lg",
                        controller : 'issueAddDownTableConfigController',
                        backdrop : 'static',
@@ -754,9 +810,14 @@
                                    $scope.vm.form.issuesDown.push(issueDownVo.issue);
                                });
                                // wyu
                                angular.forEach(result.data.data.issueRelationVos, function (issueRelationColum){
                                    issueRelationColum.issueRelation = $scope.vm.issueRelation;
                                    $scope.vm.form.issues.push(issueRelationColum.issueRelation);
                                });
                                $scope.vm.viewer.issueRelationVos = result.data.data.issueRelationVos;
                                $scope.vm.viewer.issueDownVos = result.data.data.issueDownVos;
                            }
                        }
                        else {
@@ -765,6 +826,8 @@
                    });
                }
                // ===================================================================================
                //  이슈 이미지 미리 보기 만들기
                function makePreviewImages(attachedFileVos) {
                    //  미리보기 이미지 초기화
src/main/webapp/views/issue/issueAddDownTableConfig.html
@@ -30,19 +30,13 @@
                <tbody>
                <tr>
                    <td class="text-center">
                        <span class="bold" translate="issue.downIssueType">하위 이슈 구분</span>
                    </td>
                    <td class="text-center" colspan="3">
                        <span class="text-danger bold" translate="issue.cannotChangedIssueTitle">이슈 제목은 변경할 수 없습니다.</span>
                    </td>
                    <td class="text-center">
                        <span class="bold" translate="issue.downIssueTitle">하위 이슈 제목</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">
                <tr ng-repeat="issueTableConfig in vm.issueDownTableConfigs">
                    <td class="text-center">
                        <span class="bold">{{issueTableConfig.name}}</span>
                    </td>
src/main/webapp/views/issue/issueAddRelationTableConfig.html
@@ -9,7 +9,7 @@
    </div>
    <div class="modal-body">
        <form role="form" name="issueTableConfigForm">
        <form role="form" name="issueRelTableConfigForm">
            <table class="table table-dash table-lightborder table-layout-fixed">
                <thead>
                <tr>
@@ -33,16 +33,18 @@
                        <span class="bold" translate="issue.relationIssueType">연관 이슈 구분</span>
                    </td>
                    <td class="text-center" colspan="3">
                        <span class="text-danger bold" translate="issue.cannotChangedIssueTitle">이슈 제목은 변경할 수 없습니다.</span>
                        <span class="text-danger bold" translate="issue.cannotChangedIssueType">이슈 구분은 변경할 수 없습니다.</span>
                    </td>
                </tr>
                <tr>
                    <td class="text-center">
                        <span class="bold" translate="issue.relationIssueTitle">연관 이슈 구분</span>
                        <span class="bold" translate="issue.relationIssueTitle">연관 이슈 제목</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">
                <tr ng-repeat="issueTableConfig in vm.issueRelTableConfigs">
                    <td class="text-center">
                        <span class="bold">{{issueTableConfig.name}}</span>
                    </td>
@@ -94,7 +96,7 @@
    <div class="modal-footer buttons-on-right">
        <button type="button" class="btn btn-md btn-grey" ng-click="fn.cancel()"><span translate="common.close">닫기</span></button>
        <button type="button" class="btn btn-md btn-primary bold"
                ng-disabled="fn.formCheck(issueTableConfigForm.$invalid)"
                ng-disabled="fn.formCheck(issueRelTableConfigForm.$invalid)"
                ng-click="fn.formSubmit()"><span translate="common.save">저장</span>
        </button>
    </div>
src/main/webapp/views/issue/issueDetail.html
@@ -414,7 +414,7 @@
                    </div>
                </div>
                <!--    테이블 -->
                <!--  연관 이슈 테이블 -->
                <div class="mt-10 issue-detail-word-break width-100">
                    <js-table data="vm.viewer.issueRelationVos" table-configs="vm.relTableConfigs"
                              event="relTableEvent" detail-view="true" hide-header="false" use-sort="false"></js-table>
@@ -461,7 +461,7 @@
                    </div>
                </div>
                <!--    테이블 -->
                <!-- 하위 이슈 테이블 -->
                <div class="mt-10 issue-detail-word-break width-100">
                    <js-table data="vm.viewer.issueDownVos" table-configs="vm.downTableConfigs"
                              event="downTableEvent" detail-view="true" hide-header="false" use-sort="false"></js-table>