OWL ITS + 탐지시스템(인터넷 진흥원)
wyu
2021-11-17 a080a3a500df0f6524057239563504e15bb666f1
이슈 수정 진행[프론트]
8개 파일 변경됨
737 ■■■■ 파일 변경됨
src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.css 12 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueAdd.controller.js 12 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueModify.controller.js 136 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/components/utils/autoComplete.controller.js 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/common/sidebar.html 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueAdd.html 19 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueModify.html 553 ●●●● 패치 | 보기 | raw | blame | 히스토리
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;
}
    clear: none !important; } }
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>' +
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;
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);
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) {
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">
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>
                        &nbsp;&nbsp; <span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code>&nbsp;&nbsp;각 정보의 이름 클릭시 해당 이름의 정보가 조회됩니다.</span></label>
                        &nbsp;&nbsp;<span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code>&nbsp;&nbsp;업체 이름 클릭시 선택된 이름의 업체 정보가 조회됩니다.</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>
                        &nbsp;&nbsp;<span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code>&nbsp;&nbsp;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>
                        &nbsp;&nbsp;<span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code>&nbsp;&nbsp;호스팅 이름 클릭시 선택된 이름의 호스팅 정보가 조회됩니다.</span>
                    </label>
                </div>
            </div>
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}}">●&nbsp;{{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>
                        &nbsp;&nbsp;<span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code>&nbsp;&nbsp;업체 이름 클릭시 선택된 이름의 업체 정보가 조회됩니다.</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>
                        &nbsp;&nbsp;<span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code>&nbsp;&nbsp;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>
                        &nbsp;&nbsp;<span class="select3-selection__choice" style="position: relative; bottom: 2px;"><code class="highlighter-rouge">*</code>&nbsp;&nbsp;호스팅 이름 클릭시 선택된 이름의 호스팅 정보가 조회됩니다.</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>