434 lines
16 KiB
JavaScript
434 lines
16 KiB
JavaScript
|
|
/**
|
|||
|
|
* 报表生成
|
|||
|
|
* @param id
|
|||
|
|
* @param layerType
|
|||
|
|
*/
|
|||
|
|
function onlineExcel4minio(id, layerType) {
|
|||
|
|
var sheetName = '';
|
|||
|
|
//获取该excel的所有sheet 默认加载第一个sheet
|
|||
|
|
$.post(ext.contextPath + '/report/rptCreate/getSheet.do', {id: id}, function (data) {
|
|||
|
|
var datastr = eval('(' + data + ')');
|
|||
|
|
if (datastr.code == 1) {
|
|||
|
|
var msg = datastr.msg;
|
|||
|
|
var arr = msg.split(",");
|
|||
|
|
|
|||
|
|
var sheetstr = '<div class="btn-group">';
|
|||
|
|
var btnClass = "";
|
|||
|
|
var sheetName = "";
|
|||
|
|
//循环sheet
|
|||
|
|
for (var i = 0; i < arr.length - 1; i++) {
|
|||
|
|
if (i == 0) {
|
|||
|
|
btnClass = "btn-primary";
|
|||
|
|
} else {
|
|||
|
|
btnClass = "btn-default";
|
|||
|
|
}
|
|||
|
|
if (arr[i] != null && arr[i] != '') {
|
|||
|
|
sheetName = arr[i];
|
|||
|
|
} else {
|
|||
|
|
sheetName = "sheet" + i;
|
|||
|
|
}
|
|||
|
|
sheetstr += '<div class="btn ' + btnClass + '" onclick="viewFile(\'' + id + '\',\'' + sheetName + '\',\'' + layerType + '\',this);">' + sheetName + '</div>';
|
|||
|
|
}
|
|||
|
|
sheetstr += '</div>';
|
|||
|
|
$('#viewFile_top').html(sheetstr);
|
|||
|
|
|
|||
|
|
// console.log(arr);
|
|||
|
|
//获取excel数据,前端渲染
|
|||
|
|
sheetName = arr[0];
|
|||
|
|
viewFile_open(id, sheetName, layerType);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//赋值并打开页面
|
|||
|
|
function viewFile_open(id, sheetName, layerType) {
|
|||
|
|
//先清空excel div
|
|||
|
|
$('#viewFile_bottom').html('');
|
|||
|
|
//等待
|
|||
|
|
top.layer.load(1);
|
|||
|
|
//sheet赋值
|
|||
|
|
$('#sheet').val(sheetName);
|
|||
|
|
//creatId赋值
|
|||
|
|
$('#creatId').val(id);
|
|||
|
|
$.post(ext.contextPath + '/report/rptCreate/viewFile.do', {
|
|||
|
|
id: id,
|
|||
|
|
sheetName: sheetName,
|
|||
|
|
layerType: layerType
|
|||
|
|
}, function (data) {
|
|||
|
|
var end = data;
|
|||
|
|
$('#viewFile_bottom').html(end);
|
|||
|
|
$('#viewFile_bottom td').addClass("viewFile-td");
|
|||
|
|
//获取并加载日志
|
|||
|
|
getLog('cal');
|
|||
|
|
//关闭等待
|
|||
|
|
top.layer.closeAll('loading');
|
|||
|
|
//前端后端 XY转化
|
|||
|
|
setCellsInfo();
|
|||
|
|
});
|
|||
|
|
layer.open({
|
|||
|
|
type: 1,
|
|||
|
|
title: '报表预览',
|
|||
|
|
area: '95%',
|
|||
|
|
skin: 'bgfff', //没有背景色
|
|||
|
|
maxmin: true,
|
|||
|
|
shadeClose: true,
|
|||
|
|
closeBtn: '1',
|
|||
|
|
content: $('#viewFile'),
|
|||
|
|
success: function (layero, index) { //弹出层加载成功后执行
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//仅赋值---切换sheet
|
|||
|
|
function viewFile(id, sheetName, layerType, ele) {
|
|||
|
|
if (ele != null && ele != undefined) {
|
|||
|
|
$(ele).siblings().removeClass("btn-primary");
|
|||
|
|
$(ele).siblings().removeClass("btn-default");
|
|||
|
|
$(ele).siblings().addClass("btn-default");
|
|||
|
|
$(ele).removeClass("btn-default");
|
|||
|
|
$(ele).addClass("btn-primary");
|
|||
|
|
}
|
|||
|
|
//先清空excel div
|
|||
|
|
$('#viewFile_bottom').html('');
|
|||
|
|
//等待
|
|||
|
|
top.layer.load(1);
|
|||
|
|
//给sheet赋值
|
|||
|
|
$('#sheet').val(sheetName);
|
|||
|
|
$.post(ext.contextPath + '/report/rptCreate/viewFile.do', {
|
|||
|
|
id: id,
|
|||
|
|
sheetName: sheetName,
|
|||
|
|
layerType: layerType
|
|||
|
|
}, function (data) {
|
|||
|
|
var end = data;
|
|||
|
|
$('#viewFile_bottom').html(end);
|
|||
|
|
$('#viewFile_bottom td').addClass("viewFile-td");
|
|||
|
|
//获取并加载日志
|
|||
|
|
getLog('cal');
|
|||
|
|
//关闭等待
|
|||
|
|
top.layer.closeAll('loading');
|
|||
|
|
//前端后端 XY转化
|
|||
|
|
setCellsInfo();
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//渲染后的table 右键事件
|
|||
|
|
function tabClickRight() {
|
|||
|
|
var td = event.srcElement; // 通过event.srcElement 获取激活事件的对象 td
|
|||
|
|
if (td.parentElement.rowIndex != 'undefined' && td.parentElement.rowIndex != undefined && td.cellIndex != 'undefined' && td.cellIndex != undefined) {
|
|||
|
|
// var posx = td.cellIndex;
|
|||
|
|
// var posy = td.parentElement.rowIndex;
|
|||
|
|
var posx = td.cellIndex;
|
|||
|
|
var posy = td.parentElement.rowIndex;
|
|||
|
|
// alert(posx + '------' + posy);
|
|||
|
|
|
|||
|
|
$('#tableLog').bootstrapTable('destroy');
|
|||
|
|
$("#tableLog").bootstrapTable({ // 对应table标签的id
|
|||
|
|
url: ext.contextPath + '/report/rptLog/getList.do', // 获取表格数据的url
|
|||
|
|
cache: false, // 设置为 false 禁用 AJAX 数据缓存, 默认为true
|
|||
|
|
striped: true, //表格显示条纹,默认为false
|
|||
|
|
pagination: true, // 在表格底部显示分页组件,默认false
|
|||
|
|
pageList: [200], // 设置页面可以显示的数据条数
|
|||
|
|
pageSize: 200, // 页面数据条数
|
|||
|
|
pageNumber: 1, // 首页页码
|
|||
|
|
paginationDetailHAlign: ' hidden',//去除分页的显示
|
|||
|
|
sidePagination: 'server', // 设置为服务器端分页
|
|||
|
|
queryParams: function (params) { // 请求服务器数据时发送的参数,可以在这里添加额外的查询参数,返回false则终止请求
|
|||
|
|
return {
|
|||
|
|
rows: params.limit, // 每页要显示的数据条数
|
|||
|
|
page: params.offset / params.limit + 1, // 每页显示数据的开始页码
|
|||
|
|
sort: params.sort, // 要排序的字段
|
|||
|
|
order: params.order,
|
|||
|
|
createId: $('#creatId').val(),
|
|||
|
|
posx: posx,
|
|||
|
|
posy: posy
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
sortName: 'insdt', // 要排序的字段
|
|||
|
|
sortOrder: 'desc', // 排序规则
|
|||
|
|
columns: [
|
|||
|
|
{
|
|||
|
|
field: '', // 返回json数据中的name
|
|||
|
|
title: '修订前值', // 表格表头显示文字
|
|||
|
|
align: 'center', // 左右居中
|
|||
|
|
valign: 'middle', // 上下居中
|
|||
|
|
width: '25%',
|
|||
|
|
formatter: function (value, row, index) {
|
|||
|
|
return row.beforeValue;
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
field: '', // 返回json数据中的name
|
|||
|
|
title: '修订值', // 表格表头显示文字
|
|||
|
|
align: 'center', // 左右居中
|
|||
|
|
valign: 'middle', // 上下居中
|
|||
|
|
width: '25%',
|
|||
|
|
formatter: function (value, row, index) {
|
|||
|
|
return row.afterValue;
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
field: '', // 返回json数据中的name
|
|||
|
|
title: '修订人', // 表格表头显示文字
|
|||
|
|
align: 'center', // 左右居中
|
|||
|
|
valign: 'middle', // 上下居中
|
|||
|
|
width: '25%',
|
|||
|
|
formatter: function (value, row, index) {
|
|||
|
|
if (row.user != null && row.user != '') {
|
|||
|
|
return row.user.caption;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
field: '', // 返回json数据中的name
|
|||
|
|
title: '修订时间', // 表格表头显示文字
|
|||
|
|
align: 'center', // 左右居中
|
|||
|
|
valign: 'middle', // 上下居中
|
|||
|
|
width: '25%',
|
|||
|
|
formatter: function (value, row, index) {
|
|||
|
|
return row.insdt.substring(0, 19);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
onLoadSuccess: function (data) { //加载成功时执行
|
|||
|
|
adjustBootstrapTableView("tableLog");
|
|||
|
|
if (data.total > 0) {
|
|||
|
|
layer.open({
|
|||
|
|
type: 1,
|
|||
|
|
title: false,
|
|||
|
|
area: '50%',
|
|||
|
|
skin: 'bgfff', //没有背景色
|
|||
|
|
maxmin: false,
|
|||
|
|
content: $('#viewHis'),
|
|||
|
|
cancel: function () {//获取右上角关闭事件
|
|||
|
|
//无
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
onLoadError: function () { //加载失败时执行
|
|||
|
|
console.info("加载数据失败");
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 转换前端和excel XY公式
|
|||
|
|
*/
|
|||
|
|
function setCellsInfo() {
|
|||
|
|
var rowSpanAll = [];
|
|||
|
|
var objTab = document.getElementById('t1')
|
|||
|
|
// 遍历表格
|
|||
|
|
for (var i = 0; i < objTab.rows.length; i++) {
|
|||
|
|
var posTempX = 1
|
|||
|
|
// var rowSpanAll_row =[]
|
|||
|
|
for (var j = 0; j < objTab.rows[i].cells.length; j++) {
|
|||
|
|
var cellItem = objTab.rows[i].cells[j]
|
|||
|
|
cellItem.id = 'cell-' + Math.floor(Math.random() * 1000000)
|
|||
|
|
if (j > 0) {
|
|||
|
|
posTempX += objTab.rows[i].cells[j - 1].colSpan
|
|||
|
|
}
|
|||
|
|
var realRow = i + 1 // 行
|
|||
|
|
var realCol = posTempX
|
|||
|
|
// console.log("默认第"+realRow+"行初始列", realCol)
|
|||
|
|
if (rowSpanAll.length > 0) {
|
|||
|
|
rowSpanAll.forEach(function (rowSpanObj) {
|
|||
|
|
if (rowSpanObj.row < realRow && rowSpanObj.rowSpanNum > 0 && realCol >= rowSpanObj.col) {
|
|||
|
|
// console.log("默认第"+realRow+"行加", rowSpanObj)
|
|||
|
|
realCol += rowSpanObj.colSpanNum
|
|||
|
|
}
|
|||
|
|
// else{
|
|||
|
|
// console.log("默认第"+realRow+"行未加", rowSpanObj)
|
|||
|
|
// }
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
cellItem.setAttribute('posx', realCol)
|
|||
|
|
cellItem.setAttribute('posy', realRow)
|
|||
|
|
if (cellItem.rowSpan > 1) {
|
|||
|
|
var obj = {}
|
|||
|
|
obj['rowSpanNum'] = cellItem.rowSpan
|
|||
|
|
obj['colSpanNum'] = cellItem.colSpan
|
|||
|
|
obj['row'] = realRow
|
|||
|
|
obj['col'] = realCol
|
|||
|
|
rowSpanAll.push(obj)
|
|||
|
|
rowSpanAll.sort(function (a, b) {
|
|||
|
|
return a.col - b.col
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// rowSpanAll= rowSpanAll_row.concat(rowSpanAll)
|
|||
|
|
if (rowSpanAll.length > 0) {
|
|||
|
|
rowSpanAll.forEach(function (rowSpanObj) {
|
|||
|
|
rowSpanObj.rowSpanNum--
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//渲染后的table 左键事件
|
|||
|
|
function tabClickLeft(type, cellId) {
|
|||
|
|
var box = document.getElementById(cellId);
|
|||
|
|
//excel中的X
|
|||
|
|
var posx_e = box.getAttribute("posx");
|
|||
|
|
//excel中的Y
|
|||
|
|
var posy_e = box.getAttribute("posy");
|
|||
|
|
|
|||
|
|
var td = event.srcElement; // 通过event.srcElement 获取激活事件的对象 td
|
|||
|
|
if (td.parentElement.rowIndex != 'undefined' && td.parentElement.rowIndex != undefined && td.cellIndex != 'undefined' && td.cellIndex != undefined) {
|
|||
|
|
var str = td.innerHTML;
|
|||
|
|
var reg = RegExp(/button/);
|
|||
|
|
//如果包含button则为有事件的单元格 不参与修改值
|
|||
|
|
if (str.match(reg)) {
|
|||
|
|
//if (str.match('确认区域')) {
|
|||
|
|
layer.confirm("是否确认该时间段内数据?", {icon: 3, title: '提示'},
|
|||
|
|
function (index) {//确认
|
|||
|
|
var sheet = $('#sheet').val();
|
|||
|
|
var creatId = $('#creatId').val();
|
|||
|
|
// var type = type;
|
|||
|
|
var posx = td.cellIndex;
|
|||
|
|
var posy = td.parentElement.rowIndex;
|
|||
|
|
var userId = '${userId}';
|
|||
|
|
$.post(ext.contextPath + '/report/rptLog/doupdate.do', {
|
|||
|
|
sheet: sheet,
|
|||
|
|
creatId: creatId,
|
|||
|
|
type: type,
|
|||
|
|
posx: posx,
|
|||
|
|
posy: posy,
|
|||
|
|
userId: userId,
|
|||
|
|
val: 0
|
|||
|
|
}, function (data) {
|
|||
|
|
//
|
|||
|
|
});
|
|||
|
|
td.innerHTML = '${userName}';
|
|||
|
|
layer.close(index);
|
|||
|
|
},
|
|||
|
|
function (index) {//取消
|
|||
|
|
layer.close(index);
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
layer.prompt({value: str},
|
|||
|
|
function (val, index) {
|
|||
|
|
td.innerHTML = val;//设置单击单元格的值
|
|||
|
|
var sheet = $('#sheet').val();
|
|||
|
|
var creatId = $('#creatId').val();
|
|||
|
|
// var type = type;
|
|||
|
|
var posx = td.cellIndex;
|
|||
|
|
var posy = td.parentElement.rowIndex;
|
|||
|
|
|
|||
|
|
if (str == null || str == '' || str == ' ') {
|
|||
|
|
str = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//去除输入过程中的空格 不然无法识别
|
|||
|
|
val = val.replace(/\s*/g, "");
|
|||
|
|
|
|||
|
|
if (val != null && val != '') {
|
|||
|
|
//正常的
|
|||
|
|
$.post(ext.contextPath + '/report/rptLog/dosave.do', {
|
|||
|
|
sheet: sheet,
|
|||
|
|
creatId: creatId,
|
|||
|
|
type: type,
|
|||
|
|
posx: posx,//table中的x
|
|||
|
|
posy: posy,//table中的y
|
|||
|
|
posx_e: posx_e,//excel中的x
|
|||
|
|
posy_e: posy_e,//excel中的y
|
|||
|
|
beforeValue: str,//修改前的值
|
|||
|
|
afterValue: val //修改后的值
|
|||
|
|
}, function (data) {
|
|||
|
|
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
//空格
|
|||
|
|
$.post(ext.contextPath + '/report/rptLog/dosave4Space.do', {
|
|||
|
|
sheet: sheet,
|
|||
|
|
creatId: creatId,
|
|||
|
|
type: type,
|
|||
|
|
posx: posx,//table中的x
|
|||
|
|
posy: posy,//table中的y
|
|||
|
|
posx_e: posx_e,//excel中的x
|
|||
|
|
posy_e: posy_e,//excel中的y
|
|||
|
|
beforeValue: str,//修改前的值
|
|||
|
|
afterValue: '' //修改后的值
|
|||
|
|
}, function (data) {
|
|||
|
|
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
layer.close(index);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//获取数据修改日志
|
|||
|
|
function getLog(type) {
|
|||
|
|
var sheet = $('#sheet').val();
|
|||
|
|
var creatId = $('#creatId').val();
|
|||
|
|
|
|||
|
|
$.post(ext.contextPath + '/report/rptCreate/getCreateById.do', {
|
|||
|
|
id: creatId
|
|||
|
|
}, function (data) {
|
|||
|
|
var create_json = $.parseJSON(data);
|
|||
|
|
|
|||
|
|
$.post(ext.contextPath + '/report/rptLog/getJson.do', {
|
|||
|
|
sheet: sheet,
|
|||
|
|
creatId: creatId,
|
|||
|
|
type: type
|
|||
|
|
}, function (data) {
|
|||
|
|
var json = $.parseJSON(data);
|
|||
|
|
if (json != null && json.length > 0) {
|
|||
|
|
for (let i = 0; i < json.length; i++) {
|
|||
|
|
if (json[i].type == 'cal') {
|
|||
|
|
var y = parseInt(json[i].posy);
|
|||
|
|
var x = $("tr:eq(" + y + ")");
|
|||
|
|
if (json[i].afterValue != null && json[i].afterValue != '') {
|
|||
|
|
x.find("td").eq(json[i].posx).text(json[i].afterValue);//afterValue
|
|||
|
|
|
|||
|
|
if (create_json.status != 'finish') {
|
|||
|
|
x.find("td").eq(json[i].posx).css('background-color', '#33CCCC');
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
// x.find("td").eq(json[i].posx).text('');//afterValue
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//确认数据方法
|
|||
|
|
function confirmData() {
|
|||
|
|
var td = event.srcElement; // 通过event.srcElement 获取激活事件的对象 td
|
|||
|
|
layer.confirm("是否确认该时间段内数据?", {icon: 3, title: '提示'},
|
|||
|
|
function (index) {//确认
|
|||
|
|
|
|||
|
|
var sheet = $('#sheet').val();
|
|||
|
|
var creatId = $('#creatId').val();
|
|||
|
|
var type = '${RptSpSet_Type_Confirm}';
|
|||
|
|
var posx = td.cellIndex;
|
|||
|
|
var posy = td.parentElement.rowIndex;
|
|||
|
|
var userId = '${userId}';
|
|||
|
|
$.post(ext.contextPath + '/report/rptLog/doupdate.do', {
|
|||
|
|
sheet: sheet,
|
|||
|
|
creatId: creatId,
|
|||
|
|
type: type,
|
|||
|
|
posx: posx,
|
|||
|
|
posy: posy,
|
|||
|
|
beforeValue: '',//修改前的值
|
|||
|
|
afterValue: '' //修改后的值
|
|||
|
|
}, function (data) {
|
|||
|
|
//
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
td.innerHTML = '${userName}';
|
|||
|
|
layer.close(index);
|
|||
|
|
},
|
|||
|
|
function (index) {//取消
|
|||
|
|
layer.close(index);
|
|||
|
|
});
|
|||
|
|
}
|