hb_zhgd_screen/pages/dataAnalysisOctober/projectManagement.html

729 lines
25 KiB
HTML
Raw Normal View History

2025-10-17 14:57:09 +08:00
<!DOCTYPE html>
2026-01-21 10:34:06 +08:00
<html lang="zh-CN">
2025-10-17 14:57:09 +08:00
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
2026-01-21 10:34:06 +08:00
<title>项目管理分析</title>
2025-10-17 14:57:09 +08:00
<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">
2026-01-21 10:34:06 +08:00
<link rel="stylesheet" href="../../css/coreTable.css" />
2025-10-17 14:57:09 +08:00
<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>
<script src="../../js/publics/4.3.0/echarts.min.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>
<style>
#proQuality {
width: 100%;
2026-01-24 17:14:53 +08:00
height: 130%;
2026-01-21 10:34:06 +08:00
position: relative;
overflow: hidden;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
/* 顶部查询区域 - 绝对定位,不占用主内容区域高度 */
.filter-bar {
position: absolute;
top: 0;
left: 1%;
right: 1%;
height: 50px;
2025-10-17 14:57:09 +08:00
display: flex;
2026-01-21 10:34:06 +08:00
align-items: center;
gap: 12px;
padding: 0 10px;
z-index: 10;
2025-10-17 14:57:09 +08:00
}
2025-10-18 16:58:04 +08:00
2026-01-21 10:34:06 +08:00
.date-range-input {
width: 280px;
height: 36px;
background: rgba(13, 34, 37, 0.6);
border: 1px solid rgba(0, 255, 255, 0.3);
border-radius: 2px;
color: #fff;
padding: 0 12px;
font-size: 14px;
box-sizing: border-box;
}
.date-range-input::placeholder {
color: rgba(255, 255, 255, 0.5);
}
.query-btn {
width: 80px;
height: 36px;
background: linear-gradient(180deg, #00FEFC 0%, #00B8B6 100%);
border: none;
border-radius: 2px;
color: #fff;
font-size: 14px;
cursor: pointer;
transition: all 0.3s;
}
.query-btn:hover {
background: linear-gradient(180deg, #00B8B6 0%, #00FEFC 100%);
box-shadow: 0 0 8px rgba(0, 254, 252, 0.5);
2025-10-17 14:57:09 +08:00
}
2025-10-18 16:58:04 +08:00
2026-01-24 17:14:53 +08:00
/* 顶部日期筛选区域(与工程质量分析保持一致) */
.top-date-filter {
display: flex;
align-items: center;
gap: 10px;
padding: 4px 20px;
background: rgba(13, 34, 37, 0.8);
border-bottom: 1px solid rgba(6, 189, 221, 0.3);
flex-shrink: 0;
}
.date-filter-label {
font-size: 14px;
color: #FFFFFF;
font-weight: bold;
white-space: nowrap;
}
.date-range-wrapper {
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;
}
.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: 240px;
}
2026-01-21 10:34:06 +08:00
/* 主内容区域 - 使用6列3行网格 */
.main-content {
2025-10-17 14:57:09 +08:00
width: 100%;
2026-01-21 10:34:06 +08:00
height: 100%;
display: grid;
/* 6列第一行占6列第二行左右各3列(1/2)第三行左边4列(2/3)右边2列(1/3) */
grid-template-columns: repeat(6, 1fr);
/* 3行第一行2/5高度第二行和第三行各1.5/5高度 */
/* 2/5 = 4fr, 1.5/5 = 3fr, 1.5/5 = 3fr */
grid-template-rows: 4fr 3fr 3fr;
gap: 1%;
min-height: 0;
/* 添加顶部内边距,避免被 filter-bar 遮挡 */
/* padding-top: 60px; */
box-sizing: border-box;
}
.panel {
border: 1px solid rgba(0, 255, 255, 0.15);
box-shadow: 0 0 8px rgba(0, 255, 255, 0.15);
border-radius: 3px;
overflow: hidden;
position: relative;
background-image: url("../../img/dataAnalysisOctober/proQualityAnalysis/common_bg.png");
2025-10-17 14:57:09 +08:00
display: flex;
2026-01-21 10:34:06 +08:00
flex-direction: column;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
.panel-title {
height: 40px;
2025-10-17 14:57:09 +08:00
display: flex;
2026-01-21 10:34:06 +08:00
align-items: center;
padding: 0 18px;
font-size: 16px;
color: #ffffff;
font-weight: bold;
gap: 8px;
flex-shrink: 0;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
.title-indicator {
width: 4px;
height: 18px;
background: linear-gradient(180deg, #00FEFC 0%, #00B8B6 100%);
border-radius: 2px;
flex-shrink: 0;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
.title-text {
flex: 1;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
.panel-title .info-icon {
margin-left: auto;
width: 16px;
height: 16px;
cursor: pointer;
opacity: 0.7;
font-size: 14px;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
.panel-body {
flex: 1;
padding: 4px 10px;
box-sizing: border-box;
overflow: hidden;
min-height: 0;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
/* 第一行:项目信息 - 占整个宽度 */
.panel-project-info {
grid-column: 1 / 7;
grid-row: 1 / 2;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
/* 第二行:项目支出趋势 - 左边 */
.panel-expenditure-trend {
grid-column: 1 / 4;
grid-row: 2 / 3;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
/* 第二行:项目支出占比 - 右边 */
.panel-expenditure-proportion {
grid-column: 4 / 7;
grid-row: 2 / 3;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
/* 第三行:项目风险 - 左边2/3 */
.panel-project-risk {
grid-column: 1 / 5;
grid-row: 3 / 4;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
/* 第三行:分析预警 - 右边1/3 */
.panel-analysis-warning {
grid-column: 5 / 7;
grid-row: 3 / 4;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
.chart-container {
width: 100%;
2025-10-17 14:57:09 +08:00
height: 100%;
}
2026-01-21 10:34:06 +08:00
/* 项目信息面板内部布局 - 使用4列2行网格 */
.project-info-content {
2025-10-17 14:57:09 +08:00
width: 100%;
2026-01-21 10:34:06 +08:00
height: 100%;
display: grid;
/* 4列第一行 1列、1列、2列第二行 2列、2列 */
grid-template-columns: repeat(6, 1fr);
/* 2行第一行稍高第二行稍低约3:2 */
grid-template-rows: 2fr 2fr;
/* gap: 1%; */
min-height: 0;
gap: 4px;
2025-10-17 14:57:09 +08:00
}
2025-10-18 16:58:04 +08:00
2026-01-21 10:34:06 +08:00
/* 子模块样式 */
.sub-module {
border: 1px solid rgba(0, 255, 255, 0.2);
border-radius: 2px;
background: rgba(13, 34, 37, 0.3);
padding: 10px;
box-sizing: border-box;
2025-10-17 14:57:09 +08:00
display: flex;
2026-01-21 10:34:06 +08:00
flex-direction: column;
overflow: hidden;
}
.sub-module-title {
height: 30px;
display: flex;
align-items: center;
gap: 6px;
2025-10-17 14:57:09 +08:00
font-size: 14px;
2026-01-21 10:34:06 +08:00
color: #ffffff;
font-weight: 500;
flex-shrink: 0;
2025-10-17 14:57:09 +08:00
}
2025-10-18 16:58:04 +08:00
2026-01-21 10:34:06 +08:00
.sub-module-title .sub-title-indicator {
width: 3px;
height: 14px;
background: linear-gradient(180deg, #00FEFC 0%, #00B8B6 100%);
border-radius: 1px;
2025-10-17 14:57:09 +08:00
}
2025-10-18 16:58:04 +08:00
2026-01-21 10:34:06 +08:00
.sub-module-title .sub-info-icon {
margin-left: auto;
width: 14px;
height: 14px;
cursor: pointer;
opacity: 0.7;
font-size: 12px;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
.sub-module-body {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
min-height: 0;
}
/* 第一行:土建工序进度 - 左上 */
.sub-module-civil-progress {
grid-column: 1 / 2;
grid-row: 1 / 2;
}
/* 第一行:电气工序进度 - 中上 */
.sub-module-electrical-progress {
grid-column: 2 / 3;
grid-row: 1 / 2;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
/* 第一行:土建专业 - 右上占2列 */
.sub-module-civil-chart {
grid-column: 3 / 7;
grid-row: 1 / 2;
}
/* 第二行:风险分析 - 左下占2列 */
.sub-module-risk-analysis {
grid-column: 1 / 3;
grid-row: 2 / 3;
}
/* 第二行:电气专业 - 右下占2列 */
.sub-module-electrical-chart {
grid-column: 3 / 7;
grid-row: 2 / 3;
}
/* 进度指标样式 */
.progress-indicators {
display: flex;
justify-content: space-around;
align-items: center;
2025-10-17 14:57:09 +08:00
width: 100%;
height: 100%;
2026-01-21 10:34:06 +08:00
gap: 20px;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
.progress-indicator {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
}
.progress-number {
font-size: 20px;
font-weight: bold;
color: #00FEFC;
line-height: 1;
text-shadow: 0 0 10px rgba(0, 254, 252, 0.5);
}
.progress-label {
font-size: 13px;
color: rgba(255, 255, 255, 0.8);
text-align: center;
}
/* 项目风险模块样式 */
.risk-content-wrapper {
2025-10-17 14:57:09 +08:00
width: 100%;
height: 100%;
2026-01-21 10:34:06 +08:00
display: flex;
gap: 15px;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
.risk-chart-wrapper {
flex: 1;
min-width: 0;
2026-01-24 17:14:53 +08:00
display: flex;
flex-direction: column;
}
.total-risk-display {
text-align: center;
color: #fff;
font-size: 16px;
font-weight: bold;
padding: 10px 0;
margin-top: 10px;
border-top: 1px solid rgba(0, 255, 255, 0.3);
2026-01-21 10:34:06 +08:00
}
.risk-stats-wrapper {
width: 200px;
2025-10-17 14:57:09 +08:00
display: flex;
2026-01-21 10:34:06 +08:00
flex-direction: column;
gap: 15px;
2025-10-17 14:57:09 +08:00
justify-content: center;
}
2026-01-21 10:34:06 +08:00
.risk-stat-item {
display: flex;
align-items: center;
gap: 12px;
padding: 10px;
background: rgba(13, 34, 37, 0.4);
border: 1px solid rgba(0, 255, 255, 0.2);
border-radius: 2px;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
.risk-stat-icon {
font-size: 24px;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
2025-10-17 14:57:09 +08:00
flex-shrink: 0;
}
2026-01-21 10:34:06 +08:00
.risk-stat-content {
flex: 1;
2025-10-17 14:57:09 +08:00
display: flex;
flex-direction: column;
2026-01-21 10:34:06 +08:00
gap: 4px;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
.risk-stat-value {
font-size: 20px;
font-weight: bold;
color: #00FEFC;
line-height: 1;
2025-10-17 14:57:09 +08:00
}
2026-01-21 10:34:06 +08:00
.risk-stat-label {
font-size: 12px;
color: rgba(255, 255, 255, 0.8);
}
/* 分析预警模块样式 */
.warning-tabs {
display: flex;
gap: 8px;
padding: 0 0 10px 0;
flex-shrink: 0;
}
.warning-tab {
padding: 4px 10px;
border: 1px solid rgba(0, 255, 255, 0.5);
border-radius: 2px;
color: #fff;
cursor: pointer;
font-size: 12px;
transition: all 0.3s;
}
.warning-tab:hover {
background: rgba(0, 255, 255, 0.1);
}
.warning-tab.active {
background: rgba(0, 255, 255, 0.15);
border-color: #00FEFC;
}
.warning-table-wrapper {
flex: 1;
overflow-y: auto;
min-height: 0;
}
.warning-table {
width: 100%;
border-collapse: collapse;
font-size: 12px;
color: #fff;
}
.warning-table thead {
background: rgba(0, 255, 255, 0.1);
position: sticky;
top: 0;
z-index: 10;
}
.warning-table th {
padding: 8px 6px;
text-align: center;
border: 1px solid rgba(0, 255, 255, 0.2);
font-weight: 500;
color: #00FEFC;
font-size: 12px;
}
.warning-table td {
padding: 6px;
text-align: center;
border: 1px solid rgba(0, 255, 255, 0.15);
color: rgba(255, 255, 255, 0.9);
font-size: 12px;
}
.warning-table tbody tr:hover {
background: rgba(0, 255, 255, 0.05);
}
.warning-action {
color: #00FEFC;
cursor: pointer;
text-decoration: underline;
}
.warning-action:hover {
color: #1CFFA3;
}
/* 滚动条样式 */
.warning-table-wrapper::-webkit-scrollbar {
width: 6px;
}
.warning-table-wrapper::-webkit-scrollbar-track {
background: rgba(13, 34, 37, 0.3);
border-radius: 3px;
}
.warning-table-wrapper::-webkit-scrollbar-thumb {
background: rgba(0, 255, 255, 0.3);
border-radius: 3px;
}
.warning-table-wrapper::-webkit-scrollbar-thumb:hover {
background: rgba(0, 255, 255, 0.5);
2025-10-17 14:57:09 +08:00
}
</style>
</head>
<body>
2026-01-21 10:34:06 +08:00
<div id="proQuality">
2026-01-24 17:14:53 +08:00
<!-- 顶部日期筛选区域(与工程质量分析保持一致) -->
<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>
2026-01-21 10:34:06 +08:00
<!-- 主内容区域 -->
<div class="main-content">
<!-- 项目信息 - 第一行,占整个宽度 -->
<div class="panel panel-project-info">
<div class="panel-title">
<span class="title-indicator"></span>
<span class="title-text">项目信息</span>
<span class="info-icon"></span>
2025-10-21 13:38:20 +08:00
</div>
2026-01-21 10:34:06 +08:00
<div class="panel-body">
<div class="project-info-content">
<!-- 土建工序进度 - 左上 -->
<div class="sub-module sub-module-civil-progress">
<div class="sub-module-title">
<span class="sub-title-indicator"></span>
<span>土建工序进度</span>
<span class="sub-info-icon"></span>
</div>
<div class="sub-module-body">
<div class="progress-indicators">
<div class="progress-indicator">
<div class="progress-number" id="civilTotal">10</div>
<div class="progress-label">土建总工序</div>
</div>
<div class="progress-indicator">
<div class="progress-number" id="civilCompleted">5</div>
<div class="progress-label">已完成工序</div>
</div>
</div>
</div>
</div>
2025-10-21 13:38:20 +08:00
2026-01-21 10:34:06 +08:00
<!-- 电气工序进度 - 中上 -->
<div class="sub-module sub-module-electrical-progress">
<div class="sub-module-title">
<span class="sub-title-indicator"></span>
<span>电气工序进度</span>
<span class="sub-info-icon"></span>
</div>
<div class="sub-module-body">
<div class="progress-indicators">
<div class="progress-indicator">
<div class="progress-number" id="electricalTotal">10</div>
<div class="progress-label">电气总工序</div>
</div>
<div class="progress-indicator">
<div class="progress-number" id="electricalCompleted">5</div>
<div class="progress-label">已完成工序</div>
</div>
</div>
</div>
</div>
2025-10-21 13:38:20 +08:00
2026-01-21 10:34:06 +08:00
<!-- 土建专业 - 右上占2列 -->
<div class="sub-module sub-module-civil-chart">
<div class="sub-module-title">
<span class="sub-title-indicator"></span>
<span>土建专业</span>
<span class="sub-info-icon"></span>
</div>
<div class="sub-module-body">
<div id="civilSpecialtyChart" class="chart-container"></div>
</div>
</div>
2025-10-21 13:38:20 +08:00
2026-01-21 10:34:06 +08:00
<!-- 风险分析 - 左下占2列 -->
<div class="sub-module sub-module-risk-analysis">
<div class="sub-module-title">
<span class="sub-title-indicator"></span>
<span>风险分析</span>
</div>
<div class="sub-module-body">
<div id="riskAnalysisChart" class="chart-container"></div>
</div>
</div>
2025-10-21 13:38:20 +08:00
2026-01-21 10:34:06 +08:00
<!-- 电气专业 - 右下占2列 -->
<div class="sub-module sub-module-electrical-chart">
<div class="sub-module-title">
<span class="sub-title-indicator"></span>
<span>电气专业</span>
<span class="sub-info-icon"></span>
</div>
<div class="sub-module-body">
<div id="electricalSpecialtyChart" class="chart-container"></div>
</div>
</div>
2025-10-17 14:57:09 +08:00
</div>
2026-01-21 10:34:06 +08:00
</div>
</div>
2025-10-17 14:57:09 +08:00
2026-01-21 10:34:06 +08:00
<!-- 项目支出趋势 - 第二行,左边 -->
<div class="panel panel-expenditure-trend">
<div class="panel-title">
<span class="title-indicator"></span>
<span class="title-text">项目支出趋势</span>
<span class="info-icon"></span>
</div>
<div class="panel-body">
<div id="expenditureTrendChart" class="chart-container"></div>
</div>
</div>
2025-10-17 14:57:09 +08:00
2026-01-21 10:34:06 +08:00
<!-- 项目支出占比 - 第二行,右边 -->
<div class="panel panel-expenditure-proportion">
<div class="panel-title">
<span class="title-indicator"></span>
<span class="title-text">项目支出占比</span>
<span class="info-icon"></span>
2025-10-17 14:57:09 +08:00
</div>
2026-01-21 10:34:06 +08:00
<div class="panel-body">
<div id="expenditureProportionChart" class="chart-container"></div>
2025-10-17 14:57:09 +08:00
</div>
</div>
2026-01-21 10:34:06 +08:00
<!-- 项目风险 - 第三行左边2/3 -->
<div class="panel panel-project-risk">
<div class="panel-title">
<span class="title-indicator"></span>
<span class="title-text">项目风险</span>
<span class="info-icon"></span>
2025-10-17 14:57:09 +08:00
</div>
2026-01-21 10:34:06 +08:00
<div class="panel-body">
<div class="risk-content-wrapper">
<div class="risk-chart-wrapper">
<div id="projectRiskChart" class="chart-container"></div>
2026-01-24 17:14:53 +08:00
<div class="total-risk-display" id="totalRiskDisplay">总风险数量0个</div>
2025-10-17 14:57:09 +08:00
</div>
2026-01-21 10:34:06 +08:00
<div class="risk-stats-wrapper">
<div class="risk-stat-item">
<div class="risk-stat-icon">📄</div>
<div class="risk-stat-content">
<div class="risk-stat-value" id="closedRisk">18</div>
<div class="risk-stat-label">已销号风险</div>
</div>
</div>
<div class="risk-stat-item">
<div class="risk-stat-icon">🛡️</div>
<div class="risk-stat-content">
<div class="risk-stat-value" id="remainingRisk">18</div>
<div class="risk-stat-label">剩余风险</div>
</div>
</div>
<div class="risk-stat-item">
<div class="risk-stat-icon">⚠️</div>
<div class="risk-stat-content">
<div class="risk-stat-value" id="remainingLevel2Risk">18</div>
<div class="risk-stat-label">剩余二级及以上风险</div>
</div>
2025-10-17 14:57:09 +08:00
</div>
</div>
</div>
</div>
2026-01-21 10:34:06 +08:00
</div>
<!-- 分析预警 - 第三行右边1/3 -->
<div class="panel panel-analysis-warning">
<div class="panel-title">
<span class="title-indicator"></span>
<span class="title-text">分析预警</span>
<span class="info-icon"></span>
</div>
<div class="panel-body">
<div class="warning-tabs">
<div class="warning-tab active" data-type="all" onclick="filterWarning('all')">全部</div>
<div class="warning-tab" data-type="progress" onclick="filterWarning('progress')">进度</div>
<div class="warning-tab" data-type="cost" onclick="filterWarning('cost')">成本</div>
<div class="warning-tab" data-type="risk" onclick="filterWarning('risk')">风险</div>
</div>
<div class="warning-table-wrapper">
<table class="warning-table" id="warningTable">
<thead>
<tr>
<th>序号</th>
<th>预警时间</th>
<th>预警类别</th>
<th>预警内容</th>
<th>操作</th>
</tr>
</thead>
<tbody id="warningTableBody">
<!-- 数据将通过JS动态填充 -->
</tbody>
</table>
2025-10-17 14:57:09 +08:00
</div>
</div>
</div>
</div>
</div>
</body>
<script src="../../js/pages/dataAnalysisOctober/projectManagement.js" type="text/javascript"></script>
2026-01-21 10:34:06 +08:00
</html>