myflow.js 流程图插件 拖拽组织架构流程图 代码和简单文档操作

 

jQuery ui基于myflow.js绘制流程图插件,自定义组织架构图图表,拖拽绘制组织架构图表代码。支持分支、节点状态工作流程图表样式代码。下载地址https://download.csdn.net/download/qq_29099209/10658520https://download.csdn.net/download/qq_29099209/11258209

有需要改装的源码的可以访问https://download.csdn.net/download/qq_29099209/11846881,下面是一些改造操作的代码 基本全局一搜就能找到代码

经过改造自用的流程图

源码改起来不怎么方便 以下是自己改动的一些:

1自定义工具栏

 var toolBar = createTool(dom);
    function createTool(dom) {
        var tool = [];
        var myflow = $.myflow;
        for (var i in dom) {
            tool[dom[i]['type']] = [];
            tool[dom[i]['type']]['showType'] = 'text';
            tool[dom[i]['type']]['type'] = dom[i]['type'];
            tool[dom[i]['type']]['name'] = {text: '<<' + dom[i]['type'] + '>>'};
            tool[dom[i]['type']]['text'] = {text: dom[i]['text']};
            tool[dom[i]['type']]['img'] = {src: dom[i]['img'], width: 48, height: 48};
            tool[dom[i]['type']]['props'] = [];
            tool[dom[i]['type']]['props']['text'] = [];
            tool[dom[i]['type']]['props']['text']['name'] = dom[i]['props1_name'];
            tool[dom[i]['type']]['props']['text']['label'] = dom[i]['props1_label'];
            tool[dom[i]['type']]['props']['text']['value'] = dom[i]['props1_value'];
            tool[dom[i]['type']]['props']['text']['editor'] = function () {
                return new myflow.editors.textEditor();
            };
        }
        return tool;
    }

在myflow.jpdl4.js文件中修改

  $.extend(true, myflow.config.tools.states,toolBar);

 2加入到项目后可能会因为画板偏移导致放置图形和画线偏移,需要对源码进行部分修改

myflow.js中新增 resize()的初始化函数init_resize(),对以上内容的初始值进行修改,具体如下

 //初始位置
        function init_resize() {
            console.log('图形初始位置')
            //初始位置修改
            var rx = _bbox.x + _o.margin - $("#SiteInfoPanel").offset().left,
                ry = _bbox.y + _o.margin - $("#SiteInfoPanel").offset().top,
                rw = _bbox.width - _o.margin * 2,
                rh = _bbox.height - _o.margin * 2;
            _rect.attr({
                x: rx ,
                y: ry ,
                width: rw,
                height: rh
            });
            switch (_o.showType) {
                case 'image':
                    _img.attr({
                        x: rx + (rw - _o.img.width) / 2,
                        y: ry + (rh - _o.img.height) / 2
                    }).show();
                    break;
                case 'text':
                    _rect.show();
                    _text.attr({
                        x: rx + rw / 2,
                        y: ry + rh / 2
                    }).show(); // 文本
                    break;
                case 'image&text':
                    _rect.show();
                    _name.attr({
                        x: rx + _o.img.width + (rw - _o.img.width) / 2,
                        y: ry + myflow.config.lineHeight / 2
                    }).show();
                    _text.attr({
                        x: rx + _o.img.width + (rw - _o.img.width) / 2,
                        y: ry + (rh - myflow.config.lineHeight) / 2
                        + myflow.config.lineHeight
                    }).show(); // 文本
                    _img.attr({
                        x: rx + _o.img.width / 2,
                        y: ry + (rh - _o.img.height) / 2
                    }).show();
                    break;
            }

            _bbox.x = _bbox.x - $("#SiteInfoPanel").offset().left
            _bbox.y = _bbox.y - $("#SiteInfoPanel").offset().top
            _bdots['t'].attr({
                x: _bbox.x + _bbox.width / 2 - _bw / 2,
                y: _bbox.y - _bw / 2
            }); // 上
            _bdots['lt'].attr({
                x: _bbox.x - _bw / 2,
                y: _bbox.y - _bw / 2
            }); // 左上
            _bdots['l'].attr({
                x: _bbox.x - _bw / 2,
                y: _bbox.y - _bw / 2 + _bbox.height / 2
            }); // 左
            _bdots['lb'].attr({
                x: _bbox.x - _bw / 2,
                y: _bbox.y - _bw / 2 + _bbox.height
            }); // 左下
            _bdots['b'].attr({
                x: _bbox.x - _bw / 2 + _bbox.width / 2,
                y: _bbox.y - _bw / 2 + _bbox.height
            }); // 下
            _bdots['rb'].attr({
                x: _bbox.x - _bw / 2 + _bbox.width,
                y: _bbox.y - _bw / 2 + _bbox.height
            }); // 右下
            _bdots['r'].attr({
                x: _bbox.x - _bw / 2 + _bbox.width,
                y: _bbox.y - _bw / 2 + _bbox.height / 2
            }); // 右
            _bdots['rt'].attr({
                x: _bbox.x - _bw / 2 + _bbox.width,
                y: _bbox.y - _bw / 2
            }); // 右上
            _bpath.attr({
                path: getBoxPathString()
            });

            $(_r).trigger('rectresize', _this);
        };

3修改连线末端坐标

$("#myflow").mousemove函数中修改
  var path, rect, circle;
        $("#myflow").mousemove(function (e) {
            var moving = myflow.config.moving;
            if (moving.flag) {
                var pre = $(_r).data('currNode');

                if (path && !moving.isNewDot) {
                    path.remove();
                    circle.remove();
                } else {
                    moving.isNewDot = false;
                }

                var dot = moving.prepdot;

                if (pre && pre.getBBox()) {
                    dot = myflow.util.connPoint(pre.getBBox(), {x: e.pageX, y: e.pageY});
                }
                var x = e.pageX - 10 - $("#SiteInfoPanel").offset().left, y = e.pageY - 60 - $("#SiteInfoPanel").offset().top;
                circle = _r.circle(x, y, 6).attr({fill: 'red', stroke: '#fff', cursor: 'move'});

                path = _r.path('M' + dot.x + ' ' + dot.y + 'L' + x + ' ' + y + 'z')
                    .attr({stroke: '#cdcdcd', fill: "none", "stroke-width": 2, cursor: "pointer"});

                moving.temp.push(circle);
                moving.temp.push(path);
            }

        })

 4点击节点实现子节点显示隐藏

分别在myflow.js文件中修改myflow.path和myflow.rect函数,在函数内添加如下,具体内容可根据对应的remove属性修改

 this.hide = function () {
            _rect.hide();
            _text.hide();
            _name.hide();
            _img.hide();
            _bpath.hide();
        };
        this.show = function () {
            _rect.show();
            _text.show();
            _name.show();
            _img.show();
            _bpath.show();
        };
clickRect: function (id, data) {
                    if (eval("(" + data + ")").type == "core") {
                        if (show_hide[id] == true) {
                            if (data_source['states']) {
                                for (var i in data_source['states']) {
                                    for (var j in data_source['paths']) {
                                        if (id == data_source['paths'][j].to().getId() && data_source['states'][i].getId() == data_source['paths'][j].from().getId()) {
                                            data_source['states'][i].hide();
                                            data_source['paths'][j].hide();
                                        }
                                    }
                                }
                            }
                            show_hide[id] = false;
                        } else {
                            if (data_source['states']) {
                                for (var i in data_source['states']) {
                                    for (var j in data_source['paths']) {
                                        if (id == data_source['paths'][j].to().getId() && data_source['states'][i].getId() == data_source['paths'][j].from().getId()) {
                                            data_source['states'][i].show();
                                            data_source['paths'][j].show();
                                        }
                                    }
                                }
                            }
                            show_hide[id] = true;
                        }


                    }
                },

 

 

5添加自定义监听事件

例如监听双击点击元素事件

myflow.js

 $([_rect.node, _text.node, _name.node, _img.node]).bind('dblclick',
            function () {
                myflow.config.tools.dblclickRect(_this.getId(), _this.toJson());
                return false;
            });

index.js

 dblclickRect: function (id, data) {
                },

6修改SVG画布大小

在myflow-master/lib/raphael-min.js文件内第1403行修改,我是将画布长宽减少了一半
bG(i, {xmlns: "http://www.w3.org/2000/svg", version: 1.1, width: f/2, height: h/2});

7右键切换选择和画线状态 myflow.js中修改如下

document.oncontextmenu = function (e) {
            if (myflow.config.oncontextmenu == true) {
                $("#path").click();
                myflow.config.oncontextmenu = false;
                document.getElementById('SiteInfoPanel').style.cursor = 'pointer';
            } else {
                $("#pointer").click();
                myflow.config.oncontextmenu = true;
                document.getElementById('SiteInfoPanel').style.cursor = 'default';
            }
            return false;
        }

 

### 回答1: myflow流程图绘制插件是一款实用的工具,它可以帮助用户在电脑上快速地绘制流程图流程图是一种展示任务或流程的图形化工具,通过连接不同的符号和箭头来表示任务的先后顺序和流动逻辑。 myflow流程图绘制插件具有以下几个特点和功能。首先,它提供了丰富的符号库,包括各种形状、箭头、图标等,用户可根据需要选择合适的符号,使流程图更加直观清晰。其次,该插件支持用户自定义样式,可以根据个人喜好调整颜色、字体、线条等参数,以使流程图更符合用户的审美需求。 此外,myflow流程图绘制插件还具有方便的操作界面和易用的功能,用户只需简单拖拽和连接,即可完成流程图的绘制。同时,该插件还支持文本框的编辑,用户可以在符号中添加文字注释,使流程图更加详细和易懂。 值得一提的是,myflow流程图绘制插件还支持导出为多种格式,例如图片、PDF等,用户可以方便地分享给他人或者嵌入到文档中。同时,该插件也支持流程图的共享和协作,多个用户可同时编辑一个流程图,提高工作效率和协同能力。 总的来说,myflow流程图绘制插件是一款功能强大、易用便捷的工具,它可以帮助用户快速绘制流程图,并提高项目管理和沟通的效率。无论是在学习、工作还是日常生活中,myflow流程图绘制插件都能帮助我们更好地表达和理解流程和任务。 ### 回答2: myflow流程图绘制插件是一款功能强大的工具,用于帮助用户快速创建和编辑流程图。不论是初学者还是专业人士都可以轻松使用。 首先,myflow流程图绘制插件提供了丰富的图形符号和模板,使用户能够快速选择所需元素并进行拖放操作。这样,用户可以很方便地构建自己的流程图,无需耗费太多时间和精力。 其次,该插件支持多种图形元素的编辑和定制,包括节点、连线、文本等。用户可以根据自己的需求修改元素的样式、颜色、字体等属性,使得流程图更加美观和易于理解。 此外,myflow流程图绘制插件还提供了实时协作的功能。用户可以邀请其他人一同编辑同一张流程图,实现多人协同工作。这对于团队合作和项目管理非常有帮助,可以提高效率和沟通效果。 最后,myflow流程图绘制插件支持流程图的导出和分享。用户可以将绘制好的流程图导出为常见的图片格式,如PNG、JPEG等,方便在其他场景中使用。用户还可以将流程图分享给其他人,通过链接或邮件的方式进行共享,无需重复操作和发送。 总之,myflow流程图绘制插件是一款简单易用但功能强大的工具,适用于各类用户,可以帮助用户快速创建和编辑流程图,并支持实时协作和导出分享。无论是个人使用还是团队合作,都能提升工作效率和沟通效果。 ### 回答3: MyFlow流程图绘制插件是一款功能强大的图形化绘图工具,用于绘制各种类型的流程图。它简单易用,不需要编程基础,只需拖拽元素并连接它们即可快速创建流程图。 MyFlow提供了丰富的预定义形状、符号和箭头,用户可以根据自己的需要选择合适的元素进行绘制。同时,还支持自定义形状和样式,满足用户个性化的绘图需求。 该插件支持多种流程图类型,包括流程图组织结构图、数据流图等,用户可以根据实际需求选择合适的类型。同时,还可根据需要添加文本、注释和描述,使流程图更加清晰易懂。 MyFlow还支持多种导出格式,如图片、PDF等,方便用户与他人共享或打印。此外,该插件还具备协作功能,多人可以同时编辑同一张流程图,提高工作效率。 总之,MyFlow流程图绘制插件是一款功能全面、操作简单的工具,适用于各个领域中需要绘制流程图的人员。无论是初学者还是专业人士,都能够使用它来快速绘制出美观、清晰的流程图
评论 108
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值