Skip to content
basic-edit.component.ts 13.5 KiB
Newer Older
wangqinghua's avatar
wangqinghua committed
import {Component, EventEmitter, OnInit, Output} from '@angular/core';
import {
    FormBuilder,
    FormGroup,
    Validators
} from '@angular/forms';
wangqinghua's avatar
wangqinghua committed
import {OverAllService} from '../../overAll/overAll.service';
import {NzMessageService} from 'ng-zorro-antd';
xiaowenjie's avatar
xiaowenjie committed
import {WorkService} from '../../work/work.service';
wangqinghua's avatar
wangqinghua committed

@Component({
wangqinghua's avatar
wangqinghua committed
    selector: 'smart-basic-edit',
    templateUrl: './basic-edit.component.html',
    styles: []
wangqinghua's avatar
wangqinghua committed
})
export class BasicEditComponent implements OnInit {
    @Output() done = new EventEmitter<string>();
    modalTitle;    //modal标题
    nzSize = 'large';
    hostId;    //主机ID
    style = {
wangqinghua's avatar
wangqinghua committed
        display: 'block',
        height: '30px',
wangqinghua's avatar
wangqinghua committed
        lineHeight: '30px'
    };
    radioValue;

    tempList = [];  //模版列表
wangqinghua's avatar
wangqinghua committed
    hostTypeList = [];  //设备类型列表
    hostTypeChildrenList = [];  //设备类型列表
xiaowenjie's avatar
xiaowenjie committed
    parentTypeList = [];//父级分类
    typeList = [];//子级分类
wangqinghua's avatar
wangqinghua committed
    validateForm;
    groupList = [];

    //折叠面板
wangqinghua's avatar
wangqinghua committed
    panel1 = {name: '配置IPMI', active: true};
    panel2 = {name: '配置宏', active: true};
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    templatesResoure = [];

wangqinghua's avatar
wangqinghua committed
    //加密
    otherHost;

    isBasicEdit = false;
wangqinghua's avatar
wangqinghua committed
    tabNum: number;    //tabs面板的序列号
wangqinghua's avatar
wangqinghua committed
    macroList1: any[];
    macroList2: any[];      //配置宏数组
    interfaceslist: any[];   //接口list
wangqinghua's avatar
wangqinghua committed
    macroTYpe = 'macro';      //宏tabs
    mainHost = 'hostType1';      //主机tabs
wangqinghua's avatar
wangqinghua committed

    isInVentory = false;
    inventoryParentId;
wangqinghua's avatar
wangqinghua committed
    constructor(private fb: FormBuilder, private overAllSer: OverAllService,
xiaowenjie's avatar
xiaowenjie committed
                public message: NzMessageService,private workSer:WorkService) {
wangqinghua's avatar
wangqinghua committed
    }
    ngOnInit() {
        this.tabNum = 0;
wangqinghua's avatar
wangqinghua committed
        this.initForm();
wangqinghua's avatar
wangqinghua committed
        this.getTemplate();
wangqinghua's avatar
wangqinghua committed
        this.getTree();
wangqinghua's avatar
wangqinghua committed
    }

    //获取分组
wangqinghua's avatar
wangqinghua committed
    getGroup() {
wangqinghua's avatar
wangqinghua committed
        this.groupList = [];
wangqinghua's avatar
wangqinghua committed
        this.overAllSer.findGroup().subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
                for (let i = 0; i < res.data.length; i++) {
                    const gObj = {
                        label: res.data[i].name, value: res.data[i].groupid, checked: false
                    };
                    this.groupList.push(gObj);
                }
            }
        );
wangqinghua's avatar
wangqinghua committed
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    //新增
wangqinghua's avatar
wangqinghua committed
    showModal(): void {
wangqinghua's avatar
wangqinghua committed
        this.isBasicEdit = true;
wangqinghua's avatar
wangqinghua committed
        this.modalTitle = '添加资源';
wangqinghua's avatar
wangqinghua committed
        this.getGroup();
xiaowenjie's avatar
xiaowenjie committed
        this.getParentType();
    }
    //父级分类
    getParentType(){
        this.workSer.findByParentType().subscribe(
            (res)=>{
                const data = res.data;
                this.parentTypeList = data;
            }
        )
    }
wangqinghua's avatar
wangqinghua committed

xiaowenjie's avatar
xiaowenjie committed
    //通过父级分类查询子级分类
    getTypeByParent(parentid){
        this.workSer.findByParentidCount(parentid).subscribe(
            (res)=>{
                const data = res.data;
                this.typeList = data;
            }
        )
wangqinghua's avatar
wangqinghua committed
    }

    //编辑
wangqinghua's avatar
wangqinghua committed
    editModal(hostId, name, gId): void {
wangqinghua's avatar
wangqinghua committed
        this.getGroup();
wangqinghua's avatar
wangqinghua committed
        this.isBasicEdit = true;
wangqinghua's avatar
wangqinghua committed
        this.hostId = hostId;
        this.modalTitle = '编辑资源';
        this.overAllSer.findDetailed(this.hostId).subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
wangqinghua's avatar
wangqinghua committed
                const data = res.data[0];
                this.validateForm.name = data.name;
                this.validateForm.host = data.host;
                this.validateForm.ipmi_authtype = data.ipmi_authtype + '';
                this.validateForm.ipmi_username = data.ipmi_username + '';
                this.validateForm.ipmi_privilege = data.ipmi_privilege + '';
                this.validateForm.ipmi_password = data.ipmi_password + '';
                this.validateForm.tls_psk_identity = data.tls_psk_identity + '';
                this.validateForm.tls_issuer = data.tls_issuer + '';
                this.validateForm.tls_subject = data.tls_subject + '';
                this.validateForm.tls_psk = data.tls_psk + '';
wangqinghua's avatar
wangqinghua committed
                this.validateForm.inventoryExtend = data.inventory;
                this.validateForm.hostExtend = data.hostExtend;
wangqinghua's avatar
wangqinghua committed
                this.validateForm.groups = data.groups;
wangqinghua's avatar
wangqinghua committed
                if (data.parentTemplates) {
wangqinghua's avatar
wangqinghua committed
                    let tempArr = [];
wangqinghua's avatar
wangqinghua committed
                    tempArr = data.parentTemplates.map(res => {
wangqinghua's avatar
wangqinghua committed
                        return res.templateid;
                    });
                    this.validateForm.templates = tempArr;
wangqinghua's avatar
wangqinghua committed
                    this.templatesResoure = tempArr;
wangqinghua's avatar
wangqinghua committed
                }
wangqinghua's avatar
wangqinghua committed
                this.interfaceslist = data.interfaces;
wangqinghua's avatar
wangqinghua committed
                this.interfaceslist.forEach(res => {
                    res.main = res.main + '';
                    res.type = res.type + '';
wangqinghua's avatar
wangqinghua committed
                });

wangqinghua's avatar
wangqinghua committed
                this.hostTypeChildrenList = [];
                this.hostTypeList.forEach(res => {
                    if (this.validateForm.hostExtend.equipmentTypeid == res.id) {
                        this.hostTypeChildrenList = res.childs;
                    }
                });

wangqinghua's avatar
wangqinghua committed
                if (data.macros) {
                    this.macroList1 = data.macros;
                }

wangqinghua's avatar
wangqinghua committed
                for (let i = 0; i < this.validateForm.groups.length; i++) {
                    for (let j = 0; j < this.groupList.length; j++) {
                        if (this.validateForm.groups[i].groupid == this.groupList[j].value) {
wangqinghua's avatar
wangqinghua committed
                            this.groupList[j].checked = true;
                        }
                    }
                }
wangqinghua's avatar
wangqinghua committed
            }
        );
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //确定
wangqinghua's avatar
wangqinghua committed
    handEditleOk() {
        if (!this.validateForm.hostExtend.equipmentTypeid) {
wangqinghua's avatar
wangqinghua committed
            this.message.info('请选择选择设备类型');
            return false;
        }
wangqinghua's avatar
wangqinghua committed
        if (!this.validateForm.hostExtend.secondLevelTypeid) {
wangqinghua's avatar
wangqinghua committed
            this.message.info('请选择选择二级类型');
            return false;
        }
wangqinghua's avatar
wangqinghua committed
        if (!this.validateForm.name) {
wangqinghua's avatar
wangqinghua committed
            this.message.info('请输入显示名');
            return false;
        }
wangqinghua's avatar
wangqinghua committed
        if (!this.validateForm.host) {
wangqinghua's avatar
wangqinghua committed
            this.message.info('请输入IP地址');
            return false;
        }
wangqinghua's avatar
wangqinghua committed
        if(this.isInVentory){
            if(!this.validateForm.inventoryExtend.name){
                this.message.info('请输入资产名称');
                return false;
            }
        }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
        //获取分组id
wangqinghua's avatar
wangqinghua committed
        const groupArr = [];
        for (let i = 0; i < this.groupList.length; i++) {
            if (this.groupList[i].checked == true) {
                const groupid = {'groupid': this.groupList[i].value};
wangqinghua's avatar
wangqinghua committed
                groupArr.push(groupid);
            }
        }
wangqinghua's avatar
wangqinghua committed
        this.interfaceslist.forEach(res => {
            if (res.bulk) {
                res.bulk = '1';
            } else {
                res.bulk = '0';
            }
wangqinghua's avatar
wangqinghua committed
        });

wangqinghua's avatar
wangqinghua committed
        this.validateForm.groups = groupArr;
wangqinghua's avatar
wangqinghua committed
        if (this.modalTitle == '编辑资源') {
wangqinghua's avatar
wangqinghua committed
            this.update();
wangqinghua's avatar
wangqinghua committed
        } else {
wangqinghua's avatar
wangqinghua committed
            this.create();
        }
    }

    //创建
wangqinghua's avatar
wangqinghua committed
    create() {
        if (this.macroTYpe == 'macroExpand') {
            this.validateForm.macros = this.macroList2;
        }
wangqinghua's avatar
wangqinghua committed
        if(!this.isInVentory){
            this.validateForm.inventoryExtend = null;
        }
wangqinghua's avatar
wangqinghua committed
        this.overAllSer.createHost(this.validateForm).subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
                if (res.errCode == 10000) {
                    this.isBasicEdit = false;
wangqinghua's avatar
wangqinghua committed
                    this.initForm();
                    this.getGroup();
                    this.done.emit();
wangqinghua's avatar
wangqinghua committed
                    this.message.success("创建成功");
                }else{
                    this.message.error(res.errMsg);
wangqinghua's avatar
wangqinghua committed
                }
            },
            (err) => {
                this.message.info('系统错误');
            }
        );
    }

    //更新
wangqinghua's avatar
wangqinghua committed
    update() {
wangqinghua's avatar
wangqinghua committed
        //比较监控模版是否发生变化
        const clearArr = [];
wangqinghua's avatar
wangqinghua committed
        if(!this.isInVentory){
            this.validateForm.inventoryExtend = null;
        }
wangqinghua's avatar
wangqinghua committed
        this.templatesResoure.forEach(res => {
            if (this.validateForm.templates.indexOf(res) == -1) {
wangqinghua's avatar
wangqinghua committed
                clearArr.push(res);
            }
        });
wangqinghua's avatar
wangqinghua committed
        this.validateForm.clearTemplateids = clearArr;
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
        if (this.macroTYpe == 'macroExpand') {
            this.validateForm.macros = this.macroList2;
        }
wangqinghua's avatar
wangqinghua committed
        this.validateForm.hostid = this.hostId;
        this.validateForm.interfaces = this.interfaceslist;
        this.validateForm.macros = this.macroList1;
wangqinghua's avatar
wangqinghua committed
        this.overAllSer.updateHost(this.validateForm).subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
                if (res.errCode == 10000) {
wangqinghua's avatar
wangqinghua committed
                    this.isBasicEdit = false;
wangqinghua's avatar
wangqinghua committed
                    this.done.emit();
                    this.initForm();
wangqinghua's avatar
wangqinghua committed
                    this.getGroup();
wangqinghua's avatar
wangqinghua committed
                    this.message.success("修改成功");
                }else{
                    this.message.error(res.errMsg);
wangqinghua's avatar
wangqinghua committed
                }
            },
wangqinghua's avatar
wangqinghua committed
            (err) => {
                this.message.info('系统错误');
wangqinghua's avatar
wangqinghua committed
            }
wangqinghua's avatar
wangqinghua committed
        );
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //取消
wangqinghua's avatar
wangqinghua committed
    handleEditCancel(): void {
        this.isBasicEdit = false;
wangqinghua's avatar
wangqinghua committed
        this.initForm();
wangqinghua's avatar
wangqinghua committed
        this.getGroup();
wangqinghua's avatar
wangqinghua committed
    }

    //tabs切换
wangqinghua's avatar
wangqinghua committed
    tabsChange(num) {
        this.tabNum = num;
wangqinghua's avatar
wangqinghua committed
    }

    //获取模版
wangqinghua's avatar
wangqinghua committed
    getTemplate() {
        this.overAllSer.templates().subscribe(
            (res) => {
wangqinghua's avatar
wangqinghua committed
                this.tempList = res.data;
wangqinghua's avatar
wangqinghua committed
            }
        );
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //获取设备类型
wangqinghua's avatar
wangqinghua committed
    getTree() {
wangqinghua's avatar
wangqinghua committed
        this.overAllSer.findTree().subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
                if (res.errCode == 10000) {
wangqinghua's avatar
wangqinghua committed
                    this.hostTypeList = res.data;
wangqinghua's avatar
wangqinghua committed
                } else {
wangqinghua's avatar
wangqinghua committed
                    this.message.info(res.errMsg);
                }
            }
wangqinghua's avatar
wangqinghua committed
        );
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //二级类型的list
    getChildren(item) {
wangqinghua's avatar
wangqinghua committed
        this.hostTypeChildrenList = [];
        this.validateForm.hostExtend.secondLevelTypeid = null;
wangqinghua's avatar
wangqinghua committed
        this.hostTypeList.forEach(res => {
            if (item == res.id) {
                this.hostTypeChildrenList = res.childs;
            }
        });
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //接口add
wangqinghua's avatar
wangqinghua committed
    addInterfaces() {
        const demo = {
            main: '0',
            ip: '',
            dns: '',
            type: '1',
            port: '10050',
            useip: 1,
wangqinghua's avatar
wangqinghua committed
            bulk: false,
wangqinghua's avatar
wangqinghua committed
        };
wangqinghua's avatar
wangqinghua committed
        this.interfaceslist.push(demo);
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //接口delete
wangqinghua's avatar
wangqinghua committed
    deleteInterfaces(index) {
        this.interfaceslist.splice(index, 1);
    }

wangqinghua's avatar
wangqinghua committed
    // 1 agent:161 2 SNMP:161   3 IPMI:12345  4 JMX:6999
wangqinghua's avatar
wangqinghua committed
    changePort(index) {
        switch (this.interfaceslist[index].type) {
            case '1': {
                this.interfaceslist[index].port = '10050';
                break;
            }
            case '2': {
                this.interfaceslist[index].port = '161';
wangqinghua's avatar
wangqinghua committed
                this.interfaceslist[index].bulk = false;
wangqinghua's avatar
wangqinghua committed
                break;
            }
            case '3': {
                this.interfaceslist[index].port = '12345';
                break;
            }
            case '4': {
wangqinghua's avatar
wangqinghua committed
                this.interfaceslist[index].port = '6999';
wangqinghua's avatar
wangqinghua committed
                break;
            }

        }
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //只能一个默认
wangqinghua's avatar
wangqinghua committed
    changeMain(index) {
        this.interfaceslist.forEach(res => {
wangqinghua's avatar
wangqinghua committed
            res.main = '0';
        });
        this.interfaceslist[index].main = '1';
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //新增宏
    addMacro1() {
        const data = {
            macro: '{$SNMP_COMMUNITY}',
            value: 'public',
        };
        this.macroList1.push(data);
    }

    //移除宏
    deleteMacro1(index) {
        this.macroList1.splice(index, 1);
    }

    //新增主机宏
    addMacro2() {
        const data = {
            macro: '{$SNMP_COMMUNITY}',
            value: 'public',
        };
        this.macroList2.push(data);
    }

    //移除主机宏
    deleteMacro2(index) {
        this.macroList2.splice(index, 1);
    }

wangqinghua's avatar
wangqinghua committed
    //登记资产
    checkChange(e){
        if(e == "yes"){
            this.isInVentory = true;
        }
        if(e == "no"){
            this.isInVentory = false;
        }
    }

wangqinghua's avatar
wangqinghua committed
    //初始化Form信息
    initForm() {
wangqinghua's avatar
wangqinghua committed
        this.isInVentory = false;
wangqinghua's avatar
wangqinghua committed
        this.templatesResoure = [];
wangqinghua's avatar
wangqinghua committed
        this.macroList1 = [      //配置宏数组
            {
                macro: '{$SNMP_COMMUNITY}',
                value: 'public',
            }
        ];
        this.macroList2 = [      //配置宏数组
            {
                macro: '{$SNMP_COMMUNITY}',
                value: 'public',
            }
        ];
        this.interfaceslist = [   //接口list
            {
                main: '1',
                ip: '',
                dns: '',
                type: '1',
                port: '10050',
                useip: 1,
wangqinghua's avatar
wangqinghua committed
                bulk: false,
wangqinghua's avatar
wangqinghua committed
            }
        ];
wangqinghua's avatar
wangqinghua committed
        this.tabNum = 0;
        this.validateForm = {
            groups: [],
            hostExtend: {
wangqinghua's avatar
wangqinghua committed
                equipmentTypeid: null,
                secondLevelTypeid: null,
wangqinghua's avatar
wangqinghua committed
                serviceid: ''
            },
            macros: this.macroList1,
            interfaces: this.interfaceslist,  //接口
wangqinghua's avatar
wangqinghua committed
            inventoryExtend: {
wangqinghua's avatar
wangqinghua committed
                serialnoA: null,
                invertoryname: null,
                mac: null,
                storageLocation: null,
wangqinghua's avatar
wangqinghua committed
                maintenanceExpiration: null,
wangqinghua's avatar
wangqinghua committed
                name: null,
                person: null,
                ip: null,
                usedcount: null,
                stock: null,
                lendcount: null,
                repaircount: null,
                scrapcount: null,
wangqinghua's avatar
wangqinghua committed
            },
wangqinghua's avatar
wangqinghua committed
            templates: null,
wangqinghua's avatar
wangqinghua committed
            name: null,
            host: null,
            ipmi_authtype: null,
            ipmi_username: null,
            ipmi_privilege: null,
            ipmi_password: null,
            tls_psk_identity: null,
            tls_issuer: null,
            tls_subject: null,
            tls_psk: null,
        };
    }
wangqinghua's avatar
wangqinghua committed
}