From b6be6b9f2d2bfaa73e5ead9f1e6c198a6811399a Mon Sep 17 00:00:00 2001 From: wyu <kknd09321@nate.com> Date: 화, 23 11월 2021 10:28:40 +0900 Subject: [PATCH] 이슈 상세 연관,하위 테이블 표시 설정 - [프론트] --- src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js | 7 + src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js | 2 src/main/webapp/views/issue/issueRelationTableConfig.html | 18 +- src/main/webapp/views/issue/issueDownTableConfig.html | 16 +- src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js | 5 src/main/webapp/scripts/app/issue/issueDetail.controller.js | 204 +++++++++++++++++++++++++--------------- src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js | 8 7 files changed, 156 insertions(+), 104 deletions(-) diff --git a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js index a23128e..77fd121 100644 --- a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js +++ b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js @@ -266,10 +266,10 @@ makeTag += '<div owl-profile-over class="" table-user-image="data" target="userVos"></div>'; break; - // case "ISSUE_DEPARTMENT" : - // scope.data.registsrVos = [scope.data.registerVo]; - // makeTag += '<div owl-profile-over class="" table-user-image="data" target="departmentVos"></div>'; - // break; + case "ISSUE_DEPARTMENT" : + scope.data.registsrVos = [scope.data.registerVo]; + makeTag += '<div owl-profile-over class="" table-user-image="data" target="departmentVos"></div>'; + break; case "REGISTER" : scope.data.registsrVos = [scope.data.registerVo]; diff --git a/src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js b/src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js index ab50ce1..314fc34 100644 --- a/src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js +++ b/src/main/webapp/scripts/app/issue/issueAddDownTableConfig.controller.js @@ -99,10 +99,11 @@ if (result.data.message.status === "success") { SweetAlert.success($filter("translate")("issue.completedSavingIssueTable"), $filter("translate")("issue.saveIssueTableSettingsInformation")); // "�씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �셿猷�", "�씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂닿� ���옣�릺�뿀�뒿�땲�떎." - // 蹂�寃쎈맂 �씠�뒋 �뀒�씠釉� �젙蹂대�� �씠�뒋 紐⑸줉 �뀒�씠釉붿뿉 媛깆떊�븳�떎. - $rootScope.$broadcast("getDownIssueTableConfigs", {}); swal.close(); $scope.fn.cancel(); + // 蹂�寃쎈맂 �씠�뒋 �뀒�씠釉� �젙蹂대�� �씠�뒋 紐⑸줉 �뀒�씠釉붿뿉 媛깆떊�븳�떎. + $rootScope.$broadcast("getDownIssueTableConfigs", {}); + } else { SweetAlert.error($filter("translate")("issue.failedToSaveIssueTableSetting"), result.data.message.message); // �씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �떎�뙣 diff --git a/src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js b/src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js index 0b291cb..c708827 100644 --- a/src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js +++ b/src/main/webapp/scripts/app/issue/issueAddRelationTableConfig.controller.js @@ -11,6 +11,7 @@ app.controller('issueAddRelationTableConfigController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$uibModalInstance', 'SweetAlert', '$timeout', 'IssueTableConfig', 'CustomField', '$q', '$filter', function ($scope, $rootScope, $log, $resourceProvider, $uibModalInstance, SweetAlert, $timeout, IssueTableConfig, CustomField, $q, $filter) { + // �븿�닔 紐⑥쓬 $scope.fn = { cancel : cancel, // �뙘�뾽 李� �떕湲� @@ -105,10 +106,12 @@ if (result.data.message.status === "success") { SweetAlert.success($filter("translate")("issue.completedSavingIssueTable"), $filter("translate")("issue.saveIssueTableSettingsInformation")); // "�씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �셿猷�", "�씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂닿� ���옣�릺�뿀�뒿�땲�떎." - // 蹂�寃쎈맂 �씠�뒋 �뀒�씠釉� �젙蹂대�� �씠�뒋 紐⑸줉 �뀒�씠釉붿뿉 媛깆떊�븳�떎. - $rootScope.$broadcast("getRelIssueTableConfigs", {}); swal.close(); $scope.fn.cancel(); + + // 蹂�寃쎈맂 �씠�뒋 �뀒�씠釉� �젙蹂대�� �씠�뒋 紐⑸줉 �뀒�씠釉붿뿉 媛깆떊�븳�떎. + $rootScope.$broadcast("getRelIssueTableConfigs", {}); + } else { SweetAlert.error($filter("translate")("issue.failedToSaveIssueTableSetting"), result.data.message.message); // �씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �떎�뙣 diff --git a/src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js b/src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js index 37e33ef..8b844bd 100644 --- a/src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js +++ b/src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js @@ -93,9 +93,9 @@ SweetAlert.success($filter("translate")("issue.completedSavingIssueTable"), $filter("translate")("issue.saveIssueTableSettingsInformation")); // "�씠�뒋 �뀒�씠釉� �꽕�젙 ���옣 �셿猷�", "�씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂닿� ���옣�릺�뿀�뒿�땲�떎." // 蹂�寃쎈맂 �씠�뒋 �뀒�씠釉� �젙蹂대�� �씠�뒋 紐⑸줉 �뀒�씠釉붿뿉 媛깆떊�븳�떎. - $rootScope.$broadcast("getIssueTableConfigs", {}); swal.close(); $scope.fn.cancel(); + $rootScope.$broadcast("getIssueTableConfigs", {}); } else { SweetAlert.error($filter("translate")("issue.failedToSaveIssueTableSetting"), 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 de8343e..6c65f71 100644 --- a/src/main/webapp/scripts/app/issue/issueDetail.controller.js +++ b/src/main/webapp/scripts/app/issue/issueDetail.controller.js @@ -15,7 +15,7 @@ $scope.fn.getIssueDetail = getIssueDetail; // �씠�뒋 �긽�꽭 �젙蹂� 媛��졇�삤湲� $scope.fn.setRelTableColumn = setRelTableColumn; - $scope.fn.setTableColumnDown = setTableColumnDown; + $scope.fn.setDownTableColumn = setDownTableColumn; $scope.fn.addComment = addComment; // �뙎湲� �벑濡� $scope.fn.removeComment = removeComment; // �뙎湲� �궘�젣 $scope.fn.getCommentList = getCommentList; // �뙎湲� 紐⑸줉 媛��졇�삤湲� @@ -39,6 +39,7 @@ $scope.fn.addRelationIssueTableConfig = addRelationIssueTableConfig; // �뿰愿� �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 $scope.fn.addDownIssueTableConfig = addDownIssueTableConfig; // �븯�쐞 �씠�뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 $scope.fn.getRelTableConfigs = getRelTableConfigs; + $scope.fn.getDownTableConfigs = getDownTableConfigs; // �씠�뒋 紐⑸줉 而⑦듃濡ㅻ윭 vm, fn �긽�냽 以� $scope.vm.viewer = {}; @@ -299,39 +300,23 @@ } } - // �븯�쐞 �씠�뒋 �뀒�씠釉� �꽕�젙 - function makeTableConfigsDown() { - $scope.vm.downTableConfigs = []; - $scope.vm.downTableConfigs.push($tableProvider.config() - .setHName("issue.downIssueTitle") - .setDType("renderer") - .setHWidth("width-60 bold") - .setHSort(false) - .setDRenderer("ISSUE_DOWN_MOVE")) - $scope.vm.downTableConfigs.push($tableProvider.config() - .setHName("issue.relationIssueDelete") - .setDType("renderer") - .setHWidth("width-10 bold") - .setDRenderer("ISSUE_DOWN_DELETE") - .setHSort(false) - .setDAlign("text-center")) - angular.forEach($scope.vm.relTableConfigs, function (issueTableConfig) { - // �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎. - if (issueTableConfig.display) { - // �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎. - $scope.fn.setTableColumnDown(issueTableConfig); - } - }); - } - // �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎. - function setTableColumnDown(issueTableConfig) { - if (issueTableConfig == null) return; + // �뀒�씠釉붿쓽 �븯�쐞 �씠�뒋 而щ읆�쓣 留뚮뱾�뼱以��떎. + function setDownTableColumn(issueTableConfig) { + // if (issueTableConfig == null) return; - // �씪諛� 而щ읆 + // �븯�쐞 �씠�뒋 而щ읆 switch(issueTableConfig.key) { + case "DOWN_ISSUE_TITLE" : // �슦�꽑�닚�쐞 + $scope.vm.downTableConfigs.push($tableProvider.config() + .setHName("issue.downIssueTitle") + .setDType("renderer") + .setHWidth("bold " + issueTableConfig.width) + .setDAlign("text-center") + .setDRenderer("ISSUE_DOWN_MOVE")); + break; case "PRIORITY" : // �슦�꽑�닚�쐞 - $scope.vm.tableConfigs.push($tableProvider.config() + $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("common.priority") .setDName("priorityName") .setDType("renderer") @@ -340,7 +325,7 @@ .setDRenderer("COMMON_PRIORITY")); break; case "SEVERITY" : // 以묒슂�룄 - $scope.vm.tableConfigs.push($tableProvider.config() + $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("common.importance") .setDName("severityName") .setDType("renderer") @@ -349,14 +334,14 @@ .setDRenderer("COMMON_SEVERITY")); break; case "ISSUE_TYPE" : // �씠�뒋 ���엯 - $scope.vm.tableConfigs.push($tableProvider.config() + $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("issue.issueType") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setDName("issueTypeName")); break; case "ASSIGNEE_TEAM" : // �떞�떦遺��꽌 - $scope.vm.tableConfigs.push($tableProvider.config() + $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("common.assigneeTeam") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) @@ -364,7 +349,7 @@ .setDRenderer("ISSUE_DEPARTMENT")); break; case "REGISTER" : // �벑濡앹옄 - $scope.vm.tableConfigs.push($tableProvider.config() + $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("common.register") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) @@ -372,7 +357,7 @@ .setDRenderer("REGISTER")); break; case "PERIOD" : // 湲곌컙 - $scope.vm.tableConfigs.push($tableProvider.config() + $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("common.period") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) @@ -380,7 +365,7 @@ .setDRenderer("ISSUE_DUE_DATE")); break; case "MODIFY_DATE" : // 理쒓렐 蹂�寃쎌씪 - $scope.vm.tableConfigs.push($tableProvider.config() + $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("common.lastChangeDate") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") @@ -395,7 +380,7 @@ var customField = $scope.vm.customFields[count]; if (customField.id === Number(issueTableConfig.key.substring(13))) { - $scope.vm.tableConfigs.push($tableProvider.config() + $scope.vm.downTableConfigs.push($tableProvider.config() .setHName(customField.name) .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) @@ -408,8 +393,11 @@ } } + + + // �뿰愿� �씠�뒋 �뀒�씠釉� �꽕�젙 - function makeTableConfigs() { + function makeRelTableConfigs() { $scope.vm.relTableConfigs = []; $scope.vm.relTableConfigs.push($tableProvider.config() .setHName("issue.relationIssueType") @@ -424,7 +412,7 @@ .setHSort(false) .setDRenderer("ISSUE_RELATION_MOVE")) - angular.forEach($scope.vm.issueTableConfigs, function (issueTableConfig) { + angular.forEach($scope.vm.relTableConfigs, function (issueTableConfig) { // �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎. if (issueTableConfig.display) { // �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎. @@ -433,9 +421,32 @@ }); } + // �븯�쐞 �씠�뒋 �뀒�씠釉� �꽕�젙 + function makeDownTableConfigs() { + $scope.vm.downTableConfigs = []; + $scope.vm.downTableConfigs.push($tableProvider.config() + .setHName("issue.downIssueTitle") + .setDType("renderer") + .setHWidth("width-60 bold") + .setHSort(false) + .setDRenderer("ISSUE_DOWN_MOVE")) + $scope.vm.downTableConfigs.push($tableProvider.config() + .setHName("issue.relationIssueDelete") + .setDType("renderer") + .setHWidth("width-10 bold") + .setDRenderer("ISSUE_DOWN_DELETE") + .setHSort(false) + .setDAlign("text-center")) + angular.forEach($scope.vm.downTableConfigs, function (issueTableConfig) { + // �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎. + if (issueTableConfig.display) { + // �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎. + $scope.fn.setDownTableColumn(issueTableConfig); + } + }); + } - - + // �뿰愿� �씠�뒋 �긽�꽭 議고쉶 function getRelTableConfigs() { var content = { issueId : $scope.vm.viewer.id @@ -466,7 +477,47 @@ }); } else { - makeTableConfigs(); + makeRelTableConfigs(); + } + + } else { + SweetAlert.swal($filter("translate")("issue.errorRemovableIssueStatusList"), result.data.message.message, "error"); // "�씠�룞 媛��뒫�븳 �씠�뒋 �긽�깭 紐⑸줉 議고쉶 �삤瑜�" + } + }); + } + + // �븯�쐞 �씠�뒋 �긽�꽭 議고쉶 + function getDownTableConfigs() { + var content = { + issueId : $scope.vm.viewer.id + }; + + IssueTableConfig.downDetail($resourceProvider.getContent( + content, + $resourceProvider.getPageContent(0, 0))).then(function (result) { + + if (result.data.message.status === "success") { + var issueTableConfigs = result.data.data; + + // �뿰愿� �뒋 紐⑸줉 �뀒�씠釉� �꽕�젙 媛믪쓣 媛��졇���꽌 �쟻�슜�븳�떎. + if ($rootScope.isDefined(issueTableConfigs)) { + // �씠�뒋 �뀒�씠釉� �꽕�젙 �젙蹂대�� ���옣 �븳�떎. + $scope.vm.issueDownTableConfigs = []; + $scope.vm.issueDownTableConfigs = JSON.parse(issueTableConfigs); + $scope.vm.issueDownTableConfigs.sort(function (a, b) { + return a.position < b.position ? -1 : a.position > b.position ? 1 : 0; + }); + + angular.forEach($scope.vm.issueDownTableConfigs, function (issueTableConfig) { + // �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎. + if (issueTableConfig.display) { + // �뀒�씠釉붿쓽 而щ읆�쓣 留뚮뱾�뼱以��떎. + $scope.fn.setDownTableColumn(issueTableConfig); + } + }); + + } else { + makeDownTableConfigs(); } } @@ -474,10 +525,37 @@ SweetAlert.swal($filter("translate")("issue.errorRemovableIssueStatusList"), result.data.message.message, "error"); // "�씠�룞 媛��뒫�븳 �씠�뒋 �긽�깭 紐⑸줉 議고쉶 �삤瑜�" } }); - - } + + + + // �뿰愿� �씠�뒋 異붽� + function addRelationIssue() { + if ($scope.vm.issueName.length == 0 || $scope.vm.form.issues.length == 0 + || $scope.vm.issueName != $scope.vm.form.issues[0].title) { + SweetAlert.error($filter("translate")("issue.errorSelectRelationIssue"), ""); + return; + } + + var contents = { + relationIssueType : $scope.vm.relationIssueType.id, + issueId : $rootScope.currentDetailIssueId, + relationIssueId : $scope.vm.form.issues[0].id + }; + + IssueRelation.add($resourceProvider.getContent( + contents, + $resourceProvider.getPageContent(0, 10))).then(function (result) { + + if (result.data.message.status === "success") { + $scope.fn.getIssueDetail(); + } + else { + SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueRelation"), result.data.message.message); // "�뿰愿��씪媛� �깮�꽦 �떎�뙣" + } + }); + } // �븯�쐞 �씠�뒋 異붽� function addDownIssue() { @@ -505,35 +583,6 @@ } }); } - - - // �뿰愿� �씠�뒋 異붽� - function addRelationIssue() { - if ($scope.vm.issueName.length == 0 || $scope.vm.form.issues.length == 0 - || $scope.vm.issueName != $scope.vm.form.issues[0].title) { - SweetAlert.error($filter("translate")("issue.errorSelectRelationIssue"), ""); - return; - } - - var contents = { - relationIssueType : $scope.vm.relationIssueType.id, - issueId : $rootScope.currentDetailIssueId, - relationIssueId : $scope.vm.form.issues[0].id - }; - - IssueRelation.add($resourceProvider.getContent( - contents, - $resourceProvider.getPageContent(0, 10))).then(function (result) { - - if (result.data.message.status === "success") { - $scope.fn.getIssueDetail(); - } - else { - SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueRelation"), result.data.message.message); // "�뿰愿��씪媛� �깮�꽦 �떎�뙣" - } - }); - } - // �씠�뒋紐낆쓣 �겢由��븯硫� �씠�뒋 �긽�꽭 �젙蹂대�� 議고쉶�븳�떎. $scope.$on("getIssueDetail", function (event, args) { @@ -664,6 +713,7 @@ $scope.fn.initReload(); $scope.fn.getRelTableConfigs(); + $scope.fn.getDownTableConfigs(); Issue.detail($resourceProvider.getContent( {id : $scope.vm.viewer.id, deep : "02"}, @@ -693,22 +743,20 @@ $scope.vm.form.issuesDown = []; $scope.vm.form.issuesDown.push(result.data.data); - // makeTableConfigs(); - // $scope.vm.relTableConfigs = result.data.relTableConfigs; - + // �뿰愿� �씠�뒋 諛섎났臾� angular.forEach(result.data.data.issueRelationVos, function (issueRelationVo){ issueRelationVo.relationIssueTypeName = $scope.vm.relationIssueTypes[issueRelationVo.relationIssueType].name; $scope.vm.form.issues.push(issueRelationVo.issueRelation); }); - // makeTableConfigsDown(); - // $scope.vm.downTableConfigs = result.data.downTableConfigs; + // �븯�쐞 �씠�뒋 諛섎ぉ臾� angular.forEach(result.data.data.issueDownVos, function (issueDownVo){ $scope.vm.form.issuesDown.push(issueDownVo.issue); }); $scope.vm.viewer.issueRelationVos = result.data.data.issueRelationVos; $scope.vm.viewer.issueDownVos = result.data.data.issueDownVos; + } } else { diff --git a/src/main/webapp/views/issue/issueDownTableConfig.html b/src/main/webapp/views/issue/issueDownTableConfig.html index 81506ba..9a2065f 100644 --- a/src/main/webapp/views/issue/issueDownTableConfig.html +++ b/src/main/webapp/views/issue/issueDownTableConfig.html @@ -28,14 +28,14 @@ </tr> </thead> <tbody> - <tr> - <td class="text-center"> - <span class="bold" translate="issue.issueTitle">�씠�뒋 �젣紐�</span> - </td> - <td class="text-center" colspan="3"> - <span class="text-danger bold" translate="issue.cannotChangedIssueTitle">�씠�뒋 �젣紐⑹� 蹂�寃쏀븷 �닔 �뾾�뒿�땲�떎.</span> - </td> - </tr> +<!-- <tr>--> +<!-- <td class="text-center">--> +<!-- <span class="bold" translate="issue.issueTitle">�씠�뒋 �젣紐�</span>--> +<!-- </td>--> +<!-- <td class="text-center" colspan="3">--> +<!-- <span class="text-danger bold" translate="issue.cannotChangedIssueTitle">�씠�뒋 �젣紐⑹� 蹂�寃쏀븷 �닔 �뾾�뒿�땲�떎.</span>--> +<!-- </td>--> +<!-- </tr>--> <tr ng-repeat="issueTableConfig in vm.issueTableConfigs"> <td class="text-center"> <span class="bold">{{issueTableConfig.name}}</span> diff --git a/src/main/webapp/views/issue/issueRelationTableConfig.html b/src/main/webapp/views/issue/issueRelationTableConfig.html index 81506ba..10ccde3 100644 --- a/src/main/webapp/views/issue/issueRelationTableConfig.html +++ b/src/main/webapp/views/issue/issueRelationTableConfig.html @@ -28,14 +28,14 @@ </tr> </thead> <tbody> - <tr> - <td class="text-center"> - <span class="bold" translate="issue.issueTitle">�씠�뒋 �젣紐�</span> - </td> - <td class="text-center" colspan="3"> - <span class="text-danger bold" translate="issue.cannotChangedIssueTitle">�씠�뒋 �젣紐⑹� 蹂�寃쏀븷 �닔 �뾾�뒿�땲�떎.</span> - </td> - </tr> +<!-- <tr>--> +<!-- <td class="text-center">--> +<!-- <span class="bold" translate="issue.issueTitle">�씠�뒋 �젣紐�</span>--> +<!-- </td>--> +<!-- <td class="text-center" colspan="3">--> +<!-- <span class="text-danger bold" translate="issue.cannotChangedIssueTitle">�씠�뒋 �젣紐⑹� 蹂�寃쏀븷 �닔 �뾾�뒿�땲�떎.</span>--> +<!-- </td>--> +<!-- </tr>--> <tr ng-repeat="issueTableConfig in vm.issueTableConfigs"> <td class="text-center"> <span class="bold">{{issueTableConfig.name}}</span> @@ -89,7 +89,7 @@ <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> + ng-click="fn.formSubmit()"><span translate="common.save"><a href="issueListNormal.html">���옣</a></span> </button> </div> </div> -- Gitblit v1.8.0