From a080a3a500df0f6524057239563504e15bb666f1 Mon Sep 17 00:00:00 2001 From: wyu <kknd09321@nate.com> Date: 수, 17 11월 2021 10:45:32 +0900 Subject: [PATCH] 이슈 수정 진행[프론트] --- src/main/webapp/scripts/components/utils/autoComplete.controller.js | 1 src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js | 2 src/main/webapp/views/issue/issueAdd.html | 19 + src/main/webapp/views/issue/issueModify.html | 553 +++++++++++++++++++++++++++++++++--------- src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.css | 12 src/main/webapp/scripts/app/issue/issueAdd.controller.js | 12 src/main/webapp/scripts/app/issue/issueModify.controller.js | 136 ++++++++++ src/main/webapp/views/common/sidebar.html | 2 8 files changed, 589 insertions(+), 148 deletions(-) diff --git a/src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.css b/src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.css index 6bbb05c..0a6fe82 100644 --- a/src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.css +++ b/src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.css @@ -266,14 +266,4 @@ .daterangepicker.rtl .ranges { float: right; } .daterangepicker .calendar.left { - clear: none !important; } } - -/*datepicker button*/ -.date_button { - position: relative; - left: 9.3rem; - bottom: 1.5px; - border-radius: 3px; - font-size: 10px; - font-weight: bold; -} \ No newline at end of file + clear: none !important; } } \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js b/src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js index 10cf31c..0d51c9c 100644 --- a/src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js +++ b/src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js @@ -99,7 +99,7 @@ '<div class="calendar left">' + '<div class="daterangepicker_input">' + '<input class="input-mini form-control" type="text" name="daterangepicker_start" value="" />' + - '<i class="fa fa-calendar glyphicon glyphicon-calendar"><button class="date_button">湲곌컙�뾾�쓬</button></i>' + + '<i class="fa fa-calendar glyphicon glyphicon-calendar">' + '<div class="calendar-time">' + '<div></div>' + '<i class="fa fa-clock-o glyphicon glyphicon-time"></i>' + diff --git a/src/main/webapp/scripts/app/issue/issueAdd.controller.js b/src/main/webapp/scripts/app/issue/issueAdd.controller.js index 8f43e5f..36b56a7 100644 --- a/src/main/webapp/scripts/app/issue/issueAdd.controller.js +++ b/src/main/webapp/scripts/app/issue/issueAdd.controller.js @@ -309,22 +309,25 @@ function getProjectListCallBack(result) { $scope.vm.autoCompletePage.project.totalPage = result.data.page.totalPage; } + // �뾽泥댁젙蹂� autocomplete page �뾽�뜲�씠�듃 function getCompanyFieldListCallBack(result) { $scope.vm.autoCompletePage.companyField.totalPage = result.data.page.totalPage; } + // 遺��꽌�젙蹂� autocomplete page �뾽�뜲�씠�듃 function getIssueDepartmentListCallBack(result) { $scope.vm.autoCompletePage.department.totalPage = result.data.page.totalPage; } + // ISP�젙蹂� autocomplete page �뾽�뜲�씠�듃 function getIspFieldListCallBack(result) { $scope.vm.autoCompletePage.ispField.totalPage = result.data.page.totalPage; - } + + // �샇�뒪�똿�젙蹂� autocomplete page �뾽�뜲�씠�듃 function getHostingFieldListCallBack(result) { $scope.vm.autoCompletePage.hostingField.totalPage = result.data.page.totalPage; - } // �뤌 泥댄겕 @@ -352,6 +355,7 @@ $scope.vm.ispEmail = result[0].email; $scope.vm.ispMemo = result[0].memo; }); + // �샇�뒪�똿�젙蹂� 寃곌낵 媛� Event 泥섎━(set) $scope.$on("hostingFieldEvent", function (event, result) { $scope.vm.hostingCode = result[0].code; @@ -422,8 +426,8 @@ departmentIds : (function () { var departmentIds = []; - angular.forEach($scope.vm.form.departments, function (user) { - departmentIds.push(user.id); + angular.forEach($scope.vm.form.departments, function (department) { + departmentIds.push(department.id); }); return departmentIds; diff --git a/src/main/webapp/scripts/app/issue/issueModify.controller.js b/src/main/webapp/scripts/app/issue/issueModify.controller.js index 1795e34..010d31e 100644 --- a/src/main/webapp/scripts/app/issue/issueModify.controller.js +++ b/src/main/webapp/scripts/app/issue/issueModify.controller.js @@ -19,6 +19,10 @@ formCheck : formCheck, // �뤌 泥댄겕 getUserListCallBack : getUserListCallBack, // �떞�떦�옄 autocomplete �럹�씠吏� getProjectListCallBack : getProjectListCallBack, // �봽濡쒖젥�듃 autocomplete �럹�씠吏� + getCompanyFieldListCallBack : getCompanyFieldListCallBack, // �뾽泥댁젙蹂� autocomplete �럹�씠吏� + getIssueDepartmentListCallBack : getIssueDepartmentListCallBack, // �떞�떦�옄 -> �떞�떦遺��꽌 autocomplete �럹�씠吏� + getIspFieldListCallBack : getIspFieldListCallBack, // ISP�젙蹂� autocomplete �럹�씠吏� + getHostingFieldListCallBack : getHostingFieldListCallBack, // �샇�뒪�똿�젙蹂� autocomplete �럹�씠吏� getOptionColor : getOptionColor, // �슦�꽑�닚�쐞, 以묒슂�룄 �깋�긽�쑝濡� Select �깭洹� �쟻�슜 onFileSelect : onFileSelect, // �뙆�씪 泥⑤� imageUpload : imageUpload, // �꽟癒몃끂�듃 �씠誘몄� �뾽濡쒕뱶 @@ -30,6 +34,7 @@ setUseValueByIssueTypeCustomFields : setUseValueByIssueTypeCustomFields, // �씠�뒋�뿉�꽌 �궗�슜�옄媛� �꽑�깮�븳 �궗�슜�옄 �젙�쓽 �븘�뱶 媛믪쓣 �엯�젰 �뤌�뿉 �뀑�똿�븳�떎. detail : detail, // �씠�뒋 �젙蹂� 議고쉶 removeManager : removeManager, // �떞�떦�옄 �궘�젣 + removeDepartment : removeDepartment, // �떞�떦遺��꽌 �궘�젣 removeUploadFile : removeUploadFile, // �듅�젙 �뙆�씪�쓣 �궘�젣 setIssueTypeTemplate : setIssueTypeTemplate, // �씠�뒋 �쑀�삎 �뀥�뵆由� �쟻�슜�븯湲� startExecute : startExecute // 理쒖큹 �떎�뻾 @@ -44,11 +49,15 @@ title : "", // �젣紐� description : "", // �궡�슜 projects : [], // �봽濡쒖젥�듃 + companyFields : [], // �뾽泥댁젙蹂� + ispFields : [], // ISP �젙蹂� + hostingFields : [], // �샇�뒪�똿�젙蹂� issueTypeId : "", // �씠�뒋 �쑀�삎 �븘�씠�뵒 priorityId : "", // �슦�꽑�닚�쐞 �븘�씠�뵒 severityId : "", // 以묒슂�룄 �븘�씠�뵒 issueStatusId : "", // �씠�뒋 �긽�깭 �븘�씠�뵒 users : [], // �떞�떦�옄 + departments : [], // �뵥�떦遺��꽌 files : [], // �뾽濡쒕뱶 �뙆�씪 attachedFiles : [], // �꽟癒몃끂�듃濡� �뙆�씪 �뾽濡쒕뱶瑜� �븷 寃쎌슦 �꽌踰꾩뿉�꽌 pk瑜� �뵲怨� issue id�� �뿰�룞 �옉�뾽�씠 �븘�슂�븯�떎. startCompleteDateRange : "", // �떆�옉�씪 ~ 醫낅즺�씪 @@ -57,12 +66,46 @@ }, projectName : "", // �봽濡쒖젥�듃 紐� 寃��깋 userName : "", // �궗�슜�옄 寃��깋 + departmentName : "", // 遺��꽌紐� 寃��깋 + companyName : "", // �뾽泥대챸 寃��깋 + companyCode : "", // �뾽泥� 肄붾뱶 + companyManager : "", // �뾽泥� �떞�떦�옄 + companyTel : "", // �뾽泥� �쟾�솕踰덊샇 + companyEmail : "", // �뾽泥� �씠硫붿씪 + companyMemo : "", // �뾽泥� 鍮꾧퀬 + ispName : "", // ISP 紐� + ispCode : "", // ISP 肄붾뱶 + ispManager : "", // ISP �떞�떦�옄 + ispTel : "", // ISP �쟾�솕踰덊샇 + ispEmail : "", // ISP �씠硫붿씪 + ispMemo : "", // ISP 鍮꾧퀬 + hostingName : "", // �샇�뒪�똿紐� 寃��깋 + hostingManager : "", // �샇�뒪�똿 �떞�떦�옄 + hostingTel : "", // �샇�뒪�똿 �쟾�솕踰덊샇 + hostingEmail : "", // �샇�뒪�똿 �씠硫붿씪 + hostingMemo : "", // �샇�뒪�똿 鍮꾧퀬 autoCompletePage : { user : { page : 0, totalPage : 0 }, project : { + page : 0, + totalPage : 0 + }, + companyField : { + page : 0, + totalPage : 0 + }, + department : { + page : 0, + totalPage : 0 + }, + ispField : { + page : 0, + totalPage : 0 + }, + hostingField : { page : 0, totalPage : 0 } @@ -117,6 +160,11 @@ // �떞�떦�옄 �궘�젣 function removeManager(index) { $scope.vm.form.users.splice(index, 1); + } + + // �떞�떦遺��꽌 �궘�젣 + function removeDepartment(index) { + $scope.vm.form.departments.splice(index, 1); } // �꽟癒몃끂�듃 �씠誘몄� �뾽濡쒕뱶 @@ -262,6 +310,27 @@ $scope.vm.autoCompletePage.project.totalPage = result.data.page.totalPage; } + // �뾽泥댁젙蹂� autocomplete page �뾽�뜲�씠�듃 + function getCompanyFieldListCallBack(result) { + $scope.vm.autoCompletePage.companyField.totalPage = result.data.page.totalPage; + } + + // 遺��꽌�젙蹂� autocomplete page �뾽�뜲�씠�듃 + function getIssueDepartmentListCallBack(result) { + $scope.vm.autoCompletePage.department.totalPage = result.data.page.totalPage; + } + + // ISP�젙蹂� autocomplete page �뾽�뜲�씠�듃 + function getIspFieldListCallBack(result) { + $scope.vm.autoCompletePage.ispField.totalPage = result.data.page.totalPage; + } + + // �샇�뒪�똿�젙蹂� autocomplete page �뾽�뜲�씠�듃 + function getHostingFieldListCallBack(result) { + $scope.vm.autoCompletePage.hostingField.totalPage = result.data.page.totalPage; + } + + function formCheck(formInvalid) { if (formInvalid) { return true; @@ -273,6 +342,33 @@ return false; } + + // �뾽泥댁젙蹂� 寃곌낵 媛� Event 泥섎━(set) + $scope.$on("companyFieldEvent", function (event, result) { + $scope.vm.companyManager = result[0].manager; + $scope.vm.companyTel = result[0].tel; + $scope.vm.companyEmail = result[0].email; + $scope.vm.companyMemo = result[0].memo; + + }); + + // ISP�젙蹂� 寃곌낵 媛� Event 泥섎━(set) + $scope.$on("ispFieldEvent", function (event, result) { + $scope.vm.ispCode = result[0].code; + $scope.vm.ispManager = result[0].manager; + $scope.vm.ispTel = result[0].tel; + $scope.vm.ispEmail = result[0].email; + $scope.vm.ispMemo = result[0].memo; + }); + + // �샇�뒪�똿�젙蹂� 寃곌낵 媛� Event 泥섎━(set) + $scope.$on("hostingFieldEvent", function (event, result) { + $scope.vm.hostingCode = result[0].code; + $scope.vm.hostingManager = result[0].manager; + $scope.vm.hostingTel = result[0].tel; + $scope.vm.hostingEmail = result[0].email; + $scope.vm.hostingMemo = result[0].memo; + }); function formSubmit() { $rootScope.spinner = true; @@ -294,6 +390,35 @@ priorityId : $scope.vm.form.priorityId, // �슦�꽑�닚�쐞 �븘�씠�뵒 severityId : $scope.vm.form.severityId, // 以묒슂�룄 �븘�씠�뵒 issueStatusId : $scope.vm.form.issueStatusId, // �씠�뒋 �긽�깭 �븘�씠�뵒 + companyId : (function () { // �봽濡쒖젥�듃 �븘�씠�뵒 + var companyId = ""; + + if ($scope.vm.form.companyFields.length > 0) { + companyId = $scope.vm.form.companyFields[0].id; + } + + return companyId; + })(), + + ispId : (function () { + var ispId = ""; + + if ($scope.vm.form.ispFields.length > 0) { + ispId = $scope.vm.form.ispFields[0].id; + } + + return ispId; + })(), + hostingId : (function () { + var hostingId = ""; + + if ($scope.vm.form.hostingFields.length > 0) { + hostingId = $scope.vm.form.hostingFields[0].id; + } + + return hostingId; + })(), + userIds : (function () { var userIds = []; @@ -304,6 +429,15 @@ return userIds; })(), removeFiles : $scope.vm.form.removeFiles, + departmentIds : (function () { + var departmentIds = []; + + angular.forEach($scope.vm.form.departments, function (department) { + departmentIds.push(department.id); + }); + + return departmentIds; + })(), attachedFileIds : (function () { var attachedFileIds = []; @@ -535,7 +669,9 @@ $scope.vm.form.title = result.data.data.title; $scope.vm.form.description = result.data.data.description; $scope.vm.form.projects.push(result.data.data.projectVo); + $scope.vm.form.departments.push(result.data.data.departmentVo); $scope.vm.projectName = result.data.data.projectVo.name; + $scope.vm.departmentName = result.data.data.departmentVo.departmentName; $scope.vm.form.issueTypeId = String(result.data.data.issueTypeVo.id); $scope.vm.form.priorityId = String(result.data.data.priorityVo.id); $scope.vm.form.severityId = String(result.data.data.severityVo.id); diff --git a/src/main/webapp/scripts/components/utils/autoComplete.controller.js b/src/main/webapp/scripts/components/utils/autoComplete.controller.js index 3d9aed3..5a4c131 100644 --- a/src/main/webapp/scripts/components/utils/autoComplete.controller.js +++ b/src/main/webapp/scripts/components/utils/autoComplete.controller.js @@ -191,7 +191,6 @@ function getUserDepartmentList(query, excludeList, page, callBack) { var conditions = { departmentName : query, - departmentId : $rootScope.department.id, excludeIds : (function () { //excludeIds : �젣�쇅 �븷 由ъ뒪�듃 var excludeIds = []; angular.forEach(excludeList, function (exclude) { diff --git a/src/main/webapp/views/common/sidebar.html b/src/main/webapp/views/common/sidebar.html index 74e00e0..5705c8a 100644 --- a/src/main/webapp/views/common/sidebar.html +++ b/src/main/webapp/views/common/sidebar.html @@ -326,7 +326,7 @@ </li> <li class="sub-header" ng-if="$root.checkMngPermissionSettings()"> - <span>Etc</span> + <span>紐⑸줉愿�由�</span> </li> <li class="" ng-if="$root.checkMngPermission('USER_PERMISSION_MNG_ISSUE_STATUS')"> <a ui-sref="companyField.list" tabindex="-1"> diff --git a/src/main/webapp/views/issue/issueAdd.html b/src/main/webapp/views/issue/issueAdd.html index db3d11e..03bcee4 100644 --- a/src/main/webapp/views/issue/issueAdd.html +++ b/src/main/webapp/views/issue/issueAdd.html @@ -134,7 +134,7 @@ <div class="select3-selection__choicediv mt-10"> <span class="select3-selection__choice" ng-repeat="department in vm.form.departments"> <span>{{department.byName}}</span> - <span class="select3-selection__choice__remove" ng-click="fn.removeManager($index)">횞</span> + <span class="select3-selection__choice__remove" ng-click="fn.removeDepartment($index)">횞</span> </span> </div> </div> @@ -272,7 +272,8 @@ <div class="row"> <div class="col-lg-8 fontcolor_green"> <label class="issue-label"><span class="fontcolor_green" translate="companyField.info">�뾽泥댁젙蹂�</span> - <span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code> 媛� �젙蹂댁쓽 �씠由� �겢由��떆 �빐�떦 �씠由꾩쓽 �젙蹂닿� 議고쉶�맗�땲�떎.</span></label> + <span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code> �뾽泥� �씠由� �겢由��떆 �꽑�깮�맂 �씠由꾩쓽 �뾽泥� �젙蹂닿� 議고쉶�맗�땲�떎.</span> + </label> </div> </div> @@ -359,9 +360,12 @@ </div> </div> </div> + <p></p> <div class="row"> - <div class="col-lg-4 fontcolor_green"> - <label class="issue-label"><span class="fontcolor_green" translate="ispField.info">ISP �젙蹂�</span></label> + <div class="col-lg-8 fontcolor_green"> + <label class="issue-label"><span class="fontcolor_green" translate="ispField.info">ISP �젙蹂�</span> + <span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code> ISP �씠由� �겢由��떆 �꽑�깮�맂 �씠由꾩쓽 ISP �젙蹂닿� 議고쉶�맗�땲�떎.</span> + </label> </div> </div> @@ -462,9 +466,12 @@ </div> </div> </div> + <p></p> <div class="row"> - <div class="col-lg-4 fontcolor_green"> - <label class="issue-label"><span class="fontcolor_green" translate="hostingField.info">�샇�뒪�똿 �젙蹂�</span></label> + <div class="col-lg-8 fontcolor_green"> + <label class="issue-label"><span class="fontcolor_green" translate="hostingField.info">�샇�뒪�똿 �젙蹂�</span> + <span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code> �샇�뒪�똿 �씠由� �겢由��떆 �꽑�깮�맂 �씠由꾩쓽 �샇�뒪�똿 �젙蹂닿� 議고쉶�맗�땲�떎.</span> + </label> </div> </div> diff --git a/src/main/webapp/views/issue/issueModify.html b/src/main/webapp/views/issue/issueModify.html index adbb0b4..ee78357 100644 --- a/src/main/webapp/views/issue/issueModify.html +++ b/src/main/webapp/views/issue/issueModify.html @@ -9,11 +9,11 @@ </div> <div class="modal-body"> - <form role="form" name="issueModifyForm"> + <form role="form" name="issueAddForm"> <div class="form-group mb10"> - <label for="issueModifyForm1" class="issue-label"><span translate="issue.issueTitle">�씠�뒋 �젣紐�</span> <code + <label for="issueAddForm1" class="issue-label"><span translate="issue.issueTitle">�씠�뒋 �젣紐�</span> <code class="highlighter-rouge">*</code></label> - <input id="issueModifyForm1" + <input id="issueAddForm1" class="form-control input-sm" ng-model="vm.form.title" name="title" @@ -23,12 +23,14 @@ autocomplete="off" autofocus owl-auto-focus> - <small class="help-block form-text text-danger" ng-if="issueModifyForm.title.$touched && issueModifyForm.title.$error.required" translate="issue.requireIssueTitle">�씠�뒋 �젣紐⑹쓣 �엯�젰�븯�꽭�슂.</small> + <small class="help-block form-text text-danger" + ng-if="issueAddForm.title.$touched && issueAddForm.title.$error.required" + translate="issue.requireIssueTitle">�씠�뒋 �젣紐⑹쓣 �엯�젰�븯�꽭�슂. + </small> </div> - <div class="row"> <div class="col-lg-4"> - <div class="form-group mgb5"> + <div class="form-group mb10"> <label class="issue-label"> <span translate="common.project">�봽濡쒖젥�듃</span> <code class="highlighter-rouge">*</code></label> <js-autocomplete-single data-input-name="project" @@ -41,51 +43,46 @@ translation-texts="{ empty : 'common.emptyProject' }" extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> - <small translate="issue.initializedAssigneeCustomField">�봽濡쒖젥�듃瑜� 蹂�寃쏀븯硫� �떞�떦�옄, �궗�슜�옄 �젙�쓽 �븘�뱶 媛믪씠 珥덇린�솕 �맗�땲�떎.</small> </div> </div> <div class="col-lg-8 bdl1"> <div class="row"> <div class="col-md-4"> - <div class="form-group mgb5"> - <label for="issueModifyForm4" class="issue-label"> <span translate="issue.issueType">�씠�뒋 ���엯</span> - <code - class="highlighter-rouge">*</code></label> - <select id="issueModifyForm4" + <div class="form-group mb10"> + <label for="issueAddForm4" class="issue-label"> <span + translate="issue.issueType">�씠�뒋 ���엯</span> + <code class="highlighter-rouge">*</code></label> + <select id="issueAddForm4" name="issueType" - class="form-control input-sm" + class="form-control input-sm issue-select-label" ng-model="vm.form.issueTypeId" ng-change="fn.getIssueTypeCustomFields()" ng-style="{ 'color' : fn.getOptionColor(vm.issueTypes, vm.form.issueTypeId) }" required> - <option value="" translate="common.selectTarget" ng-style="{ 'color' : '#353535' }"> - <span translate="common.selectTarget">���긽 �꽑�깮</span> + <option value="" translate="common.selectTarget" ng-style="{ 'color' : '#353535' }"><span + translate="common.selectTarget">���긽 �꽑�깮</span> </option> <option ng-repeat="issueType in vm.issueTypes" ng-style="{ 'color' : issueType.color, 'font-weight': 600 }" value="{{issueType.id}}">�뿈 {{issueType.name}} </option> </select> - <small translate="issue.initializedIssueStatus">�씠�뒋 ���엯�쓣 蹂�寃쏀븷 寃쎌슦 �궗�슜�옄 �젙�쓽 �븘�뱶, �씠�뒋 �긽�깭媛� 珥덇린�솕 - �맗�땲�떎. - </small> </div> </div> - <div class="col-md-4"> <div class="form-group mb10"> - <label for="issueModifyForm2" class="issue-label"> + <label for="issueAddForm2" class="issue-label"> <span translate="common.priority">�슦�꽑 �닚�쐞</span> <code class="highlighter-rouge">*</code> </label> - <select id="issueModifyForm2" + <select id="issueAddForm2" name="priority" class="form-control input-sm issue-select-label" ng-model="vm.form.priorityId" ng-style="{ 'color' : fn.getOptionColor(vm.priorities, vm.form.priorityId) }" required> - <option value="" translate="common.selectTarget" ng-style="{ color : '#353535' }"> + <option value="" translate="common.selectTarget" ng-style="{ 'color' : '#353535' }"> <span translate="common.selectTarget">���긽 �꽑�깮</span> </option> <option ng-repeat="priority in vm.priorities" @@ -96,16 +93,16 @@ </select> </div> </div> - <div class="col-md-4"> <div class="form-group mb10"> - <label for="issueModifyForm3" class="issue-label"> <span translate="common.importance">以묒슂�룄</span> - <code class="highlighter-rouge">*</code></label> - <select id="issueModifyForm3" + <label for="issueAddForm3" class="issue-label"> <span + translate="common.importance">以묒슂�룄</span> <code + class="highlighter-rouge">*</code></label> + <select id="issueAddForm3" name="severity" class="form-control input-sm issue-select-label" ng-model="vm.form.severityId" - ng-style="{ 'color' : fn.getOptionColor(vm.severities, vm.form.severityId)}" + ng-style="{ 'color' : fn.getOptionColor(vm.severities, vm.form.severityId) }" required> <option value="" translate="common.selectTarget" ng-style="{ color : '#353535' }"> <span translate="common.selectTarget">���긽 �꽑�깮</span> @@ -121,50 +118,33 @@ </div> </div> </div> - - <div class="form-group mb10"> - <label class="issue-label"><span translate="common.content">�궡�슜</span></label> - <summernote - class="summernote" - lang="ko-KR" - summer-note-auto-focus - ng-model="vm.form.description" - data-editor="vm.summerNote.editor" - data-editable="vm.summerNote.editable" - on-image-upload="fn.imageUpload(files)" - target=".note-editable"></summernote> - </div> - + <hr> <div class="row"> <div class="col-lg-4"> - <div class="form-group mgb5"> + <div class="form-group mb10"> <label class="issue-label"> <span translate="common.assigneeTeam">�떞�떦遺��꽌</span> </label> - <js-input-autocomplete data-input-name="departments" + <js-autocomplete-multi data-input-name="department" selected-model="vm.form.departments" search="vm.departmentName" - page="vm.autoCompletePage.department.page" - total-page="vm.autoCompletePage.department.totalPage" - source="fn.getDepartmentList(vm.departmentName, vm.form.departments, vm.autoCompletePage.department.page, fn.getDepartmentListCallBack)" - input-disabled="vm.form.departments.length == 0" - translation-texts="{ empty : 'common.emptyDepartment'}" - extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : true, imagePathProp : 'profile', - type : 'department', maxlength : 100, autoResize : true, stopRemoveBodyEvent : true }"></js-input-autocomplete> + source="fn.getIssueDepartmentList(vm.departmentName, vm.form.departments)" + input-disabled="false" + translation-texts="{ count : 'common.userNum', empty : 'common.emptyDepartment'}" + extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : false, maxlength : 100, autoResize : true}"></js-autocomplete-multi> - <div class="select3-selection__choicediv"> + <div class="select3-selection__choicediv mt-10"> <span class="select3-selection__choice" ng-repeat="department in vm.form.departments"> - <span class="avatar-w"></span> - <!-- <img ng-src="{{department.profile}}">--> - <span>{{department.name}}({{department.id}})</span> - <span class="select3-selection__choice__remove" - ng-click="fn.removeManager($index)">횞</span> + <span>{{department.byName}}</span> + <span class="select3-selection__choice__remove" ng-click="fn.removeDepartment($index)">횞</span> </span> </div> </div> + </div> - <div class="form-group mgb5"> - <label for="issueModifyForm5" class="issue-label"> <span translate="common.period">湲곌컙</span> - </label> - <input id="issueModifyForm5" + <div class="col-lg-4"> + <div class="form-group mb10"> + <label for="issueAddForm5" class="issue-label"> <span translate="common.period">湲곌컙</span></label> + <input id="issueAddForm5" + tabindex="-1" type="text" readonly class="form-control cursor" @@ -180,7 +160,8 @@ </div> </div> </div> - + </div> + <div class="col-lg-4"> <div class="form-group mgb5"> <label class="issue-label"><span translate="common.attachFiles">�뙆�씪 泥⑤�</span></label> <div class="filebox input-group"> @@ -188,7 +169,8 @@ placeholder="{{'users.pleaseSelectFile' | translate}}" tabindex="-1" disabled="disabled"> - <label for="uploadFileField"><span translate="common.selectFile">�뙆�씪�꽑�깮</span></label> + <label for="uploadFileField"><span + translate="common.selectFile">�뙆�씪�꽑�깮</span></label> <input id="uploadFileField" tabindex="-1" type="file" @@ -196,14 +178,10 @@ multiple ng-file-select="fn.onFileSelect($files)"> </div> - <small translate="issue.attachOnlyFiles">hwp, jpg, png, txt, pptx, ppt, pdf, xlsx, xls, - docx, zip, gif, jpeg, doc, tif, bmp, wmv, avi, mp4, mkv, mov �뙆�씪留� 泥⑤��븷 �닔 �엳�뒿�땲�떎. - </small> <div class="select2-selection__choicediv"> <div class="select2-selection__choice2" ng-repeat="file in vm.form.files"> - <div class="select2-selection__choice2__remove" - ng-click="fn.removeUploadFile($index)"> + <div class="select2-selection__choice2__remove" ng-click="fn.removeUploadFile($index)"> 횞 </div> <div class="ssg-items ssg-items-blocks"> @@ -215,12 +193,7 @@ <i class="os-icon os-icon-film" ng-if="file.fileType == 'MEDIA'"></i> <!-- �씠誘몄�(�뾽濡쒕뱶 �쟾) --> <i class="os-icon os-icon-documents-07" - ng-if="file.fileType == 'IMAGE' && !$root.isDefined(file.path)"></i> - <!-- �씠誘몄�(�뾽濡쒕뱶 �썑) --> - <span class="attached-media-w" - ng-if="file.fileType == 'IMAGE' && $root.isDefined(file.path)"> - <img ng-src="{{file.path}}"> - </span> + ng-if="file.fileType == 'IMAGE'"></i> <!-- 湲고� --> <i class="os-icon os-icon-ui-51" ng-if="file.fileType == 'ETC'"></i> </div> @@ -236,69 +209,401 @@ </div> </div> </div> + </div> + <div class="row"> + <div class="col-lg-4 fontcolor_green"> + <label class="issue-label"><span class="fontcolor_green" translate="common.detectingInfo">�깘吏��젙蹂�</span></label> + </div> + </div> - <div class="col-lg-8 bdl1"> - <div class="row"> - <div class="col-md-12"> - <div class="form-group mgb5" ng-show="vm.form.issueCustomFields.length < 1"> - <label class="issue-label" translate="issue.notIssueTypeCustomFields">�씠�뒋 ���엯�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶媛� �뾾�뒿�땲�떎.</label> - </div> + <div class="col-lg-8"> + <div class="row"> + <div class="col-md-12"> + <div class="form-group mgb5" ng-show="vm.form.issueCustomFields.length < 1"> + <label class="issue-label" translate="issue.notIssueTypeCustomFields">�씠�뒋 ���엯�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 + �븘�뱶媛� �뾾�뒿�땲�떎.</label> </div> + </div> - <div class="col-md-6" ng-repeat="issueCustomField in vm.form.issueCustomFields"> - <div class="form-group mgb5"> - <label class="issue-label">{{issueCustomField.customFieldVo.name}}</label> + <div class="col-md-6" ng-repeat="issueCustomField in vm.form.issueCustomFields"> + <div class="form-group mgb5"> + <label class="issue-label">{{issueCustomField.customFieldVo.name}}</label> - <div ng-switch on="issueCustomField.customFieldVo.customFieldType"> - <!-- 湲곕낯 �엯�젰 --> - <div ng-switch-when="INPUT"> - <input type="text" class="form-control input-sm" - ng-model="issueCustomField.useValues" - maxlength="100" - autocomplete="off" - kr-input - ng-required="issueCustomField.fieldOption == '01'"> - </div> + <div ng-switch on="issueCustomField.customFieldVo.customFieldType"> + <!-- 湲곕낯 �엯�젰 --> + <div ng-switch-when="INPUT"> + <input type="text" class="form-control input-sm" + ng-model="issueCustomField.useValues" + maxlength="100" + autocomplete="off" + kr-input + ng-required="issueCustomField.fieldOption == '01'"> + </div> - <!-- �떒�씪 ���젆�듃 --> - <div ng-switch-when="SINGLE_SELECT"> - <select class="form-control input-sm" - ng-required="issueCustomField.fieldOption == '01'" - ng-model="issueCustomField.useValues"> - <option value="">�꽑�깮�븯�꽭�슂.</option> - <option ng-repeat="customFieldValueVo in issueCustomField.customFieldVo.customFieldValueVos" - value="{{customFieldValueVo.value}}" - ng-selected="$root.selectOption(issueCustomField.useValues, customFieldValueVo.value)"> - {{customFieldValueVo.value}} - </option> - </select> - </div> + <!-- �떒�씪 ���젆�듃 --> + <div ng-switch-when="SINGLE_SELECT"> + <select class="form-control input-sm issue-select-label" + ng-required="issueCustomField.fieldOption == '01'" + ng-model="issueCustomField.useValues"> + <option value="" value="" translate="common.choose">�꽑�깮�븯�꽭�슂.</option> + <option ng-repeat="customFieldValueVo in issueCustomField.customFieldVo.customFieldValueVos" + value="{{customFieldValueVo.value}}" + ng-selected="$root.selectOption(issueCustomField.useValues, customFieldValueVo.value)"> + {{customFieldValueVo.value}} + </option> + </select> + </div> - <!-- 硫��떚 ���젆�듃 --> - <div ng-switch-when="MULTI_SELECT"> - <ng-dropdown-multiselect class="multiSelect cursor" - data-input-name="" - selected-model="issueCustomField.useValues" - extra-settings="{ 'idProp' : 'value', 'externalIdProp' : 'value', 'displayProp' : 'value', 'stringTypeOption' : 'true', stopRemoveBodyEvent : true }" - options="issueCustomField.customFieldVo.customFieldValueVos"></ng-dropdown-multiselect> - </div> + <!-- 硫��떚 ���젆�듃 --> + <div ng-switch-when="MULTI_SELECT"> + <ng-dropdown-multiselect class="multiSelect cursor" + data-input-name="" + modal-form-auto-scroll + selected-model="issueCustomField.useValues" + extra-settings="{ 'idProp' : 'value', 'externalIdProp' : 'value', 'displayProp' : 'value', 'stringTypeOption' : 'true', stopRemoveBodyEvent : true }" + options="issueCustomField.customFieldVo.customFieldValueVos"></ng-dropdown-multiselect> </div> </div> </div> </div> </div> </div> - </form> - </div> + <hr> + <div class="row"> + <div class="col-lg-8 fontcolor_green"> + <label class="issue-label"><span class="fontcolor_green" translate="companyField.info">�뾽泥댁젙蹂�</span> + <span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code> �뾽泥� �씠由� �겢由��떆 �꽑�깮�맂 �씠由꾩쓽 �뾽泥� �젙蹂닿� 議고쉶�맗�땲�떎.</span> + </label> + </div> + </div> - <div class="modal-footer buttons-on-right"> - <button type="button" class="btn btn-md btn-grey" ng-click="fn.cancel()" tabindex="-1"><span - translate="common.cancel">痍⑥냼</span></button> - <button type="button" class="btn btn-md btn-primary bold" - js-short-cut - js-short-cut-action="(fn.formCheck(issueModifyForm.$invalid) || $root.spinner) ? null : fn.formSubmit()" - ng-disabled="fn.formCheck(issueModifyForm.$invalid)" - ng-click="fn.formSubmit()"><span translate="common.save">���옣</span> - </button> + <div class="row"> + <div class="col-lg-4"> + <div class="form-group mb10"> + <label class="issue-label"> <span translate="companyField.name">�뾽泥댁씠由�</span> </label> + <js-autocomplete-single data-input-name="companyField" + selected-model="vm.form.companyFields" + search="vm.companyName" + source="fn.getCompanyFieldList(vm.companyName, vm.form.companyFields, vm.autoCompletePage.companyField.page, fn.getCompanyFieldListCallBack)" + page="vm.autoCompletePage.companyField.page" + total-page="vm.autoCompletePage.companyField.totalPage" + input-disabled="false" + translation-texts="{ empty : 'common.emptyCompany' }" + broad-cast="companyFieldEvent" + extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', + type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mb10"> + <label for="companyFieldManagerAddForm" class="issue-label"><span translate="companyField.manager">�떞�떦�옄</span></label> + <input id="companyFieldManagerAddForm" + name="companyManager" + type="text" + class="form-control" + autofocus + kr-input + input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" + autocomplete="off" + ng-model="vm.companyManager" + ng-maxlength="100" + maxlength="100" + > + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="companyFieldTelAddForm" class="issue-label"><span translate="companyField.tel">�쟾�솕踰덊샇</span></label> + <input id="companyFieldTelAddForm" + name="companyTel" + type="text" + class="form-control" + kr-input + ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/" + autocomplete="off" + ng-model="vm.companyTel" + maxlength="20"> + <div ng-show="issueAddForm.companyTel.$error.pattern" class="help-block form-text text-danger" + translate="companyField.invalidTelFormat">�쟾�솕踰덊샇 �삎�떇�씠 留욎� �븡�뒿�땲�떎. xxx-xxx-xxxx �삎�떇�쑝濡� �엯�젰�븯�꽭�슂. + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="companyFieldEmailAddForm" class="issue-label"><span translate="companyField.email">�씠硫붿씪</span></label> + <input id="companyFieldEmailAddForm" + name="companyEmail" + type="email" + class="form-control" + autocomplete="off" + maxLength="50" + ng-model="vm.companyEmail" + kr-input + ng-pattern="/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/"> + <div ng-show="issueAddForm.companyEmail.$error.pattern" class="help-block form-text text-danger" + translate="users.invalidEmailFormat">�씠硫붿씪 �삎�떇�씠 留욎� �븡�뒿�땲�떎. + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="companyFieldDescAddForm" class="issue-label"><span translate="companyField.memo">鍮꾧퀬</span></label> + <input id="companyFieldDescAddForm" + name="companyMemo" + type="text" + class="form-control" + kr-input + autocomplete="off" + ng-maxlength="200" + ng-model="vm.companyMemo" + maxlength="200"> + </div> + </div> + </div> + <p></p> + <div class="row"> + <div class="col-lg-8 fontcolor_green"> + <label class="issue-label"><span class="fontcolor_green" translate="ispField.info">ISP �젙蹂�</span> + <span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code> ISP �씠由� �겢由��떆 �꽑�깮�맂 �씠由꾩쓽 ISP �젙蹂닿� 議고쉶�맗�땲�떎.</span> + </label> + </div> + </div> + + <div class="row"> + <div class="col-lg-4"> + <div class="form-group mb10"> + <label class="issue-label"> <span translate="ispField.name">ISP �씠由�</span> </label> + <js-autocomplete-single data-input-name="ispField" + selected-model="vm.form.ispFields" + search="vm.ispName" + source="fn.getIspFieldList(vm.ispName, vm.form.ispFields, vm.autoCompletePage.ispField.page, fn.getIspFieldListCallBack)" + page="vm.autoCompletePage.ispField.page" + total-page="vm.autoCompletePage.ispField.totalPage" + input-disabled="false" + translation-texts="{ empty : 'common.emptyIsp' }" + broad-cast="ispFieldEvent" + extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', + type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mb10"> + <label for="ispFieldCodeAddForm" class="issue-label"><span translate="ispField.code">肄붾뱶</span></label> + <input id="ispFieldCodeAddForm" + name="ispCode" + type="text" + class="form-control" + kr-input + input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" + autocomplete="off" + ng-model="vm.ispCode" + ng-maxlength="100" + maxlength="100"> + </div> + </div> + + <div class="col-lg-4"> + <div class="form-group mb10"> + <label for="ispFieldManagerAddForm" class="issue-label"><span translate="ispField.manager">�떞�떦�옄</span></label> + <input id="ispFieldManagerAddForm" + name="ispManager" + type="text" + class="form-control" + kr-input + input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" + autocomplete="off" + ng-model="vm.ispManager" + ng-maxlength="100" + maxlength="100"> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="ispFieldTelAddForm" class="issue-label"><span translate="ispField.tel">�쟾�솕踰덊샇</span></label> + <input id="ispFieldTelAddForm" + name="ispTel" + type="text" + class="form-control" + kr-input + ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/" + autocomplete="off" + ng-model="vm.ispTel" + maxlength="20"> + <div ng-show="issueAddForm.ispTel.$error.pattern" class="help-block form-text text-danger" + translate="companyField.invalidTelFormat">�쟾�솕踰덊샇 �삎�떇�씠 留욎� �븡�뒿�땲�떎. xxx-xxx-xxxx �삎�떇�쑝濡� �엯�젰�븯�꽭�슂. + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="ispFieldEmailAddForm" class="issue-label"><span translate="ispField.email">�씠硫붿씪</span></label> + <input id="ispFieldEmailAddForm" + name="ispEmail" + type="email" + class="form-control" + autocomplete="off" + maxLength="50" + ng-model="vm.ispEmail" + kr-input + ng-pattern="/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/"> + <div ng-show="issueAddForm.ispEmail.$error.pattern" class="help-block form-text text-danger" + translate="users.invalidEmailFormat">�씠硫붿씪 �삎�떇�씠 留욎� �븡�뒿�땲�떎. + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="ispFieldDescAddForm" class="issue-label"><span translate="ispField.memo">鍮꾧퀬</span></label> + <input id="ispFieldDescAddForm" + name="ispMemo" + type="text" + class="form-control" + kr-input + autocomplete="off" + ng-model="vm.ispMemo" + ng-maxlength="200" + maxlength="200"> + </div> + </div> + </div> + <p></p> + <div class="row"> + <div class="col-lg-8 fontcolor_green"> + <label class="issue-label"><span class="fontcolor_green" translate="hostingField.info">�샇�뒪�똿 �젙蹂�</span> + <span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code> �샇�뒪�똿 �씠由� �겢由��떆 �꽑�깮�맂 �씠由꾩쓽 �샇�뒪�똿 �젙蹂닿� 議고쉶�맗�땲�떎.</span> + </label> + </div> + </div> + + <div class="row"> + <div class="col-lg-4"> + <div class="form-group mb10"> + <label class="issue-label"> <span translate="hostingField.name">�샇�뒪�똿 �씠由�</span> </label> + <js-autocomplete-single data-input-name="hostingField" + selected-model="vm.form.hostingFields" + search="vm.hostingName" + source="fn.getHostingFieldList(vm.hostingName, vm.form.hostingFields, vm.autoCompletePage.hostingField.page, fn.getHostingFieldListCallBack)" + page="vm.autoCompletePage.hostingField.page" + total-page="vm.autoCompletePage.hostingField.totalPage" + input-disabled="false" + translation-texts="{ empty : 'common.emptyHosting' }" + broad-cast="hostingFieldEvent" + extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', + type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mb10"> + <label for="hostingCodeManagerAdd" class="issue-label"><span translate="hostingField.code">�떞�떦�옄</span></label> + <input id="hostingCodeManagerAdd" + name="hostingCode" + type="text" + class="form-control" + kr-input + input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" + autocomplete="off" + ng-model="vm.hostingCode" + ng-maxlength="100" + maxlength="100"> + </div> + </div> + + <div class="col-lg-4"> + <div class="form-group mb10"> + <label for="hostingFieldManagerAdd" class="issue-label"><span translate="hostingField.manager">�떞�떦�옄</span></label> + <input id="hostingFieldManagerAdd" + name="hostingManager" + type="text" + class="form-control" + kr-input + input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" + autocomplete="off" + ng-model="vm.hostingManager" + ng-maxlength="100" + maxlength="100"> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="hostingFieldTelAdd" class="issue-label"><span translate="hostingField.tel">�쟾�솕踰덊샇</span></label> + <input id="hostingFieldTelAdd" + name="hostingTel" + type="text" + class="form-control" + kr-input + ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/" + autocomplete="off" + ng-model="vm.hostingTel" + maxlength="20"> + <div ng-show="issueAddForm.hostingTel.$error.pattern" class="help-block form-text text-danger" + translate="companyField.invalidTelFormat">�쟾�솕踰덊샇 �삎�떇�씠 留욎� �븡�뒿�땲�떎. xxx-xxx-xxxx �삎�떇�쑝濡� �엯�젰�븯�꽭�슂. + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="hostingFieldEmailAdd" class="issue-label"><span translate="hostingField.email">�씠硫붿씪</span></label> + <input id="hostingFieldEmailAdd" + name="hostingEmail" + type="email" + class="form-control" + autocomplete="off" + maxLength="50" + ng-model="vm.hostingEmail" + kr-input + ng-pattern="/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/"> + <div ng-show="issueAddForm.hostingEmail.$error.pattern" class="help-block form-text text-danger" + translate="users.invalidEmailFormat">�씠硫붿씪 �삎�떇�씠 留욎� �븡�뒿�땲�떎. + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="hostingFieldDescAdd" class="issue-label"><span translate="hostingField.memo">鍮꾧퀬</span></label> + <input id="hostingFieldDescAdd" + name="hostingMemo" + type="text" + class="form-control" + kr-input + autocomplete="off" + ng-model="vm.hostingMemo" + ng-maxlength="200" + maxlength="200"> + </div> + </div> + </div> + </form> + <hr> + <div class="form-group mb10"> + <label class="issue-label"><span translate="common.content">�궡�슜</span></label> + <summernote + class="summernote" + lang="ko-KR" + summer-note-auto-focus + ng-model="vm.form.description" + data-editor="vm.summerNote.editor" + data-editable="vm.summerNote.editable" + on-image-upload="fn.imageUpload(files)" + target=".note-editable"></summernote> + </div> </div> </div> + + +<div class="modal-footer buttons-on-right"> + <div class="pull-left"> + <label> + <input class="form-control issue-continue-checkbox pull-left" type="checkbox" ng-model="vm.infiniteAdd" + tabindex="-1"> + <span translate="issue.continueCreateIssue">�씠 �솕硫댁뿉�꽌 �씠�뒋瑜� 怨꾩냽 �깮�꽦�빀�땲�떎.</span> + </label> + </div> + <button type="button" class="btn btn-md btn-grey" ng-click="fn.cancel()" tabindex="-1"><span + translate="common.cancel">痍⑥냼</span></button> + <button type="button" class="btn btn-md btn-primary bold" + js-short-cut + js-short-cut-action="(fn.formCheck(issueAddForm.$invalid) || $root.spinner) ? null : fn.formSubmit()" + ng-disabled="fn.formCheck(issueAddForm.$invalid)" + ng-click="fn.formSubmit()"><span translate="common.save">���옣</span> + </button> +</div> \ No newline at end of file -- Gitblit v1.8.0