• 番外篇-权限文件解析


    一、

    (function () {
        $(function () {
    
            var _organizationUnitService = abp.services.app.organizationUnit;
            var _entityTypeFullName = 'Abp.Organizations.OrganizationUnit';
    
            var _permissions = {
                manageOrganizationTree: abp.auth.hasPermission('Pages.Administration.OrganizationUnits.ManageOrganizationTree'),
                manageMembers: abp.auth.hasPermission('Pages.Administration.OrganizationUnits.ManageMembers'),
                manageRoles: abp.auth.hasPermission('Pages.Administration.OrganizationUnits.ManageRoles')
            };
    
            var _createModal = new app.ModalManager({
                viewUrl: abp.appPath + 'AppAreaName/OrganizationUnits/CreateModal',
                scriptUrl: abp.appPath + 'view-resources/Areas/AppAreaName/Views/OrganizationUnits/_CreateModal.js',
                modalClass: 'CreateOrganizationUnitModal'
            });
    
            var _editModal = new app.ModalManager({
                viewUrl: abp.appPath + 'AppAreaName/OrganizationUnits/EditModal',
                scriptUrl: abp.appPath + 'view-resources/Areas/AppAreaName/Views/OrganizationUnits/_EditModal.js',
                modalClass: 'EditOrganizationUnitModal'
            });
    
            var _addUserModal = new app.ModalManager({
                viewUrl: abp.appPath + 'AppAreaName/OrganizationUnits/AddMemberModal',
                scriptUrl: abp.appPath + 'view-resources/Areas/AppAreaName/Views/OrganizationUnits/_AddMemberModal.js',
                modalClass: 'AddMemberModal',
                addMemberOptions: {
                    title: app.localize('SelectAUser'),
                    serviceMethod: _organizationUnitService.findUsers
                }
            });
    
            var _addRoleModal = new app.ModalManager({
                viewUrl: abp.appPath + 'AppAreaName/OrganizationUnits/AddRoleModal',
                scriptUrl: abp.appPath + 'view-resources/Areas/AppAreaName/Views/OrganizationUnits/_AddRoleModal.js',
                modalClass: 'AddRoleModal',
                addRoleOptions: {
                    title: app.localize('SelectARole'),
                    serviceMethod: _organizationUnitService.findRoles
                }
            });
    
            var _entityTypeHistoryModal = app.modals.EntityTypeHistoryModal.create();
    
            function entityHistoryIsEnabled() {
                return abp.custom.EntityHistory &&
                    abp.custom.EntityHistory.IsEnabled &&
                    _.filter(abp.custom.EntityHistory.EnabledEntities, function (entityType) {
                        return entityType === _entityTypeFullName;
                    }).length === 1;
            }
    
            var organizationTree = {
    
                $tree: $('#OrganizationUnitEditTree'),
    
                $emptyInfo: $('#OrganizationUnitTreeEmptyInfo'),
    
                show: function () {
                    organizationTree.$emptyInfo.hide();
                    organizationTree.$tree.show();
                },
    
                hide: function () {
                    organizationTree.$emptyInfo.show();
                    organizationTree.$tree.hide();
                },
    
                unitCount: 0,
    
                setUnitCount: function (unitCount) {
                    organizationTree.unitCount = unitCount;
                    if (unitCount) {
                        organizationTree.show();
                    } else {
                        organizationTree.hide();
                    }
                },
    
                refreshUnitCount: function () {
                    organizationTree.setUnitCount(organizationTree.$tree.jstree('get_json').length);
                },
    
                selectedOu: {
                    id: null,
                    displayName: null,
                    code: null,
    
                    set: function (ouInTree) {
                        if (!ouInTree) {
                            organizationTree.selectedOu.id = null;
                            organizationTree.selectedOu.displayName = null;
                            organizationTree.selectedOu.code = null;
                        } else {
                            organizationTree.selectedOu.id = ouInTree.id;
                            organizationTree.selectedOu.displayName = ouInTree.original.displayName;
                            organizationTree.selectedOu.code = ouInTree.original.code;
                        }
    
                        members.load();
                        roles.load();
                    }
                },
    
                contextMenu: function (node) {
    
                    var items = {
                        editUnit: {
                            label: app.localize('Edit'),
                            icon: 'la la-pencil',
                            _disabled: !_permissions.manageOrganizationTree,
                            action: function (data) {
                                var instance = $.jstree.reference(data.reference);
    
                                _editModal.open({
                                    id: node.id
                                },
                                    function (updatedOu) {
                                        node.original.displayName = updatedOu.displayName;
                                        instance.rename_node(node, organizationTree.generateTextOnTree(updatedOu));
                                    });
                            }
                        },
    
                        addSubUnit: {
                            label: app.localize('AddSubUnit'),
                            icon: 'la la-plus',
                            _disabled: !_permissions.manageOrganizationTree,
                            action: function () {
                                organizationTree.addUnit(node.id);
                            }
                        },
    
                        addMember: {
                            label: app.localize('AddMember'),
                            icon: 'la la-user-plus',
                            _disabled: !_permissions.manageMembers,
                            action: function () {
                                members.openAddModal();
                            }
                        },
    
                        addRole: {
                            label: app.localize('AddRole'),
                            icon: 'la la-user-plus',
                            _disabled: !_permissions.manageRoles,
                            action: function () {
                                roles.openAddModal();
                            }
                        },
    
                        'delete': {
                            label: app.localize("Delete"),
                            icon: 'la la-remove',
                            _disabled: !_permissions.manageOrganizationTree,
                            action: function (data) {
                                var instance = $.jstree.reference(data.reference);
    
                                abp.message.confirm(
                                    app.localize('OrganizationUnitDeleteWarningMessage', node.original.displayName),
                                    app.localize('AreYouSure'),
                                    function (isConfirmed) {
                                        if (isConfirmed) {
                                            _organizationUnitService.deleteOrganizationUnit({
                                                id: node.id
                                            }).done(function () {
                                                abp.notify.success(app.localize('SuccessfullyDeleted'));
                                                instance.delete_node(node);
                                                organizationTree.refreshUnitCount();
                                            }).fail(function (err) {
                                                setTimeout(function () { abp.message.error(err.message); }, 500);
                                            });
                                        }
                                    }
                                );
                            }
                        }
                    };
    
                    if (entityHistoryIsEnabled()) {
                        items.history = {
                            label: app.localize('History'),
                            icon: 'la la-history',
                            _disabled: !_permissions.manageOrganizationTree,
                            action: function () {
                                _entityTypeHistoryModal.open({
                                    entityTypeFullName: _entityTypeFullName,
                                    entityId: node.original.id,
                                    entityTypeDescription: node.original.displayName
                                });
                            }
                        };
                    }
    
                    return items;
                },
    
                addUnit: function (parentId) {
                    var instance = $.jstree.reference(organizationTree.$tree);
    
                    _createModal.open({
                        parentId: parentId
                    }, function (newOu) {
                        instance.create_node(
                            parentId ? instance.get_node(parentId) : '#',
                            {
                                id: newOu.id,
                                parent: newOu.parentId ? newOu.parentId : '#',
                                code: newOu.code,
                                displayName: newOu.displayName,
                                memberCount: 0,
                                roleCount: 0,
                                text: organizationTree.generateTextOnTree(newOu),
                                state: {
                                    opened: true
                                }
                            });
    
                        organizationTree.refreshUnitCount();
                    });
                },
    
                generateTextOnTree: function (ou) {
                    var itemClass = (ou.memberCount > 0 || ou.roleCount) ? ' ou-text-has-members' : ' ou-text-no-members';
                    return '<span title="' + ou.code + '" class="ou-text text-dark' + itemClass + '" data-ou-id="' + ou.id + '">' + app.htmlUtils.htmlEncodeText(ou.displayName) + ' <i class="fa fa-caret-down text-muted"></i> <span style="font-size: .82em; opacity: .5;"><span class="ou-text-member-count ml-2">' + ou.memberCount + ' users,</span> <span class="ou-text-role-count ml-1">' + ou.roleCount + ' roles</span></span></span>';
                },
    
                incrementMemberCount: function (ouId, incrementAmount) {
                    var treeNode = organizationTree.$tree.jstree('get_node', ouId);
                    treeNode.original.memberCount = treeNode.original.memberCount + incrementAmount;
                    organizationTree.$tree.jstree('rename_node', treeNode, organizationTree.generateTextOnTree(treeNode.original));
                },
    
                incrementRoleCount: function (ouId, incrementAmount) {
                    var treeNode = organizationTree.$tree.jstree('get_node', ouId);
                    treeNode.original.roleCount = treeNode.original.roleCount + incrementAmount;
                    organizationTree.$tree.jstree('rename_node', treeNode, organizationTree.generateTextOnTree(treeNode.original));
                },
    
                getTreeDataFromServer: function (callback) {
                    _organizationUnitService.getOrganizationUnits({}).done(function (result) {
                        var treeData = _.map(result.items, function (item) {
                            return {
                                id: item.id,
                                parent: item.parentId ? item.parentId : '#',
                                code: item.code,
                                displayName: item.displayName,
                                memberCount: item.memberCount,
                                roleCount: item.roleCount,
                                text: organizationTree.generateTextOnTree(item),
                                state: {
                                    opened: true
                                }
                            };
                        });
    
                        callback(treeData);
                    });
                },
    
                init: function () {
                    organizationTree.getTreeDataFromServer(function (treeData) {
    
                        organizationTree.setUnitCount(treeData.length);
    
                        organizationTree.$tree
                            .on('changed.jstree', function (e, data) {
                                if (data.selected.length != 1) {
                                    organizationTree.selectedOu.set(null);
                                } else {
                                    var selectedNode = data.instance.get_node(data.selected[0]);
                                    organizationTree.selectedOu.set(selectedNode);
                                }
                            })
                            .on('move_node.jstree', function (e, data) {
    
                                var parentNodeName = (!data.parent || data.parent == '#')
                                    ? app.localize('Root')
                                    : organizationTree.$tree.jstree('get_node', data.parent).original.displayName;
    
                                abp.message.confirm(
                                    app.localize('OrganizationUnitMoveConfirmMessage', data.node.original.displayName, parentNodeName),
                                    app.localize('AreYouSure'),
                                    function (isConfirmed) {
                                        if (isConfirmed) {
                                            _organizationUnitService.moveOrganizationUnit({
                                                id: data.node.id,
                                                newParentId: data.parent
                                            }).done(function () {
                                                abp.notify.success(app.localize('SuccessfullyMoved'));
                                                organizationTree.reload();
                                            }).fail(function (err) {
                                                organizationTree.$tree.jstree('refresh'); //rollback
                                                setTimeout(function () { abp.message.error(err.message); }, 500);
                                            });
                                        } else {
                                            organizationTree.$tree.jstree('refresh'); //rollback
                                        }
                                    }
                                );
                            })
                            .jstree({
                                'core': {
                                    data: treeData,
                                    multiple: false,
                                    check_callback: function (operation, node, node_parent, node_position, more) {
                                        return true;
                                    }
                                },
                                types: {
                                    "default": {
                                        "icon": "fa fa-folder m--font-warning"
                                    },
                                    "file": {
                                        "icon": "fa fa-file  m--font-warning"
                                    }
                                },
                                contextmenu: {
                                    items: organizationTree.contextMenu
                                },
                                sort: function (node1, node2) {
                                    if (this.get_node(node2).original.displayName < this.get_node(node1).original.displayName) {
                                        return 1;
                                    }
    
                                    return -1;
                                },
                                plugins: [
                                    'types',
                                    'contextmenu',
                                    'wholerow',
                                    'sort',
                                    'dnd'
                                ]
                            });
    
                        $('#AddRootUnitButton').click(function (e) {
                            e.preventDefault();
                            organizationTree.addUnit(null);
                        });
    
                        organizationTree.$tree.on('click', '.ou-text .fa-caret-down', function (e) {
                            e.preventDefault();
    
                            var ouId = $(this).closest('.ou-text').attr('data-ou-id');
                            setTimeout(function () {
                                organizationTree.$tree.jstree('show_contextmenu', ouId);
                            }, 100);
                        });
                    });
                },
    
                reload: function () {
                    organizationTree.getTreeDataFromServer(function (treeData) {
                        organizationTree.setUnitCount(treeData.length);
                        organizationTree.$tree.jstree(true).settings.core.data = treeData;
                        organizationTree.$tree.jstree('refresh');
                    });
                }
            };
    
            var members = {
                $table: $('#OuMembersTable'),
                $emptyInfo: $('#OuMembersEmptyInfo'),
                $addUserToOuButton: $('#AddUserToOuButton'),
                $selectedOuRightTitle: $('#SelectedOuRightTitle'),
                dataTable: null,
    
                showTable: function () {
                    members.$emptyInfo.hide();
                    members.$table.show();
                    members.$addUserToOuButton.show();
                    members.$selectedOuRightTitle.text(organizationTree.selectedOu.displayName).show();
                },
    
                hideTable: function () {
                    members.$selectedOuRightTitle.hide();
                    members.$addUserToOuButton.hide();
                    members.$table.hide();
                    members.$emptyInfo.show();
                },
    
                load: function () {
                    if (!organizationTree.selectedOu.id) {
                        members.hideTable();
                        return;
                    }
    
                    members.showTable();
                    this.dataTable.ajax.reload();
                },
    
                add: function (users) {
                    var ouId = organizationTree.selectedOu.id;
                    if (!ouId) {
                        return;
                    }
                    var userIds = _.pluck(users, "value");
                    _organizationUnitService.addUsersToOrganizationUnit({
                        organizationUnitId: ouId,
                        userIds: userIds
                    }).done(function () {
                        abp.notify.success(app.localize('SuccessfullyAdded'));
                        organizationTree.incrementMemberCount(ouId, userIds.length);
                        members.load();
                    });
                },
    
                remove: function (user) {
                    var ouId = organizationTree.selectedOu.id;
                    if (!ouId) {
                        return;
                    }
    
                    abp.message.confirm(
                        app.localize('RemoveUserFromOuWarningMessage',
                            user.userName,
                            organizationTree.selectedOu.displayName),
                        app.localize('AreYouSure'),
                        function (isConfirmed) {
                            if (isConfirmed) {
                                _organizationUnitService.removeUserFromOrganizationUnit({
                                    organizationUnitId: parseInt(ouId),
                                    userId: user.id
                                }).done(function () {
                                    abp.notify.success(app.localize('SuccessfullyRemoved'));
                                    organizationTree.incrementMemberCount(ouId, -1);
                                    members.load();
                                });
                            }
                        }
                    );
                },
    
                openAddModal: function () {
                    var ouId = organizationTree.selectedOu.id;
                    if (!ouId) {
                        return;
                    }
    
                    _addUserModal.open({
                        title: app.localize('SelectAUser'),
                        organizationUnitId: ouId
                    },
                        function (selectedItems) {
                            members.add(selectedItems);
                        });
                },
    
                init: function () {
                    this.dataTable = members.$table.find(".organization-members-table").DataTable({
                        paging: true,
                        serverSide: true,
                        processing: true,
                        deferLoading: 0, //prevents table for ajax request on initialize
                        listAction: {
                            ajaxFunction: _organizationUnitService.getOrganizationUnitUsers,
                            inputFilter: function () {
                                return { id: organizationTree.selectedOu.id }
                            }
                        },
                        columnDefs: [
                            {
                                className: 'control responsive',
                                orderable: false,
                                render: function () {
                                    return '';
                                },
                                targets: 0
                            },
                            {
                                targets: 1,
                                data: null,
                                orderable: false,
                                defaultContent: '',
                                className: 'text-center',
                                rowAction: {
                                    targets: 0,
                                    data: null,
                                    orderable: false,
                                    defaultContent: '',
                                    element: $("<button/>")
                                        .addClass("btn btn-outline-danger m-btn m-btn--icon m-btn--icon-only m-btn--pill")
                                        .attr("title", app.localize('Delete'))
                                        .append($("<i/>").addClass("la la-times")).click(function () {
                                            var record = $(this).data();
                                            members.remove(record);
                                        }),
                                    visible: function () {
                                        return _permissions.manageMembers;
                                    }
                                }
                            },
                            {
                                targets: 2,
                                data: "userName"
                            },
                            {
                                targets: 3,
                                data: "addedTime",
                                render: function (addedTime) {
                                    return moment(addedTime).format('L');
                                }
                            }
                        ]
                    });
    
    
                    $('#AddUserToOuButton').click(function (e) {
                        e.preventDefault();
                        members.openAddModal();
                    });
    
                    members.hideTable();
                }
            };
    
            var roles = {
                $table: $('#OuRolesTable'),
                $emptyInfo: $('#OuRolesEmptyInfo'),
                $addRoleToOuButton: $('#AddRoleToOuButton'),
                $selectedOuRightTitle: $('#SelectedOuRightTitle'),
                dataTable: null,
    
                showTable: function () {
                    roles.$emptyInfo.hide();
                    roles.$table.show();
                    roles.$addRoleToOuButton.show();
                    roles.$selectedOuRightTitle.text(organizationTree.selectedOu.displayName).show();
                },
    
                hideTable: function () {
                    roles.$selectedOuRightTitle.hide();
                    roles.$addRoleToOuButton.hide();
                    roles.$table.hide();
                    roles.$emptyInfo.show();
                },
    
                load: function () {
                    if (!organizationTree.selectedOu.id) {
                        roles.hideTable();
                        return;
                    }
    
                    roles.showTable();
                    this.dataTable.ajax.reload();
                },
    
                add: function (roleList) {
                    var ouId = organizationTree.selectedOu.id;
                    if (!ouId) {
                        return;
                    }
    
                    var roleIds = _.pluck(roleList, "value");
                    _organizationUnitService.addRolesToOrganizationUnit({
                        organizationUnitId: ouId,
                        roleIds: roleIds
                    }).done(function () {
                        abp.notify.success(app.localize('SuccessfullyAdded'));
                        organizationTree.incrementRoleCount(ouId, roleIds.length);
                        roles.load();
                    });
                },
    
                remove: function (role) {
                    var ouId = organizationTree.selectedOu.id;
                    if (!ouId) {
                        return;
                    }
    
                    abp.message.confirm(
                        app.localize('RemoveRoleFromOuWarningMessage',
                            role.displayName,
                            organizationTree.selectedOu.displayName),
                        app.localize('AreYouSure'),
                        function (isConfirmed) {
                            if (isConfirmed) {
                                _organizationUnitService.removeRoleFromOrganizationUnit({
                                    organizationUnitId: parseInt(ouId),
                                    roleId: role.id
                                }).done(function () {
                                    abp.notify.success(app.localize('SuccessfullyRemoved'));
                                    organizationTree.incrementRoleCount(ouId, -1);
                                    roles.load();
                                });
                            }
                        }
                    );
                },
    
                openAddModal: function () {
                    var ouId = organizationTree.selectedOu.id;
                    if (!ouId) {
                        return;
                    }
    
                    _addRoleModal.open({
                        title: app.localize('SelectARole'),
                        organizationUnitId: ouId
                    },
                        function (selectedItems) {
                            roles.add(selectedItems);
                        });
                },
    
                init: function () {
                    this.dataTable = roles.$table.find(".organization-roles-table").DataTable({
                        paging: true,
                        serverSide: true,
                        processing: true,
                        deferLoading: 0, //prevents table for ajax request on initialize
                        listAction: {
                            ajaxFunction: _organizationUnitService.getOrganizationUnitRoles,
                            inputFilter: function () {
                                return { id: organizationTree.selectedOu.id };
                            }
                        },
                        columnDefs: [
                            {
                                className: 'control responsive',
                                orderable: false,
                                render: function () {
                                    return '';
                                },
                                targets: 0
                            },
                            {
                                targets: 1,
                                data: null,
                                orderable: false,
                                defaultContent: '',
                                className: 'text-center',
                                rowAction: {
                                    targets: 0,
                                    data: null,
                                    orderable: false,
                                    defaultContent: '',
                                    element: $("<button/>")
                                        .addClass("btn btn-outline-danger m-btn m-btn--icon m-btn--icon-only m-btn--pill")
                                        .attr("title", app.localize('Delete'))
                                        .append($("<i/>").addClass("la la-times")).click(function () {
                                            var record = $(this).data();
                                            roles.remove(record);
                                        }),
                                    visible: function () {
                                        return _permissions.manageRoles;
                                    }
                                }
                            },
                            {
                                targets: 2,
                                data: "displayName"
                            },
                            {
                                targets: 3,
                                data: "addedTime",
                                render: function (addedTime) {
                                    return moment(addedTime).format('L');
                                }
                            }
                        ]
                    });
    
    
                    $('#AddRoleToOuButton').click(function (e) {
                        e.preventDefault();
                        roles.openAddModal();
                    });
    
                    roles.hideTable();
                }
            };
    
            members.init();
            roles.init();
            organizationTree.init();
    
        });
    })();
    

      

    红色为权限部分

    黄色为角色部分

    蓝色为表格部分

  • 相关阅读:
    display:none;与visibility:hidden;的区别
    前端优化:雅虎35条
    JQ中find()和filter()的区别
    attr属性
    媒体查询器(转)@media screen and
    javascript解决URL (转)
    使用 js 处理 html entities(转)
    FileReader详解与实例---读取并显示图像文件
    HTML5中File对象初探
    createTextRange和createRange的一些用法(重点)
  • 原文地址:https://www.cnblogs.com/fger/p/10685367.html
Copyright © 2020-2023  润新知