hb_zhgd_screen/pages/dataAnalysisOctober/overallEfficiency.html

903 lines
26 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">
<script src="../../js/publics/sm4.js" type="text/javascript"></script>
<script src="../../js/publics/jquery-3.6.0.min.js" type="text/javascript"></script>
<script src="../../js/publics/public.js"></script>
<script src="../../plugin/scroll/jquery.nicescroll.min.js"></script>
<script src="../../js/publics/echarts.js"></script>
<script src="../../plugin/layui-v2.9.7/layui/layui.js"></script>
<script src="../../js/publics/aescbc.js"></script>
<script src="../../js/publics/sm3.js"></script>
<script src="../../api/commonRequest.js"></script>
</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>
<!-- 主体区域 - Grid布局 -->
<div class="main-content">
<!-- 模块1: 人员数据 (顶部,占满整行) -->
<div class="module module-1">
<div class="module-title">
<span class="title-indicator"></span>
<span class="title-text">人员数据</span>
</div>
<div class="module-content">
<div class="personnel-grid-container">
<!-- 上方左侧前5名表格 -->
<div class="personnel-table-wrapper">
<div class="table-subtitle">班组人员利用率排名前5名</div>
<div class="table-container">
<table id="top5PersonnelTable" lay-filter="top5PersonnelTable"></table>
</div>
</div>
<!-- 上方右侧后5名表格 -->
<div class="personnel-table-wrapper">
<div class="table-subtitle">班组人员利用率排名后5名</div>
<div class="table-container">
<table id="bottom5PersonnelTable" lay-filter="bottom5PersonnelTable"></table>
</div>
</div>
<!-- 下方左侧:各工种任务占比 -->
<div class="personnel-chart-wrapper">
<div class="table-subtitle">各工种任务占比</div>
<div class="chart-content">
<div class="trade-proportion-container" id="tradeProportionContainer">
<!-- 动态生成六个六边形卡片 -->
</div>
</div>
</div>
<!-- 下方右侧:各工种人均任务数 -->
<div class="personnel-chart-wrapper">
<div class="table-subtitle">各工种人均任务数</div>
<div class="chart-content">
<div id="avgTasksChart" class="chart-container"></div>
</div>
</div>
</div>
</div>
</div>
<!-- 模块4: 各设备使用率 (倒数第二行左侧) -->
<div class="module module-4">
<div class="module-title">
<span class="title-indicator"></span>
<span class="title-text">各设备使用率</span>
</div>
<div class="module-content">
<div id="equipmentUsageChart" class="chart-container"></div>
</div>
</div>
<!-- 模块5: 设备故障排名 (倒数第二行右侧) -->
<div class="module module-5">
<div class="module-title">
<span class="title-indicator"></span>
<span class="title-text">设备故障排名</span>
</div>
<div class="module-content">
<div class="equipment-failure-list" id="equipmentFailureList">
<!-- 动态生成 -->
</div>
</div>
</div>
<!-- 模块7: 工程进度 (最后一行左侧) -->
<div class="module module-7">
<div class="module-title">
<img src="../../img/dataAnalysisOctober/overallEfficiency/progress.png" alt="进度"
class="progress-icon">
<span class="title-indicator"></span>
<span class="title-text">工程进度</span>
</div>
<div class="module-content">
<div class="progress-bars-container">
<!-- 顶部信息行:实际进度、图片、计划进度 -->
<div class="progress-info-row">
<div class="progress-info-item actual-progress-info">
<span class="progress-info-label">实际进度</span>
<span class="progress-info-value" id="actualProgressText">35.0%</span>
</div>
<img src="../../img/dataAnalysisOctober/overallEfficiency/progress.png" alt="进度"
class="progress-divider-image">
<div class="progress-info-item planned-progress-info">
<span class="progress-info-label">计划进度</span>
<span class="progress-info-value" id="plannedProgressText">65.0%</span>
</div>
</div>
<!-- 底部细长进度条 -->
<div class="progress-bar-combined">
<div class="progress-segment actual-segment" id="actualProgressFill" style="width: 35%">
</div>
<div class="progress-segment planned-segment" id="plannedProgressFill" style="width: 65%">
</div>
</div>
</div>
</div>
</div>
<!-- 模块6: 分析预警 (最后一行右侧) -->
<div class="module module-6">
<div class="module-title">
<span class="title-indicator"></span>
<span class="title-text">分析预警</span>
</div>
<div class="module-content">
<div class="table-container">
<table id="warningTable" lay-filter="warningTable"></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>
<style>
#proQuality {
width: 100%;
height: 120%;
box-sizing: border-box;
/* overflow: hidden; */
display: flex;
flex-direction: column;
}
/* 顶部日期筛选区域(与工程质量分析保持一致) */
.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;
}
/* 主体区域 - Grid布局 */
.main-content {
flex: 1;
width: 100%;
height: 0;
display: grid;
grid-template-columns: 3fr 2fr;
grid-template-rows: 3fr 1fr 1fr;
gap: 6px;
overflow: hidden;
box-sizing: border-box;
/* padding: 6px; */
}
/* 模块1人员数据占满第一行高度3/5- 使用特殊背景图 */
.module-1 {
grid-column: 1 / 3;
grid-row: 1;
background-image: url("../../img/dataAnalysisOctober/overallEfficiency/personnel_bg.png");
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
/* 模块4各设备使用率倒数第二行左侧60%宽度) */
.module-4 {
grid-column: 1;
grid-row: 2;
}
/* 模块5设备故障排名倒数第二行右侧40%宽度) */
.module-5 {
grid-column: 2;
grid-row: 2;
}
/* 模块7工程进度最后一行左侧60%宽度) */
.module-7 {
grid-column: 1;
grid-row: 3;
}
/* 模块6分析预警最后一行右侧40%宽度) */
.module-6 {
grid-column: 2;
grid-row: 3;
}
.module {
position: relative;
display: flex;
flex-direction: column;
box-sizing: border-box;
overflow: hidden;
min-height: 0;
background-image: url("../../img/dataAnalysisOctober/proQualityAnalysis/common_bg.png");
}
.module-title {
display: flex;
align-items: center;
height: 40px;
min-height: 40px;
margin-bottom: 10px;
padding-left: 18px;
flex-shrink: 0;
}
.progress-icon {
width: 20px;
height: 20px;
margin-right: 8px;
flex-shrink: 0;
}
.title-indicator {
width: 4px;
height: 20px;
background: linear-gradient(180deg, #FF9C65 0%, #FFD700 100%);
margin-right: 10px;
flex-shrink: 0;
}
.title-text {
font-size: 16px;
font-weight: bold;
color: #FFFFFF;
white-space: nowrap;
}
.module-content {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
min-height: 0;
height: 0;
padding: 0 15px 15px 15px;
}
/* 模块1内部Grid布局 - 2行2列上方3/5高度下方2/5高度 */
.personnel-grid-container {
width: 100%;
height: 100%;
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 2.5fr 2.5fr;
gap: 15px;
overflow: hidden;
}
/* 上方两个表格区域 - 各占50%宽度高度3/5 */
.personnel-table-wrapper {
display: flex;
flex-direction: column;
overflow: hidden;
min-height: 0;
}
/* 下方两个图表区域 - 各占50%宽度高度2/5 */
.personnel-chart-wrapper {
display: flex;
flex-direction: column;
overflow: hidden;
min-height: 0;
}
.chart-content {
flex: 1;
overflow: hidden;
min-height: 0;
height: 0;
}
.table-subtitle {
font-size: 14px;
color: #FFFFFF;
font-weight: bold;
margin-bottom: 10px;
padding-left: 5px;
flex-shrink: 0;
display: flex;
align-items: center;
gap: 8px;
}
.table-subtitle::after {
content: '';
width: 18px;
height: 18px;
border-radius: 50%;
background: rgba(6, 189, 221, 0.6);
color: #FFFFFF;
font-size: 12px;
display: flex;
align-items: center;
justify-content: center;
cursor: help;
}
.personnel-table-wrapper .table-container {
flex: 1;
overflow-y: auto;
overflow-x: hidden;
min-height: 0;
}
/* 模块2样式 - 各工种任务占比(六边形卡片) */
.trade-proportion-container {
width: 100%;
height: 80%;
display: flex;
align-items: center;
justify-content: space-around;
gap: 8px;
flex-wrap: wrap;
/* padding: 10px 0; */
}
.trade-proportion-box {
width: 130px;
height: 150px;
background-image: url("../../img/dataAnalysisOctober/overallEfficiency/box.png");
background-size: 100% 100%;
background-position: center center;
background-repeat: no-repeat;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
position: relative;
padding: 20px 10px;
box-sizing: border-box;
}
.trade-proportion-value {
font-size: 28px;
font-weight: bold;
color: #00FFB8;
line-height: 1;
margin-bottom: 8px;
z-index: 2;
text-shadow: 0 0 10px rgba(0, 255, 184, 0.6);
}
.trade-proportion-label {
font-size: 13px;
color: #FFFFFF;
text-align: center;
z-index: 2;
line-height: 1.3;
}
/* 模块4样式 - 各设备使用率(折线图) */
.module-4 .chart-container {
width: 100%;
height: 100%;
}
/* 模块5样式 - 设备故障排名 */
.equipment-failure-list {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
gap: 12px;
overflow-y: auto;
}
.failure-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 15px;
background: rgba(25, 62, 68, 0.3);
border-left: 3px solid #FF6B6B;
border-radius: 4px;
}
.failure-equipment {
font-size: 14px;
color: #FFFFFF;
}
.failure-count {
font-size: 14px;
color: #FF6B6B;
font-weight: bold;
}
/* 模块6样式 - 分析预警(表格) */
.module-6 .table-container {
flex: 1;
overflow-y: auto;
overflow-x: hidden;
min-height: 0;
}
/* 模块7样式 - 工程进度 */
.progress-bars-container {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
gap: 20px;
padding: 0 20px;
}
/* 顶部信息行:实际进度、图片、计划进度 */
.progress-info-row {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
gap: 20px;
}
.progress-info-item {
display: flex;
align-items: center;
gap: 8px;
}
.progress-info-item.actual-progress-info {
order: 1;
}
.progress-divider-image {
order: 2;
width: auto;
height: 40px;
flex-shrink: 0;
object-fit: contain;
}
.progress-info-item.planned-progress-info {
order: 3;
}
.progress-info-label {
font-size: 14px;
color: #FFFFFF;
font-weight: bold;
}
.progress-info-value {
font-size: 16px;
font-weight: bold;
}
.actual-progress-info .progress-info-value {
color: #00FFB8;
text-shadow: 0 0 10px rgba(0, 255, 184, 0.6);
}
.planned-progress-info .progress-info-value {
color: #FF9C65;
text-shadow: 0 0 10px rgba(255, 156, 101, 0.6);
}
.progress-divider-image {
width: auto;
height: 40px;
flex-shrink: 0;
object-fit: contain;
}
/* 底部细长进度条 */
.progress-bar-combined {
width: 100%;
height: 12px;
display: flex;
border-radius: 6px;
overflow: hidden;
background: rgba(25, 62, 68, 0.6);
}
.progress-segment {
height: 100%;
transition: width 0.5s ease;
}
.progress-segment.actual-segment {
background: linear-gradient(90deg, #00FFB8 0%, #00D4FF 100%);
border-radius: 6px 0 0 6px;
}
.progress-segment.planned-segment {
background: linear-gradient(90deg, #FF9C65 0%, #FFD700 100%);
border-radius: 0 6px 6px 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;
}
/* 图表容器 */
.chart-container {
width: 100%;
height: 100%;
position: relative;
min-height: 0;
}
/* Layui表格样式覆盖 */
.module .layui-table {
background-color: transparent !important;
}
.module .layui-table thead tr {
background-color: rgba(13, 34, 37, 0.8) !important;
}
.module .layui-table thead th {
background-color: transparent !important;
color: #FFFFFF !important;
border-color: rgba(6, 189, 221, 0.3) !important;
font-weight: bold;
}
.module .layui-table tbody tr {
background-color: rgba(25, 62, 68, 0.3) !important;
}
.module .layui-table tbody tr:hover {
background-color: rgba(25, 62, 68, 0.6) !important;
}
.module .layui-table tbody td {
color: #FFFFFF !important;
border-color: rgba(6, 189, 221, 0.2) !important;
}
/* 滚动条样式 */
.module-content::-webkit-scrollbar,
.table-container::-webkit-scrollbar,
.equipment-failure-list::-webkit-scrollbar {
width: 6px;
height: 6px;
}
.module-content::-webkit-scrollbar-track,
.table-container::-webkit-scrollbar-track,
.equipment-failure-list::-webkit-scrollbar-track {
background: rgba(13, 34, 37, 0.5);
border-radius: 3px;
}
.module-content::-webkit-scrollbar-thumb,
.table-container::-webkit-scrollbar-thumb,
.equipment-failure-list::-webkit-scrollbar-thumb {
background: rgba(6, 189, 221, 0.5);
border-radius: 3px;
}
.module-content::-webkit-scrollbar-thumb:hover,
.table-container::-webkit-scrollbar-thumb:hover,
.equipment-failure-list::-webkit-scrollbar-thumb:hover {
background: rgba(6, 189, 221, 0.8);
}
/* 定制措施弹框样式 */
.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>
<script src="../../js/pages/dataAnalysisOctober/overallEfficiency.js" type="text/javascript"></script>
</html>