hb_zhgd_screen/js/pages/newDataAnalysis/projectProgress.js

462 lines
15 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 currentType = 1;
let currentBidCode = "";
let xData = [];
let yData_1 = [];
let yData_2 = [];
let pieData = [];
let pieData_1 = [];
// 将setCols函数提取到外部使其可以被全局访问
function setCols(type) {
if (type === 1) {
return [
{ type: "numbers", title: "序号", width: "10%" },
{ field: "projectName", title: "项目名称", align: "center" },
{ field: "taskName", title: "作业任务名称", align: "center" },
{ field: "taskCode", title: "任务编号", align: "center" },
{ field: "planStartTime", title: "计划开始时间", align: "center" },
{ field: "planEndTime", title: "计划完成时间", align: "center" },
{
field: "actualStartTime",
title: "实际开始时间",
align: "center",
},
{ field: "actualEndTime", title: "实际完成时间", align: "center" },
{ field: "processDiff", title: "进度偏差", align: "center" },
// { field: "completeEffort", title: "已完成工程量", align: "center" },
// { field: "totalEffort", title: "总工程量", align: "center" },
{
title: "延误因素分析",
align: "center",
templet: (d, index) => {
let text = "";
text +=
'<a id="viewBtn" style="color: #007bff;cursor: pointer;font-size: 16px">查看</a>';
return text;
},
},
{
field: "resourceMatchStatus",
title: "资源匹配状态",
align: "center",
},
{
field: "keyPathFlag",
title: "关键路径任务标识",
align: "center",
},
];
}
// 可以添加其他type的情况
return []; // 默认返回空数组
}
layui.use(["layer", "table", "form"], function () {
layer = layui.layer;
table = layui.table;
form = layui.form;
currentBidCode = parent.parent.$("#bidPro").val();
initTable(currentType, currentBidCode);
$.ajaxSetup({
beforeSend: function (xhr, options) {
var originalSuccess = options.success;
options.success = function (data, textStatus, jqXhr) {
data = modifyResponseData(data);
originalSuccess.apply(this, arguments);
};
},
});
});
function changeData(that, type) {
currentType = type;
currentBidCode = parent.parent.$("#bidPro").val();
$(".ul-box li").each(function () {
if ($(this).hasClass("check")) {
$(this).removeClass("check").addClass("nocheck");
}
});
$(that).removeClass("nocheck").addClass("check");
if ($("#demo2").is(":visible")) {
initTable(type, currentBidCode);
}
$("#right-table-box").removeAttr("style");
$("#no-data-box").css({ display: "none" });
$("#right-box").css({ display: "none" });
}
let data1 = [
"由于大气影响,导致施工进度延误",
"由于设备判断延迟,导致施工进度延误",
"由于人员不足,导致施工进度延误",
"由于设计变更,导致施工进度延误",
"由于其他原因,导致施工进度延误",
];
// 自动生成一些结果描述
let data2 = [
"此次结果较上次有所恶化由于大气影响如暴雨、雾霾现场停工3天需调整后续工期计划。",
"此次结果与上次持平由于设备判断延迟如检测仪器故障延误2天但通过加班追回部分进度。",
"此次结果较上次有所改善尽管人员不足原计划10人实际到岗7人但通过优化分工仅延误1天。",
"此次结果出现新问题由于设计变更业主临时要求修改图纸导致关键路径延期5天需紧急协调资源。",
"此次结果较上次无显著变化其他原因如临时停电导致延误1天属于可控范围内。",
];
function initTable(type, bidCode) {
if ($("#demo2").next(".layui-table-view").length > 0) {
$("#demo2").next(".layui-table-view").remove();
}
const url = commonUrl + "screen/largeScreen/tb_project_progress_new/list";
table.render({
elem: "#demo2",
url: url,
skin: "line",
page: true,
height: "full-100",
headers: {
decrypt: "decrypt",
Authorization: token,
},
where: {
bidCode: bidCode,
type: type,
},
response: {
statusName: "code",
statusCode: 200,
countName: "count",
dataName: "rows",
},
cols: [setCols(type)], // 现在可以正确访问setCols函数
done: function (res, curr, count) {
if (res.code !== 200 || !res.rows || res.rows.length === 0) {
layer.msg("暂无数据", { icon: 2 });
}
// 查看按钮点击
$(".layui-table-body table.layui-table tbody tr #viewBtn").on(
"click",
function () {
const index = $(this).closest("tr").data("index");
console.log(index, "index");
var rowData = res.rows[index]; // 获取对应行的数据
// 弹框配置
layer.open({
type: 1,
title: "分析查看",
content:
"<div id='oneEcharts' style='width:100%;height:100%;display: flex;flex-direction: column;justify-content: space-around;'>" +
"<div style='font-size: 16px; padding: 20px;'>延误原因:" +
rowData.delayActor +
"</div>" +
"<div style='font-size: 16px; padding: 20px;'>延误对策:" +
rowData.delayPolicy +
"</div>" +
"<div style='font-size: 16px; padding: 20px;'>分析结果:" +
rowData.analyzeResult +
"</div>" +
"</div>",
area: ["600px", "300px"],
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({
fontSize: "18px",
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", // 边框颜色(如果按钮有边框)
});
},
});
}
);
},
error: function () {
layer.msg("数据加载失败", { icon: 2 });
},
});
}
$(".chart-box").hide();
$(".list-view").click(function () {
if ($(this).hasClass("active")) return;
$(".list-view").addClass("active");
$(".chart-view").removeClass("active");
$(".chart-box").hide();
$("#demo2").show();
initTable(currentType, currentBidCode);
});
$(".chart-view").click(function () {
if ($(this).hasClass("active")) return;
$(".list-view").removeClass("active");
$(".chart-view").addClass("active");
$("#demo2").hide();
$("#demo2").next(".layui-table-view").remove();
$(".chart-box").show();
initLineChart();
initPieChart();
});
// 初始化左侧双折线图
function initLineChart() {
const leftChart = echarts.init(document.getElementById("left-chart"));
const option = {
textStyle: {
color: "#fff",
},
title: {
text: "进度偏差统计",
textStyle: {
// 标题文字样式
color: "#fff", // 标题颜色
fontSize: 18, // 可以同时设置其他样式
},
},
tooltip: {
trigger: "axis",
},
legend: {
show: true,
data: ["计划进度", "实际进度"],
textStyle: {
// 图例文字样式
color: "#fff", // 图例文字颜色
},
itemStyle: {
color: "auto",
},
},
grid: {
left: "3%",
right: "4%",
bottom: "3%",
containLabel: true,
},
xAxis: {
type: "category",
boundaryGap: false,
data: xData,
},
yAxis: {
type: "value",
},
series: [
{
name: "计划进度",
type: "line",
data: yData_1,
smooth: false,
lineStyle: {
color: "#5470C6",
width: 2,
},
itemStyle: {
color: "#5470C6",
borderWidth: 0, // 去除白色边框
},
symbolSize: 8, // 可以调整小圆点的大小
},
{
name: "实际进度",
type: "line",
data: yData_2,
smooth: false,
lineStyle: {
color: "#FF0000", // 红色
width: 2,
},
itemStyle: {
color: "#FF0000",
borderWidth: 0, // 去除白色边框
},
symbolSize: 10, // 可以调整小圆点的大小
},
],
};
leftChart.setOption(option);
// 响应式调整
window.addEventListener("resize", function () {
leftChart.resize();
});
}
// 初始化右侧饼图
function initPieChart() {
const rightChart = echarts.init(document.getElementById("right-chart"));
const option = {
title: {
text: "延误因素分布",
left: "center",
textStyle: {
color: "#fff",
fontSize: 18,
},
},
tooltip: {
trigger: "item",
formatter: "{a} {b}: {c} ",
},
legend: {
orient: "vertical", // 垂直排列
right: 60, // 距离右侧 20px
top: "center", // 垂直居中
textStyle: {
color: "#fff", // 图例文字颜色设为白色
borderWidth: 0,
borderColor: "transparent",
},
itemStyle: {
borderWidth: 0, // 关键点:去除 legend 图例项(小色块)的边框
},
data: ["大气影响", "设备判断延迟", "人员不足", "设计变更", "其他"],
},
series: [
{
name: "",
type: "pie",
radius: ["30%", "50%"], // 内半径 30%,外半径 60%,形成空心效果
center: ["30%", "50%"], // 确保饼图居中
avoidLabelOverlap: false,
label: {
show: false, // 隐藏连接线末端的标签
},
labelLine: {
show: false, // 隐藏连接线
},
itemStyle: {
borderRadius: 5, // 每块扇形圆角效果
borderColor: "#333", // 边框颜色(用于间隙)
borderWidth: 2, // 边框宽度1px 每边,形成 2px 间隙)
},
data: [
{
value: pieData_1[0],
name: "大气影响",
itemStyle: { color: "#67C23A" },
},
{
value: pieData_1[1],
name: "设备判断延迟",
itemStyle: { color: "#409EFF" },
},
{
value: pieData_1[2],
name: "人员不足",
itemStyle: { color: "#E6A23C" },
},
{
value: pieData_1[3],
name: "设计变更",
itemStyle: { color: "#909399" },
},
{
value: pieData_1[4],
name: "其他",
itemStyle: { color: "#F56C6C" },
},
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: "rgba(0, 0, 0, 0.5)",
},
},
},
],
};
rightChart.setOption(option);
// 响应式调整
window.addEventListener("resize", function () {
rightChart.resize();
});
}
// 获取图表数据
function getChartData() {
const url =
commonUrl + "screen/largeScreen/tb_project_progress_new/list4chart";
$.ajax({
url: url,
type: "get",
headers: {
authorization: sessionStorage.getItem("zhgd_token"),
},
success: function (data) {
console.log(data, "图表数据1===折线图");
if (data.rows && data.rows.length > 0) {
// initPieChart(data.rows);
const result = data.rows;
result.forEach((item) => {
xData.push(item.month);
yData_1.push(item.monthValue || 0);
yData_2.push(item.monthValue2 || 0);
});
}
},
});
const url2 =
commonUrl + "screen/largeScreen//tb_project_progress_new/list4bing";
$.ajax({
url: url2,
type: "get",
headers: {
authorization: sessionStorage.getItem("zhgd_token"),
},
success: function (data) {
console.log(data, "图表数据2===饼图");
if (data.rows && data.rows.length > 0) {
const result = data.rows;
result.forEach((item) => {
pieData.push(item.category);
pieData_1.push(item.monthValue || 0);
});
}
},
});
}
getChartData();