bkjxxxw/WebContent/act/rest/js/module/oa/leave/leave-todo.js

421 lines
9.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 请假流程任务办理
*/
$(function() {
// 签收
$('.claim').button({
icons: {
primary: 'ui-icon-person'
}
});
// 办理
$('.handle').button({
icons: {
primary: 'ui-icon-comment'
}
}).click(handle);
// 跟踪
$('.trace').click(graphTrace);
});
// 用于保存加载的详细信息
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;
}