C# Gooflow+layer弹出层 全js代码
文件的目录,这里吧Gooflow的一套东西都放在GooFlow文件夹下面,文件夹是我自己分的,大家可以按照自己的习惯去调整,放到一起便于管理和修改。
code:放置的是弹出的属性页面,里面建了几个文件,预备和数据库操作相关联,不过例子中并没有写代码,这些代码可以根据你建的数据库和三层自己写添删改查。
codebase和js:放置的gooflow用的js和css。
demo.html:流程设计器的主页面,使用的时候直接调用。
javaScript/layer:存放的是弹出层的js和css,这是一个独立的控件,它有自己官网,有兴趣的可以自己研究。
主要修改的是GooFlow.js,你可以通过查找alert去看我写的一些备注,里面关于图标点击、移动等事件都标注出来了。
Demo.html代码
流程图DEMO
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代码相关推荐
- layer 弹出层全屏
let index=layer.open({title:' ',type: 1,shade: false,skin: 'layui-layer-lan', //加上边框content: $('#zgj ...
- 安防互联网摄像头海康大华硬盘录像机视频流媒体服务器EasyNVR在layer弹出层中使用video标签无法最大化全屏播放问题解决
诞生背景 众所周知,EasyNVR可以将局域网/广域网上的海康/大华等网络摄像头由rtsp转换为rtmp.rtsp.hls.flv协议转换,并提供推流服务,可以将拉到的网络摄像头直接转发到流媒体服务器 ...
- layui内置模块(layer弹出层)
前面我们已经对layui前端框架的页面元素进行了简单的学习,但是作为一个可用的程序,仅仅是长的好看,并没有那个什么用:在好看的同时还需要实用和酷炫,实用就需要实现我们方便的和后端进行数据交互,酷炫就是 ...
- Vue(二十一)Layer弹出层
安装:下载源码到本地 layer: 丰富多样的 Web 弹出层组件,可轻松实现 Alert/Confirm/Prompt/普通提示/页面区块/iframe/tips 等等几乎所有的弹出交互.目前已成为 ...
- Layer 弹出层组件
Layer 弹出层组件 一.Layer是什么? 用于实现网页中的各种弹出层交互, 如 Alert/Confirm/Message/Tips/Page/Iframe/Loading/Prompt/Tab ...
- layer文件ajax上传,layer弹出层数据传输到content里面
在项目中使用layer弹出层的时候,遇到一个问题,就是利用ajax请求后台数据成功时,调用layer弹出层(iframe),如何把数据传到iframe里面去? 经过百度,发现,使用js把数据拼接起来, ...
- layer弹出层扩展自定义样式
layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. 官网 http://layer.layui.com/ l ...
- Layer弹出层关闭后刷新父页面
一.Layer弹出层关闭后刷新父页面 //编辑 $("#edit").on("click", function(){var id = getIdSelectio ...
- layer弹出层闪退_jQuery使用Layer弹出层插件闪退问题
一.前言 巨坑,基础没学好,导致找了一个下午的问题,终于被我发现了.说多都是泪,记录下来,以后有人遇到这个错误可以参考下 做项目期间做了几个页面,需要用到弹出层,为了方便使用到了Layer的插件,然后 ...
- jQuery引起的用layer弹出层上传文件不能获取文件名的解决(thinkphp5)
一.问题 在用thinkphp5做到用layer弹出层上传文件过程中,一直不能成功.详细代码如下: HTML代码: <div id="importBox" v-show=&q ...
最新文章
- RxJava 过滤操作符 distinct 和 distinctUntilChanged
- 文巾解题 56. 合并区间
- 《研磨设计模式》chap17 策略模式(1) 简介
- 2012-04-26 16:08 Director installer fails with error Unable to run run-cds-tool script“
- 普通计算机硬件,将普通显示器更改为触摸屏_计算机硬件和网络_IT /计算机_数据...
- OpenCV_轮廓的查找、表达、绘制、特性及匹配
- 当年年仅18岁韩寒舌战群儒,受尽冷嘲热讽!
- LeetCode 777. 在LR字符串中交换相邻字符(双指针)
- html5怎么圆圈怎么打开,HTML5动感圆圈
- VSCode如何关闭右侧预览功能 - 截图示下
- python 字符串详解
- 8-字符串的压缩存储
- 从零开始搭建系统2.4——Jenkins安装及配置
- sqlserver自动备份脚本
- MySQL数据库将多条记录的单个字段合并成一条记录(GROUP_CONCAT)
- 光棍节程序员闯关秀 小游戏
- PLC控制一阶惯性纯滞后系统的大林(Dahlin)算法详解(SCL代码)
- 系统集成项目管理工程师07《项目质量管理》
- skype在线代码 skype在线代码怎么弄?
- DirectX9 SDK Samples(19) AntiAlias