From 6ee7dd9c3d8cc211ee5a01bbe481cabbb9c890eb Mon Sep 17 00:00:00 2001
From: wyu <kknd09321@nate.com>
Date: 월, 22 11월 2021 12:42:31 +0900
Subject: [PATCH] 이슈 상세 연관,하위 테이블 표시 설정 - [프론트]

---
 src/main/webapp/scripts/app/project/projectModify.controller.js                 |    6 
 src/main/webapp/scripts/app/issue/issue.js                                      |    2 
 src/main/webapp/scripts/components/issueTableConfig/issueTableConfig.service.js |   14 +
 src/main/webapp/views/issue/issueDownTableConfig.html                           |   95 ++++++
 src/main/webapp/views/issue/issueListNormal.html                                |   10 
 src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js         |  187 +++++++++++++
 src/main/webapp/assets/styles/main.css                                          |   13 
 src/main/webapp/scripts/app/project/projectAdd.controller.js                    |    4 
 src/main/webapp/scripts/app/issue/issueAdd.controller.js                        |   18 +
 src/main/webapp/scripts/app/issue/issueModify.controller.js                     |   95 +++---
 src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js     |  194 +++++++++++++
 src/main/webapp/views/issue/issueRelationTableConfig.html                       |   95 ++++++
 src/main/webapp/views/project/projectAdd.html                                   |    7 
 src/main/webapp/views/project/projectModify.html                                |    6 
 src/main/webapp/scripts/app/issue/issueList.controller.js                       |   19 +
 src/main/webapp/i18n/ko/global.json                                             |    3 
 src/main/webapp/views/issue/issueDetail.html                                    |   69 +++-
 src/main/webapp/scripts/main.js                                                 |    2 
 18 files changed, 738 insertions(+), 101 deletions(-)

diff --git a/src/main/webapp/assets/styles/main.css b/src/main/webapp/assets/styles/main.css
index 1d10159..05ee9d2 100644
--- a/src/main/webapp/assets/styles/main.css
+++ b/src/main/webapp/assets/styles/main.css
@@ -934,6 +934,9 @@
     margin-left: 91.6666666667%;
 }
 
+.offset-12 {
+    margin-left: 100%;
+}
 @media (min-width: 576px) {
     .col-sm {
         -ms-flex-preferred-size: 0;
@@ -3339,6 +3342,12 @@
     color: #fff;
     background-color: #343a40;
     border-color: #343a40;
+}
+
+.btn-darkgrey {
+    color: #fff;
+    background-color: #727072;
+    border-color: #727072;
 }
 
 .btn-dark:hover {
@@ -30223,4 +30232,8 @@
     color:#0066ff;
 }
 
+.mgr-1 {
+    margin-right: 1rem;
+}
+
 /* 媛꾪듃李⑦듃 end */
diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json
index ed49941..ffd617d 100644
--- a/src/main/webapp/i18n/ko/global.json
+++ b/src/main/webapp/i18n/ko/global.json
@@ -788,7 +788,8 @@
         "detectingData": "�깘吏��씪�떆",
         "import": "媛��졇�삤湲�",
         "diffuserURL": "�쑀�룷�옄URL",
-        "country": "援�媛�"
+        "country": "援�媛�",
+        "tableView": "�뀒�씠釉� �몴�떆�꽕�젙"
     },
     "tasks": {
         "agileBoardTitle": "移몃컲 蹂대뱶"
diff --git a/src/main/webapp/scripts/app/issue/issue.js b/src/main/webapp/scripts/app/issue/issue.js
index cf9e407..41384ce 100644
--- a/src/main/webapp/scripts/app/issue/issue.js
+++ b/src/main/webapp/scripts/app/issue/issue.js
@@ -37,7 +37,7 @@
                                 'chartLoader', 'jsTable', 'tableColumnGenerator', 'modalFormAutoScroll', 'summerNote', 'summerNote-ko-KR', 'fullScroll', 'workflowService', 'priorityService', 'issueSearchService', 'issueTableConfigService', 'inputRegex',
                                 'severityService', 'issueTypeService', 'issueTypeCustomFieldService', 'issueService', 'issueStatusService', 'issueUserService','issueDepartmentService','issueModifyUserController', 'issueModifyDepartmentController', 'customFieldService', 'issueSearchFieldKeyViewElement',
                                 'issueSearchCustomFieldViewElement', 'tableUserImage', 'fullScroll', 'issueCommentService', 'detectIssueEditor', 'formSubmit', 'issueModifyStatusController', 'jsShortCut',
-                                'issueAddTableConfigController', 'domAppend', 'issueDetailImagePreview', 'issueSendMailController', 'htmlDiff', 'issueVersionViewController', 'issueVersionService',
+                                'issueAddTableConfigController','issueAddRelationTableConfigController','issueAddDownTableConfigController','domAppend', 'issueDetailImagePreview', 'issueSendMailController', 'htmlDiff', 'issueVersionViewController', 'issueVersionService',
                                 'jsHtmlDiff', 'issueReservationController', 'issueReservationService', 'issueVersionService', 'issueStatusAutoFocus', 'issueRelationService'
                             ], function () {
                                 deferred.resolve();
diff --git a/src/main/webapp/scripts/app/issue/issueAdd.controller.js b/src/main/webapp/scripts/app/issue/issueAdd.controller.js
index 53ef440..c08a3e0 100644
--- a/src/main/webapp/scripts/app/issue/issueAdd.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueAdd.controller.js
@@ -33,6 +33,7 @@
                     getIssueTypeCustomFields : getIssueTypeCustomFields,    //  �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶 紐⑸줉 媛��졇�삤湲�
                     removeUploadFile : removeUploadFile,    //  �뾽濡쒕뱶�븯�젮�뒗 �듅�젙 �뙆�씪�쓣 �궘�젣
                     removeManager : removeManager,  //  �떞�떦�옄 �궘�젣
+                    removeDepartment : removeDepartment,  //  �떞�떦遺��꽌 �궘�젣
                     setIssueTypeTemplate : setIssueTypeTemplate,    //  �씠�뒋 �쑀�삎 �뀥�뵆由� �쟻�슜�븯湲�
                     startExecute : startExecute //  而⑦듃濡� 濡쒕뵫�떆 泥섏쓬�쑝濡� �떆�옉�릺�뒗 �븿�닔
                 };
@@ -294,6 +295,11 @@
                     $scope.vm.form.departments.splice(index, 1);
                 }
 
+                // �떞�떦遺��꽌 �궘�젣
+                function removeDepartment(index) {
+                    $scope.vm.form.departments.splice(index, 1);
+                }
+
                 //  �뾽濡쒕뱶 �뙆�씪 �궘�젣
                 function removeUploadFile(index) {
                     $scope.vm.form.files.splice(index, 1);
@@ -344,6 +350,7 @@
                 // �뾽泥댁젙蹂� 寃곌낵 媛� Event 泥섎━(set)
                 $scope.$on("companyFieldEvent", function (event, result) {
                     $scope.vm.companyId = result[0].id;
+                    $scope.vm.companyName = result[0].id;
                     $scope.vm.companyManager = result[0].manager;
                     $scope.vm.companyTel = result[0].tel;
                     $scope.vm.companyEmail = result[0].email;
@@ -354,6 +361,7 @@
                 // ISP�젙蹂� 寃곌낵 媛� Event 泥섎━(set)
                 $scope.$on("ispFieldEvent", function (event, result) {
                     $scope.vm.ispId = result[0].id;
+                    $scope.vm.ispName = result[0].name;
                     $scope.vm.ispCode = result[0].code;
                     $scope.vm.ispManager = result[0].manager;
                     $scope.vm.ispTel = result[0].tel;
@@ -364,6 +372,7 @@
                 // �샇�뒪�똿�젙蹂� 寃곌낵 媛� Event 泥섎━(set)
                 $scope.$on("hostingFieldEvent", function (event, result) {
                     $scope.vm.hostingId = result[0].id;
+                    $scope.vm.hostingName = result[0].name;
                     $scope.vm.hostingCode = result[0].code;
                     $scope.vm.hostingManager = result[0].manager;
                     $scope.vm.hostingTel = result[0].tel;
@@ -378,6 +387,7 @@
                     var content = {
                         title : $rootScope.preventXss($scope.vm.form.title),    //  �젣紐�
                         description : $rootScope.preventXss($scope.vm.form.description),   //  �궡�슜
+
                         projectId : (function () {   //  �봽濡쒖젥�듃 �븘�씠�뵒
                             var projectId = "";
 
@@ -387,9 +397,11 @@
 
                             return projectId;
                         })(),
+
                         issueTypeId : $scope.vm.form.issueTypeId,   //  �씠�뒋 �쑀�삎 �븘�씠�뵒
                         priorityId : $scope.vm.form.priorityId,    //  �슦�꽑�닚�쐞 �븘�씠�뵒
                         severityId : $scope.vm.form.severityId,    //  以묒슂�룄 �븘�씠�뵒
+
                         companyId : (function () {   //  �뾽泥� �븘�씠�뵒
                             var companyId = -1;
                             if ($scope.vm.form.issueCompanyFields.length > 0) {
@@ -445,9 +457,6 @@
 
                             return attachedFileIds;
                         })(),
-
-                        startCompleteDateRange : $scope.vm.form.startCompleteDateRange,
-                        detectingDateRange : $scope.vm.form.detectingDateRange,
 
                         issueCompanyFields : (function () {
                             var issueCompanyFields = [];
@@ -510,6 +519,9 @@
                             return issueHostingFields;
                         })(),
 
+                        startCompleteDateRange : $scope.vm.form.startCompleteDateRange,
+                        detectingDateRange : $scope.vm.form.detectingDateRange,
+
                         issueCustomFields : (function () {    //  �씠�뒋�뿉�꽌 �궗�슜�릺�뒗 �궗�슜�옄 �젙�쓽 �븘�뱶
                             var issueCustomFields = [];
 
diff --git a/src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js b/src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js
new file mode 100644
index 0000000..74a08f9
--- /dev/null
+++ b/src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js
@@ -0,0 +1,187 @@
+/**
+ * Created by wisestone on 2019-02-07.
+ */
+'use strict';
+
+define([
+        'app',
+        'angular'
+    ],
+    function (app, angular) {
+        app.controller('issueAddDownTableConfigController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$uibModalInstance', 'SweetAlert', '$timeout', 'IssueTableConfig', 'CustomField', '$q', '$filter',
+            function ($scope, $rootScope, $log, $resourceProvider, $uibModalInstance, SweetAlert, $timeout, IssueTableConfig, CustomField, $q, $filter) {
+
+                //  �븿�닔 紐⑥쓬
+                $scope.fn = {
+                    cancel : cancel,    //  �뙘�뾽 李� �떕湲�
+                    formSubmit : formSubmit,    //  �뤌 �쟾�넚
+                    formCheck : formCheck,  //  �뤌 泥댄겕
+                    getCustomFields : getCustomFields,   //  �궗�슜�옄 �젙�쓽 �븘�뱶 紐⑸줉�쓣 媛��졇�삩�떎.
+                    getIssueTableConfigs : getIssueTableConfigs //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
+                };
+
+                //  蹂��닔 紐⑥쓬
+                $scope.vm = {
+                    issueTableConfigs : [{
+                        name : $filter("translate")("common.priority"), // �슦�꽑�닚�쐞
+                        key : "PRIORITY",
+                        width : "width-100-p",
+                        position : 1,
+                        display : true
+                    }, {
+                        name : $filter("translate")("common.importance"), // 以묒슂�룄
+                        key : "SEVERITY",
+                        width : "width-80-p",
+                        position : 2,
+                        display : true
+                    }, {
+                        name : $filter("translate")("issue.issueType"), // �씠�뒋 ���엯
+                        key : "ISSUE_TYPE",
+                        width : "width-140-p",
+                        position : 3,
+                        display : true
+                    }, {
+                        name : $filter("translate")("common.assignee"), // �떞�떦�옄
+                        key : "ASSIGNEE",
+                        width : "width-100-p",
+                        position : 4,
+                        display : true
+                    }, {
+                        name : $filter("translate")("common.register"), // �벑濡앹옄
+                        key : "REGISTER",
+                        width : "width-100-p",
+                        position : 5,
+                        display : false
+                    }, {
+                        name : $filter("translate")("common.period"), // 湲곌컙
+                        key : "PERIOD",
+                        width : "width-140-p",
+                        position : 6,
+                        display : false
+                    }, {
+                        name : $filter("translate")("common.lastChangeDate"), // 理쒓렐 蹂�寃쎌씪
+                        key : "MODIFY_DATE",
+                        width : "width-100-p",
+                        position : 7,
+                        display : false
+                    }, {
+                    }]
+                };
+
+
+                //  �뤌 �쟾�넚
+                function formCheck(formInvalid) {
+                    if (formInvalid) {
+                        return true;
+                    }
+
+                    return false;
+                }
+
+                //  �뤌 �쟾�넚
+                function formSubmit() {
+                    $rootScope.spinner = true;
+
+                    var content = {
+                        issueTableConfigs : JSON.stringify($scope.vm.issueTableConfigs)
+                    };
+
+                    IssueTableConfig.addDown($resourceProvider.getContent(content,
+                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
+
+                        if (result.data.message.status === "success") {
+                            SweetAlert.success($filter("translate")("issue.completedSavingIssueTable"), $filter("translate")("issue.saveIssueTableSettingsInformation")); // "�씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �셿猷�", "�씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂닿� ���옣�릺�뿀�뒿�땲�떎."
+                            //  蹂�寃쎈맂 �씠�뒋 �뀒�씠釉� �젙蹂대�� �씠�뒋 紐⑸줉 �뀒�씠釉붿뿉 媛깆떊�븳�떎.
+                            $rootScope.$broadcast("getIssueTableConfigs", {});
+                        }
+                        else {
+                            SweetAlert.error($filter("translate")("issue.failedToSaveIssueTableSetting"), result.data.message.message); // �씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �떎�뙣
+                        }
+
+                        $rootScope.spinner = false;
+                    });
+                }
+
+
+                //  �뙘�뾽 李� �떕湲�
+                function cancel() {
+                    $rootScope.$broadcast("closeLayer");    //  �뙘�뾽�씠 �뿴由ш퀬 �굹�꽌 js-multi, js-single �벑�뿉�꽌 body �씠踰ㅽ듃媛� �궇�븘媛��뒗 �쁽�긽 �닔�젙
+                    $uibModalInstance.dismiss('cancel');
+                    $(document).unbind("keydown");  //  �떒異뺥궎 �씠踰ㅽ듃 �젣嫄�
+                }
+
+                //  �궗�슜�옄 �젙�쓽 �븘�뱶 紐⑸줉�쓣 媛��졇�삩�떎.
+                function getCustomFields() {
+                    var deferred = $q.defer();
+
+                    CustomField.find($resourceProvider.getContent({},
+                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
+                        if (result.data.message.status !== "success") {
+                            SweetAlert.error($filter("translate")("issue.failedToUserDefinedFieldListLookup"), result.data.message.message); // �궗�슜�옄 �젙�쓽 �븘�뱶 紐⑸줉 議고쉶 �떎�뙣
+                        }
+
+                        deferred.resolve(result.data.data);
+                    });
+
+                    return deferred.promise;
+                }
+
+                //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
+                function getIssueTableConfigs() {
+                    var deferred = $q.defer();
+
+                    IssueTableConfig.detail($resourceProvider.getContent({},
+                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
+                        if (result.data.message.status !== "success") {
+                            SweetAlert.error($filter("translate")("issue.failedToIssueTableColumnLookup"), result.data.message.message); // �씠�뒋 �뀒�씠釉� 而щ읆 議고쉶 �떎�뙣
+                        }
+
+                        deferred.resolve(result.data.data);
+                    });
+
+                    return deferred.promise;
+                }
+
+                //  �궗�슜�옄 �젙�쓽 �븘�뱶瑜� 議고쉶�븳 �썑 �몴�떆�븷 �씠�뒋 �뀒�씠釉� 而щ읆�쓣 以�鍮꾪븳�떎.
+                $scope.fn.getCustomFields().then(function (result) {
+                    var count = 7;
+                    angular.forEach(result, function (customField) {
+                        $scope.vm.issueTableConfigs.push({
+                            name : customField.name,
+                            key : "CUSTOM_FIELD_" + customField.id,
+                            width : "width-100-p",
+                            display : false,
+                            position : count
+                        });
+
+                        count++;
+                    });
+
+                    //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
+                    $scope.fn.getIssueTableConfigs().then(function (issueTableConfigs) {
+                        if ($rootScope.isDefined(issueTableConfigs)) {
+                            $rootScope.spinner = true;
+
+                            var saveTableConfigs = JSON.parse(issueTableConfigs);
+
+                            angular.forEach(saveTableConfigs, function (saveTableConfig) {
+
+                                for (var count in $scope.vm.issueTableConfigs) {
+                                    var issueTableConfig = $scope.vm.issueTableConfigs[count];
+
+                                    if (issueTableConfig.key === saveTableConfig.key) {
+                                        issueTableConfig.display = saveTableConfig.display;
+                                        issueTableConfig.width = saveTableConfig.width;
+                                        issueTableConfig.position = saveTableConfig.position;
+                                        break;
+                                    }
+                                }
+                            });
+
+                            $rootScope.spinner = false;
+                        }
+                    });
+                });
+
+            }]);
+    });
diff --git a/src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js b/src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js
new file mode 100644
index 0000000..6e890a9
--- /dev/null
+++ b/src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js
@@ -0,0 +1,194 @@
+/**
+ * Created by wisestone on 2019-02-07.
+ */
+'use strict';
+
+define([
+        'app',
+        'angular'
+    ],
+    function (app, angular) {
+        app.controller('issueAddRelationTableConfigController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$uibModalInstance', 'SweetAlert', '$timeout', 'IssueTableConfig', 'CustomField', '$q', '$filter',
+            function ($scope, $rootScope, $log, $resourceProvider, $uibModalInstance, SweetAlert, $timeout, IssueTableConfig, CustomField, $q, $filter) {
+
+                //  �븿�닔 紐⑥쓬
+                $scope.fn = {
+                    cancel : cancel,    //  �뙘�뾽 李� �떕湲�
+                    formSubmit : formSubmit,    //  �뤌 �쟾�넚
+                    formCheck : formCheck,  //  �뤌 泥댄겕
+                    getCustomFields : getCustomFields,   //  �궗�슜�옄 �젙�쓽 �븘�뱶 紐⑸줉�쓣 媛��졇�삩�떎.
+                    getIssueTableConfigs : getIssueTableConfigs //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
+                };
+
+                //  蹂��닔 紐⑥쓬
+                $scope.vm = {
+                    issueTableConfigs : [{
+                        name : $filter("translate")("common.priority"), // �슦�꽑�닚�쐞
+                        issueId : "",
+                        key : "PRIORITY",
+                        width : "width-100-p",
+                        position : 1,
+                        display : true
+                    }, {
+                        name : $filter("translate")("common.importance"), // 以묒슂�룄
+                        issueId : "",
+                        key : "SEVERITY",
+                        width : "width-80-p",
+                        position : 2,
+                        display : true
+                    }, {
+                        name : $filter("translate")("issue.issueType"), // �씠�뒋 ���엯
+                        issueId : "",
+                        key : "ISSUE_TYPE",
+                        width : "width-140-p",
+                        position : 3,
+                        display : true
+                    }, {
+                        name : $filter("translate")("common.assignee"), // �떞�떦�옄
+                        issueId : "",
+                        key : "ASSIGNEE",
+                        width : "width-100-p",
+                        position : 4,
+                        display : true
+                    }, {
+                        name : $filter("translate")("common.register"), // �벑濡앹옄
+                        issueId : "",
+                        key : "REGISTER",
+                        width : "width-100-p",
+                        position : 5,
+                        display : false
+                    }, {
+                        name : $filter("translate")("common.period"), // 湲곌컙
+                        issueId : "",
+                        key : "PERIOD",
+                        width : "width-140-p",
+                        position : 6,
+                        display : false
+                    }, {
+                        name : $filter("translate")("common.lastChangeDate"), // 理쒓렐 蹂�寃쎌씪
+                        issueId : "",
+                        key : "MODIFY_DATE",
+                        width : "width-100-p",
+                        position : 7,
+                        display : false
+                    }, {
+                    }]
+                };
+
+
+                //  �뤌 �쟾�넚
+                function formCheck(formInvalid) {
+                    if (formInvalid) {
+                        return true;
+                    }
+
+                    return false;
+                }
+
+                //  �뤌 �쟾�넚
+                function formSubmit() {
+                    $rootScope.spinner = true;
+
+                    var content = {
+                        issueTableConfigs : JSON.stringify($scope.vm.issueTableConfigs)
+                    };
+
+                    IssueTableConfig.addRelation($resourceProvider.getContent(content,
+                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
+
+                        if (result.data.message.status === "success") {
+                            SweetAlert.success($filter("translate")("issue.completedSavingIssueTable"), $filter("translate")("issue.saveIssueTableSettingsInformation")); // "�씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �셿猷�", "�씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂닿� ���옣�릺�뿀�뒿�땲�떎."
+                            //  蹂�寃쎈맂 �씠�뒋 �뀒�씠釉� �젙蹂대�� �씠�뒋 紐⑸줉 �뀒�씠釉붿뿉 媛깆떊�븳�떎.
+                            $rootScope.$broadcast("getIssueTableConfigs", {});
+                        }
+                        else {
+                            SweetAlert.error($filter("translate")("issue.failedToSaveIssueTableSetting"), result.data.message.message); // �씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �떎�뙣
+                        }
+
+                        $rootScope.spinner = false;
+                    });
+                }
+
+
+                //  �뙘�뾽 李� �떕湲�
+                function cancel() {
+                    $rootScope.$broadcast("closeLayer");    //  �뙘�뾽�씠 �뿴由ш퀬 �굹�꽌 js-multi, js-single �벑�뿉�꽌 body �씠踰ㅽ듃媛� �궇�븘媛��뒗 �쁽�긽 �닔�젙
+                    $uibModalInstance.dismiss('cancel');
+                    $(document).unbind("keydown");  //  �떒異뺥궎 �씠踰ㅽ듃 �젣嫄�
+                }
+
+                //  �궗�슜�옄 �젙�쓽 �븘�뱶 紐⑸줉�쓣 媛��졇�삩�떎.
+                function getCustomFields() {
+                    var deferred = $q.defer();
+
+                    CustomField.find($resourceProvider.getContent({},
+                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
+                        if (result.data.message.status !== "success") {
+                            SweetAlert.error($filter("translate")("issue.failedToUserDefinedFieldListLookup"), result.data.message.message); // �궗�슜�옄 �젙�쓽 �븘�뱶 紐⑸줉 議고쉶 �떎�뙣
+                        }
+
+                        deferred.resolve(result.data.data);
+                    });
+
+                    return deferred.promise;
+                }
+
+                //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
+                function getIssueTableConfigs() {
+                    var deferred = $q.defer();
+
+                    IssueTableConfig.detail($resourceProvider.getContent({},
+                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
+                        if (result.data.message.status !== "success") {
+                            SweetAlert.error($filter("translate")("issue.failedToIssueTableColumnLookup"), result.data.message.message); // �씠�뒋 �뀒�씠釉� 而щ읆 議고쉶 �떎�뙣
+                        }
+
+                        deferred.resolve(result.data.data);
+                    });
+
+                    return deferred.promise;
+                }
+
+                //  �궗�슜�옄 �젙�쓽 �븘�뱶瑜� 議고쉶�븳 �썑 �몴�떆�븷 �씠�뒋 �뀒�씠釉� 而щ읆�쓣 以�鍮꾪븳�떎.
+                $scope.fn.getCustomFields().then(function (result) {
+                    var count = 7;
+                    angular.forEach(result, function (customField) {
+                        $scope.vm.issueTableConfigs.push({
+                            name : customField.name,
+                            key : "CUSTOM_FIELD_" + customField.id,
+                            width : "width-100-p",
+                            display : false,
+                            position : count
+                        });
+
+                        count++;
+                    });
+
+                    //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �젙蹂대�� 媛��졇�삩�떎.
+                    $scope.fn.getIssueTableConfigs().then(function (issueTableConfigs) {
+                        if ($rootScope.isDefined(issueTableConfigs)) {
+                            $rootScope.spinner = true;
+
+                            var saveTableConfigs = JSON.parse(issueTableConfigs);
+
+                            angular.forEach(saveTableConfigs, function (saveTableConfig) {
+
+                                for (var count in $scope.vm.issueTableConfigs) {
+                                    var issueTableConfig = $scope.vm.issueTableConfigs[count];
+
+                                    if (issueTableConfig.key === saveTableConfig.key) {
+                                        issueTableConfig.display = saveTableConfig.display;
+                                        issueTableConfig.width = saveTableConfig.width;
+                                        issueTableConfig.position = saveTableConfig.position;
+                                        break;
+                                    }
+                                }
+                            });
+
+                            $rootScope.spinner = false;
+                        }
+                    });
+                });
+
+            }]);
+    });
diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js
index 3b68c16..0be7e8d 100644
--- a/src/main/webapp/scripts/app/issue/issueList.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -52,7 +52,7 @@
                         severityIds : [],   //  以묒슂�룄 寃��깋
                         priorityIds : [],   //  �슦�꽑�닚�쐞 寃��깋
                         issueStatusIds : [],    //  �씠�뒋 �긽�깭 寃��깋
-                        issueTypeIds : []   //  �씠�뒋 �쑀�삎 寃��깋
+                        issueTypeIds : [],   //  �씠�뒋 �쑀�삎 寃��깋
                     },
                     searchView : false, //  �긽�꽭 寃��깋 議곌굔 �몴�떆 �뿬遺�
                     detailView : false, //  �긽�꽭 紐⑤뱶 蹂�寃� 媛�
@@ -64,10 +64,12 @@
                     responseData : {
                         data : []
                     },
+                    departmentName : "",
                     projectName : "",   //  �봽濡쒖젥�듃 寃��깋
                     userName : "",  //  �떞�떦�옄 寃��깋
                     registerName : "",  //  �벑濡앹옄 寃��깋
                     projects : [],  //  �봽濡쒖젥�듃
+                    departments : [],
                     issueStatuses : [], //  �씠�뒋 �긽�깭
                     issueTypes : [],    //  �씠�뒋 �쑀�삎
                     priorities : [],    //  �슦�꽑 �닚�쐞
@@ -103,6 +105,7 @@
                             search : $scope.vm.search,
                             projects : $scope.vm.projects,
                             users : $scope.vm.users,
+                            departments : $scope.vm.departments,
                             registers : $scope.vm.registers,
                             parentIssueId : $scope.vm.parentIssueId
                         })
@@ -130,9 +133,10 @@
                                 var issueListSearchObject = JSON.parse(result.data.data);
                                 //  �씠�뒋 踰덊샇留� �쟻�슜�븳�떎. - �궘�젣�떆 泥섎━諛⑸쾿�븣臾몄뿉 �떎瑜� �냽�꽦�� �쟻�슜 蹂대쪟
                                 $scope.vm.search = issueListSearchObject.search;
-                                /*$scope.vm.users = issueListSearchObject.users;
+                                $scope.vm.users = issueListSearchObject.users;
+                                $scope.vm.departments = issueListSearchObject.departments;
                                 $scope.vm.projects = issueListSearchObject.projects;
-                                $scope.vm.registers = issueListSearchObject.registers;*/
+                                $scope.vm.registers = issueListSearchObject.registers;
 
                                 $scope.fn.getPageList(0, true);
                             } else {
@@ -377,6 +381,15 @@
 
                             return userIds;
                         })(),
+                        departmentIds : (function () {
+                            var departmentIds = [];
+
+                            angular.forEach($scope.vm.departments, function (department) {
+                                departmentIds.push(department.id);
+                            });
+
+                            return departmentIds;
+                        })(),
                         registerIds : (function () {
                             var registerIds = [];
 
diff --git a/src/main/webapp/scripts/app/issue/issueModify.controller.js b/src/main/webapp/scripts/app/issue/issueModify.controller.js
index deda875..e454587 100644
--- a/src/main/webapp/scripts/app/issue/issueModify.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueModify.controller.js
@@ -33,7 +33,7 @@
                     setFormByIssueTypeCustomFields : setFormByIssueTypeCustomFields,    //  �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� �엯�젰 �뤌�뿉�꽌 �궗�슜�븷 �닔 �엳寃� 媛�怨듯븳�떎.
                     setUseValueByIssueTypeCustomFields : setUseValueByIssueTypeCustomFields,    //  �씠�뒋�뿉�꽌 �궗�슜�옄媛� �꽑�깮�븳 �궗�슜�옄 �젙�쓽 �븘�뱶 媛믪쓣 �엯�젰 �뤌�뿉 �뀑�똿�븳�떎.
                     detail : detail,    //  �씠�뒋 �젙蹂� 議고쉶
-                    // removeManager : removeManager,  //  �떞�떦�옄 �궘�젣
+                    removeManager : removeManager,  //  �떞�떦�옄 �궘�젣
                     removeDepartment : removeDepartment,  //  �떞�떦遺��꽌 �궘�젣
                     removeUploadFile : removeUploadFile,    //  �듅�젙 �뙆�씪�쓣 �궘�젣
                     setIssueTypeTemplate : setIssueTypeTemplate,    //  �씠�뒋 �쑀�삎 �뀥�뵆由� �쟻�슜�븯湲�
@@ -161,9 +161,9 @@
                 }
 
                 //  �떞�떦�옄 �궘�젣
-                // function removeManager(index) {
-                //     $scope.vm.form.users.splice(index, 1);
-                // }
+                 function removeManager(index) {
+                     $scope.vm.form.users.splice(index, 1);
+                 }
 
                 // �떞�떦遺��꽌 �궘�젣
                 function removeDepartment(index) {
@@ -386,6 +386,19 @@
                         id : parameter.id,
                         title : $rootScope.preventXss($scope.vm.form.title),    //  �젣紐�
                         description : $rootScope.preventXss($scope.vm.form.description),   //  �궡�슜
+                        ispName : $scope.vm.ispName,
+                        ispCode : $scope.vm.ispCode,
+                        ispManager : $scope.vm.ispManager,
+                        ispTel : $scope.vm.ispTel,
+                        ispEmail : $scope.vm.ispEmail,
+                        ispMemo : $scope.vm.ispMemo,
+                        hostingName : $scope.vm.hostingName,
+                        hostingCode : $scope.vm.hostingCode,
+                        hostingManager : $scope.vm.hostingManager,
+                        hostingTel : $scope.vm.hostingTel,
+                        hostingEmail : $scope.vm.hostingEmail,
+                        hostingMemo : $scope.vm.hostingMemo,
+
                         projectId : (function () {   //  �봽濡쒖젥�듃 �븘�씠�뵒
                             var projectId = "";
 
@@ -430,6 +443,37 @@
 
                             return hostingId;
                         }),
+
+                        userIds : (function () {
+                            var userIds = [];
+
+                            angular.forEach($scope.vm.form.users, function (user) {
+                                userIds.push(user.id);
+                            });
+
+                            return userIds;
+                        })(),
+                        departmentIds : (function () {
+                            var departmentIds = [];
+
+                            angular.forEach($scope.vm.form.departments, function (department) {
+                                departmentIds.push(department.id);
+                            });
+
+                            return departmentIds;
+                        })(),
+
+                        attachedFileIds : (function () {
+                            var attachedFileIds = [];
+
+                            angular.forEach($scope.vm.form.attachedFiles, function (attachedFile) {
+                                if ($scope.vm.form.description.indexOf(attachedFile.path) !== -1) {
+                                    attachedFileIds.push(attachedFile.id);
+                                }
+                            });
+
+                            return attachedFileIds;
+                        })(),
 
                         issueCompanyFields : (function () {
                             var issueCompanyFields = [];
@@ -492,50 +536,7 @@
                             return issueHostingFields;
                         })(),
 
-                        ispName : $scope.vm.ispName,
-                        ispCode : $scope.vm.ispCode,
-                        ispManager : $scope.vm.ispManager,
-                        ispTel : $scope.vm.ispTel,
-                        ispEmail : $scope.vm.ispEmail,
-                        ispMemo : $scope.vm.ispMemo,
-
-                        hostingName : $scope.vm.hostingName,
-                        hostingCode : $scope.vm.hostingCode,
-                        hostingManager : $scope.vm.hostingManager,
-                        hostingTel : $scope.vm.hostingTel,
-                        hostingEmail : $scope.vm.hostingEmail,
-                        hostingMemo : $scope.vm.hostingMemo,
-
-                        userIds : (function () {
-                            var userIds = [];
-
-                            angular.forEach($scope.vm.form.users, function (user) {
-                                userIds.push(user.id);
-                            });
-
-                            return userIds;
-                        })(),
-                        departmentIds : (function () {
-                            var departmentIds = [];
-
-                            angular.forEach($scope.vm.form.departments, function (department) {
-                                departmentIds.push(department.id);
-                            });
-
-                            return departmentIds;
-                        })(),
                         removeFiles : $scope.vm.form.removeFiles,
-                        attachedFileIds : (function () {
-                            var attachedFileIds = [];
-
-                            angular.forEach($scope.vm.form.attachedFiles, function (attachedFile) {
-                                if ($scope.vm.form.description.indexOf(attachedFile.path) !== -1) {
-                                    attachedFileIds.push(attachedFile.id);
-                                }
-                            });
-
-                            return attachedFileIds;
-                        })(),
                         startCompleteDateRange : $scope.vm.form.startCompleteDateRange,
 
                         issueCustomFields : (function () {    //  �씠�뒋�뿉�꽌 �궗�슜�릺�뒗 �궗�슜�옄 �젙�쓽 �븘�뱶
diff --git a/src/main/webapp/scripts/app/project/projectAdd.controller.js b/src/main/webapp/scripts/app/project/projectAdd.controller.js
index aed7636..b1ba192 100644
--- a/src/main/webapp/scripts/app/project/projectAdd.controller.js
+++ b/src/main/webapp/scripts/app/project/projectAdd.controller.js
@@ -74,10 +74,6 @@
                         return true;
                     }
 
-                    if (!$rootScope.isDefined($scope.vm.form.startEndDateRange)) {
-                        return true;
-                    }
-
                     return false;
                 }
 
diff --git a/src/main/webapp/scripts/app/project/projectModify.controller.js b/src/main/webapp/scripts/app/project/projectModify.controller.js
index 3b22844..57cc6ce 100644
--- a/src/main/webapp/scripts/app/project/projectModify.controller.js
+++ b/src/main/webapp/scripts/app/project/projectModify.controller.js
@@ -100,15 +100,9 @@
                         return true;
                     }
 
-                    if ($scope.vm.form.startEndDateRange == "") {
-                        return true;
-                    }
-
                     if ($scope.vm.form.managers.length < 1) {
                         return true;
                     }
-
-
 
                     return false;
                 }
diff --git a/src/main/webapp/scripts/components/issueTableConfig/issueTableConfig.service.js b/src/main/webapp/scripts/components/issueTableConfig/issueTableConfig.service.js
index 45f7c99..9310243 100644
--- a/src/main/webapp/scripts/components/issueTableConfig/issueTableConfig.service.js
+++ b/src/main/webapp/scripts/components/issueTableConfig/issueTableConfig.service.js
@@ -17,6 +17,20 @@
                     $log.debug("�씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �벑濡� : ", response);
                     return response;
                 });
+            },
+
+            addRelation : function (conditions) {
+                return $http.post("issueTableConfig/relationAdd", conditions).then(function (response) {
+                    $log.debug("�뿰愿� �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �벑濡� : ", response);
+                    return response;
+                });
+            },
+
+            addDown : function (conditions) {
+                return $http.post("issueTableConfig/downAdd", conditions).then(function (response) {
+                    $log.debug("�븯�쐞 �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 �벑濡� : ", response);
+                    return response;
+                });
             }
         }
     }
diff --git a/src/main/webapp/scripts/main.js b/src/main/webapp/scripts/main.js
index 8b1694c..4e22f59 100644
--- a/src/main/webapp/scripts/main.js
+++ b/src/main/webapp/scripts/main.js
@@ -184,6 +184,8 @@
         'issueImportExcelController' : 'app/issue/issueImportExcel.controller',    //  �씠�뒋 �뿊�� ���웾 import
         'issueModifyStatusController' : 'app/issue/issueModifyStatus.controller',   //  �씠�뒋 �떎以� �긽�깭 蹂�寃� 而⑦듃濡ㅻ윭
         'issueAddTableConfigController' : 'app/issue/issueAddTableConfig.controller',   //  �씠�뒋 �뀒�씠釉� �꽕�젙 而⑦듃濡ㅻ윭
+        'issueAddRelationTableConfigController' : 'app/issue/issueAddRelationTableConfig.controller',   //  �씠�뒋 �뀒�씠釉� �꽕�젙 而⑦듃濡ㅻ윭
+        'issueAddDownTableConfigController' : 'app/issue/issueAddDownTableConfig.controller',   //  �씠�뒋 �뀒�씠釉� �꽕�젙 而⑦듃濡ㅻ윭
         'issueSendMailController' : 'app/issue/issueSendMail.controller',   //  �씠�뒋 �씠硫붿씪 諛쒖넚 而⑦듃濡ㅻ윭
         'issueVersionViewController' : 'app/issue/issueVersionView.controller', //  �씠�뒋 踰꾩쟾 �솗�씤 而⑦듃濡ㅻ윭
         'issueReservationController' : 'app/issue/issueReservation.controller', //  �씠�뒋 諛쒖깮 �삁�빟 而⑦듃濡ㅻ윭
diff --git a/src/main/webapp/views/issue/issueDetail.html b/src/main/webapp/views/issue/issueDetail.html
index 3fe8695..5385b12 100644
--- a/src/main/webapp/views/issue/issueDetail.html
+++ b/src/main/webapp/views/issue/issueDetail.html
@@ -376,36 +376,44 @@
                     </div>
                 </div>
 
+                    <!-- �궗�슜�옄 �젙�쓽 �븘�뱶 -->
+<!--                <div class="row">-->
+<!--                    <div class="col-md-4" ng-repeat="issueCustomField in vm.viewer.issueCustomFields">-->
+<!--                        <label class="issue-detail-label">{{::issueCustomField.customFieldVo.name}}</label>-->
 
-                <div class="row">
-                    <div class="col-md-4" ng-repeat="issueCustomField in vm.viewer.issueCustomFields">
-                        <label class="issue-detail-label">{{::issueCustomField.customFieldVo.name}}</label>
+<!--                        <div ng-switch on="issueCustomField.customFieldVo.customFieldType">-->
+<!--                            &lt;!&ndash; 湲곕낯 �엯�젰 &ndash;&gt;-->
+<!--                            <div ng-switch-when="INPUT" class="form-group">-->
+<!--                                &lt;!&ndash;    �씫湲� 紐⑤뱶   &ndash;&gt;-->
+<!--                                <span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span>-->
+<!--                                <span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>-->
+<!--                            </div>-->
 
-                        <div ng-switch on="issueCustomField.customFieldVo.customFieldType">
-                            <!-- 湲곕낯 �엯�젰 -->
-                            <div ng-switch-when="INPUT" class="form-group">
-                                <!--    �씫湲� 紐⑤뱶   -->
-                                <span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span>
-                                <span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
-                            </div>
+<!--                            &lt;!&ndash; �떒�씪 ���젆�듃 &ndash;&gt;-->
+<!--                            <div ng-switch-when="SINGLE_SELECT" class="form-group">-->
+<!--                                <span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span>-->
+<!--                                <span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>-->
+<!--                            </div>-->
 
-                            <!-- �떒�씪 ���젆�듃 -->
-                            <div ng-switch-when="SINGLE_SELECT" class="form-group">
-                                <span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span>
-                                <span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
-                            </div>
+<!--                            &lt;!&ndash; 硫��떚 ���젆�듃 &ndash;&gt;-->
+<!--                            <div ng-switch-when="MULTI_SELECT" class="form-group">-->
+<!--                                <span class="issue-detail-word-break"-->
+<!--                                      ng-repeat="useValue in issueCustomField.useValues">{{::useValue.value}}, </span>-->
+<!--                                <span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>-->
+<!--                            </div>-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                </div>-->
 
-                            <!-- 硫��떚 ���젆�듃 -->
-                            <div ng-switch-when="MULTI_SELECT" class="form-group">
-                                <span class="issue-detail-word-break"
-                                      ng-repeat="useValue in issueCustomField.useValues">{{::useValue.value}}, </span>
-                                <span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
-                            </div>
-                        </div>
+                <div class="row mt-30">
+                    <div class="col-md-10">
+                        <span class="info_font h3" translate="issue.relationIssue">�뿰愿� �씠�뒋</span>
+                    </div>
+                    <div class="col-md-1">
+                        <button class="btn btn-darkgrey offset-12" ng-click="fn.addRelationIssueTableConfig()" type="button"><span translate="issue.settingTableDisplay">�뀒�씠釉� �몴�떆 �꽕�젙</span></button>
                     </div>
                 </div>
 
-                <h6 class="todo-content-subheader mt-20" translate="issue.relationIssue">�뿰愿� �씪媛�</h6>
                 <!--    �뀒�씠釉� -->
                 <div class="mt-10 issue-detail-word-break width-100">
                     <js-table data="vm.viewer.issueRelationVos" table-configs="vm.relTableConfigs"
@@ -444,7 +452,15 @@
                     </div>
                 </div>
 
-                <h6 class="todo-content-subheader mt-20" translate="issue.downIssue">�븯�쐞 �씪媛�</h6>
+                <div class="row mt-30">
+                    <div class="col-md-10">
+                        <span class="info_font h3" translate="issue.downIssue">�븯�쐞 �씠�뒋</span>
+                    </div>
+                    <div class="col-md-1">
+                        <button class="btn btn-darkgrey offset-12"  ng-click="fn.addDownIssueTableConfig()" type="button"><span translate="issue.settingTableDisplay">�뀒�씠釉� �몴�떆 �꽕�젙</span></button>
+                    </div>
+                </div>
+
                 <!--    �뀒�씠釉� -->
                 <div class="mt-10 issue-detail-word-break width-100">
                     <js-table data="vm.viewer.issueDownVos" table-configs="vm.downTableConfigs"
@@ -472,7 +488,7 @@
                     </div>
                 </div>
 
-                <h6 class="todo-content-subheader mt-20" translate="common.content">�궡�슜</h6>
+                <h6 class="todo-content-subheader mt-30" translate="common.content">�궡�슜</h6>
                 <div class="box mt-10 issue-detail-word-break width-100" >
                     <div ng-bind-html="$root.$sce.trustAsHtml(vm.viewer.description)"></div>
                     <span class="fc-grey" ng-if="!$root.isDefined(vm.viewer.description)" translate="common.noContent">
@@ -664,6 +680,9 @@
                                          translate="common.noRecord">
                                         湲곕줉�씠 �뾾�뒿�땲�떎.
                                     </div>
+                                    <div>
+                                        {{vm.viewer.issueHistoryVos}}
+                                    </div>
 
                                     <div class="activity-item"
                                          ng-repeat="issueHistory in vm.viewer.issueHistoryVos">
diff --git a/src/main/webapp/views/issue/issueDownTableConfig.html b/src/main/webapp/views/issue/issueDownTableConfig.html
new file mode 100644
index 0000000..81506ba
--- /dev/null
+++ b/src/main/webapp/views/issue/issueDownTableConfig.html
@@ -0,0 +1,95 @@
+<div class="formModal">
+    <div class="modal-header faded smaller">
+        <div class="modal-title">
+            <strong translate="issue.setIssueTableDisplay">�씠�뒋 �뀒�씠釉� �몴�떆 �꽕�젙</strong>
+        </div>
+        <button aria-label="Close" class="close" type="button" ng-click="fn.cancel()">
+            <span aria-hidden="true"> &times;</span>
+        </button>
+    </div>
+
+    <div class="modal-body">
+        <form role="form" name="issueTableConfigForm">
+            <table class="table table-dash table-lightborder table-layout-fixed">
+                <thead>
+                <tr>
+                    <th class="text-center width-80-p">
+                        <span translate="issue.columnName">而щ읆紐�</span>
+                    </th>
+                    <th class="text-center width-80-p">
+                        <span translate="issue.area">�꼻�씠</span>
+                    </th>
+                    <th class="text-center width-80-p">
+                        <span translate="issue.displayed">�몴�떆 �뿬遺�</span>
+                    </th>
+                    <th class="text-center width-40-p">
+                        <span translate="issue.sequence">�닚�꽌</span>
+                    </th>
+                </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 ng-repeat="issueTableConfig in vm.issueTableConfigs">
+                    <td class="text-center">
+                        <span class="bold">{{issueTableConfig.name}}</span>
+                    </td>
+                    <td class="text-center">
+                        <select class="form-control" ng-model="issueTableConfig.width">
+                            <option>�꽑�깮�븯�꽭�슂.</option>
+                            <option value="width-20-p">20px</option>
+                            <option value="width-30-p">30px</option>
+                            <option value="width-40-p">40px</option>
+                            <option value="width-50-p">50px</option>
+                            <option value="width-60-p">60px</option>
+                            <option value="width-70-p">70px</option>
+                            <option value="width-80-p">80px</option>
+                            <option value="width-90-p">90px</option>
+                            <option value="width-100-p">100px</option>
+                            <option value="width-110-p">110px</option>
+                            <option value="width-120-p">120px</option>
+                            <option value="width-130-p">130px</option>
+                            <option value="width-140-p">140px</option>
+                            <option value="width-150-p">150px</option>
+                            <option value="width-160-p">160px</option>
+                            <option value="width-170-p">170px</option>
+                            <option value="width-180-p">180px</option>
+                            <option value="width-190-p">190px</option>
+                            <option value="width-200-p">200px</option>
+                            <option value="width-220-p">220px</option>
+                            <option value="width-240-p">240px</option>
+                            <option value="width-260-p">260px</option>
+                            <option value="width-280-p">280px</option>
+                            <option value="width-300-p">300px</option>
+                            <option value="width-20">20%</option>
+                            <option value="width-30">30%</option>
+                            <option value="width-40">40%</option>
+                            <option value="width-50">50%</option>
+                        </select>
+                    </td>
+                    <td class="text-center">
+                        <label class='switch'><input type='checkbox' ng-model='issueTableConfig.display'><span class='slider round'></span></label>
+                    </td>
+                    <td class="text-center">
+                        <input type="text" class="form-control" ng-model="issueTableConfig.position" maxlength="2" input-regex="[^0-9]">
+                    </td>
+                </tr>
+                </tbody>
+            </table>
+        </form>
+    </div>
+
+    <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-click="fn.formSubmit()"><span translate="common.save">���옣</span>
+        </button>
+    </div>
+</div>
diff --git a/src/main/webapp/views/issue/issueListNormal.html b/src/main/webapp/views/issue/issueListNormal.html
index b52df46..a85a020 100644
--- a/src/main/webapp/views/issue/issueListNormal.html
+++ b/src/main/webapp/views/issue/issueListNormal.html
@@ -186,12 +186,12 @@
                                             <div class="col-lg-3">
                                                 <div class="form-group">
                                                     <label> <span translate="common.assigneeTeam">�떞�떦遺��꽌</span></label>
-                                                    <js-autocomplete-multi data-input-name="users"
-                                                                           selected-model="vm.users"
-                                                                           search="vm.userName"
+                                                    <js-autocomplete-multi data-input-name="departments"
+                                                                           selected-model="vm.departments"
+                                                                           search="vm.departmentName"
                                                                            input-disabled="false"
-                                                                           source="fn.getUserList(vm.userName, vm.users)"
-                                                                           translation-texts="{ count : 'common.userNum', empty : 'common.emptyUser' }"
+                                                                           source="fn.getUserDepartmentList(vm.departmentName, vm.departments)"
+                                                                           translation-texts="{ count : 'common.userNum', empty : 'common.emptyDepartment' }"
                                                                            extra-settings="{ displayProp : 'byName' , idProp : 'id', widthable : false, width : '', imageable : true, imagePathProp : 'profile', type : 'user', maxlength : 100 }">
                                                     </js-autocomplete-multi>
                                                 </div>
diff --git a/src/main/webapp/views/issue/issueRelationTableConfig.html b/src/main/webapp/views/issue/issueRelationTableConfig.html
new file mode 100644
index 0000000..81506ba
--- /dev/null
+++ b/src/main/webapp/views/issue/issueRelationTableConfig.html
@@ -0,0 +1,95 @@
+<div class="formModal">
+    <div class="modal-header faded smaller">
+        <div class="modal-title">
+            <strong translate="issue.setIssueTableDisplay">�씠�뒋 �뀒�씠釉� �몴�떆 �꽕�젙</strong>
+        </div>
+        <button aria-label="Close" class="close" type="button" ng-click="fn.cancel()">
+            <span aria-hidden="true"> &times;</span>
+        </button>
+    </div>
+
+    <div class="modal-body">
+        <form role="form" name="issueTableConfigForm">
+            <table class="table table-dash table-lightborder table-layout-fixed">
+                <thead>
+                <tr>
+                    <th class="text-center width-80-p">
+                        <span translate="issue.columnName">而щ읆紐�</span>
+                    </th>
+                    <th class="text-center width-80-p">
+                        <span translate="issue.area">�꼻�씠</span>
+                    </th>
+                    <th class="text-center width-80-p">
+                        <span translate="issue.displayed">�몴�떆 �뿬遺�</span>
+                    </th>
+                    <th class="text-center width-40-p">
+                        <span translate="issue.sequence">�닚�꽌</span>
+                    </th>
+                </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 ng-repeat="issueTableConfig in vm.issueTableConfigs">
+                    <td class="text-center">
+                        <span class="bold">{{issueTableConfig.name}}</span>
+                    </td>
+                    <td class="text-center">
+                        <select class="form-control" ng-model="issueTableConfig.width">
+                            <option>�꽑�깮�븯�꽭�슂.</option>
+                            <option value="width-20-p">20px</option>
+                            <option value="width-30-p">30px</option>
+                            <option value="width-40-p">40px</option>
+                            <option value="width-50-p">50px</option>
+                            <option value="width-60-p">60px</option>
+                            <option value="width-70-p">70px</option>
+                            <option value="width-80-p">80px</option>
+                            <option value="width-90-p">90px</option>
+                            <option value="width-100-p">100px</option>
+                            <option value="width-110-p">110px</option>
+                            <option value="width-120-p">120px</option>
+                            <option value="width-130-p">130px</option>
+                            <option value="width-140-p">140px</option>
+                            <option value="width-150-p">150px</option>
+                            <option value="width-160-p">160px</option>
+                            <option value="width-170-p">170px</option>
+                            <option value="width-180-p">180px</option>
+                            <option value="width-190-p">190px</option>
+                            <option value="width-200-p">200px</option>
+                            <option value="width-220-p">220px</option>
+                            <option value="width-240-p">240px</option>
+                            <option value="width-260-p">260px</option>
+                            <option value="width-280-p">280px</option>
+                            <option value="width-300-p">300px</option>
+                            <option value="width-20">20%</option>
+                            <option value="width-30">30%</option>
+                            <option value="width-40">40%</option>
+                            <option value="width-50">50%</option>
+                        </select>
+                    </td>
+                    <td class="text-center">
+                        <label class='switch'><input type='checkbox' ng-model='issueTableConfig.display'><span class='slider round'></span></label>
+                    </td>
+                    <td class="text-center">
+                        <input type="text" class="form-control" ng-model="issueTableConfig.position" maxlength="2" input-regex="[^0-9]">
+                    </td>
+                </tr>
+                </tbody>
+            </table>
+        </form>
+    </div>
+
+    <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-click="fn.formSubmit()"><span translate="common.save">���옣</span>
+        </button>
+    </div>
+</div>
diff --git a/src/main/webapp/views/project/projectAdd.html b/src/main/webapp/views/project/projectAdd.html
index 4b51bed..82b6cdc 100644
--- a/src/main/webapp/views/project/projectAdd.html
+++ b/src/main/webapp/views/project/projectAdd.html
@@ -68,13 +68,14 @@
                 <div class="col-lg-6">
                     <div class="form-group">
                         <label><span translate="common.period">湲곌컙</span></label>
-                        <input type="text"
+                        <input tabindex="-1"
+                               type="text"
                                class="form-control input-readonly"
+                               placeholder="{{'issue.clickToSelectDate' | translate}}"
                                ng-model="vm.form.startEndDateRange"
                                modal-form-auto-scroll
+                               date-format="YYYY-MM-DD"
                                parent-el="'#createdWidget'"
-                               range-type="date"
-                               onfocus="this.blur()"
                                date-range-picker>
                         <div class="row">
                             <div class="col-xs-12">
diff --git a/src/main/webapp/views/project/projectModify.html b/src/main/webapp/views/project/projectModify.html
index e7842a5..f5d03ce 100644
--- a/src/main/webapp/views/project/projectModify.html
+++ b/src/main/webapp/views/project/projectModify.html
@@ -34,14 +34,14 @@
                 <div class="col-lg-6">
                     <div class="form-group">
                         <label for="projectModifyForm2"><span translate="common.period">湲곌컙</span></label>
-                        <input id="projectModifyForm2"
+                        <input tabindex="-1"
                                type="text"
                                class="form-control input-readonly"
+                               placeholder="{{'issue.clickToSelectDate' | translate}}"
                                ng-model="vm.form.startEndDateRange"
                                modal-form-auto-scroll
+                               date-format="YYYY-MM-DD"
                                parent-el="'#createdWidget'"
-                               range-type="date"
-                               onfocus="this.blur()"
                                date-range-picker>
                         <div class="row">
                             <div class="col-xs-12">

--
Gitblit v1.8.0