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>
|