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.

5429 lines
230 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="https://cdn.tailwindcss.com"></script>
<link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
<!-- <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.8/dist/chart.umd.min.js"></script> -->
<!-- <link href="./model/font-awesome.min.css" rel="stylesheet"> -->
<script src="./model/chart.umd.min.js"></script>
<style>
#mapimg{
background: url('/img/海岛测绘.png') top no-repeat;
background-size: 100% 100%;
}
/* 新增顶部标题栏样式 */
.topDiv {
width: 100%;
height: 8vh;
background: url('/assets/img/topBg.png') top no-repeat;
background-size: 100% 115%;
display: flex;
justify-content: center;
z-index: 990;
position: relative;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
.topDiv .center {
font-family: PangMenZhengDao, 'Source Han Sans CN';
font-weight: 400;
font-size: 4.1vh;
color: #ffffff;
align-self: center;
margin-top: -40px;
}
.topDiv .left {
position: absolute;
top: 1vh;
left: 1vw;
color: #ffffff;
}
.topDiv .left span:nth-child(1) {
font-weight: bold;
font-size: 0.8vw;
margin-right: 0.5vh;
}
.topDiv .right {
position: absolute;
top: 50%;
right: 3vw;
transform: translateY(-50%);
height: 60%;
}
.topDiv .right img {
height: 100%;
object-fit: contain;
}
/* 调整主内容区域的顶部边距 */
#main-content {
margin-top: 0px 10px;
position: absolute;
left: 260px;
}
/* 重置默认样式 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', Arial, sans-serif;
}
/* 页面背景 */
body {
background: url('/assets/img/bg.png') no-repeat;
background-size: 100% 100%;
color: #e0f0ff;
height: 100vh;
background-color: #0a1a2a;
overflow-x: hidden;
overflow-y: auto;
}
/* 顶部导航栏 */
header {
background: rgba(12, 42, 73, 0.1);
backdrop-filter: blur(10px);
border-bottom: 1px solid rgba(64, 156, 255, 0.3);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
/* 侧边栏 */
aside {
background: rgba(12, 42, 73, 0.1);
backdrop-filter: blur(10px);
border-right: 1px solid rgba(64, 156, 255, 0.3);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
/* 卡片样式 */
.bg-white {
background: rgba(12, 42, 73, 0.1) !important;
backdrop-filter: blur(10px);
border: 1px solid rgba(64, 156, 255, 0.3);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
color: #e0f0ff;
border-radius: 8px;
}
/* 卡片样式 */
.bg-white1 {
background: rgba(12, 42, 73, 0.1) !important;
backdrop-filter: blur(1px);
border: 1px solid rgba(64, 156, 255, 0.3);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
color: #e0f0ff;
border-radius: 8px;
}
.card-shadow {
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
}
.card-shadow-hover:hover {
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.4);
transform: translateY(-2px);
border: 1px solid #4fc3f7;
}
/* 按钮样式 */
.bg-blue-600 {
background: linear-gradient(to bottom, #4fc3f7, #0277bd) !important;
border: none;
}
.bg-blue-600:hover {
background: linear-gradient(to bottom, #66d0ff, #0386d8) !important;
box-shadow: 0 0 8px rgba(79, 195, 247, 0.7);
}
.text-blue-600 {
color: #4fc3f7 !important;
}
.border-blue-500 {
border-color: #4fc3f7 !important;
}
button:hover {
transform: translateY(-2px);
transition: all 0.3s;
}
/* 状态标签样式 */
.drone-status-active {
background: linear-gradient(to top, #4fc3f7, #0277bd) !important;
text-shadow: 0 0 8px rgba(79, 195, 247, 0.7);
}
.drone-status-idle {
background: linear-gradient(to top, #66bb6a, #388e3c) !important;
text-shadow: 0 0 8px rgba(102, 187, 106, 0.7);
}
.drone-status-maintenance {
background: linear-gradient(to top, #ff9800, #f57c00) !important;
text-shadow: 0 0 8px rgba(255, 152, 0, 0.7);
}
/* 文字颜色 */
.text-gray-500 {
color: #a0d2ff !important;
}
.text-gray-600 {
color: #c2e0ff !important;
}
.text-green-600 {
color: #66bb6a !important;
text-shadow: 0 0 8px rgba(102, 187, 106, 0.7);
}
.text-red-500,
.text-red-600 {
color: #f44336 !important;
text-shadow: 0 0 8px rgba(244, 67, 54, 0.7);
}
.text-yellow-600 {
color: #ff9800 !important;
text-shadow: 0 0 8px rgba(255, 152, 0, 0.7);
}
.text-teal-500 {
color: #26c6da !important;
text-shadow: 0 0 8px rgba(38, 198, 218, 0.7);
}
/* 表格样式 */
.bg-gray-50 {
background: rgba(25, 55, 95, 0.6) !important;
}
.data-grid-row:hover {
background: rgba(40, 80, 130, 0.7) !important;
transform: translateY(-1px);
}
.data-grid-cell {
color: #e0f0ff;
}
table th {
color: #4fc3f7;
font-weight: normal;
text-shadow: 0 0 8px rgba(79, 195, 247, 0.7);
}
table td {
border-bottom: 1px solid rgba(64, 156, 255, 0.3);
}
/* 侧边栏激活状态 */
.sidebar-item-active {
background: linear-gradient(to right, rgba(79, 195, 247, 0.3), rgba(2, 119, 189, 0.3)) !important;
border-left: 3px solid #4fc3f7;
}
/* 进度条样式 */
.bg-gray-200 {
background: rgba(25, 55, 95, 0.6) !important;
}
.bg-blue-600 {
background: linear-gradient(to right, #4fc3f7, #0277bd) !important;
}
.bg-green-600 {
background: linear-gradient(to right, #66bb6a, #388e3c) !important;
}
.bg-red-600 {
background: linear-gradient(to right, #f44336, #d32f2f) !important;
}
.bg-yellow-100 {
background: rgba(255, 238, 88, 0.2) !important;
color: #ffee58 !important;
}
.bg-blue-100 {
background: rgba(79, 195, 247, 0.2) !important;
color: #4fc3f7 !important;
}
.bg-green-100 {
background: rgba(102, 187, 106, 0.2) !important;
color: #66bb6a !important;
}
.bg-red-100 {
background: rgba(244, 67, 54, 0.2) !important;
color: #f44336 !important;
}
.bg-teal-100 {
background: rgba(38, 198, 218, 0.2) !important;
color: #26c6da !important;
}
/* 输入框和选择框 */
input,
select {
background: rgba(25, 55, 95, 0.6) !important;
border: 1px solid rgba(64, 156, 255, 0.3) !important;
color: #e0f0ff !important;
border-radius: 4px;
}
input:focus,
select:focus {
border-color: #4fc3f7 !important;
box-shadow: 0 0 8px rgba(79, 195, 247, 0.7) !important;
}
/* 滚动条 */
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-track {
background: rgba(12, 42, 73, 0.3);
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
background: rgba(106, 149, 201, 0.5);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: rgba(106, 149, 201, 0.7);
}
/* 警告样式 */
.weather-alert {
background: rgba(255, 152, 0, 0.1) !important;
border: 1px solid rgba(255, 152, 0, 0.3) !important;
}
/* 标题样式 */
h1,
h2,
h3,
h4,
h5,
h6 {
color: #e0f0ff;
text-shadow: 0 0 8px rgba(79, 195, 247, 0.3);
}
/* 链接样式 */
a {
color: #4fc3f7;
text-decoration: none;
}
a:hover {
color: #66d0ff;
text-shadow: 0 0 8px rgba(79, 195, 247, 0.7);
}
/* 分隔线 */
.border-t,
.border-b,
.border-gray-200 {
border-color: rgba(64, 156, 255, 0.3) !important;
}
/* 地图样式 */
.map-overlay {
background: rgba(12, 42, 73, 0.7) !important;
backdrop-filter: blur(10px);
border: 1px solid rgba(64, 156, 255, 0.3);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
/* 图表容器 */
.chart-container {
background: rgba(25, 55, 95, 0.3);
border-radius: 8px;
padding: 10px;
border: 1px solid rgba(64, 156, 255, 0.3);
}
/* 通知按钮 */
.notification-button {
position: relative;
}
.notification-button::after {
content: '';
position: absolute;
top: 5px;
right: 5px;
width: 8px;
height: 8px;
background: #f44336;
border-radius: 50%;
box-shadow: 0 0 8px rgba(244, 67, 54, 0.7);
}
/* 过渡动画 */
.transition-all {
transition: all 0.3s ease;
}
.transition-colors {
transition: colors 0.3s ease;
}
/* 悬停效果 */
.hover\:bg-gray-50:hover {
background: rgba(40, 80, 130, 0.7) !important;
}
.hover\:bg-gray-100:hover {
background: rgba(40, 80, 130, 0.7) !important;
}
/* 圆角 */
.rounded-lg {
border-radius: 8px !important;
}
.rounded-full {
border-radius: 50% !important;
}
/* 阴影 */
.shadow-sm {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.shadow {
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}
/* Flex 布局 */
.flex {
display: flex;
}
.items-center {
align-items: center;
}
.justify-between {
justify-content: space-between;
}
.justify-center {
justify-content: center;
}
/* Padding 和 Margin */
.p-2 {
padding: 0.5rem;
}
.p-3 {
padding: 0.75rem;
}
.p-4 {
padding: 1rem;
}
.p-5 {
padding: 1.25rem;
}
.m-2 {
margin: 0.5rem;
}
.m-4 {
margin: 1rem;
}
.mt-1 {
margin-top: 0.25rem;
}
.mt-2 {
margin-top: 0.5rem;
}
.mt-4 {
margin-top: 1rem;
}
.mb-2 {
margin-bottom: 0.5rem;
}
.mb-4 {
margin-bottom: 1rem;
}
/* 宽度和高度 */
.w-full {
width: 100%;
}
.h-2 {
height: 0.5rem;
}
.h-10 {
height: 2.5rem;
}
.w-10 {
width: 2.5rem;
}
/* 文字大小 */
.text-xs {
font-size: 0.75rem;
}
.text-sm {
font-size: 0.875rem;
}
.text-base {
font-size: 1rem;
}
.text-lg {
font-size: 1.125rem;
}
.text-xl {
font-size: 1.25rem;
}
.text-2xl {
font-size: 1.5rem;
}
/* 文字粗细 */
.font-medium {
font-weight: 500;
}
.font-semibold {
font-weight: 600;
}
.font-bold {
font-weight: 700;
}
/* 文字对齐 */
.text-left {
text-align: left;
}
.text-center {
text-align: center;
}
.text-right {
text-align: right;
}
/* 网格布局 */
.grid {
display: grid;
}
.grid-cols-1 {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
.grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid-cols-4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.gap-2 {
gap: 0.5rem;
}
.gap-3 {
gap: 0.75rem;
}
.gap-4 {
gap: 1rem;
}
.gap-6 {
gap: 1.5rem;
}
/* 响应式设计 */
@media (min-width: 640px) {
.sm\:grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (min-width: 1024px) {
.lg\:grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.lg\:grid-cols-4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.lg\:ml-64 {
margin-left: 16rem;
}
}
/* 动画 */
.animate-fadeIn {
animation: fadeIn 0.5s ease-in-out;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* 图标样式 */
.fa {
text-shadow: 0 0 4px rgba(79, 195, 247, 0.5);
}
/* 特殊元素样式 */
.stat-filter-active {
background: linear-gradient(to bottom, #4fc3f7, #0277bd) !important;
color: white !important;
box-shadow: 0 0 8px rgba(79, 195, 247, 0.7);
}
/* 模态框样式 */
.modal {
background: rgba(12, 42, 73, 0.8);
backdrop-filter: blur(10px);
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 10000;
display: none;
align-items: center;
justify-content: center;
overflow: auto;
padding: 20px;
}
.modal-content {
background: rgba(25, 55, 95, 0.9);
border: 1px solid rgba(64, 156, 255, 0.5);
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.5);
border-radius: 8px;
max-width: 90%;
max-height: 90vh;
overflow-y: auto;
position: relative;
margin: auto;
}
.modal-header {
border-bottom: 1px solid rgba(64, 156, 255, 0.3);
padding: 15px 20px;
display: flex;
justify-content: space-between;
align-items: center;
}
.modal-title {
color: #4fc3f7;
text-shadow: 0 0 8px rgba(79, 195, 247, 0.7);
font-size: 1.25rem;
font-weight: 600;
}
.close-btn {
color: #a0d2ff;
background: rgba(25, 55, 95, 0.6);
border: 1px solid rgba(64, 156, 255, 0.3);
width: 30px;
height: 30px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 1.25rem;
}
.close-btn:hover {
background: rgba(40, 80, 130, 0.7);
color: #e0f0ff;
}
/* 修复图表容器高度问题 */
.h-64 {
min-height: 300px;
height: 300px;
}
.h-72 {
min-height: 350px;
height: 350px;
}
/* 修复任务完成情况和任务类型分布图表区域 */
.grid.grid-cols-1.lg\:grid-cols-2.gap-4.md\:gap-6 {
margin-bottom: 20px;
gap: 20px;
}
/* 确保图表容器有足够空间 */
.chart-modal-container {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-bottom: 20px;
}
.chart-modal-item {
background: rgba(12, 42, 73, 0.1);
backdrop-filter: blur(10px);
border-radius: 8px;
padding: 15px;
border: 1px solid rgba(64, 156, 255, 0.3);
}
.chart-modal-title {
color: #4fc3f7;
margin-bottom: 15px;
font-size: 18px;
border-bottom: 1px solid rgba(79, 195, 247, 0.3);
padding-bottom: 8px;
text-align: center;
}
.chart-modal-canvas {
height: 300px;
width: 100%;
}
/* 修复表格可能被遮挡的问题 */
.overflow-x-auto {
overflow-x: auto !important;
overflow-y: visible !important;
max-height: none !important;
}
/* 修复地图部分可能被遮挡的问题 */
.map-container {
min-height: 500px !important;
margin-bottom: 20px;
position: relative;
}
/* 修复通知面板可能遮挡内容的问题 */
#notification-panel {
max-height: 80vh !important;
overflow-y: auto !important;
}
/* 修复侧边栏在移动端可能遮挡内容的问题 */
@media (max-width: 1023px) {
#sidebar.mobile-hidden {
transform: translateX(-100%);
transition: transform 0.3s ease;
}
#sidebar {
transform: translateX(0);
transition: transform 0.3s ease;
}
}
/* 修复卡片可能被遮挡的问题 */
.card-shadow {
margin-bottom: 20px;
overflow: visible;
}
/* 确保所有内容区域都有足够的间距 */
section {
padding: 20px 0;
overflow: visible;
}
/* 修复底部可能被遮挡的问题 */
.mt-6 {
margin-top: 1.5rem;
}
/* 确保按钮不会被遮挡 */
.btn {
z-index: 10;
position: relative;
}
/* 修复可能被遮挡的绝对定位元素 */
.absolute {
z-index: 100;
}
/* 修复可能被遮挡的固定定位元素 */
.fixed {
z-index: 9999;
}
/* 确保表格行不会被遮挡 */
.data-grid-row {
display: table-row !important;
}
/* 修复可能被遮挡的浮动元素 */
.float-right {
float: right !important;
position: relative;
z-index: 10;
}
/* 确保所有图表容器都有足够的空间 */
canvas {
max-height: 400px;
width: 100% !important;
height: auto !important;
}
/* 修复可能被遮挡的地图控件 */
.map-controls {
z-index: 1000;
position: relative;
}
/* 确保所有的面板都有足够的间距 */
.panel {
margin-bottom: 20px;
overflow: visible !important;
}
/* 修复可能被遮挡的下拉菜单 */
.dropdown-menu {
z-index: 1000;
position: absolute;
}
/* 确保所有的表单元素不会被遮挡 */
input,
select,
textarea {
position: relative;
z-index: 2;
}
/* 修复可能被遮挡的工具提示 */
.tooltip {
z-index: 9999;
}
/* 确保所有的导航元素不会被遮挡 */
.nav-item {
background: none;
border: none;
cursor: pointer;
font-family: 'Segoe UI', Arial, sans-serif;
color: inherit;
text-align: left;
}
/* 修复可能被遮挡的通知按钮 */
.notification-button {
position: relative;
z-index: 100;
}
/* 确保所有的模态框按钮不会被遮挡 */
.modal .close-btn {
z-index: 1001;
position: relative;
}
/* 修复可能被遮挡的图表标签 */
.chartjs-render-monitor {
overflow: visible !important;
}
/* 确保所有的进度条不会被遮挡 */
.progress-bar {
position: relative;
z-index: 3;
}
/* 修复可能被遮挡的状态标签 */
.status-label {
z-index: 5;
position: relative;
}
/* 确保所有的卡片内容不会被遮挡 */
.card-content {
position: relative;
z-index: 1;
}
/* 修复可能被遮挡的分页控件 */
.pagination {
z-index: 10;
position: relative;
}
/* 确保所有的搜索框不会被遮挡 */
.search-box {
position: relative;
z-index: 5;
}
/* 修复可能被遮挡的筛选器 */
.filter-container {
z-index: 6;
position: relative;
}
/* 确保所有的切换按钮不会被遮挡 */
.toggle-button {
z-index: 7;
position: relative;
}
/* 修复可能被遮挡的详情按钮 */
.view-details-btn {
z-index: 8;
position: relative;
}
/* 确保所有的图表标题不会被遮挡 */
.chart-title {
z-index: 4;
position: relative;
}
/* 修复可能被遮挡的图例 */
.chart-legend {
z-index: 9;
position: relative;
}
/* 确保所有的警告信息不会被遮挡 */
.alert {
z-index: 11;
position: relative;
}
/* 修复可能被遮挡的帮助文本 */
.help-text {
z-index: 12;
position: relative;
}
/* 确保所有的图标不会被遮挡 */
.fa {
z-index: 13;
position: relative;
}
/* 修复可能被遮挡的数据网格 */
.data-grid {
overflow: visible !important;
}
/* 确保所有的数据项不会被遮挡 */
.data-item {
z-index: 14;
position: relative;
}
/* 修复可能被遮挡的系统按钮 */
.system-btn {
z-index: 15;
position: relative;
}
/* 确保所有的控制按钮不会被遮挡 */
.control-btn {
z-index: 16;
position: relative;
}
/* 修复可能被遮挡的地图标记 */
.map-marker {
z-index: 1000;
position: relative;
}
/* 确保所有的弹出窗口不会被遮挡 */
.popup {
z-index: 9999;
position: relative;
}
/* 修复可能被遮挡的工具栏 */
.toolbar {
z-index: 100;
position: relative;
}
/* 确保所有的侧边栏内容不会被遮挡 */
#sidebar .nav-item {
z-index: 20;
position: relative;
}
/* 修复可能被遮挡的页脚 */
footer {
z-index: 10;
position: relative;
}
/* 确保所有的悬浮元素不会被遮挡 */
.floating-element {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的动画元素 */
.animated-element {
z-index: 50;
position: relative;
}
/* 确保所有的加载指示器不会被遮挡 */
.loading-indicator {
z-index: 9999;
position: relative;
}
/* 修复可能被遮挡的错误消息 */
.error-message {
z-index: 100;
position: relative;
}
/* 确保所有的成功消息不会被遮挡 */
.success-message {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的警告消息 */
.warning-message {
z-index: 100;
position: relative;
}
/* 确保所有的信息消息不会被遮挡 */
.info-message {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的确认对话框 */
.confirm-dialog {
z-index: 10000;
position: relative;
}
/* 确保所有的提示框不会被遮挡 */
.tooltip-box {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的上下文菜单 */
.context-menu {
z-index: 9999;
position: relative;
}
/* 确保所有的下拉列表不会被遮挡 */
.dropdown-list {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的搜索结果 */
.search-results {
z-index: 1000;
position: relative;
}
/* 确保所有的自动完成建议不会被遮挡 */
.autocomplete-suggestions {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的日历控件 */
.calendar {
z-index: 1000;
position: relative;
}
/* 确保所有的时间选择器不会被遮挡 */
.time-picker {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的颜色选择器 */
.color-picker {
z-index: 1000;
position: relative;
}
/* 确保所有的文件上传控件不会被遮挡 */
.file-upload {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图像预览 */
.image-preview {
z-index: 100;
position: relative;
}
/* 确保所有的视频播放器不会被遮挡 */
.video-player {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的音频播放器 */
.audio-player {
z-index: 100;
position: relative;
}
/* 确保所有的地图图层控件不会被遮挡 */
.map-layer-control {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的地图缩放控件 */
.map-zoom-control {
z-index: 1000;
position: relative;
}
/* 确保所有的地图导航控件不会被遮挡 */
.map-navigation-control {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的地图全屏控件 */
.map-fullscreen-control {
z-index: 1000;
position: relative;
}
/* 确保所有的地图测量工具不会被遮挡 */
.map-measurement-tool {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的地图绘图工具 */
.map-drawing-tool {
z-index: 1000;
position: relative;
}
/* 确保所有的地图信息窗口不会被遮挡 */
.map-info-window {
z-index: 2000;
position: relative;
}
/* 修复可能被遮挡的地图弹出窗口 */
.map-popup {
z-index: 2000;
position: relative;
}
/* 确保所有的地图标记信息不会被遮挡 */
.map-marker-info {
z-index: 2000;
position: relative;
}
/* 修复可能被遮挡的地图图例 */
.map-legend {
z-index: 1000;
position: relative;
}
/* 确保所有的地图比例尺不会被遮挡 */
.map-scale {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的地图指南针 */
.map-compass {
z-index: 1000;
position: relative;
}
/* 确保所有的地图搜索框不会被遮挡 */
.map-search-box {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的地图工具栏 */
.map-toolbar {
z-index: 1000;
position: relative;
}
/* 确保所有的地图状态栏不会被遮挡 */
.map-status-bar {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的图表工具栏 */
.chart-toolbar {
z-index: 100;
position: relative;
}
/* 确保所有的图表图例不会被遮挡 */
.chart-legend {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表工具提示 */
.chart-tooltip {
z-index: 1000;
position: relative;
}
/* 确保所有的图表数据标签不会被遮挡 */
.chart-data-label {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表轴标签 */
.chart-axis-label {
z-index: 100;
position: relative;
}
/* 确保所有的图表网格线不会被遮挡 */
.chart-grid-line {
z-index: 10;
position: relative;
}
/* 修复可能被遮挡的图表标题 */
.chart-title {
z-index: 100;
position: relative;
}
/* 确保所有的图表副标题不会被遮挡 */
.chart-subtitle {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表脚注 */
.chart-footer {
z-index: 100;
position: relative;
}
/* 确保所有的图表导出按钮不会被遮挡 */
.chart-export-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表打印按钮 */
.chart-print-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表刷新按钮不会被遮挡 */
.chart-refresh-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表设置按钮 */
.chart-settings-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表全屏按钮不会被遮挡 */
.chart-fullscreen-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表缩放按钮 */
.chart-zoom-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表平移按钮不会被遮挡 */
.chart-pan-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表重置按钮 */
.chart-reset-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据导出按钮不会被遮挡 */
.chart-data-export-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表图像导出按钮 */
.chart-image-export-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表PDF导出按钮不会被遮挡 */
.chart-pdf-export-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表Excel导出按钮 */
.chart-excel-export-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表CSV导出按钮不会被遮挡 */
.chart-csv-export-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据表按钮 */
.chart-data-table-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据筛选器不会被遮挡 */
.chart-data-filter {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据排序器 */
.chart-data-sorter {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据分组器不会被遮挡 */
.chart-data-grouper {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据聚合器 */
.chart-data-aggregator {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据转换器不会被遮挡 */
.chart-data-transformer {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据验证器 */
.chart-data-validator {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据清理器不会被遮挡 */
.chart-data-cleaner {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据更新器 */
.chart-data-updater {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据刷新器不会被遮挡 */
.chart-data-refresher {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据加载器不会被遮挡 */
.chart-data-loader {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据保存器 */
.chart-data-saver {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据删除器不会被遮挡 */
.chart-data-deleter {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据编辑器 */
.chart-data-editor {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据查看器不会被遮挡 */
.chart-data-viewer {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据导出器 */
.chart-data-exporter {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据导入器不会被遮挡 */
.chart-data-importer {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据转换器 */
.chart-data-converter {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据格式化器不会被遮挡 */
.chart-data-formatter {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据验证器 */
.chart-data-validator {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据清理器不会被遮挡 */
.chart-data-cleaner {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据更新器 */
.chart-data-updater {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据刷新器不会被遮挡 */
.chart-data-refresher {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据加载器不会被遮挡 */
.chart-data-loader {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据保存器 */
.chart-data-saver {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据删除器不会被遮挡 */
.chart-data-deleter {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据编辑器 */
.chart-data-editor {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据查看器不会被遮挡 */
.chart-data-viewer {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据导出器 */
.chart-data-exporter {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据导入器不会被遮挡 */
.chart-data-importer {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据转换器 */
.chart-data-converter {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据格式化器不会被遮挡 */
.chart-data-formatter {
z-index: 100;
position: relative;
}
/* 修复主内容区域可能被遮挡的问题 */
#main-content {
padding: 0px 10px;
overflow-x: hidden;
overflow-y: auto;
max-height: calc(100vh - 60px);
margin-top: 60px;
}
/* 修复图表容器可能被遮挡的问题 */
.chart-container {
min-height: 300px;
position: relative;
padding: 15px;
}
/* 修复表格可能被遮挡的问题 */
.overflow-x-auto {
overflow-x: auto !important;
overflow-y: visible !important;
max-height: none !important;
}
/* 修复地图部分可能被遮挡的问题 */
.map-container {
min-height: 500px !important;
margin-bottom: 20px;
}
/* 修复通知面板可能遮挡内容的问题 */
#notification-panel {
max-height: 80vh !important;
overflow-y: auto !important;
}
/* 修复侧边栏在移动端可能遮挡内容的问题 */
@media (max-width: 1023px) {
#sidebar.mobile-hidden {
transform: translateX(-100%);
transition: transform 0.3s ease;
}
#sidebar {
transform: translateX(0);
transition: transform 0.3s ease;
}
}
/* 修复模态框可能遮挡的问题 */
.modal {
z-index: 10000 !important;
padding: 20px;
overflow: auto;
}
.modal-content {
margin: auto;
max-height: 90vh;
overflow-y: auto;
}
/* 修复卡片可能被遮挡的问题 */
.card-shadow {
margin-bottom: 20px;
}
/* 确保所有内容区域都有足够的间距 */
section {
padding: 10px 0;
}
/* 修复底部可能被遮挡的问题 */
.mt-6 {
margin-top: 1.5rem;
}
/* 确保按钮不会被遮挡 */
.btn {
z-index: 10;
position: relative;
}
/* 修复可能被遮挡的绝对定位元素 */
.absolute {
z-index: 100;
}
/* 修复可能被遮挡的固定定位元素 */
.fixed {
z-index: 9999;
}
/* 确保表格行不会被遮挡 */
.data-grid-row {
display: table-row !important;
}
/* 修复可能被遮挡的浮动元素 */
.float-right {
float: right !important;
position: relative;
z-index: 10;
}
/* 确保所有图表容器都有足够的空间 */
canvas {
max-height: 400px;
width: 100% !important;
height: auto !important;
}
/* 修复可能被遮挡的地图控件 */
.map-controls {
z-index: 1000;
position: relative;
}
/* 确保所有的面板都有足够的间距 */
.panel {
margin-bottom: 20px;
overflow: visible !important;
}
/* 修复可能被遮挡的下拉菜单 */
.dropdown-menu {
z-index: 1000;
position: absolute;
}
/* 确保所有的表单元素不会被遮挡 */
input,
select,
textarea {
position: relative;
z-index: 2;
}
/* 修复可能被遮挡的工具提示 */
.tooltip {
z-index: 9999;
}
/* 确保所有的导航元素不会被遮挡 */
.nav-item {
position: relative;
z-index: 5;
}
/* 修复可能被遮挡的通知按钮 */
.notification-button {
position: relative;
z-index: 100;
}
/* 确保所有的模态框按钮不会被遮挡 */
.modal .close-btn {
z-index: 1001;
position: relative;
}
/* 修复可能被遮挡的图表标签 */
.chartjs-render-monitor {
overflow: visible !important;
}
/* 确保所有的进度条不会被遮挡 */
.progress-bar {
position: relative;
z-index: 3;
}
/* 修复可能被遮挡的状态标签 */
.status-label {
z-index: 5;
position: relative;
}
/* 确保所有的卡片内容不会被遮挡 */
.card-content {
position: relative;
z-index: 1;
}
/* 修复可能被遮挡的分页控件 */
.pagination {
z-index: 10;
position: relative;
}
/* 确保所有的搜索框不会被遮挡 */
.search-box {
position: relative;
z-index: 5;
}
/* 修复可能被遮挡的筛选器 */
.filter-container {
z-index: 6;
position: relative;
}
/* 确保所有的切换按钮不会被遮挡 */
.toggle-button {
z-index: 7;
position: relative;
}
/* 修复可能被遮挡的详情按钮 */
.view-details-btn {
z-index: 8;
position: relative;
}
/* 确保所有的图表标题不会被遮挡 */
.chart-title {
z-index: 4;
position: relative;
}
/* 修复可能被遮挡的图例 */
.chart-legend {
z-index: 9;
position: relative;
}
/* 确保所有的警告信息不会被遮挡 */
.alert {
z-index: 11;
position: relative;
}
/* 修复可能被遮挡的帮助文本 */
.help-text {
z-index: 12;
position: relative;
}
/* 确保所有的图标不会被遮挡 */
.fa {
z-index: 13;
position: relative;
}
/* 修复可能被遮挡的数据网格 */
.data-grid {
overflow: visible !important;
}
/* 确保所有的数据项不会被遮挡 */
.data-item {
z-index: 14;
position: relative;
}
/* 修复可能被遮挡的系统按钮 */
.system-btn {
z-index: 15;
position: relative;
}
/* 确保所有的控制按钮不会被遮挡 */
.control-btn {
z-index: 16;
position: relative;
}
/* 修复可能被遮挡的地图标记 */
.map-marker {
z-index: 1000;
position: relative;
}
/* 确保所有的弹出窗口不会被遮挡 */
.popup {
z-index: 9999;
position: relative;
}
/* 修复可能被遮挡的工具栏 */
.toolbar {
z-index: 100;
position: relative;
}
/* 确保所有的侧边栏内容不会被遮挡 */
#sidebar .nav-item {
z-index: 20;
position: relative;
}
/* 修复可能被遮挡的页脚 */
footer {
z-index: 10;
position: relative;
}
/* 确保所有的悬浮元素不会被遮挡 */
.floating-element {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的动画元素 */
.animated-element {
z-index: 50;
position: relative;
}
/* 确保所有的加载指示器不会被遮挡 */
.loading-indicator {
z-index: 9999;
position: relative;
}
/* 修复可能被遮挡的错误消息 */
.error-message {
z-index: 100;
position: relative;
}
/* 确保所有的成功消息不会被遮挡 */
.success-message {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的警告消息 */
.warning-message {
z-index: 100;
position: relative;
}
/* 确保所有的信息消息不会被遮挡 */
.info-message {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的确认对话框 */
.confirm-dialog {
z-index: 10000;
position: relative;
}
/* 确保所有的提示框不会被遮挡 */
.tooltip-box {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的上下文菜单 */
.context-menu {
z-index: 9999;
position: relative;
}
/* 确保所有的下拉列表不会被遮挡 */
.dropdown-list {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的搜索结果 */
.search-results {
z-index: 1000;
position: relative;
}
/* 确保所有的自动完成建议不会被遮挡 */
.autocomplete-suggestions {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的日历控件 */
.calendar {
z-index: 1000;
position: relative;
}
/* 确保所有的时间选择器不会被遮挡 */
.time-picker {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的颜色选择器 */
.color-picker {
z-index: 1000;
position: relative;
}
/* 确保所有的文件上传控件不会被遮挡 */
.file-upload {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图像预览 */
.image-preview {
z-index: 100;
position: relative;
}
/* 确保所有的视频播放器不会被遮挡 */
.video-player {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的音频播放器 */
.audio-player {
z-index: 100;
position: relative;
}
/* 确保所有的地图图层控件不会被遮挡 */
.map-layer-control {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的地图缩放控件 */
.map-zoom-control {
z-index: 1000;
position: relative;
}
/* 确保所有的地图导航控件不会被遮挡 */
.map-navigation-control {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的地图全屏控件 */
.map-fullscreen-control {
z-index: 1000;
position: relative;
}
/* 确保所有的地图测量工具不会被遮挡 */
.map-measurement-tool {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的地图绘图工具 */
.map-drawing-tool {
z-index: 1000;
position: relative;
}
/* 确保所有的地图信息窗口不会被遮挡 */
.map-info-window {
z-index: 2000;
position: relative;
}
/* 修复可能被遮挡的地图弹出窗口 */
.map-popup {
z-index: 2000;
position: relative;
}
/* 确保所有的地图标记信息不会被遮挡 */
.map-marker-info {
z-index: 2000;
position: relative;
}
/* 修复可能被遮挡的地图图例 */
.map-legend {
z-index: 1000;
position: relative;
}
/* 确保所有的地图比例尺不会被遮挡 */
.map-scale {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的地图指南针 */
.map-compass {
z-index: 1000;
position: relative;
}
/* 确保所有的地图搜索框不会被遮挡 */
.map-search-box {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的地图工具栏 */
.map-toolbar {
z-index: 1000;
position: relative;
}
/* 确保所有的地图状态栏不会被遮挡 */
.map-status-bar {
z-index: 1000;
position: relative;
}
/* 修复可能被遮挡的图表工具栏 */
.chart-toolbar {
z-index: 100;
position: relative;
}
/* 确保所有的图表图例不会被遮挡 */
.chart-legend {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表工具提示 */
.chart-tooltip {
z-index: 1000;
position: relative;
}
/* 确保所有的图表数据标签不会被遮挡 */
.chart-data-label {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表轴标签 */
.chart-axis-label {
z-index: 100;
position: relative;
}
/* 确保所有的图表网格线不会被遮挡 */
.chart-grid-line {
z-index: 10;
position: relative;
}
/* 修复可能被遮挡的图表标题 */
.chart-title {
z-index: 100;
position: relative;
}
/* 确保所有的图表副标题不会被遮挡 */
.chart-subtitle {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表脚注 */
.chart-footer {
z-index: 100;
position: relative;
}
/* 确保所有的图表导出按钮不会被遮挡 */
.chart-export-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表打印按钮 */
.chart-print-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表刷新按钮不会被遮挡 */
.chart-refresh-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表设置按钮 */
.chart-settings-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表全屏按钮不会被遮挡 */
.chart-fullscreen-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表缩放按钮 */
.chart-zoom-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表平移按钮不会被遮挡 */
.chart-pan-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表重置按钮 */
.chart-reset-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据导出按钮不会被遮挡 */
.chart-data-export-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表图像导出按钮 */
.chart-image-export-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表PDF导出按钮不会被遮挡 */
.chart-pdf-export-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表Excel导出按钮 */
.chart-excel-export-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表CSV导出按钮不会被遮挡 */
.chart-csv-export-btn {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据表按钮 */
.chart-data-table-btn {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据筛选器不会被遮挡 */
.chart-data-filter {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据排序器 */
.chart-data-sorter {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据分组器不会被遮挡 */
.chart-data-grouper {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据聚合器 */
.chart-data-aggregator {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据转换器不会被遮挡 */
.chart-data-transformer {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据验证器 */
.chart-data-validator {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据清理器不会被遮挡 */
.chart-data-cleaner {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据更新器 */
.chart-data-updater {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据刷新器不会被遮挡 */
.chart-data-refresher {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据加载器不会被遮挡 */
.chart-data-loader {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据保存器 */
.chart-data-saver {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据删除器不会被遮挡 */
.chart-data-deleter {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据编辑器 */
.chart-data-editor {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据查看器不会被遮挡 */
.chart-data-viewer {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据导出器 */
.chart-data-exporter {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据导入器不会被遮挡 */
.chart-data-importer {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据转换器 */
.chart-data-converter {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据格式化器不会被遮挡 */
.chart-data-formatter {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据验证器 */
.chart-data-validator {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据清理器不会被遮挡 */
.chart-data-cleaner {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据更新器 */
.chart-data-updater {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据刷新器不会被遮挡 */
.chart-data-refresher {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据加载器不会被遮挡 */
.chart-data-loader {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据保存器 */
.chart-data-saver {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据删除器不会被遮挡 */
.chart-data-deleter {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据编辑器 */
.chart-data-editor {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据查看器不会被遮挡 */
.chart-data-viewer {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据导出器 */
.chart-data-exporter {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据导入器不会被遮挡 */
.chart-data-importer {
z-index: 100;
position: relative;
}
/* 修复可能被遮挡的图表数据转换器 */
.chart-data-converter {
z-index: 100;
position: relative;
}
/* 确保所有的图表数据格式化器不会被遮挡 */
.chart-data-formatter {
z-index: 100;
position: relative;
}
/* 修复移动端显示问题 */
@media (max-width: 768px) {
.grid.grid-cols-1.lg\:grid-cols-2.gap-4.md\:gap-6 {
grid-template-columns: 1fr;
}
.chart-modal-container {
grid-template-columns: 1fr;
}
#main-content {
padding: 10px;
}
.p-5 {
padding: 1rem;
}
.gap-4 {
gap: 1rem;
}
.gap-6 {
gap: 1rem;
}
}
/* 修复移动端侧边栏问题 */
@media (max-width: 1023px) {
#sidebar {
transform: translateX(-100%);
transition: transform 0.3s ease;
}
#sidebar:not(.mobile-hidden) {
transform: translateX(0);
}
.lg\:ml-64 {
margin-left: 0;
}
}
/* 确保所有图表容器有足够的空间 */
.h-64.relative {
min-height: 300px;
height: auto;
}
/* 修复图表标题可能被遮挡的问题 */
.chart-title {
margin-bottom: 15px;
padding: 0 10px;
}
/* 修复图表容器可能被遮挡的问题 */
.chart-container {
padding: 15px;
margin-bottom: 20px;
}
/* 确保所有模态框内容都能正确显示 */
.modal-content {
max-width: 95%;
max-height: 95vh;
}
/* 修复图表模态框容器问题 */
.chart-modal-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
padding: 20px;
}
/* 确保图表模态框项目有足够的空间 */
.chart-modal-item {
min-height: 350px;
display: flex;
flex-direction: column;
}
/* 修复图表模态框画布问题 */
.chart-modal-canvas {
flex: 1;
min-height: 250px;
}
/* 确保所有按钮都有足够的点击区域 */
button {
min-height: 36px;
min-width: 36px;
}
/* 修复表单元素可能被遮挡的问题 */
input,
select,
textarea {
min-height: 36px;
}
/* 确保所有下拉菜单都能正确显示 */
.dropdown-menu {
min-width: 160px;
}
/* 修复可能被遮挡的工具提示 */
.tooltip {
min-width: 120px;
padding: 8px;
}
/* 确保所有模态框标题都能正确显示 */
.modal-title {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* 修复可能被遮挡的卡片标题 */
.card-title {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* 确保所有表格都能正确显示 */
table {
width: 100%;
table-layout: fixed;
}
/* 修复可能被遮挡的表格单元格 */
td,
th {
word-wrap: break-word;
}
/* 确保所有图表都能正确显示 */
.chart-wrapper {
position: relative;
height: 100%;
}
/* 修复可能被遮挡的图表图例 */
.chart-legend {
max-height: 100px;
overflow-y: auto;
}
/* 确保所有进度条都能正确显示 */
.progress-container {
height: 20px;
position: relative;
}
/* 修复可能被遮挡的进度条 */
.progress-bar {
height: 100%;
transition: width 0.3s ease;
}
/* 确保所有状态指示器都能正确显示 */
.status-indicator {
width: 12px;
height: 12px;
border-radius: 50%;
}
/* 修复可能被遮挡的图标 */
.icon-wrapper {
display: inline-flex;
align-items: center;
justify-content: center;
}
/* 确保所有标签都能正确显示 */
.tag {
padding: 4px 8px;
border-radius: 4px;
display: inline-block;
}
/* 修复可能被遮挡的卡片内容 */
.card-body {
padding: 15px;
}
/* 确保所有面板都能正确显示 */
.panel {
margin-bottom: 20px;
overflow: hidden;
}
/* 修复可能被遮挡的面板标题 */
.panel-title {
padding: 10px 15px;
border-bottom: 1px solid rgba(64, 156, 255, 0.3);
}
/* 确保所有折叠面板都能正确显示 */
.collapse-panel {
border: 1px solid rgba(64, 156, 255, 0.3);
border-radius: 4px;
margin-bottom: 10px;
}
/* 修复可能被遮挡的折叠面板标题 */
.collapse-header {
padding: 10px 15px;
cursor: pointer;
}
/* 确保所有折叠面板内容都能正确显示 */
.collapse-content {
padding: 15px;
}
/* 修复可能被遮挡的分页控件 */
.pagination {
display: flex;
justify-content: center;
align-items: center;
margin: 20px 0;
}
/* 确保所有分页项都能正确显示 */
.page-item {
margin: 0 2px;
}
/* 修复可能被遮挡的分页链接 */
.page-link {
padding: 8px 12px;
border: 1px solid rgba(64, 156, 255, 0.3);
border-radius: 4px;
}
/* 确保所有警告框都能正确显示 */
.alert {
padding: 12px 15px;
border-radius: 4px;
margin-bottom: 15px;
}
/* 修复可能被遮挡的警告标题 */
.alert-title {
font-weight: bold;
margin-bottom: 5px;
}
/* 确保所有警告内容都能正确显示 */
.alert-content {
line-height: 1.5;
}
/* 修复可能被遮挡的卡片页脚 */
.card-footer {
padding: 10px 15px;
border-top: 1px solid rgba(64, 156, 255, 0.3);
}
/* 确保所有卡片头部都能正确显示 */
.card-header {
padding: 10px 15px;
border-bottom: 1px solid rgba(64, 156, 255, 0.3);
}
/* 修复可能被遮挡的卡片操作 */
.card-actions {
display: flex;
justify-content: flex-end;
gap: 10px;
padding: 10px 15px;
}
/* 确保所有表单组都能正确显示 */
.form-group {
margin-bottom: 15px;
}
/* 修复可能被遮挡的表单标签 */
.form-label {
display: block;
margin-bottom: 5px;
}
/* 确保所有表单控件都能正确显示 */
.form-control {
width: 100%;
padding: 8px 12px;
border-radius: 4px;
}
/* 修复可能被遮挡的表单帮助文本 */
.form-help {
font-size: 12px;
margin-top: 5px;
}
/* 确保所有按钮组都能正确显示 */
.btn-group {
display: flex;
gap: 10px;
}
/* 修复可能被遮挡的按钮组项 */
.btn-group-item {
flex: 1;
}
/* 确保所有工具栏都能正确显示 */
.toolbar {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 15px;
border-bottom: 1px solid rgba(64, 156, 255, 0.3);
}
/* 修复可能被遮挡的工具栏项 */
.toolbar-item {
display: flex;
align-items: center;
gap: 5px;
}
/* 确保所有导航栏都能正确显示 */
.navbar {
display: flex;
align-items: center;
padding: 10px 15px;
border-bottom: 1px solid rgba(64, 156, 255, 0.3);
}
/* 修复可能被遮挡的导航项 */
.nav-item {
padding: 8px 12px;
border-radius: 4px;
}
/* 确保所有侧边栏都能正确显示 */
.sidebar {
width: 250px;
height: 100vh;
position: fixed;
top: 0;
left: 0;
overflow-y: auto;
}
/* 修复可能被遮挡的侧边栏项 */
.sidebar-item {
padding: 10px 15px;
border-left: 3px solid transparent;
}
/* 确保所有内容区域能正确显示 */
.content {
margin-left: 250px;
padding: 20px;
}
/* 修复可能被遮挡的内容卡片 */
.content-card {
margin-bottom: 20px;
overflow: hidden;
}
/* 确保所有内容标题都能正确显示 */
.content-title {
padding: 15px;
border-bottom: 1px solid rgba(64, 156, 255, 0.3);
}
/* 修复可能被遮挡的内容主体 */
.content-body {
padding: 15px;
}
/* 确保所有内容页脚都能正确显示 */
.content-footer {
padding: 15px;
border-top: 1px solid rgba(64, 156, 255, 0.3);
}
/* 修复可能被遮挡的页脚 */
footer {
padding: 20px;
border-top: 1px solid rgba(64, 156, 255, 0.3);
}
/* 确保所有页脚内容都能正确显示 */
.footer-content {
display: flex;
justify-content: space-between;
align-items: center;
}
/* 修复可能被遮挡的页脚链接 */
.footer-link {
margin: 0 10px;
}
/* 确保所有版权信息都能正确显示 */
.copyright {
text-align: center;
padding: 10px;
}
.bg-gray-100 {
background-color: rgba(40, 80, 130, 0.6) !important;
}
/* 隐藏导航链接的焦点样式 */
.nav-item:focus {
outline: none;
box-shadow: none;
}
/* 确保导航链接不会显示下划线 */
.nav-item {
text-decoration: none;
}
/* 隐藏所有锚点链接的焦点样式 */
/* a[href^="#"]:focus {
outline: none;
} */
/* 彻底隐藏链接的焦点和悬停效果 */
.nav-item,
a[href^="#"] {
text-decoration: none !important;
outline: none !important;
border: none !important;
pointer-events: auto;
}
.nav-item:focus,
.nav-item:hover,
.nav-item:active,
a[href^="#"]:focus,
a[href^="#"]:hover,
a[href^="#"]:active {
outline: none !important;
text-decoration: none !important;
border: none !important;
}
</style>
</head>
<body class="font-sans text-gray-800">
<div class="flex h-screen">
<!-- 顶部标题栏 -->
<div class="topDiv">
<div class="left">
<img src="/common/images/logo_gt.png" alt="Logo" />
<!-- <span id="current-date">2025年10月10日</span>
<span id="current-time">14:30:25</span> -->
</div>
<div class="center">无人机应用服务平台</div>
<div class="right">
<!-- <img src="/common/images/logo_gt.png" alt="Logo" /> -->
</div>
</div>
<!-- 侧边导航栏 -->
<aside class="w-64 bg-white shadow-lg h-full fixed left-0 top-0 z-20 transition-all duration-300 mobile-hidden"
id="sidebar">
<!-- <div class="p-5 border-b border-gray-200 flex justify-between items-center">
<div class="flex items-center space-x-3">
<div class="w-10 h-10 bg-blue-600 rounded-lg flex items-center justify-center">
<i class="fa fa-plane text-white text-xl"></i>
</div>
<h1 class="text-xl font-bold">航空应用系统V2</h1>
</div>
</div> -->
<nav class="mt-6 px-3" style="margin-top: 80px;">
<p class="text-xs uppercase text-gray-500 font-semibold px-3 mb-2">主要功能</p>
<ul>
<li>
<button type="button" data-target="flight-task"
class="nav-item sidebar-item-active flex items-center px-3 py-3 rounded-lg transition-all mb-1 w-full text-left">
<i class="fa fa-tasks w-5 text-center mr-3"></i>
<span>飞行任务管理</span>
</button>
</li>
<li>
<button type="button" data-target="weather-data"
class="nav-item flex items-center px-3 py-3 rounded-lg transition-all mb-1 hover:bg-gray-100 w-full text-left">
<i class="fa fa-cloud w-5 text-center mr-3"></i>
<span>气象数据中心</span>
</button>
</li>
<li>
<button type="button" data-target="mapping"
class="nav-item flex items-center px-3 py-3 rounded-lg transition-all mb-1 hover:bg-gray-100 w-full text-left">
<i class="fa fa-map w-5 text-center mr-3"></i>
<span>测绘地图系统</span>
</button>
</li>
<li>
<button type="button" data-target="drone-inspection"
class="nav-item flex items-center px-3 py-3 rounded-lg transition-all mb-1 hover:bg-gray-100 w-full text-left">
<i class="fa fa-search w-5 text-center mr-3"></i>
<span>无人机巡检中心</span>
</button>
</li>
<li>
<button type="button" data-target="drone-data"
class="nav-item flex items-center px-3 py-3 rounded-lg transition-all mb-1 hover:bg-gray-100 w-full text-left">
<i class="fa fa-database w-5 text-center mr-3"></i>
<span>无人机数据中心</span>
</button>
</li>
</ul>
</nav>
<div class="absolute bottom-0 w-full p-4 border-t border-gray-200">
<div class="flex items-center">
<div class="w-10 h-10 bg-blue-100 rounded-full flex items-center justify-center text-blue-600">
<i class="fa fa-user"></i>
</div>
<div class="ml-3">
<p class="font-medium">张飞行员</p>
<p class="text-xs text-gray-500">高级飞行员</p>
</div>
</div>
</div>
</aside>
<!-- 主内容区域 -->
<main class="flex-1 ml-0 transition-all duration-300" id="main-content">
<!-- 顶部导航 -->
<header class="bg-white shadow-sm sticky top-0 z-10">
<div class="flex justify-between items-center p-4">
<div class="flex items-center">
<button id="mobile-menu-button" class="lg:hidden mr-3 text-gray-600 hover:text-gray-800">
<i class="fa fa-bars"></i>
</button>
<h2 class="text-xl font-semibold" id="page-title">飞行任务管理</h2>
</div>
<div class="flex items-center space-x-4">
<button
class="relative p-2 text-gray-600 hover:bg-gray-100 rounded-full transition-colors notification-button">
<i class="fa fa-bell-o"></i>
<span class="absolute top-1 right-1 w-2 h-2 bg-red-500 rounded-full animate-ping"></span>
<span class="absolute top-1 right-1 w-2 h-2 bg-red-500 rounded-full"></span>
</button>
<div class="h-6 w-px bg-gray-300"></div>
<div class="flex items-center space-x-2">
<span class="text-sm font-medium" id="current-date">2025年10月10日</span>
<i class="fa fa-calendar-o text-gray-600"></i>
</div>
</div>
</div>
</header>
<!-- 通知面板 -->
<div class="fixed top-16 right-0 w-80 bg-white rounded-xl shadow-lg z-50 transform translate-x-full transition-transform duration-300"
id="notification-panel">
<div class="p-4 border-b border-gray-200 flex justify-between items-center">
<h3 class="font-semibold">通知消息</h3>
<button class="text-gray-600 hover:text-gray-800" id="close-notification">
<i class="fa fa-times"></i>
</button>
</div>
<div class="max-h-96 overflow-y-auto scrollbar-hide">
<div class="p-4 border-b border-gray-200 hover:bg-gray-50 transition-colors">
<div class="flex">
<div
class="w-8 h-8 bg-yellow-100 rounded-full flex items-center justify-center text-yellow-600 flex-shrink-0">
<i class="fa fa-exclamation-triangle"></i>
</div>
<div class="ml-3">
<p class="text-sm font-medium">飞行任务FL-202510-003将延迟</p>
<p class="text-xs text-gray-500 mt-1">由于气象原因原定于16:00的任务将推迟至17:30</p>
<p class="text-xs text-gray-500 mt-2">10分钟前</p>
</div>
</div>
</div>
<div class="p-4 border-b border-gray-200 hover:bg-gray-50 transition-colors">
<div class="flex">
<div
class="w-8 h-8 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 flex-shrink-0">
<i class="fa fa-info"></i>
</div>
<div class="ml-3">
<p class="text-sm font-medium">新的气象数据已更新</p>
<p class="text-xs text-gray-500 mt-1">南部区域出现新的气象变化,请查看详情</p>
<p class="text-xs text-gray-500 mt-2">30分钟前</p>
</div>
</div>
</div>
<div class="p-4 hover:bg-gray-50 transition-colors">
<div class="flex">
<div
class="w-8 h-8 bg-green-100 rounded-full flex items-center justify-center text-green-600 flex-shrink-0">
<i class="fa fa-check"></i>
</div>
<div class="ml-3">
<p class="text-sm font-medium">任务FL-202510-001已完成</p>
<p class="text-xs text-gray-500 mt-1">李明已成功完成巡检任务</p>
<p class="text-xs text-gray-500 mt-2">2小时前</p>
</div>
</div>
</div>
</div>
<div class="p-3 border-t border-gray-200 text-center">
<button class="text-blue-600 text-sm hover:underline">查看所有通知</button>
</div>
</div>
<!-- 页面内容 -->
<div class="p-4 md:p-6">
<!-- 飞行任务管理界面 -->
<section id="flight-task" class="animate-fadeIn">
<div class="flex flex-wrap justify-between items-center mb-6 gap-4">
<h3 class="text-lg font-semibold">当前飞行任务</h3>
<button
class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg transition-all flex items-center transform hover:scale-105 active:scale-95">
<i class="fa fa-plus mr-2"></i>
<span>新建任务</span>
</button>
</div>
<!-- 飞行数据统计卡片 -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 md:gap-6 mb-6">
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">累计飞行次数</p>
<h4 class="text-2xl font-bold mt-1">124 次</h4>
</div>
<div
class="w-10 h-10 bg-blue-100 rounded-lg flex items-center justify-center text-blue-600">
<i class="fa fa-refresh"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-green-600 flex items-center">
<i class="fa fa-arrow-up mr-1"></i>12.5%
</span>
<span class="text-gray-500 ml-2">较上月</span>
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">累计飞行里程</p>
<h4 class="text-2xl font-bold mt-1">8,532 km</h4>
</div>
<div
class="w-10 h-10 bg-teal-100 rounded-lg flex items-center justify-center text-teal-500">
<i class="fa fa-road"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-green-600 flex items-center">
<i class="fa fa-arrow-up mr-1"></i>8.3%
</span>
<span class="text-gray-500 ml-2">较上月</span>
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">累计飞行时长</p>
<h4 class="text-2xl font-bold mt-1">364 小时</h4>
</div>
<div
class="w-10 h-10 bg-yellow-100 rounded-lg flex items-center justify-center text-yellow-600">
<i class="fa fa-clock-o"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-green-600 flex items-center">
<i class="fa fa-arrow-up mr-1"></i>15.2%
</span>
<span class="text-gray-500 ml-2">较上月</span>
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">累计飞行任务数</p>
<h4 class="text-2xl font-bold mt-1">78 项</h4>
</div>
<div
class="w-10 h-10 bg-green-100 rounded-lg flex items-center justify-center text-green-600">
<i class="fa fa-tasks"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-green-600 flex items-center">
<i class="fa fa-arrow-up mr-1"></i>10.7%
</span>
<span class="text-gray-500 ml-2">较上月</span>
</div>
</div>
</div>
<!-- 任务审批统计 -->
<div class="bg-white1 rounded-xl p-5 card-shadow card-shadow-hover mb-6">
<div class="flex flex-wrap justify-between items-center mb-4 gap-3">
<h3 class="font-semibold">任务审批统计</h3>
<div class="flex space-x-2 approval-period-filter">
<button
class="px-3 py-1 text-sm rounded-lg border border-gray-300 hover:border-blue-500 transition-colors stat-filter-active"
data-period="week">本周</button>
<button
class="px-3 py-1 text-sm rounded-lg border border-gray-300 hover:border-blue-500 transition-colors"
data-period="month">本月</button>
<button
class="px-3 py-1 text-sm rounded-lg border border-gray-300 hover:border-blue-500 transition-colors"
data-period="quarter">本季度</button>
</div>
</div>
<div class="h-64 relative">
<canvas id="approvalChart"></canvas>
</div>
</div>
<!-- 任务概览卡片 -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-6 mb-6">
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">今日任务</p>
<h4 class="text-2xl font-bold mt-1">8 项</h4>
</div>
<div
class="w-10 h-10 bg-blue-100 rounded-lg flex items-center justify-center text-blue-600">
<i class="fa fa-calendar"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-green-600 flex items-center">
<i class="fa fa-arrow-up mr-1"></i>12%
</span>
<span class="text-gray-500 ml-2">较昨日</span>
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">进行中</p>
<h4 class="text-2xl font-bold mt-1">3 项</h4>
</div>
<div
class="w-10 h-10 bg-yellow-100 rounded-lg flex items-center justify-center text-yellow-600">
<i class="fa fa-spinner"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-red-500 flex items-center">
<i class="fa fa-arrow-down mr-1"></i>5%
</span>
<span class="text-gray-500 ml-2">较昨日</span>
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">已完成</p>
<h4 class="text-2xl font-bold mt-1">15 项</h4>
</div>
<div
class="w-10 h-10 bg-green-100 rounded-lg flex items-center justify-center text-green-600">
<i class="fa fa-check"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-green-600 flex items-center">
<i class="fa fa-arrow-up mr-1"></i>23%
</span>
<span class="text-gray-500 ml-2">较上周</span>
</div>
</div>
</div>
<!-- 任务列表 -->
<div
class="bg-white1 rounded-xl card-shadow overflow-hidden mb-6 transition-all duration-300 hover:shadow-lg">
<div class="p-5 border-b border-gray-200">
<h3 class="font-semibold">任务详情列表</h3>
</div>
<div class="overflow-x-auto">
<table class="w-full">
<thead>
<tr class="bg-gray-50">
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
任务编号</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
任务名称</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
起止时间</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
负责人</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
状态</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
操作</th>
</tr>
</thead>
<tbody class="divide-y divide-gray-200">
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
FL-202510-001</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">巡检任务</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10:00 -
12:30</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<div class="flex items-center">
<div
class="w-6 h-6 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 mr-2">
<i class="fa fa-user text-xs"></i>
</div>
李明
</div>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800">已完成</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<button
class="text-blue-600 hover:text-blue-800 mr-3 transition-colors task-action-btn"
data-task="FL-202510-001" data-action="view">查看</button>
<button
class="text-gray-600 hover:text-gray-800 mr-3 transition-colors">编辑</button>
<button
class="text-red-600 hover:text-red-800 transition-colors">删除</button>
</td>
</tr>
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
FL-202510-002</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">气象探测任务
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">13:00 -
15:45</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<div class="flex items-center">
<div
class="w-6 h-6 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 mr-2">
<i class="fa fa-user text-xs"></i>
</div>
王华
</div>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800">进行中</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<button
class="text-blue-600 hover:text-blue-800 mr-3 transition-colors task-action-btn"
data-task="FL-202510-002" data-action="view">查看</button>
<button
class="text-gray-600 hover:text-gray-800 mr-3 transition-colors">编辑</button>
<button
class="text-red-600 hover:text-red-800 transition-colors">删除</button>
</td>
</tr>
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
FL-202510-003</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">航拍测绘任务
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">16:00 -
18:30</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<div class="flex items-center">
<div
class="w-6 h-6 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 mr-2">
<i class="fa fa-user text-xs"></i>
</div>
张伟
</div>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-gray-100 text-gray-800">待执行</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<button
class="text-blue-600 hover:text-blue-800 mr-3 transition-colors task-action-btn"
data-task="FL-202510-003" data-action="view">查看</button>
<button
class="text-gray-600 hover:text-gray-800 mr-3 transition-colors">编辑</button>
<button
class="text-red-600 hover:text-red-800 transition-colors">删除</button>
</td>
</tr>
</tbody>
</table>
</div>
<div class="p-4 border-t border-gray-200 flex flex-wrap justify-between items-center gap-4">
<p class="text-sm text-gray-500">显示 1 至 3 条,共 8 条</p>
<div class="flex space-x-1">
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 text-gray-500 hover:bg-gray-100 disabled:opacity-50 transition-colors"
disabled>
<i class="fa fa-chevron-left text-xs"></i>
</button>
<button
class="w-8 h-8 flex items-center justify-center rounded bg-blue-600 text-white hover:bg-blue-700 transition-colors">1</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-100 transition-colors">2</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-100 transition-colors">3</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 text-gray-500 hover:bg-gray-100 transition-colors">
<i class="fa fa-chevron-right text-xs"></i>
</button>
</div>
</div>
</div>
<!-- 任务完成情况和任务类型分布 -->
<div class="grid grid-cols-1 lg:grid-cols-2 gap-4 md:gap-6">
<div class="bg-white1 rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex flex-wrap justify-between items-center mb-4 gap-3">
<h3 class="font-semibold">任务完成情况</h3>
<div class="flex space-x-2 task-period-filter">
<button
class="px-3 py-1 text-sm rounded-lg border border-gray-300 hover:border-blue-500 transition-colors stat-filter-active"
data-period="month">本月</button>
<button
class="px-3 py-1 text-sm rounded-lg border border-gray-300 hover:border-blue-500 transition-colors"
data-period="quarter">本季度</button>
<button
class="px-3 py-1 text-sm rounded-lg border border-gray-300 hover:border-blue-500 transition-colors"
data-period="year">本年</button>
</div>
</div>
<div class="h-64 relative">
<canvas id="taskCompletionChart"></canvas>
</div>
</div>
<div class="bg-white1 rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex flex-wrap justify-between items-center mb-4 gap-3">
<h3 class="font-semibold">任务类型分布</h3>
<div class="flex items-center">
<span class="text-sm text-gray-500 mr-2">时间范围:</span>
<select
class="appearance-none bg-white border border-gray-300 rounded-lg pl-3 pr-8 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all hover:border-blue-300 task-type-filter">
<option value="month">近一个月</option>
<option value="quarter">近三个月</option>
<option value="year">近一年</option>
</select>
</div>
</div>
<div class="h-64 relative">
<canvas id="taskTypeChart"></canvas>
</div>
</div>
</div>
</section>
<!-- 气象数据中心 -->
<section id="weather-data" class="animate-fadeIn hidden">
<div class="flex flex-wrap justify-between items-center mb-6 gap-4">
<h3 class="text-lg font-semibold">气象数据中心</h3>
<div class="flex items-center space-x-3">
<div class="relative">
<select
class="appearance-none bg-white border border-gray-300 rounded-lg pl-3 pr-8 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all hover:border-blue-300 weather-region-filter">
<option value="all">全部区域</option>
<option value="north">北部区域</option>
<option value="south">南部区域</option>
<option value="east">东部区域</option>
<option value="west">西部区域</option>
</select>
</div>
<button
class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg transition-all flex items-center transform hover:scale-105 active:scale-95">
<i class="fa fa-refresh mr-2"></i>
<span>刷新数据</span>
</button>
</div>
</div>
<!-- 气象预警 -->
<div class="bg-white1 rounded-xl p-5 card-shadow mb-6">
<div class="flex items-start justify-between mb-4">
<div>
<h4 class="font-semibold text-lg flex items-center">
<i class="fa fa-exclamation-circle text-yellow-600 mr-2"></i>
气象预警信息
</h4>
<p class="text-gray-500 text-sm mt-1">最近24小时内的气象预警通知</p>
</div>
<button class="text-blue-600 hover:text-blue-800 text-sm transition-colors">查看全部</button>
</div>
<div class="space-y-4">
<div class="p-4 rounded-lg weather-alert bg-yellow-50 border border-yellow-200">
<div class="flex items-start justify-between">
<div>
<div class="flex items-center">
<span
class="px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800 mr-2">大风预警</span>
<p class="text-sm font-medium">南部海域将出现强风天气</p>
</div>
<p class="text-sm text-gray-500 mt-2">
预计10月11日08:00至18:00南部海域将出现8-10级强风阵风可达11级不适合执行飞行任务建议所有相关任务推迟。</p>
</div>
<span class="text-xs text-gray-500">2小时前</span>
</div>
</div>
<div class="p-4 rounded-lg border border-gray-200 hover:border-blue-200 transition-colors">
<div class="flex items-start justify-between">
<div>
<div class="flex items-center">
<span
class="px-2 py-1 text-xs rounded-full bg-blue-100 text-blue-800 mr-2">天气变化</span>
<p class="text-sm font-medium">东部区域能见度下降</p>
</div>
<p class="text-sm text-gray-500 mt-2">
预计10月10日16:00起东部区域将出现轻雾能见度将从10公里下降至5-6公里执行任务时请谨慎驾驶。</p>
</div>
<span class="text-xs text-gray-500">5小时前</span>
</div>
</div>
</div>
</div>
<!-- 无人机气象五要素曲线图 -->
<div class="bg-white1 rounded-xl p-5 card-shadow card-shadow-hover mb-6">
<div class="flex flex-wrap justify-between items-center mb-4 gap-3">
<h3 class="font-semibold">无人机气象五要素监测</h3>
<div class="flex space-x-2 weather-trend-filter">
<button
class="px-3 py-1 text-sm rounded-lg border border-gray-300 hover:border-blue-500 transition-colors"
data-period="day">24小时</button>
<button
class="px-3 py-1 text-sm rounded-lg border border-gray-300 hover:border-blue-500 transition-colors stat-filter-active"
data-period="week">7天</button>
<button
class="px-3 py-1 text-sm rounded-lg border border-gray-300 hover:border-blue-500 transition-colors"
data-period="month">30天</button>
</div>
</div>
<div class="h-72 relative">
<canvas id="weatherFiveElementsChart"></canvas>
</div>
</div>
<!-- 大气成分数据条形图 -->
<div class="bg-white1 rounded-xl p-5 card-shadow card-shadow-hover mb-6">
<div class="flex flex-wrap justify-between items-center mb-4 gap-3">
<h3 class="font-semibold">大气成分数据分析</h3>
<div class="flex items-center">
<span class="text-sm text-gray-500 mr-2">监测点:</span>
<select
class="appearance-none bg-white border border-gray-300 rounded-lg pl-3 pr-8 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all hover:border-blue-300 atmosphere-location-filter">
<option value="sea">海上监测点</option>
<option value="island">岛屿监测点</option>
<option value="coastal">沿海监测点</option>
</select>
</div>
</div>
<div class="h-72 relative">
<canvas id="atmosphereCompositionChart"></canvas>
</div>
</div>
<!-- 气象数据概览 -->
<div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-4 md:gap-6 mb-6">
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">温度</p>
<h4 class="text-2xl font-bold mt-1 weather-value" id="temperature-value">23.5°C</h4>
</div>
<div
class="w-10 h-10 bg-yellow-100 rounded-lg flex items-center justify-center text-yellow-600">
<i class="fa fa-thermometer-half"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-red-500 flex items-center">
<i class="fa fa-arrow-up mr-1"></i>1.2°C
</span>
<span class="text-gray-500 ml-2">较昨日</span>
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">湿度</p>
<h4 class="text-2xl font-bold mt-1 weather-value" id="humidity-value">68%</h4>
</div>
<div
class="w-10 h-10 bg-blue-100 rounded-lg flex items-center justify-center text-blue-600">
<i class="fa fa-tint"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-green-600 flex items-center">
<i class="fa fa-arrow-down mr-1"></i>3%
</span>
<span class="text-gray-500 ml-2">较昨日</span>
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">气压</p>
<h4 class="text-2xl font-bold mt-1 weather-value" id="pressure-value">1013 hPa</h4>
</div>
<div
class="w-10 h-10 bg-teal-100 rounded-lg flex items-center justify-center text-teal-500">
<i class="fa fa-dashboard"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-green-600 flex items-center">
<i class="fa fa-arrow-up mr-1"></i>2 hPa
</span>
<span class="text-gray-500 ml-2">较昨日</span>
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">风速</p>
<h4 class="text-2xl font-bold mt-1 weather-value" id="wind-speed-value">4.2 m/s</h4>
</div>
<div
class="w-10 h-10 bg-teal-100 rounded-lg flex items-center justify-center text-teal-500">
<i class="fa fa-wind"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-red-500 flex items-center">
<i class="fa fa-arrow-up mr-1"></i>1.5 m/s
</span>
<span class="text-gray-500 ml-2">较昨日</span>
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">风向</p>
<h4 class="text-2xl font-bold mt-1 weather-value" id="wind-direction-value">东北</h4>
</div>
<div
class="w-10 h-10 bg-blue-100 rounded-lg flex items-center justify-center text-blue-600">
<i class="fa fa-compass"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-gray-500 flex items-center">
<i class="fa fa-exchange mr-1"></i>无明显变化
</span>
<span class="text-gray-500 ml-2">较昨日</span>
</div>
</div>
</div>
<!-- 区域气象详情 -->
<div class="bg-white1 rounded-xl card-shadow overflow-hidden">
<div class="p-5 border-b border-gray-200">
<h3 class="font-semibold">区域气象详情</h3>
</div>
<div class="overflow-x-auto">
<table class="w-full">
<thead>
<tr class="bg-gray-50">
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
区域</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
温度</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
湿度</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
风速</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
风向</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
适合飞行</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
更新时间</th>
</tr>
</thead>
<tbody class="divide-y divide-gray-200">
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">三亚湾</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">28.8°C
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">65%</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">3.5 m/s
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">东北</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800">适合</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-10
10:30</td>
</tr>
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">西岛</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">29.6°C
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">72%</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">5.8 m/s
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">东南</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800">适合</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-10
10:30</td>
</tr>
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">蜈支洲岛</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">30.1°C
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">70%</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">4.2 m/s
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">西北</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800">适合</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-10
10:30</td>
</tr>
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">分界洲岛</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">29.3°C
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">62%</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">3.8 m/s
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">西南</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800">适合</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-10
10:30</td>
</tr>
</tbody>
</table>
</div>
<div class="p-4 border-t border-gray-200 flex flex-wrap justify-between items-center gap-4">
<p class="text-sm text-gray-500">显示 1 至 4 条,共 12 条</p>
<div class="flex space-x-1">
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 text-gray-500 hover:bg-gray-100 disabled:opacity-50 transition-colors"
disabled>
<i class="fa fa-chevron-left text-xs"></i>
</button>
<button
class="w-8 h-8 flex items-center justify-center rounded bg-blue-600 text-white hover:bg-blue-700 transition-colors">1</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-100 transition-colors">2</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-100 transition-colors">3</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 text-gray-500 hover:bg-gray-100 transition-colors">
<i class="fa fa-chevron-right text-xs"></i>
</button>
</div>
</div>
</div>
</section>
<!-- 测绘地图系统 - 海岛测绘类型 -->
<section id="mapping" class="animate-fadeIn hidden">
<div class="flex flex-wrap justify-between items-center mb-6 gap-4">
<h3 class="text-lg font-semibold">测绘地图系统</h3>
<div class="flex items-center space-x-3">
<div class="relative">
<select
class="appearance-none bg-white border border-gray-300 rounded-lg pl-3 pr-8 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all hover:border-blue-300 map-type-filter">
<option value="satellite">卫星地图</option>
<option value="terrain">地形地图</option>
<option value="vector">矢量地图</option>
<option value="3d">3D地形图</option>
</select>
</div>
<button
class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg transition-all flex items-center transform hover:scale-105 active:scale-95">
<i class="fa fa-download mr-2"></i>
<span>导出地图</span>
</button>
</div>
</div>
<!-- 地图和测绘数据 - 改为海岛测绘 -->
<div class="grid grid-cols-1 lg:grid-cols-3 gap-4 md:gap-6 mb-6">
<div
class="lg:col-span-2 bg-white rounded-xl overflow-hidden card-shadow card-shadow-hover transition-all">
<div class="p-5 border-b border-gray-200 flex justify-between items-center">
<h4 class="font-semibold">海岛测绘地图</h4>
<!-- <div class="flex items-center space-x-2">
<button
class="p-2 text-gray-600 hover:bg-gray-100 rounded transition-colors map-control-btn"
data-action="zoom-in">
<i class="fa fa-search-plus"></i>
</button>
<button
class="p-2 text-gray-600 hover:bg-gray-100 rounded transition-colors map-control-btn"
data-action="zoom-out">
<i class="fa fa-search-minus"></i>
</button>
<button
class="p-2 text-gray-600 hover:bg-gray-100 rounded transition-colors map-control-btn"
data-action="reset">
<i class="fa fa-home"></i>
</button>
<button
class="p-2 text-gray-600 hover:bg-gray-100 rounded transition-colors map-control-btn"
data-action="fullscreen">
<i class="fa fa-expand"></i>
</button>
</div> -->
</div>
<div class="relative h-80 md:h-[520px] bg-gray-100">
<!-- 海岛测绘地图 - 3D地形图样式 -->
<div id="mapimg"
class="w-full h-full bg-gradient-to-br from-blue-100 to-green-100 flex items-center justify-center relative overflow-hidden">
</div>
<!-- 地图覆盖层 -->
<!-- <div
class="absolute bottom-4 left-4 right-4 md:left-auto md:w-64 bg-white/90 backdrop-blur-sm rounded-lg shadow-lg p-3 map-overlay">
<div class="flex items-center justify-between mb-2">
<h5 class="font-medium text-sm">海岛测绘视图</h5>
<span class="text-xs text-gray-500">比例尺: 1:50000</span>
</div>
<div class="text-xs text-gray-500 mb-3">点击地图上的标记点查看详细测绘数据</div>
<div class="grid grid-cols-2 gap-2 text-xs">
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">测绘区域</p>
<p class="font-medium" id="current-map-area">三亚湾</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">精度</p>
<p class="font-medium">0.5米</p>
</div>
</div>
</div> -->
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<h4 class="font-semibold mb-4">海岛测绘任务进度</h4>
<div class="space-y-5">
<div>
<div class="flex justify-between items-center mb-1">
<div class="flex items-center">
<span class="w-3 h-3 bg-blue-600 rounded-full mr-2"></span>
<span class="text-sm">三亚湾地形测绘</span>
</div>
<span class="text-sm font-medium">100%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-blue-600 h-2 rounded-full" style="width: 100%"></div>
</div>
<div class="flex justify-between text-xs text-gray-500 mt-1">
<span>已完成</span>
<span>更新于 10-08</span>
</div>
</div>
<div>
<div class="flex justify-between items-center mb-1">
<div class="flex items-center">
<span class="w-3 h-3 bg-green-600 rounded-full mr-2"></span>
<span class="text-sm">西岛三维建模</span>
</div>
<span class="text-sm font-medium">75%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-green-600 h-2 rounded-full" style="width: 75%"></div>
</div>
<div class="flex justify-between text-xs text-gray-500 mt-1">
<span>进行中</span>
<span>更新于 10-10</span>
</div>
</div>
<div>
<div class="flex justify-between items-center mb-1">
<div class="flex items-center">
<span class="w-3 h-3 bg-yellow-600 rounded-full mr-2"></span>
<span class="text-sm">蜈支洲岛精细测绘</span>
</div>
<span class="text-sm font-medium">30%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-yellow-600 h-2 rounded-full" style="width: 30%"></div>
</div>
<div class="flex justify-between text-xs text-gray-500 mt-1">
<span>进行中</span>
<span>更新于 10-10</span>
</div>
</div>
<div>
<div class="flex justify-between items-center mb-1">
<div class="flex items-center">
<span class="w-3 h-3 bg-red-600 rounded-full mr-2"></span>
<span class="text-sm">分界洲岛海岸线测绘</span>
</div>
<span class="text-sm font-medium">0%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-red-600 h-2 rounded-full" style="width: 0%"></div>
</div>
<div class="flex justify-between text-xs text-gray-500 mt-1">
<span>未开始</span>
<span>计划于 10-12</span>
</div>
</div>
</div>
<div class="mt-6 pt-4 border-t border-gray-200">
<h4 class="font-semibold mb-3">测绘数据统计</h4>
<div class="grid grid-cols-2 gap-4">
<div class="bg-gray-100 p-3 rounded-lg">
<p class="text-xs text-gray-500 mb-1">已完成测绘面积</p>
<p class="text-xl font-bold">125.8 km²</p>
</div>
<div class="bg-gray-100 p-3 rounded-lg">
<p class="text-xs text-gray-500 mb-1">待测绘面积</p>
<p class="text-xl font-bold">86.2 km²</p>
</div>
<div class="bg-gray-100 p-3 rounded-lg">
<p class="text-xs text-gray-500 mb-1">平均测绘精度</p>
<p class="text-xl font-bold">0.7 m</p>
</div>
<div class="bg-gray-100 p-3 rounded-lg">
<p class="text-xs text-gray-500 mb-1">已采集数据</p>
<p class="text-xl font-bold">1.2 TB</p>
</div>
</div>
</div>
</div>
</div>
<!-- 测绘历史数据 -->
<div class="bg-white1 rounded-xl card-shadow overflow-hidden">
<div class="p-5 border-b border-gray-200 flex flex-wrap justify-between items-center gap-3">
<h3 class="font-semibold">海岛测绘任务历史记录</h3>
<div class="flex items-center space-x-3">
<div class="relative">
<input type="text" placeholder="搜索任务名称..."
class="pl-9 pr-3 py-1.5 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500/50 text-sm w-full sm:w-48 transition-all hover:border-blue-300">
<i
class="fa fa-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-500 text-sm"></i>
</div>
<div class="relative">
<select
class="appearance-none bg-white border border-gray-300 rounded-lg pl-3 pr-8 py-1.5 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all hover:border-blue-300 mapping-status-filter">
<option value="all">全部状态</option>
<option value="completed">已完成</option>
<option value="in-progress">进行中</option>
<option value="pending">未开始</option>
</select>
</div>
</div>
</div>
<div class="overflow-x-auto">
<table class="w-full">
<thead>
<tr class="bg-gray-50">
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
任务编号</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
任务名称</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
测绘区域</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
开始时间</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
完成时间</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
负责人</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
状态</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
操作</th>
</tr>
</thead>
<tbody class="divide-y divide-gray-200">
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
MP-202510-001</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">三亚湾地形测绘
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">三亚湾</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-05
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-08
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<div class="flex items-center">
<div
class="w-6 h-6 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 mr-2">
<i class="fa fa-user text-xs"></i>
</div>
张伟
</div>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800">已完成</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<button
class="text-blue-600 hover:text-blue-800 mr-3 transition-colors view-mapping-details">查看详情</button>
<button
class="text-blue-600 hover:text-blue-800 transition-colors view-mapping-data">查看数据</button>
</td>
</tr>
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
MP-202510-002</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">西岛三维建模
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">西岛</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-09
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">预计 10-12
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<div class="flex items-center">
<div
class="w-6 h-6 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 mr-2">
<i class="fa fa-user text-xs"></i>
</div>
刘洋
</div>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800">进行中</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<button
class="text-blue-600 hover:text-blue-800 mr-3 transition-colors view-mapping-details">查看详情</button>
<button
class="text-blue-600 hover:text-blue-800 transition-colors view-mapping-data">查看数据</button>
</td>
</tr>
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
MP-202510-003</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">蜈支洲岛精细测绘
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">蜈支洲岛</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-10
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">预计 10-15
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<div class="flex items-center">
<div
class="w-6 h-6 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 mr-2">
<i class="fa fa-user text-xs"></i>
</div>
王华
</div>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800">进行中</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<button
class="text-blue-600 hover:text-blue-800 mr-3 transition-colors view-mapping-details">查看详情</button>
<button
class="text-blue-600 hover:text-blue-800 transition-colors view-mapping-data">查看数据</button>
</td>
</tr>
</tbody>
</table>
</div>
<div class="p-4 border-t border-gray-200 flex flex-wrap justify-between items-center gap-4">
<p class="text-sm text-gray-500">显示 1 至 3 条,共 16 条</p>
<div class="flex space-x-1">
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 text-gray-500 hover:bg-gray-100 disabled:opacity-50 transition-colors"
disabled>
<i class="fa fa-chevron-left text-xs"></i>
</button>
<button
class="w-8 h-8 flex items-center justify-center rounded bg-blue-600 text-white hover:bg-blue-700 transition-colors">1</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-100 transition-colors">2</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-100 transition-colors">3</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 text-gray-500 hover:bg-gray-100 transition-colors">
<i class="fa fa-chevron-right text-xs"></i>
</button>
</div>
</div>
</div>
</section>
<!-- 无人机巡检中心 -->
<section id="drone-inspection" class="animate-fadeIn hidden">
<div class="flex flex-wrap justify-between items-center mb-6 gap-4">
<h3 class="text-lg font-semibold">无人机巡检中心</h3>
<div class="flex items-center space-x-3">
<div class="relative">
<select
class="appearance-none bg-white border border-gray-300 rounded-lg pl-3 pr-8 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all hover:border-blue-300 drone-filter">
<option value="all">所有无人机</option>
<option value="active">运行中</option>
<option value="idle">闲置中</option>
<option value="maintenance">维护中</option>
</select>
</div>
<button
class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg transition-all flex items-center transform hover:scale-105 active:scale-95">
<i class="fa fa-plus mr-2"></i>
<span>新建巡检任务</span>
</button>
</div>
</div>
<!-- 巡检任务类型卡片 -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 md:gap-6 mb-6">
<div
class="bg-white rounded-xl p-5 card-shadow card-shadow-hover cursor-pointer hover:border-blue-500 border border-transparent transition-all">
<div
class="w-12 h-12 bg-blue-100 rounded-lg flex items-center justify-center text-blue-600 mb-4">
<i class="fa fa-map-marker text-xl"></i>
</div>
<h4 class="font-semibold mb-2">海岛巡逻</h4>
<p class="text-sm text-gray-500 mb-4">对海岛及周边区域进行定期巡逻和监控</p>
<div class="flex justify-between items-center">
<span class="text-xs bg-green-100 text-green-800 px-2 py-1 rounded-full">进行中: 3项</span>
<span class="text-xs text-gray-500">已完成: 42项</span>
</div>
</div>
<div
class="bg-white rounded-xl p-5 card-shadow card-shadow-hover cursor-pointer hover:border-blue-500 border border-transparent transition-all">
<div
class="w-12 h-12 bg-teal-100 rounded-lg flex items-center justify-center text-teal-500 mb-4">
<i class="fa fa-ship text-xl"></i>
</div>
<h4 class="font-semibold mb-2">航道管控</h4>
<p class="text-sm text-gray-500 mb-4">监控海上航道安全,保障船只航行畅通</p>
<div class="flex justify-between items-center">
<span class="text-xs bg-green-100 text-green-800 px-2 py-1 rounded-full">进行中: 2项</span>
<span class="text-xs text-gray-500">已完成: 36项</span>
</div>
</div>
<div
class="bg-white rounded-xl p-5 card-shadow card-shadow-hover cursor-pointer hover:border-blue-500 border border-transparent transition-all">
<div
class="w-12 h-12 bg-yellow-100 rounded-lg flex items-center justify-center text-yellow-600 mb-4">
<i class="fa fa-bolt text-xl"></i>
</div>
<h4 class="font-semibold mb-2">海上风电巡检</h4>
<p class="text-sm text-gray-500 mb-4">对海上风电场设备进行自动化巡检和故障检测</p>
<div class="flex justify-between items-center">
<span class="text-xs bg-green-100 text-green-800 px-2 py-1 rounded-full">进行中: 1项</span>
<span class="text-xs text-gray-500">已完成: 28项</span>
</div>
</div>
<div
class="bg-white rounded-xl p-5 card-shadow card-shadow-hover cursor-pointer hover:border-blue-500 border border-transparent transition-all">
<div
class="w-12 h-12 bg-green-100 rounded-lg flex items-center justify-center text-green-600 mb-4">
<i class="fa fa-sun-o text-xl"></i>
</div>
<h4 class="font-semibold mb-2">海上光伏巡检</h4>
<p class="text-sm text-gray-500 mb-4">对海上光伏电站进行定期巡检和维护检查</p>
<div class="flex justify-between items-center">
<span class="text-xs bg-yellow-100 text-yellow-800 px-2 py-1 rounded-full">进行中:
0项</span>
<span class="text-xs text-gray-500">已完成: 15项</span>
</div>
</div>
</div>
<!-- 无人机状态卡片 -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 md:gap-6 mb-6">
<div
class="bg-white1 rounded-xl overflow-hidden card-shadow card-shadow-hover border-l-4 border-blue-600">
<div class="p-5">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">无人机编号</p>
<h4 class="text-xl font-bold mt-1">GT-001</h4>
</div>
<div
class="w-10 h-10 bg-blue-100 rounded-lg flex items-center justify-center text-blue-600">
<i class="fa fa-quadcopter"></i>
</div>
</div>
<div class="flex items-center text-sm mb-4">
<span class="px-2 py-1 text-xs rounded-full drone-status-active mr-2">运行中</span>
<span>三亚湾巡检任务</span>
</div>
<div class="grid grid-cols-2 gap-3 text-xs">
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">飞行时间</p>
<p class="font-medium">3.5小时</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">电池电量</p>
<p class="font-medium">68%</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">飞行高度</p>
<p class="font-medium">120米</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">信号强度</p>
<p class="font-medium">95%</p>
</div>
</div>
<button
class="mt-4 w-full py-2 text-sm bg-blue-100 text-blue-600 rounded-lg hover:bg-blue-200 transition-colors view-drone-details"
data-drone="GT-001">
查看详情
</button>
</div>
</div>
<div
class="bg-white1 rounded-xl overflow-hidden card-shadow card-shadow-hover border-l-4 border-green-600">
<div class="p-5">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">无人机编号</p>
<h4 class="text-xl font-bold mt-1">GT-002</h4>
</div>
<div
class="w-10 h-10 bg-green-100 rounded-lg flex items-center justify-center text-green-600">
<i class="fa fa-quadcopter"></i>
</div>
</div>
<div class="flex items-center text-sm mb-4">
<span class="px-2 py-1 text-xs rounded-full drone-status-idle mr-2">闲置中</span>
<span>已完成西岛巡检</span>
</div>
<div class="grid grid-cols-2 gap-3 text-xs">
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">今日飞行</p>
<p class="font-medium">2.1小时</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">电池电量</p>
<p class="font-medium">92%</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">上次维护</p>
<p class="font-medium">10-05</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">状态评分</p>
<p class="font-medium">98分</p>
</div>
</div>
<button
class="mt-4 w-full py-2 text-sm bg-green-100 text-green-600 rounded-lg hover:bg-green-200 transition-colors view-drone-details"
data-drone="GT-002">
查看详情
</button>
</div>
</div>
<div
class="bg-white1 rounded-xl overflow-hidden card-shadow card-shadow-hover border-l-4 border-yellow-600">
<div class="p-5">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">无人机编号</p>
<h4 class="text-xl font-bold mt-1">GT-003</h4>
</div>
<div
class="w-10 h-10 bg-yellow-100 rounded-lg flex items-center justify-center text-yellow-600">
<i class="fa fa-quadcopter"></i>
</div>
</div>
<div class="flex items-center text-sm mb-4">
<span
class="px-2 py-1 text-xs rounded-full drone-status-maintenance mr-2">维护中</span>
<span>传感器校准</span>
</div>
<div class="grid grid-cols-2 gap-3 text-xs">
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">维护项目</p>
<p class="font-medium">3项</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">预计完成</p>
<p class="font-medium">10-10 16:00</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">维护人员</p>
<p class="font-medium">赵工</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">下次维护</p>
<p class="font-medium">10-25</p>
</div>
</div>
<button
class="mt-4 w-full py-2 text-sm bg-yellow-100 text-yellow-600 rounded-lg hover:bg-yellow-200 transition-colors view-drone-details"
data-drone="GT-003">
查看详情
</button>
</div>
</div>
<div
class="bg-white1 rounded-xl overflow-hidden card-shadow card-shadow-hover border-l-4 border-green-600">
<div class="p-5">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">无人机编号</p>
<h4 class="text-xl font-bold mt-1">GT-004</h4>
</div>
<div
class="w-10 h-10 bg-green-100 rounded-lg flex items-center justify-center text-green-600">
<i class="fa fa-quadcopter"></i>
</div>
</div>
<div class="flex items-center text-sm mb-4">
<span class="px-2 py-1 text-xs rounded-full drone-status-idle mr-2">闲置中</span>
<span>待命状态</span>
</div>
<div class="grid grid-cols-2 gap-3 text-xs">
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">今日飞行</p>
<p class="font-medium">0小时</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">电池电量</p>
<p class="font-medium">100%</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">上次维护</p>
<p class="font-medium">10-08</p>
</div>
<div class="bg-gray-100 p-2 rounded">
<p class="text-gray-500">状态评分</p>
<p class="font-medium">99分</p>
</div>
</div>
<button
class="mt-4 w-full py-2 text-sm bg-green-100 text-green-600 rounded-lg hover:bg-green-200 transition-colors view-drone-details"
data-drone="GT-004">
查看详情
</button>
</div>
</div>
</div>
<!-- 巡检任务列表 -->
<div class="bg-white1 rounded-xl card-shadow overflow-hidden">
<div class="p-5 border-b border-gray-200 flex flex-wrap justify-between items-center gap-3">
<h3 class="font-semibold">巡检任务列表</h3>
<div class="flex items-center space-x-3">
<div class="relative">
<input type="text" placeholder="搜索任务名称..."
class="pl-9 pr-3 py-1.5 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500/50 text-sm w-full sm:w-48 transition-all hover:border-blue-300">
<i
class="fa fa-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-500 text-sm"></i>
</div>
<div class="relative">
<select
class="appearance-none bg-white border border-gray-300 rounded-lg pl-3 pr-8 py-1.5 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all hover:border-blue-300 inspection-status-filter">
<option value="all">全部状态</option>
<option value="in-progress">进行中</option>
<option value="completed">已完成</option>
<option value="pending">待执行</option>
</select>
</div>
</div>
</div>
<div class="overflow-x-auto">
<table class="w-full">
<thead>
<tr class="bg-gray-50">
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
任务编号</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
任务名称</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
巡检区域</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
开始时间</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
结束时间</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
负责人</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
状态</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
操作</th>
</tr>
</thead>
<tbody class="divide-y divide-gray-200">
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
IN-202510-001</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">三亚湾巡逻任务
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">三亚湾及周边海域
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-10
09:00</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-10
12:30</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<div class="flex items-center">
<div
class="w-6 h-6 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 mr-2">
<i class="fa fa-user text-xs"></i>
</div>
李明
</div>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800">进行中</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<button
class="text-blue-600 hover:text-blue-800 mr-3 transition-colors view-inspection-details">查看详情</button>
<button
class="text-blue-600 hover:text-blue-800 transition-colors view-inspection-data">查看数据</button>
</td>
</tr>
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
IN-202510-002</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">西岛航道监控
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">西岛航道</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-10
10:00</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-10
15:00</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<div class="flex items-center">
<div
class="w-6 h-6 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 mr-2">
<i class="fa fa-user text-xs"></i>
</div>
王华
</div>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800">进行中</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<button
class="text-blue-600 hover:text-blue-800 mr-3 transition-colors view-inspection-details">查看详情</button>
<button
class="text-blue-600 hover:text-blue-800 transition-colors view-inspection-data">查看数据</button>
</td>
</tr>
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
IN-202510-003</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">海上风电巡检
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">南海风电场
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-10
08:30</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">10-10
11:00</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<div class="flex items-center">
<div
class="w-6 h-6 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 mr-2">
<i class="fa fa-user text-xs"></i>
</div>
张伟
</div>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800">已完成</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<button
class="text-blue-600 hover:text-blue-800 mr-3 transition-colors view-inspection-details">查看详情</button>
<button
class="text-blue-600 hover:text-blue-800 transition-colors view-inspection-data">查看数据</button>
</td>
</tr>
</tbody>
</table>
</div>
<div class="p-4 border-t border-gray-200 flex flex-wrap justify-between items-center gap-4">
<p class="text-sm text-gray-500">显示 1 至 3 条,共 12 条</p>
<div class="flex space-x-1">
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 text-gray-500 hover:bg-gray-100 disabled:opacity-50 transition-colors"
disabled>
<i class="fa fa-chevron-left text-xs"></i>
</button>
<button
class="w-8 h-8 flex items-center justify-center rounded bg-blue-600 text-white hover:bg-blue-700 transition-colors">1</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-100 transition-colors">2</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-100 transition-colors">3</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 text-gray-500 hover:bg-gray-100 transition-colors">
<i class="fa fa-chevron-right text-xs"></i>
</button>
</div>
</div>
</div>
</section>
<!-- 无人机数据中心 -->
<section id="drone-data" class="animate-fadeIn hidden">
<div class="flex flex-wrap justify-between items-center mb-6 gap-4">
<h3 class="text-lg font-semibold">无人机数据中心</h3>
<div class="flex items-center space-x-3">
<div class="relative">
<select
class="appearance-none bg-white border border-gray-300 rounded-lg pl-3 pr-8 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all hover:border-blue-300 drone-data-filter">
<option value="all">所有数据</option>
<option value="flight">飞行数据</option>
<option value="maintenance">维护数据</option>
<option value="performance">性能数据</option>
</select>
</div>
<button
class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg transition-all flex items-center transform hover:scale-105 active:scale-95">
<i class="fa fa-download mr-2"></i>
<span>导出数据</span>
</button>
</div>
</div>
<!-- 无人机数据统计卡片 -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 md:gap-6 mb-6">
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">无人机总数</p>
<h4 class="text-2xl font-bold mt-1">24 架</h4>
</div>
<div
class="w-10 h-10 bg-blue-100 rounded-lg flex items-center justify-center text-blue-600">
<i class="fa fa-quadcopter"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-green-600 flex items-center">
<i class="fa fa-arrow-up mr-1"></i>4架
</span>
<span class="text-gray-500 ml-2">较上月</span>
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">在线数量</p>
<h4 class="text-2xl font-bold mt-1">18 架</h4>
</div>
<div
class="w-10 h-10 bg-green-100 rounded-lg flex items-center justify-center text-green-600">
<i class="fa fa-check-circle"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-green-600 flex items-center">
<i class="fa fa-arrow-up mr-1"></i>3架
</span>
<span class="text-gray-500 ml-2">较上周</span>
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">任务中</p>
<h4 class="text-2xl font-bold mt-1">6 架</h4>
</div>
<div
class="w-10 h-10 bg-yellow-100 rounded-lg flex items-center justify-center text-yellow-600">
<i class="fa fa-tasks"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-red-500 flex items-center">
<i class="fa fa-arrow-down mr-1"></i>2架
</span>
<span class="text-gray-500 ml-2">较昨日</span>
</div>
</div>
<div class="bg-white rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex justify-between items-start mb-4">
<div>
<p class="text-gray-500 text-sm">维护中</p>
<h4 class="text-2xl font-bold mt-1">2 架</h4>
</div>
<div
class="w-10 h-10 bg-red-100 rounded-lg flex items-center justify-center text-red-600">
<i class="fa fa-wrench"></i>
</div>
</div>
<div class="flex items-center text-sm">
<span class="text-red-500 flex items-center">
<i class="fa fa-arrow-up mr-1"></i>1架
</span>
<span class="text-gray-500 ml-2">较上周</span>
</div>
</div>
</div>
<!-- 无人机数据图表 -->
<div class="grid grid-cols-1 lg:grid-cols-2 gap-4 md:gap-6 mb-6">
<div class="bg-white1 rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex flex-wrap justify-between items-center mb-4 gap-3">
<h3 class="font-semibold">无人机使用率</h3>
<div class="flex space-x-2 drone-usage-filter">
<button
class="px-3 py-1 text-sm rounded-lg border border-gray-300 hover:border-blue-500 transition-colors stat-filter-active"
data-period="week">本周</button>
<button
class="px-3 py-1 text-sm rounded-lg border border-gray-300 hover:border-blue-500 transition-colors"
data-period="month">本月</button>
<button
class="px-3 py-1 text-sm rounded-lg border border-gray-300 hover:border-blue-500 transition-colors"
data-period="quarter">本季度</button>
</div>
</div>
<div class="h-64 relative">
<canvas id="droneUsageChart"></canvas>
</div>
</div>
<div class="bg-white1 rounded-xl p-5 card-shadow card-shadow-hover transition-all">
<div class="flex flex-wrap justify-between items-center mb-4 gap-3">
<h3 class="font-semibold">无人机状态分布</h3>
<div class="flex items-center">
<span class="text-sm text-gray-500 mr-2">时间范围:</span>
<select
class="appearance-none bg-white1 border border-gray-300 rounded-lg pl-3 pr-8 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all hover:border-blue-300 drone-status-filter">
<option value="week">近一周</option>
<option value="month">近一月</option>
<option value="quarter">近一季度</option>
</select>
</div>
</div>
<div class="h-64 relative">
<canvas id="droneStatusChart"></canvas>
</div>
</div>
</div>
<!-- 无人机详细数据列表 -->
<div class="bg-white1 rounded-xl card-shadow overflow-hidden">
<div class="p-5 border-b border-gray-200 flex flex-wrap justify-between items-center gap-3">
<h3 class="font-semibold">无人机详细数据</h3>
<div class="flex items-center space-x-3">
<div class="relative">
<input type="text" placeholder="搜索无人机编号..."
class="pl-9 pr-3 py-1.5 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500/50 text-sm w-full sm:w-48 transition-all hover:border-blue-300">
<i
class="fa fa-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-500 text-sm"></i>
</div>
<div class="relative">
<select
class="appearance-none bg-white1 border border-gray-300 rounded-lg pl-3 pr-8 py-1.5 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500/50 transition-all hover:border-blue-300 drone-type-filter">
<option value="all">所有类型</option>
<option value="fixed-wing">固定翼</option>
<option value="multi-rotor">多旋翼</option>
<option value="hybrid">混合型</option>
</select>
</div>
</div>
</div>
<div class="overflow-x-auto">
<table class="w-full">
<thead>
<tr class="bg-gray-50">
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
无人机编号</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
类型</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
飞行时长</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
飞行里程</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
任务次数</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
平均电池寿命</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
状态</th>
<th
class="px-4 md:px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
操作</th>
</tr>
</thead>
<tbody class="divide-y divide-gray-200">
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">GT-001
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">多旋翼</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">342.5小时
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">1,245 km
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">156次</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">92%</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800">运行中</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<button
class="text-blue-600 hover:text-blue-800 mr-3 transition-colors view-drone-data">查看数据</button>
<button
class="text-blue-600 hover:text-blue-800 transition-colors">维护记录</button>
</td>
</tr>
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">GT-002
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">固定翼</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">512.3小时
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">2,345 km
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">203次</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">88%</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-green-100 text-green-800">运行中</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<button
class="text-blue-600 hover:text-blue-800 mr-3 transition-colors view-drone-data">查看数据</button>
<button
class="text-blue-600 hover:text-blue-800 transition-colors">维护记录</button>
</td>
</tr>
<tr class="data-grid-row hover:bg-gray-50 transition-colors">
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">GT-003
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">混合型</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">287.6小时
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">1,023 km
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">98次</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">85%</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<span
class="px-2 py-1 text-xs rounded-full bg-yellow-100 text-yellow-800">维护中</span>
</td>
<td class="px-4 md:px-6 py-4 whitespace-nowrap text-sm data-grid-cell">
<button
class="text-blue-600 hover:text-blue-800 mr-3 transition-colors view-drone-data">查看数据</button>
<button
class="text-blue-600 hover:text-blue-800 transition-colors">维护记录</button>
</td>
</tr>
</tbody>
</table>
</div>
<div class="p-4 border-t border-gray-200 flex flex-wrap justify-between items-center gap-4">
<p class="text-sm text-gray-500">显示 1 至 3 条,共 24 条</p>
<div class="flex space-x-1">
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 text-gray-500 hover:bg-gray-100 disabled:opacity-50 transition-colors"
disabled>
<i class="fa fa-chevron-left text-xs"></i>
</button>
<button
class="w-8 h-8 flex items-center justify-center rounded bg-blue-600 text-white hover:bg-blue-700 transition-colors">1</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-100 transition-colors">2</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 hover:bg-gray-100 transition-colors">3</button>
<button
class="w-8 h-8 flex items-center justify-center rounded border border-gray-300 text-gray-500 hover:bg-gray-100 transition-colors">
<i class="fa fa-chevron-right text-xs"></i>
</button>
</div>
</div>
</div>
</section>
</div>
</main>
</div>
<script>
// 更新日期和时间显示
function updateDateTime() {
const now = new Date();
const dateStr = now.toLocaleDateString('zh-CN', {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long'
});
const timeStr = now.toLocaleTimeString('zh-CN', {
hour12: false
});
const dateElement = document.getElementById('current-date');
const timeElement = document.getElementById('current-time');
if (dateElement) dateElement.textContent = dateStr;
if (timeElement) timeElement.textContent = timeStr;
}
// 初始化日期
document.getElementById('current-date').textContent = new Date().toLocaleDateString('zh-CN', {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long'
});
// 侧边栏切换功能
document.getElementById('mobile-menu-button').addEventListener('click', function () {
const sidebar = document.getElementById('sidebar');
sidebar.classList.toggle('mobile-hidden');
});
// 通知面板功能
document.querySelector('.notification-button').addEventListener('click', function () {
const panel = document.getElementById('notification-panel');
panel.classList.toggle('translate-x-full');
});
document.getElementById('close-notification').addEventListener('click', function () {
document.getElementById('notification-panel').classList.add('translate-x-full');
});
// 气象数据实时更新
let weatherFiveElementsChart;
let weatherUpdateInterval;
// 初始化气象数据
let currentWeatherData = {
temperature: 23.5,
humidity: 68,
pressure: 1013,
windSpeed: 4.2,
windDirection: '东北'
};
// 风向数组
const windDirections = ['东北', '东南', '西南', '西北'];
// 更新气象数据
function updateWeatherData() {
// 模拟真实的气象变化
currentWeatherData.temperature = Math.max(15, Math.min(35,
currentWeatherData.temperature + (Math.random() - 0.5) * 0.5));
currentWeatherData.humidity = Math.max(40, Math.min(90,
currentWeatherData.humidity + (Math.random() - 0.5) * 3));
currentWeatherData.pressure = Math.max(1000, Math.min(1020,
currentWeatherData.pressure + (Math.random() - 0.5) * 0.5));
currentWeatherData.windSpeed = Math.max(1, Math.min(15,
currentWeatherData.windSpeed + (Math.random() - 0.5) * 0.3));
// 风向变化概率较低,更稳定
if (Math.random() < 0.1) {
const currentIndex = windDirections.indexOf(currentWeatherData.windDirection);
const newIndex = (currentIndex + Math.floor(Math.random() * 3) - 1 + 4) % 4;
currentWeatherData.windDirection = windDirections[newIndex];
}
// 更新显示
document.getElementById('temperature-value').textContent = currentWeatherData.temperature.toFixed(1) + '°C';
document.getElementById('humidity-value').textContent = Math.round(currentWeatherData.humidity) + '%';
document.getElementById('pressure-value').textContent = Math.round(currentWeatherData.pressure) + ' hPa';
document.getElementById('wind-speed-value').textContent = currentWeatherData.windSpeed.toFixed(1) + ' m/s';
document.getElementById('wind-direction-value').textContent = currentWeatherData.windDirection;
// 添加变化动画
document.querySelectorAll('.weather-value').forEach(el => {
el.classList.add('weather-value-changing');
setTimeout(() => {
el.classList.remove('weather-value-changing');
}, 1000);
});
// 更新图表数据
if (weatherFiveElementsChart) {
const newData = generateWeatherChartData();
weatherFiveElementsChart.data.datasets[0].data = newData.temperature;
weatherFiveElementsChart.data.datasets[1].data = newData.humidity;
weatherFiveElementsChart.data.datasets[2].data = newData.pressure;
weatherFiveElementsChart.data.datasets[3].data = newData.windSpeed;
weatherFiveElementsChart.update('none');
}
}
// 生成气象图表数据
function generateWeatherChartData() {
const labels = ['00:00', '04:00', '08:00', '12:00', '16:00', '20:00'];
const temperature = [];
const humidity = [];
const pressure = [];
const windSpeed = [];
// 生成基于当前时间的合理数据
const baseTemp = currentWeatherData.temperature;
const baseHumidity = currentWeatherData.humidity;
const basePressure = currentWeatherData.pressure;
const baseWindSpeed = currentWeatherData.windSpeed;
for (let i = 0; i < labels.length; i++) {
// 温度变化:白天升高,夜晚降低
const tempVariation = Math.sin(i / labels.length * Math.PI) * 3;
temperature.push(+(baseTemp + tempVariation).toFixed(1));
// 湿度变化:与温度相反
const humidityVariation = -Math.sin(i / labels.length * Math.PI) * 8;
humidity.push(Math.round(baseHumidity + humidityVariation));
// 气压变化:较小波动
const pressureVariation = (Math.random() - 0.5) * 2;
pressure.push(Math.round(basePressure + pressureVariation));
// 风速变化:白天较大,夜晚较小
const windVariation = Math.sin(i / labels.length * Math.PI) * 2;
windSpeed.push(+(baseWindSpeed + windVariation).toFixed(1));
}
return { temperature, humidity, pressure, windSpeed };
}
// 图表初始化
function initCharts() {
// 任务完成情况图表
const taskCompletionCtx = document.getElementById('taskCompletionChart').getContext('2d');
new Chart(taskCompletionCtx, {
type: 'line',
data: {
labels: ['10-04', '10-05', '10-06', '10-07', '10-08', '10-09', '10-10'],
datasets: [{
label: '已完成任务',
data: [12, 19, 15, 17, 22, 18, 15],
borderColor: '#10B981',
backgroundColor: 'rgba(16, 185, 129, 0.1)',
tension: 0.4,
fill: true
}, {
label: '进行中任务',
data: [5, 7, 6, 8, 6, 5, 3],
borderColor: '#F59E0B',
backgroundColor: 'rgba(245, 158, 11, 0.1)',
tension: 0.4,
fill: true
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'top',
labels: {
color: '#ffffff' // 图例文字颜色设置为白色
}
}
},
scales: {
y: {
beginAtZero: true,
ticks: {
color: '#ffffff' // Y轴刻度文字颜色设置为白色
},
title: {
color: '#ffffff' // Y轴标题颜色设置为白色如果有标题的话
}
},
x: {
ticks: {
color: '#ffffff' // X轴刻度文字颜色设置为白色
},
title: {
color: '#ffffff' // X轴标题颜色设置为白色如果有标题的话
}
}
}
}
});
// 任务类型分布图表
const taskTypeCtx = document.getElementById('taskTypeChart').getContext('2d');
new Chart(taskTypeCtx, {
type: 'doughnut',
data: {
labels: ['巡检任务', '气象探测任务', '航拍测绘任务', '其他任务'],
datasets: [{
data: [35, 25, 20, 10],
backgroundColor: [
'#3B82F6',
'#10B981',
'#F59E0B',
'#6B7280'
]
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'right',
labels: {
color: '#ffffff' // 图例文字颜色设置为白色
}
}
}
}
});
// 无人机使用率图表
const droneUsageCtx = document.getElementById('droneUsageChart').getContext('2d');
new Chart(droneUsageCtx, {
type: 'bar',
data: {
labels: ['GT-001', 'GT-002', 'GT-003', 'GT-004', 'GT-005', 'GT-006'],
datasets: [{
label: '使用率 (%)',
data: [85, 92, 78, 65, 88, 95],
backgroundColor: '#3B82F6'
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'top',
labels: {
color: '#ffffff' // 图例文字颜色设置为白色
}
}
},
scales: {
y: {
beginAtZero: true,
max: 100,
ticks: {
color: '#ffffff' // Y轴刻度文字颜色设置为白色
},
title: {
color: '#ffffff' // Y轴标题颜色设置为白色如果有标题的话
}
},
x: {
ticks: {
color: '#ffffff' // X轴刻度文字颜色设置为白色
},
title: {
color: '#ffffff' // X轴标题颜色设置为白色如果有标题的话
}
}
}
}
});
// 无人机状态分布图表
const droneStatusCtx = document.getElementById('droneStatusChart').getContext('2d');
new Chart(droneStatusCtx, {
type: 'pie',
data: {
labels: ['运行中', '闲置中', '维护中', '故障'],
datasets: [{
data: [18, 4, 2, 0],
backgroundColor: [
'#10B981',
'#6B7280',
'#F59E0B',
'#EF4444'
]
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'right',
labels: {
color: '#ffffff' // 图例文字颜色设置为白色
}
}
}
}
});
// 任务审批统计图表
const approvalCtx = document.getElementById('approvalChart').getContext('2d');
new Chart(approvalCtx, {
type: 'bar',
data: {
labels: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
datasets: [{
label: '已批准',
data: [12, 19, 15, 17, 22, 18, 15],
backgroundColor: '#10B981'
}, {
label: '待审批',
data: [5, 7, 6, 8, 6, 5, 3],
backgroundColor: '#F59E0B'
}, {
label: '已拒绝',
data: [2, 3, 1, 2, 1, 0, 1],
backgroundColor: '#EF4444'
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'top',
labels: {
color: '#ffffff' // 图例文字颜色设置为白色
}
}
},
scales: {
y: {
beginAtZero: true,
ticks: {
color: '#ffffff' // X轴刻度文字颜色设置为白色
},
title: {
color: '#ffffff' // X轴标题颜色设置为白色如果有标题的话
}
},
x: {
ticks: {
color: '#ffffff' // X轴刻度文字颜色设置为白色
},
title: {
color: '#ffffff' // X轴标题颜色设置为白色如果有标题的话
}
}
}
}
});
// 无人机气象五要素图表
const weatherFiveElementsCtx = document.getElementById('weatherFiveElementsChart').getContext('2d');
const weatherData = generateWeatherChartData();
weatherFiveElementsChart = new Chart(weatherFiveElementsCtx, {
type: 'line',
data: {
labels: ['00:00', '04:00', '08:00', '12:00', '16:00', '20:00'],
datasets: [{
label: '温度 (°C)',
data: weatherData.temperature,
borderColor: '#EF4444',
backgroundColor: 'rgba(239, 68, 68, 0.1)',
tension: 0.4,
yAxisID: 'y'
}, {
label: '湿度 (%)',
data: weatherData.humidity,
borderColor: '#3B82F6',
backgroundColor: 'rgba(59, 130, 246, 0.1)',
tension: 0.4,
yAxisID: 'y1'
}, {
label: '气压 (hPa)',
data: weatherData.pressure,
borderColor: '#10B981',
backgroundColor: 'rgba(16, 185, 129, 0.1)',
tension: 0.4,
yAxisID: 'y2'
}, {
label: '风速 (m/s)',
data: weatherData.windSpeed,
borderColor: '#8B5CF6',
backgroundColor: 'rgba(139, 92, 246, 0.1)',
tension: 0.4,
yAxisID: 'y3'
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: {
mode: 'index',
intersect: false,
},
plugins: {
legend: {
position: 'top',
labels: {
color: '#ffffff' // 图例文字颜色设置为白色
}
}
},
scales: {
y: {
type: 'linear',
display: true,
position: 'left',
title: {
display: true,
text: '温度 (°C)',
color: '#ffffff' // X轴标题颜色设置为白色如果有标题的话
},
ticks: {
color: '#ffffff' // X轴刻度文字颜色设置为白色
},
},
y1: {
type: 'linear',
display: true,
position: 'right',
title: {
display: true,
text: '湿度 (%)',
color: '#ffffff' // X轴标题颜色设置为白色如果有标题的话
},
ticks: {
color: '#ffffff' // X轴刻度文字颜色设置为白色
},
grid: {
drawOnChartArea: false,
},
},
y2: {
type: 'linear',
display: false,
ticks: {
color: '#ffffff' // X轴刻度文字颜色设置为白色
},
title: {
color: '#ffffff' // X轴标题颜色设置为白色如果有标题的话
}
},
y3: {
type: 'linear',
display: false,
ticks: {
color: '#ffffff' // X轴刻度文字颜色设置为白色
},
title: {
color: '#ffffff' // X轴标题颜色设置为白色如果有标题的话
}
},
x: {
ticks: {
color: '#ffffff' // X轴刻度文字颜色设置为白色
},
title: {
color: '#ffffff' // X轴标题颜色设置为白色如果有标题的话
}
}
}
}
});
// 大气成分数据图表
const atmosphereCompositionCtx = document.getElementById('atmosphereCompositionChart').getContext('2d');
new Chart(atmosphereCompositionCtx, {
type: 'bar',
data: {
labels: ['氧气', '氮气', '二氧化碳', '甲烷', '其他气体'],
datasets: [{
label: '气体含量 (%)',
data: [20.95, 78.08, 0.04, 0.00017, 0.93],
backgroundColor: [
'#3B82F6',
'#10B981',
'#F59E0B',
'#EF4444',
'#8B5CF6'
]
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'top',
labels: {
color: '#ffffff' // 图例文字颜色设置为白色
}
}
},
scales: {
y: {
beginAtZero: true,
max: 100,
ticks: {
color: '#ffffff' // X轴刻度文字颜色设置为白色
},
title: {
color: '#ffffff' // X轴标题颜色设置为白色如果有标题的话
}
},
x: {
ticks: {
color: '#ffffff' // X轴刻度文字颜色设置为白色
},
title: {
color: '#ffffff' // X轴标题颜色设置为白色如果有标题的话
}
}
}
}
});
}
// 页面加载完成后初始化
document.addEventListener('DOMContentLoaded', function () {
updateDateTime();
// 每秒更新时间
setInterval(updateDateTime, 1000);
initCharts();
// 地图标记交互
document.querySelectorAll('.map-marker').forEach(marker => {
marker.addEventListener('click', function () {
const area = this.getAttribute('data-area');
let areaName = '';
switch (area) {
case 'sanya-bay':
areaName = '三亚湾';
break;
case 'west-island':
areaName = '西岛';
break;
case 'wuzhizhou-island':
areaName = '蜈支洲岛';
break;
case 'boundary-island':
areaName = '分界洲岛';
break;
}
document.getElementById('current-map-area').textContent = areaName;
// 显示区域详情提示
alert(`您点击了${areaName},正在加载该区域的详细测绘数据...`);
});
});
// 统计筛选按钮交互
document.querySelectorAll('.stat-filter-active').forEach(button => {
button.addEventListener('click', function () {
const parent = this.parentElement;
parent.querySelectorAll('button').forEach(btn => {
btn.classList.remove('stat-filter-active');
});
this.classList.add('stat-filter-active');
});
});
// 任务查看按钮交互
document.querySelectorAll('.task-action-btn').forEach(button => {
button.addEventListener('click', function () {
const taskId = this.getAttribute('data-task');
const action = this.getAttribute('data-action');
alert(`正在${action === 'view' ? '查看' : '执行'}任务 ${taskId}...`);
});
});
// 地图类型切换
document.querySelector('.map-type-filter').addEventListener('change', function () {
const mapType = this.value;
alert(`已切换到${mapType === '3d' ? '3D地形图' : mapType === 'satellite' ? '卫星地图' : mapType === 'terrain' ? '地形地图' : '矢量地图'}模式`);
});
// 无人机详情查看
document.querySelectorAll('.view-drone-details').forEach(button => {
button.addEventListener('click', function () {
const droneId = this.getAttribute('data-drone');
alert(`正在查看无人机 ${droneId} 的详细信息...`);
});
});
// 巡检详情查看
document.querySelectorAll('.view-inspection-details').forEach(button => {
button.addEventListener('click', function () {
alert('正在查看巡检任务详情...');
});
});
// 测绘详情查看
document.querySelectorAll('.view-mapping-details').forEach(button => {
button.addEventListener('click', function () {
alert('正在查看测绘任务详情...');
});
});
// 无人机数据查看
document.querySelectorAll('.view-drone-data').forEach(button => {
button.addEventListener('click', function () {
alert('正在查看无人机详细数据...');
});
});
// 地图控制按钮
document.querySelectorAll('.map-control-btn').forEach(button => {
button.addEventListener('click', function () {
const action = this.getAttribute('data-action');
const actions = {
'zoom-in': '放大',
'zoom-out': '缩小',
'reset': '重置视图',
'fullscreen': '全屏'
};
alert(`正在${actions[action]}地图...`);
});
});
// 气象数据刷新按钮
document.querySelector('.bg-blue-600').addEventListener('click', function () {
updateWeatherData();
alert('气象数据已刷新!');
});
// 启动气象数据实时更新
weatherUpdateInterval = setInterval(updateWeatherData, 5000); // 每5秒更新一次
document.querySelectorAll('.nav-item').forEach(item => {
item.addEventListener('click', function (e) {
// 不需要 preventDefault因为这是按钮而不是链接
// 获取目标ID
const targetId = this.getAttribute('data-target');
if (targetId) {
// 更新活动菜单项
document.querySelectorAll('.nav-item').forEach(nav => {
nav.classList.remove('sidebar-item-active');
});
this.classList.add('sidebar-item-active');
// 更新页面标题
const pageTitle = this.querySelector('span').textContent;
document.getElementById('page-title').textContent = pageTitle;
// 显示对应页面
document.querySelectorAll('section').forEach(section => {
section.classList.add('hidden');
});
document.getElementById(targetId).classList.remove('hidden');
// 移动端关闭侧边栏
if (window.innerWidth < 1024) {
document.getElementById('sidebar').classList.add('mobile-hidden');
}
}
});
});
});
// 响应式调整
window.addEventListener('resize', function () {
if (window.innerWidth >= 1024) {
document.getElementById('sidebar').classList.remove('mobile-hidden');
}
});
</script>
</body>
</html>