Skip to content
ne-topology.component.ts 9.11 KiB
Newer Older
wangqinghua's avatar
wangqinghua committed
import {AfterViewChecked, AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core';
wangqinghua's avatar
wangqinghua committed
import {TopologyService} from '../topology.service';
wangqinghua's avatar
wangqinghua committed
import {NzMessageService, NzModalService, UploadFile} from 'ng-zorro-antd';
wangqinghua's avatar
wangqinghua committed
import {DomSanitizer} from '@angular/platform-browser';
wangqinghua's avatar
wangqinghua committed
import * as $ from 'jquery';
wangqinghua's avatar
wangqinghua committed
import {TopologyComponent} from '../model/topology/topology.component';
wangqinghua's avatar
wangqinghua committed
import {CheckComponent} from '../model/check/check.component';
import {DeviceComponent} from '../model/device/device.component';
wangqinghua's avatar
wangqinghua committed
import {SelectGroupComponent} from '../../modal/select-group/select-group.component';
wangqinghua's avatar
wangqinghua committed

declare let editor: any;
wangqinghua's avatar
wangqinghua committed
declare var layui: any;
wangqinghua's avatar
wangqinghua committed

@Component({
    selector: 'smart-ne-topology',
    templateUrl: './ne-topology.component.html',
wangqinghua's avatar
wangqinghua committed
    styles: [
wangqinghua's avatar
wangqinghua committed
            `
            .layui-side-scroll {
                width: initial;
            }

            .layui-layout-right {
wangqinghua's avatar
wangqinghua committed
                color: #666666;
            }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
            .layui-header span {
wangqinghua's avatar
wangqinghua committed
                margin-right: 15px;
                cursor: pointer;
            }
wangqinghua's avatar
wangqinghua committed

            .tips {
wangqinghua's avatar
wangqinghua committed
                position: absolute;
                top: 10px;
                left: 20px;
                color: #ca0814;
                font-size: 20px;
            }
wangqinghua's avatar
wangqinghua committed

            .checkList {
wangqinghua's avatar
wangqinghua committed
                position: absolute;
                top: 10px;
                right: 20px;
                color: #666666;
                font-size: 20px;
            }
wangqinghua's avatar
wangqinghua committed

            .layui-form-label {
wangqinghua's avatar
wangqinghua committed
                width: 110px;
            }
wangqinghua's avatar
wangqinghua committed

            .minus {
wangqinghua's avatar
wangqinghua committed
                vertical-align: middle;
                color: red;
                font-size: 15px;
                margin-left: 12px;
                cursor: pointer;
            }
wangqinghua's avatar
wangqinghua committed
        `
    ]
wangqinghua's avatar
wangqinghua committed
})
wangqinghua's avatar
wangqinghua committed
export class NeTopologyComponent implements OnInit, AfterViewInit {
wangqinghua's avatar
wangqinghua committed
    @ViewChild('topologyCanvas') topologyCanvas: ElementRef;
wangqinghua's avatar
wangqinghua committed
    @ViewChild('smartTopology') smartTopology: TopologyComponent;
    @ViewChild('smartCheck') smartCheck: CheckComponent;
    @ViewChild('smartSelectGroup') smartSelectGroup: SelectGroupComponent;
wangqinghua's avatar
wangqinghua committed

    dataSet;
    isVisible = false;
    image;
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    topoId;
wangqinghua's avatar
wangqinghua committed
    name;
wangqinghua's avatar
wangqinghua committed
    refreshRete;
wangqinghua's avatar
wangqinghua committed
    options;
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    checkJson = [];
wangqinghua's avatar
wangqinghua committed
    fileList: UploadFile[] = [];
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    constructor(private topologySer: TopologyService, private message: NzMessageService,
wangqinghua's avatar
wangqinghua committed
                private sanitizer: DomSanitizer, private modalSer: NzModalService) {
wangqinghua's avatar
wangqinghua committed
    }

    ngOnInit() {
        this.getList();
wangqinghua's avatar
wangqinghua committed
        this.getTypeList();
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //一级分类
    getTypeList(){
        this.topologySer.findTreeWithWeb().subscribe(
            (res)=>{
                if(res.errCode == 10000){
                    this.options = res.data;
                    layui.use('form', function() {
                        let form = layui.form;
                        form.render("select");
                    });
                }else{
                    this.message.error(res.errMSg);
                }
            }
        )
    }

    ngAfterViewInit() {
wangqinghua's avatar
wangqinghua committed
        layui.use('element', () => {
            let element = layui.element;
            element.init();
        });
wangqinghua's avatar
wangqinghua committed
        this.loadCanvas();
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //新增拓扑图
    addTopo() {
wangqinghua's avatar
wangqinghua committed
        this.smartTopology.showAddMOodal();
wangqinghua's avatar
wangqinghua committed
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    //编辑拓扑图
    editTopo() {
wangqinghua's avatar
wangqinghua committed
        if (!this.topoId) {
            this.message.warning('请选择需要编辑的拓扑图');
wangqinghua's avatar
wangqinghua committed
            return false;
wangqinghua's avatar
wangqinghua committed
        }
wangqinghua's avatar
wangqinghua committed
        this.smartTopology.showEditModal(this.topoId);
wangqinghua's avatar
wangqinghua committed
    }

    //添加监测点
wangqinghua's avatar
wangqinghua committed
    addCheck() {
        if (!this.topoId) {
            this.message.warning('请选择需要编辑的拓扑图');
wangqinghua's avatar
wangqinghua committed
            return false;
        }
wangqinghua's avatar
wangqinghua committed
        this.smartCheck.showAddModal();
    }

    //添加设备
wangqinghua's avatar
wangqinghua committed
    addDevice() {
        if (!this.topoId) {
            this.message.warning('请选择需要编辑的拓扑图');
wangqinghua's avatar
wangqinghua committed
            return false;
        }
wangqinghua's avatar
wangqinghua committed
        this.smartSelectGroup.showAddModal('添加设备');
wangqinghua's avatar
wangqinghua committed
    }

    //获取设备图片
wangqinghua's avatar
wangqinghua committed
    setImg(e) {
wangqinghua's avatar
wangqinghua committed
        console.log(e);
wangqinghua's avatar
wangqinghua committed
        editor.utils.addNode(e[0].icon, '图片');
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //获取列表
    getList() {
wangqinghua's avatar
wangqinghua committed
        this.topologySer.findAll().subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
                if (res.errCode == 10000) {
                    this.dataSet = res.data;
                } else {
wangqinghua's avatar
wangqinghua committed
                    this.message.create('error', res.errMsg);
wangqinghua's avatar
wangqinghua committed
                }
            }
        );
    }

wangqinghua's avatar
wangqinghua committed
    //编辑
    update() {
wangqinghua's avatar
wangqinghua committed
        const json = {
wangqinghua's avatar
wangqinghua committed
            topology: editor.saveTopology(),
            check: this.checkJson
wangqinghua's avatar
wangqinghua committed
        };
wangqinghua's avatar
wangqinghua committed
        let data = {
            id: this.topoId,
wangqinghua's avatar
wangqinghua committed
            json: JSON.stringify(json),
wangqinghua's avatar
wangqinghua committed
            refreshRete: this.refreshRete,
            name: this.name
wangqinghua's avatar
wangqinghua committed
        };
        this.topologySer.update(data).subscribe(
            (res) => {
                if (res.errCode == 10000) {
wangqinghua's avatar
wangqinghua committed
                    this.message.success('编辑成功');
                    editor.utils.editTopology();
wangqinghua's avatar
wangqinghua committed
                    this.getList();
                } else {
wangqinghua's avatar
wangqinghua committed
                    this.message.error(res.errMsg);
wangqinghua's avatar
wangqinghua committed
                }
            }
        );
wangqinghua's avatar
wangqinghua committed
    }

    //查询单个
wangqinghua's avatar
wangqinghua committed
    getDetail(id) {
wangqinghua's avatar
wangqinghua committed
        this.topologySer.findItem(id).subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
                if (res.errCode == 10000) {
wangqinghua's avatar
wangqinghua committed
                    if (res.data.json.length > 0) {
wangqinghua's avatar
wangqinghua committed
                        let json = JSON.parse(res.data.json);
wangqinghua's avatar
wangqinghua committed
                        editor.loadTopologyByJson(JSON.parse(json.topology), 'img/backimg.png');
                        this.checkJson = json.check;
wangqinghua's avatar
wangqinghua committed
                    } else {
wangqinghua's avatar
wangqinghua committed
                        editor.utils.clearTopology();
                        this.checkJson = [];
wangqinghua's avatar
wangqinghua committed
                    }
wangqinghua's avatar
wangqinghua committed
                    this.name = res.data.name;
wangqinghua's avatar
wangqinghua committed
                    this.refreshRete = res.data.refreshRete;
wangqinghua's avatar
wangqinghua committed
                    this.topoId = res.data.id;
wangqinghua's avatar
wangqinghua committed
                    editor.utils.editTopology();
wangqinghua's avatar
wangqinghua committed
                    this.findItemStatus();
wangqinghua's avatar
wangqinghua committed
                }
            }
        );
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    //查询监控点状态
wangqinghua's avatar
wangqinghua committed
    findItemStatus() {
wangqinghua's avatar
wangqinghua committed
        const data = {
wangqinghua's avatar
wangqinghua committed
            httpTestIds: this.checkJson.map(e => {
wangqinghua's avatar
wangqinghua committed
                return e.id;
            })
        };
        this.topologySer.findElementStatus(data).subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
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
    //删除拓扑图
    deleteTopo() {
wangqinghua's avatar
wangqinghua committed
        if (!this.topoId) {
wangqinghua's avatar
wangqinghua committed
            this.message.warning('请选择需要删除的拓扑图');
wangqinghua's avatar
wangqinghua committed
            return false;
        }
        this.modalSer.confirm({
                nzTitle: '删除',
                nzContent: '<b style="color: red;">确认删除该拓扑图吗?</b>',
                nzOkText: '确定',
                nzOkType: 'danger',
                nzOnOk: () => {
                    this.topologySer.delete(this.topoId).subscribe(
                        (res) => {
                            if (res.errCode == 10000) {
                                this.topoId = null;
wangqinghua's avatar
wangqinghua committed
                                this.message.success('删除成功');
wangqinghua's avatar
wangqinghua committed
                                this.getList();
                            } else {
wangqinghua's avatar
wangqinghua committed
                                this.message.error(res.errMsg);
wangqinghua's avatar
wangqinghua committed
                            }
                        }
                    );
                },
                nzCancelText: '取消',
                nzOnCancel: () => console.log('Cancel')
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
    setCheckList(event) {
wangqinghua's avatar
wangqinghua committed
        console.log(event);
        this.checkJson.push(JSON.parse(event));
    }

wangqinghua's avatar
wangqinghua committed
    //删除监测点
wangqinghua's avatar
wangqinghua committed
    deleteCheck(index) {
        this.checkJson.splice(index, 1);
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //load
    loadCanvas() {
        // 节点树中每个节点的拖放动作定义给拓扑图编辑器
        let nodes = $('[topo-div-type=\'topo-node\']');
        let nodeLength = nodes.length;
        for (let i = 0; i < nodeLength; i++) {
            let text = $(nodes[i]).find('span').eq(0).text();
            editor.drag(nodes[i], document.getElementById('topology-canvas'), text);
        }
        editor.loadTopology('', 'img/backimg.png');
wangqinghua's avatar
wangqinghua committed
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    //添加图片-----start
wangqinghua's avatar
wangqinghua committed
    showAddImg() {
        if (!this.topoId) {
            this.message.warning('请选择需要编辑的拓扑图');
wangqinghua's avatar
wangqinghua committed
            return false;
        }
wangqinghua's avatar
wangqinghua committed
        this.isVisible = true;
    }

    beforeUpload = (file: UploadFile): boolean => {
wangqinghua's avatar
wangqinghua committed
        const isLt2M = file.size / 1024 < 300;
wangqinghua's avatar
wangqinghua committed
        if (!isLt2M) {
            this.message.error('图标必须小于300kb!');
wangqinghua's avatar
wangqinghua committed
        } else {
wangqinghua's avatar
wangqinghua committed
            this.fileList.push(file);
        }
        return false;
    };

wangqinghua's avatar
wangqinghua committed
    handleCancel() {
wangqinghua's avatar
wangqinghua committed
        this.isVisible = false;
wangqinghua's avatar
wangqinghua committed
        this.fileList = [];
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    handleOk() {
        if (this.fileList.length == 0) {
            this.message.warning('请选择图片');
wangqinghua's avatar
wangqinghua committed
            return false;
        }
        const formData = new FormData();
wangqinghua's avatar
wangqinghua committed
        this.fileList.forEach((file: any) => {
            formData.append('file', file);
wangqinghua's avatar
wangqinghua committed
        });
wangqinghua's avatar
wangqinghua committed
        this.topologySer.addPic(formData).subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
                if (res.errCode == 10000) {
wangqinghua's avatar
wangqinghua committed
                    this.isVisible = false;
wangqinghua's avatar
wangqinghua committed
                    editor.utils.addNode(res.data, 'text');
wangqinghua's avatar
wangqinghua committed
                    this.fileList = [];
wangqinghua's avatar
wangqinghua committed
                } else {
                    this.message.error('添加失败');
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
//    end

wangqinghua's avatar
wangqinghua committed
}