You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2153 lines
72 KiB
HTML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>科考船</title>
<script src="/models/chart.umd.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
<style>
body {
margin: 0;
padding: 0;
overflow: hidden;
background: #000;
font-family: Arial, sans-serif;
}
#container {
width: 100vw;
height: 100vh;
position: relative;
background: #000;
}
#info {
position: absolute;
top: 10px;
left: 10px;
color: white;
background: rgba(0, 0, 0, 0.5);
padding: 10px;
border-radius: 5px;
font-size: 14px;
z-index: 100;
}
#loading {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
font-size: 18px;
z-index: 200;
}
.hidden {
display: none;
}
/* 面板基础样式修改 */
.panel {
position: absolute;
top: 20px;
width: 320px;
color: #e0f0ff;
z-index: 10;
height: calc(100vh - 40px);
display: flex;
flex-direction: column;
}
.left-panel {
left: 20px;
}
.right-panel {
right: 20px;
}
.panel-header {
border-bottom: 1px solid rgba(64, 156, 255, 0.4);
padding-bottom: 15px;
margin-bottom: 10px;
text-align: center;
}
.panel-header h3 {
margin: 0;
font-size: 22px;
font-weight: 600;
background: linear-gradient(90deg, #4fc3f7, #4abdf3);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-shadow: 0 0 10px rgba(79, 195, 247, 0.3);
}
.panel-content {
height: 100%;
overflow-y: auto;
padding-right: 5px;
display: flex;
flex-direction: column;
}
.panel-content::-webkit-scrollbar {
width: 2px;
}
.panel-content::-webkit-scrollbar-thumb {
background: rgba(64, 156, 255, 0.5);
border-radius: 2px;
}
.panel-content::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.1);
}
.info-section,
.realtime-indicators,
.unit-status,
.environment-stats,
.power-generation,
.alert-stats {
margin-bottom: 25px;
background: rgba(25, 55, 95, 0.3);
border-radius: 10px;
padding: 15px;
border: 1px solid rgba(64, 156, 255, 0.2);
}
.info-section h4,
.realtime-indicators h4,
.unit-status h4,
.environment-stats h4,
.power-generation h4,
.alert-stats h4 {
margin: 0 0 15px 0;
font-size: 18px;
font-weight: 600;
color: #4fc3f7;
text-align: center;
position: relative;
padding-bottom: 8px;
}
.info-section h4::after,
.realtime-indicators h4::after,
.unit-status h4::after,
.environment-stats h4::after,
.power-generation h4::after,
.alert-stats h4::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 50px;
height: 2px;
background: linear-gradient(90deg, transparent, #4fc3f7, transparent);
}
.info-item,
.indicator-item,
.status-item,
.env-item,
.gen-item,
.alert-item {
display: flex;
flex-wrap: wrap;
margin-bottom: 15px;
padding-bottom: 15px;
border-bottom: 1px solid rgba(64, 156, 255, 0.2);
}
.info-item:last-child,
.indicator-item:last-child,
.status-item:last-child,
.env-item:last-child,
.gen-item:last-child,
.alert-item:last-child {
margin-bottom: 0;
padding-bottom: 0;
border-bottom: none;
}
.info-item label,
.indicator-item label,
.status-item label,
.env-item label,
.gen-item label,
.alert-item label {
flex: 1;
font-size: 15px;
color: #cce0ff;
font-weight: 400;
}
.info-item .value,
.indicator-item .value,
.status-item .value,
.env-item .value,
.gen-item .value,
.alert-item .value {
font-weight: 700;
font-size: 16px;
text-shadow: 0 0 8px rgba(255, 255, 255, 0.3);
}
.value.warning {
color: #ff9800;
text-shadow: 0 0 8px rgba(255, 152, 0, 0.7);
}
.value.critical {
color: #f44336;
text-shadow: 0 0 8px rgba(244, 67, 54, 0.7);
}
.value.normal {
color: #66bb6a;
text-shadow: 0 0 8px rgba(102, 187, 106, 0.7);
}
.progress-bar {
width: 100%;
height: 10px;
background: rgba(0, 0, 0, 0.3);
border-radius: 5px;
margin-top: 8px;
overflow: hidden;
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3);
}
.progress-fill {
height: 100%;
border-radius: 5px;
transition: width 1s ease-in-out;
box-shadow: 0 0 5px rgba(255, 255, 255, 0.2);
}
.status-grid {
background: linear-gradient(90deg, #00B42A, #66bb6a);
}
.status-stopped {
background: linear-gradient(90deg, #86909C, #b0bec5);
}
.status-standby {
background: linear-gradient(90deg, #1890ff, #4fc3f7);
}
.status-maintenance {
background: linear-gradient(90deg, #FF7D00, #ffa726);
}
.status-offline {
background: linear-gradient(90deg, #faad14, #ffca28);
}
.status-fault {
background: linear-gradient(90deg, #F53F3F, #ef5350);
}
.chart-placeholder {
margin-top: 20px;
background: rgba(25, 55, 95, 0.3);
border-radius: 10px;
padding: 15px;
border: 1px solid rgba(64, 156, 255, 0.2);
}
.chart-placeholder h4 {
margin: 0 0 15px 0;
font-size: 18px;
font-weight: 600;
color: #4fc3f7;
text-align: center;
position: relative;
padding-bottom: 8px;
}
.chart-placeholder h4::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 50px;
height: 2px;
background: linear-gradient(90deg, transparent, #4fc3f7, transparent);
}
/* 数值卡片样式 */
.value-card {
background: rgba(25, 55, 95, 0.4);
border-radius: 8px;
padding: 12px;
margin-bottom: 15px;
border: 1px solid rgba(64, 156, 255, 0.3);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
transition: all 0.3s ease;
}
.value-card:hover {
transform: translateY(-3px);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
border-color: rgba(64, 156, 255, 0.6);
}
.value-card .label {
font-size: 14px;
color: #a0d2ff;
margin-bottom: 5px;
}
.value-card .value {
font-size: 24px;
font-weight: 700;
text-align: center;
}
/* 状态指示器 */
.status-indicator {
display: inline-block;
width: 12px;
height: 12px;
border-radius: 50%;
margin-right: 8px;
}
.status-indicator.grid {
background: #00B42A;
}
.status-indicator.stopped {
background: #86909C;
}
.status-indicator.standby {
background: #1890ff;
}
.status-indicator.maintenance {
background: #FF7D00;
}
.status-indicator.offline {
background: #faad14;
}
.status-indicator.fault {
background: #F53F3F;
}
/* 修改关键指标网格布局 */
.key-indicators-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
margin-bottom: 10px;
}
.indicator-card {
/* background: rgba(25, 55, 95, 0.6);
border-radius: 8px; */
padding: 15px;
/* border: 1px solid rgba(64, 156, 255, 0.3); */
display: flex;
align-items: center;
background-image: url(/assets/img/caidan-160_128.png);
background-size: 100% 100%;
}
.card-icon {
width: 40px;
height: 40px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
}
.card-info {
flex: 1;
}
.card-label {
font-size: 12px;
color: #a0d2ff;
margin: 0 0 5px 0;
}
.card-value {
font-size: 18px;
font-weight: bold;
color: #4fc3f7;
margin: 0;
}
/* 修改图表区域样式 */
.chart-section {
margin-bottom: 10px;
background: rgba(25, 55, 95, 0.6);
border-radius: 8px;
padding: 15px;
border: 1px solid rgba(64, 156, 255, 0.3);
flex-shrink: 0;
}
.chart-section h4 {
margin: 0 0 15px 0;
font-size: 16px;
font-weight: 600;
color: #4fc3f7;
text-align: center;
padding-bottom: 8px;
border-bottom: 1px solid rgba(64, 156, 255, 0.3);
}
.chart-container {
height: 120px;
position: relative;
}
/* 环境参数网格 */
.environment-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
margin-bottom: 10px;
}
.env-card {
background: rgba(25, 55, 95, 0.6);
border-radius: 8px;
padding: 15px;
border: 1px solid rgba(64, 156, 255, 0.3);
text-align: center;
}
.env-label {
font-size: 12px;
color: #a0d2ff;
margin: 0 0 5px 0;
}
.env-value {
font-size: 18px;
font-weight: bold;
color: #4fc3f7;
margin: 0 0 5px 0;
}
.env-status {
font-size: 12px;
margin: 0;
}
.text-success {
color: #66bb6a;
}
/* 统计数据网格 */
.stats-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
margin-bottom: 25px;
}
.stat-item {
background-image: url('/assets/img/flood/base-active.png');
background-size: 100% 100%;
padding: 18px;
text-align: center;
}
.stat-label {
font-size: 12px;
color: #a0d2ff;
margin: 0 0 5px 0;
}
.stat-value {
font-size: 18px;
font-weight: bold;
color: #4fc3f7;
margin: 0;
}
/* 预警统计 */
.alert-summary {
background: rgba(25, 55, 95, 0.6);
border-radius: 8px;
padding: 15px;
border: 1px solid rgba(64, 156, 255, 0.3);
margin-bottom: 10px;
flex: 1;
display: flex;
flex-direction: column;
}
.alert-summary h4 {
margin: 0 0 15px 0;
font-size: 16px;
font-weight: 600;
color: #4fc3f7;
text-align: center;
padding-bottom: 8px;
border-bottom: 1px solid rgba(64, 156, 255, 0.3);
flex-shrink: 0;
}
.alert-stats-grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 10px;
flex-shrink: 0;
margin-top: 20px;
}
.alert-stat {
text-align: center;
background-image: url('/assets/img/common/bottomItemBg.png');
background-size: 100% 100%;
}
.alert-count {
font-size: 24px;
font-weight: bold;
margin: 15px 0 5px 0;
}
.alert-count.critical {
color: #f44336;
}
.alert-count.warning {
color: #ff9800;
}
.alert-count.normal {
color: #66bb6a;
}
.alert-type {
font-size: 12px;
color: #fffa18;
margin: 20px;
}
/* 运行统计区域 */
.stats-section {
margin-bottom: 25px;
background: rgba(25, 55, 95, 0.6);
border-radius: 8px;
padding: 15px;
border: 1px solid rgba(64, 156, 255, 0.3);
}
.stats-section h4 {
margin: 0 0 15px 0;
font-size: 16px;
font-weight: 600;
color: #4fc3f7;
text-align: center;
padding-bottom: 8px;
border-bottom: 1px solid rgba(64, 156, 255, 0.3);
}
.stats-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
}
.stat-card {
background: rgba(16, 36, 62, 0.4);
border-radius: 6px;
padding: 12px;
text-align: center;
border: 1px solid rgba(64, 156, 255, 0.2);
}
.stat-title {
font-size: 12px;
color: #a0d2ff;
margin: 0 0 5px 0;
}
.stat-number {
font-size: 20px;
font-weight: bold;
color: #4fc3f7;
margin: 0 0 3px 0;
}
.stat-unit {
font-size: 14px;
color: #81d4fa;
}
.stat-desc {
font-size: 11px;
color: #81d4fa;
margin: 0;
}
/* 图表统计信息 */
.chart-stats {
display: flex;
justify-content: space-around;
margin-top: 15px;
padding-top: 12px;
border-top: 1px solid rgba(64, 156, 255, 0.2);
}
.chart-stats .stat-item {
text-align: center;
}
.chart-stats .stat-label {
font-size: 12px;
color: #a0d2ff;
display: block;
margin-bottom: 5px;
}
.chart-stats .stat-value {
font-size: 16px;
font-weight: bold;
color: #e8ffdc;
}
/* 状态详情 */
.status-details {
margin-top: 15px;
padding-top: 12px;
border-top: 1px solid rgba(64, 156, 255, 0.2);
}
.status-item {
display: flex;
justify-content: space-between;
margin-bottom: 8px;
}
.status-item:last-child {
margin-bottom: 0;
}
.status-label {
font-size: 13px;
color: #cce0ff;
display: flex;
align-items: center;
}
.status-dot {
display: inline-block;
width: 10px;
height: 10px;
border-radius: 50%;
margin-right: 8px;
}
.status-value {
font-size: 13px;
font-weight: bold;
color: #4fc3f7;
}
/* 预警统计详情 */
.alert-details {
padding-top: 15px;
border-top: 1px solid rgba(64, 156, 255, 0.2);
flex: 1;
display: flex;
flex-direction: column;
}
.alert-details h5 {
font-size: 14px;
color: #4fc3f7;
margin: 0 0 12px 0;
text-align: center;
flex-shrink: 0;
}
.alert-list {
flex: 1;
overflow-y: auto;
padding-right: 5px;
}
/* 隐藏滚动条但保持滚动功能 */
.alert-list::-webkit-scrollbar {
width: 0;
background: transparent;
}
.alert-list::-webkit-scrollbar-thumb {
background: transparent;
}
/* Firefox */
.alert-list {
scrollbar-width: none;
}
/* IE/Edge */
.alert-list {
-ms-overflow-style: none;
}
.alert-item {
background: rgba(16, 36, 62, 0.4);
border-radius: 6px;
padding: 10px;
margin-bottom: 10px;
border-left: 3px solid;
}
.alert-item:last-child {
margin-bottom: 0;
}
.alert-item.critical {
border-left-color: #f44336;
}
.alert-item.warning {
border-left-color: #ff9800;
}
.alert-item.normal {
border-left-color: #66bb6a;
}
.alert-header {
display: flex;
align-items: center;
margin-bottom: 5px;
}
.alert-icon {
font-size: 14px;
margin-right: 8px;
}
.alert-item.critical .alert-icon {
color: #f44336;
}
.alert-item.warning .alert-icon {
color: #ff9800;
}
.alert-item.normal .alert-icon {
color: #66bb6a;
}
.alert-title {
flex: 1;
font-size: 13px;
font-weight: 600;
color: #e0f0ff;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.alert-time {
font-size: 11px;
color: #81d4fa;
}
.alert-content {
display: flex;
justify-content: space-between;
align-items: center;
}
.alert-desc {
font-size: 12px;
color: #a0d2ff;
flex: 1;
margin: 0 10px 0 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.alert-status {
flex-shrink: 0;
}
.status-tag {
font-size: 10px;
padding: 2px 6px;
border-radius: 10px;
font-weight: 600;
}
.status-tag.critical {
background: rgba(244, 67, 54, 0.2);
color: #f44336;
}
.status-tag.warning {
background: rgba(255, 152, 0, 0.2);
color: #ff9800;
}
.status-tag.normal {
background: rgba(102, 187, 106, 0.2);
color: #66bb6a;
}
.alert-footer {
text-align: center;
margin-top: 12px;
flex-shrink: 0;
}
.view-all-alerts {
font-size: 12px;
color: #4fc3f7;
text-decoration: none;
}
.view-all-alerts:hover {
text-decoration: underline;
}
.chart_title {
height: 5vh;
background: url('./assets/img/common/homeTitle.png') no-repeat;
background-position: center;
background-position-x: center;
background-position-y: center;
background-size: 108% 120%;
display: flex;
justify-content: center;
align-items: center;
}
.chart_title .title span {
font-size: 2.4vh;
letter-spacing: 0.2vh;
font-family: YouSheBiaoTiHei;
font-weight: 400;
color: #ffffff;
}
.tourButton {
background-image: url('./assets/img/common/b.png');
background-size: 100% 100%;
}
/* 风机详情面板样式 */
.detail-panel {
position: absolute;
top: 20px;
left: 50%;
transform: translateX(-50%);
width: 350px;
background: rgba(25, 55, 95, 0.85);
border: 1px solid rgba(64, 156, 255, 0.6);
border-radius: 10px;
color: #e0f0ff;
z-index: 1000;
backdrop-filter: blur(5px);
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
padding: 15px;
}
.detail-panel.hidden {
display: none;
}
.detail-header {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 10px;
border-bottom: 1px solid rgba(64, 156, 255, 0.4);
margin-bottom: 15px;
}
.detail-header h3 {
margin: 0;
font-size: 18px;
color: #4fc3f7;
font-weight: 600;
}
.close-btn {
background: none;
border: none;
color: #a0d2ff;
font-size: 20px;
cursor: pointer;
padding: 0;
width: 25px;
height: 25px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
}
.close-btn:hover {
background: rgba(244, 67, 54, 0.2);
color: #f44336;
}
.detail-content {
padding: 5px 0;
}
.detail-item {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
padding: 8px 10px;
background: rgba(16, 36, 62, 0.5);
border-radius: 6px;
border: 1px solid rgba(64, 156, 255, 0.15);
}
.detail-item:last-child {
margin-bottom: 0;
}
.detail-item label {
font-size: 13px;
color: #cce0ff;
font-weight: 500;
}
.detail-item .value {
font-size: 15px;
font-weight: 700;
color: #4fc3f7;
}
/* 状态颜色 */
.status-grid {
color: #00B42A;
}
.status-stopped {
color: #86909C;
}
.status-standby {
color: #1890ff;
}
.status-maintenance {
color: #FF7D00;
}
.status-fault {
color: #F53F3F;
}
/* 响应式设计 */
@media (max-width: 768px) {
.detail-panel {
width: 300px;
left: 50%;
right: auto;
transform: translateX(-50%);
}
}
/* 船舶态势图容器样式 */
.situation-chart-container {
display: grid;
grid-template-columns: repeat(1, 1fr);
gap: 15px;
/* margin-bottom: 20px; */
}
.situation-chart {
/* background: rgba(25, 55, 95, 0.6);
border-radius: 8px;
border: 1px solid rgba(64, 156, 255, 0.3); */
padding: 15px;
text-align: center;
background-image: url(/assets/img/kuang-ld-1710_1060.png);
background-size: 100% 100%;
opacity: 0.8;
}
.situation-title {
font-size: 14px;
color: #a0d2ff;
margin-bottom: 10px;
font-weight: bold;
}
/* 风向态势图 */
.wind-direction-container {
display: flex;
flex-direction: column;
align-items: center;
height: 100%;
}
.wind-direction-indicator {
width: 120px;
height: 120px;
position: relative;
border-radius: 50%;
background: linear-gradient(135deg, #0a3d62, #1a5276);
border: 2px solid rgba(64, 169, 255, 0.5);
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
}
.wind-direction-compass {
position: absolute;
width: 100%;
height: 100%;
border-radius: 50%;
background: rgba(10, 25, 41, 0.3);
}
.wind-direction-arrow {
position: absolute;
top: 50%;
left: 50%;
width: 3px;
height: 45px;
background: linear-gradient(to top, #40a9ff, #0277bd);
transform-origin: 50% 100%;
transform: translate(-50%, -100%) rotate(0deg);
border-radius: 2px;
z-index: 10;
box-shadow: 0 0 5px rgba(64, 169, 255, 0.7);
transition: transform 1s ease;
}
.wind-direction-arrow::after {
content: '';
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 8px solid #40a9ff;
}
.wind-direction-labels {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
}
.wind-direction-label {
position: absolute;
font-size: 10px;
color: #e0f0ff;
font-weight: bold;
}
.north {
top: 2px;
left: 50%;
transform: translateX(-50%);
}
.east {
top: 50%;
right: 2px;
transform: translateY(-50%);
}
.south {
bottom: 2px;
left: 50%;
transform: translateX(-50%);
}
.west {
top: 50%;
left: 2px;
transform: translateY(-50%);
}
.wind-direction-details {
display: flex;
justify-content: space-around;
width: 100%;
margin-top: 8px;
gap: 5px;
}
.wind-detail-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 4px;
/* background: rgba(25, 55, 95, 0.6);
border-radius: 4px; */
min-width: 50px;
background-image: url(/assets/img/biaoti-140_30.png);
background-size: 100% 100%;
}
.wind-detail-label {
font-size: 10px;
color: #a0d2ff;
margin-bottom: 2px;
}
.wind-detail-value {
color: #fee840;
text-shadow: 0 0 8px rgba(64, 169, 255, 0.7);
font-weight: bold;
font-size: 12px;
}
/* 温度、湿度、气压等数值展示样式 */
.wind-speed-container,
.wave-height-container,
.wave-direction-container {
display: flex;
flex-direction: column;
align-items: center;
}
.wind-speed-gauge,
.wave-height-gauge {
position: relative;
width: 80px;
height: 80px;
margin-bottom: 10px;
}
.wind-speed-fill,
.wave-height-fill {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
background: #40a9ff;
border-radius: 40px 40px 0 0;
}
.wind-speed-value,
.wave-height-value {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 12px;
font-weight: bold;
color: #e0f0ff;
}
.wind-speed-label,
.wave-height-label {
font-size: 10px;
color: #a0d2ff;
}
.wind-speed-details,
.wave-height-details,
.wave-direction-details {
width: 100%;
}
.wind-speed-detail-item,
.wave-detail-item,
.wave-direction-detail-item {
display: flex;
justify-content: space-between;
margin-bottom: 5px;
}
.wind-speed-detail-label,
.wave-detail-label,
.wave-direction-detail-label {
font-size: 12px;
color: #a0d2ff;
}
.wind-speed-detail-value,
.wave-detail-value,
.wave-direction-detail-value {
font-size: 12px;
font-weight: bold;
color: #40a9ff;
}
.gauge-container {
display: flex;
justify-content: space-around;
margin: 10px 0;
}
.gauge {
width: 80px;
height: 80px;
position: relative;
}
.gauge-bg {
width: 100%;
height: 100%;
border-radius: 50%;
background: #0d1b2a;
position: relative;
overflow: hidden;
border: 2px solid rgba(79, 195, 247, 0.5);
}
.gauge-fill {
position: absolute;
bottom: 0;
width: 100%;
background: linear-gradient(to top, #4fc3f7, #0277bd);
border-radius: 0 0 100px 100px;
transform-origin: bottom;
transition: height 0.5s ease;
}
.gauge-value {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-weight: bold;
color: #e3f2fd;
}
</style>
</head>
<body>
<div id="container">
<div id="loading">正在加载科考船...</div>
</div>
<!-- 左侧面板 -->
<div id="left-panel" class="panel left-panel">
<div class="panel-content">
<!-- 关键指标卡片 -->
<div class="chart-section">
<div class="chart_title">
<span>关键指标</span>
</div>
<div class="key-indicators-grid">
<div class="indicator-card">
<div class="card-icon bg-primary/10">
<img src="/assets/img/28_44.png" alt="" style="width: 60%;height: 60%;">
</div>
<div class="card-info">
<p class="card-label">对地速度</p>
<p class="card-value">12.0 kn</p>
</div>
</div>
<div class="indicator-card">
<div class="card-icon bg-success/10">
<img src="/assets/img/fengshan-sn-74.png" alt="" style="width: 60%;height: 60%;">
</div>
<div class="card-info">
<p class="card-label">对水速度</p>
<p class="card-value">11.8 kn</p>
</div>
</div>
<div class="indicator-card">
<div class="card-icon bg-warning/10">
<img src="/assets/img/icon1-40_40.png" alt="" style="width: 60%;height: 60%;">
</div>
<div class="card-info">
<p class="card-label">航向角</p>
<p class="card-value">145.6°</p>
</div>
</div>
<div class="indicator-card">
<div class="card-icon bg-danger/10">
<img src="/assets/img/icon2-40_40.png" alt="" style="width: 60%;height: 60%;">
</div>
<div class="card-info">
<p class="card-label">航迹向</p>
<p class="card-value">146.1°</p>
</div>
</div>
<div class="indicator-card">
<div class="card-icon bg-danger/10">
<img src="/assets/img/icon3-70.png" alt="" style="width: 50%;height: 50%;">
</div>
<div class="card-info">
<p class="card-label">艏向变化率</p>
<p class="card-value">0.05°/s</p>
</div>
</div>
<div class="indicator-card">
<div class="card-icon bg-danger/10">
<img src="/assets/img/icon-4-50_50.png" alt="" style="width: 60%;height: 60%;">
</div>
<div class="card-info">
<p class="card-label">舵角</p>
<p class="card-value">0.3°</p>
</div>
</div>
<div class="indicator-card">
<div class="card-icon bg-warning/10">
<img src="/assets/img/icon5-70.png" alt="" style="width: 50%;height: 50%;">
</div>
<div class="card-info">
<p class="card-label">艏吃水</p>
<p class="card-value" style="color: #e48527;">6.20 m</p>
</div>
</div>
<div class="indicator-card">
<div class="card-icon bg-warning/10">
<img src="/assets/img/icon--70.png" alt="" style="width: 60%;height: 60%;">
</div>
<div class="card-info">
<p class="card-label">艉吃水</p>
<p class="card-value" style="color: #f4ea2a;">6.50 m</p>
</div>
</div>
</div>
</div>
<!-- 船舶态势图 -->
<!-- <div class="chart-section">
<div class="chart_title">
<span>船舶态势</span>
</div>
<div class="situation-chart-container">
<div class="situation-chart">
<div class="situation-title">实时风</div>
<div class="wind-direction-container">
<div class="wind-direction-indicator">
<div class="wind-direction-compass"></div>
<div class="wind-direction-arrow" id="windArrow"></div>
<div class="wind-direction-labels">
<div class="wind-direction-label north">N</div>
<div class="wind-direction-label east">E</div>
<div class="wind-direction-label south">S</div>
<div class="wind-direction-label west">W</div>
</div>
</div>
<div class="wind-direction-details">
<div class="wind-detail-item">
<div class="wind-detail-label">风向</div>
<div class="wind-detail-value" id="windDirectionValue">58°</div>
</div>
<div class="wind-detail-item">
<div class="wind-detail-label">风速</div>
<div class="wind-detail-value">8.2 m/s</div>
</div>
</div>
</div>
</div>
<div class="situation-chart">
<div class="situation-title">水温</div>
<div class="wind-speed-container">
<div class="wind-speed-gauge">
<div class="wind-speed-fill" id="windSpeedFill" style="height: 60%"></div>
<div class="wind-speed-value" id="windSpeedValue">78°C</div>
<div class="wind-speed-label">主机出口</div>
</div>
<div class="wind-speed-details">
<div class="wind-speed-detail-item">
<div class="wind-speed-detail-label">电池舱</div>
<div class="wind-speed-detail-value">25°C</div>
</div>
</div>
</div>
</div>
<div class="situation-chart">
<div class="situation-title">湿度</div>
<div class="wave-height-container">
<div class="wave-height-gauge">
<div class="wave-height-fill" id="waveHeightFill" style="height: 60%"></div>
<div class="wave-height-value" id="waveHeightValue">45%</div>
<div class="wave-height-label">电子机舱</div>
</div>
<div class="wave-height-details">
<div class="wave-detail-item">
<div class="wave-detail-label">气象桅杆</div>
<div class="wave-detail-value">60-90%</div>
</div>
</div>
</div>
</div>
<div class="situation-chart">
<div class="situation-title">压力</div>
<div class="wave-direction-container">
<div class="wave-direction-indicator" id="pressureChart">
</div>
<div class="wave-direction-details">
<div class="wave-direction-detail-item">
<div class="wave-direction-detail-label">主机滑油</div>
<div class="wave-direction-detail-value">4.5 bar</div>
</div>
<div class="wave-direction-detail-item">
<div class="wave-direction-detail-label">月池通海</div>
<div class="wave-direction-detail-value">1.02 bar</div>
</div>
</div>
</div>
</div>
</div>
</div> -->
<!-- 实时功率图表 -->
<div class="chart-section">
<div class="chart_title">
<span>能耗情况</span>
</div>
<div class="chart-container">
<canvas id="realtimePowerChart"></canvas>
</div>
<div class="chart-stats">
<div class="stat-item">
<span class="stat-label">全船科考工况</span>
<span class="stat-value">1.8 MW</span>
</div>
<div class="stat-item">
<span class="stat-label">实验室峰值</span>
<span class="stat-value">180 kW</span>
</div>
</div>
</div>
<!-- 机组状态分布 -->
<div class="chart-section" style="flex: 1;display: flex;flex-direction: column;">
<div class="chart_title">
<span>姿态信息</span>
</div>
<div class="chart-container">
<canvas id="unitStatusChart"></canvas>
</div>
<div class="status-details">
<div class="status-item">
<span class="status-label">
<span class="status-dot status-grid"></span>
横摇
</span>
<span class="status-value">2.5°</span>
</div>
<div class="status-item">
<span class="status-label">
<span class="status-dot status-maintenance"></span>
纵摇
</span>
<span class="status-value">1.2°</span>
</div>
<div class="status-item">
<span class="status-label">
<span class="status-dot status-fault"></span>
升沉
</span>
<span class="status-value">0.15m</span>
</div>
</div>
</div>
</div>
</div>
<!-- 右侧面板 -->
<div id="right-panel" class="panel right-panel">
<div class="panel-content">
<!-- 吃水信息 -->
<div class="chart-section">
<div class="chart_title">
<span>综合指标</span>
</div>
<div class="key-indicators-grid">
<div class="indicator-card">
<div class="card-icon bg-warning/10">
<img src="/assets/img/icon/发电机.png" alt="">
</div>
<div class="card-info">
<p class="card-label">主机RMS</p>
<p class="card-value" style="color: #e48527;">2.1 g</p>
</div>
</div>
<div class="indicator-card">
<div class="card-icon bg-warning/10">
<img src="/assets/img/icon/ship_flat.png" alt="">
</div>
<div class="card-info">
<p class="card-label">实验室台</p>
<p class="card-value" style="color: #f4ea2a;">0.05 g</p>
</div>
</div>
<div class="indicator-card">
<div class="card-icon bg-warning/10">
<img src="/assets/img/icon/主机滑油备用泵.png" alt="">
</div>
<div class="card-info">
<p class="card-label">主机滑油</p>
<p class="card-value" style="color: #e48527;">4.5 bar</p>
</div>
</div>
<div class="indicator-card">
<div class="card-icon bg-warning/10">
<img src="/assets/img/icon/水深度.png" alt="">
</div>
<div class="card-info">
<p class="card-label">月池通海</p>
<p class="card-value" style="color: #f4ea2a;">1.02 bar</p>
</div>
</div>
<div class="indicator-card">
<div class="card-icon bg-warning/10">
<img src="/assets/img/icon/电池舱.png" alt="">
</div>
<div class="card-info">
<p class="card-label">电池舱</p>
<p class="card-value" style="color: #e48527;">25°C</p>
</div>
</div>
<div class="indicator-card">
<div class="card-icon bg-warning/10">
<img src="/assets/img/icon/出口.png" alt="">
</div>
<div class="card-info">
<p class="card-label">主机出口</p>
<p class="card-value" style="color: #f4ea2a;">78°C</p>
</div>
</div>
</div>
</div>
<!-- 环境参数 -->
<div class="chart-section">
<div class="chart_title">
<span>环境参数</span>
</div>
<div class="situation-chart-container">
<div class="situation-chart">
<div class="situation-title">实时风</div>
<div class="wind-direction-container">
<div class="wind-direction-indicator">
<div class="wind-direction-compass"></div>
<div class="wind-direction-arrow" id="windArrow"></div>
<div class="wind-direction-labels">
<div class="wind-direction-label north">N</div>
<div class="wind-direction-label east">E</div>
<div class="wind-direction-label south">S</div>
<div class="wind-direction-label west">W</div>
</div>
</div>
<div class="wind-direction-details">
<div class="wind-detail-item">
<div class="wind-detail-label">
<!-- <img src="/assets/img/78_130.png" style="width: 50%;height: 50%;">
<br> -->
风向
</div>
<div class="wind-detail-value" id="windDirectionValue">58°</div>
</div>
<div class="wind-detail-item">
<div class="wind-detail-label">
<!-- <img src="/assets/img/78_130.png" style="width: 50%;height: 50%;"> -->
风速
</div>
<div class="wind-detail-value">8.2 m/s</div>
</div>
<div class="wind-detail-item">
<div class="wind-detail-label">
<!-- <img src="/assets/img/78_130.png" style="width: 50%;height: 50%;"> -->
水深
</div>
<div class="wind-detail-value">3850 m</div>
</div>
<div class="wind-detail-item">
<div class="wind-detail-label">
<!-- <img src="/assets/img/78_130.png" style="width: 50%;height: 50%;"> -->
浪高
</div>
<div class="wind-detail-value">1.8 m</div>
</div>
</div>
</div>
</div>
<div class="situation-chart">
<div class="situation-title">湿度</div>
<div class="wave-height-container"
style="grid-template-columns: 1fr 1fr;display: block;padding: 0 10px 20px;">
<div class="gauge-container">
<div class="gauge">
<div class="gauge-bg">
<div class="gauge-fill" style="height: 60.704%;"></div>
</div>
<div class="gauge-value">45%</div>
<div style="text-align: center; margin-top: 5px; font-size: 12px; color: #a0d2ff;">
气象桅杆</div>
</div>
<div class="gauge">
<div class="gauge-bg">
<div class="gauge-fill" style="height: 34.1394%;"></div>
</div>
<div class="gauge-value">80%</div>
<div style="text-align: center; margin-top: 5px; font-size: 12px; color: #a0d2ff;">
电子机舱
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 预警统计 -->
<div class="alert-summary" style="flex: 1; display: flex; flex-direction: column;">
<div class="chart_title">
<span>船舶预警统计</span>
</div>
<div class="alert-stats-grid">
<div class="alert-stat">
<p class="alert-count critical">0</p>
<p class="alert-type">严重</p>
</div>
<div class="alert-stat">
<p class="alert-count warning">1</p>
<p class="alert-type">重要</p>
</div>
<div class="alert-stat">
<p class="alert-count normal">3</p>
<p class="alert-type">一般</p>
</div>
</div>
<!-- 详细预警信息 -->
<div class="alert-details" style="flex: 1; display: flex; flex-direction: column;">
<h5>最新预警</h5>
<div class="alert-list" style="flex: 1;">
<div class="alert-item warning">
<div class="alert-header">
<i class="fa fa-exclamation-triangle alert-icon"></i>
<span class="alert-title">主机温度偏高</span>
<span class="alert-time">09:12</span>
</div>
<div class="alert-content">
<p class="alert-desc">主机出口温度接近上限值</p>
<div class="alert-status">
<span class="status-tag warning">待处理</span>
</div>
</div>
</div>
<div class="alert-item normal" style="padding: 10px">
<div class="alert-header">
<i class="fa fa-exclamation-triangle alert-icon"></i>
<span class="alert-title">电子机舱湿度</span>
<span class="alert-time">10:45</span>
</div>
<div class="alert-content">
<p class="alert-desc">电子机舱湿度处于正常范围上限</p>
<div class="alert-status">
<span class="status-tag normal">已记录</span>
</div>
</div>
</div>
<div class="alert-item normal" style="padding: 10px">
<div class="alert-header">
<i class="fa fa-exclamation-triangle alert-icon"></i>
<span class="alert-title">艉吃水略深</span>
<span class="alert-time">08:30</span>
</div>
<div class="alert-content">
<p class="alert-desc">艉吃水较艏吃水深0.3米,属正常范围</p>
<div class="alert-status">
<span class="status-tag normal">已记录</span>
</div>
</div>
</div>
</div>
<div class="alert-footer">
<a href="#" class="view-all-alerts">查看全部预警 &gt;</a>
</div>
</div>
</div>
</div>
</div>
<!-- 在你的HTML文件中添加 -->
<div style="position: absolute; bottom: 20px; right: 350px; z-index: 100;">
<div id="tourButton" onclick="toggleAutoTour()" class="tourButton"
style="padding: 20px; color: white; border: none; border-radius: 5px; cursor: pointer;">
开始漫游
</div>
</div>
<div style="position: absolute; bottom: 20px; left: 350px; z-index: 100;">
<div class="chart-section"
style="background: none;background-image: url('/assets/img/moshi-2-300_100.png');background-size: 100% 100%;">
<div style="text-align: center;padding: 10px 20px 40px;">
<div style="margin-bottom: 8px;">
<span style="color: #81d4fa; font-size: 16px; font-weight: bold; margin-left: 5px;">
114.0807°E</span>
</div>
<div>
<span style="color: #81d4fa; font-size: 16px; font-weight: bold; margin-left: 5px;">
13.5604°N</span>
</div>
</div>
</div>
</div>
<!-- Three.js 核心库 -->
<script src="js/three.min.js"></script>
<!-- 引入RGBELoader -->
<script src="js/RGBELoader.js"></script>
<!-- 本地Three.js扩展库 -->
<script src="js/OrbitControls.js"></script>
<!-- Water.js 水面效果 -->
<script src="js/Water.js"></script>
<!-- Sky.js 天空效果 -->
<script src="js/Sky.js"></script>
<!-- GLTF加载器 -->
<script src="js/GLTFLoader.js"></script>
<!-- DRACO解码器 - 使用本地版本 -->
<script src="js/DRACOLoader.js"></script>
<script src="draco/draco_decoder.js"></script>
<script src="draco/draco_wasm_wrapper.js"></script>
<script src="js/fflate.min.js"></script>
<script src="js/FBXLoader.js"></script>
<!-- 主程序 -->
<script src="kekaochuan_mainV1.js"></script>
<script>
// 初始化实时功率图表
function initRealtimePowerChart() {
const ctx = document.getElementById('realtimePowerChart').getContext('2d');
new Chart(ctx, {
type: 'line',
data: {
labels: ['00:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00', '24:00'],
datasets: [{
label: '能耗 (kW)',
data: [1200, 1400, 1600, 1800, 1750, 1700, 1650, 1500, 1400],
borderColor: '#40a9ff',
backgroundColor: 'rgba(64, 169, 255, 0.1)',
borderWidth: 2,
pointRadius: 3,
pointBackgroundColor: '#40a9ff',
pointBorderColor: '#ffffff',
pointBorderWidth: 1,
fill: true,
tension: 0.4
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
display: false
},
tooltip: {
mode: 'index',
intersect: false,
callbacks: {
label: function (context) {
return `能耗: ${context.parsed.y} kW`;
}
}
}
},
scales: {
y: {
min: 1000,
max: 2000,
title: {
display: true,
text: '能耗 (kW)',
color: 'rgba(255, 255, 255, 0.7)'
},
ticks: {
color: 'rgba(255, 255, 255, 0.7)',
font: {
size: 10
},
callback: function (value) {
return value + ' kW';
}
},
grid: {
color: 'rgba(255, 255, 255, 0.1)'
}
},
x: {
ticks: {
color: 'rgba(255, 255, 255, 0.7)',
font: {
size: 10
}
},
grid: {
display: false
}
}
}
}
});
}
// 初始化机组状态分布图表
function initUnitStatusChart() {
const ctx = document.getElementById('unitStatusChart').getContext('2d');
new Chart(ctx, {
type: 'radar',
data: {
labels: ['横摇', '纵摇', '升沉', '航向', '速度', '吃水'],
datasets: [{
label: '姿态稳定性',
data: [75, 85, 90, 95, 88, 80],
backgroundColor: 'rgba(64, 169, 255, 0.2)',
borderColor: '#40a9ff',
pointBackgroundColor: '#40a9ff',
pointBorderColor: '#fff',
pointHoverBackgroundColor: '#fff',
pointHoverBorderColor: '#40a9ff'
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
r: {
angleLines: {
color: 'rgba(255, 255, 255, 0.1)'
},
grid: {
color: 'rgba(255, 255, 255, 0.1)'
},
pointLabels: {
color: 'rgba(255, 255, 255, 0.7)',
font: {
size: 10
}
},
ticks: {
backdropColor: 'transparent',
color: 'rgba(255, 255, 255, 0.7)',
font: {
size: 8
},
stepSize: 20
},
min: 0,
max: 100
}
},
plugins: {
legend: {
display: false
}
}
}
});
}
// 页面加载后初始化所有图表
document.addEventListener('DOMContentLoaded', function () {
initRealtimePowerChart();
initUnitStatusChart();
});
// 风向和波高态势图更新函数
function updateSituationCharts() {
// 随机更新风向0-360度
var windDirection = Math.floor(Math.random() * 360);
var windArrow = document.getElementById('windArrow');
if (windArrow) {
windArrow.style.transform = 'translate(-50%, -100%) rotate(' + windDirection + 'deg)';
}
// 更新仪表
document.querySelectorAll('.gauge-fill')[0].style.height = (60 + Math.random() * 10) + '%';
document.querySelectorAll('.gauge-value')[0].textContent = Math.round(parseFloat(document.querySelectorAll('.gauge-fill')[0].style.height)) + '%';
document.querySelectorAll('.gauge-fill')[1].style.height = (25 + Math.random() * 10) + '%';
document.querySelectorAll('.gauge-value')[1].textContent = Math.round(parseFloat(document.querySelectorAll('.gauge-fill')[1].style.height)) + '%';
// // 更新风向显示
// var directions = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW'];
// var index = Math.round(windDirection / 22.5) % 16;
// var windDirectionValue = document.getElementById('windDirectionValue');
// if (windDirectionValue) {
// windDirectionValue.textContent = directions[index] + ' ' + windDirection + '°';
// }
// // 随机更新风速5-20 m/s
// var windSpeed = 5 + Math.random() * 15;
// var windSpeedFill = document.getElementById('windSpeedFill');
// var windSpeedValue = document.getElementById('windSpeedValue');
// if (windSpeedFill && windSpeedValue) {
// // 风速填充高度最大20 m/s对应100%
// var windFillHeight = (windSpeed / 20) * 100;
// windSpeedFill.style.height = windFillHeight + '%';
// windSpeedValue.textContent = windSpeed.toFixed(1) + 'm/s';
// // 根据风速设置预警颜色
// if (windSpeed < 10) {
// windSpeedFill.className = 'wind-speed-fill';
// } else if (windSpeed < 15) {
// windSpeedFill.className = 'wind-speed-fill';
// } else {
// windSpeedFill.className = 'wind-speed-fill';
// }
// }
// // 随机更新波高0.5-5 m
// var waveHeight = 0.5 + Math.random() * 4.5;
// var waveHeightFill = document.getElementById('waveHeightFill');
// var waveHeightValue = document.getElementById('waveHeightValue');
// if (waveHeightFill && waveHeightValue) {
// // 波高填充高度最大5 m对应100%
// var waveFillHeight = (waveHeight / 5) * 100;
// waveHeightFill.style.height = waveFillHeight + '%';
// waveHeightValue.textContent = waveHeight.toFixed(1) + 'm';
// }
// // 随机更新波向0-360度
// var waveDirection = Math.floor(Math.random() * 360);
// var waveDirectionArrow = document.getElementById('waveDirectionArrow');
// var waveDirectionValue = document.getElementById('waveDirectionValue');
// if (waveDirectionArrow) {
// waveDirectionArrow.style.transform = 'translate(-50%, -100%) rotate(' + waveDirection + 'deg)';
// }
// if (waveDirectionValue) {
// var waveDirectionText = directions[Math.round(waveDirection / 22.5) % 16];
// waveDirectionValue.textContent = waveDirectionText + ' ' + waveDirection + '°';
// }
}
// 气压图表初始化函数
function initPressureChart() {
const humChartCtx = document.getElementById('humChart');
if (!humChartCtx) return;
const humChart = echarts.init(humChartCtx);
const humOptions = {
// 仪表盘系列配置(多个同心圆组成复合仪表盘)
series: [
// 第1个系列最内层红色圆环装饰用
{
type: 'gauge', // 类型为仪表盘
center: ['50%', '60%'], // 中心位置水平50%垂直60%
radius: '30%', // 半径占容器30%
min: 950, // 最小值
max: 1050, // 最大值
startAngle: 270, // 起始角度12点钟方向为0度
endAngle: -89.99999, // 结束角度形成270度的圆弧
splitNumber: 5, // 减少分割段数从10减少到5
axisLine: {
lineStyle: {
color: [[1, '#ff4500']], // 轴线颜色(红色)
width: 0, // 轴线宽度0表示不显示
shadowColor: '#fff', // 阴影颜色
shadowBlur: 10 // 阴影模糊大小
}
},
axisLabel: { show: false }, // 不显示刻度标签
axisTick: {
length: 4, // 刻度线长度
lineStyle: { color: 'rgba(176,204,53,.5)' } // 刻度线颜色(半透明绿色)
},
splitLine: { show: false }, // 不显示分割线
pointer: {
width: 0, // 指针宽度0表示不显示
shadowColor: '#fff', // 指针阴影颜色
shadowBlur: 5 // 指针阴影模糊大小
},
detail: { show: false } // 不显示详情
},
// 第2个系列中层灰色圆环装饰用
{
name: '气压', // 系列名称
type: 'gauge',
center: ['50%', '60%'],
radius: '60%', // 半径比内层大
min: 950,
max: 1050,
splitNumber: 5, // 减少分割段数从10减少到5
axisLine: {
lineStyle: {
color: [[1, '#037592']], // 轴线颜色(深灰色)
width: 8, // 轴线宽度
shadowBlur: 10 // 阴影模糊
}
},
axisLabel: {
textStyle: {
fontWeight: '',
color: 'rgba(30,144,255,0.3)', // 调整刻度数字颜色,降低透明度使其更清晰可见
shadowColor: '#fff',
shadowBlur: 10,
fontSize: 8 // 调整字体大小
},
distance: 0 // 调整标签距离
},
axisTick: {
length: 2, // 刻度线长度
lineStyle: { color: 'auto' } // 自动颜色
},
splitLine: {
length: 0, // 分割线长度0表示不显示
lineStyle: {
width: 0,
color: '#fff',
shadowColor: '#fff',
shadowBlur: 10
}
},
pointer: {
width: 0, // 不显示指针
shadowColor: '#fff',
shadowBlur: 5
},
detail: { show: false } // 不显示详情
},
// 第3个系列最外层主仪表盘显示红色指针
{
type: 'gauge',
center: ['50%', '60%'],
radius: '100%', // 最大半径(占满容器)
min: 950,
max: 2000,
name: '气压', // 系列名称(用于提示框显示)
splitNumber: 5, // 减少分割段数从10减少到5
axisLine: {
lineStyle: {
color: [[1, '#55D0D4']], // 轴线颜色(浅灰色)
width: 1 // 轴线宽度
}
},
itemStyle: {
normal: {
color: '#55D0D4' // 数据项颜色
}
},
axisTick: { length: 3 }, // 刻度线长度
axisLabel: {
textStyle: {
fontWeight: 'bolder', // 加粗字体
fontSize: 8, // 调整字体大小从10减小到8
fontFamily: 'Arial', // 字体
color: 'rgba(224, 240, 255, 0.8)' // 调整刻度数字颜色,使用半透明的浅色
},
distance: 2 // 调整标签距离
},
splitLine: {
length: 5, // 分割线长度
lineStyle: { width: 1 } // 分割线宽度
},
pointer: {
width: 3, // 指针宽度
length: '90%', // 指针长度(相对半径)
itemStyle: {
color: '#FF0000' // 指针颜色(红色)
}
},
detail: {
show: false,
formatter: '{value} hPa',
offsetCenter: [0, '80%'],
textStyle: {
fontSize: 14, // 稍微减小字体大小
color: '#e0f0ff'
}
}, // 显示详情
data: [{ value: 1013.2 }] // 绑定气压数据
}
]
};
humChart.setOption(humOptions);
// 添加窗口大小调整事件监听
window.addEventListener('resize', function () {
humChart.resize();
});
}
function toggleAutoTour() {
// 漫游功能逻辑
}
function closeTurbineDetail() {
document.getElementById('turbine-detail-panel').classList.add('hidden');
}
// 页面加载完成后初始化态势图
document.addEventListener('DOMContentLoaded', function () {
updateSituationCharts();
// initPressureChart();
// 每5秒更新一次态势图数据
setInterval(updateSituationCharts, 5000);
});
</script>
</body>
</html>