Skip to content
role.component.ts 7.41 KiB
Newer Older
wangqinghua's avatar
wangqinghua committed
import {Component, EventEmitter, OnInit, Output} from '@angular/core';
import {
    AbstractControl,
    FormBuilder,
    FormControl,
    FormGroup,
    Validators
} from '@angular/forms';
import {SystemService} from '../../system.service';
wangqinghua's avatar
wangqinghua committed
import {NzMessageService, NzTreeNode} from 'ng-zorro-antd';
import {LayoutService} from '../../../layouts/layout.service';
wangqinghua's avatar
wangqinghua committed
import {CommonService} from '../../../shared/common/common.service';
wangqinghua's avatar
wangqinghua committed
import {OverAllService} from '../../../overAll/overAll.service';
wangqinghua's avatar
wangqinghua committed

@Component({
    selector: 'smart-role',
    templateUrl: './role.component.html',
wangqinghua's avatar
wangqinghua committed
    styles: [
            `
            .tree-div p {
                margin: 0;
            }`
    ]
wangqinghua's avatar
wangqinghua committed
})
export class RoleComponent implements OnInit {
    @Output() add = new EventEmitter<any>();

wangqinghua's avatar
wangqinghua committed
    title;
wangqinghua's avatar
wangqinghua committed
    isVisible = false;
    validateForm: FormGroup;
wangqinghua's avatar
wangqinghua committed
    menuList;

    nodes;
    nodeList;
wangqinghua's avatar
wangqinghua committed
    roleId;
wangqinghua's avatar
wangqinghua committed
    initGroupList = [];  //分组权限
    viewGroupList = [];  //分组权限

    initModuleList = [];   //菜单权限
    dataModuleList = [];   //菜单数据
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    constructor(private fb: FormBuilder, private message: NzMessageService, private overAllSer: OverAllService,
                private systemSer: SystemService, private layoutSer: LayoutService, private commonSer: CommonService) {
wangqinghua's avatar
wangqinghua committed
    }

    ngOnInit() {
wangqinghua's avatar
wangqinghua committed
        this.ininForm();
        this.getMenu();
wangqinghua's avatar
wangqinghua committed
        this.getGroup();
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    ininForm() {
wangqinghua's avatar
wangqinghua committed
        this.viewGroupList = [];
wangqinghua's avatar
wangqinghua committed
        this.validateForm = this.fb.group({
            name: [null, [Validators.required]],
            status: [null, [Validators.required]],
wangqinghua's avatar
wangqinghua committed
            comment: [null, [Validators.required]],
wangqinghua's avatar
wangqinghua committed
        });
    }

wangqinghua's avatar
wangqinghua committed
    //获取菜单栏
wangqinghua's avatar
wangqinghua committed
    getMenu() {
wangqinghua's avatar
wangqinghua committed
        this.systemSer.getMenuBySeparation().subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
                if (res.errCode == 10000) {
wangqinghua's avatar
wangqinghua committed
                    this.initModuleList = res.data;
wangqinghua's avatar
wangqinghua committed
                }
            }
wangqinghua's avatar
wangqinghua committed
        );
    }

    //获取分组
    getGroup() {
        this.overAllSer.findGroup().subscribe(
            (res) => {
wangqinghua's avatar
wangqinghua committed
                this.initGroupList = res.data;
                this.viewGroupList = res.data;
                this.viewGroupList.forEach(e => {
wangqinghua's avatar
wangqinghua committed
                    e.checked = false;
                });
            }
        );
wangqinghua's avatar
wangqinghua committed
    }

    toNode(data) {
        this.nodes = data.map(res => {
            return new NzTreeNode(res);
        });
    }

    showAddModal(): void {
        this.title = '新增角色';
wangqinghua's avatar
wangqinghua committed
        this.isVisible = true;
wangqinghua's avatar
wangqinghua committed
        this.addInit();
    }

    //新增初始化
    addInit() {
        let list  = this.commonSer.listToTree('id', 'parentId', this.initModuleList);
        list.forEach(res => {
            res.title = res.name;
            res.key = res.id;
            res.children.forEach((child) => {
                child.title = child.name;
                child.key = child.id;
                child.isLeaf = true;
            });
        });
        this.toNode(list);
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //编辑
wangqinghua's avatar
wangqinghua committed
    showEditModal(id) {
        this.title = '编辑角色';
wangqinghua's avatar
wangqinghua committed
        this.isVisible = true;
wangqinghua's avatar
wangqinghua committed
        this.roleId = id;
wangqinghua's avatar
wangqinghua committed
        this.systemSer.getRole(id).subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
                if (res.errCode == 10000) {
wangqinghua's avatar
wangqinghua committed
                    const data = res.data.role;
wangqinghua's avatar
wangqinghua committed
                    data.status += '';
wangqinghua's avatar
wangqinghua committed
                    this.validateForm.patchValue(data);
wangqinghua's avatar
wangqinghua committed
                    this.editInit(res.data);
wangqinghua's avatar
wangqinghua committed
                }
            }
wangqinghua's avatar
wangqinghua committed
        );
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //编辑初始化
    editInit(data) {

        if (data.resources.length > 0) {
            const modulrArr = data.resources.map(res => {
                return res.groupId;
            });
            //分组回显
            this.viewGroupList = this.initGroupList.map(e => {
                const data = {
                    groupid: e.groupid,
                    name: e.name,
                    checked: false,
                };

                if (modulrArr.indexOf(e.groupid) > -1) {
                    data.checked = true;
                }
                return data;
            });
        }

        this.dataModuleList = data.modules;
        if (data.modules.length > 0) {
            //菜单回显
            this.systemSer.getMenuBySeparation().subscribe(
                (res) => {
                    let  list = res.data;
                    list.forEach(e => {
                        e.title = e.name;
                        e.key = e.id;
                        e.isChecked = false;
                        if(e.url){
                            e.isLeaf = true;
                        }
                        if (data.modules.indexOf(e.id) > -1) {
                            e.isChecked = true;
                        }
                    });
                    list = this.commonSer.listToTree('id', 'parentId', list);
                    this.toNode(list);
                }
            );

        }

    }

wangqinghua's avatar
wangqinghua committed
    handleCancel(): void {
        this.isVisible = false;
wangqinghua's avatar
wangqinghua committed
        this.ininForm();
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    handleOk() {
wangqinghua's avatar
wangqinghua committed
        for (let i in this.validateForm.controls) {
wangqinghua's avatar
wangqinghua committed
            this.validateForm.controls[i].markAsDirty();
            this.validateForm.controls[i].updateValueAndValidity();
        }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
        if (this.validateForm.invalid) {
            return false;
        }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
        let resourceArr = [];
wangqinghua's avatar
wangqinghua committed
        this.viewGroupList.forEach(e => {
            if (e.checked) {
wangqinghua's avatar
wangqinghua committed
                const data = {
wangqinghua's avatar
wangqinghua committed
                    groupId: e.groupid,
                    groupName: e.name
wangqinghua's avatar
wangqinghua committed
                };
                resourceArr.push(data);
wangqinghua's avatar
wangqinghua committed
            }
wangqinghua's avatar
wangqinghua committed
        });
wangqinghua's avatar
wangqinghua committed

        if (this.title == '新增角色') {
            this.create(resourceArr);
wangqinghua's avatar
wangqinghua committed
        }
wangqinghua's avatar
wangqinghua committed
        if (this.title == '编辑角色') {
            this.update(resourceArr);
wangqinghua's avatar
wangqinghua committed
        }
    }

    //新增
wangqinghua's avatar
wangqinghua committed
    create(resourceArr) {
wangqinghua's avatar
wangqinghua committed
        const data = {
wangqinghua's avatar
wangqinghua committed
            role: {
                name: this.validateForm.value.name,
                status: this.validateForm.value.status,
                comment: this.validateForm.value.comment,
wangqinghua's avatar
wangqinghua committed
            },
wangqinghua's avatar
wangqinghua committed
            modules: this.dataModuleList,
wangqinghua's avatar
wangqinghua committed
            resources: resourceArr
wangqinghua's avatar
wangqinghua committed
        };
        this.systemSer.addRole(data).subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
                if (res.errCode == 10000) {
                    this.isVisible = false;
                    this.add.emit();
wangqinghua's avatar
wangqinghua committed
                    this.ininForm();
                    this.message.success('新增成功');
wangqinghua's avatar
wangqinghua committed
                } else {
wangqinghua's avatar
wangqinghua committed
                    this.message.error(res.errMsg);
                }
            }
        );
    }

    //编辑
wangqinghua's avatar
wangqinghua committed
    update(resourceArr) {
wangqinghua's avatar
wangqinghua committed
        const data = {
wangqinghua's avatar
wangqinghua committed
            role: {
                id: this.roleId,
                name: this.validateForm.value.name,
                status: this.validateForm.value.status,
                comment: this.validateForm.value.comment,
wangqinghua's avatar
wangqinghua committed
            },
wangqinghua's avatar
wangqinghua committed
            modules: this.dataModuleList,
wangqinghua's avatar
wangqinghua committed
            resources: resourceArr
wangqinghua's avatar
wangqinghua committed
        };
        this.systemSer.editRole(data).subscribe(
            (res) => {
                if (res.errCode == 10000) {
                    this.isVisible = false;
                    this.add.emit();
                    this.ininForm();
                    this.message.success('修改成功');
wangqinghua's avatar
wangqinghua committed
                } else {
wangqinghua's avatar
wangqinghua committed
                    this.message.error(res.errMsg);
wangqinghua's avatar
wangqinghua committed
                }
            }
        );
    }

wangqinghua's avatar
wangqinghua committed
    selectCheckTree(e,node) {
        if (node.origin.isChecked){
            this.dataModuleList.push(node.key);
wangqinghua's avatar
wangqinghua committed
        } else {
wangqinghua's avatar
wangqinghua committed
            const index = this.dataModuleList.indexOf(node.key);
            this.dataModuleList.splice(index, 1);
wangqinghua's avatar
wangqinghua committed
        }
wangqinghua's avatar
wangqinghua committed
    }
wangqinghua's avatar
wangqinghua committed
}