流程设计提交时验证流程合法性

This commit is contained in:
yubao 2018-03-27 22:58:55 +08:00
parent 17dd5552c6
commit 82c1519648
6 changed files with 154 additions and 63 deletions

View File

@ -315,8 +315,6 @@ namespace OpenAuth.App
/// <param name="wfruntime"></param> /// <param name="wfruntime"></param>
/// <returns></returns> /// <returns></returns>
private string GetMakerList(FlowRuntime wfruntime) private string GetMakerList(FlowRuntime wfruntime)
{
try
{ {
string makerList = ""; string makerList = "";
if (wfruntime.runtimeModel.nextNodeId == "-1") if (wfruntime.runtimeModel.nextNodeId == "-1")
@ -356,11 +354,6 @@ namespace OpenAuth.App
return makerList; return makerList;
} }
catch
{
throw;
}
}
/// <summary> /// <summary>
/// 寻找该节点执行人 /// 寻找该节点执行人
/// </summary> /// </summary>

View File

@ -28,7 +28,10 @@ namespace OpenAuth.App
{ {
UnitWork.Update<FlowScheme>(u => u.Id == flowScheme.Id, u => new FlowScheme UnitWork.Update<FlowScheme>(u => u.Id == flowScheme.Id, u => new FlowScheme
{ {
//todo:要修改的 SchemeContent = flowScheme.SchemeContent,
SchemeName = flowScheme.SchemeName,
ModifyDate = DateTime.Now,
FrmId = flowScheme.FrmId
}); });
} }

View File

@ -42,16 +42,25 @@
</div> </div>
<div class="layui-tab-item"> <div class="layui-tab-item">
<div class="layui-row">
<div class="layui-col-md3">
<ul id="frmTree" class="ztree" style="width: 180px; padding: 10px; border: 1px solid #ddd; overflow: auto;"></ul> <ul id="frmTree" class="ztree" style="width: 180px; padding: 10px; border: 1px solid #ddd; overflow: auto;"></ul>
<div id="flowPanel" ></div> </div>
<div id="frmPreview"></div> <div class="layui-col-md9 layui-col-space5">
<div class="layui-row"><div id="flowPanel"></div></div>
<div class="layui-row"><div id="frmPreview"></div></div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<input type="hidden" lay-submit id="btnSubmit" lay-filter="formSubmit"/> <input type="hidden" lay-submit id="btnSubmit" lay-filter="formSubmit" />
</form> </form>
<script type="text/javascript" src="/layui/layui.js"></script> <script type="text/javascript" src="/layui/layui.js"></script>
<script type="text/javascript" src="/userJs/flowInstanceEdit.js?v2"></script> <script type="text/javascript" src="/userJs/flowInstanceEdit.js?v2"></script>

View File

@ -1,9 +1,9 @@
layui.define(["jquery","layer","bootstrap"], layui.define(["jquery", "layer", "bootstrap"],
function(exports) { function (exports) {
var $ = layui.jquery; var $ = layui.jquery;
var layer = layui.layer; var layer = layui.layer;
//初始化设计流程器 //初始化设计流程器
$.fn.flowdesign = function(options) { $.fn.flowdesign = function (options) {
var $frmpreview = $(this); var $frmpreview = $(this);
if (!$frmpreview.attr('id')) { if (!$frmpreview.attr('id')) {
return false; return false;
@ -21,11 +21,11 @@
haveGroup: true, haveGroup: true,
useOperStack: true useOperStack: true
}; };
if (options != undefined ) { if (options != undefined) {
$.extend(defaultcnf, options); $.extend(defaultcnf, options);
} }
var flowPanel = $.createGooFlow($(this),defaultcnf); var flowPanel = $.createGooFlow($(this), defaultcnf);
flowPanel.setNodeRemarks({ flowPanel.setNodeRemarks({
cursor: "选择指针", cursor: "选择指针",
direct: "转换连线", direct: "转换连线",
@ -48,10 +48,93 @@
flowPanel.loadData(options.flowcontent); flowPanel.loadData(options.flowcontent);
} }
flowPanel.SetNodeEx = function(id, data) { //导出数据扩展方法
//所有节点必须有进出线段
//必须有开始结束节点(且只能为一个)
//分流合流节点必须成对出现
//分流合流节点必须一一对应且中间必须有且只能有一个普通节点
//分流节点与合流节点之前的审核节点必须有且只能有一条出去和进来节点
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.setName(id, data.NodeName, "node", data);
} }
flowPanel.SetLineEx = function(id, data) { flowPanel.SetLineEx = function (id, data) {
flowPanel.setName(id, data.LineName, "line", data); flowPanel.setName(id, data.LineName, "line", data);
} }
flowPanel.onItemDbClick = function (id, type) { flowPanel.onItemDbClick = function (id, type) {
@ -107,19 +190,22 @@
} }
} }
if (item.setInfo != undefined && item.setInfo.Taged != undefined) { if (item.setInfo != undefined && item.setInfo.Taged != undefined) {
var _row = '<div style="text-align:left">'; var tips = '<div style="text-align:left">';
var tagname = { "-1": "不通过", "1": "通过", "0": "驳回" }; var tagname = { "-1": "不通过", "1": "通过", "0": "驳回" };
_row += "<p>处理人:" + item.setInfo.UserName + "</p>"; tips += "<p>处理人:" + item.setInfo.UserName + "</p>";
_row += "<p>结果:" + tagname[item.setInfo.Taged] + "</p>"; tips += "<p>结果:" + tagname[item.setInfo.Taged] + "</p>";
_row += "<p>处理时间:" + item.setInfo.TagedTime + "</p>"; tips += "<p>处理时间:" + item.setInfo.TagedTime + "</p>";
_row += "<p>备注:" + item.setInfo.Description + "</p></div>"; tips += "<p>备注:" + item.setInfo.Description + "</p></div>";
$('#' + item.id).attr('data-toggle', 'tooltip'); $('#' + item.id).click(function () {
$('#' + item.id).attr('data-placement', 'bottom'); layer.tips(tips, '#' + item.id);
$('#' + item.id).attr('title', _row); });
} else {
$('#' + item.id).click(function () {
layer.tips('暂无处理信息', '#' + item.id);
});
} }
}); });
$('[data-toggle="tooltip"]').tooltip({ "html": true });
} }
if (options.preview == 1) { if (options.preview == 1) {
preview(); preview();
@ -147,7 +233,7 @@
}; };
var _NodeConfluenceType = { "0": "所有步骤通过", "1": "一个步骤通过即可", "2": "按百分比计算" }; var _NodeConfluenceType = { "0": "所有步骤通过", "1": "一个步骤通过即可", "2": "按百分比计算" };
$.each(options.flowcontent.nodes, $.each(options.flowcontent.nodes,
function(i, item) { function (i, item) {
if (item.setInfo != undefined) { if (item.setInfo != undefined) {
var _popoverhtml = ""; var _popoverhtml = "";
_popoverhtml += _popoverhtml +=

View File

@ -143,7 +143,7 @@
//提交数据 //提交数据
form.on('submit(formSubmit)', form.on('submit(formSubmit)',
function (data) { function (data) {
var content = flowDesignPanel.exportData(); var content = flowDesignPanel.exportDataEx();
if (content == -1) { if (content == -1) {
return false; //阻止表单跳转。 return false; //阻止表单跳转。
} }

Binary file not shown.