Merge remote-tracking branch 'origin/master'

# Conflicts:
#	js/pages/newDataAnalysis/newDataAnalysis.js
This commit is contained in:
syruan 2025-07-23 22:13:41 +08:00
commit 638f6e7bb6
6 changed files with 657 additions and 49 deletions

View File

@ -0,0 +1,30 @@
.tap-box {
margin-top: 30px;
padding: 0 10px;
display: flex;
}
.tap-box div {
padding: 4px 10px;
border-radius: 5px;
cursor: pointer;
border: 1px solid #e0e0e0;
}
.tap-box div:last-child {
margin-left: 10px;
}
.active {
background-color: #0052cc;
}
.chart-box {
padding: 10px;
display: flex;
}
.chart-box-left,
.chart-box-right {
width: 50%;
height: 400px;
}

View File

@ -1,56 +1,68 @@
let table, layer, form;
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)
}
}
})
$('#indexIframe').attr('src','proQualityAnalysis.html');
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);
};
},
});
$("#indexIframe").attr("src", "proQualityAnalysis.html");
});
/* 切换数据 */
function changeData(that, type) {
let src = '';
const bidCode = parent.$('#bidPro').val();
$(".ul-box li").each(function () {
if ($(this).hasClass("check")) {
$(this).removeClass("check").addClass("nocheck");
let src = "";
const bidCode = parent.$("#bidPro").val();
$(".ul-box li").each(function () {
if ($(this).hasClass("check")) {
$(this).removeClass("check").addClass("nocheck");
}
});
$(that).removeClass("nocheck").addClass("check");
if (type == 1) {
// 工程质量分析
src = "proQualityAnalysis.html";
} else if (type == 2) {
// 工程安全分析
src = "engineeringSafetyAnalysis.html";
} else if (type == 3) {
// 工程进度分析
src = "projectProgress.html";
} else if (type == 4) {
// 资源利用率分析
src = "";
} else if (type == 5) {
// 节能减排分析
src = "";
} else if (type == 6) {
// 工人效率分析
src = "workerEfficiencyAnalysis.html";
} else if (type == 7) {
// 环境监测分析
src = "environDetection.html";
} else if (type == 8) {
// 项目管理分析
src = "projectManagement.html";
} else if (type == 9) {
// 整体效能分析
src = "overallEfficiency.html";
} else if (type == 10) {
// 风险值班分析
src = "";
} else if (type == 11) {
// 穿戴设备监测设备指标分析
src = "";
} else if (type == 12) {
// 延期原因分析
src = "";
}
});
$(that).removeClass("nocheck").addClass("check");
if(type == 1){ // 工程质量分析
src = 'proQualityAnalysis.html';
}else if(type == 2){ // 工程安全分析
src = '';
}else if(type == 3){ // 工程进度分析
src = '';
}else if(type == 4){ // 资源利用率分析
src = 'resourceRateAnalysis.html';
}else if(type == 5){ // 节能减排分析
src = '';
}else if(type == 6){ // 工人效率分析
src = 'workerEfficiencyAnalysis.html';
}else if(type == 7){ // 环境监测分析
src = 'environDetection.html';
}else if(type == 8){ // 项目管理分析
src = '';
}else if(type == 9){ // 整体效能分析
src = 'overallEfficiency.html';
}else if(type == 10){ // 风险值班分析
src = '';
}else if(type == 11){ // 穿戴设备监测设备指标分析
src = '';
}else if(type == 12){ // 延期原因分析
src = '';
}
$('#indexIframe').attr('src',src);
$("#indexIframe").attr("src", src);
}

View File

@ -0,0 +1,144 @@
let table, layer, form;
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.$("#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/tb_project_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", // 规定数据状态的字段名称默认code
statusCode: 200, // 规定成功的状态码默认0
countName: "count", // 规定数据总数的字段名称默认count
dataName: "rows", // 规定数据列表的字段名称默认data
},
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) {
// console.log(res);
},
});
function setCols(type) {
if (type === 1) {
// 工程质量分析
return [
{ type: "numbers", title: "序号", width: "10%" }, // 添加序号列
{
field: "taskName",
title: "工程名称",
align: "center",
},
{
field: "projectNumber",
title: "任务名称",
align: "center",
},
{
field: "planStartTime",
title: "计划开始时间",
align: "center",
},
{
field: "planEndTime",
title: "实际开始时间",
align: "center",
},
{
field: "diffDay",
title: "偏差天数",
align: "center",
},
{
field: "planCost",
title: "成本预算",
align: "center",
},
{
field: "actualCost",
title: "实际成本",
align: "center",
},
{
field: "riskLevel",
title: "风险等级",
align: "center",
},
{
field: "suggestion",
title: "建议策略",
align: "center",
},
{
title: "操作",
align: "center",
templet: (d) => {
let text = "";
text +=
'<a style="color: #007bff;cursor: pointer;font-size: 16px">导出</a>';
return text;
},
},
];
}
}
}

View File

@ -0,0 +1,315 @@
let table, layer, form;
let currentType = 1;
let currentBidCode = "";
// 将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" },
{ field: "delayActor", title: "延误因素分析", align: "center" },
{
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.$("#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.$("#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" });
}
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 });
}
},
error: function () {
layer.msg("数据加载失败", { icon: 2 });
},
});
}
$(".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: {
data: ["计划进度", "实际进度"],
textStyle: {
// 图例文字样式
color: "#fff", // 图例文字颜色
},
itemStyle: {
color: function (name) {
return name === "计划进度" ? "#5470C6" : "#FF0000";
},
},
},
grid: {
left: "3%",
right: "4%",
bottom: "3%",
containLabel: true,
},
xAxis: {
type: "category",
boundaryGap: false,
data: ["一月", "二月", "三月", "四月", "五月", "六月"],
},
yAxis: {
type: "value",
},
series: [
{
name: "计划进度",
type: "line",
data: [120, 132, 101, 134, 90, 230],
smooth: false,
lineStyle: {
color: "#5470C6",
width: 2,
},
itemStyle: {
color: "#5470C6",
},
},
{
name: "实际进度",
type: "line",
data: [100, 120, 90, 110, 80, 150],
smooth: false,
lineStyle: {
color: "#FF0000", // 红色
width: 2,
},
itemStyle: {
color: "#FF0000",
},
},
],
};
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} ({d}%)",
},
legend: {
orient: "vertical", // 垂直排列
right: 60, // 距离右侧 20px
top: "center", // 垂直居中
textStyle: {
color: "#fff", // 图例文字颜色设为白色
},
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: "#000", // 边框颜色(用于间隙)
borderWidth: 1, // 边框宽度1px 每边,形成 2px 间隙)
},
data: [
{
value: 335,
name: "大气影响",
itemStyle: { color: "#67C23A" },
},
{
value: 210,
name: "设备判断延迟",
itemStyle: { color: "#409EFF" },
},
{
value: 154,
name: "人员不足",
itemStyle: { color: "#E6A23C" },
},
{
value: 154,
name: "设计变更",
itemStyle: { color: "#909399" },
},
{
value: 154,
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();
});
}

View File

@ -0,0 +1,45 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../../css/font.css">
<link rel="stylesheet" href="../../plugin/layui-v2.9.7/layui/css/layui.css">
<link rel="stylesheet" href="../../css/dataAnalysis/dataAnalysis.css">
<link rel="stylesheet" href="../../css/shuiYin/shuiYin.css">
<link rel="stylesheet" href="../../css/coreTable.css" />
<link rel="stylesheet" href="../../css/accessMge/accessMge.css">
<script src="../../js/publics/sm4.js" type="text/javascript"></script>
<script src="../../js/publics/jquery-3.6.0.min.js" type="text/javascript"></script>
<script src="../../js/publics/public.js"></script>
<script src="../../plugin/scroll/jquery.nicescroll.min.js"></script>
<!--&lt;!&ndash; <script src="../../js/publics/echarts.js"></script>&ndash;&gt;-->
<script src="../../plugin/layui-v2.9.7/layui/layui.js"></script>
<script src="../../js/publics/aescbc.js"></script>
<script src="../../js/publics/sm3.js"></script>
<script src="../../api/commonRequest.js"></script>
<!-- <script src="../../js/publics/shuiYin.js"></script> -->
<script src="../../plugin/watermark.js"></script>
<title>工程管理分析</title>
</head>
<script type="text/javascript">
let text = nickName + "\r\n" + roleName + "\r\n" + '建设部';
// watermark.load({ watermark_txt: text });
</script>
<body>
<table id="demo2" lay-filter="test"></table>
</body>
<style>
.layui-table-init {
background-color: transparent !important;
}
#demo2 {
margin-top: 26px;
}
</style>
<script src="../../js/pages/newDataAnalysis/projectManagement.js" type="text/javascript"></script>
</html>

View File

@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../../css/font.css">
<link rel="stylesheet" href="../../plugin/layui-v2.9.7/layui/css/layui.css">
<link rel="stylesheet" href="../../css/dataAnalysis/dataAnalysis.css">
<link rel="stylesheet" href="../../css/shuiYin/shuiYin.css">
<link rel="stylesheet" href="../../css/coreTable.css" />
<link rel="stylesheet" href="../../css/accessMge/accessMge.css">
<script src="../../js/publics/echarts.js"></script>
<script src="../../js/publics/sm4.js" type="text/javascript"></script>
<script src="../../js/publics/jquery-3.6.0.min.js" type="text/javascript"></script>
<script src="../../js/publics/public.js"></script>
<script src="../../plugin/scroll/jquery.nicescroll.min.js"></script>
<!--&lt;!&ndash; <script src="../../js/publics/echarts.js"></script>&ndash;&gt;-->
<script src="../../plugin/layui-v2.9.7/layui/layui.js"></script>
<script src="../../js/publics/aescbc.js"></script>
<script src="../../js/publics/sm3.js"></script>
<script src="../../api/commonRequest.js"></script>
<!-- <script src="../../js/publics/shuiYin.js"></script> -->
<script src="../../plugin/watermark.js"></script>
<link rel="stylesheet" href="../../css/newDataAnalysis/projectProgress.css">
<title>工程进度分析</title>
</head>
<script type="text/javascript">
let text = nickName + "\r\n" + roleName + "\r\n" + '建设部';
// watermark.load({ watermark_txt: text });
</script>
<body>
<!-- tap 切换按钮 -->
<div class="tap-box">
<div class="list-view active">列表视图</div>
<div class="chart-view">图表视图</div>
</div>
<!-- 列表视图 -->
<table id="demo2" class="list-table" lay-filter="test"></table>
<!-- 图表视图 -->
<div class="chart-box">
<div class="chart-box-left" id="left-chart">
左侧折线图
</div>
<div class="chart-box-right" id="right-chart">
右侧饼图
</div>
</div>
</body>
<style>
.layui-table-init {
background-color: transparent !important;
}
#demo2 {
margin-top: 26px;
}
</style>
<script src="../../js/pages/newDataAnalysis/projectProgress.js" type="text/javascript"></script>
</html>