这里是将gooflow的代码简单的改造一下,点击线、点、图标、区域的时候弹出新窗口,在新窗口中可以添加设置更多的信息。总页面如下:

文件的目录,这里吧Gooflow的一套东西都放在GooFlow文件夹下面,文件夹是我自己分的,大家可以按照自己的习惯去调整,放到一起便于管理和修改。

code:放置的是弹出的属性页面,里面建了几个文件,预备和数据库操作相关联,不过例子中并没有写代码,这些代码可以根据你建的数据库和三层自己写添删改查。

codebase和js:放置的gooflow用的js和css。

demo.html:流程设计器的主页面,使用的时候直接调用。

javaScript/layer:存放的是弹出层的js和css,这是一个独立的控件,它有自己官网,有兴趣的可以自己研究。

主要修改的是GooFlow.js,你可以通过查找alert去看我写的一些备注,里面关于图标点击、移动等事件都标注出来了。

Demo.html代码



<br /> 流程图DEMO<br />

rel="stylesheet" type="text/css" href="js/default.css" />
rel="stylesheet" type="text/css" href="codebase/GooFlow2.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/GooFunc.js"></script>
<script type="text/javascript" src="js/son2.js"></script>
<script type="text/javascript" src="codebase/GooFlow.js"></script>
<script src="../../JavaScript/layer/layer.js"></script>
<script type="text/javascript">
var hight = $(window).height() - 20;
var width = $(window).width() - 40;
var demo;
$(document).ready(function () {
var haveEdit = true;
var Title = "Title";
var property = {
width: width,
height: hight,
toolBtns: ["start round", "end", "task", "node", "chat", "state", "plug", "join", "fork", "complex mix"],
haveHead: haveEdit,
headBtns: ["new", "save", "undo", "redo", "reload"],//如果haveHead=true,则定义HEAD区的按钮 headBtns: ["new", "open", "save", "undo", "redo", "reload"]
haveTool: haveEdit,
haveGroup: true,
useOperStack: true,
initLabelText: Title
};
var remark = {
cursor: "选择指针",
direct: "转换连线",
start: "开始结点",
end: "结束结点",
task: "任务结点",
node: "自动结点",
chat: "决策结点",
state: "状态结点",
plug: "附加插件",
fork: "分支结点",
"join": "联合结点",
complex: "复合结点",
group: "组织划分框编辑开"
}
demo = $.createGooFlow($("#demo"), property);
demo.setNodeRemarks(remark);
demo.onItemDel = function (id, type) {
layer.closeAll();
return true;
// return confirm("确定要删除该单元吗?");
}
var jsondata = { "title": Title, "nodes": { "demo_node_1": { "name": "node_1", "left": 90, "top": 59, "type": "start round", "width": 24, "height": 24, "alt": true }, "demo_node_2": { "name": "node_2", "left": 115, "top": 284, "type": "end", "width": 86, "height": 24, "alt": true }, "demo_node_3": { "name": "node_3", "left": 412, "top": 46, "type": "task", "width": 86, "height": 24, "alt": true }, "demo_node_7": { "name": "node_7", "left": 640, "top": 56, "type": "task", "width": 86, "height": 24, "alt": true } }, "lines": { "demo_line_4": { "type": "sl", "from": "demo_node_1", "to": "demo_node_3", "name": "line_4", "alt": true }, "demo_line_5": { "type": "tb", "from": "demo_node_3", "to": "demo_node_2", "name": "line_5", "alt": true, "M": 295 }, "demo_line_8": { "type": "sl", "from": "demo_node_3", "to": "demo_node_7", "name": "line_8", "alt": true }, "demo_line_9": { "type": "tb", "from": "demo_node_7", "to": "demo_node_2", "name": "line_9", "alt": true, "M": 305 } }, "areas": {}, "initNum": 10 };
demo.loadData(jsondata);
demo.onBtnNewClick = function () { alert("新建"); demo.clearData(); };
demo.onBtnOpenClick = function () { alert("打开"); };
demo.onBtnSaveClick = function () { alert("保存"); alert(JSON.stringify(demo.exportData())); };
demo.onFreshClick = function () {
alert("重载"); demo.clearData(); demo.loadData(jsondata);
};
});
var out;
function Export() {
document.getElementById("result").value = JSON.stringify(demo.exportData());
}
//this.$workArea.delegate(".ico + td"  文字双击
var Editid = "0"; var Editindex = "-1"; var Editnode = "";
function ShowEdit(id, Type) {
if (Editid != id) {
Editid = id;
layer.closeAll();
//alert(Type + "ShowEdit" + id);
var nodeTitle = "";
var nodeUrl = "";
Editnode = demo.getItemInfo(id, Type);
if (Editnode.name != null) {
if (Type == "line") {
var nodeStr = "";
nodeTitle = Editnode.name + "线编辑";
nodeUrl = 'code/UpdateLine.aspx?node=' + nodeStr + "&_" + Math.random();
}
else if (Type == "node") {
//name: 节点的显示名称
//left: 节点相对于工作区的左边距
//top: 节点相对于工作区的顶距
//width: 节点宽度
//height: 节点高度
//type: 节点类型
//marked: 布尔值, 表示是否已被用橙色标注
//alt: 布尔值, 表示在编辑模式下是否被用户变更过, 默认都是undefined未变更
var nodeStr = Editid + "," + Editnode.name + "," + Editnode.left + "," + Editnode.top + "," + Editnode.width + "," + Editnode.height + "," + Editnode.type + "," + Editnode.marked + "," + Editnode.alt;
nodeTitle = Editnode.name + "节点编辑";
nodeUrl = 'code/UpdateNode.aspx?node=' + encodeURI(nodeStr) + "&_" + Math.random();
}
else if (Type == "area") {
nodeTitle = Editnode.name + "区域编辑";
nodeUrl = 'code/UpdateArea.aspx?node=' + nodeStr + "&_" + Math.random();
}
layer.open({
title: nodeTitle,
type: 2,
area: ['400px', (hight - 20) + 'px'],
fixed: true, //不固定
closeBtn: 0,
maxmin: true,
offset: 'rt', //右下角弹出
shade: 0,
content: nodeUrl,
//btn: ['确定保存'],
//yes: function (index, layero) {
//    var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象,执行iframe页的方法:
//    iframeWin.Save();
//},
success: function (layero, index) {
Editindex = index;
}, cancel: function (index, layero) {
layer.close(index);
return false;
}
});
}
}
}
function SaveNode(Flag, Value, Type) {
if (Type == "line") {
demo.setName(Editid, Value, "line");
}
else if (Type == "node") {
if (Flag == 1)//name
{
demo.setName(Editid, Value, "node");
}
else if (Flag == 2)//Top
{
demo.moveNode(Editid, Editnode.left, Value);
}
else if (Flag == 3)//left
{
demo.moveNode(Editid, Value, Editnode.top);
}
else if (Flag ==4)//width
{
demo.resizeNode(Editid, Value, Editnode.height);
}
else if (Flag == 5)//height
{
demo.resizeNode(Editid, Editnode.width, Value);
}
var node = demo.getItemInfo(Editid, Type);
var Savenode = node.name + "," + node.left + "," + node.top + "," + node.width + "," + node.height + "," + node.type + "," + node.marked + "," + node.alt;
// alert(Savenode);
//ajax保存数据
}
else if (Type == "area") {
demo.setName(Editid, name, "area");
}
}
</script>


demo代码讲解:
根据屏幕显示编辑区域的大小
var hight = $(window).height() - 20;
 var width = $(window).width() - 40;
初始化编辑器
$(document).ready(function ()
初始化数据json:jsondata, demo.loadData(jsondata);这个通过ajax从数据库获得。

左上角的操作按钮事件接口:
demo.onBtnNewClick = function () { alert("新建"); demo.clearData(); };
            demo.onBtnOpenClick = function () { alert("打开"); };
            demo.onBtnSaveClick = function () { alert("保存"); alert(JSON.stringify(demo.exportData())); };
            demo.onFreshClick = function () {
                alert("重载"); demo.clearData(); demo.loadData(jsondata);
            };

显示编辑窗口js方法:
function ShowEdit(id, Type)

layer.open弹出窗口

实现保存:
SaveNode(Flag, Value, Type),只提供简单的接口代码。

例如,在在UpdateNode.aspx页面,也是使用js,先根据传递的节点信息赋值,然后save是保存,调用父页面的方法SaveNode:
<script type="text/javascript">
        var node = '<%=Request["node"]%>';
        $(function () {
            $("input[id$='txtName']").val(node.split(',')[1]);
            $("input[id$='txtLeft']").val(node.split(',')[2]);
            $("input[id$='txtTop']").val(node.split(',')[3]);
            $("input[id$='txtWidth']").val(node.split(',')[4]);
            $("input[id$='txtHeight']").val(node.split(',')[5]);
        })
        function Save(Type, This) {
            var Value = $(This).val();
            parent.SaveNode(Type, Value, "node");
        }
    </script>

遗留问题
demo.moveNode(Editid, Editnode.left, Value);
使用此方法后连线会变乱,点一下节点的突变就会正常,不知道什么原因,个人觉得大小和宽高在设计器中设置方便,此方法可以不用。如果有哪位伙伴知道原因,也可以留言告知,谢谢.

在例子中也提供有设计器的API文档:
http://download.csdn.net/detail/xumengmeng_xu/9809276




C# Gooflow+layer弹出层 全js代码相关推荐

  1. layer 弹出层全屏

    let index=layer.open({title:' ',type: 1,shade: false,skin: 'layui-layer-lan', //加上边框content: $('#zgj ...

  2. 安防互联网摄像头海康大华硬盘录像机视频流媒体服务器EasyNVR在layer弹出层中使用video标签无法最大化全屏播放问题解决

    诞生背景 众所周知,EasyNVR可以将局域网/广域网上的海康/大华等网络摄像头由rtsp转换为rtmp.rtsp.hls.flv协议转换,并提供推流服务,可以将拉到的网络摄像头直接转发到流媒体服务器 ...

  3. layui内置模块(layer弹出层)

    前面我们已经对layui前端框架的页面元素进行了简单的学习,但是作为一个可用的程序,仅仅是长的好看,并没有那个什么用:在好看的同时还需要实用和酷炫,实用就需要实现我们方便的和后端进行数据交互,酷炫就是 ...

  4. Vue(二十一)Layer弹出层

    安装:下载源码到本地 layer: 丰富多样的 Web 弹出层组件,可轻松实现 Alert/Confirm/Prompt/普通提示/页面区块/iframe/tips 等等几乎所有的弹出交互.目前已成为 ...

  5. Layer 弹出层组件

    Layer 弹出层组件 一.Layer是什么? 用于实现网页中的各种弹出层交互, 如 Alert/Confirm/Message/Tips/Page/Iframe/Loading/Prompt/Tab ...

  6. layer文件ajax上传,layer弹出层数据传输到content里面

    在项目中使用layer弹出层的时候,遇到一个问题,就是利用ajax请求后台数据成功时,调用layer弹出层(iframe),如何把数据传到iframe里面去? 经过百度,发现,使用js把数据拼接起来, ...

  7. layer弹出层扩展自定义样式

    layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. 官网 http://layer.layui.com/ l ...

  8. Layer弹出层关闭后刷新父页面

    一.Layer弹出层关闭后刷新父页面 //编辑 $("#edit").on("click", function(){var id = getIdSelectio ...

  9. layer弹出层闪退_jQuery使用Layer弹出层插件闪退问题

    一.前言 巨坑,基础没学好,导致找了一个下午的问题,终于被我发现了.说多都是泪,记录下来,以后有人遇到这个错误可以参考下 做项目期间做了几个页面,需要用到弹出层,为了方便使用到了Layer的插件,然后 ...

  10. jQuery引起的用layer弹出层上传文件不能获取文件名的解决(thinkphp5)

    一.问题 在用thinkphp5做到用layer弹出层上传文件过程中,一直不能成功.详细代码如下: HTML代码: <div id="importBox" v-show=&q ...

最新文章

  1. RxJava 过滤操作符 distinct 和 distinctUntilChanged
  2. 文巾解题 56. 合并区间
  3. 《研磨设计模式》chap17 策略模式(1) 简介
  4. 2012-04-26 16:08 Director installer fails with error Unable to run run-cds-tool script“
  5. 普通计算机硬件,将普通显示器更改为触摸屏_计算机硬件和网络_IT /计算机_数据...
  6. OpenCV_轮廓的查找、表达、绘制、特性及匹配
  7. 当年年仅18岁韩寒舌战群儒,受尽冷嘲热讽!
  8. LeetCode 777. 在LR字符串中交换相邻字符(双指针)
  9. html5怎么圆圈怎么打开,HTML5动感圆圈
  10. VSCode如何关闭右侧预览功能 - 截图示下
  11. python 字符串详解
  12. 8-字符串的压缩存储
  13. 从零开始搭建系统2.4——Jenkins安装及配置
  14. sqlserver自动备份脚本
  15. MySQL数据库将多条记录的单个字段合并成一条记录(GROUP_CONCAT)
  16. 光棍节程序员闯关秀 小游戏
  17. PLC控制一阶惯性纯滞后系统的大林(Dahlin)算法详解(SCL代码)
  18. 系统集成项目管理工程师07《项目质量管理》
  19. skype在线代码 skype在线代码怎么弄?
  20. DirectX9 SDK Samples(19) AntiAlias

热门文章

  1. 安装linux后没有网卡驱动,重装完centos6.5后没有网卡驱动的解决方法
  2. Eclipse主题与Monaco字体
  3. android 动态修改pdf,PDF编辑器安卓版,手机也能修改PDF文档
  4. Premiere视频导出格式
  5. 用UltraISO制作CentOS的DVD光盘启动盘 安装系统
  6. 【工具】中国菜刀 官方原版下载 官网下载链接
  7. 翻页电子书/电子画册制作工具
  8. 软件测试如何制作简历?
  9. 异常:贴dependency报错
  10. Mac 微信防撤回免认证登录多开插件:Tweak