OWL ITS + 탐지시스템(인터넷 진흥원)
wyu
2021-11-16 d3a588c41660508fb494ba55c6d0d6ead0b1db27
이슈 만들기 진행[프론트]
16개 파일 변경됨
581 ■■■■■ 파일 변경됨
src/main/webapp/i18n/ko/global.json 10 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/companyField/companyFieldList.controller.js 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/hostingField/hostingFieldList.controller.js 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/ispField/ispFieldList.controller.js 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueAdd.controller.js 125 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/components/utils/autoComplete.controller.js 195 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/companyField/companyFieldAdd.html 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/companyField/companyFieldModify.html 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/hostingField/hostingFieldAdd.html 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/hostingField/hostingFieldModify.html 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/ispField/ispFieldAdd.html 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/ispField/ispFieldModify.html 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueAdd.html 180 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueModify.html 26 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueModifyUser.html 26 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/i18n/ko/global.json
@@ -760,7 +760,11 @@
        "d": "일",
        "emptyUser": "선택할 수 있는 사용자가 없습니다.",
        "emptyProject": "선택할 수 있는 프로젝트가 없습니다.",
        "emptyDepartment": "선택할 수 있는 부서가 없습니다.",
        "emptyCompany": "선택할 수 있는 업체가 없습니다.",
        "emptyIssue": "선택할 수 있는 이슈가 없습니다.",
        "emptyIsp": "선택할 수 있는 ISP가 없습니다.",
        "emptyHosting": "선택할 수 있는 HOSTING가 없습니다.",
        "department" : "부서",
        "level" : "사용자 등급",
        "manageDepartment": "부서 관리",
@@ -813,7 +817,7 @@
        "tel" : "전화번호",
        "code" : "코드",
        "email" : "이메일",
        "desc" : "비고",
        "memo" : "비고",
        "failedToSelectCompanyFieldFullList" : "업체 관리 목록 조회 실패",
        "delete" : "업체 삭제",
        "wantToDeleteSelectCompanyField" : "선택한 업체를 삭제하겠습니까? 삭제된 업체는 복구할 수 없습니다.",
@@ -831,7 +835,7 @@
        "tel" : "전화번호",
        "code" : "코드",
        "email" : "이메일",
        "desc" : "비고",
        "memo" : "비고",
        "failedToSelectIspFieldFullList" : "ISP 관리 목록 조회 실패",
        "delete" : "ISP 삭제",
        "wantToDeleteSelectIspField" : "선택한 ISP를 삭제하겠습니까? 삭제된 ISP는 복구할 수 없습니다.",
@@ -849,7 +853,7 @@
        "tel" : "전화번호",
        "code" : "코드",
        "email" : "이메일",
        "desc" : "비고",
        "memo" : "비고",
        "failedToSelectHostingFieldFullList" : "호스팅 관리 목록 조회 실패",
        "delete" : "호스팅 삭제",
        "wantToDeleteSelectHostingField" : "선택한 호스팅을 삭제하겠습니까? 삭제된 호스팅은 복구할 수 없습니다.",
src/main/webapp/scripts/app/companyField/companyFieldList.controller.js
@@ -92,7 +92,7 @@
                        .setDName("email")
                        .setDAlign("text-center"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("companyField.desc")
                        .setHName("companyField.memo")
                        .setHWidth("bold")
                        .setDName("memo")
                        .setDAlign("text-center"));
src/main/webapp/scripts/app/hostingField/hostingFieldList.controller.js
@@ -90,7 +90,7 @@
                        .setDName("email")
                        .setDAlign("text-center"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("hostingField.desc")
                        .setHName("hostingField.memo")
                        .setHWidth("bold")
                        .setDName("desc")
                        .setDAlign("text-center"));
src/main/webapp/scripts/app/ispField/ispFieldList.controller.js
@@ -90,7 +90,7 @@
                        .setDName("email")
                        .setDAlign("text-center"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("ispField.desc")
                        .setHName("ispField.memo")
                        .setHWidth("bold")
                        .setDName("memo")
                        .setDAlign("text-center"));
src/main/webapp/scripts/app/issue/issueAdd.controller.js
@@ -16,10 +16,13 @@
                $scope.fn = {
                    cancel : cancel,    //  팝업 창 닫기
                    formSubmit : formSubmit,    //  폼 전송
                    // formCheck : formCheck,  //  폼 체크
                     formCheck : formCheck,  //  폼 체크
                    getUserListCallBack : getUserListCallBack,  //  담당자 autocomplete 페이징
                    getProjectListCallBack : getProjectListCallBack,    //  프로젝트 autocomplete 페이징
                    getCompanyFieldListCallBack : getCompanyFieldListCallBack,    //  프로젝트 autocomplete 페이징
                    getCompanyFieldListCallBack : getCompanyFieldListCallBack,    // 업체정보 autocomplete 페이징
                    getIssueDepartmentListCallBack : getIssueDepartmentListCallBack,    // 담당자 -> 담당부서 autocomplete 페이징
                    getIspFieldListCallBack : getIspFieldListCallBack,    // ISP정보 autocomplete 페이징
                    getHostingFieldListCallBack : getHostingFieldListCallBack,    // 호스팅정보 autocomplete 페이징
                    getOptionColor : getOptionColor,    //  우선순위, 중요도 색상으로 Select 태그 적용
                    onFileSelect : onFileSelect,    //  파일 첨부
                    infiniteAddForm : infiniteAddForm,  //  계속 생성
@@ -31,8 +34,7 @@
                    removeUploadFile : removeUploadFile,    //  업로드하려는 특정 파일을 삭제
                    removeManager : removeManager,  //  담당자 삭제
                    setIssueTypeTemplate : setIssueTypeTemplate,    //  이슈 유형 템플릿 적용하기
                    startExecute : startExecute, //  컨트롤 로딩시 처음으로 시작되는 함수
                    companyImport : companyImport
                    startExecute : startExecute //  컨트롤 로딩시 처음으로 시작되는 함수
                };
                $scope.vm = {
@@ -40,24 +42,39 @@
                        title : "",    //  제목
                        description : "",   //  내용
                        projects : [],  //  프로젝트
                        companyFields : [],
                        companyFields : [], // 업체정보
                        ispFields : [], // ISP 정보
                        hostingFields : [], // 호스팅정보
                        issueTypeId : "",   //  이슈 유형 아이디
                        priorityId : "",    //  우선순위 아이디
                        severityId : "",    //  중요도 아이디
                        users : [],     //  담당자
                        departments : [], // 딤당부서
                        files : [], //  업로드 파일
                        attachedFiles : [], //  섬머노트로 파일 업로드를 할 경우 서버에서 pk를 따고 issue id와 연동 작업이 필요하다.
                        startCompleteDateRange : "", //  시작일 ~ 종료일
                        detectingDateRange : "", //  탐지일
                        issueCustomFields : []  //  이슈에서 사용되는 사용자 정의 필드
                    },
                    infiniteAdd : false,    //  연속 생성
                    projectName : "",   //  프로젝트 명 검색
                    companyName : "",   //  프로젝트 명 검색
                    userName : "",  //  사용자 검색
                    companyManager : "",   //담당자
                    companyTel : "",  //전화번호
                    companyEmail : "",  //이메일
                    companyDesc : "",  //비고
                    departmentName : "",  // 부서명 검색
                    companyName : "",   // 업체명 검색
                    companyManager : "",   // 업체 담당자
                    companyTel : "",  // 업체 전화번호
                    companyEmail : "",  // 업체 이메일
                    companyMemo : "",  // 업체 비고
                    ispName : "", // ISP 명
                    ispManager : "", // ISP 담당자
                    ispTel : "", // ISP 전화번호
                    ispEmail : "", // ISP 이메일
                    ispMemo : "", // ISP 비고
                    hostingName : "", // 호스팅명 검색
                    hostingManager : "", // 호스팅 담당자
                    hostingTel : "", // 호스팅 전화번호
                    hostingEmail : "", // 호스팅 이메일
                    hostingMemo : "", // 호스팅 비고
                    autoCompletePage : {
                        user : {
                            page : 0,
@@ -68,6 +85,18 @@
                            totalPage : 0
                        },
                        companyField : {
                            page : 0,
                            totalPage : 0
                        },
                        department : {
                            page : 0,
                            totalPage : 0
                        },
                        ispField : {
                            page : 0,
                            totalPage : 0
                        },
                        hostingField : {
                            page : 0,
                            totalPage : 0
                        }
@@ -83,7 +112,6 @@
                };
                angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
                function getStartProjectListCallback(result){
                    //  프로젝트 autocomplete page 업데이트
@@ -104,15 +132,6 @@
                        $scope.fn.getIssueTypeCustomFields();
                    }
                });
                function companyImport() {
                    $uibModal.open({
                        templateUrl : 'views/issue/issueCompanyFieldDetail.html',
                        size : "mg",
                        controller : 'issueCompanyFieldDetailController',
                        backdrop : 'static',
                    });
                }
                //  섬머노트 이미지 업로드
                function imageUpload($files) {
@@ -267,7 +286,7 @@
                //  담당자 삭제
                function removeManager(index) {
                    $scope.vm.form.users.splice(index, 1);
                    $scope.vm.form.departments.splice(index, 1);
                }
                //  업로드 파일 삭제
@@ -288,23 +307,56 @@
                function getProjectListCallBack(result) {
                    $scope.vm.autoCompletePage.project.totalPage = result.data.page.totalPage;
                }
                //  업체정보 autocomplete page 업데이트
                function getCompanyFieldListCallBack(result) {
                    $scope.vm.autoCompletePage.project.totalPage = result.data.page.totalPage;
                    $scope.vm.autoCompletePage.companyField.totalPage = result.data.page.totalPage;
                }
                //  폼 체크
                // function formCheck(formInvalid) {
                //     if (formInvalid) {
                //         return true;
                //     }
                //
                //     if ($scope.vm.form.projects.length < 1) {
                //         return true;
                //     }
                //
                //     return false;
                // }
                function getIssueDepartmentListCallBack(result) {
                    $scope.vm.autoCompletePage.department.totalPage = result.data.page.totalPage;
                }
                function getIspFieldListCallBack(result) {
                    $scope.vm.autoCompletePage.ispField.totalPage = result.data.page.totalPage;
                }
                function getHostingFieldListCallBack(result) {
                    $scope.vm.autoCompletePage.hostingField.totalPage = result.data.page.totalPage;
                }
                // 폼 체크
                function formCheck(formInvalid) {
                    if (formInvalid) {
                        return true;
                    }
                    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.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.hostingManager = result[0].manager;
                    $scope.vm.hostingTel = result[0].tel;
                    $scope.vm.hostingEmail = result[0].email;
                    $scope.vm.hostingMemo = result[0].memo;
                });
                //  폼 전송
                function formSubmit() {
@@ -346,6 +398,8 @@
                            return attachedFileIds;
                        })(),
                        startCompleteDateRange : $scope.vm.form.startCompleteDateRange,
                        detectingDateRange : $scope.vm.form.detectingDateRange,
                        issueCustomFields : (function () {    //  이슈에서 사용되는 사용자 정의 필드
                            var issueCustomFields = [];
@@ -566,6 +620,7 @@
                //  최초 실행
                function startExecute() {
                    var promises = {
                        getIssueTypes : $scope.fn.getIssueTypes(),
                        getPriorities : $scope.fn.getPriorities(),
src/main/webapp/scripts/app/issue/issueAddTableConfig.controller.js
@@ -64,6 +64,7 @@
                        width : "width-100-p",
                        position : 7,
                        display : false
                    }, {
                    }]
                };
src/main/webapp/scripts/components/utils/autoComplete.controller.js
@@ -20,6 +20,8 @@
                var CompanyField = $injector.get("CompanyField");
                var Issue = $injector.get("Issue");
                var UserWorkspace = $injector.get("UserWorkspace");
                var IspField = $injector.get("IspField");
                var HostingField = $injector.get("HostingField");
                var $log = $injector.get("$log");
                var SweetAlert = $injector.get("SweetAlert");
@@ -29,7 +31,10 @@
                $scope.fn.getIssueList = getIssueList;  //  일감 목록 정보를 조회한다.
                $scope.fn.getWorkflowList = getWorkflowList;    //  워크플로우 목록 정보를 조회한다.
                $scope.fn.getUserDepartmentList = getUserDepartmentList;    //  부서 목록 정보를 조회한다.
                $scope.fn.getCompanyFieldList = getCompanyFieldList;    //  부서 목록 정보를 조회한다.
                $scope.fn.getCompanyFieldList = getCompanyFieldList;    //  업체 목록 정보를 조회한다.
                $scope.fn.getIssueDepartmentList = getIssueDepartmentList;    //  담당자 -> 담당부서 목록 정보를 조회한다.
                $scope.fn.getIspFieldList = getIspFieldList;    //  ISP 목록 정보를 조회한다.
                $scope.fn.getHostingFieldList = getHostingFieldList;    //  호스팅 목록 정보를 조회한다.
                function getUserList(query, excludeList, page, callBack) {
                    var conditions = {
@@ -115,9 +120,9 @@
                    return deferred.promise;
                }
                function getCompanyFieldList(query, excludeList, page, callBack, statuses, roleTypes) {
                function getIssueList(query, excludeList, page, callBack) {
                    var conditions = {
                        companyName : query,
                        name : query,
                        excludeIds : (function () {
                            var excludeIds = [];
@@ -131,11 +136,10 @@
                    var deferred = $q.defer();
                    CompanyField.find($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                    Issue.find($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
                        if (result.data.message.status === "success") {
                            if ($rootScope.isDefined(callBack)) {
                                callBack(result);
                            }
@@ -143,41 +147,10 @@
                            deferred.resolve(result.data.data);
                        }
                        else {
                            SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패"
                            SweetAlert.swal($filter("translate")("common.failedToIssueListLookUp"), result.data.message.message, "error"); // "워크플로우 목록 조회 실패"
                        }
                    });
                    return deferred.promise;
                }
                function getUserDepartmentList(query, excludeList, page, callBack) {
                    var conditions = {
                        departmentName : query,
                        excludeIds : (function () { //excludeIds : 제외 할 리스트
                            var excludeIds = [];
                            angular.forEach(excludeList, function (exclude) {
                                excludeIds.push(exclude.id);
                            });
                            return excludeIds;
                        })()
                    };
                    var deferred = $q.defer();
                    UserWorkspace.departmentFind($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
                        if (result.data.message.status === "success") {
                            if ($rootScope.isDefined(callBack)) {
                                callBack(result);
                            }
                            deferred.resolve(result.data.data); //사용자가 속해져있는 부서 리스트를 불러옴
                        }
                        else {
                            SweetAlert.swal($filter("translate")("managementWorkspace.failedToSelectWorkspaceFullDepartmentList"), result.data.message.message, "error"); // "부서 목록 조회 실패"
                        }
                    });
                    return deferred.promise;
                }
@@ -215,9 +188,39 @@
                    return deferred.promise;
                }
                function getIssueList(query, excludeList, page, callBack) {
                function getUserDepartmentList(query, excludeList, page, callBack) {
                    var conditions = {
                        name : query,
                        departmentName : query,
                        excludeIds : (function () { //excludeIds : 제외 할 리스트
                            var excludeIds = [];
                            angular.forEach(excludeList, function (exclude) {
                                excludeIds.push(exclude.id);
                            });
                            return excludeIds;
                        })()
                    };
                    var deferred = $q.defer();
                    UserWorkspace.departmentFind($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
                        if (result.data.message.status === "success") {
                            if ($rootScope.isDefined(callBack)) {
                                callBack(result);
                            }
                            deferred.resolve(result.data.data); //사용자가 속해져있는 부서 리스트를 불러옴
                        }
                        else {
                            SweetAlert.swal($filter("translate")("managementWorkspace.failedToSelectWorkspaceFullDepartmentList"), result.data.message.message, "error"); // "부서 목록 조회 실패"
                        }
                    });
                    return deferred.promise;
                }
                function getCompanyFieldList(query, excludeList, page, callBack) {
                    var conditions = {
                        companyName : query,
                        excludeIds : (function () {
                            var excludeIds = [];
@@ -231,10 +234,11 @@
                    var deferred = $q.defer();
                    Issue.find($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                    CompanyField.find($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
                        if (result.data.message.status === "success") {
                            if ($rootScope.isDefined(callBack)) {
                                callBack(result);
                            }
@@ -242,7 +246,112 @@
                            deferred.resolve(result.data.data);
                        }
                        else {
                            SweetAlert.swal($filter("translate")("common.failedToIssueListLookUp"), result.data.message.message, "error"); // "워크플로우 목록 조회 실패"
                            SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패"
                        }
                    });
                    return deferred.promise;
                }
                function getIssueDepartmentList(query, excludeList, page, callBack) {
                    var conditions = {
                        departmentName : query,
                        userId : $rootScope.user.id,
                        excludeIds : (function () {
                            var excludeIds = [];
                            angular.forEach(excludeList, function (exclude) {
                                excludeIds.push(exclude.id);
                            });
                            return excludeIds;
                        })()
                    };
                    var deferred = $q.defer();
                    UserWorkspace.departmentFind($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
                        if (result.data.message.status === "success") {
                            if ($rootScope.isDefined(callBack)) {
                                callBack(result);
                            }
                            deferred.resolve(result.data.data);
                        }
                        else {
                            SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패"
                        }
                    });
                    return deferred.promise;
                }
                function getIspFieldList(query, excludeList, page, callBack) {
                    var conditions = {
                        ispName : query,
                        excludeIds : (function () {
                            var excludeIds = [];
                            angular.forEach(excludeList, function (exclude) {
                                excludeIds.push(exclude.id);
                            });
                            return excludeIds;
                        })()
                    };
                    var deferred = $q.defer();
                    IspField.find($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
                        if (result.data.message.status === "success") {
                            if ($rootScope.isDefined(callBack)) {
                                callBack(result);
                            }
                            deferred.resolve(result.data.data);
                        }
                        else {
                            SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패"
                        }
                    });
                    return deferred.promise;
                }
                function getHostingFieldList(query, excludeList, page, callBack) {
                    var conditions = {
                        hostingName : query,
                        excludeIds : (function () {
                            var excludeIds = [];
                            angular.forEach(excludeList, function (exclude) {
                                excludeIds.push(exclude.id);
                            });
                            return excludeIds;
                        })()
                    };
                    var deferred = $q.defer();
                    HostingField.find($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
                        if (result.data.message.status === "success") {
                            if ($rootScope.isDefined(callBack)) {
                                callBack(result);
                            }
                            deferred.resolve(result.data.data);
                        }
                        else {
                            SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패"
                        }
                    });
src/main/webapp/views/companyField/companyFieldAdd.html
@@ -165,7 +165,7 @@
            <div>
                <div class="form-group">
                    <label for="companyFieldAddForm8" class="issue-label">
                        <span translate="companyField.desc">비고</span>
                        <span translate="companyField.memo">비고</span>
                    </label>
                    <input id="companyFieldAddForm8"
                           name="memo"
src/main/webapp/views/companyField/companyFieldModify.html
@@ -161,7 +161,7 @@
            <div>
                <div class="form-group">
                    <label for="companyFieldModifyForm8" class="issue-label">
                        <span translate="companyField.desc">비고</span>
                        <span translate="companyField.memo">비고</span>
                    </label>
                    <input id="companyFieldModifyForm8"
                           name="memo"
src/main/webapp/views/hostingField/hostingFieldAdd.html
@@ -108,7 +108,7 @@
            <div>
                <div class="form-group">
                    <label for="hostingFieldAddForm8" class="issue-label">
                        <span translate="hostingField.desc">비고</span>
                        <span translate="hostingField.memo">비고</span>
                    </label>
                    <input id="hostingFieldAddForm8"
                           name="memo"
src/main/webapp/views/hostingField/hostingFieldModify.html
@@ -105,7 +105,7 @@
            <div>
                <div class="form-group">
                    <label for="hostingFieldModifyForm8" class="issue-label">
                        <span translate="hostingField.desc">비고</span>
                        <span translate="hostingField.memo">비고</span>
                    </label>
                    <input id="hostingFieldModifyForm8"
                           name="memo"
src/main/webapp/views/ispField/ispFieldAdd.html
@@ -108,7 +108,7 @@
            <div>
                <div class="form-group">
                    <label for="ispFieldAddForm8" class="issue-label">
                        <span translate="ispField.desc">비고</span>
                        <span translate="ispField.memo">비고</span>
                    </label>
                    <input id="ispFieldAddForm8"
                           name="memo"
src/main/webapp/views/ispField/ispFieldModify.html
@@ -106,7 +106,7 @@
            <div>
                <div class="form-group">
                    <label for="hostingFieldModifyForm8" class="issue-label">
                        <span translate="hostingField.desc">비고</span>
                        <span translate="hostingField.memo">비고</span>
                    </label>
                    <input id="hostingFieldModifyForm8"
                           name="memo"
src/main/webapp/views/issue/issueAdd.html
@@ -41,7 +41,7 @@
                                                total-page="vm.autoCompletePage.project.totalPage"
                                                input-disabled="false"
                                                translation-texts="{ empty : 'common.emptyProject' }"
                                                extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '',
                                                extra-settings="{ displayProp : '' , idProp : '', imageable : false, imagePathProp : '',
                                                type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single>
                    </div>
                </div>
@@ -117,47 +117,29 @@
                        </div>
                    </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 mb10">
                        <label class="issue-label"> <span translate="common.assigneeTeam">담당부서</span> </label>
                        <js-input-autocomplete data-input-name="users"
                                               selected-model="vm.form.users"
                                               search="vm.userName"
                                               page="vm.autoCompletePage.user.page"
                                               total-page="vm.autoCompletePage.user.totalPage"
                                               source="fn.getUserList(vm.userName, vm.form.users, vm.autoCompletePage.user.page, fn.getUserListCallBack)"
                                               input-disabled="vm.form.projects.length == 0"
                                               translation-texts="{ empty : 'common.emptyUser'}"
                                               extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : true, imagePathProp : 'profile',
                                               type : 'user', maxlength : 100, autoResize : true, stopRemoveBodyEvent : true }"></js-input-autocomplete>
                        <js-autocomplete-multi data-input-name="departmentㄴ"
                                               selected-model="vm.form.departments"
                                               search="vm.departmentName"
                                               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">
                            <span class="select3-selection__choice" ng-repeat="user in vm.form.users">
                                <span class="avatar-w"><img ng-src="{{user.profile}}"></span>
                                <span>{{user.name}}({{user.account}})</span>
                                <span class="select3-selection__choice__remove"
                                      ng-click="fn.removeManager($index)">×</span>
                        <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>
                        </div>
                    </div>
                </div>
                <div class="col-lg-4">
                    <div class="form-group mb10">
                        <label for="issueAddForm5" class="issue-label"> <span translate="common.period">기간</span></label>
@@ -228,7 +210,6 @@
                    </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>
@@ -245,7 +226,7 @@
                               readonly
                               class="form-control cursor"
                               placeholder="{{'issue.clickToSelectDate' | translate}}"
                               ng-model="vm.form.startCompleteDateRange"
                               ng-model="vm.form.detectingDateRange"
                               modal-form-auto-scroll
                               date-format="YYYY-MM-DD"
                               parent-el="'#createdWidget2'"
@@ -288,31 +269,28 @@
                    </div>
                </div>
            </div>
            <hr>
            <div class="row">
                <div class="col-lg-4 fontcolor_green">
                    <label class="issue-label"><span class="fontcolor_green" translate="companyField.info">업체정보</span></label>
                    <button class="btn btn-sm col-lg-6 btn-indigo" ng-click="fn.companyImport()">
                        &nbsp; &nbsp;  <span translate="common.import">가져오기</span> &nbsp; &nbsp;
                    </button>
                </div>
            </div>
            <div class="row">
                <div class="col-lg-4">
                    <div class="form-group mb10">
                        <label for="companyFieldNameAddForm" class="issue-label"> <span translate="companyField.name">업체명</span> </label>
                        <input id="companyFieldNameAddForm"
                               name="companyName"
                               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.form.companyName"
                               ng-maxlength="100"
                               maxlength="100"
                               required>
                        <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">
@@ -326,10 +304,10 @@
                               kr-input
                               input-regex="[^a-zA-Z0-9 가-힣ㄱ-ㅎㅏ-ㅣ\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]"
                               autocomplete="off"
                               ng-model="vm.form.companyManager"
                               ng-model="vm.companyManager"
                               ng-maxlength="100"
                               maxlength="100"
                               required>
                               >
                    </div>
                </div>
                <div class="col-lg-4">
@@ -342,7 +320,7 @@
                               kr-input
                               ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/"
                               autocomplete="off"
                               ng-model="vm.form.companyTel"
                               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 형식으로 입력하세요.
@@ -358,7 +336,7 @@
                               class="form-control"
                               autocomplete="off"
                               maxLength="50"
                               ng-model="vm.form.companyEmail"
                               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"
@@ -368,15 +346,15 @@
                </div>
                <div class="col-lg-4">
                    <div class="form-group mgb5">
                        <label for="companyFieldDescAddForm" class="issue-label"><span translate="companyField.desc">비고</span></label>
                        <label for="companyFieldDescAddForm" class="issue-label"><span translate="companyField.memo">비고</span></label>
                        <input id="companyFieldDescAddForm"
                               name="companyDesc"
                               name="companyMemo"
                               type="text"
                               class="form-control"
                               kr-input
                               autocomplete="off"
                               ng-model="vm.form.companyDesc"
                               ng-maxlength="200"
                               ng-model="vm.companyMemo"
                               maxlength="200">
                    </div>
                </div>
@@ -390,19 +368,18 @@
            <div class="row">
                <div class="col-lg-4">
                    <div class="form-group mb10">
                        <label for="ispFieldNameAddForm" class="issue-label"> <span translate="ispField.name">ISP 이름</span> </label>
                        <input id="ispFieldNameAddForm"
                               name=ispName"
                               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.form.ispName"
                               ng-maxlength="100"
                               maxlength="100"
                               required>
                        <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">
@@ -415,7 +392,7 @@
                               kr-input
                               input-regex="[^a-zA-Z0-9 가-힣ㄱ-ㅎㅏ-ㅣ\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]"
                               autocomplete="off"
                               ng-model="vm.form.ispManager"
                               ng-model="vm.ispManager"
                               ng-maxlength="100"
                               maxlength="100">
                    </div>
@@ -430,7 +407,7 @@
                               kr-input
                               ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/"
                               autocomplete="off"
                               ng-model="vm.form.ispTel"
                               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 형식으로 입력하세요.
@@ -446,7 +423,7 @@
                               class="form-control"
                               autocomplete="off"
                               maxLength="50"
                               ng-model="vm.form.ispEmail"
                               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"
@@ -456,14 +433,14 @@
                </div>
                <div class="col-lg-4">
                    <div class="form-group mgb5">
                        <label for="ispFieldDescAddForm" class="issue-label"><span translate="ispField.desc">비고</span></label>
                        <label for="ispFieldDescAddForm" class="issue-label"><span translate="ispField.memo">비고</span></label>
                        <input id="ispFieldDescAddForm"
                               name="ispDesc"
                               name="ispMemo"
                               type="text"
                               class="form-control"
                               kr-input
                               autocomplete="off"
                               ng-model="vm.form.ispDesc"
                               ng-model="vm.ispMemo"
                               ng-maxlength="200"
                               maxlength="200">
                    </div>
@@ -478,19 +455,18 @@
            <div class="row">
                <div class="col-lg-4">
                    <div class="form-group mb10">
                        <label for="hostingFieldNameAdd" class="issue-label"> <span translate="hostingField.name">호스팅 이름</span> </label>
                        <input id="hostingFieldNameAdd"
                               name="hostingName"
                               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.form.hostingName"
                               ng-maxlength="100"
                               maxlength="100"
                               required>
                        <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">
@@ -503,7 +479,7 @@
                               kr-input
                               input-regex="[^a-zA-Z0-9 가-힣ㄱ-ㅎㅏ-ㅣ\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]"
                               autocomplete="off"
                               ng-model="vm.form.hostingManager"
                               ng-model="vm.hostingManager"
                               ng-maxlength="100"
                               maxlength="100">
                    </div>
@@ -518,7 +494,7 @@
                               kr-input
                               ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/"
                               autocomplete="off"
                               ng-model="vm.form.hostingTel"
                               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 형식으로 입력하세요.
@@ -534,7 +510,7 @@
                               class="form-control"
                               autocomplete="off"
                               maxLength="50"
                               ng-model="vm.form.hostingEmail"
                               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"
@@ -544,23 +520,37 @@
                </div>
                <div class="col-lg-4">
                    <div class="form-group mgb5">
                        <label for="hostingFieldDescAdd" class="issue-label"><span translate="hostingField.desc">비고</span></label>
                        <label for="hostingFieldDescAdd" class="issue-label"><span translate="hostingField.memo">비고</span></label>
                        <input id="hostingFieldDescAdd"
                               name="hostingDesc"
                               name="hostingMemo"
                               type="text"
                               class="form-control"
                               kr-input
                               autocomplete="off"
                               ng-model="vm.form.hostingDesc"
                               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>
src/main/webapp/views/issue/issueModify.html
@@ -139,22 +139,22 @@
                <div class="col-lg-4">
                    <div class="form-group mgb5">
                        <label class="issue-label"> <span translate="common.assigneeTeam">담당부서</span> </label>
                        <js-input-autocomplete data-input-name="users"
                                               selected-model="vm.form.users"
                                               search="vm.userName"
                                               page="vm.autoCompletePage.user.page"
                                               total-page="vm.autoCompletePage.user.totalPage"
                                               source="fn.getUserList(vm.userName, vm.form.users, vm.autoCompletePage.user.page, fn.getUserListCallBack)"
                                               translation-texts="{ empty : 'common.emptyUser'}"
                                               input-disabled="vm.form.projects.length == 0"
                        <js-input-autocomplete data-input-name="departments"
                                               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 : 'user', maxlength : 100, autoResize : true, stopRemoveBodyEvent : true }"></js-input-autocomplete>
                                               type : 'department', maxlength : 100, autoResize : true, stopRemoveBodyEvent : true }"></js-input-autocomplete>
                        <small translate="common.setParticipatingInProject">프로젝트에 참여하는 사용자를 설정합니다.</small>
                        <div class="select3-selection__choicediv">
                            <span class="select3-selection__choice" ng-repeat="user in vm.form.users">
                                <span class="avatar-w"><img ng-src="{{user.profile}}"></span>
                                <span>{{user.name}}({{user.account}})</span>
                            <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>
src/main/webapp/views/issue/issueModifyUser.html
@@ -13,22 +13,22 @@
            <div class="form-group">
                <div class="form-group mgb5">
                    <label class="issue-label"> <span translate="common.assigneeTeam">담당부서</span> </label>
                    <js-input-autocomplete data-input-name="users"
                                           selected-model="vm.form.users"
                                           search="vm.userName"
                                           page="vm.autoCompletePage.user.page"
                                           total-page="vm.autoCompletePage.user.totalPage"
                                           source="fn.getUserList(vm.userName, vm.form.users, vm.autoCompletePage.user.page, fn.getUserListCallBack)"
                                           translation-texts="{ empty : 'common.emptyUser'}"
                                           input-disabled="vm.form.projects.length == 0"
                    <js-input-autocomplete data-input-name="departments"
                                           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 : 'user', maxlength : 100, autoResize : true, stopRemoveBodyEvent : true }"></js-input-autocomplete>
                                               type : 'department', maxlength : 100, autoResize : true, stopRemoveBodyEvent : true }"></js-input-autocomplete>
                    <small translate="common.setParticipatingInProject">프로젝트에 참여하는 사용자를 설정합니다.</small>
                    <div class="select3-selection__choicediv">
                            <span class="select3-selection__choice" ng-repeat="user in vm.form.users">
                                <span class="avatar-w"><img ng-src="{{user.profile}}"></span>
                                <span>{{user.name}}({{user.account}})</span>
                            <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>