hn_cloud_web/smz-web/js/work/smallSubManagement/stat/projectStatView.js

605 lines
24 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.

var example = null;
var pers = null;
var form,layer = null;
/**
* 接收父页面传递的参数(通过函数调用方式)
*/
function receiveParams(params) {
console.log("通过函数接收到的参数:", params)
let proId = params.proId;
$("#proId").val(proId);
let proName= params.proName;
$("#proName").text(proName)
let contractNum= params.contractNum;
$("#contractNum").text(contractNum)
let contractAmount= params.contractAmount;
$("#contractAmount").text(contractAmount)
let teamNum= params.teamNum;
$("#teamNum").text(teamNum)
let totalNum= params.totalNum;
$("#totalNum").text(totalNum)
let gxNum= params.gxNum;
$("#gxNum").text(gxNum)
let attDayNum= params.attDayNum;
$("#attDayNum").text(attDayNum)
layui.use(['layer', 'form'], function () {
layer = layui.layer;
form = layui.form;
pers = checkPermission();
getGxs(proId,form)
//工程信息
getDetailByPro(proId);
//小包干协议合同信息
initContractTable(proId);
//工序桩位查询
initPositionTable(proId);
initStaffTable(proId);
$("#searchBt").click(function () {
example.ajax.reload();
});
});
}
function getDetailByPro(proId) {
$.ajax({
type: 'get',
url: ctxPath + '/dataCount/getDetailByPro',
data: {
proId: proId
},
async: false,
success: function (data) {
if(data.res==1 || data.res=="1" ){
let l = data.succeed;
let workerCost = "技工:" + l.technicianWorkload + "普工:" + l.generalWorkerWorkload;
$("#workerCost").text(workerCost);
let num = l.technicianWorkload * l.technicianCost + l.generalWorkerWorkload * l.generalWorkerCost;
let workload = l.technicianWorkload + "*" + l.technicianCost + "+" + l.generalWorkerWorkload + "*" + l.generalWorkerCost +"=" + num;
$("#workload").text(workload);
}
},
error: function (err) {
console.log("获取工程列表出错:", err);
}
});
}
var contractTable, positionTable, staffTable;
// 初始化合同信息表格
function initContractTable(proId) {
contractTable = $('#contract-table').DataTable({
"searching": false,
"processing": true,
"serverSide": false,
"paging": false,
"info": false,
"language": {
"url": contentPath + "/js/plugin/datatables/Chinese.lang"
},
"ajax": {
"url": ctxPath + "/dataCount/getDetailByContracts",
"type": "get",
"data": function (d) {
d.proId = proId;
},
"dataSrc": function(json) {
// 检查响应状态
if (json.res === 1) {
return json.obj; // 返回 obj 数组作为数据源
} else {
// 处理错误情况
layer.msg(json.resMsg || '数据加载失败');
return [];
}
},
"error": function (xhr, textStatus, errorThrown) {
var msg = xhr.responseText;
console.log(msg);
var response = JSON.parse(msg);
var code = response.code;
var message = response.message;
if (code == 400) {
layer.msg(message);
} else if (code == 401) {
localStorage.removeItem("token");
layer.msg("token过期请先登录", {shift: -1, time: 1000}, function () {
location.href = ctxPath + '/login.html';
});
} else if (code == 403) {
console.log("未授权:" + message);
layer.msg('未授权');
} else if (code == 500) {
console.log('系统错误:' + message);
}
}
},
"drawCallback": function() {
var thisDataTable = $('#contract-table').DataTable();
$("#contract-table_wrapper .pagination").append("<li>" +
"<a class='paginate_button' style='padding:4px;' href='#' tabindex='0'>到 <input style='margin:0px;width:40px;' id='changePageContract'> 页</a>" +
"<a class='paginate_button' style='margin-bottom:1px' href='#' tabindex='0' id='dataTable-btn-contract'>确认</a></li>");
$('#dataTable-btn-contract').click(function (e) {
if ($("#changePageContract").val() && $("#changePageContract").val() > 0) {
var redirectpage = $("#changePageContract").val() - 1;
} else {
var redirectpage = 0;
}
thisDataTable.page(redirectpage).draw('page');
});
$("#changePageContract").keypress(function (e) {
if(event.keyCode==13){
if ($("#changePageContract").val() && $("#changePageContract").val() > 0) {
var redirectpage = $("#changePageContract").val() - 1;
} else {
var redirectpage = 0;
}
thisDataTable.page(redirectpage).draw('page');
}
});
},
"dom": "<'dt-toolbar'r>t<'dt-toolbar-footer'<'col-sm-4 col-xs-4 hidden-xs'i><'col-xs-8 col-sm-8' p v>><'dt-table-length'>",
"columns": [
{
"data": "contractCode",
"orderable": false,
'width': '200px',
"render": function (data, type, row) {
var id = row['id'];
var proId = row['proId'];
var contractCode = row['contractCode'];
var html = '<button class="layui-btn layui-btn-xs" style="background-color: transparent; color: #002CFF;" onclick="contractView(' + id + ',' + proId + ')">' + contractCode + '</button>';
return html
}
},
{"data": "subName", "orderable": false, 'width': '150px'},
{"data": "partyUser", "orderable": false, 'width': '80px'},
{"data": "teamName", "orderable": false, 'width': '80px'},
{"data": "contractMoney", "orderable": false, 'width': '100px'},
{"data": "dateRange", "orderable": false, 'width': '150px'},
{"data": "gxNum", "orderable": false, 'width': '80px'},
{"data": "contractDate", "orderable": false, 'width': '100px'},
{
"data": "",
"orderable": false,
'width': '80px',
"render": function (data, type, row) {
var contractStatus = row['contractStatus'];
if(contractStatus == 1 || contractStatus =="1"){
return '<span>终止</span>';
}else{
return '<span>生效中</span>';
}
}
},
{
"data": "",
'width': '100px',
"defaultContent": "",
"orderable": false,
"render": function (data, type, row) {
let contractId = row['id'];
let html = '<button class="layui-btn layui-btn-xs" style="background-color: transparent; color: #002CFF;" onclick="downloadContract(' + contractId + ')">下载</button>';
return html
}
}
],
"order": []
});
}
function downloadContract(contractId) {
var loadingIndex = layer.load(2, {shade: [0.3, '#000']});
$.ajax({
type: 'GET',
url: ctxPath + '/teamSmallBagDryTreaty/downloadContract',
data: {
contractId: contractId,
downloadType: "1"
},
xhrFields: {
responseType: 'blob' // 关键设置响应类型为blob
},
beforeSend: function(xhr) {
var token = localStorage.getItem("smz-token");
if (token) {
xhr.setRequestHeader('Authorization', 'Bearer ' + token);
}
},
success: function(data, textStatus, xhr) {
layer.close(loadingIndex);
// 获取文件名
var contentDisposition = xhr.getResponseHeader('Content-Disposition');
var filename = 'contract.pdf';
if (contentDisposition) {
var filenameMatch = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);
if (filenameMatch && filenameMatch[1]) {
filename = filenameMatch[1].replace(/['"]/g, '');
try {
filename = decodeURIComponent(filename);
} catch (e) {
// 解码失败使用原文件名
}
}
}
// 创建下载链接
var url = window.URL.createObjectURL(data);
var a = document.createElement('a');
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
layer.msg('下载成功');
},
error: function(xhr, textStatus, errorThrown) {
layer.close(loadingIndex);
}
});
}
/**
* 小包干合同详情
* */
function contractView(id,proId) {
var height = '85%';
var width = '91%';
var index = parent.layer.open({
title: ['小包干合同详情','color:#3B70A1;background-color:#E8ECEB;font-size:20px'],
type: 2,
content: 'contractStatView.html',
area: [width, height],
maxmin: false,
btn: ['关闭'],
success: function (layero, index) {
// 延迟执行,确保 iframe 完全加载
setTimeout(() => {
var iframe = layero.find("iframe")[0]
if (iframe && iframe.contentWindow && iframe.contentWindow.receiveParamsContract) {
iframe.contentWindow.receiveParamsContract({
id: id,
proId: proId,
})
}
}, 100)
}
});
}
// 初始化岗位信息表格
function initPositionTable(proId) {
positionTable = $('#position-table').DataTable({
"searching": false,
"processing": true,
"serverSide": true,
"pagingType": "full_numbers",
"language": {
"url": contentPath + "/js/plugin/datatables/Chinese.lang"
},
"ajax": {
"url": ctxPath + "/dataCount/getDetailGxList",
"type": "post",
"data": function (d) {
d.proId = proId;
d.gxId = $("#gxId").val();
},
"error": function (xhr, textStatus, errorThrown) {
var msg = xhr.responseText;
console.log(msg);
var response = JSON.parse(msg);
var code = response.code;
var message = response.message;
if (code == 400) {
layer.msg(message);
} else if (code == 401) {
localStorage.removeItem("token");
layer.msg("token过期请先登录", {shift: -1, time: 1000}, function () {
location.href = ctxPath + '/login.html';
});
} else if (code == 403) {
console.log("未授权:" + message);
layer.msg('未授权');
} else if (code == 500) {
console.log('系统错误:' + message);
}
}
},
"lengthMenu": [[10, 20, 50], [10, 20, 50]],
"drawCallback": function() {
var thisDataTable = $('#position-table').DataTable();
$("#position-table_wrapper .pagination").append("<li>" +
"<a class='paginate_button' style='padding:4px;' href='#' tabindex='0'>到 <input style='margin:0px;width:40px;' id='changePagePosition'> 页</a>" +
"<a class='paginate_button' style='margin-bottom:1px' href='#' tabindex='0' id='dataTable-btn-position'>确认</a></li>");
$('#dataTable-btn-position').click(function (e) {
if ($("#changePagePosition").val() && $("#changePagePosition").val() > 0) {
var redirectpage = $("#changePagePosition").val() - 1;
} else {
var redirectpage = 0;
}
thisDataTable.page(redirectpage).draw('page');
});
$("#changePagePosition").keypress(function (e) {
if(event.keyCode==13){
if ($("#changePagePosition").val() && $("#changePagePosition").val() > 0) {
var redirectpage = $("#changePagePosition").val() - 1;
} else {
var redirectpage = 0;
}
thisDataTable.page(redirectpage).draw('page');
}
});
},
"dom": "<'dt-toolbar'r>t<'dt-toolbar-footer'<'col-sm-4 col-xs-4 hidden-xs'i><'col-xs-8 col-sm-8' p v>><'dt-table-length'l>",
"columns": [
{
width: '40px',
"orderable": false,
data: function (row, type, set, meta) {
var c = meta.settings._iDisplayStart + meta.row + 1;
return c;
}
},
{"data": "gxName", "orderable": false, 'width': '120px'},
{"data": "gxZw", "orderable": false, 'width': '80px'},
{"data": "attPersonNum", "orderable": false, 'width': '80px'},
{"data": "attDayNum", "orderable": false, 'width': '80px'},
{"data": "attUserName", "orderable": false, 'width': '150px'},
{"data": "contractCode", "orderable": false, 'width': '200px'},
{
"data": "",
'width': '80px',
"defaultContent": "",
"orderable": false,
"render": function (data, type, row) {
var id = row['gxId'];
var html = '<button class="layui-btn layui-btn-xs" style="background-color: transparent; color: #002CFF;" onclick="gxView(' + id + ')">详情</button>';
return html
}
}
],
"order": []
});
}
/**
* 小包干工序桩位详情
* */
function gxView(id) {
var height = '85%';
var width = '91%';
var index = parent.layer.open({
title: ['小包干工序桩位详情','color:#3B70A1;background-color:#E8ECEB;font-size:20px'],
type: 2,
content: 'gxStatView.html',
area: [width, height],
maxmin: false,
btn: ['关闭'],
success: function (layero, index) {
// 延迟执行,确保 iframe 完全加载
setTimeout(() => {
var iframe = layero.find("iframe")[0]
if (iframe && iframe.contentWindow && iframe.contentWindow.receiveParamsGx) {
iframe.contentWindow.receiveParamsGx({
id: id,
})
}
}, 100)
}
});
}
// 初始化人员信息表格
function initStaffTable(proId) {
staffTable = $('#staff-table').DataTable({
"searching": false,
"processing": true,
"serverSide": true,
"pagingType": "full_numbers",
"language": {
"url": contentPath + "/js/plugin/datatables/Chinese.lang"
},
"ajax": {
"url": ctxPath + "/dataCount/getDetailPersonList",
"type": "POST",
"data": function (d) {
d.proId = proId;
d.userName = $("#userName").val();
d.entryAndExitStatus = $("#entryAndExitStatus").val();
},
"error": function (xhr, textStatus, errorThrown) {
var msg = xhr.responseText;
console.log(msg);
var response = JSON.parse(msg);
var code = response.code;
var message = response.message;
if (code == 400) {
layer.msg(message);
} else if (code == 401) {
localStorage.removeItem("token");
layer.msg("token过期请先登录", {shift: -1, time: 1000}, function () {
location.href = ctxPath + '/login.html';
});
} else if (code == 403) {
console.log("未授权:" + message);
layer.msg('未授权');
} else if (code == 500) {
console.log('系统错误:' + message);
}
}
},
"lengthMenu": [[10, 20, 50], [10, 20, 50]],
"drawCallback": function() {
var thisDataTable = $('#staff-table').DataTable();
$("#staff-table_wrapper .pagination").append("<li>" +
"<a class='paginate_button' style='padding:4px;' href='#' tabindex='0'>到 <input style='margin:0px;width:40px;' id='changePageStaff'> 页</a>" +
"<a class='paginate_button' style='margin-bottom:1px' href='#' tabindex='0' id='dataTable-btn-staff'>确认</a></li>");
$('#dataTable-btn-staff').click(function (e) {
if ($("#changePageStaff").val() && $("#changePageStaff").val() > 0) {
var redirectpage = $("#changePageStaff").val() - 1;
} else {
var redirectpage = 0;
}
thisDataTable.page(redirectpage).draw('page');
});
$("#changePageStaff").keypress(function (e) {
if(event.keyCode==13){
if ($("#changePageStaff").val() && $("#changePageStaff").val() > 0) {
var redirectpage = $("#changePageStaff").val() - 1;
} else {
var redirectpage = 0;
}
thisDataTable.page(redirectpage).draw('page');
}
});
},
"dom": "<'dt-toolbar'r>t<'dt-toolbar-footer'<'col-sm-4 col-xs-4 hidden-xs'i><'col-xs-8 col-sm-8' p v>><'dt-table-length'>",
"columns": [
{
width: '40px',
"orderable": false,
data: function (row, type, set, meta) {
var c = meta.settings._iDisplayStart + meta.row + 1;
return c;
}
},
{"data": "userName", "orderable": false, 'width': '80px'},
{"data": "phone", "orderable": false, 'width': '120px'},
{"data": "postName", "orderable": false, 'width': '120px'},
{"data": "attDayNum", "orderable": false, 'width': '80px'},
{"data": "gxNum", "orderable": false, 'width': '80px'},
{"data": "contractCode", "orderable": false, 'width': '200px'},
{"data": "entryAndExitStatus", "orderable": false, 'width': '80px'},
{
"data": "",
'width': '80px',
"defaultContent": "",
"orderable": false,
"render": function (data, type, row) {
// var idCard = row['idCard'];
// var html = '<button class="layui-btn layui-btn-xs" style="background-color: transparent; color: #002CFF;" onclick="personnelView(' + idCard + ')">详情</button>';
var html = "<button class='layui-btn layui-btn-xs' style='background-color: transparent; color: #002CFF;' onclick='personnelView("+JSON.stringify(row)+")'>详情</button>";
return html
}
}
],
"order": []
});
}
/**
* 小包干人员详情
* */
function personnelView(item) {
let idCard = item.idCard
var height = '85%';
var width = '91%';
var index = parent.layer.open({
title: ['小包干人员详情','color:#3B70A1;background-color:#E8ECEB;font-size:20px'],
type: 2,
content: 'personnelStatView.html',
area: [width, height],
maxmin: false,
btn: ['关闭'],
success: function (layero, index) {
// 延迟执行,确保 iframe 完全加载
setTimeout(() => {
var iframe = layero.find("iframe")[0]
if (iframe && iframe.contentWindow && iframe.contentWindow.receiveParamsPersonnel) {
iframe.contentWindow.receiveParamsPersonnel({
idCard: idCard,
})
}
}, 100)
}
});
}
// 搜索功能
function searchPosition() {
positionTable.ajax.reload();
}
function resetPosition() {
$('#gxId').val('');
// 重新渲染 select 下拉框
layui.form.render("select");
positionTable.ajax.reload();
}
function exportPosition() {
var proId = $('#proId').val();
var gxId = $('#gxId').val();
var token = localStorage.getItem("smz-token");
var loadingMsg = layer.msg('下载中,请稍候...', {icon: 16, scrollbar: false, time: 0});
var url = ctxPath + "/dataCount/downloadDetailGxExcel?proId=" + proId +"&gxId=" + gxId + "&token=" + token;
var xhr = new XMLHttpRequest();
xhr.open("get", url, true);
xhr.responseType = "blob"; // 转换流
xhr.onload = function () {
layer.close(loadingMsg);
if (this.status === 200) {
var blob = this.response;
var a = document.createElement("a");
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = "工序桩位.xlsx"; // 文件名
}else {
layer.msg('发生异常,请稍后重试', {icon: 16, scrollbar: false, time: 2000});
}
a.click()
window.URL.revokeObjectURL(url)
};
xhr.send();
}
function searchStaff() {
staffTable.ajax.reload();
}
function resetStaff() {
$('#userName').val('');
$('#entryAndExitStatus').val('');
// 重新渲染 select 下拉框
layui.form.render("select");
staffTable.ajax.reload();
}
function exportStaff() {
var proId = $('#proId').val();
var entryAndExitStatus = $('#entryAndExitStatus').val();
var userName = $('#userName').val();
var token = localStorage.getItem("smz-token");
var loadingMsg = layer.msg('下载中,请稍候...', {icon: 16, scrollbar: false, time: 0});
var url = ctxPath + "/dataCount/downloadDetailPersonExcel?proId=" + proId +"&entryAndExitStatus=" + entryAndExitStatus +"&userName=" + userName + "&token=" + token;
var xhr = new XMLHttpRequest();
xhr.open("get", url, true);
xhr.responseType = "blob"; // 转换流
xhr.onload = function () {
layer.close(loadingMsg);
if (this.status === 200) {
var blob = this.response;
var a = document.createElement("a");
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = "人员信息.xlsx"; // 文件名
}else {
layer.msg('发生异常,请稍后重试', {icon: 16, scrollbar: false, time: 2000});
}
a.click()
window.URL.revokeObjectURL(url)
};
xhr.send();
}