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">
|
2026-01-26 15:51:06 +08:00
|
|
|
|
<link rel="stylesheet" href="../../css/tipCommon.css">
|
2025-10-17 14:57:09 +08:00
|
|
|
|
<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
|
|
|
|
}
|
2026-01-24 19:13:29 +08:00
|
|
|
|
|
|
|
|
|
|
/* 定制措施弹框样式 */
|
|
|
|
|
|
.strategy-modal {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
top: 0;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
display: none;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
z-index: 10000;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.strategy-modal.show {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.modal-overlay {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
top: 0;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
background: rgba(0, 0, 0, 0.6);
|
|
|
|
|
|
backdrop-filter: blur(4px);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.modal-content {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
width: 600px;
|
|
|
|
|
|
max-width: 90%;
|
|
|
|
|
|
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: 10001;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.modal-title {
|
|
|
|
|
|
font-size: 18px;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.modal-close:hover {
|
|
|
|
|
|
color: #00FFB8;
|
|
|
|
|
|
background: rgba(6, 189, 221, 0.2);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.modal-body {
|
|
|
|
|
|
flex: 1;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
|
padding: 20px;
|
|
|
|
|
|
min-height: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.strategy-form {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
gap: 20px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.form-item {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
gap: 8px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.form-label {
|
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
gap: 4px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.required {
|
|
|
|
|
|
color: #FF6B6B;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.form-textarea {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
min-height: 120px;
|
|
|
|
|
|
padding: 10px;
|
|
|
|
|
|
background: rgba(25, 62, 68, 0.6);
|
|
|
|
|
|
border: 1px solid rgba(6, 189, 221, 0.6);
|
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
|
resize: vertical;
|
|
|
|
|
|
font-family: inherit;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.form-textarea:focus {
|
|
|
|
|
|
outline: none;
|
|
|
|
|
|
border-color: rgba(6, 189, 221, 1);
|
|
|
|
|
|
background: rgba(25, 62, 68, 0.8);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.form-textarea::placeholder {
|
|
|
|
|
|
color: rgba(255, 255, 255, 0.5);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.upload-section {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
gap: 10px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.upload-btn {
|
|
|
|
|
|
display: inline-flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
gap: 8px;
|
|
|
|
|
|
padding: 8px 16px;
|
|
|
|
|
|
background: rgba(25, 62, 68, 0.6);
|
|
|
|
|
|
border: 1px solid rgba(6, 189, 221, 0.6);
|
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
transition: all 0.3s;
|
|
|
|
|
|
width: fit-content;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.upload-btn:hover {
|
|
|
|
|
|
background: rgba(25, 62, 68, 0.8);
|
|
|
|
|
|
border-color: rgba(6, 189, 221, 1);
|
|
|
|
|
|
box-shadow: 0 2px 8px rgba(6, 189, 221, 0.3);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.upload-btn:active {
|
|
|
|
|
|
transform: translateY(1px);
|
|
|
|
|
|
box-shadow: 0 1px 4px rgba(6, 189, 221, 0.2);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.upload-icon {
|
|
|
|
|
|
font-size: 16px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.file-info {
|
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
|
color: #00FFB8;
|
|
|
|
|
|
min-height: 20px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.file-tips {
|
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
|
color: rgba(255, 255, 255, 0.6);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.form-actions {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: flex-end;
|
|
|
|
|
|
gap: 12px;
|
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btn-confirm,
|
|
|
|
|
|
.btn-cancel {
|
|
|
|
|
|
padding: 8px 24px;
|
|
|
|
|
|
border: none;
|
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
transition: all 0.3s;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btn-confirm {
|
|
|
|
|
|
background: linear-gradient(135deg, #06BDDD 0%, #00D4FF 100%);
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btn-confirm:hover {
|
|
|
|
|
|
background: linear-gradient(135deg, #05A8C5 0%, #00B8E6 100%);
|
|
|
|
|
|
box-shadow: 0 4px 12px rgba(6, 189, 221, 0.4);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btn-confirm:active {
|
|
|
|
|
|
transform: translateY(1px);
|
|
|
|
|
|
box-shadow: 0 2px 6px rgba(6, 189, 221, 0.3);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btn-cancel {
|
|
|
|
|
|
background: rgba(255, 255, 255, 0.1);
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btn-cancel:hover {
|
|
|
|
|
|
background: rgba(255, 255, 255, 0.15);
|
|
|
|
|
|
border-color: rgba(255, 255, 255, 0.5);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btn-cancel:active {
|
|
|
|
|
|
transform: translateY(1px);
|
|
|
|
|
|
}
|
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>
|
2026-01-26 15:51:06 +08:00
|
|
|
|
|
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>
|
2026-01-26 15:51:06 +08:00
|
|
|
|
<span style="flex: 1;">土建工序进度</span>
|
|
|
|
|
|
<span class="info-icon">
|
|
|
|
|
|
<img src="../../img/dataAnalysisOctober/common_icon.png" alt=""
|
|
|
|
|
|
style="cursor: pointer; width: 20px; height: 20px;margin-right: 10px;margin-top: 5px;">
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="tooltip-box">
|
|
|
|
|
|
土建总工序:统计土建专业所有工序数量 <br>
|
|
|
|
|
|
已完成工序:统计土建专业已完成工序的数量
|
2026-01-21 10:34:06 +08:00
|
|
|
|
</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>
|
2026-01-26 15:51:06 +08:00
|
|
|
|
<span style="flex: 1;">电气工序进度</span>
|
|
|
|
|
|
<span class="info-icon">
|
|
|
|
|
|
<img src="../../img/dataAnalysisOctober/common_icon.png" alt=""
|
|
|
|
|
|
style="cursor: pointer; width: 20px; height: 20px;margin-right: 10px;margin-top: 5px;">
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="tooltip-box">
|
|
|
|
|
|
电气总工序:统计电气专业所有工序数量 <br>
|
|
|
|
|
|
已完成工序:统计电气专业已完成工序的数量
|
2026-01-21 10:34:06 +08:00
|
|
|
|
</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>
|
2026-01-26 15:51:06 +08:00
|
|
|
|
<span style="flex: 1;">土建专业</span>
|
|
|
|
|
|
<span class="info-icon">
|
|
|
|
|
|
<img src="../../img/dataAnalysisOctober/common_icon.png" alt=""
|
|
|
|
|
|
style="cursor: pointer; width: 20px; height: 20px;margin-right: 10px;margin-top: 5px;">
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="tooltip-box">
|
|
|
|
|
|
数据取自e基建2.0,根据数据进
|
|
|
|
|
|
行工序阶段进度对比展示。
|
2026-01-21 10:34:06 +08:00
|
|
|
|
</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>
|
2026-01-26 15:53:27 +08:00
|
|
|
|
<span style="flex: 1;">风险分析</span>
|
|
|
|
|
|
<span class="info-icon">
|
|
|
|
|
|
<img src="../../img/dataAnalysisOctober/common_icon.png" alt=""
|
|
|
|
|
|
style="cursor: pointer; width: 20px; height: 20px;margin-right: 10px;margin-top: 5px;">
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="tooltip-box">
|
|
|
|
|
|
系统获取e基建月计划数据,分析统计
|
|
|
|
|
|
风险分类统计
|
|
|
|
|
|
月计划的各风险数量,对各风险数量进行
|
2026-01-21 10:34:06 +08:00
|
|
|
|
</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>
|
2026-01-26 15:51:06 +08:00
|
|
|
|
<span style="flex: 1;">电气专业</span>
|
|
|
|
|
|
<span class="info-icon">
|
|
|
|
|
|
<img src="../../img/dataAnalysisOctober/common_icon.png" alt=""
|
|
|
|
|
|
style="cursor: pointer; width: 20px; height: 20px;margin-right: 10px;margin-top: 5px;">
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="tooltip-box">
|
|
|
|
|
|
数据取自e基建2.0,根据数据进
|
|
|
|
|
|
行工序阶段进度对比展示。
|
2026-01-21 10:34:06 +08:00
|
|
|
|
</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>
|
2026-01-26 15:51:06 +08:00
|
|
|
|
<span class="info-icon">
|
|
|
|
|
|
<img src="../../img/dataAnalysisOctober/common_icon.png" alt=""
|
|
|
|
|
|
style="cursor: pointer; width: 20px; height: 20px;margin-right: 10px;margin-top: 5px;">
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="tooltip-box">
|
|
|
|
|
|
系统后台记录项目支出信息,该
|
|
|
|
|
|
模块统计每月项目总支出,
|
2026-01-21 10:34:06 +08:00
|
|
|
|
</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>
|
2026-01-26 15:51:06 +08:00
|
|
|
|
<span class="info-icon">
|
|
|
|
|
|
<img src="../../img/dataAnalysisOctober/common_icon.png" alt=""
|
|
|
|
|
|
style="cursor: pointer; width: 20px; height: 20px;margin-right: 10px;margin-top: 5px;">
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="tooltip-box">
|
|
|
|
|
|
系统后台记录项目预算总费用。
|
|
|
|
|
|
支出占比:(支出费用之和÷总预算)×
|
|
|
|
|
|
100%
|
|
|
|
|
|
剩余占比:100%-支出占比
|
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>
|
2026-01-26 15:51:06 +08:00
|
|
|
|
<span class="info-icon">
|
|
|
|
|
|
<img src="../../img/dataAnalysisOctober/common_icon.png" alt=""
|
|
|
|
|
|
style="cursor: pointer; width: 20px; height: 20px;margin-right: 10px;margin-top: 5px;">
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="tooltip-box">
|
|
|
|
|
|
系统获取e基建月计划数据,分析统计
|
|
|
|
|
|
风险分类统计
|
|
|
|
|
|
月计划的各风险数量,对各风险数量进行
|
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>
|
2026-01-26 15:51:06 +08:00
|
|
|
|
<span class="info-icon">
|
|
|
|
|
|
<img src="../../img/dataAnalysisOctober/common_icon.png" alt=""
|
|
|
|
|
|
style="cursor: pointer; width: 20px; height: 20px;margin-right: 10px;margin-top: 5px;">
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="tooltip-box">
|
|
|
|
|
|
进度分析预警:实际进度小于计划进度10%,系统进行预警,进度数据取自e
|
|
|
|
|
|
基建2.0 <br>
|
|
|
|
|
|
成本预警:当月支出与上月支出环比增长率比大于10%,进行提醒,环比增
|
|
|
|
|
|
长率=(本月支出-上月支出)÷上月支出×100% <br>
|
|
|
|
|
|
风险预警:当月出现二级及以上风险,系统自动预警提醒。
|
2026-01-21 10:34:06 +08:00
|
|
|
|
</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>
|
2026-01-24 19:13:29 +08:00
|
|
|
|
|
|
|
|
|
|
<!-- 定制措施弹框 -->
|
|
|
|
|
|
<div id="strategyModal" class="strategy-modal">
|
|
|
|
|
|
<div class="modal-overlay" onclick="closeStrategyModal()"></div>
|
|
|
|
|
|
<div class="modal-content">
|
|
|
|
|
|
<div class="modal-header">
|
|
|
|
|
|
<span class="modal-title">定制措施</span>
|
|
|
|
|
|
<span class="modal-close" onclick="closeStrategyModal()">×</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="modal-body">
|
|
|
|
|
|
<div class="strategy-form">
|
|
|
|
|
|
<div class="form-item">
|
|
|
|
|
|
<label class="form-label">
|
|
|
|
|
|
<span class="required">*</span>应对措施
|
|
|
|
|
|
</label>
|
|
|
|
|
|
<textarea id="measureDataInput" class="form-textarea" placeholder="请输入应对措施"></textarea>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="form-item">
|
|
|
|
|
|
<label class="form-label">附件</label>
|
|
|
|
|
|
<div class="upload-section">
|
|
|
|
|
|
<input type="file" id="fileInput" style="display: none;" accept=".doc,.docx,.pdf,.jpg,.png">
|
|
|
|
|
|
<button type="button" class="upload-btn"
|
|
|
|
|
|
onclick="document.getElementById('fileInput').click()">
|
|
|
|
|
|
<span class="upload-icon">📄</span>
|
|
|
|
|
|
<span>上传文件</span>
|
|
|
|
|
|
</button>
|
|
|
|
|
|
<div class="file-info" id="fileInfo"></div>
|
|
|
|
|
|
<div class="file-tips">支持格式: .doc .docx .pdf .jpg .png ,单个文件不能超过20MB</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="form-actions">
|
|
|
|
|
|
<button type="button" class="btn-confirm" onclick="submitStrategy()">确定</button>
|
|
|
|
|
|
<button type="button" class="btn-cancel" onclick="closeStrategyModal()">取消</button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2025-10-17 14:57:09 +08:00
|
|
|
|
</body>
|
|
|
|
|
|
<script src="../../js/pages/dataAnalysisOctober/projectManagement.js" type="text/javascript"></script>
|
|
|
|
|
|
|
2026-01-21 10:34:06 +08:00
|
|
|
|
</html>
|