hn_cloud_web/smz-web/js/work/fileLibrary/proLibrary.js

457 lines
17 KiB
JavaScript
Raw Normal View History

2025-11-27 16:55:35 +08:00
let checkList = [];
let allIds = '';
let loadingMsg;
var form;
var element;
//保存显示页面的类型 1列表2文件夹
var displayType = 1;
var example;
var exampleSub;
var exampleFile;
var times1 = getCurrentDateTimeArr();
var times2 = getCurrentMonthAndLastMonth();
layui.use(['layer', 'form', 'element', 'laydate'], function () {
var layer = layui.layer;
form = layui.form;
element = layui.element;
var laydate = layui.laydate;
laydate.render({
elem: "#months",
type: "month",
range: true,
value: times2[0] + "-" + times2[1] + " - " + times1[0] + "-" + times1[1],
btns: ['confirm'],
shortcuts: [
{
text: "去年",
value: function () {
var now = new Date();
var year = now.getFullYear() - 1;
return [
new Date(year, 0),
new Date(year, 11)
];
}
},
{
text: "明年",
value: function () {
var now = new Date();
var year = now.getFullYear() + 1;
return [
new Date(year, 0),
new Date(year, 11)
];
}
},
{
text: "近三年",
value: function () {
var now = new Date();
now.setFullYear(now.getFullYear() - 3);
return [now, new Date()];
}
}
]
});
form.render();
init();
//查询
$("#searchBt").click(function () {
example.ajax.reload();
initFolder();
});
$("#resetBt").click(function () {
$("#proName").val("");
example.ajax.reload();
initFolder();
});
//文件夹页面 全选按钮监听
$("#AddCheckBox").change(function () {
if (this.checked) {
$("#folder input[type=checkbox]").prop("checked", true)
} else {
$("#folder input[type=checkbox]").prop("checked", false)
}
})
});
/**
* 工程查询页面tab
* @param value
*/
function init() {
example =
$('#dt-table').DataTable({
"sort": false,
"searching": false,
"processing": true, //加载数据时显示进度状态
"serverSide": true,
//表头固定
"fixedHeader": true,
"scrollX": "500px",
"scrollY": "650px",
"scrollCollapse": true,
"language": {
2025-12-09 18:44:29 +08:00
"url": "../../../js/plugin/datatables/Chinese.lang"
2025-11-27 16:55:35 +08:00
},
"ajax": {
2025-12-09 18:44:29 +08:00
"url": smz_ht_url + "/salaryFile/getSalaryFileByPro",
2025-11-27 16:55:35 +08:00
"type": "post",
"data": function (d) {
var months = $("#months").val();
if (months == "") {
months = times2[0] + "-" + times2[1] + " - " + times1[0] + "-" + times1[1];
}
var startMonth = "";
var endMonth = "";
if (months) {
startMonth = months.split(" - ")[0];
endMonth = months.split(" - ")[1];
}
d.startMonth = startMonth;
d.endMonth = endMonth;
d.proName = $("#proName").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("smz-token");
layer.msg("token过期请先登录", {shift: -1, time: 1000}, function () {
2025-12-09 18:44:29 +08:00
location.href = smz_ht_url + '/login.html';
2025-11-27 16:55:35 +08:00
});
} else if (code == 403) {
console.log("未授权:" + message);
layer.msg('未授权');
} else if (code == 500) {
console.log('系统错误:' + message);
}
}
},
"drawCallback": function () {
// alert( '表格重绘了' );
var thisDataTable = $('#dt-table').DataTable();
$(".pagination").append("<li>" +
"<a class='paginate_button' style='padding:4px;' href='#' tabindex='0'>到 <input style='margin:0px;width:40px;' id='changePage'> 页</a>" +
"<a class='paginate_button' style='margin-bottom:1px' href='#' tabindex='0' id='dataTable-btn'>确认</a></li>");
//点击按钮跳转指定页数
$('#dataTable-btn').click(function (e) {
if ($("#changePage").val() && $("#changePage").val() > 0) {
var redirectpage = $("#changePage").val() - 1;
} else {
var redirectpage = 0;
}
thisDataTable.page(redirectpage).draw('page');
});
//敲击回车键跳转指定页数
$("#changePage").keypress(function (e) {
if (event.keyCode == 13) {
if ($("#changePage").val() && $("#changePage").val() > 0) {
var redirectpage = $("#changePage").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>>",
"columns": [
{
"width": "3%",
"data": "",
"render": function (data, type, row) {
let node = '<input type="checkbox" class="checkOne" value=\"' + row.proId + '\" name=\"' + row.proName + '\" month=\"' + row.month + '\" id="check_item_' + row.proId + '">' +
'<label for="check_item_' + row.proId + '" ></label>';
return node;
},
"sClass": "text-center"
},
{
width: '4%',
data: function (row, type, set, meta) {
var c = meta.settings._iDisplayStart + meta.row + 1;
return c;
}
},
{
"data": "",
"defaultContent": "",
"orderable": false,
"width": "50%",
"render": function (data, type, row) {
var proId = row["proId"];
var month = row["month"];
var name = row["proName"];
var html = "";
//文件夹,可以点击
html += `<div style="display: flex;">`;
html += `<div onclick='initSub("${proId}", "${month}","${name}",1)' style="cursor:pointer;">`;
html += `<img src='../../../img/fileIcon/folderIcon.png' width="20" />&nbsp;&nbsp;`;
html += `<span style="color: #409EFF">${name}</span>`;
html += "</div>";
html += `</div>`;
return html;
}
},
{"data": "subNum", "defaultContent": ""},
{"data": "fileNum", "defaultContent": ""},
{"data": "month", "defaultContent": ""},
{"data": "uploadTime", "defaultContent": ""}
],
// "order": [[0, "desc"], [1, "asc"]], //在栏目列上显示排序功能
});
}
//跳转的分包商的页面
function initSub(proId, month, name, nums) {
localStorage.setItem("proId-pro", proId);
localStorage.setItem("month-pro", month);
localStorage.setItem("name-pro", name);
localStorage.setItem("displayType-pro", displayType);
localStorage.setItem("months-pro", $("#months").val());
localStorage.setItem("proName-pro", $("#proName").val());
var parentWindow = window.parent;
// 发送消息到父窗口
parentWindow.postMessage({
action: 'changeSrc',
newUrl: 'subLibrary.html'
}, '*'); // 使用 * 表示允许任何源接收消息
}
//文件夹点击
function folderClick(proId, month, name) {
//加载分包商菜单
initSub(proId, month, name, 2);
}
//下载
function downloadClick() {
loadingMsg = top.layer.msg('加载中,请稍候...', {icon: 16, scrollbar: false, time: 0, shade: [0.8, '#393D49']});
//列表
let map = getAllCheckedValue();
if (map.get("checkedArr").length > 0) {
var listFile = map.get("checkedArr");
$.ajax({
type: 'POST',
async: true, // 默认异步true,false表示同步
2025-12-09 18:44:29 +08:00
url: smz_ht_url + "/salaryFile/checkSalaryFileIsActive", // 请求地址
2025-11-27 16:55:35 +08:00
contentType: "application/json; charset=utf-8",
dataType: 'json', // 服务器返回数据类型
data: JSON.stringify({
type: "1",
listFile: listFile
}), //获取提交的表单字段
success: function (data) {
if (data.code == 200) {
exportFullFile(listFile)
} else {
top.layer.close(loadingMsg);
layer.alert(data.msg);
}
},
error: function (XMLHttpRequest, textStatus, e) {
top.layer.close(loadingMsg);
layer.msg('数据请求发生异常,请稍后重试', {icon: 16, scrollbar: false});
}
});
} else if (map.get("checkedArr").length == 0) {
top.layer.close(loadingMsg);
layer.alert("请勾选数据", {icon: 0})
} else {
top.layer.close(loadingMsg);
layer.alert("系统错误,请联系管理员", {icon: 2})
}
}
function exportFullFile(listFile, token) {
2025-12-05 15:39:43 +08:00
var token = localStorage.getItem("smz-token");
2025-12-09 18:44:29 +08:00
let url = smz_ht_url + "/salaryFile/exportSalaryFile";
2025-11-27 16:55:35 +08:00
let xhr = new XMLHttpRequest();
xhr.open("post", url, true);
//设置xhr请求的超时时间
//设置响应返回的数据格式
xhr.responseType = "blob"; // 转换流
// 设置请求头
xhr.setRequestHeader("Authorization", `Bearer ${token}`);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('token', token);
const data = {
type: "1",
listFile: listFile
};
const str = JSON.stringify(data);
xhr.send(str)
//构造表单数据
xhr.onload = function () {
if (this.status === 200) {
let blob = this.response;
var a = document.createElement("a");
var url = window.URL.createObjectURL(blob);
a.href = url;
// 假设服务器在响应中设置了 Content-Disposition 头部,可以通过此方式获取文件名
var disposition = xhr.getResponseHeader('Content-Disposition');
var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
var match = filenameRegex.exec(disposition);
var filename = match ? decodeURIComponent(match[1]) : 'unknown';
a.download = filename || 'downloadedFile.xlsx'; // 默认文件名
a.click();
top.layer.close(loadingMsg);
} else if (this.status === 401) {
localStorage.removeItem("token");
layer.msg('用户登录过期,请重新登录', {icon: 5, time: 2000}, function () {
2025-12-09 18:44:29 +08:00
location.href = smz_ht_url + '/login.html';
2025-11-27 16:55:35 +08:00
});
}else {
// 其他错误处理
console.error('Error downloading file:', this.status);
layer.msg('下载文件失败,请稍后再试', {icon: 5, time: 2000});
}
};
}
//切换到列表
function switchList(e) {
displayType = 1;
$(e).css("border", "1px solid #409EFF");
$(e).next().css("border", "1px solid #E4E4E4")
$(e).prop("src", "../../../img/exam/list1.jpg")
$(e).next().prop("src", "../../../img/exam/folder2.jpg")
$("#table").css("display", "");
$("#folder").css("display", "none");
example.ajax.reload();
}
//切换到文件夹
function switchFolder(e) {
displayType = 2;
$(e).css("border", "1px solid #409EFF");
$(e).prev().css("border", "1px solid #E4E4E4")
$(e).prop("src", "../../../img/exam/1.jpg")
$(e).prev().prop("src", "../../../img/exam/folder1.jpg")
$("#table").css("display", "none");
$("#folder").css("display", "");
initFolder();
}
//加载文件夹页面
function initFolder(value) {
//加载文件夹页面
loadingMsg = top.layer.msg('数据加载中,请稍候...', {icon: 16, scrollbar: false, time: 0, shade: [0.8, '#393D49']});
var months = $("#months").val();
if (months == "") {
months = times2[0] + "-" + times2[1] + " - " + times1[0] + "-" + times1[1];
}
var startMonth = "";
var endMonth = "";
if (months) {
startMonth = months.split(" - ")[0];
endMonth = months.split(" - ")[1];
}
var json = {
"startMonth": startMonth,
"endMonth": endMonth,
"proName": $("#proName").val()
}
$.ajax({
type: 'POST',
async: true, // 默认异步true,false表示同步
2025-12-09 18:44:29 +08:00
url: smz_ht_url + "/salaryFile/getSalaryFileByProList", // 请求地址
2025-11-27 16:55:35 +08:00
// contentType: "application/json; charset=utf-8",
contentType: "application/x-www-form-urlencoded",
dataType: 'json', // 服务器返回数据类型
data: json, //获取提交的表单字段
success: function (data) {
console.log(data);
top.layer.close(loadingMsg);
if (data.code == 200) {
//加载文件夹页面
var html = "<hr/>";
$("#folder>hr").remove();
$("#folder>div").remove();
for (let i = 0; i < data.data.length; i++) {
html += `<div class="fileBox" style="width: 9.8%;height: 24%;float: left">`;
html += `<input type="checkbox" id="${data.data[i].proId}" name="${data.data[i].proName}" value="${data.data[i].proId}" month="${data.data[i].month}" title="" style="display: block">`;
html += `<label for="fileBox${i}" style="display: block">`;
html += `<div style="text-align: center;" ondblclick="folderClick('${data.data[i].proId}', '${data.data[i].month}', '${data.data[i].proName}')">`;
html += `<img src="../../../img/fileIcon/folderIcon.png" width="120" height="120"/>`;
html += `</div>`;
html += `<div style="text-align: center">${getSubString(data.data[i].proName, 12, 12)}</div>`;
html += `</label>`;
html += `</div>`;
}
$("#folder").append(html)
} else {
var html = "<hr/>";
$("#folder>hr").remove();
$("#folder>div").remove();
$("#folder").append(html)
layer.alert(data.msg, {icon: 2});
}
},
error: function (XMLHttpRequest, textStatus, e) {
top.layer.close(loadingMsg);
layer.msg('数据请求发生异常,请稍后重试', {icon: 16, scrollbar: false});
}
});
}
// 设置表格全选(disabled不选)
$(document).on("click", ".checkAll", function () {
if ($(this).prop("checked")) {
var disable = $('.checkOne');
for (let i = 0; i < disable.length; i++) {
if (!$(disable[i]).prop("disabled")) {
$(disable[i]).prop("checked", true);
}
}
} else {
$(".checkOne").prop("checked", false);
}
})
// 获取复选框选中的值
function getAllCheckedValue() {
let checkedArr = [];
let map = new Map();
$('input[type="checkbox"]:checked').each(function () {
if ($(this).val() !== 'on') {
// checkedArr.push([$(this).val(),$(this).attr("month")]);
const foreignId = $(this).val();
const month = $(this).attr("month");
// 将信息存入对象,并将对象添加到数组中
checkedArr.push({
"foreignId": foreignId,
"month": month
});
}
});
map.set('checkedArr', checkedArr);
return map;
}