You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

728 lines
30 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

(function ($) {
var defaults = {
processData: {}, //步骤节点数据
//processUrl:'',//步骤节点数据
fnRepeat: function () {
alert("步骤连接重复");
},
fnClick: function () {
alert("单击");
},
fnDbClick: function () {
alert("双击");
},
canvasMenus: {
"one": function (t) { alert('画面右键') }
},
processMenus: {
"one": function (t) {
alert('步骤右键');
}
},
canvasLabMenu: {
"one": function (t) { alert('标签右键') }
},
/*右键菜单样式*/
menuStyle: {
border: '1px solid #5a6377',
minWidth: '150px',
},
itemStyle: {
color: '#333',
fontSize: '12px',
border: '0',
/*borderLeft:'5px solid #fff',*/
padding: '5px 15px 5px 10px'
},
itemHoverStyle: {
border: '0',
cursor: 'pointer',
/*borderLeft:'5px solid #49afcd',*/
color: '#fff',
/*backgroundColor: '#2980b9'*/
},
mtAfterDrop: function (params) {
//alert('连接成功后调用');
//alert("连接:"+params.sourceId +" -> "+ params.targetId);
},
//这是连接线路的绘画样式
connectorPaintStyle: {
lineWidth: 3,
strokeStyle: "#4f7bba",
joinstyle: "round"
},
//鼠标经过样式
connectorHoverStyle: {
lineWidth: 3,
strokeStyle: "#32b291"
}
}; /*defaults end*/
var initEndPoints = function () {
$(".process-flag").each(function (i, e) {
var p = $(e).parent();
jsPlumb.makeSource($(e), {
parent: p,
anchor: "Continuous",
endpoint: ["Dot", { radius: 1 }],
connector: ["Flowchart", { stub: [5, 5] }],
connectorStyle: defaults.connectorPaintStyle,
hoverPaintStyle: defaults.connectorHoverStyle,
dragOptions: {},
maxConnections: -1
});
});
}
/*设置隐藏域保存关系信息*/
var aConnections = [];
var setConnections = function (conn, remove) {
if (!remove) aConnections.push(conn);
else {
var idx = -1;
for (var i = 0; i < aConnections.length; i++) {
if (aConnections[i] == conn) {
idx = i; break;
}
}
if (idx != -1) aConnections.splice(idx, 1);
}
if (aConnections.length > 0) {
var s = "";
for (var j = 0; j < aConnections.length; j++) {
var from = $('#' + aConnections[j].sourceId).attr('process_id');
var target = $('#' + aConnections[j].targetId).attr('process_id');
s = s + "<input type='hidden' value=\"" + from + "," + target + "\">";
}
$('#leipi_process_info').html(s);
} else {
$('#leipi_process_info').html('');
}
jsPlumb.repaintEverything(); //重画
};
/*Flowdesign 命名纯粹为了美观,而不是 formDesign */
$.fn.Flowdesign = function (options) {
var _canvas = $(this);
//右键步骤的步骤号
_canvas.append('<input type="hidden" id="leipi_active_id" value="0"/><input type="hidden" id="leipi_copy_id" value="0"/>');
_canvas.append('<div id="leipi_process_info"></div>');
/*配置*/
$.each(options, function (i, val) {
if (typeof val == 'object' && defaults[i])
$.extend(defaults[i], val);
else
defaults[i] = val;
});
/*画布右键绑定*/
var contextmenu = {
bindings: defaults.canvasMenus,
menuStyle: defaults.menuStyle,
itemStyle: defaults.itemStyle,
itemHoverStyle: defaults.itemHoverStyle
}
$(this).contextMenu('canvasMenu', contextmenu);
jsPlumb.importDefaults({
DragOptions: { cursor: 'pointer' },
EndpointStyle: { fillStyle: '#225588' },
Endpoint: ["Dot", { radius: 1 }],
ConnectionOverlays: [
["Arrow", { location: 1 }],
["Label", {
location: 0.1,
id: "label",
cssClass: "aLabel"
}]
],
Anchor: 'Continuous',
ConnectorZIndex: 5,
HoverPaintStyle: defaults.connectorHoverStyle
});
if ($.browser.msie && $.browser.version < '9.0') { //ie9以下用VML画图
jsPlumb.setRenderMode(jsPlumb.VML);
} else { //其他浏览器用SVG
jsPlumb.setRenderMode(jsPlumb.SVG);
}
//初始化原步骤
var lastProcessId = 0;
var processData = defaults.processData;
if (processData.list) {
$.each(processData.list, function (i, row) {
var nodeDiv = document.createElement('div');
var nodeId = "window" + row.id, badge = 'badge-inverse', icon = 'icon-star';
if (lastProcessId == 0)//第一步
{
badge = 'badge-info';
icon = 'icon-play';
}
if (row.icon) {
icon = row.icon;
}
$(nodeDiv).attr("id", nodeId)
.attr("style", row.style)
.attr("process_to", row.process_to)
.attr("process_id", row.id)
.addClass("process-step btn btn-small")//给节点名称添加一个span元素
.html('<span class="process-flag badge ' + badge + '" alt=' + nodeId + ' title="点击右键,执行相关操作" ><i class="' + icon + ' icon-white"></i></span>&nbsp;<span id="span_' + row.id + '" title="点击右键,执行相关操作" >' + row.process_name + '</span>')
.mousedown(function (e) {
if (e.which == 3) { //右键绑定
_canvas.find('#leipi_active_id').val(row.id);
contextmenu.bindings = defaults.processMenus;
var nodeID = document.getElementById("leipi_active_id");
if (nodeID.value.indexOf("S_") != -1) {
// $(this).contextMenu('processMenu', contextmenu);
return;
}
var node = new Entity("BP.WF.Node", nodeID.value);
//如果是第一个节点,把接收人规则文字换成可启动流程的人员
if (nodeID.value.substr(nodeID.value.length - 2) == "01")
$('#pmNodeAccepterRole span').text("设置发起人");
else
$('#pmNodeAccepterRole span').text("设置接受人");
if (node.RunModel == 0) {
$('#pmfun span').text("线型:" + nodeID.value);
}
if (node.RunModel == 1) {
$('#pmfun span').text("合流:" + nodeID.value);
}
if (node.RunModel == 2) {
$('#pmfun span').text("分流:" + nodeID.value);
}
if (node.RunModel == 3) {
$('#pmfun span').text("分合流:" + nodeID.value);
}
if (node.RunModel == 4) {
$('#pmfun span').text("子线程:" + nodeID.value);
}
if (node.FWCSta == 0) {
$('#pmWorkCheck span').text("审核组件-禁用");
}
if (node.FWCSta == 1) {
$('#pmWorkCheck span').text("审核组件-启用");
}
if (node.FWCSta == 2) {
$('#pmWorkCheck span').text("审核组件-只读");
}
$(this).contextMenu('processMenu', contextmenu);
////$(this).contextMenu('processMenu3', contextmenu);
//$(this).mouseenter(function () {
// $(this).contextMenu('processMenu3', contextmenu);
//});
}
});
_canvas.append(nodeDiv);
//索引变量
lastProcessId = row.id;
}); //each
}
//显示标签
var labNoteData = defaults.labNoteData;
if (labNoteData.list) {
$.each(labNoteData.list, function (i, lab) {
var labDiv = document.createElement('div');
var labId = "lab" + lab.id, badge = 'badge-inverse';
$(labDiv).attr("id", labId)
.attr("style", lab.style)
.attr("process_id", lab.id)
.addClass("process-lab")
.html('<span class="process-flag badge ' + badge + '"></span>&nbsp;<span id="lab_span_' + lab.id + '">' + lab.process_name + '</span>')
.mousedown(function (e) {
if (e.which == 3) { //右键绑定
_canvas.find('#leipi_active_id').val(lab.id);
contextmenu.bindings = defaults.canvasLabMenu;
$(this).contextMenu('canvasLabMenu', contextmenu);
}
})
.dblclick(function (e) {
console.log('e', e.currentTarget.id);
var activeId = e.currentTarget.id.replace('lab', ''); //右键当前的ID
var windowtext = $("#lab" + activeId).text();
windowtext = windowtext.replace(/(^\s*)|(\s*$)/g, ""); //去掉左右空格.
$("#alertModal3 div:eq(2) button").attr("class", "btn btn-primary savetext" + activeId);
$("#alertModal3 div:eq(2) button").attr("onclick", "saveLabName(\"" + activeId + "\")");
var xiuNodename = '<input style="width:90%" id="TB_LAB_' + activeId + '" type="text" value="' + windowtext + '">'
$("#lab" + activeId + " span").html();
labAlert(xiuNodename);
});
_canvas.append(labDiv);
});
}
var timeout = null;
//点击或双击事件,这里进行了一个单击事件延迟,因为同时绑定了双击事件
$(".process-step").live('click', function () {
//激活
_canvas.find('#leipi_active_id').val($(this).attr("process_id")),
clearTimeout(timeout);
var obj = this;
timeout = setTimeout(defaults.fnClick, 300);
}).live('dblclick', function () {
clearTimeout(timeout);
defaults.fnDbClick();
});
//使节点可拖动
jsPlumb.draggable(jsPlumb.getSelector(".process-step"), { containment: $("#flowdesign_canvas") });
initEndPoints();
//使标签可拖动
jsPlumb.draggable(jsPlumb.getSelector(".process-lab"), { containment: $("#flowdesign_canvas") });
initEndPoints();
//绑定添加连接操作。画线-input text值 拒绝重复连接
jsPlumb.bind("jsPlumbConnection", function (info) {
if (info.sourceId == info.targetId) {
jsPlumb.detach(info);
return;
}
setConnections(info.connection)
});
//绑定删除connection事件
jsPlumb.bind("jsPlumbConnectionDetached", function (info) {
setConnections(info.connection, true);
});
//绑定删除确认操作
jsPlumb.bind("click", function (c) {
fAlert("", 0, c);
$("#lineDel").unbind("click");
$("#lineSet").unbind("click");
$("#lineLabSave").unbind("click");
//删除节点方向连接线
$("#lineDel").click(function () {
//获取连接线连接的ID
var fromNodeID = c.sourceId.replace('window', '');
var toNodeID = c.targetId.replace('window', '');
//获取流程编号
var flowNo = GetQueryString("FK_Flow");
if (window.confirm("您确定要删除从节点[" + fromNodeID + "],到节点[" + toNodeID + "]吗?") == false)
return;
var hander = new HttpHandler("BP.WF.HttpHandler.WF_Admin_CCBPMDesigner2018");
hander.AddPara("FK_Node", fromNodeID);
hander.AddPara("FK_Flow", flowNo);
hander.AddPara("ToNode", toNodeID);
var data = hander.DoMethodReturnString("Direction_Delete");
if (data.indexOf('err@') == 0) {
alert(data); //删除失败的情况.
return;
}
jsPlumb.detach(c);
});
$("#lineSet").click(function () {
var fromNodeID = c.sourceId.replace('window', '');
var targetId = c.targetId.replace('window', '');
var flowNo = GetQueryString("FK_Flow");
var url = "";
if (GetHrefUrl().indexOf("/WF/Admin/CCBPMDesigner") == -1)
url = basePath + "/WF/Admin/";
else
url = "../";
url += "Cond2020/ConditionLine.htm?FK_Flow=" + flowNo + "&FK_MainNode=" + fromNodeID + "&FK_Node=" + fromNodeID + "&ToNodeID=" + targetId + "&CondType=2&Lang=CH&t=" + new Date().getTime();
$("#LineModal").hide();
$(".modal-backdrop").hide();
var w = window.innerWidth - 240;
var h = window.innerHeight - 120;
CondDir(fromNodeID);
return;
OpenEasyUiDialog(url, flowNo + fromNodeID + "DIRECTION" + targetId, "设置方向条件" + fromNodeID + "->" + targetId, w, h, "icon-property", true, null, null, null, function () {
});
})
$("#lineLabSave").click(function () {
//获取连接线连接的ID
var fromNodeID = c.sourceId.replace('window', '');
var toNodeID = c.targetId.replace('window', '');
//获取流程编号
var flowNo = GetQueryString("FK_Flow");
var dirLabId = "TB_Direction_LAB_" + fromNodeID + "_" + toNodeID;
var des = $("#" + dirLabId).val();
des = des.replace(/(^\s*)|(\s*$)/g, "");
var hander = new HttpHandler("BP.WF.HttpHandler.WF_Admin_CCBPMDesigner2018");
hander.AddPara("FK_Node", fromNodeID);
hander.AddPara("FK_Flow", flowNo);
hander.AddPara("ToNode", toNodeID);
hander.AddPara("Des", des);
var data = hander.DoMethodReturnString("Direction_Save");
if (data.indexOf('err@') == 0) {
alert(data); //删除失败的情况.
return;
}
c.removeOverlay("des_" + fromNodeID + "_" + toNodeID);
c.addOverlay(['Label', {
label: '<label style="font-size:14px;margin-bottom:25px;margin-left:-20px;color:#00a6ac;">' + des + '</label>', width: 12, length: 12, location: 0.5, id: "des_" + fromNodeID + "_" + toNodeID, events: {
click: function (labelOverlay, originalEvent) {
}
}
}])
})
// if(confirm("你确定取消连接吗?是:取消 否:方向指向"))
// {
// jsPlumb.detach(c);
// }
// else
// {
// window.open('');
// }
});
//连接成功回调函数
function mtAfterDrop(params) {
//console.log(params)
//创建一个实体. 保存连接线
var dir = new Entity("BP.WF.Template.Direction");
dir.FK_Flow = flowNo;
dir.Node = $('#' + params.sourceId).attr('process_id');
dir.ToNode = $('#' + params.targetId).attr('process_id');
dir.MyPK = dir.FK_Flow + "_" + dir.Node + "_" + dir.ToNode;
dir.DirType = 2;
dir.Save();
//defaults.mtAfterDrop({ sourceId: $("#" + params.sourceId).attr('process_id'), targetId: $("#" + params.targetId).attr('process_id') });
}
jsPlumb.makeTarget(jsPlumb.getSelector(".process-step"), {
dropOptions: { hoverClass: "hover", activeClass: "active" },
anchor: "Continuous",
maxConnections: -1,
endpoint: ["Dot", { radius: 1 }],
paintStyle: { fillStyle: "#ec912a", radius: 1 },
hoverPaintStyle: this.connectorHoverStyle,
beforeDrop: function (params) {
if (params.sourceId == params.targetId) return false; /*不能链接自己*/
var j = 0;
$('#leipi_process_info').find('input').each(function (i) {
var str = $('#' + params.sourceId).attr('process_id') + ',' + $('#' + params.targetId).attr('process_id');
if (str == $(this).val()) {
j++;
return;
}
})
if (j > 0) {
defaults.fnRepeat();
return false;
} else {
mtAfterDrop(params);
return true;
}
}
});
//reset start
var _canvas_design = function () {
//连接关联的步骤
$('.process-step').each(function (i) {
var sourceId = $(this).attr('process_id');
//var nodeId = "window"+id;
var prcsto = $(this).attr('process_to');
var toArr = prcsto.split(",");
var processData = defaults.processData;
$.each(toArr, function (j, targetId) {
if (targetId != '' && targetId != 0) {
//检查 source 和 target是否存在
var is_source = false, is_target = false;
$.each(processData.list, function (i, row) {
if (row.id == sourceId) {
is_source = true;
} else if (row.id == targetId) {
is_target = true;
}
if (is_source && is_target)
return true;
});
if (is_source && is_target) {
var desid = sourceId + "_" + targetId;
var linedes = processData.process_des.filter(function (el) { return el.id == desid; })[0].des;
jsPlumb.connect({
source: "window" + sourceId,
target: "window" + targetId,
overlays: [
['Label', {
label: '<label style="font-size:14px;margin-bottom:25px;margin-left:-20px;color:#00a6ac;">' + (linedes == null ? '' : linedes) + '</label>', width: 12, length: 12, location: 0.5, id: "des_" + sourceId + "_" + targetId, events: {
click: function (labelOverlay, originalEvent) {
}
}
}]]
/* ,labelStyle : { cssClass:"component label" }
,label : id +" - "+ n*/
});
return;
}
}
})
});
} //_canvas_design end reset
_canvas_design();
//-----外部调用----------------------
var Flowdesign = {
addProcess: function (row) {
if (row.id <= 0) {
return false;
}
var nodeDiv = document.createElement('div');
var nodeId = "window" + row.id, badge = 'badge-inverse', icon = 'icon-star';
if (row.icon) {
icon = row.icon;
}
$(nodeDiv).attr("id", nodeId)
.attr("style", row.style)
.attr("process_to", row.process_to)
.attr("process_id", row.id)
.addClass("process-step btn btn-small")
.html('<span class="process-flag badge ' + badge + '"><i class="' + icon + ' icon-white"></i></span>&nbsp;<span id="span_' + row.id + '">' + row.process_name + '</span>')
.mousedown(function (e) {
if (e.which == 3) { //右键绑定
_canvas.find('#leipi_active_id').val(row.id);
contextmenu.bindings = defaults.processMenus;
var nodeID = document.getElementById("leipi_active_id");
var node = new Entity("BP.WF.Node", nodeID.value);
$('#pmAttribute span').text("节点属性");
if (node.RunModel == 0) {
$('#pmfun span').text("普通" + nodeID.value);
}
if (node.RunModel == 1) {
$('#pmfun span').text("合流");
}
if (node.RunModel == 2) {
$('#pmfun span').text("分流");
}
if (node.RunModel == 3) {
$('#pmfun span').text("分合流");
}
if (node.RunModel == 4) {
$('#pmfun span').text("子线程");
}
if (node.FWCSta == 0) {
$('#pmWorkCheck span').text("审核组件-禁用");
}
if (node.FWCSta == 1) {
$('#pmWorkCheck span').text("审核组件-启用");
}
if (node.FWCSta == 2) {
$('#pmWorkCheck span').text("审核组件-只读");
}
$(this).contextMenu('processMenu', contextmenu);
}
});
_canvas.append(nodeDiv);
//使之可拖动 和 连线
jsPlumb.draggable(jsPlumb.getSelector(".process-step"));
initEndPoints();
//使可以连接线
jsPlumb.makeTarget(jsPlumb.getSelector(".process-step"), {
dropOptions: { hoverClass: "hover", activeClass: "active" },
anchor: "Continuous",
maxConnections: -1,
endpoint: ["Dot", { radius: 1 }],
paintStyle: { fillStyle: "#ec912a", radius: 1 },
hoverPaintStyle: this.connectorHoverStyle,
beforeDrop: function (params) {
var j = 0;
$('#leipi_process_info').find('input').each(function (i) {
var str = $('#' + params.sourceId).attr('process_id') + ',' + $('#' + params.targetId).attr('process_id');
if (str == $(this).val()) {
j++;
return;
}
})
if (j > 0) {
defaults.fnRepeat();
return false;
} else {
return true;
}
}
});
return true;
},
addLabProcess: function (lab) {
if (lab.id <= 0) {
return false;
}
var labDiv = document.createElement('div');
var labId = "lab" + lab.id, badge = 'badge-inverse';
$(labDiv).attr("id", labId)
.attr("style", lab.style)
.attr("process_id", lab.id)
.addClass("process-lab")
.html('<span class="process-flag badge ' + badge + '"></span>&nbsp;<span id="lab_span_' + lab.id + '">' + lab.process_name + '</span>')
.mousedown(function (e) {
if (e.which == 3) { //右键绑定
_canvas.find('#leipi_active_id').val(lab.id);
contextmenu.bindings = defaults.canvasLabMenu;
$(this).contextMenu('canvasLabMenu', contextmenu);
}
});
_canvas.append(labDiv);
//使之可拖动 和 连线
jsPlumb.draggable(jsPlumb.getSelector(".process-lab"));
initEndPoints();
return true;
},
delProcess: function (activeId) {
if (activeId <= 0) return false;
$("#window" + activeId).remove();
return true;
},
delLabNote: function (activeId) {
if (activeId <= 0) return false;
$("#lab" + activeId).remove();
return true;
},
getActiveId: function () {
return _canvas.find("#leipi_active_id").val();
},
copy: function (active_id) {
if (!active_id)
active_id = _canvas.find("#leipi_active_id").val();
_canvas.find("#leipi_copy_id").val(active_id);
return true;
},
paste: function () {
return _canvas.find("#leipi_copy_id").val();
},
getProcessInfo: function () {
try {
/*连接关系*/
var aProcessData = {};
$("#leipi_process_info input[type=hidden]").each(function (i) {
var processVal = $(this).val().split(",");
if (processVal.length == 2) {
if (!aProcessData[processVal[0]]) {
aProcessData[processVal[0]] = { "top": 0, "left": 0, "process_to": [] };
}
aProcessData[processVal[0]]["process_to"].push(processVal[1]);
}
})
/*位置*/
_canvas.find("div.process-step").each(function (i) { //生成Json字符串发送到服务器解析
if ($(this).attr('id')) {
var pId = $(this).attr('process_id');
var pLeft = parseInt($(this).css('left'));
var pTop = parseInt($(this).css('top'));
if (!aProcessData[pId]) {
aProcessData[pId] = { "top": 0, "left": 0, "process_to": [] };
}
aProcessData[pId]["top"] = pTop;
aProcessData[pId]["left"] = pLeft;
}
})
return JSON.stringify(aProcessData);
} catch (e) {
return '';
}
},
getLabNoteInfo: function () {
try {
var aLabNoteData = {};
/*位置*/
_canvas.find("div.process-lab").each(function (i) { //生成Json字符串发送到服务器解析
if ($(this).attr('id')) {
var pId = $(this).attr('process_id');
var pLeft = parseInt($(this).css('left'));
var pTop = parseInt($(this).css('top'));
if (!aLabNoteData[pId]) {
aLabNoteData[pId] = { "top": 0, "left": 0 };
}
aLabNoteData[pId]["top"] = pTop;
aLabNoteData[pId]["left"] = pLeft;
}
})
return JSON.stringify(aLabNoteData);
} catch (e) {
return '';
}
},
clear: function () {
try {
jsPlumb.detachEveryConnection();
jsPlumb.deleteEveryEndpoint();
$('#leipi_process_info').html('');
jsPlumb.repaintEverything();
return true;
} catch (e) {
return false;
}
}, refresh: function () {
try {
//jsPlumb.reset();
this.clear();
_canvas_design();
return true;
} catch (e) {
return false;
}
}
};
return Flowdesign;
} //$.fn
})(jQuery);