hb_zhgd_screen/pages/dataAnalysisOctober/projectManagement.html

1067 lines
37 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="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>项目管理分析</title>
<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">
<link rel="stylesheet" href="../../css/tipCommon.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%;
height: 130%;
position: relative;
overflow: hidden;
}
/* 顶部查询区域 - 绝对定位,不占用主内容区域高度 */
.filter-bar {
position: absolute;
top: 0;
left: 1%;
right: 1%;
height: 50px;
display: flex;
align-items: center;
gap: 12px;
padding: 0 10px;
z-index: 10;
}
.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);
}
/* 顶部日期筛选区域(与工程质量分析保持一致) */
.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;
}
/* 主内容区域 - 使用6列3行网格 */
.main-content {
width: 100%;
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");
display: flex;
flex-direction: column;
}
.panel-title {
height: 40px;
display: flex;
align-items: center;
padding: 0 18px;
font-size: 16px;
color: #ffffff;
font-weight: bold;
gap: 8px;
flex-shrink: 0;
}
.title-indicator {
width: 4px;
height: 18px;
background: linear-gradient(180deg, #00FEFC 0%, #00B8B6 100%);
border-radius: 2px;
flex-shrink: 0;
}
.title-text {
flex: 1;
}
.panel-title .info-icon {
margin-left: auto;
width: 16px;
height: 16px;
cursor: pointer;
opacity: 0.7;
font-size: 14px;
}
.panel-body {
flex: 1;
padding: 4px 10px;
box-sizing: border-box;
overflow: hidden;
min-height: 0;
}
/* 第一行:项目信息 - 占整个宽度 */
.panel-project-info {
grid-column: 1 / 7;
grid-row: 1 / 2;
}
/* 第二行:项目支出趋势 - 左边 */
.panel-expenditure-trend {
grid-column: 1 / 4;
grid-row: 2 / 3;
}
/* 第二行:项目支出占比 - 右边 */
.panel-expenditure-proportion {
grid-column: 4 / 7;
grid-row: 2 / 3;
}
/* 第三行:项目风险 - 左边2/3 */
.panel-project-risk {
grid-column: 1 / 5;
grid-row: 3 / 4;
}
/* 第三行:分析预警 - 右边1/3 */
.panel-analysis-warning {
grid-column: 5 / 7;
grid-row: 3 / 4;
}
.chart-container {
width: 100%;
height: 100%;
}
/* 项目信息面板内部布局 - 使用4列2行网格 */
.project-info-content {
width: 100%;
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;
}
/* 子模块样式 */
.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;
display: flex;
flex-direction: column;
overflow: hidden;
}
.sub-module-title {
height: 30px;
display: flex;
align-items: center;
gap: 6px;
font-size: 14px;
color: #ffffff;
font-weight: 500;
flex-shrink: 0;
}
.sub-module-title .sub-title-indicator {
width: 3px;
height: 14px;
background: linear-gradient(180deg, #00FEFC 0%, #00B8B6 100%);
border-radius: 1px;
}
.sub-module-title .sub-info-icon {
margin-left: auto;
width: 14px;
height: 14px;
cursor: pointer;
opacity: 0.7;
font-size: 12px;
}
.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;
}
/* 第一行:土建专业 - 右上占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;
width: 100%;
height: 100%;
gap: 20px;
}
.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 {
width: 100%;
height: 100%;
display: flex;
gap: 15px;
}
.risk-chart-wrapper {
flex: 1;
min-width: 0;
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);
}
.risk-stats-wrapper {
width: 200px;
display: flex;
flex-direction: column;
gap: 15px;
justify-content: center;
}
.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;
}
.risk-stat-icon {
font-size: 24px;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.risk-stat-content {
flex: 1;
display: flex;
flex-direction: column;
gap: 4px;
}
.risk-stat-value {
font-size: 20px;
font-weight: bold;
color: #00FEFC;
line-height: 1;
}
.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);
}
/* 定制措施弹框样式 */
.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);
}
</style>
</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="main-content">
<!-- 项目信息 - 第一行,占整个宽度 -->
<div class="panel panel-project-info">
<div class="panel-title">
<span class="title-indicator"></span>
<span class="title-text">项目信息</span>
</div>
<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 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>
已完成工序:统计土建专业已完成工序的数量
</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>
<!-- 电气工序进度 - 中上 -->
<div class="sub-module sub-module-electrical-progress">
<div class="sub-module-title">
<span class="sub-title-indicator"></span>
<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>
已完成工序:统计电气专业已完成工序的数量
</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>
<!-- 土建专业 - 右上占2列 -->
<div class="sub-module sub-module-civil-chart">
<div class="sub-module-title">
<span class="sub-title-indicator"></span>
<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,根据数据进
行工序阶段进度对比展示。
</div>
<div class="sub-module-body">
<div id="civilSpecialtyChart" class="chart-container"></div>
</div>
</div>
<!-- 风险分析 - 左下占2列 -->
<div class="sub-module sub-module-risk-analysis">
<div class="sub-module-title">
<span class="sub-title-indicator"></span>
<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基建月计划数据分析统计
风险分类统计
月计划的各风险数量,对各风险数量进行
</div>
<div class="sub-module-body">
<div id="riskAnalysisChart" class="chart-container"></div>
</div>
</div>
<!-- 电气专业 - 右下占2列 -->
<div class="sub-module sub-module-electrical-chart">
<div class="sub-module-title">
<span class="sub-title-indicator"></span>
<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,根据数据进
行工序阶段进度对比展示。
</div>
<div class="sub-module-body">
<div id="electricalSpecialtyChart" class="chart-container"></div>
</div>
</div>
</div>
</div>
</div>
<!-- 项目支出趋势 - 第二行,左边 -->
<div class="panel panel-expenditure-trend">
<div class="panel-title">
<span class="title-indicator"></span>
<span class="title-text">项目支出趋势</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">
系统后台记录项目支出信息,该
模块统计每月项目总支出,
</div>
<div class="panel-body">
<div id="expenditureTrendChart" class="chart-container"></div>
</div>
</div>
<!-- 项目支出占比 - 第二行,右边 -->
<div class="panel panel-expenditure-proportion">
<div class="panel-title">
<span class="title-indicator"></span>
<span class="title-text">项目支出占比</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">
系统后台记录项目预算总费用。
支出占比:(支出费用之和÷总预算)×
100%
剩余占比100%-支出占比
</div>
<div class="panel-body">
<div id="expenditureProportionChart" class="chart-container"></div>
</div>
</div>
<!-- 项目风险 - 第三行左边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">
<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基建月计划数据分析统计
风险分类统计
月计划的各风险数量,对各风险数量进行
</div>
<div class="panel-body">
<div class="risk-content-wrapper">
<div class="risk-chart-wrapper">
<div id="projectRiskChart" class="chart-container"></div>
<div class="total-risk-display" id="totalRiskDisplay">总风险数量0个</div>
</div>
<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>
</div>
</div>
</div>
</div>
</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">
<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>
风险预警:当月出现二级及以上风险,系统自动预警提醒。
</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>
</div>
</div>
</div>
</div>
</div>
<!-- 定制措施弹框 -->
<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>
</body>
<script src="../../js/pages/dataAnalysisOctober/projectManagement.js" type="text/javascript"></script>
</html>