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

<!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>