From ea58f79355dd5715c7889623f59f5e8fca81e811 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 목, 23 12월 2021 15:51:39 +0900
Subject: [PATCH] Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa

---
 src/main/webapp/views/customField/customFieldModify.html                   |   46 +++++---
 src/main/java/kr/wisestone/owl/web/controller/ApiController.java           |    4 
 src/main/webapp/assets/styles/main.css                                     |    4 
 src/main/webapp/scripts/app/customField/customFieldModify.controller.js    |    2 
 src/main/webapp/views/customField/customFieldAdd.html                      |   30 +++---
 src/main/java/kr/wisestone/owl/vo/UserVo.java                              |   18 +++
 src/main/webapp/scripts/app/api/apiSetting.controller.js                   |   83 +++++++++++++---
 src/main/webapp/views/api/apiSettingSpec.html                              |   18 ++-
 src/main/java/kr/wisestone/owl/service/UserDepartmentService.java          |    3 
 src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java           |   13 ++
 src/main/java/kr/wisestone/owl/service/impl/UserDepartmentServiceImpl.java |   19 +++
 src/main/webapp/views/issue/issueDetail.html                               |    2 
 src/main/webapp/scripts/app/customField/customFieldAdd.controller.js       |    2 
 src/main/webapp/views/common/sidebar.html                                  |    4 
 14 files changed, 183 insertions(+), 65 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/service/UserDepartmentService.java b/src/main/java/kr/wisestone/owl/service/UserDepartmentService.java
index b09e517..c4f11c3 100644
--- a/src/main/java/kr/wisestone/owl/service/UserDepartmentService.java
+++ b/src/main/java/kr/wisestone/owl/service/UserDepartmentService.java
@@ -1,5 +1,6 @@
 package kr.wisestone.owl.service;
 
+import kr.wisestone.owl.domain.Department;
 import kr.wisestone.owl.domain.UserDepartment;
 import kr.wisestone.owl.web.condition.UserCondition;
 import kr.wisestone.owl.web.condition.UserDepartmentCondition;
@@ -16,4 +17,6 @@
     void userDepartmentModify(UserDepartmentForm userDepartmentForm);
 
     List<UserDepartment> findByDepartmentId(Long id);
+
+    List<Department> findDepartment(Long id);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/UserDepartmentServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/UserDepartmentServiceImpl.java
index baa6a8a..33a101a 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/UserDepartmentServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/UserDepartmentServiceImpl.java
@@ -5,14 +5,15 @@
 import kr.wisestone.owl.constant.MsgConstants;
 import kr.wisestone.owl.domain.*;
 import kr.wisestone.owl.exception.OwlRuntimeException;
+import kr.wisestone.owl.mapper.UserMapper;
 import kr.wisestone.owl.repository.UserDepartmentRepository;
 import kr.wisestone.owl.service.DepartmentService;
 import kr.wisestone.owl.service.UserDepartmentService;
+import kr.wisestone.owl.service.UserService;
 import kr.wisestone.owl.util.ConvertUtil;
+import kr.wisestone.owl.util.MapUtil;
 import kr.wisestone.owl.vo.*;
-import kr.wisestone.owl.web.condition.DepartmentCondition;
 import kr.wisestone.owl.web.condition.UserCondition;
-import kr.wisestone.owl.web.condition.UserDepartmentCondition;
 import kr.wisestone.owl.web.form.UserDepartmentForm;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -94,6 +95,20 @@
         return this.userDepartmentRepository.findByDepartmentId(id);
     }
 
+    @Override
+    public List<Department> findDepartment(Long userId) {
+        List<UserDepartment> userDepartments = this.userDepartmentRepository.findByUserId(userId);
+        if (userDepartments != null && userDepartments.size() > 0) {
+
+            List<Department> departments = Lists.newArrayList();
+            for (UserDepartment userDepartment : userDepartments) {
+                Department department = this.departmentService.getDepartment(userDepartment.getDepartmentId());
+                departments.add(department);
+            }
+            return departments;
+        }
+        return null;
+    }
 
     // �궗�슜�옄 遺��꽌 ID濡� 議고쉶�븳�떎.
 //    @Override
diff --git a/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
index f209240..4387606 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
@@ -107,6 +107,9 @@
     private AttachedFileService attachedFileService;
 
     @Autowired
+    private UserDepartmentService userDepartmentService;
+
+    @Autowired
     private IssueService issueService;
 
     @Autowired
@@ -1245,6 +1248,16 @@
         // user�뿉�꽌 Permission 媛믪쓣 媛��졇���꽌 userVo �뿉 setPermission �븿
         userVo.setPermission(user.getPermission());
         userVo.setAccount(CommonUtil.decryptAES128(userVo.getAccount()));
+
+        UserLevel userLevel = user.getUserLevel();
+        if (userLevel != null) {
+            userVo.setLevelName(userLevel.getLevelName());
+        }
+
+        List<Department> departments = this.userDepartmentService.findDepartment(user.getId());
+        if (departments != null) {
+            userVo.setDepartmentVos(ConvertUtil.convertObjectsToClasses(departments, DepartmentVo.class));
+        }
         resJsonData.put(Constants.RES_KEY_CONTENTS, userVo);
         //  �궗�슜�옄 �꽭�뀡 �젙蹂대�� 遺꾩꽍�빐�꽌 濡쒓렇�뿉 �궓湲대떎.
         log.info(ElasticSearchUtil.makeUserSessionHistoryMessage(httpServletRequest, userVo));
diff --git a/src/main/java/kr/wisestone/owl/vo/UserVo.java b/src/main/java/kr/wisestone/owl/vo/UserVo.java
index aedac75..e631f76 100644
--- a/src/main/java/kr/wisestone/owl/vo/UserVo.java
+++ b/src/main/java/kr/wisestone/owl/vo/UserVo.java
@@ -22,6 +22,8 @@
     private Long lastProjectId;
     private Long lastIssueTypeId;
     private Long departmentId;
+    private String levelName;
+    private List<DepartmentVo> departmentVos = Lists.newArrayList();
     private Boolean userSocialLogin = Boolean.FALSE;
     private List<ProjectVo> projectVos = Lists.newArrayList();
     private String reservationNotifyTime;
@@ -214,4 +216,20 @@
     public void setProjectManagerYN(Boolean projectManagerYN) {
         this.projectManagerYN = projectManagerYN;
     }
+
+    public String getLevelName() {
+        return levelName;
+    }
+
+    public void setLevelName(String levelName) {
+        this.levelName = levelName;
+    }
+
+    public List<DepartmentVo> getDepartmentVos() {
+        return departmentVos;
+    }
+
+    public void setDepartmentVos(List<DepartmentVo> departmentVos) {
+        this.departmentVos = departmentVos;
+    }
 }
diff --git a/src/main/java/kr/wisestone/owl/web/controller/ApiController.java b/src/main/java/kr/wisestone/owl/web/controller/ApiController.java
index e221753..fb3a53a 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/ApiController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/ApiController.java
@@ -47,7 +47,9 @@
     Map<String, Object> addIssue(MultipartHttpServletRequest request) throws OwlRuntimeException, CloneNotSupportedException {
         Map<String, Object> resJsonData = new HashMap<>();
 
-        IssueApiForm issueForm = IssueApiForm.make(ConvertUtil.convertJsonToMap(request.getParameter(Constants.REQ_KEY_CONTENT)), request.getFiles("file"));
+        String str = request.getParameter(Constants.REQ_KEY_CONTENT);
+
+        IssueApiForm issueForm = IssueApiForm.make(ConvertUtil.convertJsonToMap(str), request.getFiles("file"));
         if (issueForm == null) {
             throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ERROR));
         }
diff --git a/src/main/webapp/assets/styles/main.css b/src/main/webapp/assets/styles/main.css
index ca005af..ac4b5ff 100644
--- a/src/main/webapp/assets/styles/main.css
+++ b/src/main/webapp/assets/styles/main.css
@@ -262,6 +262,8 @@
     margin-top: 0;
     margin-bottom: 1rem;
     overflow: auto;
+    white-space: pre-line;
+    word-break : break-word;
     -ms-overflow-style: scrollbar;
 }
 
@@ -29722,7 +29724,7 @@
     z-index: 2;
     overflow: hidden;
     margin-top: 80px;
- }
+}
 
 .footer-w .logo-element {
     text-align: center;
diff --git a/src/main/webapp/scripts/app/api/apiSetting.controller.js b/src/main/webapp/scripts/app/api/apiSetting.controller.js
index 2f7e1f6..5d781a5 100644
--- a/src/main/webapp/scripts/app/api/apiSetting.controller.js
+++ b/src/main/webapp/scripts/app/api/apiSetting.controller.js
@@ -25,17 +25,19 @@
                     getSeverities : getSeverities,
                     onChangeColumnSetting : onChangeColumnSetting,
                     onChangeEndIssueStatus : onChangeEndIssueStatus,
+                    onChangeIssueTypeOverlap : onChangeIssueTypeOverlap,
+                    onChangeIssueTypeSpec : onChangeIssueTypeSpec,
+                    onChangeProject : onChangeProject,
+                    onChangeIssueStatus : onChangeIssueStatus,
                     getIssueTypes : getIssueTypes,
                     reset : reset,
                     resetOverlap : resetOverlap,
                     formSubmitOverlap : formSubmitOverlap,
                     removeCustomField : removeCustomField,
                     getOverlapList : getOverlapList,
-                    onChangeIssueTypeOverlap : onChangeIssueTypeOverlap,
                     getIssueTypeCustomFields : getIssueTypeCustomFields,
                     getCurrentIssueTypeVo : getCurrentIssueTypeVo,
                     getIssueStatuses : getIssueStatuses,
-                    onChangeIssueTypeSpec : onChangeIssueTypeSpec,
                     createRequestModifyJson : createRequestModifyJson,
                     createRequestAddJson : createRequestAddJson,
                     createCustomFields : createCustomFields,
@@ -44,8 +46,9 @@
                     loadPage : loadPage,
                     resetCompleteIssueStatus : resetCompleteIssueStatus,
                     findIssueList : findIssueList,
-                    onChangeProject : onChangeProject,
-                    setApiIssueTypeStatus : setApiIssueTypeStatus
+                    setApiIssueTypeStatus : setApiIssueTypeStatus,
+                    findToken : findToken,
+                    createAPISample : createAPISample
                 };
 
                 $scope.vm = {
@@ -60,6 +63,7 @@
                     sampleJsonModify : "",
                     // projects : [],
                     form : {
+                        token : "!�넗�겙媛믪엯�젰(�넗�겙諛쒓툒�븘�슂)!",
                         issueCustomFields : [],
                         issueApiDefault : {
                             title : "",
@@ -316,7 +320,7 @@
 
                      //  �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶
                 function getIssueTypeCustomFields() {
-
+                    var deferred = $q.defer();
                     $scope.vm.form.issueCustomFields = [];
 
                     var issueTypeVo = $scope.fn.getCurrentIssueTypeVo();
@@ -335,7 +339,7 @@
                                 $scope.vm.form.issueCustomFields.push(issueTypeCustomField);
                             });
 
-                            $scope.$broadcast("getIssueTypeListComplete", $scope.vm.form.issueCustomFields);
+                            deferred.resolve(result.data.data);
                         }
                         else {
 
@@ -343,6 +347,7 @@
                         }
 
                     });
+                    return deferred.promise;
                 }
 
 
@@ -361,12 +366,12 @@
                     });
                 }
 
-                $scope.$on("getIssueTypeListComplete", function (event, args) {
-                    if ($scope.vm.tab === "API_SPEC_SETTING") {
-                        $scope.fn.createRequestAddJson();
-                        $scope.fn.createRequestModifyJson();
-                    }
-                });
+                // $scope.$on("getIssueTypeListComplete", function (event, args) {
+                //     if ($scope.vm.tab === "API_SPEC_SETTING") {
+                //         $scope.fn.createRequestAddJson();
+                //         $scope.fn.createRequestModifyJson();
+                //     }
+                // });
 
                 function changeTab(tab) {
                     $scope.vm.tab = tab;
@@ -411,6 +416,7 @@
                 }
 
                 function getIssueStatuses() {
+                    var deferred = $q.defer();
                     var condition = {
                         issueTypeId: $scope.vm.issueTypeId
                     }
@@ -419,6 +425,7 @@
 
                         if (result.data.message.status === "success") {
                             $scope.vm.issueStatuses = result.data.data;
+                            deferred.resolve(result.data.data);
 
                             // $scope.vm.issueStatusId = "";
                             if ($scope.vm.issueStatuses != null && $scope.vm.issueStatuses.length > 0) {
@@ -429,11 +436,11 @@
                                 $scope.fn.setApiIssueTypeStatus();
                             }
 
-                            $scope.$broadcast("getIssueStatusComplete", $scope.vm.issueStatuses);
                         } else {
                             SweetAlert.swal($filter("translate")("issue.failedToCriticalListLookup"), result.data.message.message, "error"); // 以묒슂�룄 紐⑸줉 議고쉶 �떎�뙣
                         }
                     });
+                    return deferred.promise;
                 }
 
                 function onChangeColumnSetting() {
@@ -502,9 +509,28 @@
                     });
                 }
 
+                function createAPISample() {
+                    $scope.fn.createRequestAddJson();
+                    $scope.fn.createRequestModifyJson();
+                }
+
+                function onChangeIssueStatus() {
+                    // $scope.fn.getIssueStatuses();
+                    // $scope.fn.getIssueTypeCustomFields();
+                    $scope.fn.findToken();
+                    $scope.fn.createAPISample();
+                }
+
+
                 function onChangeIssueTypeSpec() {
-                    $scope.fn.getIssueStatuses();
-                    $scope.fn.getIssueTypeCustomFields();
+                    var promises = {
+                        issueStatues : $scope.fn.getIssueStatuses(),
+                        issueTypeCustomFields : $scope.fn.getIssueTypeCustomFields(),
+                        token : $scope.fn.findToken()
+                    }
+                    $q.all(promises).then(function (results) {
+                        $scope.fn.createAPISample();
+                    });
                 }
 
                 // �슂泥� �뜲�씠�꽣 留뚮뱾湲�( 異붽�)
@@ -512,7 +538,7 @@
                     var customFields = $scope.fn.createCustomFields();
 
                     var jsonData = {
-                            token: "||諛쒓툒諛쏆� �넗�겙}||",
+                            token: $scope.vm.form.token,
                             title: "||�씠�뒋 �젣紐�||",
                             issueTypeId: $scope.vm.issueTypeId,
                             apiType: "add",
@@ -520,6 +546,29 @@
                         };
 
                     $scope.vm.sampleJsonAdd = JSON.stringify(jsonData,undefined, 4);
+                }
+
+
+                function findToken() {
+                    var deferred = $q.defer();
+                    var conditions = {
+                    }
+
+                    Api.find($resourceProvider.getContent(conditions,
+                        $resourceProvider.getPageContent(0, 1))).then(function (result) {
+
+                        if (result.data.message.status === "success") {
+                            if (result.data.data != null) {
+                                $scope.vm.form.token = result.data.data.token;
+                            }
+                            deferred.resolve(result.data.data);
+                        }
+                        else {
+
+                        }
+                    });
+
+                    return deferred.promise;
                 }
 
                 function createCustomFields() {
@@ -538,7 +587,7 @@
                     var customFields = $scope.fn.createCustomFields();
 
                     var jsonData = {
-                        token: "||諛쒓툒諛쏆� �넗�겙||",
+                        token: $scope.vm.form.token,
                         issueTypeId: $scope.vm.issueTypeId,
                         apiType: "modify",
                         issueStatusId: $scope.vm.issueStatusId,
diff --git a/src/main/webapp/scripts/app/customField/customFieldAdd.controller.js b/src/main/webapp/scripts/app/customField/customFieldAdd.controller.js
index c309bd5..91b67a4 100644
--- a/src/main/webapp/scripts/app/customField/customFieldAdd.controller.js
+++ b/src/main/webapp/scripts/app/customField/customFieldAdd.controller.js
@@ -27,7 +27,7 @@
                         options : [],   //  �샃�뀡
                         optionText : "",  //  �샃�뀡 媛�
                         numberType : "",
-                        ipAdress : "",
+                        ipAddress : "",
                         email : "",
                         site : "",
                         tel : "",
diff --git a/src/main/webapp/scripts/app/customField/customFieldModify.controller.js b/src/main/webapp/scripts/app/customField/customFieldModify.controller.js
index 61cb612..5d440ee 100644
--- a/src/main/webapp/scripts/app/customField/customFieldModify.controller.js
+++ b/src/main/webapp/scripts/app/customField/customFieldModify.controller.js
@@ -36,7 +36,7 @@
                         optionText : "",   //  �샃�뀡 媛�
                         useCustomFieldValue : false, //  �씠�뒋�뿉�꽌 �궗�슜�릺怨� �엳�뒗吏� �뿬遺� �솗�씤
                         numberType : "",
-                        ipAdress : "",
+                        ipAddress : "",
                         email : "",
                         site : "",
                         tel : "",
diff --git a/src/main/webapp/views/api/apiSettingSpec.html b/src/main/webapp/views/api/apiSettingSpec.html
index 5b0ed56..f015666 100644
--- a/src/main/webapp/views/api/apiSettingSpec.html
+++ b/src/main/webapp/views/api/apiSettingSpec.html
@@ -14,7 +14,7 @@
                                 class="form-control input-sm issue-select-label"
                                 ng-style="{ 'color' : fn.getOptionColor(vm.issueStatuses, vm.issueStatusId) }"
                                 ng-model="vm.issueStatusId"
-                                ng-change="fn.onChangeIssueTypeSpec()"
+                                ng-change="fn.onChangeIssueStatus()"
                                 required>
                             <option ng-repeat="issueStatus in vm.issueStatuses"
                                     ng-style="{ 'color' : issueStatus.color, 'font-weight': 600 }"
@@ -56,16 +56,20 @@
 
 <div class="element-box">
     <div class="row">
-        <div class="col-md-1">
+        <div>
             <label class="issue-label">
                 <span translate="api.requestSampleAdd">�씠�뒋 異붽�</span>
             </label>
         </div>
-        <div>
+    </div>
+    <div class="row">
+        <div class="text-wrap">
             <pre>{{vm.sampleJsonAdd}}</pre>
         </div>
-        <div class="col-md-1"></div>
-        <div class="col-md-1">
+    </div>
+    <hr>
+    <div class="row">
+        <div>
             <label class="issue-label">
                 <span translate="api.requestSampleModify">�씠�뒋 �닔�젙</span>
             </label>
@@ -73,7 +77,9 @@
                 <span translate="api.requestSampleModifyDesc">�닔�젙�떆</span>
             </label>
         </div>
-        <div class="col-md-2">
+    </div>
+    <div class="row">
+        <div class="text-wrap">
             <div>
                 <pre>{{vm.sampleJsonModify}}</pre>
             </div>
diff --git a/src/main/webapp/views/common/sidebar.html b/src/main/webapp/views/common/sidebar.html
index 221ef55..92c87e3 100644
--- a/src/main/webapp/views/common/sidebar.html
+++ b/src/main/webapp/views/common/sidebar.html
@@ -184,8 +184,8 @@
     </div>
 
     <div class="logged-user-w avatar-inline">
-        <div class="row mb-1" ng-if="$root.myLevel != null" >
-            <span class="issue-main-label offset-detail-5 badge badge-primary">{{$root.myLevel}}</span>
+        <div class="row mb-1" ng-if="$root.user.levelName != null" >
+            <span class="issue-main-label offset-detail-5 badge badge-primary">{{$root.user.levelName}}</span>
             <span class="issue-main-label offset-detail-1 badge badge-department">{{$root.myDepartments}}</span>
         </div>
         <div class="logged-user-i">
diff --git a/src/main/webapp/views/customField/customFieldAdd.html b/src/main/webapp/views/customField/customFieldAdd.html
index 68ce107..d18dbb2 100644
--- a/src/main/webapp/views/customField/customFieldAdd.html
+++ b/src/main/webapp/views/customField/customFieldAdd.html
@@ -25,7 +25,7 @@
                        ng-maxlength="15"
                        input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]"
                        required>
-                <small ng-show="customFieldAddForm.name.$error.maxlength" translate="common.upTo15Characters">
+                <small ng-if="customFieldAddForm.name.$error.maxlength" translate="common.upTo15Characters">
                     理쒕� 15湲��옄源뚯� �엯�젰�븷 �닔 �엳�뒿�땲�떎.
                 </small>
                 <small translate="customField.limitNameToSpecialCharacters">�궗�슜�옄 �젙�쓽 �븘�뱶 紐낆� �듅�닔 臾몄옄瑜� �엯�젰�븷 �닔 �뾾�뒿�땲�떎.</small>
@@ -55,15 +55,15 @@
                 </div>
             </div>
 
-            <div class="form-group" ng-show="vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'">
-                <label ng-show="vm.form.customFieldType == 'SINGLE_SELECT'"><span
+            <div class="form-group" ng-if="vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'">
+                <label ng-if="vm.form.customFieldType == 'SINGLE_SELECT'"><span
                         translate="customField.createSingleFieldList">�떒�씪 �꽑�깮 �븘�뱶 紐⑸줉 留뚮뱾湲�</span> <code
                         class="highlighter-rouge">*</code></label>
-                <label ng-show="vm.form.customFieldType == 'MULTI_SELECT'"><span
+                <label ng-if="vm.form.customFieldType == 'MULTI_SELECT'"><span
                         translate="customField.createMultiFieldList">�떎以� �꽑�깮 �븘�뱶 紐⑸줉 留뚮뱾湲�</span> <code
                         class="highlighter-rouge">*</code></label>
 
-                <div class="input-group" ng-show="vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'">
+                <div class="input-group" ng-if="vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'">
                     <input id="optionAdd"
                            type="text"
                            name="options"
@@ -82,7 +82,7 @@
                 </small>
             </div>
 
-            <div ng-repeat="option in vm.form.options" ng-show="vm.form.customFieldType != 'INPUT'">
+            <div ng-repeat="option in vm.form.options" ng-if="vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'">
                 <span class="select3-selection__choice">
                     <span>{{option}}</span>
                     <span class="select3-selection__choice__remove" ng-click="fn.removeOption($index)">횞</span>
@@ -91,7 +91,7 @@
 
             <div class="form-group">
                 <label for="customFieldAddForm3"><span translate="customField.defaultValue">湲곕낯媛�</span> </label>
-                <input ng-if="vm.form.customFieldType == 'INPUT' || vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'"
+                <input ng-show="vm.form.customFieldType == 'INPUT' || vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'"
                        id="customFieldAddForm3"
                        type="text"
                        name="defaultValue"
@@ -112,7 +112,7 @@
                        placeholder="�닽�옄留� �엯�젰 媛��뒫�빀�땲�떎."
                        autocomplete="off"
                        ng-model="vm.form.defaultValue">
-                <div ng-show="customFieldAddForm.numberType.$error.pattern" class="help-block form-text text-danger"
+                <div ng-if="customFieldAddForm.numberType.$error.pattern" class="help-block form-text text-danger"
                      translate="common.invalidNumberFormat">�닽�옄留� �엯�젰 媛��뒫�빀�땲�떎.
                 </div>
 
@@ -139,7 +139,7 @@
                        placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
                        autocomplete="off"
                        ng-model="vm.form.defaultValue">
-                <div ng-show="customFieldAddForm.ipAddress.$error.pattern" class="help-block form-text text-danger"
+                <div ng-if="customFieldAddForm.ipAddress.$error.pattern" class="help-block form-text text-danger"
                      translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                 </div>
 
@@ -153,7 +153,7 @@
                        placeholder="�씠硫붿씪 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
                        autocomplete="off"
                        ng-model="vm.form.defaultValue">
-                <div ng-show="customFieldAddForm.email.$error.pattern" class="help-block form-text text-danger"
+                <div ng-if="customFieldAddForm.email.$error.pattern" class="help-block form-text text-danger"
                      translate="common.invalidEmailFormat">�씠硫붿씪 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                 </div>
 
@@ -167,7 +167,7 @@
                        placeholder="�솃�럹�씠吏� 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
                        autocomplete="off"
                        ng-model="vm.form.defaultValue">
-                <div ng-show="customFieldAddForm.site.$error.pattern" class="help-block form-text text-danger"
+                <div ng-if="customFieldAddForm.site.$error.pattern" class="help-block form-text text-danger"
                      translate="common.invalidSiteFormat">�솃�럹�씠吏� 二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.(http://濡� �떆�옉�븯�뀛�빞�빀�땲�떎)
                 </div>
 
@@ -181,19 +181,19 @@
                        placeholder="�뿰�씫泥� �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
                        autocomplete="off"
                        ng-model="vm.form.defaultValue">
-                <div ng-show="customFieldAddForm.tel.$error.pattern" class="help-block form-text text-danger"
+                <div ng-if="customFieldAddForm.tel.$error.pattern" class="help-block form-text text-danger"
                      translate="common.invalidTelFormat">�쟾�솕踰덊샇 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                 </div>
 
-                <small ng-show="vm.form.customFieldType == 'INPUT'" translate="common.upTo100Characters">
+                <small ng-if="vm.form.customFieldType == 'INPUT'" translate="common.upTo100Characters">
                     理쒕� 100湲��옄源뚯� �엯�젰�븷 �닔 �엳�뒿�땲�떎.
                 </small>
 
-                <div class="help-block form-text text-danger" ng-show="vm.form.customFieldType == 'SINGLE_SELECT'"
+                <div class="help-block form-text text-danger" ng-if="vm.form.customFieldType == 'SINGLE_SELECT'"
                      translate="customField.selectSingleFieldListHashTag">
                     �떒�씪 �꽑�깮 �븘�뱶 紐⑸줉�뿉 �엳�뒗 媛믪쓣 湲곕낯�쟻�쑝濡� �꽑�깮�븯怨� �떢�쓣 �븣�뒗 �빐�떆�깭洹몃�� �궗�슜�빐�빞�빀�땲�떎. ex) #���긽媛�
                 </div>
-                <div class="help-block form-text text-danger" ng-show="vm.form.customFieldType == 'MULTI_SELECT'"
+                <div class="help-block form-text text-danger" ng-if="vm.form.customFieldType == 'MULTI_SELECT'"
                      translate="customField.selectMultiFieldListHashTag">
                     �떎以� �꽑�깮 �븘�뱶 紐⑸줉�뿉 �엳�뒗 媛믪쓣 湲곕낯�쟻�쑝濡� �꽑�깮�븯怨� �떢�쓣 �븣�뒗 �빐�떆�깭洹몃�� �궗�슜�빐�빞�빀�땲�떎. ex) #���긽媛�#���긽媛�
                 </div>
diff --git a/src/main/webapp/views/customField/customFieldModify.html b/src/main/webapp/views/customField/customFieldModify.html
index e2b3acd..9c2e4f6 100644
--- a/src/main/webapp/views/customField/customFieldModify.html
+++ b/src/main/webapp/views/customField/customFieldModify.html
@@ -25,7 +25,7 @@
                        ng-maxlength="15"
                        input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]"
                        required>
-                <small ng-show="customFieldModifyForm.name.$error.maxlength" class="help-block form-text text-danger"
+                <small ng-if="customFieldModifyForm.name.$error.maxlength" class="help-block form-text text-danger"
                        translate="common.upTo15Characters">
                     理쒕� 15湲��옄源뚯� �엯�젰�븷 �닔 �엳�뒿�땲�떎.
                 </small>
@@ -35,7 +35,7 @@
             <div class="form-group">
                 <label for="customFieldModifyForm2"><span translate="customField.fieldType">�븘�뱶 �쑀�삎</span><code
                         class="highlighter-rouge">*</code></label>
-                &nbsp;&nbsp; <label> <input type="checkbox" ng-model="vm.form.requiredData"> �븘�닔 �뜲�씠�꽣 </label>
+                <!--&nbsp;&nbsp; <label> <input type="checkbox" ng-model="vm.form.requiredData"> �븘�닔 �뜲�씠�꽣 </label>-->
                 <select id="customFieldModifyForm2" class="form-control" ng-model="vm.form.customFieldType"
                         ng-change="fn.changeCustomFieldType()">
                     <option value="INPUT" translate="common.stringField">臾몄옄�뿴 �븘�뱶</option>
@@ -48,17 +48,23 @@
                     <option value="SITE" translate="common.siteField">�솃�럹�씠吏� 二쇱냼 �븘�뱶</option>
                     <option value="TEL" translate="common.telField">�쟾�솕踰덊샇 �븘�뱶</option>
                 </select>
+                <div class="mt-3">
+                    <span class="custom-detail-label">�븘�닔 �뜲�씠�꽣</span>
+                    <label class='switch'><input type='checkbox' ng-model="vm.form.requiredData">
+                        <span class='slider round'></span>
+                    </label>
+                </div>
             </div>
 
-            <div class="form-group" ng-show="vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'">
-                <label ng-show="vm.form.customFieldType == 'SINGLE_SELECT'"><span
+            <div class="form-group" ng-if="vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'">
+                <label ng-if="vm.form.customFieldType == 'SINGLE_SELECT'"><span
                         translate="customField.createSingleFieldList">�떒�씪 �꽑�깮 �븘�뱶 紐⑸줉 留뚮뱾湲�</span> <code
                         class="highlighter-rouge">*</code></label>
-                <label ng-show="vm.form.customFieldType == 'MULTI_SELECT'"><span
+                <label ng-if="vm.form.customFieldType == 'MULTI_SELECT'"><span
                         translate="customField.createMultiFieldList">�떎以� �꽑�깮 �븘�뱶 紐⑸줉 留뚮뱾湲�</span> <code
                         class="highlighter-rouge">*</code></label>
 
-                <div class="input-group">
+                <div class="input-group" ng-if="vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'">
                     <input id="optionAdd"
                            type="text"
                            name="options"
@@ -77,8 +83,8 @@
                 </small>
             </div>
 
-            <div ng-repeat="option in vm.form.options" ng-show="vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'">
-<!--            <div ng-repeat="option in vm.form.options" ng-show="vm.form.customFieldType != 'INPUT'">-->
+            <div ng-repeat="option in vm.form.options" ng-if="vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'">
+<!--            <div ng-repeat="option in vm.form.options" ng-if="vm.form.customFieldType != 'INPUT'">-->
                 <span class="select3-selection__choice">
                     <span>{{option}}</span>
                     <span class="select3-selection__choice__remove" ng-click="fn.removeOption($index)">횞</span>
@@ -87,7 +93,7 @@
 
             <div class="form-group">
                 <label for="customFieldModifyForm3"><span translate="customField.defaultValue">湲곕낯媛�</span> </label>
-                <input ng-if="vm.form.customFieldType == 'INPUT' || vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'"
+                <input ng-show="vm.form.customFieldType == 'INPUT' || vm.form.customFieldType == 'SINGLE_SELECT' || vm.form.customFieldType == 'MULTI_SELECT'"
                        id="customFieldModifyForm3"
                        type="text"
                        name="defaultValue"
@@ -107,7 +113,7 @@
                        placeholder="�닽�옄留� �엯�젰 媛��뒫�빀�땲�떎."
                        autocomplete="off"
                        ng-model="vm.form.defaultValue">
-                <div ng-show="customFieldModifyForm.numberType.$error.pattern" class="help-block form-text text-danger"
+                <div ng-if="customFieldModifyForm.numberType.$error.pattern" class="help-block form-text text-danger"
                      translate="common.invalidNumberFormat">�닽�옄留� �엯�젰 媛��뒫�빀�땲�떎.
                 </div>
 
@@ -134,7 +140,7 @@
                        placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
                        autocomplete="off"
                        ng-model="vm.form.defaultValue">
-                <div ng-show="customFieldModifyForm.ipAddress.$error.pattern" class="help-block form-text text-danger"
+                <div ng-if="customFieldModifyForm.ipAddress.$error.pattern" class="help-block form-text text-danger"
                      translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                 </div>
 
@@ -148,7 +154,7 @@
                        placeholder="�씠硫붿씪 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
                        autocomplete="off"
                        ng-model="vm.form.defaultValue">
-                <div ng-show="customFieldModifyForm.email.$error.pattern" class="help-block form-text text-danger"
+                <div ng-if="customFieldModifyForm.email.$error.pattern" class="help-block form-text text-danger"
                      translate="common.invalidEmailFormat">�씠硫붿씪 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                 </div>
 
@@ -162,7 +168,7 @@
                        placeholder="�솃�럹�씠吏� 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
                        autocomplete="off"
                        ng-model="vm.form.defaultValue">
-                <div ng-show="customFieldModifyForm.site.$error.pattern" class="help-block form-text text-danger"
+                <div ng-if="customFieldModifyForm.site.$error.pattern" class="help-block form-text text-danger"
                      translate="common.invalidSiteFormat">�솃�럹�씠吏� 二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.(http://濡� �떆�옉�븯�뀛�빞�빀�땲�떎)
                 </div>
 
@@ -176,19 +182,23 @@
                        placeholder="�뿰�씫泥� �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
                        autocomplete="off"
                        ng-model="vm.form.defaultValue">
-                <div ng-show="customFieldModifyForm.tel.$error.pattern" class="help-block form-text text-danger"
+                <div ng-if="customFieldModifyForm.tel.$error.pattern" class="help-block form-text text-danger"
                      translate="common.invalidTelFormat">�쟾�솕踰덊샇 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                 </div>
 
-                <small ng-show="customFieldModifyForm.defaultValue.$error.maxlength"
-                       class="help-block form-text text-danger" translate="common.upTo100Characters">
+<!--                <small ng-if="customFieldModifyForm.defaultValue.$error.maxlength"-->
+<!--                       class="help-block form-text text-danger" translate="common.upTo100Characters">-->
+<!--                    理쒕� 100湲��옄源뚯� �엯�젰�븷 �닔 �엳�뒿�땲�떎.-->
+<!--                </small>-->
+                <small ng-if="vm.form.customFieldType == 'INPUT'" translate="common.upTo100Characters">
                     理쒕� 100湲��옄源뚯� �엯�젰�븷 �닔 �엳�뒿�땲�떎.
                 </small>
-                <div class="help-block form-text text-danger" ng-show="vm.form.customFieldType == 'SINGLE_SELECT'"
+
+                <div class="help-block form-text text-danger" ng-if="vm.form.customFieldType == 'SINGLE_SELECT'"
                      translate="customField.selectSingleFieldListHashTag">
                     �떒�씪 �꽑�깮 �븘�뱶 紐⑸줉�뿉 �엳�뒗 媛믪쓣 湲곕낯�쟻�쑝濡� �꽑�깮�븯怨� �떢�쓣 �븣�뒗 �빐�떆�깭洹몃�� �궗�슜�빐�빞�빀�땲�떎. ex) #���긽媛�
                 </div>
-                <div class="help-block form-text text-danger" ng-show="vm.form.customFieldType == 'MULTI_SELECT'"
+                <div class="help-block form-text text-danger" ng-if="vm.form.customFieldType == 'MULTI_SELECT'"
                      translate="customField.selectMultiFieldListHashTag">
                     �떎以� �꽑�깮 �븘�뱶 紐⑸줉�뿉 �엳�뒗 媛믪쓣 湲곕낯�쟻�쑝濡� �꽑�깮�븯怨� �떢�쓣 �븣�뒗 �빐�떆�깭洹몃�� �궗�슜�빐�빞�빀�땲�떎. ex) #���긽媛�#���긽媛�
                 </div>
diff --git a/src/main/webapp/views/issue/issueDetail.html b/src/main/webapp/views/issue/issueDetail.html
index cfed49e..d7c46b0 100644
--- a/src/main/webapp/views/issue/issueDetail.html
+++ b/src/main/webapp/views/issue/issueDetail.html
@@ -254,7 +254,7 @@
                             <!-- 硫��떚 ���젆�듃 -->
                             <div ng-switch-when="MULTI_SELECT">
                                 <span class="issue-detail-word-break"
-                                ng-repeat="useValue in issueCustomField.useValues">{{::useValue.value}}, </span>
+                                ng-repeat="useValue in issueCustomField.useValues">{{::useValue.value}}</span>
                                 <span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
                             </div>
 

--
Gitblit v1.8.0