hb_zhgd_screen/js/pages/newDataAnalysis/proQualityAnalysis.js

395 lines
13 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.

let table, layer, form;
let myChart = null,
myChart2 = null;
layui.use(["layer", "table", "form"], function () {
layer = layui.layer;
table = layui.table;
form = layui.form;
// 响应成功后的拦截器
$.ajaxSetup({
beforeSend: function (xhr, options) {
var originalSuccess = options.success;
options.success = function (data, textStatus, jqXhr) {
data = modifyResponseData(data);
// success(data,textStatus, jqXhr);
originalSuccess.apply(this, arguments);
};
},
});
initTable(1, parent.parent.$("#bidPro").val());
});
/* 切换数据 */
function changeData(that, type) {
const bidCode = parent.$("#bidPro").val();
$(".ul-box li").each(function () {
if ($(this).hasClass("check")) {
$(this).removeClass("check").addClass("nocheck");
}
});
var tableElem = $("#demo2").parents(".layui-table-view");
tableElem.remove();
$(that).removeClass("nocheck").addClass("check");
if (type === 1 || type === 2 || type === 3 || type === 6 || type === 12) {
initTable(type, bidCode);
$("#right-table-box").removeAttr("style");
$("#no-data-box").css({ display: "none" });
$("#right-box").css({ display: "none" });
}
}
function initTable(type, bidCode) {
const url =
commonUrl + "screen/largeScreen/dataAnalysis/getEngqualityAnalysis";
table.render({
elem: "#demo2",
url: url,
skin: "line",
page: true,
height: "full-100",
headers: {
decrypt: "decrypt",
Authorization: token,
},
where: {
bidCode: bidCode,
type: type,
},
cols: [setCols(type)],
initComplete: function () {
// 在表格渲染完成后,重新渲染序号列
var that = this.elem.next();
var tool = that
.children(".layui-table-box")
.children(".layui-table-fixed")
.children(".layui-table-body")
.children(".layui-table");
tool.find("tr").each(function (index, item) {
$(this)
.find('td[data-field="LAY_TABLE_INDEX"]')
.text(index + 1);
});
},
done: function (res, curr, count, origin) {
if (res.data && res.data.length > 0) {
initEcharts(res.data);
}
// $(".layui-table-body table.layui-table tbody tr").on(
// "click",
// function () {
// // 获取当前行的数据
// var index = $(this).index();
// var rowData = res.data[index]; // 获取对应行的数据
// const passRate = rowData.passRate || 0;
// const noPassRate = rowData.noPassRate || 0;
// // initEchartsOne(passRate, noPassRate);
// // 增加一个 400 * 400 的弹框把饼图放进去 并修改弹框背景样式为透明
// layer.open({
// type: 1,
// title: "合格率对比",
// content: "<div id='oneEcharts'></div>",
// area: ["600px", "600px"],
// });
// initEchartsOne(passRate, noPassRate);
// }
// );
$(".layui-table-body table.layui-table tbody tr").on(
"click",
function () {
// 获取当前行的数据
var index = $(this).index();
var rowData = res.data[index]; // 获取对应行的数据
const passRate = rowData.passRate || 0;
const noPassRate = rowData.noPassRate || 0;
// 弹框配置
layer.open({
type: 1,
title: "合格率对比",
content:
"<div id='oneEcharts' style='width:100%;height:100%;'></div>",
area: ["600px", "600px"],
shade: 0.3, // 遮罩透明度
skin: "custom-layer-style", // 自定义皮肤
success: function (layero, index) {
// 修改弹框背景颜色
$(layero).css(
"background",
"rgba(13, 34, 37, 0.9)"
); // 半透明黑色背景
$(layero).find(".layui-layer-title").css({
color: "#fff", // 标题文字颜色
background: "transparent", // 标题背景透明
"border-bottom":
"1px solid rgba(255, 255, 255, 0.2)", // 标题底部边框
});
$(layero).find(".layui-layer-content").css({
background: "transparent", // 内容区域透明
});
$(layero)
.find(".layui-layer-setwin .layui-layer-close")
.css({
color: "#fff", // 文字颜色
"border-color": "#fff", // 边框颜色(如果按钮有边框)
});
// 重新渲染 ECharts因为 DOM 刚被创建)
setTimeout(() => {
initEchartsOne(passRate, noPassRate);
}, 100);
},
});
}
);
},
});
function setCols(type) {
if (type === 1) {
// 工程质量分析
return [
{ type: "numbers", title: "序号", width: "10%" }, // 添加序号列
{ field: "checkItems", title: "工序", align: "center" },
{ field: "projectManager", title: "项目经理", align: "center" },
{ field: "team", title: "施工队伍", align: "center" },
{ field: "startTime", title: "开始时间", align: "center" },
{ field: "checkNum", title: "检查数量", align: "center" },
{ field: "passNum", title: "合格数量", align: "center" },
{ field: "passRate", title: "合格率", align: "center" },
{ field: "score", title: "得分", align: "center" },
{
field: "unqualifiedItems",
title: "不合格原因",
align: "center",
},
/* {
title: "操作",
align: "center",
templet: function (row) {
// 注意Layui 的 templet 函数参数是 row即当前行数据
return `
<button class="layui-btn layui-btn-xs" onclick="handleUpload('${row.projectNumber}')">
上传
</button>
`;
},
},*/
];
}
}
}
// 初始化 echarts
function initEcharts(data) {
if (myChart && myChart2) {
myChart.dispose();
myChart2.dispose();
}
myChart2 = echarts.init(document.getElementById("rightLineBox"));
initEchartsTwo(data);
}
layui.use('upload', function () {
var upload = layui.upload;
// 执行上传
upload.render({
elem: '#uploadBtn', // 绑定元素
url: commonUrl + "screen/largeScreen/dataAnalysis/uploadProQualityFile",
accept: 'file', // 允许上传任意文件
exts: 'docx', // 允许的文件类型
size: 1024 * 10, // 限制文件大小,单位 KB10MB
headers: {
decrypt: "decrypt",
Authorization: token,
},
before: function (obj) {
// 上传前回调
layer.msg('上传中...', { icon: 16, time: 0 });
},
done: function (res) {
// 上传完成后回调(成功)
layer.closeAll('loading');
layer.msg('上传成功');
console.log('服务器返回:', res);
parent.location.reload(); // 刷新父页面
},
error: function () {
// 上传失败回调
layer.msg('上传失败', { icon: 5 });
}
});
});
function initEchartsOne(passRate, noPassRate) {
// 从传入的数据中提取 passRate 和 noPassRate并转为数字
// const passRate = parseFloat(pieData.passRate);
// const noPassRate = parseFloat(pieData.noPassRate);
myChart = echarts.init(document.getElementById("oneEcharts"));
console.log(passRate, noPassRate, "passRate, noPassRate");
const option = {
grid: {
top: 0,
bottom: 0,
left: 0,
right: 0,
},
title: {
x: "center",
textStyle: {
color: "#fff",
},
},
tooltip: {
trigger: "item",
formatter: "{b}: {c}%",
},
legend: {
show: true,
data: ["合格率", "不合格率"],
bottom: 10,
textStyle: {
color: "#fff",
},
},
series: [
{
name: "合格率分析",
type: "pie",
radius: "50%",
center: ["50%", "50%"],
label: {
show: true,
formatter: "{b}: {c}%",
},
data: [
{ value: parseFloat(passRate), name: "合格率" },
{ value: parseFloat(noPassRate), name: "不合格率" },
],
itemStyle: {
borderRadius: 5,
borderColor: "#fff",
borderWidth: 2,
},
},
],
};
// 设置图表(假设你已定义 myChart2
myChart.setOption(option, true);
window.addEventListener("resize", function () {
myChart.resize();
});
}
function initEchartsTwo(data) {
const teams = data.map((item) => item.checkItems);
const scores = data.map((item) => item.score);
const option = {
title: {
text: "工序得分情况",
left: "center",
textStyle: {
color: "#fff",
},
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "none", // 移除鼠标悬停时的阴影效果
},
formatter: function (params) {
// 自定义tooltip显示内容移除了百分号
return (
params[0].name +
"<br/>" +
params[0].seriesName +
": " +
params[0].value
);
},
},
grid: {
left: "10%",
right: "10%",
bottom: "20%",
top: "20%",
containLabel: true,
},
xAxis: {
type: "category",
data: teams,
axisLabel: {
color: "#fff",
interval: 0,
formatter: function (value) {
// 每4个字符换行
return value.match(/.{1,4}/g).join("\n");
},
},
axisLine: {
lineStyle: {
color: "#fff",
},
},
},
yAxis: {
type: "value",
name: "得分",
min: 0,
max: 100,
interval: 10,
axisLabel: {
color: "#fff",
formatter: function (value) {
return value;
},
},
axisLine: {
lineStyle: {
color: "#fff",
},
},
splitLine: {
lineStyle: {
color: "rgba(255,255,255,0.1)",
},
},
},
series: [
{
name: "得分",
type: "bar",
data: scores,
barWidth: "30%",
label: {
show: true,
position: "top",
color: "#fff",
formatter: function (params) {
return params.value;
},
},
itemStyle: {
color: "#409EFF",
},
},
],
};
// 初始化 ECharts 图表(假设你已定义 myChart
myChart2.setOption(option);
window.addEventListener("resize", function () {
myChart2.resize();
});
}