From db5bbe29f9f724dcafd87b33cc1efd150ed0f489 Mon Sep 17 00:00:00 2001
From: jhjang <jhjang@maprex.co.kr>
Date: 월, 25 10월 2021 14:17:50 +0900
Subject: [PATCH] 하위/연관 일감 검색 view추가

---
 src/main/webapp/scripts/app/issue/issueAddTreeTableConfig.controller.js |  186 ++++++
 src/main/webapp/views/issue/issueAddTreeTableConfig.html                |   95 +++
 src/main/webapp/scripts/app/issue/issue.js                              |    4 
 src/main/webapp/views/issue/issueListTree.html                          |  410 ++++++++++++++
 src/main/webapp/views/issue/issueList.html                              |    7 
 src/main/webapp/i18n/ko/global.json                                     |    1 
 src/main/webapp/assets/styles/main.css                                  |   36 +
 src/main/webapp/scripts/app/issue/issueListTree.controller.js           |  880 +++++++++++++++++++++++++++++++
 src/main/webapp/scripts/main.js                                         |    2 
 9 files changed, 1,619 insertions(+), 2 deletions(-)

diff --git a/src/main/webapp/assets/styles/main.css b/src/main/webapp/assets/styles/main.css
index c336ec9..5db069e 100644
--- a/src/main/webapp/assets/styles/main.css
+++ b/src/main/webapp/assets/styles/main.css
@@ -30174,3 +30174,39 @@
 }
 
 /* 媛꾪듃李⑦듃 end */
+
+/* �듃由ш뎄議� �엫�떆 */
+
+.tree-container {
+    background-color: #f1f0f0;
+    border: 1px solid #c2c2c2;
+    padding: 20px;
+}
+
+
+.tree-body {
+}
+
+.tree{
+    margin-top: 5px;
+}
+
+.tree{
+    list-style: none; /* 湲곕낯 由ъ뒪�듃 �뒪���씪 �젣嫄� */
+    padding-left: 0px;
+}
+
+.tree ul {
+    list-style: none; /* 湲곕낯 由ъ뒪�듃 �뒪���씪 �젣嫄� */
+}
+
+.tree li {
+    padding-top: 5px;
+    margin-bottom: 5px;
+    list-style-position: inside;
+    padding-left: 10px;
+}
+
+.tree li:before{
+    content: '�뵒 '
+}
diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json
index fbf9907..f5c23a1 100644
--- a/src/main/webapp/i18n/ko/global.json
+++ b/src/main/webapp/i18n/ko/global.json
@@ -275,6 +275,7 @@
         "relationIssueType6" : "�떎�쓬 �씪媛먯쓣 �슦�꽑 吏꾪뻾",
         "updateIssueUser" : "�씪媛� �떞�떦�옄 蹂�寃�",
         "normalList" : "�씪媛� 紐⑸줉",
+        "treeList" : "�븯�쐞/�뿰愿� �씪媛� 寃��깋",
         "timeLine" : "���엫 �씪�씤"
     },
     "project": {
diff --git a/src/main/webapp/scripts/app/issue/issue.js b/src/main/webapp/scripts/app/issue/issue.js
index 7725198..806e9cd 100644
--- a/src/main/webapp/scripts/app/issue/issue.js
+++ b/src/main/webapp/scripts/app/issue/issue.js
@@ -33,11 +33,11 @@
                         loadController: ["$q", function ($q) {
                             var deferred = $q.defer();
                             require([
-                                'issueListTimelineController', 'issueManagerController', 'issueListController', 'issueAddController', 'issueModifyController', 'issueDetailController', 'issueImportExcelController',
+                                'issueListTreeController','issueListTimelineController', 'issueManagerController', 'issueListController', 'issueAddController', 'issueModifyController', 'issueDetailController', 'issueImportExcelController',
                                 'chartLoader', 'jsTable', 'tableColumnGenerator', 'modalFormAutoScroll', 'summerNote', 'summerNote-ko-KR', 'fullScroll', 'workflowService', 'priorityService', 'issueSearchService', 'issueTableConfigService', 'inputRegex',
                                 'severityService', 'issueTypeService', 'issueTypeCustomFieldService', 'issueService', 'issueStatusService', 'issueUserService', 'issueModifyUserController', 'customFieldService', 'issueSearchFieldKeyViewElement',
                                 'issueSearchCustomFieldViewElement', 'tableUserImage', 'fullScroll', 'issueCommentService', 'detectIssueEditor', 'formSubmit', 'issueModifyStatusController', 'jsShortCut',
-                                'issueAddTableConfigController', 'domAppend', 'issueDetailImagePreview', 'issueSendMailController', 'htmlDiff', 'issueVersionViewController', 'issueVersionService',
+                                'issueAddTableConfigController','issueAddTreeTableConfigController', 'domAppend', 'issueDetailImagePreview', 'issueSendMailController', 'htmlDiff', 'issueVersionViewController', 'issueVersionService',
                                 'jsHtmlDiff', 'issueReservationController', 'issueReservationService', 'issueVersionService', 'issueStatusAutoFocus', 'issueRelationService'
                             ], function () {
                                 deferred.resolve();
diff --git a/src/main/webapp/scripts/app/issue/issueAddTreeTableConfig.controller.js b/src/main/webapp/scripts/app/issue/issueAddTreeTableConfig.controller.js
new file mode 100644
index 0000000..65614d4
--- /dev/null
+++ b/src/main/webapp/scripts/app/issue/issueAddTreeTableConfig.controller.js
@@ -0,0 +1,186 @@
+/**
+ * Created by wisestone on 2019-02-07.
+ */
+'use strict';
+
+define([
+        'app',
+        'angular'
+    ],
+    function (app, angular) {
+        app.controller('issueAddTreeTableConfigController', ['$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.add($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/issueListTree.controller.js b/src/main/webapp/scripts/app/issue/issueListTree.controller.js
new file mode 100644
index 0000000..9e94ec7
--- /dev/null
+++ b/src/main/webapp/scripts/app/issue/issueListTree.controller.js
@@ -0,0 +1,880 @@
+/**
+ * Created by wisestone on 2017-12-21.
+ */
+'use strict';
+
+define([
+        'app',
+        'angular'
+    ],
+    function (app, angular) {
+        app.controller('issueListTreeController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$tableProvider', '$state', '$uibModal', '$q',
+            '$controller', '$injector', 'SweetAlert', 'Issue', 'IssueType', 'Priority', 'Severity', 'IssueStatus', 'CustomField', 'IssueSearch', 'IssueTableConfig', '$timeout', '$filter',
+            function ($scope, $rootScope, $log, $resourceProvider, $tableProvider, $state, $uibModal, $q, $controller, $injector, SweetAlert, Issue, IssueType, Priority, Severity, IssueStatus, CustomField,
+                      IssueSearch, IssueTableConfig, $timeout, $filter) {
+
+                //  �븿�닔
+                $scope.fn = {
+                    initSearch : initSearch,    //  寃��깋 珥덇린�솕
+                    getPageList : getPageList,  //  紐⑸줉 議고쉶
+                    changePageRowCount : changePageRowCount,    //  �럹�씠吏� 蹂�寃�
+                    makeTableConfigs : makeTableConfigs, //  �뀒�씠釉� �꽕�젙
+                    setTableColumn : setTableColumn,    //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
+                    add : add,   //  �씠�뒋 �깮�꽦
+                    modify : modify,    //  �씠�뒋 �닔�젙
+                    modifyMultiIssueStatus : modifyMultiIssueStatus,    //  �씠�뒋 �떎以� �긽�깭 蹂�寃�
+                    removes : removes,  //  �씠�뒋 �궘�젣
+                    addIssueTableConfig : addIssueTableConfig,    //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙
+                    listView : listView,    //  紐⑸줉 �솕硫댁쑝濡� 蹂�寃�
+                    importExcel : importExcel,  //  �뿊�� import 湲곕뒫 �뙘�뾽 �샇異�
+                    getIssueTypes : getIssueTypes,  //  �씠�뒋 �쑀�삎 紐⑸줉�쓣 媛��졇�삩�떎.
+                    getPriorities : getPriorities,  //  �슦�꽑�닚�쐞 紐⑸줉�쓣 媛��졇�삩�떎.
+                    getSeverities : getSeverities,  //  以묒슂�룄 紐⑸줉�쓣 媛��졇�삩�떎.
+                    getIssueStatuses : getIssueStatuses,    //  �씠�뒋 �긽�깭 紐⑸줉�쓣 媛��졇�삩�떎.
+                    getCustomFields : getCustomFields,  //  �궗�슜�옄 �젙�쓽 �븘�뱶 紐⑸줉�쓣 媛��졇�삩�떎.
+                    makeVmSearchObject : makeVmSearchObject, //  寃��깋 議곌굔�쓣 湲곗뼲�븳�떎.
+                    getVmSearchObject : getVmSearchObject,  //  ���옣�븳 寃��깋 議곌굔�쓣 媛��졇���꽌 vm �뿉 �뀑�똿�븳�떎.
+                    makeSearchConditions : makeSearchConditions,    //  寃��깋 議곌굔�쓣 留뚮뱺�떎.
+                    getIssueTableConfigs : getIssueTableConfigs,  //  �궗�슜�옄 �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 媛믪쓣 媛��졇���꽌 �쟻�슜�븳�떎.
+                    startExecute : startExecute //  而⑦듃濡� 濡쒕뵫�떆 泥섏쓬�쑝濡� �떆�옉�릺�뒗 �븿�닔
+                };
+
+                //  蹂��닔
+                $scope.vm = {
+                    search : {
+                        title : "", //  �젣紐�
+                        description : "",   //  �궡�슜
+                        combinationIssueNumber : "",   //  �씠�뒋 踰덊샇
+                        projectType : "BTS_PROJECT",    //  �봽濡쒖젥�듃 �쑀�삎
+                        registerDateRange : "", //  �벑濡앹씪 湲곌컙 寃��깋
+                        startDateRange : "",    //  �떆�옉�씪 湲곌컙 寃��깋
+                        completeDateRange : "", //  �셿猷뚯씪 湲곌컙 寃��깋
+                        severityIds : [],   //  以묒슂�룄 寃��깋
+                        priorityIds : [],   //  �슦�꽑�닚�쐞 寃��깋
+                        issueStatusIds : [],    //  �씠�뒋 �긽�깭 寃��깋
+                        issueTypeIds : []   //  �씠�뒋 �쑀�삎 寃��깋
+                    },
+                    searchView : false, //  �긽�꽭 寃��깋 議곌굔 �몴�떆 �뿬遺�
+                    detailView : false, //  �긽�꽭 紐⑤뱶 蹂�寃� 媛�
+                    page : {
+                        selectedPage : 0,
+                        selectedPageRowCount : String(10)
+                    },
+                    tableConfigs : [],  //  �뀒�씠釉� �뀑�똿 �젙蹂�
+                    responseData : {
+                        data : []
+                    },
+                    projectName : "",   //  �봽濡쒖젥�듃 寃��깋
+                    userName : "",  //  �떞�떦�옄 寃��깋
+                    registerName : "",  //  �벑濡앹옄 寃��깋
+                    projects : [],  //  �봽濡쒖젥�듃
+                    issueStatuses : [], //  �씠�뒋 �긽�깭
+                    issueTypes : [],    //  �씠�뒋 �쑀�삎
+                    priorities : [],    //  �슦�꽑 �닚�쐞
+                    severities : [],    //  以묒슂�룄
+                    users : [], //  �떞�떦�옄
+                    registers : [], //  �벑濡앹옄
+                    customFields : [],  //  �궗�슜�옄 �젙�쓽 �븘�뱶
+                    issueTableConfigs : []  //  �씠�뒋 �뀒�씠釉� �꽕�젙
+                };
+
+                //  �뀒�씠釉� �씠踰ㅽ듃
+                $scope.tableEvent = {
+                    changeDetailView : changeDetailView    //  �긽�꽭 �솕硫댁쑝濡� 蹂�寃�
+                };
+
+                angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
+
+                //  �씠�뒋 紐⑸줉 �뜲�씠�꽣 媛깆떊
+                $scope.$on("getIssueList", function () {
+                    $scope.fn.getPageList($scope.vm.page.selectedPage - 1);
+                });
+
+                //  �씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂� 媛깆떊
+                $scope.$on("getIssueTableConfigs", function () {
+                    $scope.fn.startExecute();
+                });
+
+                //  寃��깋 議곌굔�쓣 湲곗뼲�븳�떎. - �쟻�슜 蹂대쪟
+                function makeVmSearchObject() {
+                    var content = {
+                        conditions : JSON.stringify({
+                            search : $scope.vm.search,
+                            projects : $scope.vm.projects,
+                            users : $scope.vm.users,
+                            registers : $scope.vm.registers
+                        })
+                    };
+
+                    IssueSearch.add($resourceProvider.getContent(content,
+                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
+
+                        if (result.data.message.status === "success") {
+
+                        }
+                        else {
+                            SweetAlert.error($filter("translate")("issue.failedToSaveFieldConditions"), result.data.message.message); // 寃��깋 �븘�뱶 議곌굔 ���옣 �떎�뙣
+                        }
+                    });
+                }
+
+                //  �꽌踰꾩뿉 ���옣�븳 �씠�뒋 寃��깋 議곌굔�쓣 媛��졇�삩�떎.
+                function getVmSearchObject() {
+                    IssueSearch.detail($resourceProvider.getContent({}, $resourceProvider.getPageContent(0, 0))).then(function (result) {
+
+                        if (result.data.message.status === "success") {
+                            if ($rootScope.isDefined(result.data.data)) {
+                                var issueListSearchObject = JSON.parse(result.data.data);
+                                //  �씠�뒋 踰덊샇留� �쟻�슜�븳�떎. - �궘�젣�떆 泥섎━諛⑸쾿�븣臾몄뿉 �떎瑜� �냽�꽦�� �쟻�슜 蹂대쪟
+                                $scope.vm.search = issueListSearchObject.search;
+                                /*$scope.vm.users = issueListSearchObject.users;
+                                $scope.vm.projects = issueListSearchObject.projects;
+                                $scope.vm.registers = issueListSearchObject.registers;*/
+
+                                $scope.fn.getPageList(0, true);
+                            } else {
+                                $scope.fn.getPageList(0);
+                            }
+                        }
+                        else {
+                            SweetAlert.error($filter("translate")("issue.failedToGetSearchFieldCondition"), result.data.message.message); // 寃��깋 �븘�뱶 議곌굔 媛��졇�삤湲� �떎�뙣
+                        }
+                    });
+                }
+
+                //  �긽�꽭 �솕硫댁쑝濡� 蹂�寃쏀븳�떎.
+                function changeDetailView(id) {
+                    $scope.vm.tableConfigs = [];
+                    $scope.vm.detailView = true;
+
+                    $scope.fn.makeTableConfigs();
+
+                    //  chrome �뿉�꽌 留덉슦�뒪 �뼚�궃嫄� 媛먯� 紐삵빐�꽌 �씠踰ㅽ듃 異붽�.
+                    $(".full-height-scroll").trigger("mouseleave");
+                    //  �뀒�씠釉붿쓣 �떎�떆 洹몃┫�닔 �엳寃� �뜲�씠�꽣 諛붿씤�뵫�쓣 �떎�떆�븳�떎.
+                    var temp = angular.copy($scope.vm.responseData.data);
+                    $scope.vm.responseData.data = angular.copy(temp);
+                    //  �쁽�옱 �긽�꽭�솕硫댁쑝濡� 蹂대젮怨좏븯�뒗 �씠�뒋 id瑜� 湲곗뼲�븳�떎.
+                    $rootScope.currentDetailIssueId = id;
+                    //  �씠�뒋 �긽�꽭 �솕硫� �슂泥�
+                    $rootScope.$broadcast("getIssueDetail", {
+                        id : id
+                    });
+                }
+
+                //  紐⑸줉 �솕硫댁쑝濡� 蹂�寃쏀븳�떎.
+                function listView() {
+                    $scope.vm.detailView = false;
+                    //  �씠�뒋 �뀒�씠釉� �꽕�젙
+                    $scope.fn.makeTableConfigs();
+                    var temp = angular.copy($scope.vm.responseData.data);
+                    $scope.vm.responseData.data = angular.copy(temp);
+                    //  留덉�留됱쑝濡� 蹂닿퀬�엳�뜕 �씠�뒋 id瑜� 珥덇린�솕�븳�떎.
+                    $rootScope.currentDetailIssueId = null;
+                }
+
+                //  �씠�뒋 �뀒�씠釉� �꽕�젙
+                function makeTableConfigs() {
+                    $scope.vm.tableConfigs = [];
+
+                    $scope.vm.tableConfigs.push($tableProvider.config()
+                        .setDType("checkbox")
+                        .setHWidth("width-20-p")
+                        .setDAlign("text-center"));
+
+                    //  �긽�꽭�삎 �씪�븣�븣
+                   if ($scope.vm.detailView) {
+                        $scope.vm.tableConfigs.push($tableProvider.config()
+                            .setHName("issue.issueTitle")
+                            .setDName("title")
+                            .setDType("renderer")
+                            .setHWidth("width-100 bold")
+                            .setDRenderer("ISSUE_DETAIL_FLOATING"));
+                    }
+                    else {
+                       $scope.vm.tableConfigs.push($tableProvider.config()
+                           .setHName("issue.issueTitle")
+                           .setDName("title")
+                           .setDType("renderer")
+                           .setHWidth("bold")
+                           .setDRenderer("ISSUE_DETAIL_FLOATING"));
+
+                        angular.forEach($scope.vm.issueTableConfigs, function (issueTableConfig) {
+                            //  �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎.
+                            if (issueTableConfig.display) {
+                                //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
+                                $scope.fn.setTableColumn(issueTableConfig);
+                            }
+                        });
+                    }
+                }
+
+                //  �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎.
+                function setTableColumn(issueTableConfig) {
+
+                    //  �씪諛� 而щ읆
+                    switch(issueTableConfig.key) {
+                        case "PRIORITY" :   //  �슦�꽑�닚�쐞
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("common.priority")
+                                .setDName("priorityName")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("COMMON_PRIORITY"));
+                            break;
+                        case "SEVERITY" :   //  以묒슂�룄
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("common.importance")
+                                .setDName("severityName")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("COMMON_SEVERITY"));
+                            break;
+                        case "ISSUE_TYPE" : //  �씠�뒋 ���엯
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("issue.issueType")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDName("issueTypeName"));
+                            break;
+                        case "ASSIGNEE" :   //  �떞�떦�옄
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("common.assignee")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("ISSUE_USER"));
+                            break;
+                        case "REGISTER" :   //  �벑濡앹옄
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("common.register")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("REGISTER"));
+                            break;
+                        case "PERIOD" : //  湲곌컙
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("common.period")
+                                .setDType("renderer")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDRenderer("ISSUE_DUE_DATE"));
+                            break;
+                        case "MODIFY_DATE" : //  理쒓렐 蹂�寃쎌씪
+                            $scope.vm.tableConfigs.push($tableProvider.config()
+                                .setHName("common.lastChangeDate")
+                                .setHWidth("bold " + issueTableConfig.width)
+                                .setDAlign("text-center")
+                                .setDName("modifyDate"));
+                            break;
+                    }
+
+                    //  �궗�슜�옄 �젙�쓽 �븘�뱶 而щ읆
+                    if (issueTableConfig.key.indexOf("CUSTOM_FIELD_") !== -1) {
+                        //  留뚯빟 �씠�뒋 �뀒�씠釉� 而щ읆紐낆씠 �몴�떆�릺吏� �븡�쑝硫� �씠履쎌씠 臾몄젣
+                        for (var count in $scope.vm.customFields) {
+                            var customField = $scope.vm.customFields[count];
+
+                            if (customField.id === Number(issueTableConfig.key.substring(13))) {
+                                $scope.vm.tableConfigs.push($tableProvider.config()
+                                    .setHName(customField.name)
+                                    .setDType("renderer")
+                                    .setHWidth("bold " + issueTableConfig.width)
+                                    .setDAlign("text-center")
+                                    .setColumnHint(customField)
+                                    .setDRenderer("ISSUE_CUSTOM_FIELD_VALUE_VIEW"));
+                                break;
+                            }
+                        }
+                    }
+                }
+
+                //  寃��깋 �븘�뱶 珥덇린�솕
+                function initSearch() {
+                    $state.go($state.current, {}, {reload : true});
+                    /*IssueSearch.remove($resourceProvider.getContent({screen : "ISSUE_LIST"},
+                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
+
+                        if (result.data.message.status == "success") {
+                            $state.go($state.current, {}, {reload : true});
+                        }
+                        else {
+                            SweetAlert.swal("寃��깋 �븘�뱶 珥덇린�솕 �떎�뙣", result.data.message.message, "error");
+                        }
+                    });*/
+                }
+
+                //  �씠�뒋 寃��깋 議곌굔�쓣 留뚮뱺�떎.
+                function makeSearchConditions() {
+                    var conditions = {
+                        title : $scope.vm.search.title,
+                        description : $scope.vm.search.description,
+                        projectType : $scope.vm.search.projectType,
+                        combinationIssueNumber : $scope.vm.search.combinationIssueNumber.trim(),
+                        beginRegisterDate : "",
+                        endRegisterDate : "",
+                        beginStartDate : "",
+                        endStartDate : "",
+                        beginCompleteDate : "",
+                        endCompleteDate : "",
+                        projectIds : (function () {
+                            var projectIds = [];
+
+                            angular.forEach($scope.vm.projects, function (project) {
+                                projectIds.push(project.id);
+                            });
+
+                            return projectIds;
+                        })(),
+                        issueStatusIds : (function () {
+                            var issueStatusIds = [];
+
+                            angular.forEach($scope.vm.search.issueStatusIds, function (issueStatusId) {
+                                issueStatusIds.push(issueStatusId.fieldKey);
+                            });
+
+                            return issueStatusIds;
+                        })(),
+                        issueTypeIds : (function () {
+                            var issueTypeIds = [];
+
+                            angular.forEach($scope.vm.search.issueTypeIds, function (issueTypeId) {
+                                issueTypeIds.push(issueTypeId.fieldKey);
+                            });
+
+                            return issueTypeIds;
+                        })(),
+                        priorityIds : (function () {
+                            var priorityIds = [];
+
+                            angular.forEach($scope.vm.search.priorityIds, function (priorityId) {
+                                priorityIds.push(priorityId.fieldKey);
+                            });
+
+                            return priorityIds;
+                        })(),
+                        severityIds : (function () {
+                            var severityIds = [];
+
+                            angular.forEach($scope.vm.search.severityIds, function (severityId) {
+                                severityIds.push(severityId.fieldKey);
+                            });
+
+                            return severityIds;
+                        })(),
+                        userIds : (function () {
+                            var userIds = [];
+
+                            angular.forEach($scope.vm.users, function (user) {
+                                userIds.push(user.id);
+                            });
+
+                            return userIds;
+                        })(),
+                        registerIds : (function () {
+                            var registerIds = [];
+
+                            angular.forEach($scope.vm.registers, function (register) {
+                                registerIds.push(register.id);
+                            });
+
+                            return registerIds;
+                        })(),
+                        issueCustomFields : (function () {
+                            var issueCustomFields = [];
+
+                            angular.forEach($scope.vm.customFields, function (customField) {
+                                var useValues = [];
+
+                                if (angular.isArray(customField.useValues)) {
+                                    angular.forEach(customField.useValues, function (useValue) {
+                                        useValues.push(useValue.value);
+                                    });
+                                }
+                                else {
+                                    useValues.push(customField.useValues);
+                                }
+
+                                //  useValues 瑜� 諛곗뿴濡� 蹂��솚�븳�떎.
+                                var temp = angular.copy(customField);
+                                temp.useValues = useValues;
+                                issueCustomFields.push(temp);
+                            });
+
+                            return issueCustomFields;
+                        })()
+                    };
+
+                    //  �벑濡앹씪
+                    if ($rootScope.isDefined($scope.vm.search.registerDateRange)) {
+                        var registerDateRange = $scope.vm.search.registerDateRange.split("~");
+                        conditions.beginRegisterDate = registerDateRange[0].trim();
+                        conditions.endRegisterDate = registerDateRange[1].trim();
+                    }
+
+                    //  �떆�옉�씪
+                    if ($rootScope.isDefined($scope.vm.search.startDateRange)) {
+                        var startDateRange = $scope.vm.search.startDateRange.split("~");
+                        conditions.beginStartDate = startDateRange[0].trim();
+                        conditions.endStartDate = startDateRange[1].trim();
+                    }
+                    //  醫낅즺�씪
+                    if ($rootScope.isDefined($scope.vm.search.completeDateRange)) {
+                        var completeDateRange = $scope.vm.search.completeDateRange.split("~");
+                        conditions.beginCompleteDate = completeDateRange[0].trim();
+                        conditions.endCompleteDate = completeDateRange[1].trim();
+                    }
+
+                    return conditions;
+                }
+
+                //  �씠�뒋 紐⑸줉�쓣 議고쉶�븳�떎.
+                function getPageList(selectedPage, detail = false) {
+                    if (selectedPage < 0) {
+                        selectedPage = 0;
+                    }
+                    //  �쁽�옱 �럹�씠吏� �젙蹂�
+                    var currentPage = 0;
+
+                    //  荑좏궎�뿉 �꽑�깮�븳 �럹�씠吏� �젙蹂닿� �뾾�쑝硫� 湲곕낯 �럹�씠吏� �젙蹂� 0 �쓣 ���옣
+                    if (angular.isUndefined(selectedPage) || selectedPage === "") {
+                        currentPage = $scope.vm.page.selectedPage;
+                    }
+                    else {
+                        currentPage = selectedPage;
+                    }
+
+
+                    //  寃��깋 議곌굔�쓣 ���옣�븳�떎.
+                    //$scope.fn.makeVmSearchObject();
+
+
+                    // �쁽�옱 �꽑�깮�맂 �봽濡쒖젥�듃瑜� 寃��깋 湲곕낯�쑝濡� 異붽�
+                    if ($rootScope.workProject != null && $rootScope.workProject.id > -1) {
+                        var find = findProjectSearch($rootScope.workProject.id);
+                        if (!find) {
+                            $scope.vm.projects.push($rootScope.workProject);
+                        }
+                    }
+
+                    //  �씠�뒋 寃��깋 議곌굔�쓣 留뚮뱺�떎.
+                    var conditions = $scope.fn.makeSearchConditions();
+
+                    Issue.find($resourceProvider.getContent(conditions,
+                        $resourceProvider.getPageContent(currentPage, $scope.vm.page.selectedPageRowCount))).then(function (result) {
+
+                        if (result.data.message.status === "success") {
+                            $scope.vm.page.selectedPage = currentPage + 1;
+                            $scope.vm.responseData = result.data;
+                            if (detail) {
+                                changeDetailView(result.data.data[0].id);
+                            }
+                        }
+                        else {
+                            SweetAlert.error($filter("translate")("issue.failedIssueLookup"), result.data.message.message); // �씠�뒋 議고쉶 �떎�뙣
+                        }
+                    });
+                }
+
+                // 寃��깋議곌굔�뿉�꽌 �빐�떦 �봽濡쒖젥�듃 李얘린
+                function findProjectSearch(projectId) {
+                    var projects = $scope.vm.projects;
+                    var find = false;
+
+                    for (let i = 0; i < projects.length; i++) {
+                        if (projects[i].id == projectId) {
+                            find = true;
+                            break;
+                        }
+                    }
+                    return find;
+                }
+
+                //  �럹�씠吏� 蹂�寃�
+                function changePageRowCount() {
+                    $scope.fn.getPageList(0);
+                }
+
+                //  �뿊�� import �뙘�뾽 �샇異�
+                function importExcel() {
+                    $uibModal.open({
+                        templateUrl : 'views/issue/issueExcelImport.html',
+                        size : "lg",
+                        controller : 'issueImportExcelController',
+                        backdrop : 'static'
+                    });
+                }
+
+                //  �씠�뒋 �깮�꽦 �뙘�뾽 �샇異�
+                function add() {
+                    $uibModal.open({
+                        templateUrl : 'views/issue/issueAdd.html',
+                        size : "lg",
+                        controller : 'issueAddController',
+                        backdrop : 'static'
+                    });
+                }
+
+                //  �씠�뒋 �떎以� �긽�깭 蹂�寃�
+                function modifyMultiIssueStatus() {
+                    var issueIds = [];
+
+                    angular.forEach($scope.vm.responseData.data, function (data) {
+                        if (data.checked) {
+                            issueIds.push(data.id);
+                        }
+                    });
+
+                    if (issueIds.length < 1) {
+                        SweetAlert.warning($filter("translate")("issue.selectionCheck"), $filter("translate")("issue.selectIssueToChangeStatus")); // �꽑�깮 ���긽 �솗�씤, �긽�깭 蹂�寃쏀븷 �씠�뒋瑜� �꽑�깮�븯�꽭�슂.
+                        return;
+                    }
+
+                    $uibModal.open({
+                        templateUrl : 'views/issue/issueModifyStatus.html',
+                        size : "md",
+                        controller : 'issueModifyStatusController',
+                        backdrop : 'static',
+                        resolve : {
+                            parameter : function () {
+                                return {
+                                    issueIds : issueIds
+                                };
+                            }
+                        }
+                    });
+                }
+
+                //  �씠�뒋 �닔�젙 �뙘�뾽 �샇異�
+                function modify(id) {
+                    $uibModal.open({
+                        templateUrl : 'views/issue/issueModify.html',
+                        size : "lg",
+                        controller : 'issueModifyController',
+                        backdrop : 'static',
+                        resolve : {
+                            parameter : function () {
+                                return {
+                                    id : id
+                                };
+                            }
+                        }
+                    });
+                }
+
+                //  �씠�뒋 �궘�젣
+                function removes() {
+                    var removeIds = [];
+                    var removePermission = true;
+
+                    angular.forEach($scope.vm.responseData.data, function (data) {
+                        if (data.checked && data.modifyPermissionCheck) {
+                            removeIds.push(data.id);
+                        }
+
+                        if (data.checked && !data.modifyPermissionCheck) {
+                            removePermission = false;
+                        }
+                    });
+
+                    if (!removePermission) {
+                        SweetAlert.swal({
+                            html : true,
+                            title : $filter("translate")("common.deleteFailed"), // �궘�젣 �떎�뙣
+                            text : $filter("translate")("issue.notHaveDeletePermissionExistsAnIssue"), // �궘�젣 沅뚰븳�씠 �뾾�뒗 �씠�뒋媛� 議댁옱�빀�땲�떎.
+                            type : "error"
+                        });
+                        return;
+                    }
+
+                    if (removeIds.length < 1) {
+                        SweetAlert.swal({
+                            title : $filter("translate")("common.checkPurgingTargets"), // �궘�젣 ���긽 �솗�씤
+                            text : $filter("translate")("common.selectDestinationDeletion"), // �궘�젣 ���긽�쓣 �꽑�깮�븯�꽭�슂.
+                            type : "warning"
+                        });
+                        return;
+                    }
+
+                    //  �궘�젣 �븣由�
+                    SweetAlert.swal({
+                            title : $filter("translate")("issue.deleteIssue"), // �씠�뒋 �궘�젣
+                            text : $filter("translate")("issue.wantToDeleteSelectIssue"), // �꽑�깮�븳 �씠�뒋�쓣 �궘�젣�븯寃좎뒿�땲源�? �궘�젣�맂 �씠�뒋�� 蹂듦뎄�븷 �닔 �뾾�뒿�땲�떎.
+                            type : "warning",
+                            showCancelButton : true,
+                            confirmButtonColor : "#DD6B55",
+                            confirmButtonText : $filter("translate")("common.delete"), // �궘�젣
+                            cancelButtonText : $filter("translate")("common.cancel"), // 痍⑥냼
+                            closeOnConfirm : false,
+                            closeOnCancel : true
+                        },
+                        function (isConfirm) {
+                            SweetAlert.close();
+
+                            if (isConfirm) {
+                                $rootScope.spinner = true;
+
+                                Issue.remove($resourceProvider.getContent(
+                                    { removeIds : removeIds },
+                                    $resourceProvider.getPageContent(0, 0))).then(function (result) {
+
+                                    if (result.data.message.status === "success") {
+                                        $timeout(function () {
+                                            SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // �궘�젣 �꽦怨�
+                                        }, 100);
+
+                                        $scope.fn.listView();
+
+                                        $scope.fn.getPageList(0);
+                                    }
+                                    else {
+                                        $timeout(function () {
+                                            SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // �궘�젣 �떎�뙣
+                                        }, 100);
+                                    }
+
+                                    $rootScope.spinner = false;
+                                });
+                            }
+                        });
+                }
+
+                //  �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙
+                function addIssueTableConfig() {
+                    $uibModal.open({
+                        templateUrl : 'views/issue/issueAddTreeTableConfig.html',
+                        size : "lg",
+                        controller : 'issueAddTreeTableConfigController',
+                        backdrop : 'static',
+                        resolve : {}
+                    });
+                }
+
+                //  �씠�뒋 �긽�깭 紐⑸줉
+                function getIssueStatuses() {
+                    var deferred = $q.defer();
+                    $scope.vm.issueStatuses = [];
+
+                    IssueStatus.find($resourceProvider.getContent({},
+                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
+                        if (result.data.message.status === "success") {
+                            angular.forEach(result.data.data, function (issueType) {
+                                $scope.vm.issueStatuses.push({
+                                    fieldKey : issueType.id,
+                                    fieldValue : issueType.name
+                                });
+                            });
+                        }
+                        else {
+                            SweetAlert.swal($filter("translate")("common.failedToIssueStatusListLookup"), result.data.message.message, "error"); // �씠�뒋 �긽�깭 紐⑸줉 議고쉶 �떎�뙣
+                        }
+
+                        deferred.resolve(result.data.data);
+                    });
+
+                    return deferred.promise;
+                }
+
+                //  �씠�뒋 �쑀�삎 紐⑸줉
+                function getIssueTypes() {
+                    var deferred = $q.defer();
+                    $scope.vm.issueTypes = [];
+
+                    IssueType.find($resourceProvider.getContent({},
+                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
+                        if (result.data.message.status === "success") {
+                            angular.forEach(result.data.data, function (issueType) {
+                                $scope.vm.issueTypes.push({
+                                    fieldKey : issueType.id,
+                                    fieldValue : issueType.name
+                                });
+                            });
+                        }
+                        else {
+                            SweetAlert.swal($filter("translate")("issue.failedToIssueTypeListLookup"), result.data.message.message, "error"); // �씠�뒋 �쑀�삎 紐⑸줉 議고쉶 �떎�뙣
+                        }
+
+                        deferred.resolve(result.data.data);
+                    });
+
+                    return deferred.promise;
+                }
+
+                //  �슦�꽑�닚�쐞 紐⑸줉
+                function getPriorities() {
+                    var deferred = $q.defer();
+                    $scope.vm.priorities = [];
+
+                    Priority.find($resourceProvider.getContent({},
+                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
+                        if (result.data.message.status === "success") {
+                            angular.forEach(result.data.data, function (prioritiy) {
+                                $scope.vm.priorities.push({
+                                    fieldKey : prioritiy.id,
+                                    fieldValue : prioritiy.name
+                                });
+                            });
+                        }
+                        else {
+                            SweetAlert.swal($filter("translate")("issue.failedToPriorityListLookup"), result.data.message.message, "error"); // �슦�꽑�닚�쐞 紐⑸줉 議고쉶 �떎�뙣
+                        }
+
+                        deferred.resolve(result.data.data);
+                    });
+
+                    return deferred.promise;
+                }
+
+                //  以묒슂�룄 紐⑸줉
+                function getSeverities() {
+                    var deferred = $q.defer();
+                    $scope.vm.severities = [];
+
+                    Severity.find($resourceProvider.getContent({},
+                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
+                        if (result.data.message.status === "success") {
+                            angular.forEach(result.data.data, function (severity) {
+                                $scope.vm.severities.push({
+                                    fieldKey : severity.id,
+                                    fieldValue : severity.name
+                                });
+                            });
+                        }
+                        else {
+                            SweetAlert.swal($filter("translate")("issue.failedToCriticalListLookup"), result.data.message.message, "error"); // 以묒슂�룄 紐⑸줉 議고쉶 �떎�뙣
+                        }
+
+                        deferred.resolve(result.data.data);
+                    });
+
+                    return deferred.promise;
+                }
+
+                //  �궗�슜�옄 �젙�쓽 �븘�뱶 紐⑸줉
+                function getCustomFields() {
+                    var deferred = $q.defer();
+                    $scope.vm.customFields = [];
+
+                    CustomField.find($resourceProvider.getContent({},
+                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
+                        if (result.data.message.status === "success") {
+
+                            angular.forEach(result.data.data, function (customField) {
+                                switch (customField.customFieldType) {
+                                    case "INPUT" :
+                                        customField.useValues = "";
+                                        break;
+
+                                    case "MULTI_SELECT" :
+                                    case "SINGLE_SELECT" :
+                                        customField.useValues = [];
+                                        break;
+                                }
+
+                                $scope.vm.customFields.push(customField);
+                            });
+                        }
+                        else {
+                            SweetAlert.swal($filter("translate")("issue.failedToUserDefinedFieldListLookup"), result.data.message.message, "error"); // �궗�슜�옄 �젙�쓽 �븘�뱶 紐⑸줉 議고쉶 �떎�뙣
+                        }
+
+                        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;
+                }
+
+                //  理쒖큹 �떎�뻾
+                function startExecute() {
+                    // �뙆�씪誘명꽣 �씫湲�
+                    var params = $rootScope.previousGetParams;
+                    if ($rootScope.isDefined(params)) {
+                        $rootScope.$broadcast("makeIssueSearch", {  projectKey : params.projectKey, issueNumber : params.issueNumber });
+                        $rootScope.previousGetParams = null;
+                        return;
+                    }
+
+                    var promises = {
+                        getIssueTypes : $scope.fn.getIssueTypes(),
+                        getPriorities : $scope.fn.getPriorities(),
+                        getSeverities : $scope.fn.getSeverities(),
+                        getIssueStatuses : $scope.fn.getIssueStatuses(),
+                        getCustomFields : $scope.fn.getCustomFields()
+                    };
+
+                    $q.all(promises).then(function (results){
+                        $log.debug("promises 寃곌낵 " , results);
+                        //  �씠�뒋 �뀒�씠釉� �꽕�젙 議고쉶 諛� �쟻�슜 �썑
+                        //  �씠�뒋 寃��깋 議곌굔 媛��졇�삤湲� �썑
+                        //  �씠�뒋 議고쉶
+
+                        //  �궗�슜�옄 �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 媛믪쓣 媛��졇���꽌 �쟻�슜�븳�떎.
+                        $scope.fn.getIssueTableConfigs().then(function (issueTableConfigs) {
+                            if ($rootScope.isDefined(issueTableConfigs)) {
+                                //  �씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂대�� ���옣 �븳�떎.
+                                $scope.vm.issueTableConfigs = JSON.parse(issueTableConfigs);
+                                $scope.vm.issueTableConfigs.sort(function (a, b) {
+                                    return a.position < b.position ? -1 : a.position > b.position ? 1: 0;
+                                });
+                            }
+                            else {
+                                //  理쒖큹 �뾽臾� 怨듦컙�뿉 �뱾�뼱�솕�쓣 寃쎌슦
+                                $scope.vm.issueTableConfigs = [{
+                                    name : $filter("translate")("common.priority"), // �슦�꽑�닚�쐞
+                                    key : "PRIORITY",
+                                    width : "width-80-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-140-p",
+                                    position : 4,
+                                    display : true
+                                }];
+                            }
+
+                            //  �씠�뒋 �뀒�씠釉� �꽕�젙
+                            $scope.fn.makeTableConfigs();
+                            //  �꽌踰꾩뿉 ���옣�븳 �씠�뒋 寃��깋 議곌굔�쓣 媛��졇���꽌 �씠�뒋 紐⑸줉 寃��깋�쓣 吏꾪뻾�븳�떎.
+                            $scope.fn.getVmSearchObject();
+                        });
+                    });
+                }
+
+                $scope.fn.startExecute();
+            }
+        ]);
+    }
+);
diff --git a/src/main/webapp/scripts/main.js b/src/main/webapp/scripts/main.js
index 6413765..7bf0ada 100644
--- a/src/main/webapp/scripts/main.js
+++ b/src/main/webapp/scripts/main.js
@@ -179,10 +179,12 @@
         'issueModifyController' : 'app/issue/issueModify.controller',  //  �씠�뒋 �닔�젙 而⑦듃濡ㅻ윭
         'issueDetailController' : 'app/issue/issueDetail.controller',  //  �씠�뒋 �긽�꽭 而⑦듃濡ㅻ윭
         'issueListController' : 'app/issue/issueList.controller',   //  �씠�뒋 紐⑸줉 而⑦듃濡ㅻ윭
+        'issueListTreeController' : 'app/issue/issueListTree.controller',   //  �씠�뒋 �븯�쐞/�뿰愿��씪媛� 寃��깋 而⑦듃濡ㅻ윭
         'issueManagerController' : 'app/issue/issueManager.controller',   //  �씠�뒋 愿�由� 而⑦듃濡ㅻ윭
         'issueImportExcelController' : 'app/issue/issueImportExcel.controller',    //  �씠�뒋 �뿊�� ���웾 import
         'issueModifyStatusController' : 'app/issue/issueModifyStatus.controller',   //  �씠�뒋 �떎以� �긽�깭 蹂�寃� 而⑦듃濡ㅻ윭
         'issueAddTableConfigController' : 'app/issue/issueAddTableConfig.controller',   //  �씠�뒋 �뀒�씠釉� �꽕�젙 而⑦듃濡ㅻ윭
+        'issueAddTreeTableConfigController' : 'app/issue/issueAddTreeTableConfig.controller',   //  �씠�뒋 �븯�쐞/�뿰愿��씪媛� 寃��깋 �뀒�씠釉� �꽕�젙 而⑦듃濡ㅻ윭
         'issueSendMailController' : 'app/issue/issueSendMail.controller',   //  �씠�뒋 �씠硫붿씪 諛쒖넚 而⑦듃濡ㅻ윭
         'issueVersionViewController' : 'app/issue/issueVersionView.controller', //  �씠�뒋 踰꾩쟾 �솗�씤 而⑦듃濡ㅻ윭
         'issueReservationController' : 'app/issue/issueReservation.controller', //  �씠�뒋 諛쒖깮 �삁�빟 而⑦듃濡ㅻ윭
diff --git a/src/main/webapp/views/issue/issueAddTreeTableConfig.html b/src/main/webapp/views/issue/issueAddTreeTableConfig.html
new file mode 100644
index 0000000..297b78e
--- /dev/null
+++ b/src/main/webapp/views/issue/issueAddTreeTableConfig.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="2">
+                        <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/issueList.html b/src/main/webapp/views/issue/issueList.html
index 50d4a57..2fa8185 100644
--- a/src/main/webapp/views/issue/issueList.html
+++ b/src/main/webapp/views/issue/issueList.html
@@ -9,6 +9,9 @@
                 <a class="nav-link cursor" ng-class="{ 'active' : vm.tab == 'ISSUE_LIST' }" ng-click="fn.changeTab('ISSUE_LIST')" translate="issue.normalList">�씪媛� 紐⑸줉</a>
             </li>
             <li class="nav-item">
+                <a class="nav-link cursor" ng-class="{ 'active' : vm.tab == 'ISSUE_TREE_LIST' }" ng-click="fn.changeTab('ISSUE_TREE_LIST')" translate="issue.treeList">援ъ“ 紐⑸줉</a>
+            </li>
+            <li class="nav-item">
                 <a class="nav-link cursor" ng-class="{ 'active' : vm.tab == 'ISSUE_TIMELINE' }" ng-click="fn.changeTab('ISSUE_TIMELINE')" translate="issue.timeLine">���엫 �씪�씤</a>
             </li>
         </ul>
@@ -21,6 +24,10 @@
         <div ng-include include-replace src="'views/issue/issueListNormal.html'"></div>
     </div>
 
+    <div ng-show="vm.tab == 'ISSUE_TREE_LIST'">
+        <div ng-include include-replace src="'views/issue/issueListTree.html'"></div>
+    </div>
+
     <div ng-show="vm.tab == 'ISSUE_TIMELINE'">
         <div ng-include include-replace src="'views/issue/issueListTimeline.html'"></div>
     </div>
diff --git a/src/main/webapp/views/issue/issueListTree.html b/src/main/webapp/views/issue/issueListTree.html
new file mode 100644
index 0000000..8612831
--- /dev/null
+++ b/src/main/webapp/views/issue/issueListTree.html
@@ -0,0 +1,410 @@
+<div class="container-fluid" ng-controller="issueListTreeController">
+    <div class="row">
+        <div class="col-sm-12" >
+            <div class="element-wrapper" ng-if="!vm.detailView">
+                <div class="element-box">
+                  <div class="row" >
+                    <div class="col-sm-12">
+                        <div class="searchdiv">
+                            <form name="issueSearchForm" role="form" ng-enter="fn.getPageList(0)">
+                                <div class="row">
+                                    <div class="col-sm-6">
+                                        <div class="input-group">
+                                            <input class="form-control"
+                                                   type="text"
+                                                   tabindex="-1"
+                                                   maxlength="300"
+                                                   kr-input
+                                                   owl-auto-focus
+                                                   ng-model="vm.search.title"
+                                                   placeholder="{{'issue.pleaseEnterIssueName' | translate}}">
+                                            <div class="input-group-prepend ml-10">
+                                                <button class="btn btn-navy" ng-click="fn.getPageList(0)"> <span translate="common.search">寃��깋</span></button>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+
+                                <div class="row">
+                                    <div class="col-sm-12">
+                                        <div class="tabfilter">
+                                            <div translate="common.selectedSearchCriteria">�꽑�깮�븳 寃��깋 議곌굔</div>
+                                            <!--    �봽濡쒖젥�듃    -->
+                                            <issue-search-array-view-element lists="vm.projects"
+                                                                             type="'project'"></issue-search-array-view-element>
+
+                                            <!--    �씠�뒋 ���엯   -->
+                                            <issue-search-field-key-view-element lists="vm.issueTypes"
+                                                                                 keys="vm.search.issueTypeIds"></issue-search-field-key-view-element>
+
+                                            <!--    �씠�뒋 �긽�깭   -->
+                                            <issue-search-field-key-view-element lists="vm.issueStatuses"
+                                                                                 keys="vm.search.issueStatusIds"></issue-search-field-key-view-element>
+
+                                            <!--    �씠�뒋 踰덊샇   -->
+                                            <p ng-if="$root.isDefined(vm.search.combinationIssueNumber)">
+                                                {{vm.search.combinationIssueNumber}}
+                                                <span ng-click="vm.search.combinationIssueNumber = ''">횞</span>
+                                            </p>
+
+                                            <!--    �씠�뒋 �궡�슜   -->
+                                            <p ng-if="$root.isDefined(vm.search.description)">
+                                                {{vm.search.description}}
+                                                <span ng-click="vm.search.description = ''">횞</span>
+                                            </p>
+
+                                            <!--    �슦�꽑 �닚�쐞   -->
+                                            <issue-search-field-key-view-element lists="vm.priorities"
+                                                                                 keys="vm.search.priorityIds"></issue-search-field-key-view-element>
+
+                                            <!--    以묒슂�룄   -->
+                                            <issue-search-field-key-view-element lists="vm.severities"
+                                                                                 keys="vm.search.severityIds"></issue-search-field-key-view-element>
+
+                                            <!--    �떞�떦�옄   -->
+                                            <issue-search-array-view-element lists="vm.users"
+                                                                             type="'user'"></issue-search-array-view-element>
+
+                                            <!--    �벑濡앹옄   -->
+                                            <issue-search-array-view-element lists="vm.registers"
+                                                                             type="'user'"></issue-search-array-view-element>
+
+                                            <!--    �떆�옉�씪   -->
+                                            <p ng-if="$root.isDefined(vm.search.startDateRange)">
+                                                {{vm.search.startDateRange}}
+                                                <span ng-click="vm.search.startDateRange = ''">횞</span>
+                                            </p>
+
+                                            <!--    醫낅즺�씪   -->
+                                            <p ng-if="$root.isDefined(vm.search.completeDateRange)">
+                                                {{vm.search.completeDateRange}}
+                                                <span ng-click="vm.search.completeDateRange = ''">횞</span>
+                                            </p>
+
+                                            <!--    �벑濡앹씪   -->
+                                            <p ng-if="$root.isDefined(vm.search.registerDateRange)">
+                                                {{vm.search.registerDateRange}}
+                                                <span ng-click="vm.search.registerDateRange = ''">횞</span>
+                                            </p>
+
+                                            <!--    �뀓�뒪�듃 �엯�젰 �븘�뱶   -->
+                                            <issue-search-custom-field-view-element
+                                                    custom-fields="vm.customFields"></issue-search-custom-field-view-element>
+                                        </div>
+                                    </div>
+                                </div>
+
+
+                                <div class="">
+                                    <label class="issue-search-label" ng-class="{ 'icon-reverse' : vm.searchView }"
+                                           ng-click="vm.searchView = !vm.searchView">
+                                        <span translate="common.detailedSearch">�긽�꽭寃��깋</span>
+                                    </label>
+                                    <div ng-if="vm.searchView">
+                                        <div class="row">
+                                            <div class="col-lg-3">
+                                                <div class="form-group">
+                                                    <label> <span translate="common.project">�봽濡쒖젥�듃</span></label>
+                                                    <js-autocomplete-multi data-input-name="projects"
+                                                                           selected-model="vm.projects"
+                                                                           search="vm.projectName"
+                                                                           input-disabled="false"
+                                                                           translation-texts="{ empty : 'common.emptyProject', selectList : 'common.' }"
+                                                                           source="fn.getProjectList(vm.projectName, vm.projects, null, null, ['01', '02', '03'])"
+                                                                           extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', type : '', maxlength : 100}"></js-autocomplete-multi>
+                                                </div>
+                                            </div>
+
+                                            <div class="col-lg-3">
+                                                <div class="form-group">
+                                                    <label> <span translate="issue.issueType">�씠�뒋 ���엯</span></label>
+                                                    <ng-dropdown-multiselect class="multiSelect cursor"
+                                                                             data-input-name="issueStatuses"
+                                                                             selected-model="vm.search.issueTypeIds"
+                                                                             options="::vm.issueTypes"></ng-dropdown-multiselect>
+                                                </div>
+                                            </div>
+
+                                            <div class="col-lg-3">
+                                                <div class="form-group">
+                                                    <label> <span translate="issue.issueStatus">�씠�뒋 �긽�깭</span></label>
+                                                    <ng-dropdown-multiselect class="multiSelect cursor"
+                                                                             data-input-name="issueStatuses"
+                                                                             selected-model="vm.search.issueStatusIds"
+                                                                             options="::vm.issueStatuses"></ng-dropdown-multiselect>
+                                                </div>
+                                            </div>
+
+                                            <div class="col-lg-3">
+                                                <div class="form-group">
+                                                    <label> <span translate="issue.issueNumber">�씠�뒋 踰덊샇</span></label>
+                                                    <input type="text"
+                                                           name="name"
+                                                           class="form-control input-sm"
+                                                           autocomplete="off"
+                                                           kr-input
+                                                           maxlength="20"
+                                                           ng-model="vm.search.combinationIssueNumber">
+                                                </div>
+                                            </div>
+                                        </div>
+
+                                        <div class="row">
+                                            <div class="col-lg-3">
+                                                <div class="form-group">
+                                                    <label> <span translate="issue.issueContent">�씠�뒋 �궡�슜</span></label>
+                                                    <input type="text"
+                                                           name="description"
+                                                           class="form-control input-sm"
+                                                           kr-input
+                                                           maxlength="20"
+                                                           autocomplete="off"
+                                                           ng-model="vm.search.description">
+                                                </div>
+                                            </div>
+
+                                            <div class="col-lg-3">
+                                                <div class="form-group">
+                                                    <label> <span translate="common.priority">�슦�꽑 �닚�쐞</span></label>
+                                                    <ng-dropdown-multiselect class="multiSelect cursor"
+                                                                             data-input-name="priorities"
+                                                                             selected-model="vm.search.priorityIds"
+                                                                             options="::vm.priorities"></ng-dropdown-multiselect>
+                                                </div>
+                                            </div>
+
+                                            <div class="col-lg-3">
+                                                <div class="form-group">
+                                                    <label> <span translate="common.importance">以묒슂�룄</span></label>
+                                                    <ng-dropdown-multiselect class="multiSelect cursor"
+                                                                             data-input-name="severities"
+                                                                             selected-model="vm.search.severityIds"
+                                                                             options="::vm.severities"></ng-dropdown-multiselect>
+                                                </div>
+                                            </div>
+
+                                            <div class="col-lg-3">
+                                                <div class="form-group">
+                                                    <label> <span translate="common.assignee">�떞�떦�옄</span></label>
+                                                    <js-autocomplete-multi data-input-name="users"
+                                                                           selected-model="vm.users"
+                                                                           search="vm.userName"
+                                                                           input-disabled="false"
+                                                                           source="fn.getUserList(vm.userName, vm.users)"
+                                                                           translation-texts="{ count : 'common.userNum', empty : 'common.emptyUser' }"
+                                                                           extra-settings="{ displayProp : 'byName' , idProp : 'id', widthable : false, width : '', imageable : true, imagePathProp : 'profile', type : 'user', maxlength : 100 }">
+                                                    </js-autocomplete-multi>
+                                                </div>
+                                            </div>
+                                        </div>
+
+                                        <div class="row">
+                                            <div class="col-lg-3">
+                                                <div class="form-group">
+                                                    <label> <span translate="common.register">�벑濡앹옄</span></label>
+                                                    <js-autocomplete-multi data-input-name="registers"
+                                                                           selected-model="vm.registers"
+                                                                           search="vm.registerName"
+                                                                           input-disabled="false"
+                                                                           source="fn.getUserList(vm.registerName, vm.registers)"
+                                                                           translation-texts="{ count : 'common.userNum', empty : 'common.emptyUser' }"
+                                                                           extra-settings="{ displayProp : 'byName' , idProp : 'id', widthable : false, width : '', imageable : true, imagePathProp : 'profile', type : 'user', maxlength : 100 }">
+                                                    </js-autocomplete-multi>
+                                                </div>
+                                            </div>
+
+                                            <div class="col-lg-3">
+                                                <div class="form-group">
+                                                    <label> <span translate="common.registrationDate">�벑濡앹씪</span></label>
+                                                    <input type="text"
+                                                           readonly
+                                                           class="form-control input-sm input-readonly"
+                                                           ng-model="vm.search.registerDateRange"
+                                                           modal-form-auto-scroll
+                                                           date-format="YY-MM-DD"
+                                                           parent-el="'#createdWidget'"
+                                                           date-range-picker>
+                                                </div>
+                                            </div>
+
+                                            <div class="col-lg-3">
+                                                <div class="form-group">
+                                                    <label> <span translate="common.startDate">�떆�옉�씪</span></label>
+                                                    <input type="text"
+                                                           readonly
+                                                           class="form-control input-sm input-readonly"
+                                                           ng-model="vm.search.startDateRange"
+                                                           date-format="YY-MM-DD"
+                                                           parent-el="'#createdWidget'"
+                                                           date-range-picker>
+                                                </div>
+                                            </div>
+
+                                            <div class="col-lg-3">
+                                                <div class="form-group">
+                                                    <label> <span translate="common.endDate">醫낅즺�씪</span></label>
+                                                    <input type="text"
+                                                           readonly
+                                                           class="form-control input-sm input-readonly"
+                                                           ng-model="vm.search.completeDateRange"
+                                                           modal-form-auto-scroll
+                                                           date-format="YY-MM-DD"
+                                                           parent-el="'#createdWidget'"
+                                                           date-range-picker>
+                                                </div>
+                                            </div>
+
+                                            <div class="col-lg-3" ng-repeat="customField in vm.customFields">
+                                                <label>{{::customField.name}}</label>
+
+                                                <div ng-switch on="customField.customFieldType">
+                                                    <div ng-switch-when="INPUT">
+                                                        <input type="text" class="form-control input-sm"
+                                                               ng-model="customField.useValues"
+                                                               maxlength="100">
+                                                    </div>
+
+                                                    <div ng-switch-default>
+                                                        <ng-dropdown-multiselect class="multiSelect cursor"
+                                                                                 data-input-name="customField.name"
+                                                                                 selected-model="customField.useValues"
+                                                                                 extra-settings="{ 'idProp' : 'value', 'externalIdProp' : 'value', 'displayProp' : 'value', 'stringTypeOption' : 'true', 'stopRemoveBodyEvent' : 'true' }"
+                                                                                 options="::customField.customFieldValueVos"></ng-dropdown-multiselect>
+                                                    </div>
+                                                </div>
+                                            </div>
+
+                                        </div>
+
+                                        <div class="row">
+                                            <div class="col-sm-12">
+                                                <div class="form-buttons-w text-center mb-20">
+                                                    <button class="btn btn-xlg btn-navy" ng-click="fn.getPageList(0)">
+                                                        <i class="os-icon os-icon-ui-37"></i> &nbsp;
+                                                        &nbsp; <span translate="common.search">寃��깋</span> &nbsp; &nbsp;
+                                                    </button>
+                                                    <button class="btn btn-xlg btn-white" ng-click="fn.initSearch()">
+                                                        <i class="os-icon os-icon-grid-18"></i> &nbsp;
+                                                        &nbsp; <span translate="common.reset">珥덇린�솕</span> &nbsp; &nbsp;
+                                                    </button>
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </form>
+                        </div>
+                    </div>
+                </div>
+                    <div class="controls-above-table mt-30">
+                        <div class="row">
+                            <!--    醫뚯륫  -->
+                            <div class="col-7">
+                                <div class="dataTables_length">
+                                    <label>
+                                        <select name="pageRow"
+                                                tabindex="-1"
+                                                class="form-control form-control-sm"
+                                                ng-change="fn.changePageRowCount()"
+                                                ng-model="vm.page.selectedPageRowCount">
+                                            <option value="10">10</option>
+                                            <option value="50">50</option>
+                                            <option value="100">100</option>
+                                        </select> 1-1 / 2嫄�</span>
+                                    </label>
+                                </div>
+                            </div>
+                            <!--    �슦痢�  -->
+                            <div class="col-5 " >
+                                <form class="form-inline justify-content-sm-end  pull-right" method="post" action="/issue/downloadExcel" name="issueListForm" >
+                                    <!--span class="badge-tip" function-tool-tip  data-placement="top" data-toggle="tooltip" data-original-title="�뿊�� �떎�슫濡쒕뱶, �씪愿� 蹂�寃� �벑 �떎�뼇�븳 湲곕뒫�쓣 �젣怨듯빀�땲�떎.">?</span-->
+                                    <input type="hidden" name="conditions">
+                                    <div class="btn-group">
+                                        <button aria-expanded="false" aria-haspopup="true"
+                                                tabindex="-1"
+                                                class="btn btn-secondary dropdown-toggle"
+                                                data-toggle="dropdown" type="button"><span translate="common.addFunction">異붽�湲곕뒫</span>
+                                        </button>
+                                        <div aria-labelledby="dropdownMenuButton2" class="dropdown-menu left-menu"
+                                             x-placement="bottom-start" >
+                                            <a class="dropdown-item cursor" ng-click="fn.addIssueTableConfig()"> <span translate="issue.settingTableDisplay">�뀒�씠釉� �몴�떆 �꽕�젙</span></a>
+                                        </div>
+                                    </div>
+                                </form>
+                            </div>
+                        </div>
+                    </div>
+<!--
+                    <div class="table-responsive">
+                        <js-table data="vm.responseData.data" table-configs="vm.tableConfigs"
+                                  event="tableEvent" detail-view="vm.detailView"></js-table>
+                    </div>
+                    -->
+
+                    <!-- �듃由ш뎄議� �엫�떆 -->
+                    <div class="tree-container">
+                        <div class="tree-body">
+                            <h5 class="tree-title"><button class="btn btn-primary">�솃�럹�씠吏� 蹂�議� �깘吏�</button></h5>
+                            <ul class="tree">
+                                <li>
+                                    <a href="#" class="btn btn-success">https://land.daum.com/news/expertColumnView.naver?artcl_seq=6580&page= | 2020.10.13 22:10:22</a>
+                                    <a href="#" class="btn btn-info">�뿰愿� �씪媛�1</a>
+                                    <a href="#" class="btn btn-info">�뿰愿� �씪媛�2</a>
+                                    <ul>
+                                        <li>
+                                            <a href="#" class="btn btn-warning">https://dict.daum.com/elkodict/moderngreek/#/main | 2020.10.13 22:10:22</a>
+                                        </li>
+                                    </ul>
+                                </li>
+                                <li>
+                                    <a href="#" class="btn btn-success">https://land.naver.com/news/region.naver | 2020.10.13 22:10:22</a>
+                                    <a href="#" class="btn btn-info">�뿰愿� �씪媛�1</a>
+                                    <ul>
+                                        <li>
+                                            <a href="#" class="btn btn-warning">https://sports.news.naver.com/news.nhn?oid=236&aid=0000218017 | 2020.10.13 22:10:22</a>
+                                        </li>
+                                    </ul>
+                                </li>
+                            </ul>
+                        </div>
+                        <hr>
+                        <div class="tree-body">
+                            <h5 class="tree-title"><button class="btn btn-primary">MCF</button></h5>
+                            <ul class="tree">
+                                <li>
+                                    <a href="#" class="btn btn-success">https://land.naver.com/news/region.naver | 2020.10.13 22:10:22</a>
+                                    <a href="#" class="btn btn-info">�뿰愿� �씪媛�1</a>
+                                    <ul>
+                                        <li>
+                                            <a href="#" class="btn btn-warning">https://sports.news.naver.com/news.nhn?oid=236&aid=0000218017 | 2020.10.13 22:10:22</a>
+                                        </li>
+                                    </ul>
+                                </li>
+                            </ul>
+                        </div>
+                    </div>
+
+                <div class="controls-below-table text-center">
+                    <ul uib-pagination
+                        boundary-links-numbes="true"
+                        items-per-page="vm.page.selectedPageRowCount"
+                        total-items="vm.responseData.page.totalCount"
+                        ng-model="vm.page.selectedPage"
+                        max-size="10"
+                        ng-click="fn.getPageList(vm.page.selectedPage - 1)"
+                        class="pagination pagination-sm"
+                        previous-text="&lt;"
+                        next-text="&gt;"
+                        first-text=""
+                        last-text="">
+                    </ul>
+                </div>
+            </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="row support-index" ng-show="vm.detailView">
+        <div ng-include include-replace src="'views/issue/issueDetail.html'"></div>
+    </div>
+</div>
\ No newline at end of file

--
Gitblit v1.8.0