• gooflow学习笔记


    前端jqury脚本实现流程设计,兼容目前主流浏览器 

    gooflow 默认属性节点只有:id,name,top,left,width,height,type (各个版本不同,属性节点有所增加),但是这些都是和流程设计器本身有关的 

    实现自定义属性字段:

    1、在节点数据对象上加上自己的定义属性字段(我自定义了一个data 属性字段)

    2、修改的时候把属性字段填充到对应的对象属性字段中

    var focusLine = demo.getItemInfo(focusId, "node");
    focusLine.data = $("#ele_data").val();

    <!DOCTYPE html>
    <html xmlns:v="urn:schemas-microsoft-com:vml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>流程图DEMO</title>
    <!--[if lt IE 9]>
    <?import namespace="v" implementation="#default#VML" ?>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="../codebase/GooFlow.css"/>
    <style>
    .myForm{display:block;margin:0px;padding:0px;line-height:1.5;border:#ccc 1px solid;font: 12px Arial, Helvetica, sans-serif;margin:5px 5px 0px 0px;border-radius:4px;}
    .myForm .form_title{background:#428bca;padding:4px;color:#fff;border-radius:3px 3px 0px 0px;}
    .myForm .form_content{padding:4px;background:#fff;}
    .myForm .form_content table{border:0px}
    .myForm .form_content table td{border:0px}
    .myForm .form_content table .th{text-align:right;font-weight:bold}
    .myForm .form_btn_div{text-align:center;border-top:#ccc 1px solid;background:#f5f5f5;padding:4px;border-radius:0px 0px 3px 3px;} 
    #propertyForm{float:right;260px}
    </style>
    <script type="text/javascript" src="child.js"></script>
    <script type="text/javascript" src="../plugin/jquery.min.js"></script>
    <script type="text/javascript" src="../codebase/GooFunc.js"></script>
    <script type="text/javascript" src="../plugin/json2.js"></script>
    <link rel="stylesheet" type="text/css" href="default.css"/>
    <script type="text/javascript" src="../codebase/GooFlow.js"></script>
    <script type="text/javascript" src="../codebase/GooFlow.color.js"></script>
    <script type="text/javascript">
    var property={
    	1072,
    	height:600,
    	toolBtns:["start round","end round","task round","node","chat","state","plug","join","fork","complex mix"],
    	haveHead:true,
    	headBtns:["new","open","save","undo","redo","reload"],//如果haveHead=true,则定义HEAD区的按钮
    	haveTool:true,
    	haveGroup:true,
    	useOperStack:true
    };
    var remark={
    	cursor:"选择指针",
    	direct:"结点连线",
    	start:"入口结点",
    	"end":"结束结点",
    	"task":"任务结点",
    	node:"自动结点",
    	chat:"决策结点",
    	state:"状态结点",
    	plug:"附加插件",
    	fork:"分支结点",
    	"join":"联合结点",
    	"complex mix":"复合结点",
    	group:"组织划分框编辑开关"
    };
    var demo;
    $(document).ready(function(){
    	demo=$.createGooFlow($("#demo"),property);
    	demo.setNodeRemarks(remark);
    	demo.onItemDel=function(id,type){
    		if(confirm("确定要删除该单元吗?")){
          this.blurItem();
          return true;
    		}else{
          return false;
    		}
    	}
    	demo.loadData(jsondata);
    	demo.onItemFocus=function(id,model){
    	console.info(this.$nodeData);
          $("#ele_model").val(model);
          $("#ele_id").val(id);
          if(model=="line"){
            obj=this.$lineData[id];
            $("#ele_type").val(obj.M);
            $("#ele_left").val("");
            $("#ele_top").val("");
            $("#ele_width").val("");
            $("#ele_height").val("");
            $("#ele_from").val(obj.from);
            $("#ele_to").val(obj.to);
    		$("#ele_data").val(obj.data);
          }else if(model=="node"){
            obj=this.$nodeData[id];
            $("#ele_type").val(obj.type);
            $("#ele_left").val(obj.left);
            $("#ele_top").val(obj.top);
            $("#ele_width").val(obj.width);
            $("#ele_height").val(obj.height);
            $("#ele_from").val("");
            $("#ele_to").val("");
    	    $("#ele_data").val(obj.data);
          }
          $("#ele_name").val(obj.name);
          return true;
    	};
    	demo.onItemBlur=function(id,model){
        document.getElementById("propertyForm").reset();
        return true;
    	};
    });
    var out;
    function Export(){
        document.getElementById("result").value=JSON.stringify(demo.exportData());
    }
    
     function backConChoose(focusId) {
    
            var focusNode = demo.getItemInfo(focusId, "node");
            focusNode.data = $("#ele_data").val();
    		
    		 document.getElementById("result").value=JSON.stringify(demo.exportData());
        }
    
    </script>
    </head>
    <body style="background:#EEEEEE">
    <div id="demo" style="margin:5px;float:left"></div>
    <form class="myForm" id="propertyForm">
    <div class="form_title">属性设置</div>
    <div class="form_content">
      <table>
        <tr><td class="th">Id:</td><td><input type="text" style="120px" id="ele_id"/></td></tr>
        <tr><td class="th">Name:</td><td><input type="text" style="120px" id="ele_name"/></td></tr>
        <tr><td class="th">Type:</td><td><input type="text" style="120px" id="ele_type"/></td></tr>
        <tr><td class="th">Model:</td><td><input type="text" style="120px" id="ele_model"/></td></tr>
        <tr><td class="th">Left-r:</td><td><input type="text" style="120px" id="ele_left"/></td></tr>
        <tr><td class="th">Top-r:</td><td><input type="text" style="120px" id="ele_top"/></td></tr>
        <tr><td class="th">Width:</td><td><input type="text" style="120px" id="ele_width"/></td></tr>
        <tr><td class="th">Height:</td><td><input type="text" style="120px" id="ele_height"/></td></tr>
        <tr><td class="th">From:</td><td><input type="text" style="120px" id="ele_from"/></td></tr>
        <tr><td class="th">To:</td><td><input type="text" style="120px" id="ele_to"/></td></tr>
    	<tr><td class="th">Data:</td><td><input type="text" style="120px" id="ele_data"/></td></tr>
      </table>
    </div>
    <div class="form_btn_div">
      <input type="reset" value="重置"/>
      <input type="button" value="确定" onclick="backConChoose(demo.$focus)"/>
    </div>
    </form>
    <div style="clear:both">
    <input id="submit" type="button" value='导出结果' onclick="Export()"/>
    <textarea id="result" row="6"></textarea>
    </div>
    </body>
    </html>
    

      

       其特点:

    1、跨浏览器,可兼容IE7--IE11, FireFox, Chrome, Opera等几大内核的浏览器,且不需要浏览器再加装任何控件。 (IE7-IE8时,使用VML;IE9以上,FF,OPERA,CHROME,SAFARI上使用SVG) 
    2、 多系统兼容性、可移植性:由于只包括前台UI,因此二次开发者可很方便将本插件用在任何一种需要流程图的B/S系统应用上,流程图的详细实现逻辑完全交于后台程序开发者自己实现;对于后台,只要能返回/接收能被本插件解析的JSON格式数据即可.所以本插件可用于不同的服务器语言建立的后台上. 
    3、跨领域:流程图设计器不止用在电信领域,在其它需要IT进行技术支持的领域中都有重大作用. 

    以下从纯技术实现层面具体描述: 
    1、 页面顶部栏、左边侧边栏均可自定义; 
    2、当左边的侧边栏设为不显示时,为只读状态,此时的视图区可当作是一个查看器而非编辑器。 
    3、侧边工具栏除了基本和一些流程节点按钮外,还自定义新的节点按钮,自定义节点都可以有自有的图标、类型名称,定义后在使用可可在工作区内增加这些自定义节点。 
    4、顶部栏可显示流程图数据组的标题,也可提供一些常用操作按钮。 
    5、 顶部栏的按钮,除了撤销、重做按钮外,其余按钮均可自定义点击事件。 
    6、 可画直线、折线;折线还可以左右/上下移动其中段。 
    7、 具有区域划分功能,能让用户更直观地了解哪些节点及其相互间的转换,是属于何种自定义区域内的。 
    8、 具有标注功能,用橙红色标注某个结点或者转换线,一般用在展示流程进度时。 
    9、 能直接双击结点、连线、分组区域中的文字进行编辑 
    10、 在对结点、连线、分组区域的各种编辑操作,如新增/删除/修改名称/重设样式或大小/移动/标注时,均可捕捉到事件,并触发自定义事件,如果自定义事件执行的方法返回FALSE,则会阻止操作。 
    11、 具有操作事务序列控制功能,在工作区内的各种有效操作都能记录到一个栈中,然后可以进行撤销(undo())或重做(redo()),像典型的C/S软件一样。 

      gooflow 官网:https://gooflow.xyz/docs/index.html#methods

         感谢博主:https://www.cnblogs.com/tangxf/p/4227639.html

    https://files.cnblogs.com/files/itclw/GooFlow1.1.zip

  • 相关阅读:
    类加载机制
    PTA(BasicLevel)-1094 谷歌的招聘
    PTA(BasicLevel)-1023 组个最小数
    异构图神经网络笔记-Heterogeneous Graph Neural Network(KDD19)
    PTA(BasicLevel)-1014 福尔摩斯的约会
    PTA(BasicLevel)-1013 数素数
    PTA(BasicLevel)-1012 数字分类
    PTA(BasicLevel)-1010 一元多项式求导
    PTA(BasicLevel)-1009 说反话
    PTA(BasicLevel)-1008数组元素循环右移问题
  • 原文地址:https://www.cnblogs.com/itclw/p/9951728.html
Copyright © 2020-2023  润新知