605 lines
24 KiB
JavaScript
605 lines
24 KiB
JavaScript
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: smz_ht_url + '/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": "../../../../js/plugin/datatables/Chinese.lang"
|
||
},
|
||
"ajax": {
|
||
"url": smz_ht_url + "/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 = smz_ht_url + '/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: smz_ht_url + '/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": "../../../../js/plugin/datatables/Chinese.lang"
|
||
},
|
||
"ajax": {
|
||
"url": smz_ht_url + "/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 = smz_ht_url + '/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": "../../../../js/plugin/datatables/Chinese.lang"
|
||
},
|
||
"ajax": {
|
||
"url": smz_ht_url + "/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 = smz_ht_url + '/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 = smz_ht_url + "/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 = smz_ht_url + "/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();
|
||
}
|