maplayout.js 11.8 KB
layui.define(["jquery", "layer", "bootstrap"],
    function (exports) {
        var $ = layui.jquery;
        var layer = layui.layer;
        //初始化设计流程器
        $.fn.flowdesign = function (options) {
            var $frmpreview = $(this);
            if (!$frmpreview.attr('id')) {
                return false;
            }
            $frmpreview.html("");
            var reload = false;

            var defaultcnf = {
                width: 500,
                height: 400,
                haveHead: true,
                initLabelText: "地图编辑",
                haveTool: true,
                headLabel: true,
                headBtns: ["undo", "redo",
                    "big", "small", "reset", "config", "ReCalibrateData"
                ],
                toolBtns: [
                    "user_cangchuqu",
                    "user_zhangaiqu",
                    "user_shengchanxian",
                    "user_yunxingqu",
                    "user_chongdianzhuang1",
                    "user_tingchequ",
                    "user_diantiqu_xz",
                    "user_tishengjiqu_xz",
                    "user_quliaoqu",
                    "user_fangliaoqu",
                    "user_rfid_yxd_0000",
                    "user_fastmode",
                ],
                haveGroup: true,
                useOperStack: true,
            };
            if (options != undefined) {
                $.extend(defaultcnf, options);
            }

            var flowPanel = $.createGooFlow($(this), defaultcnf);
            flowPanel.setNodeRemarks({
                group: "编辑",
                user_cangchuqu: "仓储区",
                user_zhangaiqu: "障碍区",
                user_shengchanxian: "生产线",
                user_yunxingqu: "运行区",
                user_chongdianzhuang1: "充电桩",
                user_tingchequ: "停车区",
                user_diantiqu_xz: "电梯区",
                user_tishengjiqu_xz: "对接区",
                user_quliaoqu: "取料区",
                user_fangliaoqu: "放料区",
                user_rfid_yxd_0000: "RFID",
                user_fastmode: "快速模式",
            });

            flowPanel.setHeadToolsRemarks({
                undo: "撤销",
                redo: "重做",
                big: "放大",
                small: "缩小",
                reset: "还原",
                switch: "隐藏RFID",
                info: "显示未编辑的RFID",
                config: "配置",
                ReCalibrateData: "重新校正数据"
            });

            if (options != undefined
                && options.flowcontent != undefined
                && options.flowcontent != null) {  //加载内容
                flowPanel.loadData(options.flowcontent);
            }

            //导出数据扩展方法
            //所有节点必须有进出线段
            //必须有开始结束节点(且只能为一个)
            //分流合流节点必须成对出现
            //分流合流节点必须一一对应且中间必须有且只能有一个普通节点
            //分流节点与合流节点之前的审核节点必须有且只能有一条出去和进来节点
            flowPanel.exportDataEx = function () {
                var data = flowPanel.exportData();
                return data;
            }

            flowPanel.SetNameEx = function (id, data) {
                flowPanel.setName(id, data.Name, "node", data);
            }
            flowPanel.Reload = function (name) {
                reload = true;
                flowPanel.loadData(flowPanel.exportDataEx());
                flowPanel.setTitle(name);
                reload = false;
            }
            flowPanel.ReloadMap = function (mapContent, name) {
                reload = true;
                flowPanel.loadData(mapContent);
                flowPanel.setTitle(name);
                reload = false;
            }
            flowPanel.onItemDbClick = function (id, type) {
                var obj = flowPanel.getItemInfo(id, type);
                switch (type) {
                    case "node":
                        flowPanel.switchToolBtn("group");

                        options.OpenNode(id, obj);
                        break;
                    case "area":
                        flowPanel.switchToolBtn("group");
                        if (obj.color.indexOf("user_rfid") > -1) {
                            options.OpenNode(id, obj);
                        }
                        else {
                            options.OpenArea(id, obj);
                        }

                        break;
                    default:
                        break;
                }
                return false;
            }

            flowPanel.onItemRightClick = function (id, type) {
                var obj = flowPanel.getItemInfo(id, type);
                switch (type) {
                    case "node":
                        options.OpenNode(id, obj);
                        break;
                    case "area":
                        if (obj.color.indexOf("user_rfid") > -1) {
                            options.OpenNode(id, obj, true);
                        }
                        else {
                            options.OpenArea(id, obj);
                        }

                        break;
                    default:
                        break;
                }
                return false;
            }

            flowPanel.onItemDel = function (id, type) {
                if (reload) {
                    return true;
                }
                var obj = flowPanel.getItemInfo(id, 'area');
                if (obj != null) {
                    if (obj.color !== "user_group") {
                        if (obj.color.indexOf("user_rfid") > -1) {
                            if (!options.CheckPointNotInRegion(obj.id)) {
                                layer.alert("删除的点不能是限行路段的点位, 请删除限行路段后再试!", {
                                    icon: 5,
                                    title: "错误信息",
                                    shadeClose: true,
                                });
                                return false;
                            }
                        }
                        else {
                            var areas = flowPanel.exportData().areas;
                            //删除区域模块时,判断内部不能有其他元素
                            var isExist = false;
                            for (var i in areas) {
                                var _area = areas[i];
                                if (obj.id !== _area.id) {
                                    var json1 = {
                                        Left: _area.left,
                                        Top: _area.top,
                                        Width: _area.width,
                                        Height: _area.height,
                                    };
                                    var json2 = {
                                        Left: obj.left,
                                        Top: obj.top,
                                        Width: obj.width,
                                        Height: obj.height,
                                    };

                                    if (flowPanel.CheckPut(json1, json2) == "equal" || flowPanel.CheckPut(json1, json2) == "in") {
                                        isExist = true;
                                        break;
                                    }
                                }
                            }
                            if (isExist) {
                                layer.alert("内部有对象,不能删除!", {
                                    icon: 5,
                                    title: "错误信息",
                                    shadeClose: true,
                                });
                                return false;
                            }

                            //删除运行区时,再判断是否有限行区覆盖
                            if (obj.color == "user_yunxingqu") {
                                var _out = true;
                                for (var i in areas) {
                                    var _area = areas[i];
                                    if (obj.id !== _area.id) {
                                        if (_area.color == "user_group") {
                                            var json1 = {
                                                Left: obj.left,
                                                Top: obj.top,
                                                Width: obj.width,
                                                Height: obj.height,
                                            };
                                            var json2 = {
                                                Left: _area.left,
                                                Top: _area.top,
                                                Width: _area.width,
                                                Height: _area.height,
                                            };
                                            if (flowPanel.CheckPut(json1, json2) != "out" || flowPanel.CheckPut(json2, json1) != "out") {
                                                _out = false;
                                                break;
                                            }
                                        }
                                    }
                                }

                                if (!_out) {
                                    layer.alert("有限行区覆盖,不能删除!", {
                                        icon: 5,
                                        title: "错误信息",
                                        shadeClose: true,
                                    });
                                    return false;
                                }
                            }
                        }
                    }
                }

                //if (confirm('确定要删除?')) {
                return true;
                //}
                //else {
                //    return false;
                //}
            }

            var xyHtml = '<div style="position:absolute;left:450px;margin-top:-30px;padding:3px;z-index:1000;line-height:15px;">';
            xyHtml += '<div style="display: inline-block;"><span id = "xyHtml"></span></div></div>';
            $frmpreview.append(xyHtml);

            flowPanel.$workArea.on('mousemove', function (e) {
                if (!e) e = window.event;
                var X, Y;
                var ev = _mouseP(e), t = _elCsys(this);
                X = ev.x - t.left + this.parentNode.scrollLeft;
                Y = ev.y - t.top + this.parentNode.scrollTop;

                var new_X, new_Y;
                new_X = Math.floor(X / 30) * 30;
                new_Y = Math.floor(Y / 30) * 30;
                if ($("#xyHtml") != undefined) {
                    $("#xyHtml").html("【" + new_X + "," + new_Y + "】");
                }
            });

            return flowPanel;
        }

        exports('mapdesign/maplayout');
    });

function _elCsys(dom) {
    var t = dom.offsetTop;
    var l = dom.offsetLeft;
    dom = dom.offsetParent;
    while (dom) {
        t += dom.offsetTop;
        l += dom.offsetLeft;
        dom = dom.offsetParent;
    }
    return { top: t, left: l };
}
//兼容各种浏览器的,获取鼠标真实位置
function _mouseP(ev) {
    if (!ev) ev = window.event;
    if (ev.pageX || ev.pageY) {
        return { x: ev.pageX, y: ev.pageY };
    }
    return {
        x: ev.clientX + document.documentElement.scrollLeft - document.body.clientLeft,
        y: ev.clientY + document.documentElement.scrollTop - document.body.clientTop
    };
}