From 47c5ce77b114324effdce5b3735ed0e661846108 Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 목, 06 1월 2022 10:58:23 +0900 Subject: [PATCH] - 이슈 상세페이지 연관,하위 이슈 페이징 처리 --- src/main/webapp/scripts/app/issue/issueDetail.controller.js | 273 +++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 206 insertions(+), 67 deletions(-) diff --git a/src/main/webapp/scripts/app/issue/issueDetail.controller.js b/src/main/webapp/scripts/app/issue/issueDetail.controller.js index 3423551..e07ca8d 100644 --- a/src/main/webapp/scripts/app/issue/issueDetail.controller.js +++ b/src/main/webapp/scripts/app/issue/issueDetail.controller.js @@ -51,6 +51,9 @@ $scope.fn.containsPartner = containsPartner; $scope.fn.onActivate = onActivate; $scope.fn.issueBack = issueBack; + $scope.fn.removeRelationIssue = removeRelationIssue; + $scope.fn.removeDownIssue = removeDownIssue; + $scope.fn.changeDetailPageRowCount = changeDetailPageRowCount; // �럹�씠吏� 蹂�寃� // �씠�뒋 紐⑸줉 而⑦듃濡ㅻ윭 vm, fn �긽�냽 以� $scope.vm.viewer = {}; // �쁽�옱 �씠�뒋 @@ -87,6 +90,18 @@ issueHostingVos : [] }; + $scope.vm.responseData = { + data : [] + }; + + $scope.vm.page = { + selectedPage : 0, + selectedPageRowCount : String(10), + selectedRelPage : 0, + selectedRelPageRowCount : String(10), + selectedDownPage : 0, + selectedDownPageRowCount : String(10) + }; $scope.vm.issueNameDown = ""; // �꽑�깮�맂 �븯�쐞 �씪媛� �씠由� $scope.vm.autoCompletePageDown = { @@ -110,7 +125,7 @@ $scope.vm.relTableConfigs = []; // �뀒�씠釉� �씠踰ㅽ듃 $scope.relTableEvent = { - removeRelationIssue : removeRelationIssue, // �뿰愿� �씪媛� �궘�젣 + //removeRelationIssue : removeRelationIssue, // �뿰愿� �씪媛� �궘�젣 changeDetailView : changeDetailView }; @@ -118,7 +133,7 @@ $scope.vm.downTableConfigs = []; // �뀒�씠釉� �씠踰ㅽ듃 $scope.downTableEvent = { - removeDownIssue : removeDownIssue, // �뿰愿� �씪媛� �궘�젣 + //removeDownIssue : removeDownIssue, // �뿰愿� �씪媛� �궘�젣 changeDetailView : changeDetailView }; @@ -126,13 +141,23 @@ // �씠�뒋 踰덊샇瑜� ���옣�븳 �썑 �씠�뒋 紐⑸줉�쑝濡� �씠�룞�븳�떎. //$rootScope.$broadcast("makeIssueSearch",issue); $scope.$parent.tableEvent.changeDetailView(issue.id); + $scope.fn.onActivate(); } // �긽�쐞 �씠�뒋 �겢由��떆 �긽�쐞 �씠�뒋濡� �씠�룞 function issueBack() { - $rootScope.currentDetailIssueId = $scope.vm.viewer.parentIssueVo.id - $rootScope.$broadcast("getIssueDetail", {id: $rootScope.currentDetailIssueId}); + var index = $scope.$parent.vm.issueIds.length -2; + if (index > -1) { + var preIssueId = $scope.$parent.vm.issueIds[index]; + $scope.$parent.vm.issueIds.splice(index + 1, 1); + $scope.$parent.tableEvent.changeDetailView(preIssueId, true); + } + } + + // �럹�씠吏� 蹂�寃� + function changeDetailPageRowCount() { + $scope.fn.getIssueDetail(0,0); } function onActivate() { @@ -143,15 +168,46 @@ // �씠�뒋 紐⑸줉 �뜲�씠�꽣 媛깆떊 $scope.$on("getIssueList", function () { - $scope.fn.getIssueDetail(); + $scope.fn.getIssueDetail(0,0); }); // �븯�쐞 �씠�뒋 �궘�젣 - function removeDownIssue(id) { + function removeDownIssue() { + var removeIds = []; + var removePermission = true; + + angular.forEach($scope.vm.viewer.issueDownVos, 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")("project.notHaveDeletePermissionExistsProject"), // "�궘�젣 沅뚰븳�씠 �뾾�뒗 �봽濡쒖젥�듃媛� 議댁옱�빀�땲�떎." + 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.downIssueRemove"), // �븯�쐞 �씠�뒋 �궘�젣 - text : $filter("translate")("issue.wantToDeleteSelectIssue"), + text : $filter("translate")("issue.wantToDeleteSelectDownIssueInList"), type : "warning", showCancelButton : true, confirmButtonColor : "#DD6B55", @@ -167,7 +223,7 @@ $rootScope.spinner = true; var contents = { - id : id + ids : removeIds }; Issue.modifyParentIssue($resourceProvider.getContent( @@ -175,7 +231,7 @@ $resourceProvider.getPageContent(0, 10))).then(function (result) { if (result.data.message.status === "success") { - $scope.fn.getIssueDetail(); + $scope.fn.getIssueDetail(0,0); } else { SweetAlert.error($filter("translate")("issue.failedToIssueDeleteIssueDown"), result.data.message.message); // "�뿰愿��씪媛� �궘�젣 �떎�뙣" @@ -189,7 +245,38 @@ } // �뿰愿� �씠�뒋 �궘�젣 - function removeRelationIssue(id) { + function removeRelationIssue() { + var removeIds = []; + var removePermission = true; + + angular.forEach($scope.vm.viewer.issueRelationVos, 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.relationIssueRemove"), // �뿰愿� �씠�뒋 �궘�젣 @@ -209,7 +296,7 @@ $rootScope.spinner = true; var contents = { - id : id + removeIds : removeIds }; IssueRelation.delete($resourceProvider.getContent( @@ -217,7 +304,7 @@ $resourceProvider.getPageContent(0, 10))).then(function (result) { if (result.data.message.status === "success") { - $scope.fn.getIssueDetail(); + $scope.fn.getIssueDetail(0,0); } else { SweetAlert.error($filter("translate")("issue.failedToIssueDeleteIssueRelation"), result.data.message.message); // "�뿰愿��씪媛� �궘�젣 �떎�뙣" @@ -247,7 +334,6 @@ case "RELATION_ISSUE_TYPE" : // �뿰愿� �씠�뒋 援щ텇 $scope.vm.relTableConfigs.push($tableProvider.config() .setHName("issue.relationIssueType") - .setDName("relationIssueType") .setDType("renderer") .setDAlign("text-center") .setHWidth("bold " + Rel_issueTableConfig.width) @@ -258,7 +344,6 @@ case "RELATION_ISSUE_TITLE" : // �뿰愿� �씠�뒋 �젣紐� $scope.vm.relTableConfigs.push($tableProvider.config() .setHName("issue.relationIssueTitle") - .setDName("relationIssueTitle") .setDType("renderer") .setDAlign("text-center") .setHWidth("bold " + Rel_issueTableConfig.width) @@ -269,7 +354,6 @@ case "RELATION_PRIORITY" : // �뿰愿� �씠�뒋 �슦�꽑�닚�쐞 $scope.vm.relTableConfigs.push($tableProvider.config() .setHName("common.priority") - .setDName("relPriority") .setDType("renderer") .setHWidth("bold " + Rel_issueTableConfig.width) .setDAlign("text-center") @@ -278,7 +362,6 @@ case "RELATION_SEVERITY" : // �뿰愿� �씠�뒋 以묒슂�룄 $scope.vm.relTableConfigs.push($tableProvider.config() .setHName("common.importance") - .setDName("relSeverity") .setDType("renderer") .setHWidth("bold " + Rel_issueTableConfig.width) .setDAlign("text-center") @@ -287,7 +370,6 @@ case "RELATION_ASSIGNEE_TEAM" : // �뿰愿� �씠�뒋 �떞�떦遺��꽌 $scope.vm.relTableConfigs.push($tableProvider.config() .setHName("common.assigneeTeam") - .setDName("relAssigneeTeam") .setDType("renderer") .setHWidth("bold " + Rel_issueTableConfig.width) .setDAlign("text-center") @@ -297,7 +379,6 @@ case "RELATION_REGISTER" : // �뿰愿� �씠�뒋 �벑濡앹옄 $scope.vm.relTableConfigs.push($tableProvider.config() .setHName("common.register") - .setDName("relRegister") .setDType("renderer") .setHWidth("bold " + Rel_issueTableConfig.width) .setDAlign("text-center") @@ -306,7 +387,6 @@ case "RELATION_PERIOD" : // �뿰愿� �씠�뒋 湲곌컙 $scope.vm.relTableConfigs.push($tableProvider.config() .setHName("common.period") - .setDName("relPeriod") .setDType("renderer") .setHWidth("bold " + Rel_issueTableConfig.width) .setDAlign("text-center") @@ -316,8 +396,7 @@ $scope.vm.relTableConfigs.push($tableProvider.config() .setHName("common.lastChangeDate") .setHWidth("bold " + Rel_issueTableConfig.width) - .setDAlign("text-center") - .setDName("relModifyDate")); + .setDAlign("text-center")); break; } @@ -331,7 +410,6 @@ $scope.vm.relTableConfigs.push($tableProvider.config() .setHName(customField.name) .setDType("renderer") - .setDName("relCustomFieldName" + [count]) .setHWidth("bold " + Rel_issueTableConfig.width) .setDAlign("text-center") .setColumnHint(customField) @@ -352,7 +430,6 @@ case "DOWN_ISSUE_TITLE" : // �븯�쐞 �씠�뒋 �젣紐� $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("issue.downIssueTitle") - .setDName("downIssueTitle") .setDType("renderer") .setHWidth("bold " + Down_issueTableConfig.width) .setDAlign("text-center") @@ -362,7 +439,6 @@ case "ISSUE_DOWN_STATUS_TYPE" : // �씠�뒋 �긽�깭 $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("issue.issueStatus") - .setDName("downIssueStatus") .setDType("renderer") .setHWidth("bold " + Down_issueTableConfig.width) .setDAlign("text-center") @@ -372,7 +448,6 @@ case "DOWN_PRIORITY" : // �븯�쐞 �씠�뒋 �슦�꽑�닚�쐞 $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("common.priority") - .setDName("downPriority") .setDType("renderer") .setHWidth("bold " + Down_issueTableConfig.width) .setDAlign("text-center") @@ -381,7 +456,6 @@ case "DOWN_SEVERITY" : // 以묒슂�룄 $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("common.importance") - .setDName("downSeverity") .setDType("renderer") .setHWidth("bold " + Down_issueTableConfig.width) .setDAlign("text-center") @@ -390,7 +464,6 @@ case "DOWN_ASSIGNEE_TEAM" : // �떞�떦遺��꽌 $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("common.assigneeTeam") - .setDName("downAssigneeTeam") .setDType("renderer") .setHWidth("bold " + Down_issueTableConfig.width) .setDAlign("text-center") @@ -399,7 +472,6 @@ case "DOWN_REGISTER" : // �벑濡앹옄 $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("common.register") - .setDName("downRegister") .setDType("renderer") .setHWidth("bold " + Down_issueTableConfig.width) .setDAlign("text-center") @@ -408,7 +480,6 @@ case "DOWN_PERIOD" : // 湲곌컙 $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("common.period") - .setDName("downPeriod") .setDType("renderer") .setHWidth("bold " + Down_issueTableConfig.width) .setDAlign("text-center") @@ -418,8 +489,7 @@ $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("common.lastChangeDate") .setHWidth("bold " + Down_issueTableConfig.width) - .setDAlign("text-center") - .setDName("downModifyDate")); + .setDAlign("text-center")); break; } @@ -433,7 +503,6 @@ $scope.vm.downTableConfigs.push($tableProvider.config() .setHName(customField.name) .setDType("renderer") - .setDName("downCustomFieldName" + [count]) .setHWidth("bold " + Down_issueTableConfig.width) .setDAlign("text-center") .setColumnHint(customField) @@ -449,6 +518,10 @@ function makeRelTableConfigs() { $scope.vm.relTableConfigs = []; $scope.vm.relTableConfigs.push($tableProvider.config() + .setDType("checkbox") + .setHWidth("width-20-p") + .setDAlign("text-center")) + $scope.vm.relTableConfigs.push($tableProvider.config() .setHName("issue.relationIssueType") .setDType("renderer") .setDAlign("text-center") @@ -462,15 +535,16 @@ .setHWidth("width-60-p bold") .setHSort(false) .setDRenderer("ISSUE_RELATION_MOVE")) - $scope.vm.relTableConfigs.push($tableProvider.config() - .setHName("issue.relationIssueDelete") - .setDType("renderer") - .setDAlign("text-center") - .setHWidth("width-40-p bold") - .setDRenderer("ISSUE_RELATION_DELETE") - .setHSort(false) - .setDAlign("text-center")) - + /*if($scope.vm.viewer.modifyPermissionCheck) { + $scope.vm.relTableConfigs.push($tableProvider.config() + .setHName("issue.relationIssueDelete") + .setDType("renderer") + .setDAlign("text-center") + .setHWidth("width-40-p bold") + .setDRenderer("ISSUE_RELATION_DELETE") + .setHSort(false) + .setDAlign("text-center")) + }*/ angular.forEach($scope.vm.relTableConfigs, function (Rel_issueTableConfig) { // �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎. if (Rel_issueTableConfig.display) { @@ -484,13 +558,17 @@ function makeDownTableConfigs() { $scope.vm.downTableConfigs = []; $scope.vm.downTableConfigs.push($tableProvider.config() + .setDType("checkbox") + .setHWidth("width-20-p") + .setDAlign("text-center")) + $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("issue.downIssueTitle") .setDType("renderer") .setDAlign("text-center") .setHWidth("width-60-p bold") .setHSort(false) .setDRenderer("ISSUE_DOWN_MOVE")) - if($scope.vm.viewer.modifyPermissionCheck){ + /*if($scope.vm.viewer.modifyPermissionCheck){ $scope.vm.downTableConfigs.push($tableProvider.config() .setHName("issue.relationIssueDelete") .setDType("renderer") @@ -499,7 +577,7 @@ .setDRenderer("ISSUE_DOWN_DELETE") .setHSort(false) .setDAlign("text-center")) - } + }*/ angular.forEach($scope.vm.downTableConfigs, function (Down_issueTableConfig) { // �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎. @@ -543,6 +621,10 @@ .setHWidth("width-60-p bold") .setHSort(false) .setDRenderer("ISSUE_RELATION_MOVE"))*/ + $scope.vm.relTableConfigs.push($tableProvider.config() + .setDType("checkbox") + .setHWidth("width-20-p") + .setDAlign("text-center")) angular.forEach($scope.vm.issueRelTableConfigs, function (Rel_issueTableConfig) { // �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎. if (Rel_issueTableConfig.display) { @@ -551,14 +633,15 @@ } }); - $scope.vm.relTableConfigs.push($tableProvider.config() - .setHName("issue.relationIssueDelete") - .setDType("renderer") - .setHWidth("width-40-p bold") - .setDRenderer("ISSUE_RELATION_DELETE") - .setHSort(false) - .setDAlign("text-center")) - + /*if($scope.vm.viewer.modifyPermissionCheck) { + $scope.vm.relTableConfigs.push($tableProvider.config() + .setHName("issue.relationIssueDelete") + .setDType("renderer") + .setHWidth("width-40-p bold") + .setDRenderer("ISSUE_RELATION_DELETE") + .setHSort(false) + .setDAlign("text-center")) + }*/ } else { makeRelTableConfigs(); } @@ -586,6 +669,10 @@ .setHWidth("width-60-p bold") .setHSort(false) .setDRenderer("ISSUE_DOWN_MOVE"))*/ + $scope.vm.downTableConfigs.push($tableProvider.config() + .setDType("checkbox") + .setHWidth("width-20-p") + .setDAlign("text-center")) angular.forEach($scope.vm.issueDownTableConfigs, function (Down_issueTableConfig) { // �몴�떆 ���긽�씤 而щ읆留� �솕硫댁뿉 洹몃젮以��떎. if (Down_issueTableConfig.display) { @@ -593,14 +680,15 @@ $scope.fn.setDownTableColumn(Down_issueTableConfig); } }); - $scope.vm.downTableConfigs.push($tableProvider.config() - .setHName("issue.relationIssueDelete") - .setDType("renderer") - .setHWidth("width-40-p bold") - .setDRenderer("ISSUE_DOWN_DELETE") - .setHSort(false) - .setDAlign("text-center")) - + /*if($scope.vm.viewer.modifyPermissionCheck) { + $scope.vm.downTableConfigs.push($tableProvider.config() + .setHName("issue.relationIssueDelete") + .setDType("renderer") + .setHWidth("width-40-p bold") + .setDRenderer("ISSUE_DOWN_DELETE") + .setHSort(false) + .setDAlign("text-center")) + }*/ } else { makeDownTableConfigs(); } @@ -626,7 +714,7 @@ $resourceProvider.getPageContent(0, 10))).then(function (result) { if (result.data.message.status === "success") { - $scope.fn.getIssueDetail(); + $scope.fn.getIssueDetail(0,0); } else { SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueRelation"), result.data.message.message); // "�뿰愿��씪媛� �깮�꽦 �떎�뙣" @@ -642,9 +730,14 @@ return; } + var ids = []; + if ($scope.vm.form.issuesDown[0].id != null) { + ids.push($scope.vm.form.issuesDown[0].id); + } + var contents = { issueId : $rootScope.currentDetailIssueId, - id : $scope.vm.form.issuesDown[0].id, + ids : ids, parentIssueId : $rootScope.currentDetailIssueId }; @@ -653,7 +746,7 @@ $resourceProvider.getPageContent(0, 10))).then(function (result) { if (result.data.message.status === "success") { - $scope.fn.getIssueDetail(); + $scope.fn.getIssueDetail(0,0); } else { SweetAlert.error($filter("translate")("issue.failedToIssueAddIssueDown"), result.data.message.message); // "�뿰愿��씪媛� �깮�꽦 �떎�뙣" @@ -679,7 +772,7 @@ // }); $scope.$on("getIssueDetail", function (event, args) { - $scope.fn.getIssueDetail(); + $scope.fn.getIssueDetail(0,0); }); $scope.$watch(function() { @@ -687,7 +780,7 @@ }, function() { if ($rootScope.currentDetailIssueId != null) { $scope.vm.viewer.id = $rootScope.currentDetailIssueId; - $scope.fn.getIssueDetail(); + $scope.fn.getIssueDetail(0,0); } }, true); @@ -722,6 +815,20 @@ } function modifyDownIssueStatus() { + var issueIds = []; + + angular.forEach($scope.vm.viewer.issueDownVos, function (data) { + if (data.checked) { + issueIds.push(data.id); + //$scope.vm.projectId = data.projectId; + } + }); + + if (issueIds.length < 1) { + SweetAlert.warning($filter("translate")("issue.selectionCheck"), $filter("translate")("issue.selectIssueToChangeStatus")); // �꽑�깮 ���긽 �솗�씤, �긽�깭 蹂�寃쏀븷 �씠�뒋瑜� �꽑�깮�븯�꽭�슂. + return; + } + $uibModal.open({ templateUrl : 'views/issue/downIssueModifyStatus.html', size : "md", @@ -732,7 +839,8 @@ return { issueTypeId : $scope.vm.viewer.issueTypeVo.id, issueIds : [$scope.vm.viewer.id], - downIssues : $scope.vm.viewer.issueDownVos, + //downIssues : $scope.vm.viewer.issueDownVos, + downIssues : issueIds, projectId : $scope.vm.viewer.projectVo.id }; } @@ -862,19 +970,50 @@ } // �씠�뒋 �긽�꽭 �젙蹂� 議고쉶 - function getIssueDetail() { + function getIssueDetail(selectedRelPage, selectedDownPage) { $rootScope.spinner = true; + if (selectedRelPage < 0) { + selectedRelPage = 0; + } + if (selectedDownPage < 0) { + selectedDownPage = 0; + } + // �쁽�옱 �럹�씠吏� �젙蹂� + var currentRelPage = 0; + var currentDownPage = 0; + + // 荑좏궎�뿉 �꽑�깮�븳 �럹�씠吏� �젙蹂닿� �뾾�쑝硫� 湲곕낯 �럹�씠吏� �젙蹂� 0 �쓣 ���옣 + if (angular.isUndefined(selectedRelPage) || selectedRelPage === "") { + currentRelPage = $scope.vm.page.selectedRelPage; + } + else { + currentRelPage = selectedRelPage; + } + + if (angular.isUndefined(selectedDownPage) || selectedDownPage === "") { + currentDownPage = $scope.vm.page.selectedDownPage; + } + else { + currentDownPage = selectedDownPage; + } + // 珥덇린�솕 �빐�빞�븷 �븷紐⑹쓣 吏��젙�븯�뿬 �떎瑜� �씠�뒋瑜� �겢由��븷 �븣 珥덇린�솕�빐以��떎. $scope.fn.initReload(); // $scope.fn.getRelTableConfigs(); // $scope.fn.getDownTableConfigs(); Issue.detail($resourceProvider.getContent( {id : $scope.vm.viewer.id, deep : "02"}, - $resourceProvider.getPageContent(0, 1))).then(function (result) { + $resourceProvider.getSubPageContent(currentRelPage, $scope.vm.page.selectedRelPageRowCount + , currentDownPage, $scope.vm.page.selectedDownPageRowCount)) + ).then(function (result) { if (result.data.message.status === "success") { if (angular.isDefined(result.data.data)) { + $scope.vm.page.selectedRelPage = currentRelPage + 1; + $scope.vm.page.selectedDownPage = currentDownPage + 1; + $scope.vm.responseData = result.data; + $scope.vm.viewer = angular.copy(result.data.data); // �씠�뒋 �씠誘몄� 誘몃━ 蹂닿린 留뚮뱾湲� $scope.fn.makePreviewImages(result.data.data.attachedFileVos); -- Gitblit v1.8.0