hb_zhgd_screen/pages/dataAnalysisOctober/projectProgress.html

897 lines
27 KiB
HTML
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.

<!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/4.3.0/echarts.min.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>
<script src="../../js/publics/echarts.js"></script>
<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>
<link rel="stylesheet" href="../../css/newDataAnalysis/projectProgress.css">
<title>工程进度分析</title>
</head>
<body>
<div id="proQuality">
<!-- 顶部日期筛选区域 -->
<div class="top-date-filter">
<div class="date-filter-label">日期范围:</div>
<div class="date-range-wrapper">
<input type="text" id="dateRange" class="search-input date-input" placeholder="请选择日期范围" readonly>
</div>
</div>
<!-- 左右两个面板容器 -->
<div class="panels-container">
<!-- 左侧面板:变电土建专业 -->
<div class="panel panel-left">
<!-- 左上:工序整体进度(环形图+统计卡片) -->
<div class="module module-top-left">
<div class="module-title">
<span class="title-indicator"></span>
<span class="title-text">变电土建专业</span>
</div>
<div class="module-content">
<div class="progress-chart-wrapper">
<div class="sub-module-title">土建专业工序整体进度</div>
<div id="civilProgressChart" class="chart-container"></div>
</div>
<div class="statistics-wrapper">
<div class="sub-module-title">土建专业工序情况统计</div>
<div class="statistics-container">
<div class="stat-item">
<div class="stat-content">
<div class="stat-value" id="civilTotalProcesses">10</div>
<div class="stat-label">土建总工序</div>
</div>
<div class="stat-icon">
<img src="../../img/dataAnalysisOctober/projectProgress/left_1.png" alt="总工序">
</div>
</div>
<div class="stat-item">
<div class="stat-content">
<div class="stat-value" id="civilCompletedProcesses">5</div>
<div class="stat-label">已完成工序</div>
</div>
<div class="stat-icon">
<img src="../../img/dataAnalysisOctober/projectProgress/left_right_2.png"
alt="已完成">
</div>
</div>
<div class="stat-item stat-item-abnormal">
<div class="stat-content">
<div class="stat-value" id="civilAbnormalProcesses">3</div>
<div class="stat-label">异常工序</div>
</div>
<div class="stat-icon">
<img src="../../img/dataAnalysisOctober/projectProgress/left_right_3.png"
alt="异常">
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 中间:进度展示 -->
<div class="module module-middle">
<div class="module-title">
<span class="title-indicator"></span>
<span class="title-text">进度展示</span>
</div>
<div class="module-content">
<div id="civilProgressBarChart" class="chart-container"></div>
</div>
</div>
<!-- 左下:进度偏差分析 -->
<div class="module module-bottom-left">
<div class="module-title">
<span class="title-indicator"></span>
<span class="title-text">进度偏差分析</span>
</div>
<div class="module-content">
<div class="table-container">
<table id="civilDeviationTable" lay-filter="civilDeviationTable"></table>
</div>
</div>
</div>
</div>
<!-- 右侧面板:变电电气专业 -->
<div class="panel panel-right">
<!-- 右上:工序整体进度(环形图+统计卡片) -->
<div class="module module-top-right">
<div class="module-title">
<span class="title-indicator"></span>
<span class="title-text">变电电气专业</span>
</div>
<div class="module-content">
<div class="progress-chart-wrapper">
<div class="sub-module-title">变电专业工序整体进度</div>
<div id="electricalProgressChart" class="chart-container"></div>
</div>
<div class="statistics-wrapper">
<div class="sub-module-title">电气专业工序情况统计</div>
<div class="statistics-container">
<div class="stat-item">
<div class="stat-content">
<div class="stat-value" id="electricalTotalProcesses">10</div>
<div class="stat-label">电气总工序</div>
</div>
<div class="stat-icon">
<img src="../../img/dataAnalysisOctober/projectProgress/right_1.png" alt="总工序">
</div>
</div>
<div class="stat-item">
<div class="stat-content">
<div class="stat-value" id="electricalCompletedProcesses">5</div>
<div class="stat-label">已完成工序</div>
</div>
<div class="stat-icon">
<img src="../../img/dataAnalysisOctober/projectProgress/left_right_2.png"
alt="已完成">
</div>
</div>
<div class="stat-item stat-item-abnormal">
<div class="stat-content">
<div class="stat-value" id="electricalAbnormalProcesses">3</div>
<div class="stat-label">异常工序</div>
</div>
<div class="stat-icon">
<img src="../../img/dataAnalysisOctober/projectProgress/left_right_3.png"
alt="异常">
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 中间:进度展示 -->
<div class="module module-middle">
<div class="module-title">
<span class="title-indicator"></span>
<span class="title-text">进度展示</span>
</div>
<div class="module-content">
<div id="electricalProgressBarChart" class="chart-container"></div>
</div>
</div>
<!-- 右下:进度偏差分析 -->
<div class="module module-bottom-right">
<div class="module-title">
<span class="title-indicator"></span>
<span class="title-text">进度偏差分析</span>
</div>
<div class="module-content">
<div class="table-container">
<table id="electricalDeviationTable" lay-filter="electricalDeviationTable"></table>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 工序详情弹框 -->
<div id="processDetailModal" class="process-detail-modal">
<div class="modal-overlay" onclick="closeProcessDetailModal()"></div>
<div class="modal-content">
<div class="modal-header">
<span class="modal-title" id="processDetailModalTitle">工序详情</span>
<span class="modal-close" onclick="closeProcessDetailModal()">×</span>
</div>
<div class="modal-body">
<div class="modal-search-bar">
<input type="text" id="modalProcessKeywordInput" class="search-input" placeholder="输入关键字">
<button type="button" class="search-btn" onclick="queryModalProcessRecords()">查询</button>
</div>
<div class="modal-table-container">
<table id="modalProcessDetailTable" lay-filter="modalProcessDetailTable"></table>
</div>
</div>
</div>
</div>
</body>
<style>
#proQuality {
width: 100%;
height: 100%;
/* padding: 1%; */
box-sizing: border-box;
overflow: hidden;
}
.panels-container {
width: 100%;
height: 100%;
display: flex;
gap: 1%;
overflow: hidden;
}
.panel {
flex: 1;
height: 100%;
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 1.8fr 2fr 2fr;
gap: 1%;
overflow: hidden;
}
.module {
position: relative;
display: flex;
flex-direction: column;
box-sizing: border-box;
overflow: hidden;
min-height: 0;
background-image: url("../../img/dataAnalysisOctober/proQualityAnalysis/common_bg.png");
}
.module-title {
display: flex;
align-items: center;
height: 40px;
min-height: 40px;
margin-bottom: 10px;
padding-left: 18px;
flex-shrink: 0;
}
.title-indicator {
width: 4px;
height: 20px;
background: linear-gradient(180deg, #FF9C65 0%, #FFD700 100%);
margin-right: 10px;
flex-shrink: 0;
}
.title-text {
font-size: 16px;
font-weight: bold;
color: #FFFFFF;
white-space: nowrap;
flex: 1;
}
.module-content {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
min-height: 0;
height: 0;
padding: 0 10px 10px 10px;
}
/* 左上/右上模块:环形图+统计卡片布局 */
.module-top-left .module-content,
.module-top-right .module-content {
flex-direction: row;
align-items: center;
justify-content: space-between;
/* gap: 30px; */
padding: 0 20px 10px 20px;
}
.progress-chart-wrapper {
flex: 0 0 40%;
height: 100%;
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
min-width: 0;
position: relative;
}
.sub-module-title {
font-size: 14px;
color: #FFFFFF;
font-weight: bold;
margin-bottom: 8px;
padding-left: 5px;
flex-shrink: 0;
display: flex;
align-items: center;
gap: 8px;
width: 100%;
}
.sub-module-title::after {
content: '';
width: 18px;
height: 18px;
border-radius: 50%;
background: rgba(6, 189, 221, 0.6);
color: #FFFFFF;
font-size: 12px;
display: flex;
align-items: center;
justify-content: center;
cursor: help;
flex-shrink: 0;
}
.chart-container {
width: 100%;
flex: 1;
height: 0;
position: relative;
min-height: 0;
}
/* 统计指标容器 */
.statistics-wrapper {
flex: 0 0 60%;
height: 100%;
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
min-width: 0;
margin-right: 20px;
}
.statistics-container {
flex: 1;
height: 0;
display: flex;
justify-content: space-around;
gap: 15px;
min-width: 0;
width: 100%;
}
.stat-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 15px;
padding: 0 14px;
/* background: rgba(13, 34, 37, 0.6); */
/* border: 1px solid rgba(6, 189, 221, 0.4); */
/* border-radius: 8px; */
flex-shrink: 0;
transition: all 0.3s;
position: relative;
box-sizing: border-box;
}
.stat-item:hover {
background: rgba(13, 34, 37, 0.8);
border-color: rgba(6, 189, 221, 0.7);
box-shadow: 0 2px 12px rgba(6, 189, 221, 0.2);
}
.stat-icon {
width: 60px;
height: 60px;
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
position: relative;
}
.stat-icon::before {
content: '';
position: absolute;
width: 100%;
height: 100%;
border-radius: 50%;
background: rgba(6, 189, 221, 0.2);
box-shadow: 0 0 15px rgba(6, 189, 221, 0.5);
z-index: 0;
}
.stat-icon img {
width: 80%;
height: 80%;
object-fit: contain;
position: relative;
z-index: 1;
filter: drop-shadow(0 0 8px rgba(6, 189, 221, 0.8));
}
.stat-content {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 5px;
min-width: 0;
}
.stat-value {
font-size: 36px;
font-weight: bold;
color: #00FFB8;
line-height: 1;
}
.stat-label {
font-size: 14px;
color: #FFFFFF;
line-height: 1.3;
}
/* 异常工序特殊样式 */
.stat-item-abnormal {
border-color: rgba(255, 107, 107, 0.4);
}
.stat-item-abnormal:hover {
border-color: rgba(255, 107, 107, 0.7);
box-shadow: 0 2px 12px rgba(255, 107, 107, 0.2);
}
.stat-item-abnormal .stat-icon::before {
background: rgba(255, 107, 107, 0.2);
box-shadow: 0 0 15px rgba(255, 107, 107, 0.5);
}
.stat-item-abnormal .stat-icon img {
filter: drop-shadow(0 0 8px rgba(255, 107, 107, 0.8));
}
.stat-item-abnormal .stat-value {
color: #FF6B6B;
}
.stat-item-abnormal .stat-label {
color: #FF6B6B;
}
/* 搜索栏 */
.search-bar {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 15px;
flex-shrink: 0;
}
/* 进度搜索栏 */
.progress-search-bar {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 15px;
flex-shrink: 0;
padding: 0 10px;
}
.date-range-wrapper {
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;
}
.date-input {
width: 240px;
}
.search-input {
width: 160px;
height: 32px;
padding: 0 12px;
background: rgba(25, 62, 68, 0.6);
border: 1px solid rgba(6, 189, 221, 0.6);
border-radius: 2px;
color: #FFFFFF;
font-size: 14px;
transition: all 0.3s;
flex-shrink: 0;
}
.search-input:focus {
outline: none;
border-color: rgba(6, 189, 221, 1);
background: rgba(25, 62, 68, 0.8);
}
.search-input::placeholder {
color: rgba(255, 255, 255, 0.5);
}
.date-input {
width: 200px;
}
.search-btn {
height: 32px;
padding: 0 24px;
background: linear-gradient(135deg, #207E75 0%, #2A9D8F 100%);
border: none;
border-radius: 2px;
color: #FFFFFF;
cursor: pointer;
font-size: 14px;
transition: all 0.3s;
flex-shrink: 0;
}
.search-btn:hover {
background: linear-gradient(135deg, #2A9D8F 0%, #3AB5A5 100%);
box-shadow: 0 2px 8px rgba(6, 189, 221, 0.3);
}
.search-btn:active {
transform: translateY(1px);
}
/* 表格容器 */
.table-container {
flex: 1;
overflow-y: auto;
overflow-x: hidden;
position: relative;
min-height: 0;
}
/* 警告列表容器 */
.module-bottom-right .module-content {
overflow: hidden;
padding: 0 15px;
position: relative;
}
.warning-list {
width: 100%;
display: flex;
flex-direction: column;
position: relative;
overflow: hidden;
}
.warning-list-scroll {
gap: 0;
will-change: transform;
}
.warning-list-scroll .warning-item {
margin-bottom: 10px;
}
.warning-item {
display: flex;
align-items: flex-start;
padding: 10px 15px;
background: rgba(25, 62, 68, 0.3);
border-left: 3px solid #FF6B6B;
border-radius: 2px;
flex-shrink: 0;
}
.warning-icon {
width: 20px;
height: 20px;
margin-right: 10px;
flex-shrink: 0;
background-image: url("../../img/dataAnalysisOctober/proQualityAnalysis/icon.png");
background-size: contain;
background-repeat: no-repeat;
background-position: center;
}
.warning-text {
flex: 1;
font-size: 14px;
color: #FFFFFF;
line-height: 1.5;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
min-width: 0;
}
/* 无缝滚动动画 */
@keyframes scrollWarning {
from {
transform: translateY(0);
}
to {
transform: translateY(-50%);
}
}
.warning-list-scroll {
animation-name: scrollWarning;
animation-timing-function: linear;
animation-iteration-count: infinite;
}
.module-bottom-right:hover .warning-list-scroll {
animation-play-state: paused;
}
/* Layui表格样式覆盖 */
.module .layui-table {
background-color: transparent !important;
}
.module .layui-table thead tr {
background-color: rgba(13, 34, 37, 0.8) !important;
}
.module .layui-table thead th {
background-color: transparent !important;
color: #FFFFFF !important;
border-color: rgba(6, 189, 221, 0.3) !important;
font-weight: bold;
}
.module .layui-table tbody tr {
background-color: rgba(25, 62, 68, 0.3) !important;
}
.module .layui-table tbody tr:hover {
background-color: rgba(25, 62, 68, 0.6) !important;
}
.module .layui-table tbody td {
color: #FFFFFF !important;
border-color: rgba(6, 189, 221, 0.2) !important;
}
.module .layui-table-page {
background-color: transparent !important;
border-top: 1px solid rgba(6, 189, 221, 0.3) !important;
padding: 10px 0 !important;
}
.module .layui-table-page .layui-laypage {
margin: 0 !important;
}
.module .layui-table-page .layui-laypage a,
.module .layui-table-page .layui-laypage span {
color: #FFFFFF !important;
background-color: rgba(25, 62, 68, 0.6) !important;
border-color: rgba(6, 189, 221, 0.5) !important;
}
.module .layui-table-page .layui-laypage .layui-laypage-curr em {
background-color: #207E75 !important;
color: #FFFFFF !important;
}
.module .layui-table-page .layui-laypage a:hover {
background-color: rgba(6, 189, 221, 0.6) !important;
border-color: rgba(6, 189, 221, 0.8) !important;
}
.module .layui-table-page input {
background-color: rgba(25, 62, 68, 0.6) !important;
border-color: rgba(6, 189, 221, 0.5) !important;
color: #FFFFFF !important;
}
/* 滚动条样式 */
.module-content::-webkit-scrollbar,
.table-container::-webkit-scrollbar,
.warning-list::-webkit-scrollbar {
width: 6px;
height: 6px;
}
.module-content::-webkit-scrollbar-track,
.table-container::-webkit-scrollbar-track,
.warning-list::-webkit-scrollbar-track {
background: rgba(13, 34, 37, 0.5);
border-radius: 3px;
}
.module-content::-webkit-scrollbar-thumb,
.table-container::-webkit-scrollbar-thumb,
.warning-list::-webkit-scrollbar-thumb {
background: rgba(6, 189, 221, 0.5);
border-radius: 3px;
}
.module-content::-webkit-scrollbar-thumb:hover,
.table-container::-webkit-scrollbar-thumb:hover,
.warning-list::-webkit-scrollbar-thumb:hover {
background: rgba(6, 189, 221, 0.8);
}
/* 工序详情弹框样式 */
.process-detail-modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 9999;
}
.process-detail-modal.show {
display: flex;
align-items: center;
justify-content: center;
}
.process-detail-modal .modal-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.6);
backdrop-filter: blur(4px);
}
.process-detail-modal .modal-content {
position: relative;
width: 80%;
height: 70%;
background: rgba(13, 34, 37, 0.95);
border: 1px solid rgba(6, 189, 221, 0.6);
border-radius: 8px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
display: flex;
flex-direction: column;
overflow: hidden;
z-index: 10000;
}
.process-detail-modal .modal-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 15px 20px;
background: rgba(13, 34, 37, 0.9);
border-bottom: 1px solid rgba(6, 189, 221, 0.3);
flex-shrink: 0;
}
.process-detail-modal .modal-title {
font-size: 18px;
font-weight: bold;
color: #FFFFFF;
}
.process-detail-modal .modal-close {
font-size: 28px;
color: #FFFFFF;
cursor: pointer;
line-height: 1;
transition: color 0.3s;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
}
.process-detail-modal .modal-close:hover {
color: #00FFB8;
background: rgba(6, 189, 221, 0.2);
}
.process-detail-modal .modal-body {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
padding: 20px;
min-height: 0;
}
.process-detail-modal .modal-search-bar {
display: flex;
gap: 10px;
margin-bottom: 15px;
align-items: center;
flex-shrink: 0;
}
.process-detail-modal .modal-table-container {
flex: 1;
overflow-y: auto;
overflow-x: hidden;
min-height: 0;
}
/* 弹框内表格样式 */
#modalProcessDetailTable .layui-table {
background-color: transparent !important;
}
#modalProcessDetailTable .layui-table thead tr {
background-color: rgba(13, 34, 37, 0.8) !important;
}
#modalProcessDetailTable .layui-table thead th {
background-color: transparent !important;
color: #FFFFFF !important;
border-color: rgba(6, 189, 221, 0.3) !important;
font-weight: bold;
}
#modalProcessDetailTable .layui-table tbody tr {
background-color: rgba(25, 62, 68, 0.3) !important;
}
#modalProcessDetailTable .layui-table tbody tr:hover {
background-color: rgba(25, 62, 68, 0.6) !important;
}
#modalProcessDetailTable .layui-table tbody td {
color: #FFFFFF !important;
border-color: rgba(6, 189, 221, 0.2) !important;
}
#modalProcessDetailTable .layui-table-page {
background-color: transparent !important;
border-top: 1px solid rgba(6, 189, 221, 0.3) !important;
padding: 10px 0 !important;
}
#modalProcessDetailTable .layui-table-page .layui-laypage {
margin: 0 !important;
}
#modalProcessDetailTable .layui-table-page .layui-laypage a,
#modalProcessDetailTable .layui-table-page .layui-laypage span {
color: #FFFFFF !important;
background-color: rgba(25, 62, 68, 0.6) !important;
border-color: rgba(6, 189, 221, 0.5) !important;
}
#modalProcessDetailTable .layui-table-page .layui-laypage .layui-laypage-curr em {
background-color: #207E75 !important;
color: #FFFFFF !important;
}
#modalProcessDetailTable .layui-table-page .layui-laypage a:hover {
background-color: rgba(6, 189, 221, 0.6) !important;
border-color: rgba(6, 189, 221, 0.8) !important;
}
#modalProcessDetailTable .layui-table-page input {
background-color: rgba(25, 62, 68, 0.6) !important;
border-color: rgba(6, 189, 221, 0.5) !important;
color: #FFFFFF !important;
}
/* 为饼图和统计卡片添加点击样式 */
.chart-container,
.stat-item {
cursor: pointer;
}
.stat-item:hover {
background: rgba(13, 34, 37, 0.8);
border-color: rgba(6, 189, 221, 0.7);
box-shadow: 0 2px 12px rgba(6, 189, 221, 0.2);
}
</style>
<script src="../../js/pages/dataAnalysisOctober/projectProgress.js" type="text/javascript"></script>
</html>