layui.define(["jquery", "layer"], 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 defaultcnf = { width: 500, height: 400, haveHead: false, haveTool: true, headLabel: true, toolBtns: ["start round mix", "end round", "node", "fork", "join"], haveGroup: true, useOperStack: true, needNoTag: true, useName: "处理人", tagName: { "1": "通过", "2": "不通过", "3": "驳回/撤回" }, tagClass: { "1": "#5cb85c", "2": "#d9534f", "3": "#f0ad4e" }, resultName: "结果", timeName: "处理时间", remarkName: "备注", }; if (options != undefined) { $.extend(defaultcnf, options); } var flowPanel = $.createWaterFlow($(this), defaultcnf); flowPanel.setNodeRemarks({ cursor: "选择指针", direct: "转换连线", dashed: "关联虚线", start: "开始节点", end: "结束节点", task: "任务节点", node: "任务节点", chat: "决策节点", state: "状态节点", plug: "附加插件", fork: "会签开始节点", join: "会签结束节点", complex: "复合节点", group: "组织划分框编辑开" }); if (options != undefined && options.flowcontent != undefined && options.flowcontent != null) { //加载内容 flowPanel.loadData(options.flowcontent); } //导出数据扩展方法 //所有节点必须有进出线段 //必须有开始结束节点(且只能为一个) //分流合流节点必须成对出现 //分流合流节点必须一一对应且中间必须有且只能有一个普通节点 //分流节点与合流节点之前的审核节点必须有且只能有一条出去和进来节点 flowPanel.exportDataEx = function () { var data = flowPanel.exportData(); var fromlines = {}, tolines = {}, nodes = {}, fnodes = [], //会签分流节点 hnodes = [], //会签合流节点 startroundFlag = 0, //开始节点标识 endroundFlag = 0; //结束节点标识 for (var i in data.lines) { if (fromlines[data.lines[i].from] == undefined) { fromlines[data.lines[i].from] = []; } fromlines[data.lines[i].from].push(data.lines[i].to); if (tolines[data.lines[i].to] == undefined) { tolines[data.lines[i].to] = []; } tolines[data.lines[i].to].push(data.lines[i].from); } for (var j in data.nodes) { var _node = data.nodes[j]; var _flag = false; switch (_node.type) { case "start round mix": startroundFlag++; if (fromlines[_node.id] == undefined) { layer.msg("开始节点无法流转到下一个节点"); return -1; } break; case "end round": endroundFlag++; if (tolines[_node.id] == undefined) { layer.msg("无法流转到结束节点"); return -1; } break; case "node": if (_node.setInfo == null) { layer.msg("请设置任务节点【"+_node.name+"】操作人员"); return -1; } _flag = true; break; case "fork": _flag = true; fnodes.push(_node.id); break; case "join": hnodes.push(_node.id); _flag = true; break; default: layer.msg("节点数据异常!"); return -1; break; } nodes[_node.id] = _node; } if (startroundFlag == 0) { layer.msg("必须有开始节点"); return -1; } if (endroundFlag == 0) { layer.msg("必须有结束节点"); return -1; } if (fnodes.length != hnodes.length) { layer.msg("会签开始的节点数量必须等于会签结束的节点数量"); return -1; } return data; } flowPanel.SetNodeEx = function (id, data) { flowPanel.setName(id, data.NodeName, "node", data); } flowPanel.SetLineEx = function (id, data) { flowPanel.setName(id, data.LineName, "line", data); } flowPanel.SetAreaEx = function (id, data) { flowPanel.setName(id, data.AreaName, "area", data); flowPanel.setAreaColor(id, data.AreaColor); } flowPanel.onItemDbClick = function (id, type) { var obj = flowPanel.getItemInfo(id, type); switch (type) { case "node": if ('OpenNode' in options) { options.OpenNode(obj); } break; case "line": if ('OpenLine' in options) { options.OpenLine(obj); } break; case "area": if ('OpenArea' in options) { options.OpenArea(obj); } break; } return false; } flowPanel.onItemRightClick = function (id, type) { var obj = flowPanel.getItemInfo(id, type); switch (type) { case "node": if ('OpenNode' in options) { options.OpenNode(obj); } break; case "line": if ('OpenLine' in options) { options.OpenLine(obj); } break; case "area": if ('OpenArea' in options) { options.OpenArea(obj); } break; } return false; } if (defaultcnf.isprocessing) //如果是显示进程状态 { var tipHtml = '
'; if (defaultcnf.needNoTag==true) { tipHtml += '
正在处理
'; } if (!!defaultcnf.tagClass && Object.keys(defaultcnf.tagClass).length > 0) { for (var p in defaultcnf.tagClass) {//遍历json对象的每个key/value对,p为key tipHtml += '
' + defaultcnf.tagName[p] + '
'; } } if (defaultcnf.needNoTag == true) { tipHtml += '
未处理
'; } $('.WaterFlow_work .WaterFlow_work_inner').css('background-image', 'none'); $('td').css('color', '#fff'); $frmpreview.css('background', '#fff'); $('.ico').remove(); $('.WaterFlow_item').css('border', '0px'); $frmpreview.append(tipHtml); $.each(options.nodeData, function (i, item) { $("#" + item.id).css("background", "#999"); if (item.type == "start round mix") { $("#" + item.id).css("background", "#5cb85c"); } else { if (item.id == options.activityId) { $("#" + item.id).css("background", "#5bc0de"); } if (item.setInfo != undefined && item.setInfo.Taged != undefined) { if (!!defaultcnf.tagName[item.setInfo.Taged]) { $("#" + item.id).css("background", defaultcnf.tagClass[item.setInfo.Taged]); } else { $("#" + item.id).css("background", "#999"); } } } if (item.setInfo != undefined && item.setInfo.Taged != undefined) { var tips = '
'; tips += "

" + defaultcnf.useName+":" + item.setInfo.UserName + "

"; tips += "

" + defaultcnf.resultName + ":" + defaultcnf.tagName[item.setInfo.Taged] + "

"; tips += "

" + defaultcnf.timeName +":" + item.setInfo.TagedTime + "

"; tips += "
" + defaultcnf.remarkName +":" + item.setInfo.Description + "
"; $('#' + item.id).hover(function () { layer.tips(tips, '#' + item.id); }); } else { $('#' + item.id).hover(function () { layer.tips('暂无处理信息', '#' + item.id); }); } }); } if (options.preview == 1) { preview(); } //预览 function preview() { var _frmitems = {}; for (var i in options.frmData) { var _frmitem = options.frmData[i]; _frmitems[_frmitem.control_field] = _frmitem.control_label; } var DataBaseLinkData = {}; var _NodeRejectType = { "0": "前一步", "1": "第一步", "2": "某一步", "3": "用户指定", "4": "不处理" }; var _NodeIsOver = { "0": "不允许", "1": "允许" }; var _NodeDesignate = { "NodeDesignateType1": "所有成员", "NodeDesignateType2": "指定成员", "NodeDesignateType3": "发起者领导", "NodeDesignateType4": "前一步骤领导", "NodeDesignateType5": "发起者部门领导", "NodeDesignateType6": "发起者公司领导" }; var _NodeConfluenceType = { "all": "所有步骤通过", "one": "一个步骤通过即可", "2": "按百分比计算" }; if (options.flowcontent == undefined) return; $.each(options.flowcontent.nodes, function (i, item) { if (item.setInfo != undefined) { var _popoverhtml = ""; _popoverhtml += '
  基本信息
'; _popoverhtml += ''; _popoverhtml += '
  审核者
'; _popoverhtml += ''; var _row = ""; for (var i in item.setInfo.frmPermissionInfo) { var _item = item.setInfo.frmPermissionInfo[i]; var _downtext = ""; if (_item.down) { _downtext = ' | 可下载'; } else if (_item.down != undefined) { _downtext = ' | 不可下载'; } _row += '
  • ' + _frmitems[_item.fieldid] + ': ' + (_item.look ? '可查看' : '不可查看') + _downtext + '
  • '; if (i == item.setInfo.frmPermissionInfo.length - 1) { _popoverhtml += '
      权限分配
    '; _popoverhtml += ''; } } if (item.setInfo.NodeDataBaseToSQL != "" || item.setInfo.NodeSQL != "") { _popoverhtml += '
      执行SQL
    '; _popoverhtml += ''; } $('#' + item.id).attr('title', item.name); $('#' + item.id).attr('data-toggle', 'popover'); $('#' + item.id).attr('data-placement', 'bottom'); $('#' + item.id).attr('data-content', _popoverhtml); } else { $('#' + item.id).attr('title', item.name); $('#' + item.id).attr('data-toggle', 'popover'); $('#' + item.id).attr('data-placement', 'bottom'); $('#' + item.id).attr('data-content', "该节点未被设置"); } }); //$('.WaterFlow_item').popover({ html: true }); } return flowPanel; } exports('flowlayout'); });