ah_jjzhgd_webscreen/pages/newDataAnalysis/overallEfficiency.html

1244 lines
45 KiB
HTML
Raw Normal View History

2025-07-23 16:27:14 +08:00
<!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 href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.2/dist/echarts.min.js"></script>
<style>
:root {
--primary: #1a3a5f;
--secondary: #2c5c8c;
--accent: #4caf50;
--warning: #ff9800;
--danger: #f44336;
--light: #f5f7fa;
--dark: #333;
--gray: #e4e7eb;
--card-shadow: 0 4px 15px rgba(0,0,0,0.08);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Noto Sans SC', sans-serif;
}
body {
/* background: linear-gradient(135deg, #f0f4f8 0%, #dfe7ee 100%); */
color: var(--dark);
min-height: 100vh;
overflow-x: hidden;
}
.container {
max-width: 1400px;
margin: 0 auto;
padding: 20px;
}
/* 简化后的顶部控制栏 */
.control-bar {
display: flex;
justify-content: flex-end;
margin-bottom: 20px;
}
.date-selector {
background: #c2c2c2;
padding: 10px 15px;
border-radius: 8px;
display: flex;
align-items: center;
gap: 10px;
box-shadow: var(--card-shadow);
}
.date-selector select {
background: transparent;
border: 1px solid var(--gray);
color: var(--dark);
padding: 5px 10px;
border-radius: 5px;
outline: none;
}
/* 仪表盘样式 */
.dashboard {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 20px;
margin-bottom: 25px;
}
.kpi-card {
background: #c2c2c2;
border-radius: 12px;
padding: 25px;
box-shadow: var(--card-shadow);
display: flex;
flex-direction: column;
transition: transform 0.3s;
cursor: pointer;
border-top: 4px solid var(--primary);
}
.kpi-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0,0,0,0.1);
}
.kpi-header {
display: flex;
justify-content: space-between;
margin-bottom: 15px;
align-items: flex-start;
}
.kpi-icon {
width: 50px;
height: 50px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
}
.kpi-icon.blue {
background: rgba(26, 58, 95, 0.1);
color: var(--primary);
}
.kpi-icon.green {
background: rgba(76, 175, 80, 0.1);
color: var(--accent);
}
.kpi-icon.orange {
background: rgba(255, 152, 0, 0.1);
color: var(--warning);
}
.kpi-icon.red {
background: rgba(244, 67, 54, 0.1);
color: var(--danger);
}
.kpi-title {
font-size: 1rem;
font-weight: 500;
color: #666;
}
.kpi-value {
font-size: 2.2rem;
font-weight: 700;
margin: 10px 0;
}
.kpi-trend {
display: flex;
align-items: center;
font-size: 0.9rem;
gap: 5px;
}
.trend-up {
color: var(--accent);
}
.trend-down {
color: var(--danger);
}
/* 图表容器 */
.charts-container {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 20px;
margin-bottom: 25px;
}
@media (max-width: 900px) {
.charts-container {
grid-template-columns: 1fr;
}
}
.chart-card {
background: #c2c2c2;
border-radius: 12px;
padding: 20px;
box-shadow: var(--card-shadow);
}
.chart-header {
margin-bottom: 15px;
font-weight: 500;
color: var(--primary);
font-size: 1.1rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.chart-container {
height: 300px;
width: 100%;
}
/* 分析部分 */
.analysis-section {
background: #c2c2c2;
border-radius: 12px;
padding: 25px;
box-shadow: var(--card-shadow);
margin-bottom: 25px;
}
.section-title {
font-size: 1.3rem;
color: var(--primary);
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 1px solid var(--gray);
}
.bottleneck-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.bottleneck-card {
border-left: 4px solid var(--warning);
padding: 15px;
background: #fff9e6;
border-radius: 0 8px 8px 0;
transition: all 0.3s;
cursor: pointer;
}
.bottleneck-card:hover {
transform: translateX(5px);
background: #fff1cc;
}
.bottleneck-title {
font-weight: 500;
margin-bottom: 8px;
display: flex;
align-items: center;
gap: 8px;
}
.bottleneck-desc {
font-size: 0.9rem;
color: #666;
margin-bottom: 10px;
}
.optimization-card {
background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
border-radius: 8px;
padding: 20px;
}
.suggestion-item {
display: flex;
gap: 15px;
padding: 15px 0;
border-bottom: 1px dashed #ddd;
cursor: pointer;
transition: all 0.3s;
}
.suggestion-item:hover {
background: rgba(255,255,255,0.5);
border-radius: 8px;
padding: 15px;
}
.suggestion-item:last-child {
border-bottom: none;
}
.suggestion-icon {
background: var(--accent);
color: #c2c2c2;
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
font-weight: bold;
}
.suggestion-content h4 {
margin-bottom: 5px;
color: var(--primary);
}
.suggestion-content p {
color: #666;
font-size: 0.9rem;
}
.priority-high {
color: var(--danger);
font-weight: 500;
}
.priority-medium {
color: var(--warning);
font-weight: 500;
}
.action-btn {
background: var(--secondary);
color: white;
border: none;
padding: 8px 15px;
border-radius: 6px;
cursor: pointer;
font-size: 0.9rem;
display: flex;
align-items: center;
gap: 5px;
transition: all 0.3s;
}
.action-btn:hover {
background: var(--primary);
}
/* 二级页面样式 */
.secondary-page {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.8);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
opacity: 0;
visibility: hidden;
transition: all 0.3s;
}
.secondary-page.active {
opacity: 1;
visibility: visible;
}
.page-content {
background: white;
width: 90%;
max-width: 1000px;
max-height: 90vh;
border-radius: 12px;
overflow: hidden;
display: flex;
flex-direction: column;
transform: translateY(20px);
transition: transform 0.4s;
}
.secondary-page.active .page-content {
transform: translateY(0);
}
.page-header {
padding: 20px;
display: flex;
justify-content: space-between;
align-items: center;
}
.page-header h3 {
font-size: 1.5rem;
}
.close-btn {
background: rgba(255,255,255,0.2);
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 1.2rem;
transition: all 0.3s;
}
.close-btn:hover {
background: rgba(255,255,255,0.3);
}
.page-body {
padding: 30px;
overflow-y: auto;
}
.detail-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
.detail-card {
background: var(--light);
border-radius: 10px;
padding: 20px;
box-shadow: var(--card-shadow);
}
.detail-card h4 {
color: var(--primary);
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid var(--gray);
}
.data-row {
display: flex;
justify-content: space-between;
padding: 8px 0;
border-bottom: 1px dashed #ddd;
}
.data-row:last-child {
border-bottom: none;
}
.progress-container {
margin: 15px 0;
}
.progress-label {
display: flex;
justify-content: space-between;
margin-bottom: 5px;
}
.progress-bar {
height: 10px;
background: #e0e0e0;
border-radius: 5px;
overflow: hidden;
}
.progress-fill {
height: 100%;
border-radius: 5px;
}
.detail-chart {
height: 300px;
margin: 30px 0;
}
/* 页脚 */
footer {
text-align: center;
color: #666;
padding: 20px;
font-size: 0.9rem;
margin-top: 20px;
}
.stat-badge {
display: inline-block;
padding: 3px 8px;
border-radius: 20px;
font-size: 0.8rem;
font-weight: 500;
}
.badge-green {
background: rgba(76, 175, 80, 0.2);
color: var(--accent);
}
.badge-orange {
background: rgba(255, 152, 0, 0.2);
color: var(--warning);
}
.badge-red {
background: rgba(244, 67, 54, 0.2);
color: var(--danger);
}
</style>
</head>
<body>
<div class="container">
<!-- 主仪表盘 -->
<div class="dashboard">
<div class="kpi-card" onclick="openPage('personnel')">
<div class="kpi-header">
<div>
<div class="kpi-title">人员利用率</div>
<div class="kpi-value">78.3%</div>
</div>
<div class="kpi-icon blue">
<i class="fas fa-users"></i>
</div>
</div>
<div class="kpi-trend trend-up">
<i class="fas fa-arrow-up"></i> 较上周提高 5.2%
</div>
<div class="kpi-trend">
平均闲置时间 1.2 小时/天
</div>
</div>
<div class="kpi-card" onclick="openPage('equipment')">
<div class="kpi-header">
<div>
<div class="kpi-title">设备使用率</div>
<div class="kpi-value">64.8%</div>
</div>
<div class="kpi-icon orange">
<i class="fas fa-tools"></i>
</div>
</div>
<div class="kpi-trend trend-down">
<i class="fas fa-arrow-down"></i> 下降 2.1%
</div>
<div class="kpi-trend">
主要设备故障率 3.7%
</div>
</div>
<div class="kpi-card" onclick="openPage('progress')">
<div class="kpi-header">
<div>
<div class="kpi-title">工程进度</div>
<div class="kpi-value">72.5%</div>
</div>
<div class="kpi-icon green">
<i class="fas fa-tasks"></i>
</div>
</div>
<div class="kpi-trend trend-up">
<i class="fas fa-arrow-up"></i> 较计划超前 2 天
</div>
<div class="kpi-trend">
本周完成进度 8.3%
</div>
</div>
<div class="kpi-card" onclick="openPage('safety')">
<div class="kpi-header">
<div>
<div class="kpi-title">安全合规率</div>
<div class="kpi-value">94.6%</div>
</div>
<div class="kpi-icon red">
<i class="fas fa-shield-alt"></i>
</div>
</div>
<div class="kpi-trend trend-up">
<i class="fas fa-arrow-up"></i> 提高 3.4%
</div>
<div class="kpi-trend">
本周安全事件 2 起
</div>
</div>
</div>
<div class="charts-container">
<div class="chart-card">
<div class="chart-header">
<span>多源数据综合分析</span>
</div>
<div class="chart-container" id="radarChart"></div>
</div>
<div class="chart-card">
<div class="chart-header">
<span>效能瓶颈分布</span>
</div>
<div class="chart-container" id="bottleneckChart"></div>
</div>
</div>
<div class="analysis-section">
<div class="section-title">瓶颈识别与分析</div>
<div class="bottleneck-container">
<div class="bottleneck-card" onclick="openPage('bottleneck')">
<div class="bottleneck-title">
<span><i class="fas fa-cogs"></i> 设备调度瓶颈</span>
</div>
<div class="bottleneck-desc">
混凝土搅拌机使用率高达92%等待时间过长影响3个作业面进度
</div>
<div class="kpi-trend">
<span class="badge-red">高影响</span> 预计延误: 3天
</div>
</div>
<div class="bottleneck-card" onclick="openPage('bottleneck')">
<div class="bottleneck-title">
<span><i class="fas fa-user-graduate"></i> 人员技能瓶颈</span>
</div>
<div class="bottleneck-desc">
高级焊工短缺导致钢结构安装进度滞后15%
</div>
<div class="kpi-trend">
<span class="badge-orange">中影响</span> 影响范围: 2号楼
</div>
</div>
<div class="bottleneck-card" onclick="openPage('bottleneck')">
<div class="bottleneck-title">
<span><i class="fas fa-pallet"></i> 物料供应瓶颈</span>
</div>
<div class="bottleneck-desc">
钢筋供应延迟影响2号楼主体施工进度
</div>
<div class="kpi-trend">
<span class="badge-red">高影响</span> 延误天数: 5天
</div>
</div>
</div>
</div>
<div class="analysis-section">
<div class="section-title">优化建议与措施</div>
<div class="optimization-card">
<div class="suggestion-item" onclick="openPage('suggestion1')">
<div class="suggestion-icon">1</div>
<div class="suggestion-content">
<h4>设备调度优化 <span class="priority-high">(高优先级)</span></h4>
<p>调整混凝土搅拌机使用时段增加夜间预制工作预计可提升设备利用率15%</p>
</div>
</div>
<div class="suggestion-item" onclick="openPage('suggestion2')">
<div class="suggestion-icon">2</div>
<div class="suggestion-content">
<h4>技能培训计划 <span class="priority-medium">(中优先级)</span></h4>
<p>开展焊工技能提升培训同时外聘2名高级焊工预计可缩短工期5天</p>
</div>
</div>
<div class="suggestion-item" onclick="openPage('suggestion3')">
<div class="suggestion-icon">3</div>
<div class="suggestion-content">
<h4>供应链优化 <span class="priority-high">(高优先级)</span></h4>
<p>建立备用供应商机制,增加钢筋库存缓冲,确保施工连续性</p>
</div>
</div>
</div>
</div>
<footer>
<p>工地整体效能分析系统 © 2023 | 数据更新时间: 2023-11-15 14:30</p>
</footer>
</div>
<!-- 二级页面:人员效能分析 -->
<div class="secondary-page" id="personnel-page">
<div class="page-content">
<div class="page-header">
<h3><i class="fas fa-users"></i> 人员效能分析</h3>
<div class="close-btn" onclick="closePage('personnel')">
<i class="fas fa-times"></i>
</div>
</div>
<div class="page-body">
<div class="detail-grid">
<div class="detail-card">
<h4>核心指标</h4>
<div class="data-row">
<span>总工人数</span>
<span>186人</span>
</div>
<div class="data-row">
<span>人员利用率</span>
<span>78.3%</span>
</div>
<div class="data-row">
<span>平均出勤率</span>
<span>95.2%</span>
</div>
<div class="data-row">
<span>加班工时</span>
<span>342小时/周</span>
</div>
</div>
<div class="detail-card">
<h4>技能分布</h4>
<div class="progress-container">
<div class="progress-label">
<span>高级技工</span>
<span>32%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 32%; background: var(--primary);"></div>
</div>
</div>
<div class="progress-container">
<div class="progress-label">
<span>中级技工</span>
<span>45%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 45%; background: var(--secondary);"></div>
</div>
</div>
<div class="progress-container">
<div class="progress-label">
<span>普通工人</span>
<span>23%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 23%; background: var(--accent);"></div>
</div>
</div>
</div>
<div class="detail-card">
<h4>效能趋势</h4>
<div class="data-row">
<span>本周变化</span>
<span class="trend-up">+5.2%</span>
</div>
<div class="data-row">
<span>上月同期</span>
<span>73.5%</span>
</div>
<div class="data-row">
<span>目标值</span>
<span>85.0%</span>
</div>
</div>
</div>
<div class="detail-chart" id="personnel-chart"></div>
<h4>优化建议</h4>
<p>1. 调整班组结构,平衡各工种人员分配,减少待工时间</p>
<p>2. 加强新工人培训,提高工作效率</p>
<p>3. 优化排班计划,减少不必要的加班</p>
</div>
</div>
</div>
<!-- 设备分析页面 -->
<div class="secondary-page" id="equipment-page">
<div class="page-content">
<div class="page-header">
<h3><i class="fas fa-tools"></i> 设备使用分析</h3>
<div class="close-btn" onclick="closePage('equipment')">
<i class="fas fa-times"></i>
</div>
</div>
<div class="page-body">
<div class="detail-grid">
<div class="detail-card">
<h4>设备概况</h4>
<div class="data-row">
<span>设备总数</span>
<span>42台</span>
</div>
<div class="data-row">
<span>设备使用率</span>
<span>64.8%</span>
</div>
<div class="data-row">
<span>平均故障率</span>
<span>3.7%</span>
</div>
<div class="data-row">
<span>待机设备数</span>
<span>15台</span>
</div>
</div>
<div class="detail-card">
<h4>关键设备状态</h4>
<div class="progress-container">
<div class="progress-label">
<span>混凝土搅拌机</span>
<span>92%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 92%; background: var(--danger);"></div>
</div>
</div>
<div class="progress-container">
<div class="progress-label">
<span>塔式起重机</span>
<span>78%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 78%; background: var(--warning);"></div>
</div>
</div>
<div class="progress-container">
<div class="progress-label">
<span>挖掘机</span>
<span>65%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 65%; background: var(--accent);"></div>
</div>
</div>
</div>
<div class="detail-card">
<h4>维护情况</h4>
<div class="data-row">
<span>本周维护次数</span>
<span>18次</span>
</div>
<div class="data-row">
<span>待处理故障</span>
<span>3项</span>
</div>
<div class="data-row">
<span>平均响应时间</span>
<span>2.5小时</span>
</div>
</div>
</div>
<div class="detail-chart" id="equipment-chart"></div>
<h4>优化建议</h4>
<p>1. 优化混凝土搅拌机调度计划,增加使用时段</p>
<p>2. 对塔式起重机进行预防性维护,减少故障率</p>
<p>3. 重新分配闲置设备,提高整体利用率</p>
</div>
</div>
</div>
<!-- 进度分析页面 -->
<div class="secondary-page" id="progress-page">
<div class="page-content">
<div class="page-header">
<h3><i class="fas fa-tasks"></i> 工程进度分析</h3>
<div class="close-btn" onclick="closePage('progress')">
<i class="fas fa-times"></i>
</div>
</div>
<div class="page-body">
<div class="detail-grid">
<div class="detail-card">
<h4>总体进度</h4>
<div class="data-row">
<span>项目完成率</span>
<span>72.5%</span>
</div>
<div class="data-row">
<span>计划进度</span>
<span>70.3%</span>
</div>
<div class="data-row">
<span>超前/滞后</span>
<span class="trend-up">+2.2% (超前2天)</span>
</div>
<div class="data-row">
<span>关键路径进度</span>
<span>68.7%</span>
</div>
</div>
<div class="detail-card">
<h4>各区域进度</h4>
<div class="progress-container">
<div class="progress-label">
<span>1号楼</span>
<span>85%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 85%; background: var(--accent);"></div>
</div>
</div>
<div class="progress-container">
<div class="progress-label">
<span>2号楼</span>
<span>65%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 65%; background: var(--warning);"></div>
</div>
</div>
<div class="progress-container">
<div class="progress-label">
<span>3号楼</span>
<span>78%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 78%; background: var(--accent);"></div>
</div>
</div>
</div>
<div class="detail-card">
<h4>本周进展</h4>
<div class="data-row">
<span>完成工作量</span>
<span>8.3%</span>
</div>
<div class="data-row">
<span>计划工作量</span>
<span>7.5%</span>
</div>
<div class="data-row">
<span>差异</span>
<span class="trend-up">+0.8%</span>
</div>
</div>
</div>
<div class="detail-chart" id="progress-chart"></div>
<h4>优化建议</h4>
<p>1. 重点监控2号楼进度增加施工资源投入</p>
<p>2. 优化关键路径任务分配,减少依赖等待时间</p>
<p>3. 提前准备下阶段所需材料,避免进度延误</p>
</div>
</div>
</div>
<!-- 安全分析页面 -->
<div class="secondary-page" id="safety-page">
<div class="page-content">
<div class="page-header">
<h3><i class="fas fa-shield-alt"></i> 安全合规分析</h3>
<div class="close-btn" onclick="closePage('safety')">
<i class="fas fa-times"></i>
</div>
</div>
<div class="page-body">
<div class="detail-grid">
<div class="detail-card">
<h4>安全指标</h4>
<div class="data-row">
<span>安全合规率</span>
<span>94.6%</span>
</div>
<div class="data-row">
<span>安全检查合格率</span>
<span>92.3%</span>
</div>
<div class="data-row">
<span>本周安全事件</span>
<span>2起</span>
</div>
<div class="data-row">
<span>整改完成率</span>
<span>87.5%</span>
</div>
</div>
<div class="detail-card">
<h4>事件类型分布</h4>
<div class="progress-container">
<div class="progress-label">
<span>高空作业违规</span>
<span>45%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 45%; background: var(--danger);"></div>
</div>
</div>
<div class="progress-container">
<div class="progress-label">
<span>设备操作不当</span>
<span>30%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 30%; background: var(--warning);"></div>
</div>
</div>
<div class="progress-container">
<div class="progress-label">
<span>现场管理疏漏</span>
<span>25%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 25%; background: var(--accent);"></div>
</div>
</div>
</div>
<div class="detail-card">
<h4>安全趋势</h4>
<div class="data-row">
<span>本周变化</span>
<span class="trend-up">+3.4%</span>
</div>
<div class="data-row">
<span>上月同期</span>
<span>91.2%</span>
</div>
<div class="data-row">
<span>目标值</span>
<span>95.0%</span>
</div>
</div>
</div>
<div class="detail-chart" id="safety-chart"></div>
<h4>优化建议</h4>
<p>1. 加强高空作业安全培训与监督</p>
<p>2. 完善设备操作规范,实施持证上岗制度</p>
<p>3. 强化现场安全管理,增加巡查频次</p>
</div>
</div>
</div>
<script>
// 初始化雷达图 - 多源数据分析
const radarChart = echarts.init(document.getElementById('radarChart'));
const radarOption = {
tooltip: { trigger: 'item' },
radar: {
indicator: [
{ name: '人员利用率', max: 100 },
{ name: '设备使用率', max: 100 },
{ name: '工程进度率', max: 100 },
{ name: '安全合规率', max: 100 },
{ name: '物料周转率', max: 100 },
{ name: '能源效率', max: 100 }
],
shape: 'circle',
radius: '65%'
},
series: [{
type: 'radar',
data: [
{
value: [78, 65, 72, 94, 68, 75],
name: '当前效能',
areaStyle: { color: 'rgba(44, 92, 140, 0.5)' },
lineStyle: { color: '#2c5c8c', width: 2 },
symbol: 'circle',
symbolSize: 8
},
{
value: [85, 80, 90, 95, 85, 88],
name: '目标效能',
areaStyle: { color: 'rgba(76, 175, 80, 0.3)' },
lineStyle: { color: '#4caf50', type: 'dashed', width: 2 },
symbol: 'circle',
symbolSize: 8
}
]
}]
};
radarChart.setOption(radarOption);
// 初始化饼图 - 瓶颈分布
const pieChart = echarts.init(document.getElementById('bottleneckChart'));
const pieOption = {
tooltip: { trigger: 'item' },
legend: { bottom: 10, left: 'center' },
series: [
{
name: '瓶颈分布',
type: 'pie',
radius: ['40%', '70%'],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 10,
borderColor: '#fff',
borderWidth: 2
},
label: { show: false },
emphasis: {
label: { show: true, fontSize: '16', fontWeight: 'bold' }
},
data: [
{ value: 38, name: '设备瓶颈', itemStyle: { color: '#f44336' } },
{ value: 25, name: '人员瓶颈', itemStyle: { color: '#ff9800' } },
{ value: 20, name: '物料瓶颈', itemStyle: { color: '#2196f3' } },
{ value: 12, name: '工艺瓶颈', itemStyle: { color: '#9c27b0' } },
{ value: 5, name: '其他瓶颈', itemStyle: { color: '#607d8b' } }
]
}
]
};
pieChart.setOption(pieOption);
// 初始化人员效能图表
const personnelChart = echarts.init(document.getElementById('personnel-chart'));
const personnelOption = {
tooltip: { trigger: 'axis' },
legend: { data: ['人员利用率', '出勤率'], bottom: 10 },
grid: { left: '3%', right: '4%', bottom: '15%', top: '5%', containLabel: true },
xAxis: {
type: 'category',
data: ['10月15日', '10月22日', '10月29日', '11月5日', '11月12日']
},
yAxis: { type: 'value', max: 100, axisLabel: { formatter: '{value}%' } },
series: [
{
name: '人员利用率',
type: 'line',
data: [70.3, 72.5, 74.8, 76.2, 78.3],
smooth: true,
lineStyle: { width: 3, color: '#2c5c8c' },
symbol: 'circle',
symbolSize: 8
},
{
name: '出勤率',
type: 'line',
data: [92.5, 93.1, 94.2, 94.8, 95.2],
smooth: true,
lineStyle: { width: 3, color: '#4caf50' },
symbol: 'circle',
symbolSize: 8
}
]
};
// 设备分析图表
const equipmentChart = echarts.init(document.getElementById('equipment-chart'));
const equipmentOption = {
tooltip: { trigger: 'axis' },
legend: { data: ['设备使用率', '故障率'], bottom: 10 },
grid: { left: '3%', right: '4%', bottom: '15%', top: '5%', containLabel: true },
xAxis: {
type: 'category',
data: ['10月15日', '10月22日', '10月29日', '11月5日', '11月12日']
},
yAxis: { type: 'value', max: 100, axisLabel: { formatter: '{value}%' } },
series: [
{
name: '设备使用率',
type: 'line',
data: [68.2, 67.5, 66.8, 65.3, 64.8],
smooth: true,
lineStyle: { width: 3, color: '#2c5c8c' },
symbol: 'circle',
symbolSize: 8
},
{
name: '故障率',
type: 'line',
data: [2.8, 3.2, 3.5, 3.6, 3.7],
smooth: true,
lineStyle: { width: 3, color: '#f44336' },
symbol: 'circle',
symbolSize: 8
}
]
};
// 进度分析图表
const progressChart = echarts.init(document.getElementById('progress-chart'));
const progressOption = {
tooltip: { trigger: 'axis' },
legend: { data: ['实际进度', '计划进度'], bottom: 10 },
grid: { left: '3%', right: '4%', bottom: '15%', top: '5%', containLabel: true },
xAxis: {
type: 'category',
data: ['10月15日', '10月22日', '10月29日', '11月5日', '11月12日']
},
yAxis: { type: 'value', max: 100, axisLabel: { formatter: '{value}%' } },
series: [
{
name: '实际进度',
type: 'line',
data: [58.2, 60.5, 64.8, 68.3, 72.5],
smooth: true,
lineStyle: { width: 3, color: '#2c5c8c' },
symbol: 'circle',
symbolSize: 8
},
{
name: '计划进度',
type: 'line',
data: [60.0, 62.5, 65.8, 69.0, 72.0],
smooth: true,
lineStyle: { width: 3, color: '#4caf50', type: 'dashed' },
symbol: 'circle',
symbolSize: 8
}
]
};
// 安全分析图表
const safetyChart = echarts.init(document.getElementById('safety-chart'));
const safetyOption = {
tooltip: { trigger: 'axis' },
legend: { data: ['安全合规率'], bottom: 10 },
grid: { left: '3%', right: '4%', bottom: '15%', top: '5%', containLabel: true },
xAxis: {
type: 'category',
data: ['10月15日', '10月22日', '10月29日', '11月5日', '11月12日']
},
yAxis: { type: 'value', max: 100, axisLabel: { formatter: '{value}%' } },
series: [
{
name: '安全合规率',
type: 'line',
data: [88.5, 90.2, 91.7, 92.8, 94.6],
smooth: true,
lineStyle: { width: 3, color: '#4caf50' },
symbol: 'circle',
symbolSize: 8
}
]
};
// 设置所有图表
personnelChart.setOption(personnelOption);
equipmentChart.setOption(equipmentOption);
progressChart.setOption(progressOption);
safetyChart.setOption(safetyOption);
// 响应窗口大小变化
window.addEventListener('resize', function() {
radarChart.resize();
pieChart.resize();
personnelChart.resize();
equipmentChart.resize();
progressChart.resize();
safetyChart.resize();
});
// 二级页面控制函数
function openPage(pageId) {
document.getElementById(pageId + '-page').classList.add('active');
document.body.style.overflow = 'hidden';
}
function closePage(pageId) {
document.getElementById(pageId + '-page').classList.remove('active');
document.body.style.overflow = 'auto';
}
// 点击页面外部关闭弹窗
document.querySelectorAll('.secondary-page').forEach(page => {
page.addEventListener('click', function(e) {
if (e.target === this) {
this.classList.remove('active');
document.body.style.overflow = 'auto';
}
});
});
</script>
</body>
</html>