OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-11-01 58c96fb54e3e6bbf0c0df27e39eaff814f52e9d4
사용자등급관리, 부서관리 프론트 수정
2개 파일 추가됨
15개 파일 변경됨
906 ■■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/web/controller/WorkspaceController.java 24 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/i18n/ko/global.json 28 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspace.controller.js 69 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspace.js 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspaceDepartmentAdd.controller.js 123 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspaceDepartmentConfig.controller.js 126 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspaceLevelAdd.controller.js 150 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js 9 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js 156 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/components/workspace/workspace.service.js 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/main.js 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/workspace/workspace.html 10 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/workspace/workspaceDepartmentAdd.html 58 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/workspace/workspaceDepartmentConfig.html 32 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/workspace/workspaceLevelAdd.html 72 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/workspace/workspaceUserConfig.html 6 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/workspace/workspaceUserLevelConfig.html 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/controller/WorkspaceController.java
@@ -25,7 +25,29 @@
    @Autowired
    private WorkspaceService workspaceService;
    //  업무공간 조회
    //  사용자 등급 조회
    @RequestMapping(value = "/workspace/levelFind", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    Map<String, Object> levelFind() {
        Map<String, Object> resJsonData = new HashMap<>();
        this.workspaceService.find(resJsonData);
        //this.workspaceService.levelFind(resJsonData);
        return this.setSuccessMessage(resJsonData);
    }
    //  부서 조회
    @RequestMapping(value = "/workspace/departmentFind", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    Map<String, Object> departmentFind() {
        Map<String, Object> resJsonData = new HashMap<>();
        this.workspaceService.find(resJsonData);
        //this.workspaceService.departmentFind(resJsonData);
        return this.setSuccessMessage(resJsonData);
    }
    //  사용자 관리 조회
    @RequestMapping(value = "/workspace/find", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
src/main/webapp/i18n/ko/global.json
@@ -65,9 +65,11 @@
        "workspaceUserLevelManagement" : "사용자 등급 관리",
        "addLevel" : "등급 추가",
        "levelName" : "등급명",
        "failedLevelRegistration" : "사용자 등급 등록 실패",
        "read" : "읽기",
        "write" : "쓰기",
        "departmentManagement" : "부서 관리",
        "addDepartment" : "부서 추가",
        "myWorkspace": "OWL 정보",
        "workspaceInformation": "기본 정보",
        "serviceStatus": "서비스 상태",
@@ -495,13 +497,19 @@
    "manageUser": {
        "manageUser": "사용자 권한 관리",
        "manageProjectPerm": "프로젝트 관리",
        "manageIssueSystemPerm": "이슈 시스템",
        "manageUserPerm": "사용자",
        "manageNoticePerm": "공지사항",
        "manageFAQPerm": "FAQ",
        "manageQnAPerm": "QnA",
        "manageEventPerm": "이벤트",
        "manageGuidePerm": "가이드"
        "manageIssueSystemPerm": "이슈 시스템 관리",
        "manageUserPerm": "사용자 관리",
        "manageNoticePerm": "공지사항 관리",
        "manageFAQPerm": "FAQ 관리",
        "manageQnAPerm": "QnA 관리",
        "manageEventPerm": "이벤트 관리",
        "manageGuidePerm": "가이드 관리"
    },
    "manageDepartment": {
        "manageDepartment": "부서 관리",
        "departmentName": "부서명",
        "departmentEx": "부서설명",
        "departmentCount": "부서인원"
    },
    "FAQ": {
        "FAQ": "FAQ",
@@ -736,7 +744,11 @@
        "emptyProject": "선택할 수 있는 프로젝트가 없습니다.",
        "emptyIssue": "선택할 수 있는 이슈가 없습니다.",
        "department" : "부서",
        "level" : "사용자 등급"
        "level" : "사용자 등급",
        "manageDepartment": "부서 관리",
        "departmentName": "부서명",
        "departmentEx": "부서설명",
        "departmentCount": "부서인원"
    },
    "tasks": {
        "agileBoardTitle": "칸반 보드"
src/main/webapp/scripts/app/workspace/workspace.controller.js
@@ -12,7 +12,9 @@
                $scope.fn = {
                    changeTab : changeTab,  //  탭 변경
                    findMyWorkspace : findMyWorkspace   //  내가 관리하는 업무 공간 정보
                    findMyWorkspace : findMyWorkspace,   //  내가 관리하는 업무 공간 정보
                    findUserLevel   : findUserLevel,    // 사용자 등급
                    findDepartment  : findDepartment    // 부서
                };
                $scope.vm = {
@@ -25,6 +27,16 @@
                    $scope.fn.findMyWorkspace();
                });
                //  사용자 등급 정보 갱신
                $scope.$on("findUserLevel", function () {
                    $scope.fn.findUserLevel();
                });
                //  부서 정보 갱신
                $scope.$on("findDepartment", function () {
                    $scope.fn.findDepartment();
                });
                //  탭 변경
                function changeTab(tab) {
                    $scope.vm.tab = tab;
@@ -32,6 +44,14 @@
                    if (tab === "USER_CONFIG") {
                        $scope.fn.findMyWorkspace();
                        $scope.$broadcast("getUserWorkspaceList");
                    }else if (tab === "USER_LEVEL_CONFIG") {
                        //$scope.fn.findMyWorkspace();
                        $scope.fn.findUserLevel();
                        $scope.$broadcast("getUserLevelList");
                    }else if (tab === "DEPARTMENT_CONFIG") {
                        //$scope.fn.findMyWorkspace();
                        $scope.fn.findDepartment();
                        $scope.$broadcast("getDepartmentList");
                    }
                }
@@ -56,8 +76,53 @@
                        }
                    });
                }
                $scope.fn.findMyWorkspace();
                //  사용자 등급을 조회한다.
                function findUserLevel() {
                    Workspace.findUserLevel($resourceProvider.getContent(
                        {},
                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
                        if (result.data.message.status === "success") {
                            if (result.data.data != null) {
                                /*$scope.vm.workspaceVo = result.data.data;
                                //  참여 가능 사용자 수
                                $scope.vm.workspaceVo.includeUserCount = $scope.vm.workspaceVo.maxUser - $scope.vm.workspaceVo.activeUser;*/
                                /*if ($scope.vm.workspaceVo.includeUserCount < 0) {
                                    $scope.vm.workspaceVo.includeUserCount = 0;
                                }*/
                            }
                        }
                        else {
                            SweetAlert.error($filter("translate")("managementWorkspace.failedToSelectWorkspaceInformation"), result.data.message.message); // "자신이 관리하는 업무 공간 정보 조회 실패"
                        }
                    });
                }
                $scope.fn.findUserLevel();
                //  부서를 조회한다.
                function findDepartment() {
                    Workspace.findDepartment($resourceProvider.getContent(
                        {},
                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
                        if (result.data.message.status === "success") {
                            if (result.data.data != null) {
                                /*$scope.vm.workspaceVo = result.data.data;
                                //  참여 가능 사용자 수
                                $scope.vm.workspaceVo.includeUserCount = $scope.vm.workspaceVo.maxUser - $scope.vm.workspaceVo.activeUser;*/
                                /*if ($scope.vm.workspaceVo.includeUserCount < 0) {
                                    $scope.vm.workspaceVo.includeUserCount = 0;
                                }*/
                            }
                        }
                        else {
                            SweetAlert.error($filter("translate")("managementWorkspace.failedToSelectWorkspaceInformation"), result.data.message.message); // "자신이 관리하는 업무 공간 정보 조회 실패"
                        }
                    });
                }
                $scope.fn.findDepartment();
            }
        ]);
    }
src/main/webapp/scripts/app/workspace/workspace.js
@@ -32,8 +32,8 @@
                    resolve : {
                        loadController : ["$q", function ($q) {
                            var deferred = $q.defer();
                            require(["modalFormAutoScroll", "workspaceController", "workspaceLevelAddController", "workspacePaymentExecuteController", "workspaceUserConfigController", "workspacePaymentModifyController",
                                "workspacePaymentAgreeTermController", "paymentService", "userWorkspaceService", "workspaceService", "numberOnly", 'jsTable', 'tableColumnGenerator',
                            require(["modalFormAutoScroll", "workspaceController", "workspaceLevelAddController", "workspaceDepartmentAddController", "workspacePaymentExecuteController", "workspaceUserConfigController", "workspacePaymentModifyController",
                                "workspacePaymentAgreeTermController", "paymentService", "userWorkspaceService", "workspaceService", "numberOnly", 'jsTable', 'tableColumnGenerator', 'summerNote', 'summerNote-ko-KR',
                                "crypto", "reservationDisableUserService", "workspacePaymentAddController", "workspaceUserLevelController", "workspaceDepartmentConfigController"], function () {
                                deferred.resolve();
                            });
src/main/webapp/scripts/app/workspace/workspaceDepartmentAdd.controller.js
New file
@@ -0,0 +1,123 @@
/**
 * Created by wisestone on 2018-02-19.
 */
'use strict';
define([
        'app'
    ],
    function (app) {
        app.controller('workspaceDepartmentAddController', ['$scope', '$rootScope', '$log', '$resourceProvider', 'SweetAlert', '$uibModal', '$uibModalInstance', '$state', 'Workspace', '$filter', 'parameter', '$timeout',
            function ($scope, $rootScope, $log, $resourceProvider, SweetAlert, $uibModal, $uibModalInstance, Workspace, $filter, parameter) {
                $scope.fn = {
                    cancel : cancel,    //  팝업 창 닫기
                    formSubmit : formSubmit,    //  폼 전송
                    formCheck : formCheck,   //  폼 체크
                };
                $scope.vm = {
                    form : {
                        title : "",
                        description : ""
                    },
                    options : {
                        callbacks : {
                            onImageUpload : function (data) {
                                data.pop();
                            }
                        },
                        disableDragAndDrop : true,
                        shortcuts : true,
                        toolbar : [
                            ['headline', ['style']],
                            ['style', ['bold', 'italic', 'underline', 'clear', 'strikethrough', 'superscript', 'subscript']],
                            ['fontface', ['fontname', 'fontsize']],
                            ['insert', ['link', 'video']],
                            ['fontclr', ['color']],
                            ['alignment', ['ul', 'ol', 'paragraph', 'lineheight', 'height']],
                            ['table', ['table']],
                            ['view', ['redo', 'undo']]
                        ],
                        keyMap : {
                            pc : {
                                'ENTER' : 'insertParagraph',
                                'CTRL+Z' : 'undo',
                                'CTRL+Y' : 'redo',
                                /*'TAB': 'tab',*/
                                'SHIFT+TAB' : 'untab',
                                'CTRL+B' : 'bold',
                                'CTRL+I' : 'italic',
                                'CTRL+U' : 'underline',
                                'CTRL+SHIFT+S' : 'strikethrough',
                                'CTRL+BACKSLASH' : 'removeFormat',
                                'CTRL+SHIFT+L' : 'justifyLeft',
                                'CTRL+SHIFT+E' : 'justifyCenter',
                                'CTRL+SHIFT+R' : 'justifyRight',
                                'CTRL+SHIFT+J' : 'justifyFull',
                                'CTRL+SHIFT+NUM7' : 'insertUnorderedList',
                                'CTRL+SHIFT+NUM8' : 'insertOrderedList',
                                'CTRL+LEFTBRACKET' : 'outdent',
                                'CTRL+RIGHTBRACKET' : 'indent',
                                'CTRL+NUM0' : 'formatPara',
                                'CTRL+NUM1' : 'formatH1',
                                'CTRL+NUM2' : 'formatH2',
                                'CTRL+NUM3' : 'formatH3',
                                'CTRL+NUM4' : 'formatH4',
                                'CTRL+NUM5' : 'formatH5',
                                'CTRL+NUM6' : 'formatH6',
                                'CTRL+ENTER' : 'insertHorizontalRule',
                                'CTRL+K' : 'linkDialog.show'
                            }
                        }
                    }
                };
                //  폼 체크
                function formCheck(formInvalid) {
                    if (formInvalid) {
                        return true;
                    }
                    return false;
                }
                //  폼 전송
                function formSubmit() {
                    $rootScope.spinner = true;
                    var content = {
                        title : $rootScope.preventXss($scope.vm.form.title),
                        description : $rootScope.preventXss($scope.vm.form.description)
                    };
                    Workspace.departmentAdd($resourceProvider.getContent(
                        content,
                        $resourceProvider.getPageContent(0, 10))).then(function (result) {
                        if (result.data.message.status === "success") {
                            $scope.fn.cancel();
                            //  목록 화면 갱신
                            $rootScope.$broadcast("getDepartmentList", {});
                        }
                        else {
                            SweetAlert.error($filter("translate")("managementWorkspace.failedLevelRegistration"), result.data.message.message);
                        }
                        $rootScope.spinner = false;
                    });
                }
                //  팝업 창 닫기
                function cancel() {
                    $rootScope.$broadcast("closeLayer");    //  팝업이 열리고 나서 js-multi, js-single 등에서 body 이벤트가 날아가는 현상 수정
                    $uibModalInstance.dismiss('cancel');
                    $(document).unbind("keydown");  //  단축키 이벤트 제거
                }
            }
        ]);
    }
);
src/main/webapp/scripts/app/workspace/workspaceDepartmentConfig.controller.js
@@ -14,28 +14,14 @@
                /*  $scope.fn 상속 중  */
                $scope.fn.getUserWorkspaceList = getUserWorkspaceList;  //  업무 공간 전체 사용자 정보
                $scope.fn.makeTableConfigs = makeTableConfigs;  //  업무 공간에 참여하는 전체 사용자 목록 테이블 설정
                $scope.fn.getDepartmentList = getDepartmentList;  //  부서 관리 리스트
                $scope.fn.makeTableConfigs = makeTableConfigs;  //  부서 관리 목록 테이블 설정
                $scope.fn.initSearch = initSearch;  //  검색 조건 초기화
                $scope.fn.changePageRowCount = changePageRowCount;  //  업무 공간 참여 사용자 목록 보기 개수 변경
                $scope.fn.departmentAdd = departmentAdd;    //  부서 추가
                /*  $scope.vm 상속 중  */
                $scope.vm.search = {
                    name : "",  //  이름
                    account : "",   //  이메일
                    statuses : []   //  상태 - Y, N
                };
                $scope.vm.options = {
                    statuses : [{
                        fieldKey : "Y",
                        fieldValue : $filter("translate")("managementWorkspace.participation") // "참여"
                    }, {
                        fieldKey : "N",
                        //fieldValue : $filter("translate")("managementWorkspace.waitForParticipation") // "참여대기"
                        fieldValue : $filter("translate")("managementWorkspace.withdrawal") // "탈퇴"
                    }]
                    departmentName : "",  //  부서명
                };
                $scope.vm.page = {
@@ -50,78 +36,47 @@
                //  테이블 이벤트
                $scope.vm.tableEvent = {
                    modifyUserWorkspace : modifyUserWorkspace   //  업무 공간 참여하는 사용자의 참여 상태 변경
                    // modifyUserWorkspace : modifyUserWorkspace   //  업무 공간 참여하는 사용자의 참여 상태 변경
                    view : view
                };
                //  결제 상세 정보
                $scope.$on("getUserWorkspaceList", function () {
                    $scope.fn.getUserWorkspaceList(0);
                //  부서 관리 리스트 불러오기
                $scope.$on("getDepartmentList", function () {
                    $scope.fn.getDepartmentList(0);
                });
                //  업무 공간 참여하는 사용자의 참여 상태 변경
                function modifyUserWorkspace(userWorkspace) {
                    UserWorkspace.modify($resourceProvider.getContent(
                        userWorkspace,
                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
                        if (result.data.message.status === "success") {
                            //  내가 관리하는 업무 공간 정보를 조회한다.
                            $scope.fn.findMyWorkspace();
                        }
                        else {
                            userWorkspace.useYn = false;
                            SweetAlert.error($filter("translate")("managementWorkspace.failedToParticipationStatusChange"), result.data.message.message); // "참여 상태 변경 실패"
                        }
                    });
                }
                //  검색 조건 초기화
                function initSearch() {
                    $scope.vm.search.name = "";
                    $scope.vm.search.account = "";
                    $scope.vm.search.statuses = [];
                    $scope.fn.getUserWorkspaceList(0);
                }
                //  업무 공간 참여 사용자 목록 보기 개수 변경
                function changePageRowCount() {
                    $scope.fn.getUserWorkspaceList(0);
                }
                //  업무공간 전체 사용자 목록 테이블 설정
                //  부서 관리 테이블 설정
                function makeTableConfigs() {
                    $scope.vm.tableConfigs = [];
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("common.name")
                        .setDType("checkbox")
                        .setHWidth("width-20-p")
                        .setDAlign("text-center"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("manageDepartment.departmentName")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
                        .setDName("userName"));
                        .setDName("levelName"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("common.email")
                        .setHName("manageDepartment.departmentEx")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
                        .setDName("account"));
                        .setDName("manageProject"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("common.department")
                        .setHName("manageDepartment.departmentCount")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
                        .setDName("department"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("common.level")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
                        .setDName("level"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("managementWorkspace.joinStatus")
                        .setHWidth("width-140-p")
                         .setDType("renderer")
                        .setDAlign("text-center pdr0 pdt0 pdl0 pdb0")
                        .setDName("userYn")
                        .setDRenderer("WORKSPACE_USE_YN"));
                        .setDName("IssueSystem"));
                }
                //  업무 공간 전체 사용자 목록 조회
                function getUserWorkspaceList(selectedPage) {
                //  부서 관리 목록 조회
                function getDepartmentList(selectedPage) {
                    if (selectedPage < 0) {
                        selectedPage = 0;
                    }
@@ -137,20 +92,12 @@
                    }
                    var conditions = {
                        name : $scope.vm.search.name,
                        account : $scope.vm.search.account,
                        statuses : (function () {
                            var statuses = [];
                            angular.forEach($scope.vm.search.statuses, function (status) {
                                statuses.push(status.fieldKey);
                            });
                            return statuses;
                        })(),
                        name : $scope.vm.search.departmentName //부서명
                    };
                    UserWorkspace.find($resourceProvider.getContent(conditions,
                    //테이블 리스트 데이터 컨트롤러 요청
                    //UserWorkspace.findDepartment($resourceProvider.getContent(conditions,
                    UserWorkspace.departmentFind($resourceProvider.getContent(conditions,
                        $resourceProvider.getPageContent(currentPage, $scope.vm.page.selectedPageRowCount))).then(function (result) {
                        if (result.data.message.status === "success") {
@@ -162,8 +109,27 @@
                        }
                    });
                }
                //  부서 추가
                function departmentAdd() {
                    $uibModal.open({
                        templateUrl : 'views/workspace/workspaceDepartmentAdd.html',
                        size : "md",
                        controller : 'workspaceDepartmentAddController',
                        backdrop : 'static',
                        resolve : {
                            parameter : function () {
                                return {
                                    /*workspaceId : $scope.vm.workspaceVo.id,
                                    usdKrw : $scope.vm.workspaceVo.usdKrw,
                                    maxUser : $scope.vm.workspaceVo.maxUser*/
                                };
                            }
                        }
                    });
                }
                $scope.fn.makeTableConfigs();
                $scope.fn.getDepartmentList();
            }
        ]);
    }
src/main/webapp/scripts/app/workspace/workspaceLevelAdd.controller.js
@@ -4,97 +4,66 @@
'use strict';
define([
        'app',
        'angular'
        'app'
    ],
    function (app, angular) {
    function (app) {
        app.controller('workspaceLevelAddController', ['$scope', '$rootScope', '$log', '$resourceProvider', 'SweetAlert', '$uibModal', '$uibModalInstance', '$state', 'Workspace', '$filter', 'parameter', '$timeout',
            function ($scope, $rootScope, $log, $resourceProvider, SweetAlert, $uibModal, $uibModalInstance, Payment, $filter, parameter, $timeout) {
            function ($scope, $rootScope, $log, $resourceProvider, SweetAlert, $uibModal, $uibModalInstance, Workspace, $filter, parameter) {
                $scope.fn = {
                    //add : add,    //  등급 추가
                    cancel : cancel,    //  팝업 창 닫기
                    formSubmit : formSubmit,    //  폼 전송
                    formCheck : formCheck,   //  폼 체크
                    formSubmit : formSubmit
                };
                $scope.vm = {
                    form : {
                        /*workspaceId : parameter.workspaceId,
                        usdKrw : parameter.usdKrw,
                        maxUser : parameter.maxUser,
                        buyUser : "",
                        type : "MONTH",
                        cardNumber1 : "",
                        cardNumber2 : "",
                        cardNumber3 : "",
                        cardNumber4 : "",
                        expireMonth : "",
                        expireYear : "",
                        expireYearTmp : "",
                        birth : "",
                        cardPwd : "",
                        paymentAmountTemp : "", //  클라이언트에서 사용자 수를 변경할 때 보여줄 결제 금액 - 금액은 서버에서 다시 계산한다.
                        confirm : false //  약관 동의*/
                    },
                    viewAgreeTerm : false
                        levelName : "",
                        permProjectSetting : "",
                        permIssueSetting : "",
                        permUser : "",
                        permNotice : "",
                        permFAQ : "",
                        permQnA : "",
                        permGuide : ""
                    }
                };
                //  사용자 가격 보기
                /*$scope.$watch("vm.form.buyUser", function (newValue) {
                    if ($rootScope.isDefined(newValue)) {
                        var totalAmount = (BILLING_AMOUNT * $scope.vm.form.usdKrw * newValue);
                        var discount = 0;
                        if (newValue > 99) {
                            var sale = newValue * 0.01;
                            discount = (totalAmount * (sale/100));
                        }
                        $scope.vm.form.paymentAmountTemp = Math.floor(totalAmount - discount);
                //  폼 체크
                function formCheck(formInvalid) {
                    if (formInvalid) {
                        return true;
                    }
                    else {
                        $scope.vm.form.paymentAmountTemp = 0;
                    }
                });*/
                    return false;
                }
                //  폼 전송
                /*function formSubmit() {
                function formSubmit() {
                    $rootScope.spinner = true;
                    $scope.vm.form.expireYear = "20" + $scope.vm.form.expireYearTmp;
                    var content = angular.copy($scope.vm.form);
                    var content = {
                        title : $rootScope.preventXss($scope.vm.form.levelName),
                        description : $rootScope.preventXss($scope.vm.form.description)
                    };
                    //  암호화 시간동안 프로그래스바 못올리는 현상 수정
                    $timeout(function () {
                        content.cardNumber1 = $rootScope.encryption($scope.vm.form.cardNumber1);
                        content.cardNumber2 = $rootScope.encryption($scope.vm.form.cardNumber2);
                        content.cardNumber3 = $rootScope.encryption($scope.vm.form.cardNumber3);
                        content.cardNumber4 = $rootScope.encryption($scope.vm.form.cardNumber4);
                        content.expireMonth = $rootScope.encryption($scope.vm.form.expireMonth);
                        content.expireYear = $rootScope.encryption($scope.vm.form.expireYear);
                        content.cardPwd = $rootScope.encryption($scope.vm.form.cardPwd);
                        content.birth = $rootScope.encryption($scope.vm.form.birth);
                    Workspace.levelAdd($resourceProvider.getContent(
                        content,
                        $resourceProvider.getPageContent(0, 10))).then(function (result) {
                        Payment.immediateAddUser($resourceProvider.getContent(
                            content,
                            $resourceProvider.getPageContent(0, 10))).then(function (result) {
                            if (result.data.message.status === "success") {
                                $scope.fn.cancel();
                                SweetAlert.success($filter("translate")("managementWorkspace.paymentCompleted"), result.data.message.message); // "추가 결제 성공"
                                //  결제 및 업무 공간 정보 화면 갱신
                                $rootScope.$broadcast("findMyWorkspace", {});
                                $rootScope.$broadcast("getPaymentDetail", {});
                            }
                            else {
                                SweetAlert.error($filter("translate")("managementWorkspace.failedToRegularPaymentChange"), result.data.message.message); // "추가 결제 실패"
                            }
                        if (result.data.message.status === "success") {
                            $scope.fn.cancel();
                            //  목록 화면 갱신
                            $rootScope.$broadcast("getUserLevelList", {});
                        }
                        else {
                            SweetAlert.error($filter("translate")("managementWorkspace.failedLevelRegistration"), result.data.message.message);
                        }
                            $rootScope.spinner = false;
                        });
                    }, 100);
                }*/
                        $rootScope.spinner = false;
                    });
                }
                //  팝업 창 닫기
                function cancel() {
@@ -102,45 +71,6 @@
                    $uibModalInstance.dismiss('cancel');
                    $(document).unbind("keydown");  //  단축키 이벤트 제거
                }
                //  사용자 수 변경
                /*function changeBuyUser(changeType) {
                    if (changeType === "PLUS") {
                        if ($scope.vm.form.buyUser < 999) {
                            $scope.vm.form.buyUser++;
                        }
                    }
                    else {
                        if ($scope.vm.form.buyUser > 1) {
                            $scope.vm.form.buyUser--;
                        }
                    }
                }*/
                //  폼 체크
                /*function formCheck() {
                    if (!$scope.vm.form.confirm) {
                        return true;
                    }
                    if (!$rootScope.isDefined($scope.vm.form.cardNumber1) || !$rootScope.isDefined($scope.vm.form.cardNumber2) || !$rootScope.isDefined($scope.vm.form.cardNumber3)
                        || !$rootScope.isDefined($scope.vm.form.cardNumber4) || !$rootScope.isDefined($scope.vm.form.expireMonth) || !$rootScope.isDefined($scope.vm.form.expireYearTmp)
                        || !$rootScope.isDefined($scope.vm.form.birth) || !$rootScope.isDefined($scope.vm.form.cardPwd) || !$rootScope.isDefined($scope.vm.form.type)) {
                        return true;
                    }
                    if ($scope.vm.form.cardNumber1.length !== 4 || $scope.vm.form.cardNumber2.length !== 4 || $scope.vm.form.cardNumber3.length !== 4 || $scope.vm.form.cardNumber4.length !== 4
                        || $scope.vm.form.expireMonth.length !== 2 || $scope.vm.form.expireYearTmp.length !== 2 || $scope.vm.form.birth.length < 6 || $scope.vm.form.cardPwd.length !== 2) {
                        return true;
                    }
                    //  사용자 수는 1명 이상이어야 한다.
                    if ($scope.vm.form.buyUser < 1) {
                        return true;
                    }
                    return false;
                }*/
            }
        ]);
src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js
@@ -138,12 +138,16 @@
                        .setHName("common.department")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
                        .setDName("department"));
                        .setDType("renderer")
                        .setDName("department")
                        .setDRenderer("DEPARTMENT_OPTION"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("common.level")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
                        .setDName("level"));
                        .setDType("renderer")
                        .setDName("level")
                        .setDRenderer("LEVEL_OPTION"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("managementWorkspace.joinStatus")
                        .setHWidth("width-140-p")
@@ -197,6 +201,7 @@
                }
                $scope.fn.makeTableConfigs();
                $scope.fn.getUserWorkspaceList();
            }
        ]);
    }
src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js
@@ -9,34 +9,21 @@
    ],
    function (app, angular) {
        app.controller('workspaceUserLevelController', ['$scope', '$rootScope', '$log', '$resourceProvider', 'SweetAlert', '$uibModal', '$q', '$state', '$tableProvider', 'Payment', 'Workspace',
            'UserWorkspace', '$filter',
            'UserWorkspace', 'Workspace', '$filter',
            function ($scope, $rootScope, $log, $resourceProvider, SweetAlert, $uibModal, $q, $state, $tableProvider, Payment, Workspace, UserWorkspace, $filter) {
                /*  $scope.fn 상속 중  */
                $scope.fn.getUserWorkspaceList = getUserWorkspaceList;  //  업무 공간 전체 사용자 정보
                $scope.fn.makeTableConfigs = makeTableConfigs;  //  업무 공간에 참여하는 전체 사용자 목록 테이블 설정
                $scope.fn.getUserLevelList = getUserLevelList;  //  사용자 등급 관리 리스트
                $scope.fn.makeTableConfigs = makeTableConfigs;  //  사용자 등급 관리 목록 테이블 설정
                $scope.fn.initSearch = initSearch;  //  검색 조건 초기화
                $scope.fn.changePageRowCount = changePageRowCount;  //  업무 공간 참여 사용자 목록 보기 개수 변경
                $scope.fn.add = add;    //  등급 추가
                $scope.fn.levelAdd = levelAdd;    //  등급 추가
                /*  $scope.vm 상속 중  */
                $scope.vm.search = {
                    name : "",  //  이름
                    account : "",   //  이메일
                    statuses : []   //  상태 - Y, N
                    levelName : "",  //  등급명
                };
                $scope.vm.options = {
                    statuses : [{
                        fieldKey : "Y",
                        fieldValue : $filter("translate")("managementWorkspace.participation") // "참여"
                    }, {
                        fieldKey : "N",
                        //fieldValue : $filter("translate")("managementWorkspace.waitForParticipation") // "참여대기"
                        fieldValue : $filter("translate")("managementWorkspace.withdrawal") // "탈퇴"
                    }]
                };
                $scope.vm.page = {
                    selectedPage : 0,
@@ -50,78 +37,86 @@
                //  테이블 이벤트
                $scope.vm.tableEvent = {
                    modifyUserWorkspace : modifyUserWorkspace   //  업무 공간 참여하는 사용자의 참여 상태 변경
                    // modifyUserWorkspace : modifyUserWorkspace   //  업무 공간 참여하는 사용자의 참여 상태 변경
                    view : view
                };
                //  결제 상세 정보
                $scope.$on("getUserWorkspaceList", function () {
                    $scope.fn.getUserWorkspaceList(0);
                //  사용자 등급 리스트 불러오기
                $scope.$on("getUserLevelList", function () {
                    $scope.fn.getUserLevelList(0);
                });
                //  업무 공간 참여하는 사용자의 참여 상태 변경
                function modifyUserWorkspace(userWorkspace) {
                    UserWorkspace.modify($resourceProvider.getContent(
                        userWorkspace,
                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
                        if (result.data.message.status === "success") {
                            //  내가 관리하는 업무 공간 정보를 조회한다.
                            $scope.fn.findMyWorkspace();
                        }
                        else {
                            userWorkspace.useYn = false;
                            SweetAlert.error($filter("translate")("managementWorkspace.failedToParticipationStatusChange"), result.data.message.message); // "참여 상태 변경 실패"
                        }
                    });
                }
                //  검색 조건 초기화
                function initSearch() {
                    $scope.vm.search.name = "";
                    $scope.vm.search.account = "";
                    $scope.vm.search.statuses = [];
                    //$scope.vm.search.name = "";
                    //$scope.vm.search.account = "";
                    //$scope.vm.search.statuses = [];
                    $scope.fn.getUserWorkspaceList(0);
                }
                //  업무 공간 참여 사용자 목록 보기 개수 변경
                function changePageRowCount() {
                    $scope.fn.getUserWorkspaceList(0);
                }
                //  업무공간 전체 사용자 목록 테이블 설정
                //  사용자 등급 관리 테이블 설정
                function makeTableConfigs() {
                    $scope.vm.tableConfigs = [];
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("common.name")
                        .setDType("checkbox")
                        .setHWidth("width-20-p")
                        .setDAlign("text-center"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("managementWorkspace.levelName")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
                        .setDName("userName"));
                        .setDName("levelName"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("common.email")
                        .setHName("manageUser.manageProjectPerm")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
                        .setDName("account"));
                        .setDName("manageProject")
                        .setDRenderer("WORKSPACE_USE_YN"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("common.department")
                        .setHName("manageUser.manageIssueSystemPerm")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
                        .setDName("department"));
                        .setDName("IssueSystem")
                        .setDRenderer("WORKSPACE_USE_YN"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("common.level")
                        .setHName("manageUser.manageUserPerm")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
                        .setDName("level"));
                        .setDName("User")
                        .setDRenderer("WORKSPACE_USE_YN"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("managementWorkspace.joinStatus")
                        .setHName("manageUser.manageNoticePerm")
                        .setHWidth("width-140-p")
                         .setDType("renderer")
                        .setDAlign("text-center pdr0 pdt0 pdl0 pdb0")
                        .setDName("userYn")
                        .setDName("Notice")
                        .setDRenderer("WORKSPACE_USE_YN"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("manageUser.manageFAQPerm")
                        .setHWidth("width-140-p")
                        .setDType("renderer")
                        .setDAlign("text-center pdr0 pdt0 pdl0 pdb0")
                        .setDName("FAQ")
                        .setDRenderer("WORKSPACE_USE_YN"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("manageUser.manageQnAPerm")
                        .setHWidth("width-140-p")
                        .setDType("renderer")
                        .setDAlign("text-center pdr0 pdt0 pdl0 pdb0")
                        .setDName("QnA")
                        .setDRenderer("WORKSPACE_USE_YN"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                        .setHName("manageUser.manageGuidePerm")
                        .setHWidth("width-140-p")
                        .setDType("renderer")
                        .setDAlign("text-center pdr0 pdt0 pdl0 pdb0")
                        .setDName("Guide")
                        .setDRenderer("WORKSPACE_USE_YN"));
                }
                //  업무 공간 전체 사용자 목록 조회
                function getUserWorkspaceList(selectedPage) {
                //  사용자 등급 관리 목록 조회
                function getUserLevelList(selectedPage) {
                    if (selectedPage < 0) {
                        selectedPage = 0;
                    }
@@ -136,21 +131,13 @@
                        currentPage = selectedPage;
                    }
                    var conditions = {
                        name : $scope.vm.search.name,
                        account : $scope.vm.search.account,
                        statuses : (function () {
                            var statuses = [];
                            angular.forEach($scope.vm.search.statuses, function (status) {
                                statuses.push(status.fieldKey);
                            });
                            return statuses;
                        })(),
                    var conditions = {
                        name : $scope.vm.search.levelName //등급명
                    };
                    UserWorkspace.find($resourceProvider.getContent(conditions,
                    //테이블 리스트 데이터 컨트롤러 요청
                    //UserWorkspace.findLevel($resourceProvider.getContent(conditions,
                    Workspace.levelFind($resourceProvider.getContent(conditions,
                        $resourceProvider.getPageContent(currentPage, $scope.vm.page.selectedPageRowCount))).then(function (result) {
                        if (result.data.message.status === "success") {
@@ -158,30 +145,31 @@
                            $scope.vm.responseData = result.data;
                        }
                        else {
                            SweetAlert.error($filter("translate")("managementWorkspace.failedToSelectWorkspaceFullUserList"), result.data.message.message); // "업무 공간 전체 사용자 목록 조회 실패"
                            SweetAlert.error($filter("translate")("managementWorkspace.failedToSelectWorkspaceFullUserList"), result.data.message.message); // "사용자 등급 목록 조회 실패"
                        }
                    });
                }
                $scope.fn.makeTableConfigs();
                //  등급 추가
                function add() {
                function levelAdd() {
                    $uibModal.open({
                        templateUrl : 'views/workspace/workspaceLevelAdd.html',
                        size : "md",
                        //controller : 'workspaceLevelAddController',
                        backdrop : 'static'
                        /*resolve : {
                        controller : 'workspaceLevelAddController',
                        backdrop : 'static',
                        resolve : {
                            parameter : function () {
                                return {
                                    workspaceId : $scope.vm.workspaceVo.id,
                                    usdKrw : $scope.vm.workspaceVo.usdKrw,
                                    maxUser : $scope.vm.workspaceVo.maxUser
                                    // workspaceId : $scope.vm.workspaceVo.id,
                                    // usdKrw : $scope.vm.workspaceVo.usdKrw,
                                    // maxUser : $scope.vm.workspaceVo.maxUser
                                };
                            }
                        }*/
                        }
                    });
                }
                $scope.fn.makeTableConfigs();
                $scope.fn.getUserLevelList();
            }
        ]);
    }
src/main/webapp/scripts/components/workspace/workspace.service.js
@@ -8,9 +8,33 @@
], function (app) {
    app.factory("Workspace", ['$http', '$log', function ($http, $log) {
        return {
            levelFind : function (conditions) {
                return $http.post("workspace/levelFind", conditions).then(function (response) {
                    $log.debug("사용자 등급 목록 : ", response);
                    return response;
                });
            },
            departmentFind : function (conditions) {
                return $http.post("workspace/departmentFind", conditions).then(function (response) {
                    $log.debug("부서 목록 : ", response);
                    return response;
                });
            },
            find : function (conditions) {
                return $http.post("workspace/find", conditions).then(function (response) {
                    $log.debug("업무공간 목록 데이터 : ", response);
                    return response;
                });
            },
            levelAdd : function (conditions) {
                return $http.post("workspace/levelAdd", conditions).then(function (response) {
                    $log.debug("사용자 등급 생성 결과 : ", response);
                    return response;
                });
            },
            departmentAdd : function (conditions) {
                return $http.post("workspace/departmentAdd", conditions).then(function (response) {
                    $log.debug("부서 생성 결과 : ", response);
                    return response;
                });
            },
@@ -32,6 +56,18 @@
                    return response;
                });
            },
            findUserLevel : function (conditions) { //사용자 등급
                return $http.post("workspace/levelFind", conditions).then(function (response) {
                    $log.debug("사용자 등급 정보 결과 : ", response);
                    return response;
                });
            },
            findDepartment : function (conditions) { //부서
                return $http.post("workspace/departmentFind", conditions).then(function (response) {
                    $log.debug("사용자 등급 정보 결과 : ", response);
                    return response;
                });
            },
            modify : function (conditions) {
                return $http.post("workspace/modify", conditions).then(function (response) {
                    $log.debug("업무공간 수정 결과 : ", response);
src/main/webapp/scripts/main.js
@@ -226,6 +226,7 @@
        'workspacePaymentAgreeTermController' : 'app/workspace/workspacePaymentAgreeTerm.controller', //  업무 공간 이용 약관 확인 컨트롤러
        'workspaceUserLevelController' : 'app/workspace/workspaceUserLevelConfig.controller',  //  사용자 관리 컨트롤러
        'workspaceLevelAddController' : 'app/workspace/workspaceLevelAdd.controller',  //  사용자 등급 추가 컨트롤러
        'workspaceDepartmentAddController' : 'app/workspace/workspaceDepartmentAdd.controller',  //  부서 추가 컨트롤러
        'workspaceDepartmentConfigController' : 'app/workspace/workspaceDepartmentConfig.controller',  //  사용자 부서 관리 컨트롤러
        'workspaceService' : 'components/workspace/workspace.service',  //  업무 공간에 관련된 통신을 담당한다.
        'paymentService' : 'components/payment/payment.service',    //  결재에 관련된 통신을 담당한다.
src/main/webapp/views/workspace/workspace.html
@@ -1,10 +1,16 @@
<div class="element-wrapper">
    <div class="element-actions">
        <button ng-click="fn.add()" ng-if="$root.checkMngPermission('USER_PERMISSION_MNG_WORKSPACE')"
    <div class="element-actions" ng-show="vm.tab == 'USER_LEVEL_CONFIG'">
        <button ng-click="fn.levelAdd()" ng-if="$root.checkMngPermission('USER_PERMISSION_MNG_WORKSPACE')"
                class="btn btn-xlg btn-danger"><i class="os-icon os-icon-plus"></i> <span
                translate="managementWorkspace.addLevel">등급 추가</span>
        </button>
    </div>
    <div class="element-actions" ng-show="vm.tab == 'DEPARTMENT_CONFIG'">
        <button ng-click="fn.departmentAdd()" ng-if="$root.checkMngPermission('USER_PERMISSION_MNG_WORKSPACE')"
                class="btn btn-xlg btn-danger"><i class="os-icon os-icon-plus"></i> <span
                translate="managementWorkspace.addDepartment">부서 추가</span>
        </button>
    </div>
    <h6 class="element-header" translate="managementWorkspace.myWorkspace">
        나의 업무공간 관리
    </h6>
src/main/webapp/views/workspace/workspaceDepartmentAdd.html
New file
@@ -0,0 +1,58 @@
<div class="formModal">
    <div class="modal-header faded smaller">
        <div class="modal-title">
            <strong>새 부서 추가</strong>
        </div>
        <button aria-label="Close" class="close" type="button" ng-click="fn.cancel()">
            <span aria-hidden="true"> &times;</span>
        </button>
    </div>
    <div class="modal-body">
        <form role="form" name="departmentAddForm">
            <div class="form-group">
                <label for="departmentAddForm1">
                    <span translate="common.departmentName">부서명</span>
                    <code class="highlighter-rouge">*</code>
                </label>
                <input id="departmentAddForm1"
                       name="name"
                       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.title"
                       ng-maxlength="200"
                       maxlength="200"
                       required>
                <!--<small translate="notice.enterSpecialCharacters">제목에는 특수 문자를 입력할 수 없습니다.</small>-->
            </div>
            <div class="form-group">
                <label>
                    <span translate="common.departmentEx">부서 설명</span>
                    <code class="highlighter-rouge">*</code>
                </label>
                <summernote
                        class="summernote"
                        lang="ko-KR"
                        required
                        config="vm.options"
                        ng-model="vm.form.description"
                        target=".note-editable"></summernote>
            </div>
        </form>
    </div>
    <div class="modal-footer buttons-on-right">
        <button type="button" class="btn btn-md btn-grey" ng-click="fn.cancel()"><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(departmentAddForm.$invalid) || $root.spinner) ? null : fn.formSubmit()"
                ng-disabled="fn.formCheck(departmentAddForm.$invalid)"
                ng-click="fn.formSubmit()"><span translate="common.save">저장</span>
        </button>
    </div>
</div>
src/main/webapp/views/workspace/workspaceDepartmentConfig.html
@@ -1,4 +1,4 @@
<div class="row" ng-controller="workspaceDepartmentConfigController">
<!--<div class="row" ng-controller="workspaceDepartmentConfigController">
    <div class="col-lg-12">
        <div class="projects-list">
            <div class="project-box">
@@ -36,11 +36,11 @@
                                </div>
                                <div class="col-lg-3 text-center b-r">
                                    <div class="el-tablo highlight">
                                        <!--
                                        &lt;!&ndash;
                                        <div class="label" translate="managementWorkspace.waitForParticipation">
                                            참여 대기
                                        </div>
                                        -->
                                        &ndash;&gt;
                                        <div class="label" translate="managementWorkspace.withdrawal">
                                            탈퇴
                                        </div>
@@ -66,9 +66,9 @@
            </div>
        </div>
    </div>
</div>
</div>-->
<div class="row">
<div class="row" ng-controller="workspaceDepartmentConfigController">
    <div class="col-lg-12">
        <div class="element-box">
            <div class="searchdiv">
@@ -76,26 +76,8 @@
                    <div class="row">
                        <div class="col-xl-2">
                            <div class="form-group">
                                <label translate="common.name">이름</label>
                                <input class="form-control" type="text" ng-model="vm.search.name" maxlength="10">
                            </div>
                        </div>
                        <div class="col-xl-3">
                            <div class="form-group">
                                <label translate="common.status">상태</label>
                                <ng-dropdown-multiselect class="multiSelect cursor"
                                                         data-input-name="statuses"
                                                         selected-model="vm.search.statuses"
                                                         extra-settings="{ stringTypeOption : true }"
                                                         options="vm.options.statuses"></ng-dropdown-multiselect>
                            </div>
                        </div>
                        <div class="col-xl-3">
                            <div class="form-group">
                                <label translate="common.email">이메일</label>
                                <input class="form-control" type="text" ng-model="vm.search.account" maxlength="50">
                                <label translate="common.departmentName">부서명</label>
                                <input class="form-control" type="text" ng-model="vm.search.DepatmentName" maxlength="10">
                            </div>
                        </div>
src/main/webapp/views/workspace/workspaceLevelAdd.html
@@ -1,4 +1,4 @@
<div class="formModal" ng-controller="workspaceLevelAddController">
<div class="formModal">
    <div class="modal-header faded smaller">
        <div class="modal-title">
            <strong>새 등급 추가</strong>
@@ -16,99 +16,73 @@
                        <label for="levelAddForm1"><span translate="managementWorkspace.levelName">등급명</span><code class="highlighter-rouge">*</code></label>
                    </td>
                    <td>
                        <div class="input-group mb-2 mr-sm-2 mb-sm-0" colspan="3">
                        <div class="input-group mb-0 mr-sm-0 mb-sm-0">
                            <input id="levelAddForm1"
                                   class="form-control" placeholder="추가 할 등급명을 입력하세요."
                                   type="text"
                                   ng-model="vm.form.name"
                                   ng-model="vm.form.levelName"
                                   maxlength="50"
                                   autofocus
                                   required>
                        </div>
                    </td>
                </tr>
                <!--tableColumnGenerator.dirextive.js 파일 참고-->
                <tr>
                    <td class="text-left bold">
                        <span translate="manageUser.manageProjectPerm">프로젝트 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                </tr>
                <!--<tr>
                    <td>
                        <span translate="managementWorkspace.read">읽기</span>
                        <span translate="managementWorkspace.write">쓰기</span>
                    </td>
                </tr>-->
                <tr>
                    <td class="text-left bold">
                        <span translate="manageUser.manageIssueSystemPerm">이슈 시스템</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    <td colspan="2">
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permProjectSetting' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
                    <td class="text-left bold">
                        <span translate="manageUser.manageUserPerm">사용자</span>
                        <span translate="manageUser.manageIssueSystemPerm">이슈 시스템 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permIssueSetting' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
                    <td class="text-left bold">
                        <span translate="manageUser.manageNoticePerm">공지사항</span>
                        <span translate="manageUser.manageUserPerm">사용자 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permUser' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
                    <td class="text-left bold">
                        <span translate="manageUser.manageFAQPerm">FAQ</span>
                        <span translate="manageUser.manageNoticePerm">공지사항 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permNotice' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
                    <td class="text-left bold">
                        <span translate="manageUser.manageQnAPerm">QnA</span>
                        <span translate="manageUser.manageFAQPerm">FAQ 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permFAQ' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
                    <td class="text-left bold">
                        <span translate="manageUser.manageQnAPerm">QnA 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permQnA' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
                    <td class="text-left bold">
                        <span translate="manageUser.manageGuidePerm">가이드</span>
                        <span translate="manageUser.manageGuidePerm">가이드 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='data.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                </tr>
            </table>
@@ -119,7 +93,7 @@
        <button type="button" class="btn btn-md btn-grey" ng-click="fn.cancel()"><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(paymentAddForm.$invalid) || $root.spinner) ? null : fn.formSubmit()"
                js-short-cut-action="(fn.formCheck(levelAddForm.$invalid) || $root.spinner) ? null : fn.formSubmit()"
                ng-disabled="fn.formCheck(paymentAddForm.$invalid)"
                ng-click="fn.formSubmit()"><span translate="common.save">저장</span>
        </button>
src/main/webapp/views/workspace/workspaceUserConfig.html
@@ -81,7 +81,7 @@
                            </div>
                        </div>
                        <div class="col-xl-3">
                        <div class="col-xl-2">
                            <div class="form-group">
                                <label translate="common.status">상태</label>
                                <ng-dropdown-multiselect class="multiSelect cursor"
@@ -92,7 +92,7 @@
                            </div>
                        </div>
                        <div class="col-xl-3">
                        <div class="col-xl-2">
                            <div class="form-group">
                                <label>등급</label>
                                <ng-dropdown-multiselect class="multiSelect cursor"
@@ -121,7 +121,7 @@
                            </div>
                        </div>
                        <div class="col-xl-4">
                        <div class="col-xl-11">
                            <div class="form-group form-buttons-w2">
                                <button class="btn btn-xlg btn-navy" ng-click="fn.getUserWorkspaceList(0)">
                                    <i class="os-icon os-icon-ui-37"></i>
src/main/webapp/views/workspace/workspaceUserLevelConfig.html
@@ -69,7 +69,7 @@
                            </label>
                        </div>
                    </div>
                    <div class="col-sm-6 text-right">
                    <div class="col-sm-6 text-right" ng-if="$root.checkMngPermission('USER_PERMISSION_MNG_USER')">
                        <!--<div class="btn-group">
                            <button aria-expanded="false"
                                    aria-haspopup="true"