From da08346c769258b6102cb4fe5348dc164ea2f3f7 Mon Sep 17 00:00:00 2001
From: jhjang <jhjang@maprex.co.kr>
Date: 일, 12 12월 2021 17:40:31 +0900
Subject: [PATCH] - 연관 이슈 추가 안되는 오류 수정 - 연관 이슈 추가 후 목록 안뜨는 문제 수정 - 이슈 목록 트리 구조 보기 기능 추가

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java          |   51 ++++--
 src/main/webapp/custom_components/js-tree/treeColumnGenerator.directive.js |   85 ++++++---
 src/main/webapp/custom_components/js-tree/js-tree.html                     |   34 ++--
 src/main/webapp/views/issue/issueListNormal.html                           |    4 
 src/main/webapp/scripts/app/issue/issueDetail.controller.js                |    5 
 src/main/resources/migration/V1_14__Alter_Table.sql                        |   16 ++
 src/main/webapp/assets/styles/main.css                                     |   13 +
 src/main/resources/migration/V1_13__Alter_Table.sql                        |   21 --
 src/main/webapp/scripts/app/issue/issueAddRelation.controller.js           |    6 
 src/main/java/kr/wisestone/owl/service/IssueService.java                   |    2 
 src/main/webapp/scripts/app/issue/issueList.controller.js                  |  135 ++++++----------
 src/main/webapp/custom_components/js-tree/tree.provider.js                 |   75 ---------
 src/main/webapp/views/common/header.html                                   |   21 ++
 13 files changed, 216 insertions(+), 252 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/service/IssueService.java b/src/main/java/kr/wisestone/owl/service/IssueService.java
index 3e033b8..d3ae7fb 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueService.java
@@ -100,5 +100,5 @@
 
     void findApiIssue(ApiMonitorCondition apiMonitorCondition, Map<String, Object> resJsonData);
 
-    void setCountDownIssues(List<Map<String, Object>> results, List<IssueVo> issueVos);
+    void setCountDownIssues(List<IssueVo> issueVos);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
index 142f491..7f68b4e 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -1,7 +1,6 @@
 package kr.wisestone.owl.service.impl;
 
 import com.google.common.collect.Lists;
-import com.sun.org.apache.bcel.internal.generic.NEW;
 import kr.wisestone.owl.common.ExcelConditionCheck;
 import kr.wisestone.owl.common.IssueCustomFieldValueFormComparator;
 import kr.wisestone.owl.config.CommonConfiguration;
@@ -781,11 +780,11 @@
         //  Map �뿉 �엳�뒗 �뜲�씠�꽣瑜� IssueVo �뜲�씠�꽣濡� 蹂��솚�븳�떎.
         this.setMapToIssueVo(results, issueVos, issueCondition, user);
 
-//        if (issueCondition.getTree()) {
-            this.setDownIssues(issueVos);
+        if (issueCondition.getTree()) {
+            this.setDownIssues(user, issueVos);
             this.setRelationIssues(issueVos);
-//        }
-        this.setCountDownIssues(results, issueVos);
+        }
+        this.setCountDownIssues(issueVos);
 
         this.SetWorkflowDepartment(issueVos); //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲�
 
@@ -799,13 +798,35 @@
     }
 
 
-    // �븯�쐞 �씠�뒋 �꽭�똿
-    private void setDownIssues(List<IssueVo> issueVos) {
+    // �븯�쐞 �씠�뒋 �꽭�똿(�옱洹�)
+    private void setDownIssues(User user, List<IssueVo> issueVos) {
         for(IssueVo issueVo : issueVos) {
             List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueVo.getId());
+            List<IssueVo> downIssueVos = Lists.newArrayList();
+            IssueCondition issueCondition = new IssueCondition();
+            issueCondition.addIssueIds(String.valueOf(issueVo.getId()));
+
             for(Issue downIssue : downIssues){
-                issueVo.addIssueDownVo(ConvertUtil.copyProperties(downIssue, IssueVo.class));
+                IssueVo addIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class);
+                addIssueVo.setIssueTypeId(downIssue.getIssueType().getId());
+                downIssueVos.add(addIssueVo);
+
             }
+            issueVo.setIssueDownVos(downIssueVos);
+            if (downIssueVos.size() > 0) {
+                this.setDownIssues(user, downIssueVos);
+            }
+
+            //  �씠�뒋 �궗�슜�옄 �젙蹂� 異붽�
+            //this.setIssueUserList(issueVos, issueCondition);
+            this.setIssueDepartmentList(issueVos, issueCondition, user);
+            //  �벑濡앹옄 �젙蹂� 異붽�
+            this.setRegister(issueVos);  //  �떞�떦�옄 �젙蹂� �뀑�똿
+
+            //  �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂� 異붽�
+            this.setIssueCustomFieldValue(issueVos, issueCondition);
+
+            this.SetWorkflowDepartment(issueVos); //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲�
         }
     }
 
@@ -821,9 +842,9 @@
 
     @Override
     @Transactional(readOnly = true)
-    public void setCountDownIssues(List<Map<String, Object>> results, List<IssueVo> issueVos) {
-        for (Map<String, Object> result : results){
-            List<Issue> downIssues = this.issueRepository.findByParentIssueId((Long) result.get("id")); //�븯�쐞�씠�뒋 媛��졇�삤湲�
+    public void setCountDownIssues(List<IssueVo> issueVos) {
+        for (IssueVo issueVo : issueVos){
+            List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueVo.getId()); //�븯�쐞�씠�뒋 媛��졇�삤湲�
             if(downIssues != null && downIssues.size() > 0){ //�긽�쐞�씠�뒋 媛�吏�怨� �엳�뒗 �븷�뱾�씠 �엳�쑝硫�
                 int downIssueAllCount = 0;// �븯�쐞�씠�뒋 �쟾泥� 移댁슫�듃
                 int downIssueCount = 0;// �븯�쐞�씠�뒋 誘몄셿猷� 移댁슫�듃
@@ -842,12 +863,8 @@
                         downIssueCount ++;
                     }
 
-                    for(IssueVo issueVo : issueVos){
-                        if(issueVo.getId().equals(parentIssueVo.getId())){
-                            issueVo.setDownIssueCount(downIssueCount);
-                            issueVo.setDownIssueAllCount(parentIssueVo.getDownIssueAllCount());
-                        }
-                    }
+                    issueVo.setDownIssueCount(downIssueCount);
+                    issueVo.setDownIssueAllCount(parentIssueVo.getDownIssueAllCount());
                 }
             }
         }
diff --git a/src/main/resources/migration/V1_13__Alter_Table.sql b/src/main/resources/migration/V1_13__Alter_Table.sql
index cbe5106..36a476b 100644
--- a/src/main/resources/migration/V1_13__Alter_Table.sql
+++ b/src/main/resources/migration/V1_13__Alter_Table.sql
@@ -15,24 +15,3 @@
 
 -- �뾽泥댁쓽 url 而щ읆 INDEX 異붽�
 ALTER TABLE `company_field` ADD INDEX `urlIndex`(`url`);
-
-ALTER TABLE `company_field` ADD COLUMN `isp_id` bigint(20) DEFAULT NULL;
-ALTER TABLE `company_field` ADD COLUMN `hosting_id` bigint(20) DEFAULT NULL;
-
-ALTER TABLE `company_field` ADD INDEX `ispIdIndex`(`isp_id`);
-ALTER TABLE `company_field` ADD INDEX `hostingIdIndex`(`hosting_id`);
-
-CREATE TABLE `email_template`(
-    `id` BIGINT(11) AUTO_INCREMENT,
-    `title` VARCHAR (255) NOT NULL,
-    `template` mediumtext NOT NULL,
-    `register_id` BIGINT(20) NOT NULL,
-    `register_date` TIMESTAMP NULL,
-    `modify_id` BIGINT(20) NOT NULL,
-    `modify_date` TIMESTAMP NULL,
-    PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
-
-
-
diff --git a/src/main/resources/migration/V1_14__Alter_Table.sql b/src/main/resources/migration/V1_14__Alter_Table.sql
new file mode 100644
index 0000000..60751c8
--- /dev/null
+++ b/src/main/resources/migration/V1_14__Alter_Table.sql
@@ -0,0 +1,16 @@
+ALTER TABLE `company_field` ADD COLUMN `isp_id` bigint(20) DEFAULT NULL;
+ALTER TABLE `company_field` ADD COLUMN `hosting_id` bigint(20) DEFAULT NULL;
+
+ALTER TABLE `company_field` ADD INDEX `ispIdIndex`(`isp_id`);
+ALTER TABLE `company_field` ADD INDEX `hostingIdIndex`(`hosting_id`);
+
+CREATE TABLE `email_template`(
+     `id` BIGINT(11) AUTO_INCREMENT,
+     `title` VARCHAR (255) NOT NULL,
+     `template` mediumtext NOT NULL,
+     `register_id` BIGINT(20) NOT NULL,
+     `register_date` TIMESTAMP NULL,
+     `modify_id` BIGINT(20) NOT NULL,
+     `modify_date` TIMESTAMP NULL,
+     PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
diff --git a/src/main/webapp/assets/styles/main.css b/src/main/webapp/assets/styles/main.css
index 31220e4..85568ee 100644
--- a/src/main/webapp/assets/styles/main.css
+++ b/src/main/webapp/assets/styles/main.css
@@ -30493,4 +30493,15 @@
     margin: 0 auto;
 }
 
-/* 媛꾪듃李⑦듃 end */
+/* �씠�뒋 �듃由� */
+/**
+ * Framework starts from here ...
+ * ------------------------------
+ */
+
+.tree,
+.tree ul {
+    list-style:none;
+}
+
+
diff --git a/src/main/webapp/custom_components/js-tree/js-tree.html b/src/main/webapp/custom_components/js-tree/js-tree.html
index d3c2950..433040f 100644
--- a/src/main/webapp/custom_components/js-tree/js-tree.html
+++ b/src/main/webapp/custom_components/js-tree/js-tree.html
@@ -1,16 +1,18 @@
-<ul>
-    <li ng-repeat="row in fn.getResponseData()">
-        <span>{{row.title}}</span>
-        <ul>
-            <li ng-repeat="downRow in row.issueDownVos">
-
-
-                <span>{{downRow.title}}</span>
-            </li>
-        </ul>
-    </li>
-
-    <li ng-if="fn.getResponseData().length == 0">
-        <span translate="common.noData">�뜲�씠�꽣媛� �뾾�뒿�땲�떎.</span>
-    </li>
-</ul>
\ No newline at end of file
+<div>
+    <ul class="ml-1 pl-1 tree">
+        <li ng-repeat="row in fn.getResponseData()">
+            <ul class="">
+                <li>
+                    <div class="input-group">
+                        <div tree-column-generator="row" class="d-block p-2 mt-2 bg-success text-white" >
+                        </div>
+                        <span class="badge badge-primary mt-3 ml-2 mb-1 cursor" ng-repeat="relIssue in row.issueRelationIssueVos" ng-click="event.changeDetailView(relIssue.id)">{{relIssue.title}}</span>
+                    </div>
+                    <ul class="" ng-if="row.issueDownVos != null && row.issueDownVos.length > 0" ng-repeat="issueDownVo in row.issueDownVos">
+                        <li><div tree-column-generator="issueDownVo" class="d-block p-2 bg-info text-white"></div></li>
+                    </ul>
+                </li>
+            </ul>
+        </li>
+    </ul>
+</div>
\ No newline at end of file
diff --git a/src/main/webapp/custom_components/js-tree/tree.provider.js b/src/main/webapp/custom_components/js-tree/tree.provider.js
index 544308a..0e3afee 100644
--- a/src/main/webapp/custom_components/js-tree/tree.provider.js
+++ b/src/main/webapp/custom_components/js-tree/tree.provider.js
@@ -9,50 +9,23 @@
                         config : function () {
                             var tableConfig = {
                                 hName : "",	//	�뿤�뜑 �씠由�
-                                hWidth : "",	//	移쇰읆 湲몄씠
                                 hChecked : false,	//	泥댄겕 諛뺤뒪 �꽑�깮 �뿬遺�
-                                hAlign : "text-center",	//	�뿤�뜑 �젙�젹 湲곗�
-                                hSort : true,	//	�젙�젹 媛��뒫 �뿬遺�
                                 dName : "",	//	�뜲�씠�꽣 �씠由�
-                                dAlign : "text-left",	//	�뜲�씠�꽣 �젙�젹 湲곗�
-                                dRenderer : "",	//	�젋�뜑�윭 �뿬遺�
                                 dVisible : "",  //      bootstrap 諛섏쓳�삎 而щ읆 �몴�떆 �뿬遺�
                                 dType : "none",        // �깭洹� ���엯
                                 dDateFormat : "",   //  �궇吏� �삎�떇
-                                rowSpan : 0,    //  rowspan �쓣 吏��썝�븳�떎.
-                                colSpan : 0,    //  colspan �쓣 吏��썝�븳�떎.
                                 subHead : false,    //  留뚯빟 rowspan, colspan �쓣 �궗�슜�븯寃� �릺硫� true 濡� �뀑�똿.
                                 columnHint : "",    //  而щ읆 �젙蹂대�� 異붿텧�븯湲� �쐞�븳 �엺�듃 �젙蹂대�� 以��떎 - tableColumnGenerator �쓽 �궗�슜�옄 �젙�쓽 �븘�뱶 遺�遺꾩뿉�꽌 �궗�슜
                                 setHName : function (hName) {
                                     this.hName = hName;
                                     return this;
                                 },
-                                setHWidth : function (hWidth) {
-                                    this.hWidth = hWidth;
-                                    return this;
-                                },
                                 setHChecked : function (hChecked) {
                                     this.hChecked = hChecked;
                                     return this;
                                 },
-                                setHAlign : function (hAlign) {
-                                    this.hAlign = hAlign;
-                                    return this;
-                                },
-                                setHSort : function (hSort) {
-                                    this.hSort = hSort;
-                                    return this;
-                                },
                                 setDName : function (dName) {
                                     this.dName = dName;
-                                    return this;
-                                },
-                                setDAlign : function (dAlign) {
-                                    this.dAlign = dAlign;
-                                    return this;
-                                },
-                                setDRenderer : function (dRenderer) {
-                                    this.dRenderer = dRenderer;
                                     return this;
                                 },
                                 setDVisible : function (dVisible) {
@@ -67,14 +40,6 @@
                                     this.dDateFormat = dDateFormat;
                                     return this;
                                 },
-                                setRowSpan : function (dRowSpan) {
-                                    this.rowSpan = dRowSpan;
-                                    return this;
-                                },
-                                setColSpan : function (dColSpan) {
-                                    this.colSpan = dColSpan;
-                                    return this;
-                                },
                                 setSubHead : function (dSubHead) {
                                     this.subHead = dSubHead;
                                     return this;
@@ -86,46 +51,6 @@
                             };
 
                             return tableConfig;
-                        },
-                        toggleChecked : function (checkStatus, datas) {
-                            //  �쟾泥� �꽑�깮 泥댄겕 諛뺤뒪瑜� �겢由��뻽�쓣 寃쎌슦
-                            angular.forEach(datas, function (data) {
-                                if (angular.isDefined(data.defaultYn)) {
-                                    if (!data.defaultYn) {
-                                        data.checked = checkStatus;
-                                    }
-                                }
-                                else {
-                                    data.checked = checkStatus;
-                                }
-                            });
-                        },
-                        radioChecked : function (target, datas) {
-                            //  �빐�떦 row 媛� �씪�뵒�삤 踰꾪듉�씪 寃쎌슦
-                            angular.forEach(datas, function (data) {
-                                if (target.id == data.id) {
-                                    data.checked = true;
-                                }
-                                else {
-                                    data.checked = false;
-                                }
-                            });
-                        },
-                        rowChecked : function (tableConfig, target, datas) {
-                            //  媛� row �쓽 泥댄겕諛뺤뒪/�씪�뵒�삤 踰꾪듉�쓣 �겢由��뻽�쓣 寃쎌슦
-                            if (tableConfig[0].dType == "checkbox") {
-                                target.checked = !target.checked;
-
-                                for (var data in datas) {
-                                    if (!data.checked) {
-                                        this.hChecked = false;
-                                        break;
-                                    }
-                                }
-                            }
-                            else if (tableConfig[0].dType == "radio") {
-                                this.radioChecked(target, datas);
-                            }
                         },
                         orderByColumn : "",  // table order By column name
                         reverse : true,
diff --git a/src/main/webapp/custom_components/js-tree/treeColumnGenerator.directive.js b/src/main/webapp/custom_components/js-tree/treeColumnGenerator.directive.js
index c6854fe..9d9c9cc 100644
--- a/src/main/webapp/custom_components/js-tree/treeColumnGenerator.directive.js
+++ b/src/main/webapp/custom_components/js-tree/treeColumnGenerator.directive.js
@@ -11,51 +11,76 @@
                         return function (scope, element, attrs) {
                             scope.data = scope[attrs["treeColumnGenerator"]];
 
+                            var myData = scope.data;
                             var makeTag = "";
-                            var treeStartToken = "�뵒";
 
                             scope.tableConfigs.forEach(function (tableConfig, index) {
+                                var txt = "";
+                                makeTag = '<span class="' + tableConfig.dVisible + '">';
 
-                                if (tableConfig.colSpan > 0) {
-                                    return;
-                                }
-
-                                makeTag = '<li class="' + tableConfig.dAlign + ' ' + tableConfig.dVisible + '">';
-
-                                if (tableConfig.dType === "checkbox") {
-                                    //  泥댄겕 諛뺤뒪�씪�븣
-                                    if (scope.data.defaultYn) {
-                                        makeTag += '<input type="checkbox" ng-checked="data.checked == true ? true : false" disabled ng-click="$root.$tableProvider.rowChecked(tableConfigs, data, fn.getResponseData())">';
+                                var viewData = myData[tableConfig.dName];
+                                if (tableConfig.dType === "CUSTOM_FIELD") {
+                                    var issueCustomFieldValueVos = myData.issueCustomFieldValueVos;
+                                    if (issueCustomFieldValueVos != null) {
+                                        for (let i = 0; i < issueCustomFieldValueVos.length; i++) {
+                                            if (issueCustomFieldValueVos[i].customFieldVo.id === tableConfig.dName) {
+                                                if (index > 0) { makeTag += ","; }
+                                                txt += issueCustomFieldValueVos[i].useValue;
+                                                break;
+                                            }
+                                        }
                                     }
-                                    else {
-                                        makeTag += '<input type="checkbox" ng-checked="data.checked == true ? true : false" ng-click="$root.$tableProvider.rowChecked(tableConfigs, data, fn.getResponseData())">';
-                                    }
+                                    makeTag += "<span  class='cursor issue-tree-item' translate='" + txt + "'></span>";
 
-                                    tableConfig.hChecked = false;
-                                }
-                                else if (tableConfig.dType === "radio") {
-                                    //  �씪�뵒�삤 踰꾪듉�씪�븣
-                                    makeTag += '<input type="radio" ng-checked="data.checked == true ? true : false" ng-click="$root.$tableProvider.rowChecked(tableConfigs, data, fn.getResponseData())">';
-                                }
-                                else if (tableConfig.dType === "date") {
-                                    makeTag += $filter('date')(scope.data[tableConfig.dName], $tableProvider.getDateFormat(tableConfig.dDateFormat, scope.data[tableConfig.dName]));
-                                }
-                                else {
-                                    if (angular.isDefined(scope.data[tableConfig.dName]) && scope.data[tableConfig.dName] != null) {
-                                        makeTag += '<span>' + scope.data[tableConfig.dName] + '</span>';
+                                } else {
+                                    if (tableConfig.dName === "assigneeTeam") {
+                                        var departmentVos = myData.departmentVos;
+                                        if (departmentVos != null) {
+                                            if (index > 0) { makeTag += ","; }
+                                            for (let i = 0; i < departmentVos.length; i++) {
+                                                if (i > 0) {
+                                                    txt += ",";
+                                                }
+                                                txt += departmentVos[i].departmentName;
+                                            }
+                                        }
+                                        makeTag += "<span  class='cursor issue-tree-item' translate='" + txt + "'></span>";
+                                    } else if (tableConfig.dName === "register") {
+                                        if (index > 0) { makeTag += ","; }
+                                        makeTag += "<span  class='cursor issue-tree-item' translate='" + myData.registerVo.name + "'></span>";
                                     }
-                                    else {
-                                        makeTag += '<span></span>';
+                                    else if (tableConfig.dName === "period") {
+                                        if (index > 0) { makeTag += ","; }
+                                        if (!$rootScope.isDefined(myData.startDate) && !$rootScope.isDefined(myData.completeDate)) {
+                                            makeTag += "<span translate='common.noDate'>湲곌컙 �뾾�쓬</span>";
+                                        }
+                                        else {
+                                            makeTag += '<span class="cursor" ng-click="event.changeDetailView(data.id)">'  + myData.startDate + ' ~ ' + myData.completeDate + '</span>';
+                                        }
+
+                                    }
+                                    else if (tableConfig.dName === "countDownIssue") {
+                                        if (index > 0) { makeTag += ","; }
+                                        makeTag += makeTag += "<span  class='cursor issue-tree-item' translate='(" + myData.downIssueCount + "/" + myData.downIssueAllCount + ")'></span>";
+                                    } else {
+                                        viewData = viewData != null ? viewData : "";
+
+                                        if (viewData !== "") {
+                                            if (index > 0) { makeTag += ","; }
+                                            makeTag += "<span ng-click=\"event.changeDetailView(data.id)\" class='cursor issue-tree-item' translate='" + viewData + "'></span>";
+                                        } else {
+                                            // makeTag += "<span>" + tableConfig.dName + " NOT FOUND</span> "; // �뵒踰꾧퉭�떆 �궗�슜
+                                            makeTag += "<span></span> ";
+                                        }
                                     }
                                 }
 
-                                makeTag += '</li>';
+                                makeTag += '</span>';
 
                                 var linkFn = $compile(makeTag);
                                 var content = linkFn(scope);
 
                                 element.append(content);
-
                             });
                         }
                     }
diff --git a/src/main/webapp/scripts/app/issue/issueAddRelation.controller.js b/src/main/webapp/scripts/app/issue/issueAddRelation.controller.js
index fd7d3cd..0109b26 100644
--- a/src/main/webapp/scripts/app/issue/issueAddRelation.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueAddRelation.controller.js
@@ -656,7 +656,6 @@
                                 id : parameter.id
                             });
 
-                            $rootScope.$broadcast("getIssueList");
                         }
                         else {
                             SweetAlert.error($filter("translate")("issue.failedIssueModify"), result.data.message.message); // �씠�뒋 �닔�젙 �떎�뙣
@@ -688,7 +687,10 @@
                         $resourceProvider.getPageContent(0, 10))).then(function (result) {
 
                         if (result.data.message.status === "success") {
-                            $scope.fn.getIssueDetail();
+                            //  �씠�뒋 �긽�꽭 �솕硫� �슂泥�
+                            $rootScope.$broadcast("getIssueDetail", {
+                                id : parameter.id
+                            });
                         }
                         else {
                             SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueRelation"), result.data.message.message); // "�뿰愿��씪媛� �깮�꽦 �떎�뙣"
diff --git a/src/main/webapp/scripts/app/issue/issueDetail.controller.js b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
index 647750a..7e8ffa1 100644
--- a/src/main/webapp/scripts/app/issue/issueDetail.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
@@ -497,7 +497,10 @@
 
                 // �뿰愿� �씠�뒋 �뀒�씠釉� �꽕�젙
                 function setRelTableConfigs(issueTableConfigVo) {
-                    if (issueTableConfigVo == null) makeRelTableConfigs(); return;
+                    if (issueTableConfigVo == null) {
+                        makeRelTableConfigs();
+                        return;
+                    }
                     var issueTableConfigs = issueTableConfigVo.issueTableConfigs;
 
                     //  �뿰愿� �뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 媛믪쓣 媛��졇���꽌 �쟻�슜�븳�떎.
diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js
index 265a815..a680cc3 100644
--- a/src/main/webapp/scripts/app/issue/issueList.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -41,7 +41,8 @@
                     getIssueTableConfigs : getIssueTableConfigs,  //  �궗�슜�옄 �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 媛믪쓣 媛��졇���꽌 �쟻�슜�븳�떎.
                     startExecute : startExecute, //  而⑦듃濡� 濡쒕뵫�떆 泥섏쓬�쑝濡� �떆�옉�릺�뒗 �븿�닔
                     getResponseData : getResponseData, //  而⑦듃濡� 濡쒕뵫�떆 泥섏쓬�쑝濡� �떆�옉�릺�뒗 �븿�닔
-                    onClickListMode : onClickListMode   // 由ъ뒪�듃 紐⑤뱶 蹂�寃쎌떆 �떎�뻾�릺�뒗 �븿�닔
+                    onClickListMode : onClickListMode,   // 由ъ뒪�듃 紐⑤뱶 蹂�寃쎌떆 �떎�뻾�릺�뒗 �븿�닔
+                    setDefaultTableConfig : setDefaultTableConfig // 湲곕낯 �뀒�씠釉� �꽕�젙 �꽭�똿
                 };
 
                 //  蹂��닔
@@ -87,6 +88,7 @@
                     registers : [], //  �벑濡앹옄
                     customFields : [],  //  �궗�슜�옄 �젙�쓽 �븘�뱶
                     issueTableConfigs : [],  //  �씠�뒋 �뀒�씠釉� �꽕�젙
+                    issueTreeConfigs : [],  //  �씠�뒋 �뀒�씠釉� �꽕�젙
                     parentIssueId : "",
                     hideIssue : false,
                     listMode : 0, // 紐⑸줉 紐⑤뱶 0:湲곕낯 由ъ뒪�듃 1:�듃由ш뎄議� 由ъ뒪�듃
@@ -201,6 +203,7 @@
                 //  �씠�뒋 �뀒�씠釉� �꽕�젙
                 function makeTableConfigs() {
                     $scope.vm.tableConfigs = [];
+                    $scope.vm.treeConfigs = [];
 
                     $scope.vm.tableConfigs.push($tableProvider.config()
                         .setDType("checkbox")
@@ -244,81 +247,44 @@
 
                 //  �듃由� 而щ읆�쓣 留뚮뱾�뼱以��떎.
                 function setTreeColumn(issueTableConfig) {
-
                     //  �씪諛� 而щ읆
                     switch(issueTableConfig.key) {
                         case "ISSUE_TITLE" :   //  �씠�뒋 �젣紐�
                             $scope.vm.treeConfigs.push($treeProvider.config()
-                                .setHName("issue.issueTitle")
-                                .setDType("renderer")
-                                .setHWidth("bold " + issueTableConfig.width)
-                                .setDAlign("text-center")
-                                .setDRenderer("ISSUE_TITLE"));
+                                .setDName("title"));
                             break;
 
                         case "PRIORITY" :   //  �슦�꽑�닚�쐞
                             $scope.vm.treeConfigs.push($treeProvider.config()
-                                .setHName("common.priority")
-                                .setDName("priorityName")
-                                .setDType("renderer")
-                                .setHWidth("bold " + issueTableConfig.width)
-                                .setDAlign("text-center")
-                                .setDRenderer("COMMON_PRIORITY"));
+                                .setDName("priorityName"));
                             break;
                         case "SEVERITY" :   //  以묒슂�룄
                             $scope.vm.treeConfigs.push($treeProvider.config()
-                                .setHName("common.importance")
-                                .setDName("severityName")
-                                .setDType("renderer")
-                                .setHWidth("bold " + issueTableConfig.width)
-                                .setDAlign("text-center")
-                                .setDRenderer("COMMON_SEVERITY"));
+                                .setDName("severityName"));
                             break;
                         case "ISSUE_TYPE" : //  �씠�뒋 ���엯
                             $scope.vm.treeConfigs.push($treeProvider.config()
-                                .setHName("issue.issueType")
-                                .setHWidth("bold " + issueTableConfig.width)
-                                .setDAlign("text-center")
                                 .setDName("issueTypeName"));
                             break;
                         case "ASSIGNEE_TEAM" :   //  �떞�떦遺��꽌
                             $scope.vm.treeConfigs.push($treeProvider.config()
-                                .setHName("common.assigneeTeam")
-                                .setDType("renderer")
-                                .setHWidth("bold " + issueTableConfig.width)
-                                .setDAlign("text-center")
-                                .setDRenderer("ISSUE_DEPARTMENT"));
+                                .setDName("assigneeTeam"));
                             break;
                         case "REGISTER" :   //  �벑濡앹옄
                             $scope.vm.treeConfigs.push($treeProvider.config()
-                                .setHName("common.register")
-                                .setDType("renderer")
-                                .setHWidth("bold " + issueTableConfig.width)
-                                .setDAlign("text-center")
-                                .setDRenderer("REGISTER"));
+                                .setDName("register"));
                             break;
                         case "PERIOD" : //  湲곌컙
                             $scope.vm.treeConfigs.push($treeProvider.config()
-                                .setHName("common.period")
-                                .setDType("renderer")
-                                .setHWidth("bold " + issueTableConfig.width)
-                                .setDAlign("text-center")
-                                .setDRenderer("ISSUE_DUE_DATE"));
+                                .setDName("period"));
                             break;
                         case "MODIFY_DATE" : //  理쒓렐 蹂�寃쎌씪
                             $scope.vm.treeConfigs.push($treeProvider.config()
-                                .setHName("common.lastChangeDate")
-                                .setHWidth("bold " + issueTableConfig.width)
-                                .setDAlign("text-center")
                                 .setDName("modifyDate"));
                             break;
                         case "COUNT_DOWN_ISSUE" : //  �븯�쐞 �씠�뒋 媛쒖닔
                             $scope.vm.treeConfigs.push($treeProvider.config()
-                                .setHName("common.countDownIssue")
-                                .setDType("renderer")
-                                .setHWidth("bold " + issueTableConfig.width)
-                                .setDAlign("text-center")
-                                .setDRenderer("DOWN_ISSUE_COUNT"));
+                                .setDName("countDownIssue"));
                             break;
                     }
 
@@ -330,12 +296,9 @@
 
                             if (customField.id === Number(issueTableConfig.key.substring(13))) {
                                 $scope.vm.treeConfigs.push($treeProvider.config()
-                                    .setHName(customField.name)
-                                    .setDType("renderer")
-                                    .setHWidth("bold " + issueTableConfig.width)
-                                    .setDAlign("text-center")
-                                    .setColumnHint(customField)
-                                    .setDRenderer("ISSUE_CUSTOM_FIELD_VALUE_VIEW"));
+                                    .setDType("CUSTOM_FIELD")
+                                    .setDName(customField.id)
+                                    .setColumnHint(customField));
                                 break;
                             }
                         }
@@ -599,6 +562,7 @@
 
                 //  �씠�뒋 紐⑸줉�쓣 議고쉶�븳�떎.
                 function getPageList(selectedPage, detail = false) {
+                    $rootScope.spinner = true;  //  �봽濡쒓렇�옒�뒪 諛�
                     if (selectedPage < 0) {
                         selectedPage = 0;
                     }
@@ -666,6 +630,7 @@
                         else {
                             SweetAlert.error($filter("translate")("issue.failedIssueLookup"), result.data.message.message); // �씠�뒋 議고쉶 �떎�뙣
                         }
+                        $rootScope.spinner = false;  //  �봽濡쒓렇�옒�뒪 諛�
 
                     });
                 }
@@ -1178,6 +1143,41 @@
                     }
                 }
 
+                function setDefaultTableConfig() {
+                    //  理쒖큹 �뾽臾� 怨듦컙�뿉 �뱾�뼱�솕�쓣 寃쎌슦
+                    $scope.vm.issueTableConfigs = [{
+                        name : $filter("translate")("issue.issueTitle"), // �씠�뒋 �젣紐�
+                        key : "ISSUE_TITLE",
+                        width : "width-140-p",
+                        position : 1,
+                        display : true
+                    }, {
+                        name : $filter("translate")("common.priority"), // �슦�꽑�닚�쐞
+                        key : "PRIORITY",
+                        width : "width-80-p",
+                        position : 2,
+                        display : true
+                    }, {
+                        name : $filter("translate")("common.importance"), // 以묒슂�룄
+                        key : "SEVERITY",
+                        width : "width-80-p",
+                        position : 3,
+                        display : true
+                    }, {
+                        name : $filter("translate")("issue.issueType"), // �씠�뒋 ���엯
+                        key : "ISSUE_TYPE",
+                        width : "width-140-p",
+                        position : 4,
+                        display : true
+                    }, {
+                        name : $filter("translate")("common.assigneeTeam"), // �떞�떦遺��꽌
+                        key : "ASSIGNEE_TEAM",
+                        width : "width-140-p",
+                        position : 5,
+                        display : true
+                    }];
+                }
+
                 //  理쒖큹 �떎�뻾
                 function startExecute() {
                     // �뙆�씪誘명꽣 �씫湲�
@@ -1214,38 +1214,7 @@
                                 });
                             }
                             else {
-                                //  理쒖큹 �뾽臾� 怨듦컙�뿉 �뱾�뼱�솕�쓣 寃쎌슦
-                                $scope.vm.issueTableConfigs = [{
-                                    name : $filter("translate")("issue.issueTitle"), // �씠�뒋 �젣紐�
-                                    key : "ISSUE_TITLE",
-                                    width : "width-140-p",
-                                    position : 1,
-                                    display : true
-                                }, {
-                                    name : $filter("translate")("common.priority"), // �슦�꽑�닚�쐞
-                                    key : "PRIORITY",
-                                    width : "width-80-p",
-                                    position : 2,
-                                    display : true
-                                }, {
-                                    name : $filter("translate")("common.importance"), // 以묒슂�룄
-                                    key : "SEVERITY",
-                                    width : "width-80-p",
-                                    position : 3,
-                                    display : true
-                                }, {
-                                    name : $filter("translate")("issue.issueType"), // �씠�뒋 ���엯
-                                    key : "ISSUE_TYPE",
-                                    width : "width-140-p",
-                                    position : 4,
-                                    display : true
-                                }, {
-                                    name : $filter("translate")("common.assigneeTeam"), // �떞�떦遺��꽌
-                                    key : "ASSIGNEE_TEAM",
-                                    width : "width-140-p",
-                                    position : 5,
-                                    display : true
-                                }];
+                                $scope.fn.setDefaultTableConfig();
                             }
 
                             //  �씠�뒋 �뀒�씠釉� �꽕�젙
diff --git a/src/main/webapp/views/common/header.html b/src/main/webapp/views/common/header.html
index 9383080..adab7ca 100644
--- a/src/main/webapp/views/common/header.html
+++ b/src/main/webapp/views/common/header.html
@@ -1,7 +1,7 @@
 <link href="/assets/font/dripicons/webfont.css" rel="stylesheet">
 <div class="top-bar color-scheme-light" owl-profile-over>
     <div class="top-menu-controls row">
-        <div class="top-left col-lg-8">
+        <div class="top-left col-lg-7">
             <h3>
                 <span class="badge badge-primary vertical-middle">PROJECT</span> {{$root.workProject.name}}
             </h3>
@@ -25,9 +25,24 @@
 
             </select>
         </div>
-        <div class="top-right col-lg-4">
+        <div class="top-right col-lg-5">
+            <div class="input-group">
+                <input class="form-control"
+                       type="text"
+                       tabindex="-1"
+                       maxlength="300"
+                       kr-input
+                       owl-auto-focus
+                       ng-model="vm.searchAll.keyWord"
+                       placeholder="{{'issue.pleaseEnterIssueKeyWord' | translate}}">
+                <div class="input-group-prepend ml-10">
+                    <button class="btn btn-navy" ng-click="fn.searchAll(0)"> <span translate="common.search">寃��깋</span></button>
+                </div>
+            </div>
+
+
             <!-- �쟾泥� �봽濡쒖젥�듃 �씪�븣 �씠�뒋 留뚮뱾湲� 踰꾪듉 �닲源� -->
-            <button class="btn btn-xlg btn-primary btn-rounded mr-10" ng-if="$root.workProject.id > -1" ng-click="fn.addIssue()" tabindex="-1">
+            <button class="btn btn-xlg btn-primary btn-rounded mr-10 ml-3" ng-if="$root.workProject.id > -1" ng-click="fn.addIssue()" tabindex="-1">
                 <i class="os-icon os-icon-plus"></i> <span translate="issue.createIssue">�씠�뒋 留뚮뱾湲�</span>
             </button>
 
diff --git a/src/main/webapp/views/issue/issueListNormal.html b/src/main/webapp/views/issue/issueListNormal.html
index 2c18f42..e81993d 100644
--- a/src/main/webapp/views/issue/issueListNormal.html
+++ b/src/main/webapp/views/issue/issueListNormal.html
@@ -343,7 +343,7 @@
                                 <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">
+                                    <div class="btn-group" ng-if="vm.listMode === 0">
                                         <button aria-expanded="false" aria-haspopup="true"
                                                 tabindex="-1"
                                                 class="btn btn-secondary dropdown-toggle"
@@ -370,7 +370,7 @@
                                   event="tableEvent" detail-view="vm.detailView"></js-table>
 
                         <js-tree ng-if="vm.listMode === 1"
-                                  data="vm.responseData.data" table-configs="vm.tableConfigs"
+                                  data="vm.responseData.data" table-configs="vm.treeConfigs"
                                   event="tableEvent" detail-view="vm.detailView"></js-tree>
                     </div>
                     <div class="controls-below-table text-center">

--
Gitblit v1.8.0