first commit
This commit is contained in:
89
WebRoot/JS/activiti/leave-complete.js
Normal file
89
WebRoot/JS/activiti/leave-complete.js
Normal file
@ -0,0 +1,89 @@
|
||||
|
||||
/**
|
||||
* 完成任务进入子流程
|
||||
* @param {Object} taskId
|
||||
*/
|
||||
/*function completeToSub(dialog,taskId,variables) {
|
||||
// comment为任务备注信息
|
||||
var keys = "", values = "", types = "",comment="";
|
||||
var varobj={
|
||||
keys: keys,
|
||||
values: values,
|
||||
types: types
|
||||
};
|
||||
if (variables) {
|
||||
keys = variables[0].key;
|
||||
values = variables[0].value;
|
||||
types = variables[0].type;
|
||||
varobj={
|
||||
keys: keys,
|
||||
values: values,
|
||||
types: types
|
||||
};
|
||||
comment = variables[0].comment;
|
||||
}
|
||||
alert("noleave");
|
||||
if(!comment){
|
||||
comment="";
|
||||
}
|
||||
// 发送任务完成请求
|
||||
$.post(ext.contextPath + '/activiti/leavew/complete.do' ,{taskId : taskId,comment:comment, varr:JSON.stringify(varobj)}, function(resp) {
|
||||
if (resp == 1) {
|
||||
alert('任务完成');
|
||||
dialog.dialog("destroy");
|
||||
} else {
|
||||
alert('操作失败!');
|
||||
}
|
||||
|
||||
});
|
||||
}*/
|
||||
/**
|
||||
* 完成任务附带对象信息
|
||||
* @param {Object} taskId
|
||||
* @param {Object} variables
|
||||
* @param {Object} serial 对象信息
|
||||
*/
|
||||
function complete(dialog,taskId,variables,serial) {
|
||||
// comment为任务备注信息
|
||||
var keys = "", values = "", types = "",comment="";
|
||||
var varobj={
|
||||
keys: keys,
|
||||
values: values,
|
||||
types: types
|
||||
};
|
||||
if (variables) {
|
||||
$.each(variables, function() {
|
||||
if (keys != "") {
|
||||
keys += ",";
|
||||
values += ",";
|
||||
types += ",";
|
||||
}
|
||||
keys += this.key;
|
||||
values += this.value;
|
||||
types += this.type;
|
||||
});
|
||||
varobj={
|
||||
keys: keys,
|
||||
values: values,
|
||||
types: types
|
||||
};
|
||||
comment = variables[0].comment;
|
||||
}
|
||||
if(!comment){
|
||||
comment="";
|
||||
}else{
|
||||
comment = encodeURI(encodeURI(comment));
|
||||
}
|
||||
// 发送任务完成请求
|
||||
$.post(ext.contextPath + '/activiti/leavew/complete.do?taskId='+taskId+'&comment='+comment+'&varr='+JSON.stringify(varobj) , serial, function(resp) {
|
||||
if (resp == 1) {
|
||||
alert('任务完成');
|
||||
dialog.dialog("destroy");
|
||||
} else {
|
||||
alert('操作失败!');
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
421
WebRoot/JS/activiti/leave-todo.js
Normal file
421
WebRoot/JS/activiti/leave-todo.js
Normal file
@ -0,0 +1,421 @@
|
||||
/**
|
||||
* 请假流程任务办理
|
||||
*/
|
||||
$(function() {
|
||||
|
||||
// 签收
|
||||
$('.claim').button({
|
||||
icons: {
|
||||
primary: 'ui-icon-person'
|
||||
}
|
||||
});
|
||||
|
||||
// 办理
|
||||
$('.handle').button({
|
||||
icons: {
|
||||
primary: 'ui-icon-comment'
|
||||
}
|
||||
}).click(handle);
|
||||
|
||||
// 跟踪
|
||||
$('.trace').click(graphTrace);
|
||||
alert();
|
||||
});
|
||||
|
||||
|
||||
// 用于保存加载的详细信息
|
||||
var detail = {};
|
||||
|
||||
/**
|
||||
* 加载详细信息
|
||||
* @param {Object} id
|
||||
*/
|
||||
function loadDetail(id, withVars, callback) {
|
||||
var dialog = this;
|
||||
$.getJSON(ctx + '/oa/leave/detail/' + id, function(data) {
|
||||
detail = data;
|
||||
$.each(data, function(k, v) {
|
||||
|
||||
// 格式化日期
|
||||
if (k == 'applyTime' || k == 'startTime' || k == 'endTime') {
|
||||
$('.view-info td[name=' + k + ']', dialog).text(new Date(v).format('yyyy-MM-dd hh:mm'));
|
||||
} else {
|
||||
$('.view-info td[name=' + k + ']', dialog).text(v);
|
||||
}
|
||||
|
||||
});
|
||||
if ($.isFunction(callback)) {
|
||||
callback(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载详细信息,同时读取流程任务变量
|
||||
* @param {Object} id
|
||||
*/
|
||||
function loadDetailWithTaskVars(leaveId, taskId, callback) {
|
||||
var dialog = this;
|
||||
$.getJSON(ctx + '/oa/leave/detail-with-vars/' + leaveId + "/" + taskId, function(data) {
|
||||
detail = data;
|
||||
$.each(data, function(k, v) {
|
||||
// 格式化日期
|
||||
if (k == 'applyTime' || k == 'startTime' || k == 'endTime') {
|
||||
$('.view-info td[name=' + k + ']', dialog).text(new Date(v).format('yyyy-MM-dd hh:mm'));
|
||||
} else {
|
||||
$('.view-info td[name=' + k + ']', dialog).text(v);
|
||||
}
|
||||
});
|
||||
if ($.isFunction(callback)) {
|
||||
callback(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 完成任务
|
||||
* @param {Object} taskId
|
||||
*/
|
||||
function complete(taskId, variables) {
|
||||
var dialog = this;
|
||||
|
||||
// 转换JSON为字符串
|
||||
var keys = "", values = "", types = "";
|
||||
if (variables) {
|
||||
$.each(variables, function() {
|
||||
if (keys != "") {
|
||||
keys += ",";
|
||||
values += ",";
|
||||
types += ",";
|
||||
}
|
||||
keys += this.key;
|
||||
values += this.value;
|
||||
types += this.type;
|
||||
});
|
||||
}
|
||||
|
||||
$.blockUI({
|
||||
message: '<h2><img src="' + ctx + '/images/ajax/loading.gif" align="absmiddle"/>正在提交请求……</h2>'
|
||||
});
|
||||
|
||||
// 发送任务完成请求
|
||||
$.post(ctx + '/oa/leave/complete/' + taskId, {
|
||||
keys: keys,
|
||||
values: values,
|
||||
types: types
|
||||
}, function(resp) {
|
||||
$.unblockUI();
|
||||
if (resp == 'success') {
|
||||
alert('任务完成');
|
||||
location.reload();
|
||||
} else {
|
||||
alert('操作失败!');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 使用json方式定义每个节点的按钮
|
||||
* 以及按钮的功能
|
||||
*
|
||||
* open:打开对话框的时候需要处理的任务
|
||||
* btns:对话框显示的按钮
|
||||
*/
|
||||
var handleOpts = {
|
||||
deptLeaderAudit: {
|
||||
width: 300,
|
||||
height: 300,
|
||||
open: function(id) {
|
||||
|
||||
// 打开对话框的时候读取请假内容
|
||||
loadDetail.call(this, id);
|
||||
},
|
||||
btns: [{
|
||||
text: '同意',
|
||||
click: function() {
|
||||
var taskId = $(this).data('taskId');
|
||||
|
||||
// 设置流程变量
|
||||
complete(taskId, [{
|
||||
key: 'deptLeaderPass',
|
||||
value: true,
|
||||
type: 'B'
|
||||
}]);
|
||||
}
|
||||
}, {
|
||||
text: '驳回',
|
||||
click: function() {
|
||||
var taskId = $(this).data('taskId');
|
||||
|
||||
$('<div/>', {
|
||||
title: '填写驳回理由',
|
||||
html: "<textarea id='leaderBackReason' style='width: 250px; height: 60px;'></textarea>"
|
||||
}).dialog({
|
||||
modal: true,
|
||||
open: function() {
|
||||
|
||||
},
|
||||
buttons: [{
|
||||
text: '驳回',
|
||||
click: function() {
|
||||
var leaderBackReason = $('#leaderBackReason').val();
|
||||
if (leaderBackReason == '') {
|
||||
alert('请输入驳回理由!');
|
||||
return;
|
||||
}
|
||||
|
||||
// 设置流程变量
|
||||
complete(taskId, [{
|
||||
key: 'deptLeaderPass',
|
||||
value: false,
|
||||
type: 'B'
|
||||
}, {
|
||||
key: 'leaderBackReason',
|
||||
value: leaderBackReason,
|
||||
type: 'S'
|
||||
}]);
|
||||
}
|
||||
}, {
|
||||
text: '取消',
|
||||
click: function() {
|
||||
$(this).dialog('close');
|
||||
$('#deptLeaderAudit').dialog('close');
|
||||
}
|
||||
}]
|
||||
});
|
||||
}
|
||||
}, {
|
||||
text: '取消',
|
||||
click: function() {
|
||||
$(this).dialog('close');
|
||||
}
|
||||
}]
|
||||
},
|
||||
hrAudit: {
|
||||
width: 300,
|
||||
height: 300,
|
||||
open: function(id) {
|
||||
// 打开对话框的时候读取请假内容
|
||||
loadDetail.call(this, id);
|
||||
},
|
||||
btns: [{
|
||||
text: '同意',
|
||||
click: function() {
|
||||
var taskId = $(this).data('taskId');
|
||||
|
||||
// 设置流程变量
|
||||
complete(taskId, [{
|
||||
key: 'hrPass',
|
||||
value: true,
|
||||
type: 'B'
|
||||
}]);
|
||||
}
|
||||
}, {
|
||||
text: '驳回',
|
||||
click: function() {
|
||||
var taskId = $(this).data('taskId');
|
||||
|
||||
$('<div/>', {
|
||||
title: '填写驳回理由',
|
||||
html: "<textarea id='hrBackReason' style='width: 250px; height: 60px;'></textarea>"
|
||||
}).dialog({
|
||||
modal: true,
|
||||
buttons: [{
|
||||
text: '驳回',
|
||||
click: function() {
|
||||
var hrBackReason = $('#hrBackReason').val();
|
||||
if (hrBackReason == '') {
|
||||
alert('请输入驳回理由!');
|
||||
return;
|
||||
}
|
||||
|
||||
// 设置流程变量
|
||||
complete(taskId, [{
|
||||
key: 'hrPass',
|
||||
value: false,
|
||||
type: 'B'
|
||||
}, {
|
||||
key: 'hrBackReason',
|
||||
value: hrBackReason,
|
||||
type: 'S'
|
||||
}]);
|
||||
}
|
||||
}, {
|
||||
text: '取消',
|
||||
click: function() {
|
||||
$(this).dialog('close');
|
||||
$('#deptLeaderAudit').dialog('close');
|
||||
}
|
||||
}]
|
||||
});
|
||||
}
|
||||
}, {
|
||||
text: '取消',
|
||||
click: function() {
|
||||
$(this).dialog('close');
|
||||
}
|
||||
}]
|
||||
},
|
||||
modifyApply: {
|
||||
width: 500,
|
||||
height: 470,
|
||||
open: function(id, taskId) {
|
||||
var dialog = this;
|
||||
|
||||
$('#startTime,#endTime', this).datetimepicker({
|
||||
stepMinute: 5
|
||||
});
|
||||
|
||||
// 打开对话框的时候读取请假内容
|
||||
loadDetailWithTaskVars.call(this, id, taskId, function(data) {
|
||||
// 显示驳回理由
|
||||
$('.info').show().html("<b>领导:</b>" + (data.variables.leaderBackReason || "") + "<br/><b>HR:</b>" + (data.variables.hrBackReason || ""));
|
||||
|
||||
// 读取原请假信息
|
||||
$('#modifyApplyContent #leaveType option[value=' + data.leaveType + ']').attr('selected', true);
|
||||
$('#modifyApplyContent #startTime').val(new Date(data.startTime).format('yyyy-MM-dd hh:mm'));
|
||||
$('#modifyApplyContent #endTime').val(new Date(data.endTime).format('yyyy-MM-dd hh:mm'));
|
||||
$('#modifyApplyContent #reason').val(data.reason);
|
||||
});
|
||||
|
||||
// 切换状态
|
||||
$("#radio").buttonset().change(function(){
|
||||
var type = $(':radio[name=reApply]:checked').val();
|
||||
if (type == 'true') {
|
||||
$('#modifyApplyContent').show();
|
||||
} else {
|
||||
$('#modifyApplyContent').hide();
|
||||
}
|
||||
});
|
||||
},
|
||||
btns: [{
|
||||
text: '提交',
|
||||
click: function() {
|
||||
var taskId = $(this).data('taskId');
|
||||
var reApply = $(':radio[name=reApply]:checked').val();
|
||||
|
||||
// 提交的时候把变量
|
||||
complete(taskId, [{
|
||||
key: 'reApply',
|
||||
value: reApply,
|
||||
type: 'B'
|
||||
}, {
|
||||
key: 'leaveType',
|
||||
value: $('#modifyApplyContent #leaveType').val(),
|
||||
type: 'S'
|
||||
}, {
|
||||
key: 'startTime',
|
||||
value: $('#modifyApplyContent #startTime').val(),
|
||||
type: 'D'
|
||||
}, {
|
||||
key: 'endTime',
|
||||
value: $('#modifyApplyContent #endTime').val(),
|
||||
type: 'D'
|
||||
}, {
|
||||
key: 'reason',
|
||||
value: $('#modifyApplyContent #reason').val(),
|
||||
type: 'S'
|
||||
}]);
|
||||
}
|
||||
},{
|
||||
text: '取消',
|
||||
click: function() {
|
||||
$(this).dialog('close');
|
||||
}
|
||||
}]
|
||||
},
|
||||
reportBack: {
|
||||
width: 400,
|
||||
height: 400,
|
||||
open: function(id, taskId) {
|
||||
// 打开对话框的时候读取请假内容
|
||||
loadDetail.call(this, id, taskId);
|
||||
$('#realityStartTime,#realityEndTime').datetimepicker({
|
||||
stepMinute: 5
|
||||
});
|
||||
},
|
||||
btns: [{
|
||||
text: '提交',
|
||||
click: function() {
|
||||
var realityStartTime = $('#realityStartTime').val();
|
||||
var realityEndTime = $('#realityEndTime').val();
|
||||
|
||||
if (realityStartTime == '') {
|
||||
alert('请选择实际开始时间!');
|
||||
return;
|
||||
}
|
||||
|
||||
if (realityEndTime == '') {
|
||||
alert('请选择实际结束时间!');
|
||||
return;
|
||||
}
|
||||
|
||||
var taskId = $(this).data('taskId');
|
||||
complete(taskId, [{
|
||||
key: 'realityStartTime',
|
||||
value: realityStartTime,
|
||||
type: 'D'
|
||||
}, {
|
||||
key: 'realityEndTime',
|
||||
value: realityEndTime,
|
||||
type: 'D'
|
||||
}]);
|
||||
}
|
||||
},{
|
||||
text: '取消',
|
||||
click: function() {
|
||||
$(this).dialog('close');
|
||||
}
|
||||
}]
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 办理流程
|
||||
*/
|
||||
function handle() {
|
||||
// 当前节点的英文名称
|
||||
var tkey = $(this).attr('tkey');
|
||||
|
||||
// 当前节点的中文名称
|
||||
var tname = $(this).attr('tname');
|
||||
|
||||
// 请假记录ID
|
||||
var rowId = $(this).parents('tr').attr('id');
|
||||
|
||||
// 任务ID
|
||||
var taskId = $(this).parents('tr').attr('tid');
|
||||
|
||||
// 使用对应的模板
|
||||
$('#' + tkey).data({
|
||||
taskId: taskId
|
||||
}).dialog({
|
||||
title: '流程办理[' + tname + ']',
|
||||
modal: true,
|
||||
width: handleOpts[tkey].width,
|
||||
height: handleOpts[tkey].height,
|
||||
open: function() {
|
||||
handleOpts[tkey].open.call(this, rowId, taskId);
|
||||
},
|
||||
buttons: handleOpts[tkey].btns
|
||||
});
|
||||
}
|
||||
|
||||
Date.prototype.format = function(format) {
|
||||
var o = {
|
||||
"M+": this.getMonth() + 1, //month
|
||||
"d+": this.getDate(), //day
|
||||
"h+": this.getHours(), //hour
|
||||
"m+": this.getMinutes(), //minute
|
||||
"s+": this.getSeconds(), //second
|
||||
"q+": Math.floor((this.getMonth() + 3) / 3), //quarter
|
||||
"S": this.getMilliseconds() //millisecond
|
||||
}
|
||||
if (/(y+)/.test(format))
|
||||
format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
||||
for (var k in o)
|
||||
if (new RegExp("(" + k + ")").test(format))
|
||||
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
|
||||
return format;
|
||||
}
|
||||
454
WebRoot/JS/activiti/workflow.js
Normal file
454
WebRoot/JS/activiti/workflow.js
Normal file
@ -0,0 +1,454 @@
|
||||
/*options流程附加信息显示标示
|
||||
pid_流程实例id
|
||||
pdid_流程定义id*/
|
||||
function graphTrace(pid_,pdid_,taskid_) {
|
||||
//alert(pdid_);
|
||||
var _defaults = {
|
||||
srcEle: this,
|
||||
pid: pid_,//$(this).attr('pid'),
|
||||
pdid: pdid_,// $(this).attr('pdid')
|
||||
taskid: taskid_// $(this).attr('pdid')
|
||||
};
|
||||
var opts = $.extend(true, _defaults);
|
||||
// 获取图片资源,如果流程实例id不为空,根据实例id调用资源显示;若为空则调用流程定义资源显示
|
||||
if(opts.pid!=""){
|
||||
var imageUrl = ext.contextPath + "/activiti/workflow/resource/process-instance.do?pid=" + opts.pid + "&type=image";
|
||||
$.post(ext.contextPath + '/activiti/workflow/processDefinition/trace.do?pdid=' + opts.pdid, function(result) {
|
||||
// 生成图片
|
||||
$.getJSON(ext.contextPath + '/activiti/workflow/process/trace.do?pid=' + opts.pid+'&taskId='+opts.taskid, function(infos) {
|
||||
var positionHtml = "";
|
||||
var toppx=60;
|
||||
var leftpx=8;
|
||||
//console.info("trace返回结果",infos)
|
||||
// 生成图片
|
||||
var varsArray = new Array();
|
||||
$.each(infos, function(i, v) {
|
||||
//console.info("第"+i+"个节点",v)
|
||||
var $positionDiv = $('<div/>', {
|
||||
'class': 'activity-attr'
|
||||
}).css({
|
||||
position: 'absolute',
|
||||
left: (v.x + leftpx-1),
|
||||
top: (v.y + toppx-1),
|
||||
width: (v.width - 2),
|
||||
height: (v.height - 2),
|
||||
backgroundColor: 'black',
|
||||
opacity: 0
|
||||
});
|
||||
// alert("节点边框");
|
||||
// 节点边框
|
||||
var $border = $('<div/>', {
|
||||
'class': 'activity-attr-border'
|
||||
}).css({
|
||||
position: 'absolute',
|
||||
left: (v.x+leftpx),
|
||||
top: (v.y+toppx),
|
||||
width: (v.width ),
|
||||
height: (v.height ),
|
||||
});
|
||||
|
||||
if (v.currentActiviti) {
|
||||
console.log("当前节点",v)
|
||||
$border.addClass('ui-corner-all-12').css({
|
||||
border: '3px solid red'
|
||||
});
|
||||
|
||||
}
|
||||
// alert($positionDiv.prop('outerHTML'));
|
||||
positionHtml += $positionDiv.prop('outerHTML') + $border.prop('outerHTML');
|
||||
|
||||
varsArray[varsArray.length] = v.vars;
|
||||
|
||||
});
|
||||
$('#traceDiv').html(result);
|
||||
if ($('#workflowTraceDialog').length == 0) {
|
||||
$('<div/>', {
|
||||
id: 'workflowTraceDialog',
|
||||
title: '查看流程',
|
||||
html: "<div style='position:relative'><img style='margin:" + toppx + "px 0 0 "+ leftpx + "px' src='" + imageUrl + "' />" +
|
||||
"<div id='processImageBorder' style='position:absolute; left:0px; top:0px;'>" +
|
||||
positionHtml +
|
||||
"</div>" +
|
||||
"</div>"
|
||||
}).appendTo('#trace_body');
|
||||
} else {
|
||||
$('#workflowTraceDialog img').attr('src', imageUrl);
|
||||
$('#workflowTraceDialog #processImageBorder').html(positionHtml);
|
||||
}
|
||||
// 设置每个节点的data
|
||||
$('#workflowTraceDialog .activity-attr').each(function(i, v) {
|
||||
$(this).data('vars', varsArray[i]);
|
||||
});
|
||||
// 打开对话框
|
||||
openModal('traceModal');
|
||||
});
|
||||
|
||||
/* $('#workflowTraceDialog').dialog({
|
||||
modal: true,
|
||||
resizable: true,
|
||||
dragable: false,
|
||||
open: function() {
|
||||
$('#workflowTraceDialog').dialog('option', 'title', '查看流程()<button id="changeImg">如果坐标错乱请点击这里</button><button id="diagram-viewer">Diagram-Viewer</button>');
|
||||
$('#workflowTraceDialog').css('padding', '0.2em');
|
||||
$('#workflowTraceDialog .ui-accordion-content').css('padding', '0.2em').height($('#workflowTraceDialog').height() - 75);
|
||||
|
||||
// 此处用于显示每个节点的信息,如果不需要可以删除
|
||||
$('.activity-attr').qtip({
|
||||
content: function() {
|
||||
var vars = $(this).data('vars');
|
||||
var tipContent = "<table class='need-border'>";
|
||||
$.each(vars, function(varKey, varValue) {
|
||||
if (varValue) {
|
||||
tipContent += "<tr><td class='label'>" + varKey + "</td><td>" + varValue + "<td/></tr>";
|
||||
}
|
||||
});
|
||||
tipContent += "</table>";
|
||||
return tipContent;
|
||||
},
|
||||
position: {
|
||||
at: 'bottom left',
|
||||
adjust: {
|
||||
x: 3
|
||||
}
|
||||
}
|
||||
});
|
||||
// end qtip
|
||||
},
|
||||
close: function() {
|
||||
$('#workflowTraceDialog').remove();
|
||||
},
|
||||
width: document.documentElement.clientWidth * 0.95,
|
||||
height: document.documentElement.clientHeight * 0.95
|
||||
});*/
|
||||
|
||||
});
|
||||
}else{
|
||||
//调用流程定义资源显示
|
||||
var imageUrl = ext.contextPath + "/activiti/workflow/resource/read.do?processDefinitionId=" + opts.pdid + "&resourceType=image";
|
||||
var positionHtml = "";
|
||||
var toppx=60;
|
||||
var leftpx=8;
|
||||
$.post(ext.contextPath + '/activiti/workflow/processDefinition/trace.do?pdid=' + opts.pdid, function(result) {
|
||||
// 生成图片
|
||||
$('#traceDiv').html(result);
|
||||
if ($('#workflowTraceDialog').length == 0) {
|
||||
$('<div/>', {
|
||||
id: 'workflowTraceDialog',
|
||||
title: '查看流程',
|
||||
html: "<div><img style='overflow:scroll;margin:" + toppx + "px 0 0 "+ leftpx + "px' src='" + imageUrl + "'/>" +
|
||||
"</div>"
|
||||
}).appendTo('#trace_body');
|
||||
} else {
|
||||
$('#workflowTraceDialog img').attr('src', imageUrl);
|
||||
}
|
||||
openModal('traceModal');
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* @fn(routeNum) 回调函数,routeNum为选择的路径编号
|
||||
* @taskId 当前任务实例id
|
||||
* @passFlag true表示通过,false表示不通过
|
||||
*/
|
||||
var processExecute=function(fn,taskId,passFlag){
|
||||
$.post(ext.contextPath + "/activiti/workflow/getRoutesForSelect.do", {taskId:taskId,passFlag:passFlag}, function(data) {
|
||||
var actRouteNum=0;//除退回后的有效路径数
|
||||
$.each(data,function(index,item){
|
||||
//routeNum为0表示退回
|
||||
if(item.routeNum>0){
|
||||
actRouteNum++;
|
||||
}
|
||||
});
|
||||
if( actRouteNum>1){
|
||||
console.info(actRouteNum)
|
||||
var buttons={
|
||||
cancel: {
|
||||
text: "取消",
|
||||
value: null,
|
||||
visible: true,
|
||||
className: "btn btn-default btn-sm",
|
||||
closeModal: true,
|
||||
}
|
||||
};
|
||||
var text ="";
|
||||
var btn_style="";
|
||||
if(passFlag){
|
||||
text="系统检测到当前任务存在多个分支走向,请选择您要提交至下一步节点";
|
||||
btn_style="btn-info";
|
||||
}else{
|
||||
text="系统检测到当前任务存在多个驳回分支,请选择您要驳回至下一步节点";
|
||||
btn_style="btn-danger";
|
||||
}
|
||||
$.each(data,function(index,item){
|
||||
//routeNum为0表示退回
|
||||
if(item.routeNum>0){
|
||||
buttons["item"+index]={};
|
||||
buttons["item"+index].text=item.name;
|
||||
buttons["item"+index].value=item.routeNum;
|
||||
buttons["item"+index].className="btn "+btn_style+" btn-sm";
|
||||
buttons["item"+index].closeModal=true;
|
||||
}
|
||||
});
|
||||
console.info(buttons)
|
||||
|
||||
swal({
|
||||
text: text,
|
||||
buttons: buttons
|
||||
})
|
||||
.then(function(value) {
|
||||
fn(value);
|
||||
});
|
||||
}else{
|
||||
fn(-1);
|
||||
}
|
||||
|
||||
|
||||
},'json');
|
||||
|
||||
}
|
||||
/**
|
||||
* 审核界面--流程选择节点,
|
||||
*/
|
||||
var processSelectNode = function(taskId){
|
||||
//初始化路线选择
|
||||
let routeNumSelect2 = $("#routeNum").select2({
|
||||
placeholder:'请选择',//默认文字提示
|
||||
language: "zh-CN",
|
||||
minimumResultsForSearch: -1,//禁用搜索框
|
||||
});
|
||||
|
||||
//驳回意见初始化隐藏
|
||||
// $("#reject").hide();
|
||||
//初始化审核意见,通过(true)或驳回(false)
|
||||
var selectResult = $("#passstatus").select2({
|
||||
placeholder:'请选择',//默认文字提示
|
||||
minimumResultsForSearch: -1,//禁用搜索框
|
||||
});
|
||||
selectResult.on('change',function(){
|
||||
var passFlag= $(this).val();
|
||||
|
||||
//驳回时显示驳回原因,通过时隐藏
|
||||
// if(passFlag == 'false'){
|
||||
// $("#reject").show();
|
||||
// }else{
|
||||
// $("#reject").hide();
|
||||
// }
|
||||
|
||||
//选择下一节点,先选择审核结果,再选择节点
|
||||
$.post(ext.contextPath + "/activiti/workflow/getRoutesForSelect2.do", {taskId:taskId,passFlag:passFlag}, function(data) {
|
||||
$("#routeNum").empty();
|
||||
var selelct = $("#routeNum").select2({
|
||||
data: data,
|
||||
placeholder:'请先选择审核结果',//默认文字提示
|
||||
allowClear: false,//允许清空
|
||||
escapeMarkup: function (markup) { return markup; }, // 自定义格式化防止xss注入
|
||||
language: "zh-CN",
|
||||
minimumInputLength: 0,
|
||||
minimumResultsForSearch: -1,//禁用搜索框
|
||||
formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果
|
||||
formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择
|
||||
});
|
||||
selelct.val(data[0].id).trigger("change");
|
||||
//流程结束,不用选择人员
|
||||
if(data[0].text == "结束流程"){
|
||||
$("#selectUsers").hide();
|
||||
}
|
||||
selelct.on('change',function(){
|
||||
var routeName = $("#routeNum").find("option:selected").text();
|
||||
if(routeName == "结束流程"){
|
||||
$("#selectUsers").hide();
|
||||
}else{
|
||||
$("#selectUsers").show();
|
||||
}
|
||||
})
|
||||
},'json');
|
||||
})
|
||||
selectResult.val('').trigger("change");
|
||||
|
||||
//初始化审批人
|
||||
var selectResultUser = $("#routeNum").select2({
|
||||
placeholder:'请选择',//默认文字提示
|
||||
minimumResultsForSearch: -1,//禁用搜索框
|
||||
});
|
||||
selectResultUser.on('change',function(){
|
||||
|
||||
var data1 = $("#routeNum").select2("data");
|
||||
var targetusers="";
|
||||
var targetUsersName="";
|
||||
var resourceId= data1[0].resourceId;
|
||||
var modelKEY = data1[0].modelKEY;
|
||||
//选择下一节点,先选择审核结果,再选择节点,得到下一节点审批人
|
||||
$.post(ext.contextPath + "/activiti/workflow/getTargetUsers4Node.do", {resourceId:resourceId,modelKEY:modelKEY}, function(data) {
|
||||
$("#targetusers").empty();
|
||||
$("#targetUsersName").empty();
|
||||
if(data !=null && data.length>0){
|
||||
for(var i=0;i<data.length;i++){
|
||||
targetusers =targetusers+data[i].id+",";
|
||||
targetUsersName =targetUsersName+data[i].caption+",";
|
||||
}
|
||||
if(targetusers.length>0){
|
||||
targetusers = targetusers.substring(0, targetusers.length-1);
|
||||
}
|
||||
if(targetUsersName.length>0){
|
||||
targetUsersName = targetUsersName.substring(0, targetUsersName.length-1);
|
||||
}
|
||||
//填写默认审批人
|
||||
//$("#targetusers").val(targetusers);
|
||||
//$("#targetUsersName").val(targetUsersName);
|
||||
}
|
||||
},'json');
|
||||
|
||||
//得到下一节点审批职位
|
||||
var targetjobs="";
|
||||
$.post(ext.contextPath + "/activiti/workflow/getTargetJobs4Node.do", {resourceId:resourceId,modelKEY:modelKEY}, function(data) {
|
||||
$("#targetjobs").empty();
|
||||
if(data !=null && data.length>0){
|
||||
for(var i=0;i<data.length;i++){
|
||||
var joblist = data[i].jobId;
|
||||
targetjobs +=data[i].jobId+",";
|
||||
}
|
||||
if(targetjobs.length>0){
|
||||
targetjobs = targetjobs.substring(0, targetjobs.length-1);
|
||||
}
|
||||
//console.info("targetjobs:"+targetjobs);
|
||||
//填写默认审批人
|
||||
//$("#targetusers").val(targetusers);
|
||||
//$("#targetUsersName").val(targetUsersName);
|
||||
|
||||
}
|
||||
$("#targetjobs").val(targetjobs);
|
||||
},'json');
|
||||
})
|
||||
selectResult.val('').trigger("change");
|
||||
}
|
||||
/**
|
||||
* 处理界面--流程选择节点,
|
||||
*/
|
||||
var processSelectNodeForHandle = function(taskId){
|
||||
//驳回意见初始化隐藏
|
||||
// $("#reject").hide();
|
||||
//初始化审核意见,通过(true)或驳回(false)
|
||||
var selectResult = $("#passstatus").select2({
|
||||
placeholder:'请选择',//默认文字提示
|
||||
minimumResultsForSearch: -1,//禁用搜索框
|
||||
});
|
||||
selectResult.on('change',function(){
|
||||
var passFlag= $(this).val();
|
||||
|
||||
//驳回时显示驳回原因,通过时隐藏
|
||||
// if(passFlag == 'false'){
|
||||
// $("#reject").show();
|
||||
// }else{
|
||||
// $("#reject").hide();
|
||||
// }
|
||||
|
||||
//选择下一节点,先选择审核结果,再选择节点
|
||||
$.post(ext.contextPath + "/activiti/workflow/getRoutesForSelect2.do", {taskId:taskId,passFlag:passFlag}, function(data) {
|
||||
$("#routeNum").empty();
|
||||
var selelct = $("#routeNum").select2({
|
||||
data: data,
|
||||
placeholder:'请先选择审核结果',//默认文字提示
|
||||
allowClear: false,//允许清空
|
||||
escapeMarkup: function (markup) { return markup; }, // 自定义格式化防止xss注入
|
||||
language: "zh-CN",
|
||||
minimumInputLength: 0,
|
||||
minimumResultsForSearch: -1,//禁用搜索框
|
||||
formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果
|
||||
formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择
|
||||
});
|
||||
selelct.val(data[0].id).trigger("change");
|
||||
//流程结束,不用选择人员
|
||||
if(data[0].text == "结束流程"){
|
||||
$("#selectUsers").hide();
|
||||
}
|
||||
selelct.on('change',function(){
|
||||
var routeName = $("#routeNum").find("option:selected").text();
|
||||
if(routeName == "结束流程"){
|
||||
$("#selectUsers").hide();
|
||||
}else{
|
||||
$("#selectUsers").show();
|
||||
}
|
||||
})
|
||||
},'json');
|
||||
})
|
||||
selectResult.val('').trigger("change");
|
||||
$.post(ext.contextPath + "/activiti/workflow/getRoutesForSelect2.do", {taskId:taskId,passFlag:true}, function(data) {
|
||||
var selelct = $("#routeNum").select2({
|
||||
data: data,
|
||||
placeholder:'请先选择审核结果',//默认文字提示
|
||||
allowClear: false,//允许清空
|
||||
escapeMarkup: function (markup) { return markup; }, // 自定义格式化防止xss注入
|
||||
language: "zh-CN",
|
||||
minimumInputLength: 0,
|
||||
minimumResultsForSearch: -1,//禁用搜索框
|
||||
formatResult: function formatRepo(repo){return repo.text;}, // 函数用来渲染结果
|
||||
formatSelection: function formatRepoSelection(repo){return repo.text;} // 函数用于呈现当前的选择
|
||||
});
|
||||
selelct.val(data[0].id).trigger("change");
|
||||
//流程结束,不用选择人员
|
||||
if(data[0].text == "结束流程"){
|
||||
$("#selectUsers").hide();
|
||||
}
|
||||
selelct.on('change',function(){
|
||||
var routeName = $("#routeNum").find("option:selected").text();
|
||||
if(routeName == "结束流程"){
|
||||
$("#selectUsers").hide();
|
||||
}else{
|
||||
$("#selectUsers").show();
|
||||
}
|
||||
})
|
||||
},'json');
|
||||
//初始化审批人
|
||||
var selectResultUser = $("#routeNum").select2({
|
||||
placeholder:'请选择',//默认文字提示
|
||||
minimumResultsForSearch: -1,//禁用搜索框
|
||||
});
|
||||
selectResultUser.on('change',function(){
|
||||
|
||||
var data1 = $("#routeNum").select2("data");
|
||||
var targetusers="";
|
||||
var targetUsersName="";
|
||||
var resourceId= data1[0].resourceId;
|
||||
var modelKEY = data1[0].modelKEY;
|
||||
//选择下一节点,先选择审核结果,再选择节点,得到下一节点审批人
|
||||
$.post(ext.contextPath + "/activiti/workflow/getTargetUsers4Node.do", {resourceId:resourceId,modelKEY:modelKEY}, function(data) {
|
||||
$("#targetusers").empty();
|
||||
$("#targetUsersName").empty();
|
||||
if(data !=null && data.length>0){
|
||||
for(var i=0;i<data.length;i++){
|
||||
targetusers =targetusers+data[i].id+",";
|
||||
targetUsersName =targetUsersName+data[i].caption+",";
|
||||
}
|
||||
if(targetusers.length>0){
|
||||
targetusers = targetusers.substring(0, targetusers.length-1);
|
||||
}
|
||||
if(targetUsersName.length>0){
|
||||
targetUsersName = targetUsersName.substring(0, targetUsersName.length-1);
|
||||
}
|
||||
//填写默认审批人
|
||||
//$("#targetusers").val(targetusers);
|
||||
//$("#targetUsersName").val(targetUsersName);
|
||||
}
|
||||
},'json');
|
||||
|
||||
//得到下一节点审批职位
|
||||
var targetjobs="";
|
||||
$.post(ext.contextPath + "/activiti/workflow/getTargetJobs4Node.do", {resourceId:resourceId,modelKEY:modelKEY}, function(data) {
|
||||
$("#targetjobs").empty();
|
||||
if(data !=null && data.length>0){
|
||||
for(var i=0;i<data.length;i++){
|
||||
var joblist = data[i].jobId;
|
||||
targetjobs +=data[i].jobId+",";
|
||||
}
|
||||
if(targetjobs.length>0){
|
||||
targetjobs = targetjobs.substring(0, targetjobs.length-1);
|
||||
}
|
||||
//填写默认审批人
|
||||
//$("#targetusers").val(targetusers);
|
||||
//$("#targetUsersName").val(targetUsersName);
|
||||
}
|
||||
$("#targetjobs").val(targetjobs);
|
||||
},'json');
|
||||
})
|
||||
}
|
||||
132
WebRoot/JS/activiti/workflow_xml.js
Normal file
132
WebRoot/JS/activiti/workflow_xml.js
Normal file
@ -0,0 +1,132 @@
|
||||
/*options流程附加信息显示标示.线边库存为xbk,品质扣料为kl
|
||||
pid_流程实例id
|
||||
pdid_流程定义id*/
|
||||
function graphTrace(options,pdid_) {
|
||||
//alert(pdid_);
|
||||
var _defaults = {
|
||||
srcEle: this,
|
||||
pdid: pdid_,// $(this).attr('pdid')
|
||||
detail: options// $(this).attr('pdid')
|
||||
};
|
||||
var opts = $.extend(true, _defaults);
|
||||
// 获取图片资源,如果流程实例id不为空,根据实例id调用资源显示;若为空则调用流程定义资源显示
|
||||
//console.info(opts)
|
||||
if(opts.detail!=""){
|
||||
//调用流程定义资源显示
|
||||
var imageUrl = ext.contextPath + "/activiti/workflow/resource/read.do?processDefinitionId=" + opts.pdid + "&resourceType=image";
|
||||
var positionHtml = "";
|
||||
var toppx=60;
|
||||
var leftpx=8;
|
||||
var key =opts.detail;
|
||||
$.getJSON(ext.contextPath + '/work/scadaPic/traceProcessDefinitionWithPInfo.do?pdid=' + opts.pdid+"&key="+key, function(infos) {
|
||||
//console.info("infos:",infos)
|
||||
// 生成图片
|
||||
var varsArray = new Array();
|
||||
$.each(infos, function(i, v) {
|
||||
var $positionDiv = $('<div/>', {
|
||||
'class': 'activity-attr'
|
||||
}).css({
|
||||
position: 'absolute',
|
||||
left: (v.x +leftpx),
|
||||
top: (v.y +toppx),
|
||||
width: (v.width ),
|
||||
height: (v.height),
|
||||
opacity: 1,
|
||||
textAlign:"center"
|
||||
});
|
||||
// 节点边框
|
||||
var $border = $('<div/>', {
|
||||
'class': 'activity-attr-border'
|
||||
}).css({
|
||||
position: 'absolute',
|
||||
left: (v.x + leftpx ),
|
||||
top: (v.y +toppx),
|
||||
width: (v.width ),
|
||||
height: (v.height )
|
||||
});
|
||||
|
||||
if (v.taskActiviti) {
|
||||
$border.addClass('ui-corner-all-12').css({
|
||||
border: '3px solid red'
|
||||
});
|
||||
}
|
||||
//$positionDiv.textbox("setValue","sssss");
|
||||
positionHtml += $positionDiv.prop("outerHTML") + $border.prop("outerHTML");
|
||||
varsArray[varsArray.length] = v.vars;
|
||||
});
|
||||
if ($('#workflowTraceDialog').length == 0) {
|
||||
$('<div/>', {
|
||||
id: 'workflowTraceDialog',
|
||||
title: '查看流程',
|
||||
html: "<div ><img style='margin:" + toppx + "px 0 0 "+ leftpx + "px' src='" + imageUrl + "' />" +
|
||||
"<div id='processImageBorder'>" +
|
||||
positionHtml +
|
||||
"</div>" +
|
||||
"</div>"
|
||||
}).appendTo('body');
|
||||
$(document.body).addClass("easyui-layout");
|
||||
} else {
|
||||
$('#workflowTraceDialog img').attr('src', imageUrl);
|
||||
}
|
||||
// 设置每个节点的data
|
||||
$('#workflowTraceDialog .activity-attr').each(function(i, v) {
|
||||
//console.info("setVars")
|
||||
$(this).data('vars', varsArray[i]);
|
||||
});
|
||||
//console.info("activity-attr-info:",$('#workflowTraceDialog .activity-attr'))
|
||||
//console.info(varsArray)
|
||||
// $('#workflowTraceDialog').dialog('option', 'title', '查看流程<button id="changeImg">如果坐标错乱请点击这里</button><button id="diagram-viewer">Diagram-Viewer</button>');
|
||||
// $('#workflowTraceDialog').css('padding', '0.2em');
|
||||
// $('#workflowTraceDialog .ui-accordion-content').css('padding', '0.2em').height($('#workflowTraceDialog').height() - 75);
|
||||
console.info("open")
|
||||
// 此处用于显示每个节点的信息,如果不需要可以删除
|
||||
//console.info($('.activity-attr'));
|
||||
$('.activity-attr').each(function(i,v){
|
||||
var vars = $(this).data('vars');
|
||||
//console.info("每个节点信息"+vars)
|
||||
var content="";
|
||||
$.each(vars, function(varKey, varValue) {
|
||||
if (varKey==key) {
|
||||
content += '<span style="color:#117cb0">'+varValue+'</span>';;
|
||||
}
|
||||
|
||||
});
|
||||
$(this).append(content);
|
||||
});
|
||||
});
|
||||
}else{
|
||||
//调用流程定义资源显示
|
||||
var imageUrl = ext.contextPath + "/activiti/workflow/resource/read.do?processDefinitionId=" + opts.pdid + "&resourceType=image";
|
||||
var positionHtml = "";
|
||||
var toppx=60;
|
||||
var leftpx=8;
|
||||
$.getJSON(ext.contextPath + '/activiti/workflow/processDefinition/trace.do?pdid=' + opts.pdid, function(infos) {
|
||||
// 生成图片
|
||||
if ($('#workflowTraceDialog').length == 0) {
|
||||
$('<div/>', {
|
||||
id: 'workflowTraceDialog',
|
||||
title: '查看流程',
|
||||
html: "<div><img style='overflow:scroll;margin:" + toppx + "px 0 0 "+ leftpx + "px' src='" + imageUrl + "' />" +
|
||||
"</div>"
|
||||
}).appendTo('body');
|
||||
$(document.body).addClass("easyui-layout");
|
||||
} else {
|
||||
$('#workflowTraceDialog img').attr('src', imageUrl);
|
||||
}
|
||||
// 打开对话框
|
||||
/* $('#workflowTraceDialog').dialog({
|
||||
modal: true,
|
||||
resizable: true,
|
||||
dragable: false,
|
||||
onOpen: function() {
|
||||
},
|
||||
onClose: function() {
|
||||
$('#workflowTraceDialog').remove();
|
||||
},
|
||||
width: document.documentElement.clientWidth * 0.95,
|
||||
height: document.documentElement.clientHeight * 0.95
|
||||
});*/
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user