|
|
/* 全局样式 */
|
|
|
* {
|
|
|
margin: 0;
|
|
|
padding: 0;
|
|
|
box-sizing: border-box;
|
|
|
}
|
|
|
|
|
|
body {
|
|
|
font-family: 'Segoe UI', 'Microsoft YaHei', Tahoma, Geneva, Verdana, sans-serif;
|
|
|
line-height: 1.4;
|
|
|
color: #ffffff;
|
|
|
background: linear-gradient(135deg, #0a0e1a 0%, #1a1f2e 50%, #0a0e1a 100%);
|
|
|
background-attachment: fixed;
|
|
|
min-height: 100vh;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
|
|
|
/* 大屏头部样式 */
|
|
|
.dashboard-header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
padding: 20px 40px;
|
|
|
background: linear-gradient(135deg, #1a1f2e 0%, #2a3441 50%, #1a1f2e 100%);
|
|
|
border-bottom: 2px solid #00d4ff;
|
|
|
box-shadow: 0 4px 20px rgba(0,0,0,0.3);
|
|
|
position: relative;
|
|
|
z-index: 100;
|
|
|
}
|
|
|
|
|
|
.dashboard-header::before {
|
|
|
content: '';
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
|
left: -100%;
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
background: linear-gradient(90deg, transparent, rgba(0,212,255,0.1), transparent);
|
|
|
animation: shimmer 4s infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes shimmer {
|
|
|
0% { left: -100%; }
|
|
|
100% { left: 100%; }
|
|
|
}
|
|
|
|
|
|
.header-left {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 20px;
|
|
|
}
|
|
|
|
|
|
.logo {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
width: 60px;
|
|
|
height: 60px;
|
|
|
background: linear-gradient(135deg, #00d4ff, #0099cc);
|
|
|
border-radius: 50%;
|
|
|
box-shadow: 0 0 20px rgba(0,212,255,0.5);
|
|
|
}
|
|
|
|
|
|
.logo i {
|
|
|
font-size: 2rem;
|
|
|
color: #ffffff;
|
|
|
animation: pulse 2s infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes pulse {
|
|
|
0%, 100% { transform: scale(1); }
|
|
|
50% { transform: scale(1.1); }
|
|
|
}
|
|
|
|
|
|
.main-title {
|
|
|
font-size: 2.5rem;
|
|
|
font-weight: 700;
|
|
|
color: #ffffff;
|
|
|
text-shadow: 0 2px 10px rgba(0,212,255,0.3);
|
|
|
background: linear-gradient(45deg, #00d4ff, #ffffff, #00d4ff);
|
|
|
-webkit-background-clip: text;
|
|
|
-webkit-text-fill-color: transparent;
|
|
|
background-clip: text;
|
|
|
animation: titleGlow 3s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes titleGlow {
|
|
|
0%, 100% { text-shadow: 0 2px 10px rgba(0,212,255,0.3); }
|
|
|
50% { text-shadow: 0 2px 20px rgba(0,212,255,0.6); }
|
|
|
}
|
|
|
|
|
|
.header-right {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 30px;
|
|
|
}
|
|
|
|
|
|
.weather-info {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 10px;
|
|
|
padding: 10px 20px;
|
|
|
background: rgba(0,212,255,0.1);
|
|
|
border: 1px solid rgba(0,212,255,0.3);
|
|
|
border-radius: 25px;
|
|
|
backdrop-filter: blur(10px);
|
|
|
}
|
|
|
|
|
|
.weather-info i {
|
|
|
font-size: 1.2rem;
|
|
|
color: #00d4ff;
|
|
|
}
|
|
|
|
|
|
.weather-text {
|
|
|
font-size: 1rem;
|
|
|
color: #ffffff;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
.datetime-info {
|
|
|
text-align: right;
|
|
|
}
|
|
|
|
|
|
.date {
|
|
|
font-size: 1.1rem;
|
|
|
color: #ffffff;
|
|
|
font-weight: 600;
|
|
|
margin-bottom: 5px;
|
|
|
}
|
|
|
|
|
|
.time {
|
|
|
font-size: 1.5rem;
|
|
|
color: #00d4ff;
|
|
|
font-weight: 700;
|
|
|
font-family: 'Courier New', monospace;
|
|
|
text-shadow: 0 0 10px rgba(0,212,255,0.5);
|
|
|
}
|
|
|
|
|
|
/* 大屏主体布局 */
|
|
|
.dashboard-main {
|
|
|
display: flex;
|
|
|
height: calc(100vh - 100px);
|
|
|
gap: 20px;
|
|
|
padding: 20px;
|
|
|
background: transparent;
|
|
|
}
|
|
|
|
|
|
/* 侧边栏通用样式 */
|
|
|
.left-sidebar,
|
|
|
.right-sidebar {
|
|
|
width: 350px;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 20px;
|
|
|
overflow-y: auto;
|
|
|
scrollbar-width: thin;
|
|
|
scrollbar-color: rgba(0,212,255,0.3) transparent;
|
|
|
}
|
|
|
|
|
|
.left-sidebar::-webkit-scrollbar,
|
|
|
.right-sidebar::-webkit-scrollbar {
|
|
|
width: 6px;
|
|
|
}
|
|
|
|
|
|
.left-sidebar::-webkit-scrollbar-track,
|
|
|
.right-sidebar::-webkit-scrollbar-track {
|
|
|
background: transparent;
|
|
|
}
|
|
|
|
|
|
.left-sidebar::-webkit-scrollbar-thumb,
|
|
|
.right-sidebar::-webkit-scrollbar-thumb {
|
|
|
background: rgba(0,212,255,0.3);
|
|
|
border-radius: 3px;
|
|
|
}
|
|
|
|
|
|
/* 数据面板样式 */
|
|
|
.data-panel {
|
|
|
background: linear-gradient(135deg, rgba(26,31,46,0.9) 0%, rgba(42,52,65,0.9) 100%);
|
|
|
border: 1px solid rgba(0,212,255,0.2);
|
|
|
border-radius: 15px;
|
|
|
padding: 20px;
|
|
|
backdrop-filter: blur(10px);
|
|
|
box-shadow: 0 8px 32px rgba(0,0,0,0.3);
|
|
|
position: relative;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
|
|
|
.data-panel::before {
|
|
|
content: '';
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
|
left: 0;
|
|
|
right: 0;
|
|
|
height: 2px;
|
|
|
background: linear-gradient(90deg, transparent, #00d4ff, transparent);
|
|
|
animation: borderScan 3s linear infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes borderScan {
|
|
|
0% { transform: translateX(-100%); }
|
|
|
100% { transform: translateX(100%); }
|
|
|
}
|
|
|
|
|
|
.data-panel h3 {
|
|
|
font-size: 1.2rem;
|
|
|
color: #ffffff;
|
|
|
margin-bottom: 15px;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 10px;
|
|
|
font-weight: 600;
|
|
|
}
|
|
|
|
|
|
.data-panel h3 i {
|
|
|
color: #00d4ff;
|
|
|
font-size: 1.1rem;
|
|
|
}
|
|
|
|
|
|
/* 状态网格 */
|
|
|
.status-grid {
|
|
|
display: grid;
|
|
|
grid-template-columns: 1fr;
|
|
|
gap: 15px;
|
|
|
}
|
|
|
|
|
|
.status-card {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 15px;
|
|
|
padding: 15px;
|
|
|
background: rgba(0,0,0,0.3);
|
|
|
border-radius: 10px;
|
|
|
border-left: 4px solid;
|
|
|
transition: all 0.3s ease;
|
|
|
animation: statusPulse 2s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes statusPulse {
|
|
|
0%, 100% { box-shadow: 0 0 10px rgba(0,0,0,0.3); }
|
|
|
50% { box-shadow: 0 0 20px rgba(0,212,255,0.2); }
|
|
|
}
|
|
|
|
|
|
.status-card.online {
|
|
|
border-left-color: #00ff88;
|
|
|
}
|
|
|
|
|
|
.status-card.warning {
|
|
|
border-left-color: #ffaa00;
|
|
|
}
|
|
|
|
|
|
.status-card.processing {
|
|
|
border-left-color: #00d4ff;
|
|
|
}
|
|
|
|
|
|
.status-card:hover {
|
|
|
transform: translateY(-2px);
|
|
|
box-shadow: 0 8px 25px rgba(0,212,255,0.2);
|
|
|
}
|
|
|
|
|
|
.status-icon {
|
|
|
width: 50px;
|
|
|
height: 50px;
|
|
|
border-radius: 50%;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
font-size: 1.5rem;
|
|
|
}
|
|
|
|
|
|
.status-card.online .status-icon {
|
|
|
background: linear-gradient(135deg, #00ff88, #00cc66);
|
|
|
color: #ffffff;
|
|
|
}
|
|
|
|
|
|
.status-card.warning .status-icon {
|
|
|
background: linear-gradient(135deg, #ffaa00, #ff8800);
|
|
|
color: #ffffff;
|
|
|
}
|
|
|
|
|
|
.status-card.processing .status-icon {
|
|
|
background: linear-gradient(135deg, #00d4ff, #0099cc);
|
|
|
color: #ffffff;
|
|
|
}
|
|
|
|
|
|
.status-info {
|
|
|
flex: 1;
|
|
|
}
|
|
|
|
|
|
.status-number {
|
|
|
display: block;
|
|
|
font-size: 1.8rem;
|
|
|
font-weight: 700;
|
|
|
color: #ffffff;
|
|
|
margin-bottom: 5px;
|
|
|
}
|
|
|
|
|
|
.status-label {
|
|
|
display: block;
|
|
|
font-size: 0.9rem;
|
|
|
color: #b0c4de;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
/* 水质监测样式 */
|
|
|
.water-quality {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 12px;
|
|
|
}
|
|
|
|
|
|
.quality-item {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
padding: 12px 15px;
|
|
|
background: rgba(0,0,0,0.2);
|
|
|
border-radius: 8px;
|
|
|
border-left: 3px solid;
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.quality-item.excellent {
|
|
|
border-left-color: #00ff88;
|
|
|
}
|
|
|
|
|
|
.quality-item.good {
|
|
|
border-left-color: #00d4ff;
|
|
|
}
|
|
|
|
|
|
.quality-item.warning {
|
|
|
border-left-color: #ffaa00;
|
|
|
}
|
|
|
|
|
|
.quality-item:hover {
|
|
|
background: rgba(0,212,255,0.1);
|
|
|
transform: translateX(5px);
|
|
|
}
|
|
|
|
|
|
.quality-label {
|
|
|
font-size: 0.9rem;
|
|
|
color: #b0c4de;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
.quality-value {
|
|
|
font-size: 1rem;
|
|
|
color: #ffffff;
|
|
|
font-weight: 600;
|
|
|
margin: 0 10px;
|
|
|
}
|
|
|
|
|
|
.quality-status {
|
|
|
font-size: 0.8rem;
|
|
|
padding: 4px 8px;
|
|
|
border-radius: 12px;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
.quality-item.excellent .quality-status {
|
|
|
background: rgba(0,255,136,0.2);
|
|
|
color: #00ff88;
|
|
|
}
|
|
|
|
|
|
.quality-item.good .quality-status {
|
|
|
background: rgba(0,212,255,0.2);
|
|
|
color: #00d4ff;
|
|
|
}
|
|
|
|
|
|
.quality-item.warning .quality-status {
|
|
|
background: rgba(255,170,0,0.2);
|
|
|
color: #ffaa00;
|
|
|
}
|
|
|
|
|
|
/* 效率统计样式 */
|
|
|
.efficiency-chart {
|
|
|
margin-bottom: 15px;
|
|
|
text-align: center;
|
|
|
}
|
|
|
|
|
|
.efficiency-stats {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 10px;
|
|
|
}
|
|
|
|
|
|
.stat-row {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
padding: 8px 0;
|
|
|
border-bottom: 1px solid rgba(0,212,255,0.1);
|
|
|
}
|
|
|
|
|
|
.stat-row:last-child {
|
|
|
border-bottom: none;
|
|
|
}
|
|
|
|
|
|
.stat-label {
|
|
|
font-size: 0.9rem;
|
|
|
color: #b0c4de;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
.stat-value {
|
|
|
font-size: 1.1rem;
|
|
|
color: #00d4ff;
|
|
|
font-weight: 600;
|
|
|
}
|
|
|
|
|
|
/* 地图区域样式 */
|
|
|
.map-section {
|
|
|
flex: 1;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
}
|
|
|
|
|
|
.map-container {
|
|
|
flex: 1;
|
|
|
position: relative;
|
|
|
background: linear-gradient(135deg, rgba(26,31,46,0.9) 0%, rgba(42,52,65,0.9) 100%);
|
|
|
border: 1px solid rgba(0,212,255,0.2);
|
|
|
border-radius: 15px;
|
|
|
overflow: hidden;
|
|
|
backdrop-filter: blur(10px);
|
|
|
box-shadow: 0 8px 32px rgba(0,0,0,0.3);
|
|
|
}
|
|
|
|
|
|
.map-view {
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
border-radius: 15px;
|
|
|
}
|
|
|
|
|
|
/* 地图图例 */
|
|
|
.map-legend {
|
|
|
position: absolute;
|
|
|
top: 20px;
|
|
|
left: 20px;
|
|
|
background: rgba(26,31,46,0.95);
|
|
|
border: 1px solid rgba(0,212,255,0.3);
|
|
|
border-radius: 10px;
|
|
|
padding: 15px;
|
|
|
backdrop-filter: blur(10px);
|
|
|
min-width: 180px;
|
|
|
}
|
|
|
|
|
|
.map-legend h4 {
|
|
|
font-size: 1rem;
|
|
|
color: #ffffff;
|
|
|
margin-bottom: 10px;
|
|
|
font-weight: 600;
|
|
|
}
|
|
|
|
|
|
.legend-items {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 8px;
|
|
|
}
|
|
|
|
|
|
.legend-item {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 10px;
|
|
|
}
|
|
|
|
|
|
.legend-color {
|
|
|
width: 12px;
|
|
|
height: 12px;
|
|
|
border-radius: 50%;
|
|
|
animation: legendPulse 2s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes legendPulse {
|
|
|
0%, 100% { transform: scale(1); opacity: 1; }
|
|
|
50% { transform: scale(1.2); opacity: 0.8; }
|
|
|
}
|
|
|
|
|
|
.legend-color.clean {
|
|
|
background: #00ff88;
|
|
|
}
|
|
|
|
|
|
.legend-color.warning {
|
|
|
background: #ffaa00;
|
|
|
}
|
|
|
|
|
|
.legend-color.danger {
|
|
|
background: #ff4444;
|
|
|
}
|
|
|
|
|
|
.legend-color.device {
|
|
|
background: #00d4ff;
|
|
|
}
|
|
|
|
|
|
.legend-text {
|
|
|
font-size: 0.9rem;
|
|
|
color: #b0c4de;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
/* 地图控制按钮 */
|
|
|
.map-controls {
|
|
|
position: absolute;
|
|
|
top: 20px;
|
|
|
right: 20px;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 10px;
|
|
|
}
|
|
|
|
|
|
.control-btn {
|
|
|
width: 40px;
|
|
|
height: 40px;
|
|
|
background: rgba(26,31,46,0.95);
|
|
|
border: 1px solid rgba(0,212,255,0.3);
|
|
|
border-radius: 8px;
|
|
|
color: #00d4ff;
|
|
|
font-size: 1rem;
|
|
|
cursor: pointer;
|
|
|
transition: all 0.3s ease;
|
|
|
backdrop-filter: blur(10px);
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
}
|
|
|
|
|
|
.control-btn:hover {
|
|
|
background: rgba(0,212,255,0.2);
|
|
|
transform: scale(1.1);
|
|
|
box-shadow: 0 0 15px rgba(0,212,255,0.3);
|
|
|
}
|
|
|
|
|
|
/* 视频监控样式 */
|
|
|
.video-grid {
|
|
|
display: grid;
|
|
|
grid-template-columns: 1fr 1fr;
|
|
|
gap: 10px;
|
|
|
}
|
|
|
|
|
|
.video-item {
|
|
|
aspect-ratio: 16/9;
|
|
|
border-radius: 8px;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
|
|
|
.video-placeholder {
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
background: linear-gradient(135deg, rgba(0,0,0,0.6) 0%, rgba(26,31,46,0.8) 100%);
|
|
|
border: 1px solid rgba(0,212,255,0.2);
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
gap: 8px;
|
|
|
color: #b0c4de;
|
|
|
font-size: 0.8rem;
|
|
|
position: relative;
|
|
|
overflow: hidden;
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.video-placeholder::before {
|
|
|
content: '';
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
|
left: -100%;
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
background: linear-gradient(90deg, transparent, rgba(0,212,255,0.1), transparent);
|
|
|
animation: videoScan 3s linear infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes videoScan {
|
|
|
0% { left: -100%; }
|
|
|
100% { left: 100%; }
|
|
|
}
|
|
|
|
|
|
.video-placeholder i {
|
|
|
font-size: 1.5rem;
|
|
|
color: #00d4ff;
|
|
|
animation: videoIconPulse 2s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes videoIconPulse {
|
|
|
0%, 100% { opacity: 0.7; transform: scale(1); }
|
|
|
50% { opacity: 1; transform: scale(1.1); }
|
|
|
}
|
|
|
|
|
|
.video-placeholder:hover {
|
|
|
border-color: rgba(0,212,255,0.5);
|
|
|
background: linear-gradient(135deg, rgba(0,212,255,0.1) 0%, rgba(26,31,46,0.9) 100%);
|
|
|
}
|
|
|
|
|
|
/* 告警信息样式 */
|
|
|
.alert-list {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 12px;
|
|
|
max-height: 300px;
|
|
|
overflow-y: auto;
|
|
|
}
|
|
|
|
|
|
.alert-item {
|
|
|
display: flex;
|
|
|
gap: 12px;
|
|
|
padding: 12px;
|
|
|
background: rgba(0,0,0,0.2);
|
|
|
border-radius: 8px;
|
|
|
border-left: 3px solid;
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.alert-item.high {
|
|
|
border-left-color: #ff4444;
|
|
|
}
|
|
|
|
|
|
.alert-item.medium {
|
|
|
border-left-color: #ffaa00;
|
|
|
}
|
|
|
|
|
|
.alert-item.low {
|
|
|
border-left-color: #00d4ff;
|
|
|
}
|
|
|
|
|
|
.alert-item:hover {
|
|
|
background: rgba(0,212,255,0.05);
|
|
|
transform: translateX(5px);
|
|
|
}
|
|
|
|
|
|
.alert-icon {
|
|
|
width: 30px;
|
|
|
height: 30px;
|
|
|
border-radius: 50%;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
font-size: 0.9rem;
|
|
|
flex-shrink: 0;
|
|
|
}
|
|
|
|
|
|
.alert-item.high .alert-icon {
|
|
|
background: rgba(255,68,68,0.2);
|
|
|
color: #ff4444;
|
|
|
}
|
|
|
|
|
|
.alert-item.medium .alert-icon {
|
|
|
background: rgba(255,170,0,0.2);
|
|
|
color: #ffaa00;
|
|
|
}
|
|
|
|
|
|
.alert-item.low .alert-icon {
|
|
|
background: rgba(0,212,255,0.2);
|
|
|
color: #00d4ff;
|
|
|
}
|
|
|
|
|
|
.alert-content {
|
|
|
flex: 1;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 4px;
|
|
|
}
|
|
|
|
|
|
.alert-title {
|
|
|
font-size: 0.9rem;
|
|
|
color: #ffffff;
|
|
|
font-weight: 600;
|
|
|
}
|
|
|
|
|
|
.alert-desc {
|
|
|
font-size: 0.8rem;
|
|
|
color: #b0c4de;
|
|
|
line-height: 1.3;
|
|
|
}
|
|
|
|
|
|
.alert-time {
|
|
|
font-size: 0.7rem;
|
|
|
color: #888;
|
|
|
font-style: italic;
|
|
|
}
|
|
|
|
|
|
/* 环境数据样式 */
|
|
|
.env-data {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 12px;
|
|
|
}
|
|
|
|
|
|
.env-item {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 12px;
|
|
|
padding: 12px;
|
|
|
background: rgba(0,0,0,0.2);
|
|
|
border-radius: 8px;
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.env-item:hover {
|
|
|
background: rgba(0,212,255,0.1);
|
|
|
transform: translateX(5px);
|
|
|
}
|
|
|
|
|
|
.env-icon {
|
|
|
width: 35px;
|
|
|
height: 35px;
|
|
|
border-radius: 50%;
|
|
|
background: linear-gradient(135deg, #00d4ff, #0099cc);
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
color: #ffffff;
|
|
|
font-size: 1rem;
|
|
|
}
|
|
|
|
|
|
.env-info {
|
|
|
flex: 1;
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
}
|
|
|
|
|
|
.env-label {
|
|
|
font-size: 0.9rem;
|
|
|
color: #b0c4de;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
.env-value {
|
|
|
font-size: 1.1rem;
|
|
|
color: #ffffff;
|
|
|
font-weight: 600;
|
|
|
}
|
|
|
|
|
|
/* 数据趋势样式 */
|
|
|
.trend-chart {
|
|
|
margin-bottom: 15px;
|
|
|
text-align: center;
|
|
|
background: rgba(0,0,0,0.2);
|
|
|
border-radius: 8px;
|
|
|
padding: 10px;
|
|
|
}
|
|
|
|
|
|
.trend-legend {
|
|
|
display: flex;
|
|
|
justify-content: space-around;
|
|
|
gap: 10px;
|
|
|
}
|
|
|
|
|
|
.legend-item {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 6px;
|
|
|
font-size: 0.8rem;
|
|
|
color: #b0c4de;
|
|
|
}
|
|
|
|
|
|
.legend-dot {
|
|
|
width: 8px;
|
|
|
height: 8px;
|
|
|
border-radius: 50%;
|
|
|
flex-shrink: 0;
|
|
|
}
|
|
|
|
|
|
.legend-dot.red {
|
|
|
background: #ff4444;
|
|
|
}
|
|
|
|
|
|
.legend-dot.blue {
|
|
|
background: #00d4ff;
|
|
|
}
|
|
|
|
|
|
.legend-dot.green {
|
|
|
background: #00ff88;
|
|
|
}
|
|
|
|
|
|
/* 响应式设计 */
|
|
|
@media (max-width: 1600px) {
|
|
|
.left-sidebar,
|
|
|
.right-sidebar {
|
|
|
width: 300px;
|
|
|
}
|
|
|
|
|
|
.main-title {
|
|
|
font-size: 2rem;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@media (max-width: 1200px) {
|
|
|
.dashboard-main {
|
|
|
flex-direction: column;
|
|
|
height: auto;
|
|
|
}
|
|
|
|
|
|
.left-sidebar,
|
|
|
.right-sidebar {
|
|
|
width: 100%;
|
|
|
flex-direction: row;
|
|
|
overflow-x: auto;
|
|
|
overflow-y: hidden;
|
|
|
}
|
|
|
|
|
|
.data-panel {
|
|
|
min-width: 300px;
|
|
|
flex-shrink: 0;
|
|
|
}
|
|
|
|
|
|
.map-section {
|
|
|
height: 60vh;
|
|
|
order: -1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.nav-menu {
|
|
|
display: flex;
|
|
|
gap: 20px;
|
|
|
}
|
|
|
|
|
|
.nav-btn {
|
|
|
padding: 8px 16px;
|
|
|
border: 1px solid transparent;
|
|
|
background: rgba(255,255,255,0.05);
|
|
|
color: #ffffff;
|
|
|
border-radius: 6px;
|
|
|
cursor: pointer;
|
|
|
transition: all 0.3s ease;
|
|
|
font-size: 0.9rem;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.5rem;
|
|
|
position: relative;
|
|
|
backdrop-filter: blur(10px);
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
.nav-btn::before {
|
|
|
content: '';
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
|
left: 0;
|
|
|
right: 0;
|
|
|
bottom: 0;
|
|
|
background: linear-gradient(45deg, #00d4ff, #0099cc);
|
|
|
border-radius: 6px;
|
|
|
opacity: 0;
|
|
|
transition: opacity 0.3s ease;
|
|
|
z-index: -1;
|
|
|
}
|
|
|
|
|
|
.nav-btn:hover::before,
|
|
|
.nav-btn.active::before {
|
|
|
opacity: 1;
|
|
|
}
|
|
|
|
|
|
.nav-btn:hover,
|
|
|
.nav-btn.active {
|
|
|
color: #ffffff;
|
|
|
transform: translateY(-1px);
|
|
|
box-shadow: 0 4px 12px rgba(0,212,255,0.3);
|
|
|
}
|
|
|
|
|
|
.user-info {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 1rem;
|
|
|
}
|
|
|
|
|
|
.time {
|
|
|
font-size: 0.9rem;
|
|
|
color: #ffffff;
|
|
|
padding: 0.5rem 1rem;
|
|
|
background: rgba(74, 144, 226, 0.3);
|
|
|
border-radius: 20px;
|
|
|
text-shadow: 0 1px 2px rgba(0,0,0,0.5);
|
|
|
}
|
|
|
|
|
|
.user-avatar {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.5rem;
|
|
|
padding: 0.5rem 1rem;
|
|
|
background: linear-gradient(135deg, #667eea, #764ba2);
|
|
|
color: white;
|
|
|
border-radius: 20px;
|
|
|
cursor: pointer;
|
|
|
}
|
|
|
|
|
|
/* 主要内容区域 */
|
|
|
.main-content {
|
|
|
/* margin-top: 70px; */
|
|
|
padding: 1rem 0;
|
|
|
background: rgba(15, 20, 25, 0.8);
|
|
|
backdrop-filter: blur(10px);
|
|
|
min-height: calc(100vh - 70px);
|
|
|
}
|
|
|
|
|
|
/* 大屏模式下的主内容区域 */
|
|
|
body.fullscreen-mode .main-content {
|
|
|
margin-top: 0;
|
|
|
padding: 0;
|
|
|
background: transparent;
|
|
|
backdrop-filter: none;
|
|
|
min-height: 100vh;
|
|
|
}
|
|
|
|
|
|
.tab-content {
|
|
|
display: none;
|
|
|
animation: fadeIn 0.4s ease-in-out;
|
|
|
background: rgba(26, 35, 50, 0.6);
|
|
|
border-radius: 12px;
|
|
|
margin: 10px;
|
|
|
padding: 20px;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.2);
|
|
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
|
|
|
}
|
|
|
|
|
|
/* 大屏模式下的tab内容 */
|
|
|
body.fullscreen-mode .tab-content {
|
|
|
background: transparent;
|
|
|
border-radius: 0;
|
|
|
margin: 0;
|
|
|
padding: 0;
|
|
|
border: none;
|
|
|
box-shadow: none;
|
|
|
}
|
|
|
|
|
|
.tab-content.active {
|
|
|
display: block;
|
|
|
}
|
|
|
|
|
|
/* 监控管理一张图 - 大屏风格 */
|
|
|
.monitor-layout {
|
|
|
display: grid;
|
|
|
grid-template-columns: 1fr 450px;
|
|
|
gap: 1rem;
|
|
|
height: 100vh;
|
|
|
padding: 0;
|
|
|
margin: 0;
|
|
|
background: linear-gradient(135deg, #0a0e1a 0%, #1a2332 50%, #0a0e1a 100%);
|
|
|
}
|
|
|
|
|
|
.map-container {
|
|
|
background: linear-gradient(135deg, rgba(10, 14, 26, 0.95) 0%, rgba(26, 35, 50, 0.9) 100%);
|
|
|
border-radius: 0;
|
|
|
box-shadow: inset 0 0 50px rgba(0, 212, 255, 0.1);
|
|
|
overflow: hidden;
|
|
|
position: relative;
|
|
|
border: 2px solid rgba(0, 212, 255, 0.5);
|
|
|
backdrop-filter: blur(20px);
|
|
|
margin: 0;
|
|
|
}
|
|
|
|
|
|
.map-header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
padding: 1.5rem 2rem;
|
|
|
background: linear-gradient(135deg, #0a0e1a, #1e3c72, #2a5298);
|
|
|
color: white;
|
|
|
border-bottom: 3px solid rgba(0, 212, 255, 0.8);
|
|
|
box-shadow: 0 4px 20px rgba(0, 212, 255, 0.3);
|
|
|
}
|
|
|
|
|
|
.map-header h3 {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 1rem;
|
|
|
margin: 0;
|
|
|
font-size: 1.8rem;
|
|
|
font-weight: 700;
|
|
|
text-shadow: 0 2px 10px rgba(0, 212, 255, 0.5);
|
|
|
background: linear-gradient(45deg, #00d4ff, #ffffff, #00d4ff);
|
|
|
-webkit-background-clip: text;
|
|
|
-webkit-text-fill-color: transparent;
|
|
|
background-clip: text;
|
|
|
animation: titleGlow 3s ease-in-out infinite alternate;
|
|
|
}
|
|
|
|
|
|
@keyframes titleGlow {
|
|
|
0% { text-shadow: 0 2px 10px rgba(0, 212, 255, 0.5); }
|
|
|
100% { text-shadow: 0 2px 20px rgba(0, 212, 255, 0.8), 0 0 30px rgba(0, 212, 255, 0.4); }
|
|
|
}
|
|
|
|
|
|
.map-controls {
|
|
|
display: flex;
|
|
|
gap: 0.5rem;
|
|
|
}
|
|
|
|
|
|
.control-btn {
|
|
|
padding: 0.8rem 1.5rem;
|
|
|
border: 2px solid rgba(0, 212, 255, 0.6);
|
|
|
background: linear-gradient(135deg, rgba(0, 212, 255, 0.2), rgba(0, 212, 255, 0.1));
|
|
|
color: #00d4ff;
|
|
|
border-radius: 8px;
|
|
|
cursor: pointer;
|
|
|
transition: all 0.3s ease;
|
|
|
font-size: 1rem;
|
|
|
font-weight: 600;
|
|
|
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
|
|
|
box-shadow: 0 4px 15px rgba(0, 212, 255, 0.3);
|
|
|
}
|
|
|
|
|
|
.control-btn:hover {
|
|
|
background: linear-gradient(135deg, rgba(0, 212, 255, 0.4), rgba(0, 212, 255, 0.2));
|
|
|
transform: translateY(-2px);
|
|
|
box-shadow: 0 6px 20px rgba(0, 212, 255, 0.5);
|
|
|
}
|
|
|
|
|
|
.map {
|
|
|
height: calc(100% - 140px);
|
|
|
background: #0a0e1a;
|
|
|
position: relative;
|
|
|
overflow: hidden;
|
|
|
background-image: url('images/river-bg.svg');
|
|
|
background-size: cover;
|
|
|
background-position: center;
|
|
|
background-repeat: no-repeat;
|
|
|
border-radius: 0;
|
|
|
border: 3px solid rgba(0, 212, 255, 0.8);
|
|
|
box-shadow: inset 0 0 100px rgba(0, 212, 255, 0.1), 0 0 50px rgba(0, 212, 255, 0.3);
|
|
|
}
|
|
|
|
|
|
.map::before {
|
|
|
content: '';
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
|
left: 0;
|
|
|
right: 0;
|
|
|
bottom: 0;
|
|
|
background: linear-gradient(45deg, rgba(0, 212, 255, 0.15) 0%, transparent 30%, rgba(0, 212, 255, 0.15) 70%, transparent 100%);
|
|
|
pointer-events: none;
|
|
|
animation: mapScan 4s linear infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes mapScan {
|
|
|
0% { background-position: -100% 0; }
|
|
|
100% { background-position: 100% 0; }
|
|
|
}
|
|
|
|
|
|
.map-legend {
|
|
|
position: absolute;
|
|
|
bottom: 1.5rem;
|
|
|
left: 1.5rem;
|
|
|
background: rgba(10, 14, 26, 0.98);
|
|
|
padding: 1.5rem;
|
|
|
border-radius: 12px;
|
|
|
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.6);
|
|
|
backdrop-filter: blur(25px);
|
|
|
border: 2px solid rgba(0, 212, 255, 0.6);
|
|
|
color: #ffffff;
|
|
|
font-size: 1rem;
|
|
|
}
|
|
|
|
|
|
.legend-item {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.8rem;
|
|
|
margin-bottom: 0.8rem;
|
|
|
font-size: 1rem;
|
|
|
font-weight: 500;
|
|
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
|
|
|
}
|
|
|
|
|
|
.legend-color {
|
|
|
width: 16px;
|
|
|
height: 16px;
|
|
|
border-radius: 50%;
|
|
|
box-shadow: 0 0 10px currentColor;
|
|
|
animation: legendPulse 2s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes legendPulse {
|
|
|
0%, 100% { transform: scale(1); }
|
|
|
50% { transform: scale(1.1); }
|
|
|
}
|
|
|
|
|
|
.legend-color.red { background: #e74c3c; }
|
|
|
.legend-color.blue { background: #3498db; }
|
|
|
.legend-color.green { background: #2ecc71; }
|
|
|
.legend-color.orange { background: #f39c12; }
|
|
|
.legend-color.purple { background: #9b59b6; }
|
|
|
|
|
|
/* 信息面板 - 大屏风格 */
|
|
|
.info-panel {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 1rem;
|
|
|
overflow-y: auto;
|
|
|
padding: 0;
|
|
|
margin: 0;
|
|
|
}
|
|
|
|
|
|
.panel-section {
|
|
|
background: linear-gradient(135deg, rgba(10, 14, 26, 0.95) 0%, rgba(26, 35, 50, 0.9) 100%);
|
|
|
border-radius: 0;
|
|
|
padding: 1.5rem;
|
|
|
box-shadow: inset 0 0 30px rgba(0, 212, 255, 0.1), 0 4px 20px rgba(0, 0, 0, 0.6);
|
|
|
border: 2px solid rgba(0, 212, 255, 0.5);
|
|
|
backdrop-filter: blur(20px);
|
|
|
margin: 0;
|
|
|
}
|
|
|
|
|
|
.panel-section h4 {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.8rem;
|
|
|
margin-bottom: 1.2rem;
|
|
|
color: #ffffff;
|
|
|
font-size: 1.3rem;
|
|
|
font-weight: 700;
|
|
|
text-shadow: 0 2px 8px rgba(0, 212, 255, 0.5);
|
|
|
background: linear-gradient(45deg, #00d4ff, #ffffff);
|
|
|
-webkit-background-clip: text;
|
|
|
-webkit-text-fill-color: transparent;
|
|
|
background-clip: text;
|
|
|
}
|
|
|
|
|
|
.panel-section h4 i {
|
|
|
font-size: 1.5rem;
|
|
|
color: #00d4ff;
|
|
|
filter: drop-shadow(0 0 8px rgba(0, 212, 255, 0.8));
|
|
|
animation: iconGlow 2s ease-in-out infinite alternate;
|
|
|
}
|
|
|
|
|
|
@keyframes iconGlow {
|
|
|
0% { filter: drop-shadow(0 0 8px rgba(0, 212, 255, 0.8)); }
|
|
|
100% { filter: drop-shadow(0 0 15px rgba(0, 212, 255, 1)); }
|
|
|
}
|
|
|
|
|
|
.status-grid {
|
|
|
display: grid;
|
|
|
grid-template-columns: 1fr 1fr;
|
|
|
gap: 1.2rem;
|
|
|
}
|
|
|
|
|
|
.status-card {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 1rem;
|
|
|
padding: 1.2rem;
|
|
|
background: linear-gradient(135deg, rgba(10, 14, 26, 0.9) 0%, rgba(26, 35, 50, 0.8) 100%);
|
|
|
border-radius: 12px;
|
|
|
transition: all 0.3s ease;
|
|
|
border: 2px solid rgba(0, 212, 255, 0.4);
|
|
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
|
|
|
}
|
|
|
|
|
|
.status-card:hover {
|
|
|
transform: translateY(-3px) scale(1.02);
|
|
|
border-color: rgba(0, 212, 255, 0.8);
|
|
|
box-shadow: 0 8px 30px rgba(0, 212, 255, 0.3);
|
|
|
}
|
|
|
|
|
|
.status-icon {
|
|
|
width: 50px;
|
|
|
height: 50px;
|
|
|
border-radius: 50%;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
color: white;
|
|
|
font-size: 1.3rem;
|
|
|
box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);
|
|
|
animation: statusIconPulse 3s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes statusIconPulse {
|
|
|
0%, 100% { transform: scale(1); }
|
|
|
50% { transform: scale(1.05); }
|
|
|
}
|
|
|
|
|
|
.status-icon.red { background: linear-gradient(135deg, #e74c3c, #c0392b); }
|
|
|
.status-icon.blue { background: linear-gradient(135deg, #3498db, #2980b9); }
|
|
|
.status-icon.green { background: linear-gradient(135deg, #2ecc71, #27ae60); }
|
|
|
.status-icon.purple { background: linear-gradient(135deg, #9b59b6, #8e44ad); }
|
|
|
|
|
|
.status-info {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
}
|
|
|
|
|
|
.status-number {
|
|
|
font-size: 1.8rem;
|
|
|
font-weight: 700;
|
|
|
color: #ffffff;
|
|
|
text-shadow: 0 2px 8px rgba(0, 212, 255, 0.5);
|
|
|
background: linear-gradient(45deg, #00d4ff, #ffffff);
|
|
|
-webkit-background-clip: text;
|
|
|
-webkit-text-fill-color: transparent;
|
|
|
background-clip: text;
|
|
|
}
|
|
|
|
|
|
.status-label {
|
|
|
font-size: 0.9rem;
|
|
|
color: #b0c4de;
|
|
|
font-weight: 500;
|
|
|
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
|
|
|
}
|
|
|
|
|
|
/* 视频监控 - 大屏风格 */
|
|
|
.video-grid {
|
|
|
display: grid;
|
|
|
grid-template-columns: 1fr 1fr;
|
|
|
gap: 1.2rem;
|
|
|
}
|
|
|
|
|
|
.video-item {
|
|
|
aspect-ratio: 16/9;
|
|
|
border-radius: 12px;
|
|
|
overflow: hidden;
|
|
|
position: relative;
|
|
|
border: 2px solid rgba(0, 212, 255, 0.4);
|
|
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.video-item:hover {
|
|
|
border-color: rgba(0, 212, 255, 0.8);
|
|
|
box-shadow: 0 8px 30px rgba(0, 212, 255, 0.3);
|
|
|
transform: scale(1.02);
|
|
|
}
|
|
|
|
|
|
.video-placeholder {
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
background: linear-gradient(135deg, #0a0e1a, #1a2332, #0a0e1a);
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
color: #ffffff;
|
|
|
gap: 0.8rem;
|
|
|
position: relative;
|
|
|
}
|
|
|
|
|
|
.video-placeholder::before {
|
|
|
content: '';
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
|
left: 0;
|
|
|
right: 0;
|
|
|
bottom: 0;
|
|
|
background: linear-gradient(45deg, rgba(0, 212, 255, 0.1) 0%, transparent 50%, rgba(0, 212, 255, 0.1) 100%);
|
|
|
animation: videoScan 3s linear infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes videoScan {
|
|
|
0% { background-position: -100% 0; }
|
|
|
100% { background-position: 100% 0; }
|
|
|
}
|
|
|
|
|
|
.video-placeholder i {
|
|
|
font-size: 2.5rem;
|
|
|
color: #00d4ff;
|
|
|
filter: drop-shadow(0 0 10px rgba(0, 212, 255, 0.8));
|
|
|
animation: videoIconPulse 2s ease-in-out infinite;
|
|
|
z-index: 1;
|
|
|
}
|
|
|
|
|
|
@keyframes videoIconPulse {
|
|
|
0%, 100% { transform: scale(1); }
|
|
|
50% { transform: scale(1.1); }
|
|
|
}
|
|
|
|
|
|
.video-placeholder span {
|
|
|
font-size: 1rem;
|
|
|
font-weight: 600;
|
|
|
text-shadow: 0 2px 8px rgba(0, 212, 255, 0.5);
|
|
|
z-index: 1;
|
|
|
}
|
|
|
|
|
|
/* 重点区域 - 大屏风格 */
|
|
|
.area-list {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 1rem;
|
|
|
}
|
|
|
|
|
|
.area-item {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
padding: 1.2rem;
|
|
|
border-radius: 12px;
|
|
|
border-left: 6px solid;
|
|
|
transition: all 0.3s ease;
|
|
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
|
|
|
}
|
|
|
|
|
|
.area-item:hover {
|
|
|
transform: translateX(5px);
|
|
|
box-shadow: 0 6px 25px rgba(0, 0, 0, 0.4);
|
|
|
}
|
|
|
|
|
|
.area-item.high {
|
|
|
background: linear-gradient(135deg, rgba(231, 76, 60, 0.2), rgba(231, 76, 60, 0.1));
|
|
|
border-left-color: #e74c3c;
|
|
|
box-shadow: 0 4px 15px rgba(231, 76, 60, 0.3);
|
|
|
}
|
|
|
|
|
|
.area-item.medium {
|
|
|
background: linear-gradient(135deg, rgba(243, 156, 18, 0.2), rgba(243, 156, 18, 0.1));
|
|
|
border-left-color: #f39c12;
|
|
|
box-shadow: 0 4px 15px rgba(243, 156, 18, 0.3);
|
|
|
}
|
|
|
|
|
|
.area-item.low {
|
|
|
background: linear-gradient(135deg, rgba(46, 204, 113, 0.2), rgba(46, 204, 113, 0.1));
|
|
|
border-left-color: #2ecc71;
|
|
|
box-shadow: 0 4px 15px rgba(46, 204, 113, 0.3);
|
|
|
}
|
|
|
|
|
|
.area-name {
|
|
|
font-weight: 600;
|
|
|
font-size: 1.1rem;
|
|
|
color: #ffffff;
|
|
|
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
|
|
|
}
|
|
|
|
|
|
.area-status {
|
|
|
font-size: 0.9rem;
|
|
|
font-weight: 600;
|
|
|
padding: 0.5rem 1rem;
|
|
|
border-radius: 20px;
|
|
|
color: white;
|
|
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
|
|
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
|
|
|
}
|
|
|
|
|
|
.area-item.high .area-status {
|
|
|
background: linear-gradient(135deg, #e74c3c, #c0392b);
|
|
|
box-shadow: 0 2px 10px rgba(231, 76, 60, 0.4);
|
|
|
}
|
|
|
.area-item.medium .area-status {
|
|
|
background: linear-gradient(135deg, #f39c12, #e67e22);
|
|
|
box-shadow: 0 2px 10px rgba(243, 156, 18, 0.4);
|
|
|
}
|
|
|
.area-item.low .area-status {
|
|
|
background: linear-gradient(135deg, #2ecc71, #27ae60);
|
|
|
box-shadow: 0 2px 10px rgba(46, 204, 113, 0.4);
|
|
|
}
|
|
|
|
|
|
/* 数据统计图表 - 大屏风格 */
|
|
|
.chart-container {
|
|
|
margin-bottom: 1.2rem;
|
|
|
background: linear-gradient(135deg, rgba(10, 14, 26, 0.8), rgba(26, 35, 50, 0.6));
|
|
|
border-radius: 12px;
|
|
|
padding: 1.5rem;
|
|
|
border: 2px solid rgba(0, 212, 255, 0.4);
|
|
|
box-shadow: inset 0 0 20px rgba(0, 212, 255, 0.1), 0 4px 20px rgba(0, 0, 0, 0.4);
|
|
|
backdrop-filter: blur(15px);
|
|
|
}
|
|
|
|
|
|
.chart-stats {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(3, 1fr);
|
|
|
gap: 1rem;
|
|
|
}
|
|
|
|
|
|
.stat-item {
|
|
|
text-align: center;
|
|
|
padding: 0.8rem;
|
|
|
background: rgba(26, 35, 50, 0.8);
|
|
|
border-radius: 6px;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.2);
|
|
|
}
|
|
|
|
|
|
.stat-label {
|
|
|
display: block;
|
|
|
font-size: 0.75rem;
|
|
|
color: #b0c4de;
|
|
|
margin-bottom: 0.3rem;
|
|
|
}
|
|
|
|
|
|
.stat-value {
|
|
|
display: block;
|
|
|
font-size: 1.1rem;
|
|
|
font-weight: 600;
|
|
|
color: #ffffff;
|
|
|
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
|
|
|
}
|
|
|
|
|
|
/* 环境监测 */
|
|
|
.env-grid {
|
|
|
display: grid;
|
|
|
grid-template-columns: 1fr 1fr;
|
|
|
gap: 1rem;
|
|
|
}
|
|
|
|
|
|
.env-card {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.8rem;
|
|
|
padding: 1rem;
|
|
|
background: rgba(15, 20, 25, 0.6);
|
|
|
border-radius: 8px;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.2);
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.env-card:hover {
|
|
|
transform: translateY(-2px);
|
|
|
border-color: rgba(0, 212, 255, 0.4);
|
|
|
}
|
|
|
|
|
|
.env-icon {
|
|
|
width: 35px;
|
|
|
height: 35px;
|
|
|
border-radius: 50%;
|
|
|
background: linear-gradient(135deg, #3498db, #2980b9);
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
color: white;
|
|
|
font-size: 0.9rem;
|
|
|
}
|
|
|
|
|
|
.env-info {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 0.2rem;
|
|
|
}
|
|
|
|
|
|
.env-label {
|
|
|
font-size: 0.75rem;
|
|
|
color: #b0c4de;
|
|
|
}
|
|
|
|
|
|
.env-value {
|
|
|
font-size: 1rem;
|
|
|
font-weight: 600;
|
|
|
color: #ffffff;
|
|
|
}
|
|
|
|
|
|
.env-value.good {
|
|
|
color: #2ecc71;
|
|
|
}
|
|
|
|
|
|
.env-number {
|
|
|
font-size: 0.7rem;
|
|
|
color: #95a5a6;
|
|
|
}
|
|
|
|
|
|
/* 设备运行状态 */
|
|
|
.device-status-list {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 1rem;
|
|
|
}
|
|
|
|
|
|
.device-status-item {
|
|
|
padding: 1rem;
|
|
|
background: rgba(15, 20, 25, 0.6);
|
|
|
border-radius: 8px;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.2);
|
|
|
}
|
|
|
|
|
|
.device-info {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
margin-bottom: 0.8rem;
|
|
|
}
|
|
|
|
|
|
.device-name {
|
|
|
font-weight: 600;
|
|
|
color: #ffffff;
|
|
|
font-size: 0.9rem;
|
|
|
}
|
|
|
|
|
|
.device-location {
|
|
|
font-size: 0.75rem;
|
|
|
color: #b0c4de;
|
|
|
}
|
|
|
|
|
|
.device-metrics {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 0.6rem;
|
|
|
}
|
|
|
|
|
|
.metric {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.8rem;
|
|
|
}
|
|
|
|
|
|
.metric-label {
|
|
|
font-size: 0.75rem;
|
|
|
color: #b0c4de;
|
|
|
min-width: 40px;
|
|
|
}
|
|
|
|
|
|
.progress-bar {
|
|
|
flex: 1;
|
|
|
height: 6px;
|
|
|
background: rgba(255, 255, 255, 0.1);
|
|
|
border-radius: 3px;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
|
|
|
.progress-fill {
|
|
|
height: 100%;
|
|
|
background: linear-gradient(90deg, #2ecc71, #27ae60);
|
|
|
border-radius: 3px;
|
|
|
transition: width 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.metric-value {
|
|
|
font-size: 0.75rem;
|
|
|
color: #ffffff;
|
|
|
min-width: 35px;
|
|
|
text-align: right;
|
|
|
}
|
|
|
|
|
|
.signal-bars {
|
|
|
display: flex;
|
|
|
gap: 2px;
|
|
|
align-items: end;
|
|
|
}
|
|
|
|
|
|
.bar {
|
|
|
width: 3px;
|
|
|
background: rgba(255, 255, 255, 0.2);
|
|
|
border-radius: 1px;
|
|
|
transition: background-color 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.bar:nth-child(1) { height: 8px; }
|
|
|
.bar:nth-child(2) { height: 10px; }
|
|
|
.bar:nth-child(3) { height: 12px; }
|
|
|
.bar:nth-child(4) { height: 14px; }
|
|
|
.bar:nth-child(5) { height: 16px; }
|
|
|
|
|
|
.bar.active {
|
|
|
background: #2ecc71;
|
|
|
}
|
|
|
|
|
|
.status-indicator {
|
|
|
padding: 0.2rem 0.6rem;
|
|
|
border-radius: 12px;
|
|
|
font-size: 0.7rem;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
.status-indicator.online {
|
|
|
background: rgba(46, 204, 113, 0.2);
|
|
|
color: #2ecc71;
|
|
|
border: 1px solid rgba(46, 204, 113, 0.3);
|
|
|
}
|
|
|
|
|
|
/* 实时数据趋势 */
|
|
|
.trend-chart-container {
|
|
|
margin-bottom: 1rem;
|
|
|
background: rgba(15, 20, 25, 0.6);
|
|
|
border-radius: 8px;
|
|
|
padding: 1rem;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.2);
|
|
|
}
|
|
|
|
|
|
.trend-legend {
|
|
|
display: flex;
|
|
|
justify-content: space-around;
|
|
|
gap: 0.5rem;
|
|
|
}
|
|
|
|
|
|
.trend-legend .legend-item {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.3rem;
|
|
|
font-size: 0.7rem;
|
|
|
color: #b0c4de;
|
|
|
}
|
|
|
|
|
|
.legend-dot {
|
|
|
width: 8px;
|
|
|
height: 8px;
|
|
|
border-radius: 50%;
|
|
|
}
|
|
|
|
|
|
.legend-dot.red { background: #e74c3c; }
|
|
|
.legend-dot.blue { background: #3498db; }
|
|
|
.legend-dot.green { background: #2ecc71; }
|
|
|
|
|
|
/* 工单系统 */
|
|
|
.workorder-layout {
|
|
|
background: rgba(255, 255, 255, 0.95);
|
|
|
border-radius: 15px;
|
|
|
box-shadow: 0 4px 20px rgba(0,0,0,0.1);
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
|
|
|
.workorder-header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
padding: 1.2rem 1.5rem;
|
|
|
background: linear-gradient(135deg, #3498db, #2980b9);
|
|
|
color: white;
|
|
|
}
|
|
|
|
|
|
.workorder-header h3 {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.5rem;
|
|
|
margin: 0;
|
|
|
}
|
|
|
|
|
|
.workorder-actions {
|
|
|
display: flex;
|
|
|
gap: 1rem;
|
|
|
}
|
|
|
|
|
|
.btn {
|
|
|
padding: 0.8rem 1.5rem;
|
|
|
border: none;
|
|
|
border-radius: 8px;
|
|
|
cursor: pointer;
|
|
|
font-size: 0.9rem;
|
|
|
transition: all 0.3s ease;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.5rem;
|
|
|
}
|
|
|
|
|
|
.btn-primary {
|
|
|
background: linear-gradient(135deg, #2ecc71, #27ae60);
|
|
|
color: white;
|
|
|
}
|
|
|
|
|
|
.btn-secondary {
|
|
|
background: rgba(255, 255, 255, 0.2);
|
|
|
color: white;
|
|
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
|
|
}
|
|
|
|
|
|
.btn:hover {
|
|
|
transform: translateY(-2px);
|
|
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
|
|
}
|
|
|
|
|
|
/* 工单统计 */
|
|
|
.workorder-stats {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(4, 1fr);
|
|
|
gap: 1rem;
|
|
|
padding: 1.5rem;
|
|
|
background: linear-gradient(135deg, rgba(15, 20, 25, 0.9) 0%, rgba(26, 35, 50, 0.8) 100%);
|
|
|
}
|
|
|
|
|
|
.stat-card {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 1rem;
|
|
|
padding: 1.2rem;
|
|
|
background: linear-gradient(135deg, rgba(26, 35, 50, 0.9) 0%, rgba(30, 60, 114, 0.8) 100%);
|
|
|
border-radius: 12px;
|
|
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
|
|
|
transition: all 0.3s ease;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.3);
|
|
|
backdrop-filter: blur(10px);
|
|
|
}
|
|
|
|
|
|
.stat-card:hover {
|
|
|
transform: translateY(-5px);
|
|
|
}
|
|
|
|
|
|
.stat-icon {
|
|
|
width: 60px;
|
|
|
height: 60px;
|
|
|
border-radius: 50%;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
color: white;
|
|
|
font-size: 1.5rem;
|
|
|
}
|
|
|
|
|
|
.stat-icon.pending { background: linear-gradient(135deg, #f39c12, #e67e22); }
|
|
|
.stat-icon.processing { background: linear-gradient(135deg, #3498db, #2980b9); }
|
|
|
.stat-icon.completed { background: linear-gradient(135deg, #2ecc71, #27ae60); }
|
|
|
.stat-icon.rate { background: linear-gradient(135deg, #9b59b6, #8e44ad); }
|
|
|
|
|
|
.stat-info {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
}
|
|
|
|
|
|
.stat-number {
|
|
|
font-size: 1.8rem;
|
|
|
font-weight: 600;
|
|
|
color: #ffffff;
|
|
|
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
|
|
|
}
|
|
|
|
|
|
.stat-label {
|
|
|
font-size: 0.85rem;
|
|
|
color: #b0c4de;
|
|
|
}
|
|
|
|
|
|
/* 工单表格 */
|
|
|
.workorder-table {
|
|
|
padding: 0 2rem 2rem;
|
|
|
}
|
|
|
|
|
|
.table-header {
|
|
|
margin-bottom: 1.5rem;
|
|
|
}
|
|
|
|
|
|
.filter-bar {
|
|
|
display: flex;
|
|
|
gap: 1rem;
|
|
|
align-items: center;
|
|
|
}
|
|
|
|
|
|
.filter-select, .search-input {
|
|
|
padding: 0.8rem 1rem;
|
|
|
border: 1px solid #ddd;
|
|
|
border-radius: 8px;
|
|
|
font-size: 0.9rem;
|
|
|
transition: border-color 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.filter-select:focus, .search-input:focus {
|
|
|
outline: none;
|
|
|
border-color: #4a90e2;
|
|
|
}
|
|
|
|
|
|
.search-input {
|
|
|
flex: 1;
|
|
|
max-width: 300px;
|
|
|
}
|
|
|
|
|
|
.workorder-list {
|
|
|
width: 100%;
|
|
|
border-collapse: collapse;
|
|
|
background: rgba(26, 35, 50, 0.8);
|
|
|
border-radius: 8px;
|
|
|
overflow: hidden;
|
|
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
|
|
|
border: 1px solid rgba(0, 212, 255, 0.2);
|
|
|
}
|
|
|
|
|
|
.workorder-list th,
|
|
|
.workorder-list td {
|
|
|
padding: 0.8rem;
|
|
|
text-align: left;
|
|
|
border-bottom: 1px solid rgba(0, 212, 255, 0.2);
|
|
|
}
|
|
|
|
|
|
.workorder-list th {
|
|
|
background: linear-gradient(135deg, rgba(30, 60, 114, 0.9), rgba(42, 82, 152, 0.9));
|
|
|
font-weight: 600;
|
|
|
color: #ffffff;
|
|
|
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
|
|
|
}
|
|
|
|
|
|
.workorder-list td {
|
|
|
color: #e0e6ed;
|
|
|
}
|
|
|
|
|
|
.workorder-list tr:hover {
|
|
|
background: rgba(0, 212, 255, 0.1);
|
|
|
}
|
|
|
|
|
|
/* 设备管理 */
|
|
|
.device-layout {
|
|
|
background: linear-gradient(135deg, rgba(26, 35, 50, 0.9) 0%, rgba(30, 60, 114, 0.8) 100%);
|
|
|
border-radius: 15px;
|
|
|
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
|
|
|
overflow: hidden;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.3);
|
|
|
backdrop-filter: blur(15px);
|
|
|
}
|
|
|
|
|
|
.device-header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
padding: 1.2rem 1.5rem;
|
|
|
background: linear-gradient(135deg, #1e3c72, #2a5298);
|
|
|
color: white;
|
|
|
border-bottom: 2px solid rgba(0, 212, 255, 0.4);
|
|
|
}
|
|
|
|
|
|
.device-categories {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(5, 1fr);
|
|
|
gap: 0.8rem;
|
|
|
padding: 1.5rem;
|
|
|
background: linear-gradient(135deg, rgba(15, 20, 25, 0.9) 0%, rgba(26, 35, 50, 0.8) 100%);
|
|
|
}
|
|
|
|
|
|
.category-card {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.8rem;
|
|
|
padding: 1rem;
|
|
|
background: linear-gradient(135deg, rgba(26, 35, 50, 0.9) 0%, rgba(30, 60, 114, 0.8) 100%);
|
|
|
border-radius: 12px;
|
|
|
cursor: pointer;
|
|
|
transition: all 0.3s ease;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.3);
|
|
|
backdrop-filter: blur(10px);
|
|
|
color: #e0e6ed;
|
|
|
}
|
|
|
|
|
|
.category-card:hover {
|
|
|
transform: translateY(-3px);
|
|
|
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
|
|
|
}
|
|
|
|
|
|
.category-card.active {
|
|
|
border-color: rgba(0, 212, 255, 0.8);
|
|
|
background: linear-gradient(135deg, #1e3c72, #2a5298);
|
|
|
color: white;
|
|
|
box-shadow: 0 4px 16px rgba(0, 212, 255, 0.3);
|
|
|
}
|
|
|
|
|
|
.category-icon {
|
|
|
width: 40px;
|
|
|
height: 40px;
|
|
|
border-radius: 50%;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
background: rgba(0, 212, 255, 0.2);
|
|
|
color: #00d4ff;
|
|
|
font-size: 1rem;
|
|
|
}
|
|
|
|
|
|
.category-card.active .category-icon {
|
|
|
background: rgba(255, 255, 255, 0.2);
|
|
|
color: white;
|
|
|
}
|
|
|
|
|
|
.category-info {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
}
|
|
|
|
|
|
.category-name {
|
|
|
font-weight: 600;
|
|
|
margin-bottom: 0.2rem;
|
|
|
color: #2c3e50;
|
|
|
}
|
|
|
|
|
|
.category-count {
|
|
|
font-size: 0.8rem;
|
|
|
opacity: 0.7;
|
|
|
color: #7f8c8d;
|
|
|
}
|
|
|
|
|
|
.device-grid {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
|
|
gap: 1.5rem;
|
|
|
padding: 2rem;
|
|
|
}
|
|
|
|
|
|
/* 预警系统 */
|
|
|
.warning-layout {
|
|
|
background: linear-gradient(135deg, rgba(26, 35, 50, 0.9) 0%, rgba(30, 60, 114, 0.8) 100%);
|
|
|
border-radius: 15px;
|
|
|
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
|
|
|
overflow: hidden;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.3);
|
|
|
}
|
|
|
|
|
|
.warning-header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
padding: 1.5rem 2rem;
|
|
|
background: linear-gradient(135deg, #e74c3c, #c0392b);
|
|
|
color: white;
|
|
|
}
|
|
|
|
|
|
.warning-actions {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 1rem;
|
|
|
}
|
|
|
|
|
|
.warning-overview {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(4, 1fr);
|
|
|
gap: 1rem;
|
|
|
padding: 1.5rem;
|
|
|
background: linear-gradient(135deg, rgba(15, 20, 25, 0.9) 0%, rgba(26, 35, 50, 0.8) 100%);
|
|
|
}
|
|
|
|
|
|
.warning-card {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.8rem;
|
|
|
padding: 1.2rem;
|
|
|
background: linear-gradient(135deg, rgba(26, 35, 50, 0.9) 0%, rgba(30, 60, 114, 0.8) 100%);
|
|
|
border-radius: 12px;
|
|
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
|
|
|
transition: all 0.3s ease;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.3);
|
|
|
}
|
|
|
|
|
|
.warning-card:hover {
|
|
|
transform: translateY(-5px);
|
|
|
}
|
|
|
|
|
|
.warning-icon {
|
|
|
width: 50px;
|
|
|
height: 50px;
|
|
|
border-radius: 50%;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
color: white;
|
|
|
font-size: 1.2rem;
|
|
|
}
|
|
|
|
|
|
.warning-card.critical .warning-icon { background: linear-gradient(135deg, #e74c3c, #c0392b); }
|
|
|
.warning-card.high .warning-icon { background: linear-gradient(135deg, #f39c12, #e67e22); }
|
|
|
.warning-card.medium .warning-icon { background: linear-gradient(135deg, #f1c40f, #f39c12); }
|
|
|
.warning-card.low .warning-icon { background: linear-gradient(135deg, #3498db, #2980b9); }
|
|
|
|
|
|
.warning-info {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
}
|
|
|
|
|
|
.warning-number {
|
|
|
font-size: 1.8rem;
|
|
|
font-weight: 600;
|
|
|
color: #ffffff;
|
|
|
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
|
|
|
}
|
|
|
|
|
|
.warning-label {
|
|
|
font-size: 0.85rem;
|
|
|
color: #b0c4de;
|
|
|
}
|
|
|
|
|
|
.warning-types {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(3, 1fr);
|
|
|
gap: 1rem;
|
|
|
padding: 1.5rem;
|
|
|
}
|
|
|
|
|
|
.warning-type-card {
|
|
|
background: linear-gradient(135deg, rgba(26, 35, 50, 0.9) 0%, rgba(30, 60, 114, 0.8) 100%);
|
|
|
border-radius: 12px;
|
|
|
padding: 1.2rem;
|
|
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
|
|
|
border: 1px solid rgba(0, 212, 255, 0.3);
|
|
|
backdrop-filter: blur(10px);
|
|
|
}
|
|
|
|
|
|
.warning-type-card h4 {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.5rem;
|
|
|
margin-bottom: 1rem;
|
|
|
color: #ffffff;
|
|
|
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
|
|
|
}
|
|
|
|
|
|
/* 统计分析 */
|
|
|
.statistics-layout {
|
|
|
background: linear-gradient(135deg, rgba(26, 35, 50, 0.9) 0%, rgba(30, 60, 114, 0.8) 100%);
|
|
|
border-radius: 15px;
|
|
|
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
|
|
|
overflow: hidden;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.3);
|
|
|
backdrop-filter: blur(15px);
|
|
|
}
|
|
|
|
|
|
.statistics-header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
padding: 1.5rem 2rem;
|
|
|
background: linear-gradient(135deg, #9b59b6, #8e44ad);
|
|
|
color: white;
|
|
|
}
|
|
|
|
|
|
.statistics-actions {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 1rem;
|
|
|
}
|
|
|
|
|
|
.time-range {
|
|
|
padding: 0.5rem 1rem;
|
|
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
|
|
background: rgba(255, 255, 255, 0.1);
|
|
|
color: white;
|
|
|
border-radius: 6px;
|
|
|
margin-right: 1rem;
|
|
|
}
|
|
|
|
|
|
.kpi-cards {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(4, 1fr);
|
|
|
gap: 1rem;
|
|
|
padding: 1.5rem;
|
|
|
background: linear-gradient(135deg, rgba(15, 20, 25, 0.9) 0%, rgba(26, 35, 50, 0.8) 100%);
|
|
|
}
|
|
|
|
|
|
.kpi-card {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.8rem;
|
|
|
padding: 1.2rem;
|
|
|
background: linear-gradient(135deg, rgba(26, 35, 50, 0.9) 0%, rgba(30, 60, 114, 0.8) 100%);
|
|
|
border-radius: 12px;
|
|
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
|
|
|
transition: all 0.3s ease;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.3);
|
|
|
backdrop-filter: blur(10px);
|
|
|
}
|
|
|
|
|
|
.kpi-card:hover {
|
|
|
transform: translateY(-5px);
|
|
|
}
|
|
|
|
|
|
.kpi-icon {
|
|
|
width: 50px;
|
|
|
height: 50px;
|
|
|
border-radius: 50%;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
background: linear-gradient(135deg, #9b59b6, #8e44ad);
|
|
|
color: white;
|
|
|
font-size: 1.2rem;
|
|
|
}
|
|
|
|
|
|
.kpi-info {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
}
|
|
|
|
|
|
.kpi-number {
|
|
|
font-size: 1.8rem;
|
|
|
font-weight: 600;
|
|
|
color: #ffffff;
|
|
|
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
|
|
|
}
|
|
|
|
|
|
.kpi-label {
|
|
|
font-size: 0.85rem;
|
|
|
color: #b0c4de;
|
|
|
margin-bottom: 0.2rem;
|
|
|
}
|
|
|
|
|
|
.kpi-trend {
|
|
|
font-size: 0.8rem;
|
|
|
font-weight: 600;
|
|
|
}
|
|
|
|
|
|
.kpi-trend.up { color: #2ecc71; }
|
|
|
.kpi-trend.down { color: #e74c3c; }
|
|
|
|
|
|
.charts-container {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(2, 1fr);
|
|
|
gap: 1rem;
|
|
|
padding: 1.5rem;
|
|
|
}
|
|
|
|
|
|
.chart-card {
|
|
|
background: white;
|
|
|
border-radius: 8px;
|
|
|
padding: 1.5rem;
|
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.chart-placeholder {
|
|
|
height: 280px;
|
|
|
background: rgba(15, 20, 25, 0.6);
|
|
|
border-radius: 8px;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.2);
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
color: #7f8c8d;
|
|
|
}
|
|
|
|
|
|
/* 模态框 */
|
|
|
.modal {
|
|
|
display: none;
|
|
|
position: fixed;
|
|
|
z-index: 2000;
|
|
|
left: 0;
|
|
|
top: 0;
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
background-color: rgba(0, 0, 0, 0.5);
|
|
|
backdrop-filter: blur(5px);
|
|
|
}
|
|
|
|
|
|
.modal-content {
|
|
|
background-color: white;
|
|
|
margin: 5% auto;
|
|
|
padding: 2rem;
|
|
|
border-radius: 15px;
|
|
|
width: 80%;
|
|
|
max-width: 800px;
|
|
|
position: relative;
|
|
|
animation: slideIn 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.close {
|
|
|
position: absolute;
|
|
|
right: 1rem;
|
|
|
top: 1rem;
|
|
|
font-size: 2rem;
|
|
|
cursor: pointer;
|
|
|
color: #aaa;
|
|
|
transition: color 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.close:hover {
|
|
|
color: #333;
|
|
|
}
|
|
|
|
|
|
/* 动画 */
|
|
|
@keyframes fadeIn {
|
|
|
from { opacity: 0; transform: translateY(20px); }
|
|
|
to { opacity: 1; transform: translateY(0); }
|
|
|
}
|
|
|
|
|
|
@keyframes slideIn {
|
|
|
from { transform: translateY(-50px); opacity: 0; }
|
|
|
to { transform: translateY(0); opacity: 1; }
|
|
|
}
|
|
|
|
|
|
@keyframes pulse {
|
|
|
0%, 100% { transform: scale(1); }
|
|
|
50% { transform: scale(1.1); }
|
|
|
}
|
|
|
|
|
|
/* 设备管理样式 */
|
|
|
.device-categories {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
|
gap: 1rem;
|
|
|
margin-bottom: 2rem;
|
|
|
}
|
|
|
|
|
|
.category-card {
|
|
|
background: white;
|
|
|
border-radius: 8px;
|
|
|
padding: 1.5rem;
|
|
|
text-align: center;
|
|
|
cursor: pointer;
|
|
|
transition: all 0.3s ease;
|
|
|
border: 2px solid transparent;
|
|
|
}
|
|
|
|
|
|
.category-card:hover {
|
|
|
transform: translateY(-2px);
|
|
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
|
|
|
}
|
|
|
|
|
|
.category-card.active {
|
|
|
border-color: #4a90e2;
|
|
|
background: #f8fbff;
|
|
|
}
|
|
|
|
|
|
.category-icon {
|
|
|
font-size: 2rem;
|
|
|
color: #4a90e2;
|
|
|
margin-bottom: 0.5rem;
|
|
|
}
|
|
|
|
|
|
.category-name {
|
|
|
font-weight: 600;
|
|
|
margin-bottom: 0.25rem;
|
|
|
}
|
|
|
|
|
|
.category-count {
|
|
|
color: #666;
|
|
|
font-size: 0.875rem;
|
|
|
}
|
|
|
|
|
|
.device-grid {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
|
|
gap: 1.5rem;
|
|
|
}
|
|
|
|
|
|
.device-card {
|
|
|
background: linear-gradient(135deg, rgba(30, 60, 114, 0.9) 0%, rgba(42, 82, 152, 0.7) 100%);
|
|
|
border-radius: 10px;
|
|
|
padding: 1.2rem;
|
|
|
box-shadow: 0 6px 24px rgba(0, 0, 0, 0.4);
|
|
|
transition: all 0.3s ease;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.3);
|
|
|
backdrop-filter: blur(15px);
|
|
|
position: relative;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
|
|
|
.device-card::before {
|
|
|
content: '';
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
|
left: 0;
|
|
|
right: 0;
|
|
|
height: 2px;
|
|
|
background: linear-gradient(90deg, #00d4ff, #0099cc);
|
|
|
}
|
|
|
|
|
|
.device-card:hover {
|
|
|
transform: translateY(-3px);
|
|
|
box-shadow: 0 10px 40px rgba(0, 212, 255, 0.2);
|
|
|
border-color: rgba(0, 212, 255, 0.5);
|
|
|
}
|
|
|
|
|
|
.device-header {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
margin-bottom: 1rem;
|
|
|
}
|
|
|
|
|
|
.device-icon {
|
|
|
width: 40px;
|
|
|
height: 40px;
|
|
|
background: #f0f8ff;
|
|
|
border-radius: 8px;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
margin-right: 1rem;
|
|
|
}
|
|
|
|
|
|
.device-icon i {
|
|
|
font-size: 1.25rem;
|
|
|
color: #4a90e2;
|
|
|
}
|
|
|
|
|
|
.device-info {
|
|
|
flex: 1;
|
|
|
}
|
|
|
|
|
|
.device-info h4 {
|
|
|
margin: 0 0 0.25rem 0;
|
|
|
font-size: 1rem;
|
|
|
font-weight: 600;
|
|
|
color: #ffffff;
|
|
|
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
|
|
|
}
|
|
|
|
|
|
.device-model {
|
|
|
color: #b0c4de;
|
|
|
font-size: 0.875rem;
|
|
|
opacity: 0.9;
|
|
|
}
|
|
|
|
|
|
.device-status {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.5rem;
|
|
|
}
|
|
|
|
|
|
.status-indicator {
|
|
|
width: 10px;
|
|
|
height: 10px;
|
|
|
border-radius: 50%;
|
|
|
display: inline-block;
|
|
|
animation: pulse 2s infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes pulse {
|
|
|
0%, 100% { opacity: 1; transform: scale(1); }
|
|
|
50% { opacity: 0.7; transform: scale(1.1); }
|
|
|
}
|
|
|
|
|
|
.status-indicator.online {
|
|
|
background: #00ff88;
|
|
|
box-shadow: 0 0 15px rgba(0, 255, 136, 0.6);
|
|
|
}
|
|
|
|
|
|
.status-indicator.offline {
|
|
|
background: #ff4757;
|
|
|
box-shadow: 0 0 15px rgba(255, 71, 87, 0.6);
|
|
|
}
|
|
|
|
|
|
.status-indicator.warning {
|
|
|
background: #ffa502;
|
|
|
box-shadow: 0 0 15px rgba(255, 165, 2, 0.6);
|
|
|
}
|
|
|
|
|
|
.status-indicator.working {
|
|
|
background: #00d4ff;
|
|
|
box-shadow: 0 0 15px rgba(0, 212, 255, 0.6);
|
|
|
}
|
|
|
|
|
|
.status-indicator.idle {
|
|
|
background: #a4b0be;
|
|
|
box-shadow: 0 0 15px rgba(164, 176, 190, 0.6);
|
|
|
}
|
|
|
|
|
|
.status-indicator.flying {
|
|
|
background: #c44569;
|
|
|
box-shadow: 0 0 15px rgba(196, 69, 105, 0.6);
|
|
|
}
|
|
|
|
|
|
.status-indicator.charging {
|
|
|
background: #f1c40f;
|
|
|
}
|
|
|
|
|
|
.status-text {
|
|
|
font-size: 0.875rem;
|
|
|
color: #666;
|
|
|
}
|
|
|
|
|
|
.device-body {
|
|
|
margin-bottom: 1rem;
|
|
|
}
|
|
|
|
|
|
.device-detail {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
margin-bottom: 0.75rem;
|
|
|
}
|
|
|
|
|
|
.detail-label {
|
|
|
font-size: 0.875rem;
|
|
|
color: #b0c4de;
|
|
|
}
|
|
|
|
|
|
.detail-value {
|
|
|
font-size: 0.875rem;
|
|
|
font-weight: 500;
|
|
|
color: #ffffff;
|
|
|
}
|
|
|
|
|
|
.progress {
|
|
|
width: 60px;
|
|
|
height: 4px;
|
|
|
background: #e9ecef;
|
|
|
border-radius: 2px;
|
|
|
overflow: hidden;
|
|
|
margin-left: 0.5rem;
|
|
|
}
|
|
|
|
|
|
.progress-bar {
|
|
|
height: 100%;
|
|
|
background: linear-gradient(90deg, #2ecc71, #27ae60);
|
|
|
transition: width 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.device-actions {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 1rem;
|
|
|
}
|
|
|
|
|
|
.device-actions .btn {
|
|
|
flex: 1;
|
|
|
padding: 0.5rem;
|
|
|
font-size: 0.875rem;
|
|
|
}
|
|
|
|
|
|
/* 预警系统样式 */
|
|
|
.warning-grid {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
|
|
gap: 1.5rem;
|
|
|
margin-bottom: 2rem;
|
|
|
}
|
|
|
|
|
|
.warning-card {
|
|
|
background: linear-gradient(135deg, rgba(26, 35, 50, 0.9) 0%, rgba(30, 60, 114, 0.8) 100%);
|
|
|
border-radius: 8px;
|
|
|
padding: 1.5rem;
|
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
|
border: 1px solid rgba(0, 212, 255, 0.3);
|
|
|
}
|
|
|
|
|
|
.warning-card h3 {
|
|
|
margin: 0 0 1rem 0;
|
|
|
font-size: 1.125rem;
|
|
|
color: #ffffff;
|
|
|
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
|
|
|
}
|
|
|
|
|
|
.weather-grid {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(3, 1fr);
|
|
|
gap: 1rem;
|
|
|
}
|
|
|
|
|
|
.weather-item {
|
|
|
text-align: center;
|
|
|
padding: 1rem;
|
|
|
background: rgba(15, 20, 25, 0.6);
|
|
|
border-radius: 6px;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.2);
|
|
|
}
|
|
|
|
|
|
.weather-label {
|
|
|
font-size: 0.875rem;
|
|
|
color: #b0c4de;
|
|
|
margin-bottom: 0.5rem;
|
|
|
}
|
|
|
|
|
|
.weather-value {
|
|
|
font-size: 1.125rem;
|
|
|
font-weight: 600;
|
|
|
color: #ffffff;
|
|
|
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
|
|
|
}
|
|
|
|
|
|
.alert-list {
|
|
|
max-height: 300px;
|
|
|
overflow-y: auto;
|
|
|
}
|
|
|
|
|
|
.alert-item {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
padding: 0.75rem;
|
|
|
border-left: 4px solid #e74c3c;
|
|
|
background: #fff5f5;
|
|
|
border-radius: 4px;
|
|
|
margin-bottom: 0.75rem;
|
|
|
}
|
|
|
|
|
|
.alert-item.medium {
|
|
|
border-left-color: #f39c12;
|
|
|
background: #fffbf0;
|
|
|
}
|
|
|
|
|
|
.alert-item.low {
|
|
|
border-left-color: #f1c40f;
|
|
|
background: #fffef0;
|
|
|
}
|
|
|
|
|
|
.alert-icon {
|
|
|
margin-right: 0.75rem;
|
|
|
font-size: 1.125rem;
|
|
|
}
|
|
|
|
|
|
.alert-content {
|
|
|
flex: 1;
|
|
|
}
|
|
|
|
|
|
.alert-title {
|
|
|
font-weight: 600;
|
|
|
margin-bottom: 0.25rem;
|
|
|
}
|
|
|
|
|
|
.alert-time {
|
|
|
font-size: 0.875rem;
|
|
|
color: #666;
|
|
|
}
|
|
|
|
|
|
/* 统计分析样式 */
|
|
|
.stats-overview {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
|
gap: 20px;
|
|
|
margin-bottom: 30px;
|
|
|
background-image: url('images/chart-bg.svg');
|
|
|
background-size: cover;
|
|
|
background-position: center;
|
|
|
background-repeat: no-repeat;
|
|
|
padding: 20px;
|
|
|
border-radius: 8px;
|
|
|
}
|
|
|
|
|
|
.stat-card {
|
|
|
background: white;
|
|
|
border-radius: 8px;
|
|
|
padding: 1.5rem;
|
|
|
text-align: center;
|
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
|
}
|
|
|
|
|
|
.stat-value {
|
|
|
font-size: 2rem;
|
|
|
font-weight: 700;
|
|
|
color: #4a90e2;
|
|
|
margin-bottom: 0.5rem;
|
|
|
}
|
|
|
|
|
|
.stat-label {
|
|
|
color: #666;
|
|
|
font-size: 0.875rem;
|
|
|
}
|
|
|
|
|
|
.charts-grid {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
|
|
|
gap: 1.5rem;
|
|
|
}
|
|
|
|
|
|
.chart-card {
|
|
|
background: white;
|
|
|
border-radius: 8px;
|
|
|
padding: 1.5rem;
|
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
|
}
|
|
|
|
|
|
.chart-card h3,
|
|
|
.chart-card h4 {
|
|
|
margin: 0 0 1rem 0;
|
|
|
font-size: 1.125rem;
|
|
|
color: #333;
|
|
|
font-weight: 600;
|
|
|
}
|
|
|
|
|
|
.chart-container {
|
|
|
position: relative;
|
|
|
height: 300px;
|
|
|
}
|
|
|
|
|
|
/* 响应式设计 */
|
|
|
@media (max-width: 1200px) {
|
|
|
.monitor-layout {
|
|
|
grid-template-columns: 1fr;
|
|
|
grid-template-rows: 1fr auto;
|
|
|
}
|
|
|
|
|
|
.info-panel {
|
|
|
max-height: 400px;
|
|
|
}
|
|
|
|
|
|
.device-categories {
|
|
|
grid-template-columns: repeat(3, 1fr);
|
|
|
}
|
|
|
|
|
|
.charts-container {
|
|
|
grid-template-columns: 1fr;
|
|
|
}
|
|
|
|
|
|
.charts-grid {
|
|
|
grid-template-columns: 1fr;
|
|
|
}
|
|
|
|
|
|
.modal-content {
|
|
|
width: 95%;
|
|
|
margin: 2% auto;
|
|
|
}
|
|
|
|
|
|
.schedule-item {
|
|
|
grid-template-columns: 1fr;
|
|
|
gap: 0.5rem;
|
|
|
text-align: center;
|
|
|
}
|
|
|
|
|
|
.history-item {
|
|
|
grid-template-columns: 1fr;
|
|
|
gap: 0.5rem;
|
|
|
text-align: left;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* 模态框样式 */
|
|
|
.modal {
|
|
|
display: none;
|
|
|
position: fixed;
|
|
|
z-index: 2000;
|
|
|
left: 0;
|
|
|
top: 0;
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
background-color: rgba(0, 0, 0, 0.5);
|
|
|
animation: fadeIn 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.modal-content {
|
|
|
background-color: white;
|
|
|
margin: 5% auto;
|
|
|
padding: 0;
|
|
|
border-radius: 8px;
|
|
|
width: 90%;
|
|
|
max-width: 600px;
|
|
|
max-height: 80vh;
|
|
|
overflow-y: auto;
|
|
|
animation: slideIn 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.modal-header {
|
|
|
padding: 1.5rem;
|
|
|
border-bottom: 1px solid #e9ecef;
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
}
|
|
|
|
|
|
.modal-header h2 {
|
|
|
margin: 0;
|
|
|
font-size: 1.25rem;
|
|
|
}
|
|
|
|
|
|
.close {
|
|
|
background: none;
|
|
|
border: none;
|
|
|
font-size: 1.5rem;
|
|
|
cursor: pointer;
|
|
|
color: #666;
|
|
|
padding: 0;
|
|
|
width: 30px;
|
|
|
height: 30px;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
border-radius: 4px;
|
|
|
transition: all 0.2s ease;
|
|
|
}
|
|
|
|
|
|
.close:hover {
|
|
|
background: #f8f9fa;
|
|
|
color: #333;
|
|
|
}
|
|
|
|
|
|
.modal-body {
|
|
|
padding: 1.5rem;
|
|
|
}
|
|
|
|
|
|
.form-group {
|
|
|
margin-bottom: 1rem;
|
|
|
}
|
|
|
|
|
|
.form-group label {
|
|
|
display: block;
|
|
|
margin-bottom: 0.5rem;
|
|
|
font-weight: 500;
|
|
|
color: #333;
|
|
|
}
|
|
|
|
|
|
.form-group input,
|
|
|
.form-group select,
|
|
|
.form-group textarea {
|
|
|
width: 100%;
|
|
|
padding: 0.75rem;
|
|
|
border: 1px solid #ddd;
|
|
|
border-radius: 4px;
|
|
|
font-size: 0.875rem;
|
|
|
transition: border-color 0.2s ease;
|
|
|
box-sizing: border-box;
|
|
|
}
|
|
|
|
|
|
.form-group input:focus,
|
|
|
.form-group select:focus,
|
|
|
.form-group textarea:focus {
|
|
|
outline: none;
|
|
|
border-color: #4a90e2;
|
|
|
box-shadow: 0 0 0 2px rgba(74, 144, 226, 0.1);
|
|
|
}
|
|
|
|
|
|
.form-actions {
|
|
|
display: flex;
|
|
|
gap: 0.75rem;
|
|
|
justify-content: flex-end;
|
|
|
margin-top: 1.5rem;
|
|
|
padding-top: 1rem;
|
|
|
border-top: 1px solid #e9ecef;
|
|
|
}
|
|
|
|
|
|
.workorder-details,
|
|
|
.device-details {
|
|
|
display: grid;
|
|
|
gap: 1rem;
|
|
|
}
|
|
|
|
|
|
.detail-item {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
padding: 0.75rem;
|
|
|
background: #f8f9fa;
|
|
|
border-radius: 4px;
|
|
|
}
|
|
|
|
|
|
.detail-item label {
|
|
|
font-weight: 500;
|
|
|
color: #333;
|
|
|
margin: 0;
|
|
|
}
|
|
|
|
|
|
.detail-item span {
|
|
|
color: #666;
|
|
|
}
|
|
|
|
|
|
/* 通知样式 */
|
|
|
@keyframes slideInRight {
|
|
|
from {
|
|
|
transform: translateX(100%);
|
|
|
opacity: 0;
|
|
|
}
|
|
|
to {
|
|
|
transform: translateX(0);
|
|
|
opacity: 1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@keyframes fadeIn {
|
|
|
from { opacity: 0; }
|
|
|
to { opacity: 1; }
|
|
|
}
|
|
|
|
|
|
@keyframes slideIn {
|
|
|
from {
|
|
|
transform: translateY(-50px);
|
|
|
opacity: 0;
|
|
|
}
|
|
|
to {
|
|
|
transform: translateY(0);
|
|
|
opacity: 1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.notification {
|
|
|
animation: slideInRight 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.notification-content {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.75rem;
|
|
|
}
|
|
|
|
|
|
.notification-close {
|
|
|
background: none;
|
|
|
border: none;
|
|
|
cursor: pointer;
|
|
|
color: #666;
|
|
|
padding: 0.25rem;
|
|
|
border-radius: 4px;
|
|
|
transition: background 0.2s ease;
|
|
|
}
|
|
|
|
|
|
.notification-close:hover {
|
|
|
background: rgba(0, 0, 0, 0.1);
|
|
|
}
|
|
|
|
|
|
/* 自定义地图标记样式 */
|
|
|
.custom-marker {
|
|
|
background: white;
|
|
|
border-radius: 50%;
|
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
border: 2px solid white;
|
|
|
}
|
|
|
|
|
|
.camera-marker {
|
|
|
background: #f0f8ff;
|
|
|
}
|
|
|
|
|
|
.ship-marker {
|
|
|
background: #f0fff0;
|
|
|
}
|
|
|
|
|
|
.drone-marker {
|
|
|
background: #fff0f5;
|
|
|
}
|
|
|
|
|
|
.garbage-marker {
|
|
|
background: #fff8dc;
|
|
|
}
|
|
|
|
|
|
/* 维护计划样式 */
|
|
|
.maintenance-schedule {
|
|
|
max-height: 400px;
|
|
|
overflow-y: auto;
|
|
|
}
|
|
|
|
|
|
.schedule-item {
|
|
|
display: grid;
|
|
|
grid-template-columns: 100px 1fr 100px 80px;
|
|
|
gap: 1rem;
|
|
|
align-items: center;
|
|
|
padding: 1rem;
|
|
|
border: 1px solid #e9ecef;
|
|
|
border-radius: 6px;
|
|
|
margin-bottom: 0.75rem;
|
|
|
}
|
|
|
|
|
|
.schedule-date {
|
|
|
font-weight: 500;
|
|
|
color: #333;
|
|
|
}
|
|
|
|
|
|
.schedule-device {
|
|
|
color: #666;
|
|
|
}
|
|
|
|
|
|
.schedule-type {
|
|
|
font-size: 0.875rem;
|
|
|
color: #666;
|
|
|
}
|
|
|
|
|
|
.schedule-status {
|
|
|
padding: 0.25rem 0.5rem;
|
|
|
border-radius: 12px;
|
|
|
font-size: 0.75rem;
|
|
|
text-align: center;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
.schedule-status.pending {
|
|
|
background: #fff3cd;
|
|
|
color: #856404;
|
|
|
}
|
|
|
|
|
|
.schedule-status.processing {
|
|
|
background: #cce5ff;
|
|
|
color: #004085;
|
|
|
}
|
|
|
|
|
|
.schedule-status.completed {
|
|
|
background: #d4edda;
|
|
|
color: #155724;
|
|
|
}
|
|
|
|
|
|
/* 预警历史样式 */
|
|
|
.warning-history {
|
|
|
max-height: 400px;
|
|
|
overflow-y: auto;
|
|
|
}
|
|
|
|
|
|
.history-item {
|
|
|
display: grid;
|
|
|
grid-template-columns: 120px 80px 1fr 80px;
|
|
|
gap: 1rem;
|
|
|
align-items: center;
|
|
|
padding: 1rem;
|
|
|
border-radius: 6px;
|
|
|
margin-bottom: 0.75rem;
|
|
|
}
|
|
|
|
|
|
.history-item.critical {
|
|
|
background: #fff5f5;
|
|
|
border-left: 4px solid #e74c3c;
|
|
|
}
|
|
|
|
|
|
.history-item.high {
|
|
|
background: #fffbf0;
|
|
|
border-left: 4px solid #f39c12;
|
|
|
}
|
|
|
|
|
|
.history-item.medium {
|
|
|
background: #fffef0;
|
|
|
border-left: 4px solid #f1c40f;
|
|
|
}
|
|
|
|
|
|
.history-time {
|
|
|
font-size: 0.875rem;
|
|
|
color: #666;
|
|
|
}
|
|
|
|
|
|
.history-type {
|
|
|
font-size: 0.875rem;
|
|
|
font-weight: 500;
|
|
|
color: #333;
|
|
|
}
|
|
|
|
|
|
.history-message {
|
|
|
color: #666;
|
|
|
}
|
|
|
|
|
|
.history-status {
|
|
|
padding: 0.25rem 0.5rem;
|
|
|
border-radius: 12px;
|
|
|
font-size: 0.75rem;
|
|
|
text-align: center;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
.history-status.resolved {
|
|
|
background: #d4edda;
|
|
|
color: #155724;
|
|
|
}
|
|
|
|
|
|
.history-status.pending {
|
|
|
background: #fff3cd;
|
|
|
color: #856404;
|
|
|
}
|
|
|
|
|
|
/* 设置部分样式 */
|
|
|
.settings-section {
|
|
|
margin-bottom: 1.5rem;
|
|
|
padding-bottom: 1rem;
|
|
|
border-bottom: 1px solid #e9ecef;
|
|
|
}
|
|
|
|
|
|
.settings-section:last-child {
|
|
|
border-bottom: none;
|
|
|
margin-bottom: 0;
|
|
|
}
|
|
|
|
|
|
.settings-section h4 {
|
|
|
margin: 0 0 1rem 0;
|
|
|
color: #333;
|
|
|
font-size: 1rem;
|
|
|
}
|
|
|
|
|
|
@media (max-width: 768px) {
|
|
|
.header-content {
|
|
|
flex-direction: column;
|
|
|
height: auto;
|
|
|
padding: 1rem;
|
|
|
}
|
|
|
|
|
|
.nav-menu {
|
|
|
flex-wrap: wrap;
|
|
|
justify-content: center;
|
|
|
}
|
|
|
|
|
|
.main-content {
|
|
|
margin-top: 120px;
|
|
|
padding: 1rem;
|
|
|
}
|
|
|
|
|
|
.workorder-stats,
|
|
|
.warning-overview,
|
|
|
.kpi-cards {
|
|
|
grid-template-columns: repeat(2, 1fr);
|
|
|
}
|
|
|
|
|
|
.device-categories {
|
|
|
grid-template-columns: 1fr;
|
|
|
}
|
|
|
|
|
|
.warning-types {
|
|
|
grid-template-columns: 1fr;
|
|
|
}
|
|
|
|
|
|
.device-grid {
|
|
|
grid-template-columns: 1fr;
|
|
|
}
|
|
|
|
|
|
.warning-grid {
|
|
|
grid-template-columns: 1fr;
|
|
|
}
|
|
|
|
|
|
.charts-grid {
|
|
|
grid-template-columns: 1fr;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@media (max-width: 480px) {
|
|
|
.workorder-stats,
|
|
|
.warning-overview,
|
|
|
.kpi-cards {
|
|
|
grid-template-columns: 1fr;
|
|
|
}
|
|
|
|
|
|
.status-grid {
|
|
|
grid-template-columns: 1fr;
|
|
|
}
|
|
|
|
|
|
.video-grid {
|
|
|
grid-template-columns: 1fr;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* 滚动条样式 */
|
|
|
::-webkit-scrollbar {
|
|
|
width: 8px;
|
|
|
}
|
|
|
|
|
|
::-webkit-scrollbar-track {
|
|
|
background: #f1f1f1;
|
|
|
border-radius: 4px;
|
|
|
}
|
|
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
|
background: linear-gradient(135deg, #4a90e2, #357abd);
|
|
|
border-radius: 4px;
|
|
|
}
|
|
|
|
|
|
::-webkit-scrollbar-thumb:hover {
|
|
|
background: linear-gradient(135deg, #357abd, #2c5aa0);
|
|
|
}
|
|
|
|
|
|
/* 工具提示 */
|
|
|
.tooltip {
|
|
|
position: relative;
|
|
|
cursor: help;
|
|
|
}
|
|
|
|
|
|
.tooltip::after {
|
|
|
content: attr(data-tooltip);
|
|
|
position: absolute;
|
|
|
bottom: 100%;
|
|
|
left: 50%;
|
|
|
transform: translateX(-50%);
|
|
|
background: rgba(0, 0, 0, 0.8);
|
|
|
color: white;
|
|
|
padding: 0.5rem;
|
|
|
border-radius: 4px;
|
|
|
font-size: 0.8rem;
|
|
|
white-space: nowrap;
|
|
|
opacity: 0;
|
|
|
pointer-events: none;
|
|
|
transition: opacity 0.3s ease;
|
|
|
z-index: 1000;
|
|
|
}
|
|
|
|
|
|
.tooltip:hover::after {
|
|
|
opacity: 1;
|
|
|
}
|
|
|
|
|
|
/* 加载动画 */
|
|
|
.loading {
|
|
|
display: inline-block;
|
|
|
width: 20px;
|
|
|
height: 20px;
|
|
|
border: 3px solid rgba(74, 144, 226, 0.3);
|
|
|
border-radius: 50%;
|
|
|
border-top-color: #4a90e2;
|
|
|
animation: spin 1s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes spin {
|
|
|
to { transform: rotate(360deg); }
|
|
|
}
|
|
|
|
|
|
/* 状态指示器 */
|
|
|
.status-indicator {
|
|
|
display: inline-block;
|
|
|
width: 8px;
|
|
|
height: 8px;
|
|
|
border-radius: 50%;
|
|
|
margin-right: 0.5rem;
|
|
|
}
|
|
|
|
|
|
.status-indicator.online { background: #2ecc71; }
|
|
|
.status-indicator.offline { background: #e74c3c; }
|
|
|
.status-indicator.warning { background: #f39c12; }
|
|
|
|
|
|
/* 徽章 */
|
|
|
.badge {
|
|
|
display: inline-block;
|
|
|
padding: 0.3rem 0.6rem;
|
|
|
font-size: 0.7rem;
|
|
|
font-weight: 600;
|
|
|
border-radius: 12px;
|
|
|
text-transform: uppercase;
|
|
|
}
|
|
|
|
|
|
.badge.success { background: #2ecc71; color: white; }
|
|
|
.badge.warning { background: #f39c12; color: white; }
|
|
|
.badge.danger { background: #e74c3c; color: white; }
|
|
|
.badge.info { background: #3498db; color: white; }
|
|
|
|
|
|
/* 进度条 */
|
|
|
.progress {
|
|
|
width: 100%;
|
|
|
height: 8px;
|
|
|
background: #ecf0f1;
|
|
|
border-radius: 4px;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
|
|
|
.progress-bar {
|
|
|
height: 100%;
|
|
|
background: linear-gradient(135deg, #4a90e2, #357abd);
|
|
|
border-radius: 4px;
|
|
|
transition: width 0.3s ease;
|
|
|
}
|
|
|
|
|
|
/* 卡片悬停效果 */
|
|
|
.card-hover {
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.card-hover:hover {
|
|
|
transform: translateY(-3px);
|
|
|
box-shadow: 0 10px 40px rgba(0, 212, 255, 0.2);
|
|
|
border-color: rgba(0, 212, 255, 0.5);
|
|
|
}
|
|
|
|
|
|
/* 通用卡片样式 */
|
|
|
.card {
|
|
|
background: linear-gradient(135deg, rgba(30, 60, 114, 0.8) 0%, rgba(42, 82, 152, 0.6) 100%);
|
|
|
border-radius: 10px;
|
|
|
padding: 18px;
|
|
|
box-shadow: 0 6px 24px rgba(0, 0, 0, 0.4);
|
|
|
transition: all 0.3s ease;
|
|
|
border: 1px solid rgba(0, 212, 255, 0.3);
|
|
|
backdrop-filter: blur(15px);
|
|
|
position: relative;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
|
|
|
.card::before {
|
|
|
content: '';
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
|
left: 0;
|
|
|
right: 0;
|
|
|
height: 2px;
|
|
|
background: linear-gradient(90deg, #00d4ff, #0099cc, #00d4ff);
|
|
|
background-size: 200% 100%;
|
|
|
animation: gradientMove 3s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
@keyframes gradientMove {
|
|
|
0%, 100% { background-position: 0% 50%; }
|
|
|
50% { background-position: 100% 50%; }
|
|
|
}
|
|
|
|
|
|
.overview-cards {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
|
|
gap: 15px;
|
|
|
margin-bottom: 25px;
|
|
|
}
|
|
|
|
|
|
/* 渐变文字 */
|
|
|
.gradient-text {
|
|
|
background: linear-gradient(135deg, #4a90e2, #357abd);
|
|
|
-webkit-background-clip: text;
|
|
|
-webkit-text-fill-color: transparent;
|
|
|
background-clip: text;
|
|
|
font-weight: 600;
|
|
|
}
|
|
|
|
|
|
/* 玻璃态效果 */
|
|
|
.glass {
|
|
|
background: rgba(255, 255, 255, 0.1);
|
|
|
backdrop-filter: blur(10px);
|
|
|
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
|
}
|
|
|
|
|
|
/* 阴影效果 */
|
|
|
.shadow-sm { box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); }
|
|
|
.shadow-md { box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); }
|
|
|
.shadow-lg { box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15); }
|
|
|
.shadow-xl { box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2); }
|
|
|
|
|
|
/* 边框效果 */
|
|
|
.border-gradient {
|
|
|
border: 2px solid;
|
|
|
border-image: linear-gradient(135deg, #4a90e2, #357abd) 1;
|
|
|
}
|
|
|
|
|
|
/* 文字效果 */
|
|
|
.text-shadow {
|
|
|
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
|
}
|
|
|
|
|
|
/* 过渡效果 */
|
|
|
.transition-all { transition: all 0.3s ease; }
|
|
|
.transition-transform { transition: transform 0.3s ease; }
|
|
|
.transition-opacity { transition: opacity 0.3s ease; }
|
|
|
|
|
|
/* 隐藏/显示 */
|
|
|
.hidden { display: none !important; }
|
|
|
.invisible { opacity: 0; }
|
|
|
.visible { opacity: 1; }
|
|
|
|
|
|
/* 文本对齐 */
|
|
|
.text-left { text-align: left; }
|
|
|
.text-center { text-align: center; }
|
|
|
.text-right { text-align: right; }
|
|
|
|
|
|
/* 弹性布局 */
|
|
|
.flex { display: flex; }
|
|
|
.flex-col { flex-direction: column; }
|
|
|
.flex-row { flex-direction: row; }
|
|
|
.items-center { align-items: center; }
|
|
|
.justify-center { justify-content: center; }
|
|
|
.justify-between { justify-content: space-between; }
|
|
|
.flex-1 { flex: 1; }
|
|
|
|
|
|
/* 间距 */
|
|
|
.gap-1 { gap: 0.25rem; }
|
|
|
.gap-2 { gap: 0.5rem; }
|
|
|
.gap-3 { gap: 0.75rem; }
|
|
|
.gap-4 { gap: 1rem; }
|
|
|
.gap-5 { gap: 1.25rem; }
|
|
|
.gap-6 { gap: 1.5rem; }
|
|
|
|
|
|
/* 内边距 */
|
|
|
.p-1 { padding: 0.25rem; }
|
|
|
.p-2 { padding: 0.5rem; }
|
|
|
.p-3 { padding: 0.75rem; }
|
|
|
.p-4 { padding: 1rem; }
|
|
|
.p-5 { padding: 1.25rem; }
|
|
|
.p-6 { padding: 1.5rem; }
|
|
|
|
|
|
/* 外边距 */
|
|
|
.m-1 { margin: 0.25rem; }
|
|
|
.m-2 { margin: 0.5rem; }
|
|
|
.m-3 { margin: 0.75rem; }
|
|
|
.m-4 { margin: 1rem; }
|
|
|
.m-5 { margin: 1.25rem; }
|
|
|
.m-6 { margin: 1.5rem; }
|
|
|
|
|
|
/* 圆角 */
|
|
|
.rounded-sm { border-radius: 4px; }
|
|
|
.rounded { border-radius: 8px; }
|
|
|
.rounded-lg { border-radius: 12px; }
|
|
|
.rounded-xl { border-radius: 16px; }
|
|
|
.rounded-full { border-radius: 50%; }
|
|
|
|
|
|
/* 宽度 */
|
|
|
.w-full { width: 100%; }
|
|
|
.w-1\/2 { width: 50%; }
|
|
|
.w-1\/3 { width: 33.333333%; }
|
|
|
.w-2\/3 { width: 66.666667%; }
|
|
|
.w-1\/4 { width: 25%; }
|
|
|
.w-3\/4 { width: 75%; }
|
|
|
|
|
|
/* 高度 */
|
|
|
.h-full { height: 100%; }
|
|
|
.h-screen { height: 100vh; }
|
|
|
.h-auto { height: auto; }
|
|
|
|
|
|
/* 字体大小 */
|
|
|
.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; }
|
|
|
.text-3xl { font-size: 1.875rem; }
|
|
|
|
|
|
/* 字体粗细 */
|
|
|
.font-light { font-weight: 300; }
|
|
|
.font-normal { font-weight: 400; }
|
|
|
.font-medium { font-weight: 500; }
|
|
|
.font-semibold { font-weight: 600; }
|
|
|
.font-bold { font-weight: 700; }
|
|
|
|
|
|
/* 颜色 */
|
|
|
.text-primary { color: #4a90e2; }
|
|
|
.text-secondary { color: #7f8c8d; }
|
|
|
.text-success { color: #2ecc71; }
|
|
|
.text-warning { color: #f39c12; }
|
|
|
.text-danger { color: #e74c3c; }
|
|
|
.text-info { color: #3498db; }
|
|
|
.text-dark { color: #2c3e50; }
|
|
|
.text-light { color: #ecf0f1; }
|
|
|
|
|
|
/* 背景颜色 */
|
|
|
.bg-primary { background-color: #4a90e2; }
|
|
|
.bg-secondary { background-color: #7f8c8d; }
|
|
|
.bg-success { background-color: #2ecc71; }
|
|
|
.bg-warning { background-color: #f39c12; }
|
|
|
.bg-danger { background-color: #e74c3c; }
|
|
|
.bg-info { background-color: #3498db; }
|
|
|
.bg-dark { background-color: #2c3e50; }
|
|
|
.bg-light { background-color: #ecf0f1; }
|
|
|
.bg-white { background-color: white; }
|
|
|
.bg-transparent { background-color: transparent; }
|
|
|
|
|
|
/* 位置 */
|
|
|
.relative { position: relative; }
|
|
|
.absolute { position: absolute; }
|
|
|
.fixed { position: fixed; }
|
|
|
.sticky { position: sticky; }
|
|
|
|
|
|
/* 层级 */
|
|
|
.z-10 { z-index: 10; }
|
|
|
.z-20 { z-index: 20; }
|
|
|
.z-30 { z-index: 30; }
|
|
|
.z-40 { z-index: 40; }
|
|
|
.z-50 { z-index: 50; }
|
|
|
|
|
|
/* 溢出 */
|
|
|
.overflow-hidden { overflow: hidden; }
|
|
|
.overflow-auto { overflow: auto; }
|
|
|
.overflow-scroll { overflow: scroll; }
|
|
|
|
|
|
/* 显示 */
|
|
|
.block { display: block; }
|
|
|
.inline { display: inline; }
|
|
|
.inline-block { display: inline-block; }
|
|
|
.grid { display: grid; }
|
|
|
|
|
|
/* 光标 */
|
|
|
.cursor-pointer { cursor: pointer; }
|
|
|
.cursor-default { cursor: default; }
|
|
|
.cursor-not-allowed { cursor: not-allowed; }
|
|
|
|
|
|
/* 选择 */
|
|
|
.select-none { user-select: none; }
|
|
|
.select-text { user-select: text; }
|
|
|
.select-all { user-select: all; }
|
|
|
|
|
|
/* 指针事件 */
|
|
|
.pointer-events-none { pointer-events: none; }
|
|
|
.pointer-events-auto { pointer-events: auto; }
|
|
|
|
|
|
/* 变换 */
|
|
|
.transform { transform: translateZ(0); }
|
|
|
.scale-95 { transform: scale(0.95); }
|
|
|
.scale-100 { transform: scale(1); }
|
|
|
.scale-105 { transform: scale(1.05); }
|
|
|
.scale-110 { transform: scale(1.1); }
|
|
|
|
|
|
/* 旋转 */
|
|
|
.rotate-0 { transform: rotate(0deg); }
|
|
|
.rotate-45 { transform: rotate(45deg); }
|
|
|
.rotate-90 { transform: rotate(90deg); }
|
|
|
.rotate-180 { transform: rotate(180deg); }
|
|
|
|
|
|
/* 透明度 */
|
|
|
.opacity-0 { opacity: 0; }
|
|
|
.opacity-25 { opacity: 0.25; }
|
|
|
.opacity-50 { opacity: 0.5; }
|
|
|
.opacity-75 { opacity: 0.75; }
|
|
|
.opacity-100 { opacity: 1; }
|
|
|
|
|
|
/* 阴影 */
|
|
|
.drop-shadow-sm { filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.05)); }
|
|
|
.drop-shadow { filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.1)); }
|
|
|
.drop-shadow-md { filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.1)); }
|
|
|
.drop-shadow-lg { filter: drop-shadow(0 10px 15px rgba(0, 0, 0, 0.1)); }
|
|
|
.drop-shadow-xl { filter: drop-shadow(0 20px 25px rgba(0, 0, 0, 0.1)); }
|
|
|
|
|
|
/* 模糊 */
|
|
|
.blur-none { filter: blur(0); }
|
|
|
.blur-sm { filter: blur(4px); }
|
|
|
.blur { filter: blur(8px); }
|
|
|
.blur-md { filter: blur(12px); }
|
|
|
.blur-lg { filter: blur(16px); }
|
|
|
.blur-xl { filter: blur(24px); }
|
|
|
|
|
|
/* 亮度 */
|
|
|
.brightness-50 { filter: brightness(0.5); }
|
|
|
.brightness-75 { filter: brightness(0.75); }
|
|
|
.brightness-100 { filter: brightness(1); }
|
|
|
.brightness-125 { filter: brightness(1.25); }
|
|
|
.brightness-150 { filter: brightness(1.5); }
|
|
|
|
|
|
/* 对比度 */
|
|
|
.contrast-50 { filter: contrast(0.5); }
|
|
|
.contrast-75 { filter: contrast(0.75); }
|
|
|
.contrast-100 { filter: contrast(1); }
|
|
|
.contrast-125 { filter: contrast(1.25); }
|
|
|
.contrast-150 { filter: contrast(1.5); }
|
|
|
|
|
|
/* 饱和度 */
|
|
|
.saturate-0 { filter: saturate(0); }
|
|
|
.saturate-50 { filter: saturate(0.5); }
|
|
|
.saturate-100 { filter: saturate(1); }
|
|
|
.saturate-150 { filter: saturate(1.5); }
|
|
|
.saturate-200 { filter: saturate(2); }
|
|
|
|
|
|
/* 色调 */
|
|
|
.hue-rotate-0 { filter: hue-rotate(0deg); }
|
|
|
.hue-rotate-15 { filter: hue-rotate(15deg); }
|
|
|
.hue-rotate-30 { filter: hue-rotate(30deg); }
|
|
|
.hue-rotate-60 { filter: hue-rotate(60deg); }
|
|
|
.hue-rotate-90 { filter: hue-rotate(90deg); }
|
|
|
.hue-rotate-180 { filter: hue-rotate(180deg); }
|
|
|
|
|
|
/* 反转 */
|
|
|
.invert-0 { filter: invert(0); }
|
|
|
.invert { filter: invert(1); }
|
|
|
|
|
|
/* 深褐色 */
|
|
|
.sepia-0 { filter: sepia(0); }
|
|
|
.sepia { filter: sepia(1); }
|
|
|
|
|
|
/* 灰度 */
|
|
|
.grayscale-0 { filter: grayscale(0); }
|
|
|
.grayscale { filter: grayscale(1); }
|
|
|
|
|
|
/* 背景混合模式 */
|
|
|
.bg-blend-normal { background-blend-mode: normal; }
|
|
|
.bg-blend-multiply { background-blend-mode: multiply; }
|
|
|
.bg-blend-screen { background-blend-mode: screen; }
|
|
|
.bg-blend-overlay { background-blend-mode: overlay; }
|
|
|
.bg-blend-darken { background-blend-mode: darken; }
|
|
|
.bg-blend-lighten { background-blend-mode: lighten; }
|
|
|
.bg-blend-color-dodge { background-blend-mode: color-dodge; }
|
|
|
.bg-blend-color-burn { background-blend-mode: color-burn; }
|
|
|
.bg-blend-hard-light { background-blend-mode: hard-light; }
|
|
|
.bg-blend-soft-light { background-blend-mode: soft-light; }
|
|
|
.bg-blend-difference { background-blend-mode: difference; }
|
|
|
.bg-blend-exclusion { background-blend-mode: exclusion; }
|
|
|
.bg-blend-hue { background-blend-mode: hue; }
|
|
|
.bg-blend-saturation { background-blend-mode: saturation; }
|
|
|
.bg-blend-color { background-blend-mode: color; }
|
|
|
.bg-blend-luminosity { background-blend-mode: luminosity; }
|
|
|
|
|
|
/* 混合模式 */
|
|
|
.mix-blend-normal { mix-blend-mode: normal; }
|
|
|
.mix-blend-multiply { mix-blend-mode: multiply; }
|
|
|
.mix-blend-screen { mix-blend-mode: screen; }
|
|
|
.mix-blend-overlay { mix-blend-mode: overlay; }
|
|
|
.mix-blend-darken { mix-blend-mode: darken; }
|
|
|
.mix-blend-lighten { mix-blend-mode: lighten; }
|
|
|
.mix-blend-color-dodge { mix-blend-mode: color-dodge; }
|
|
|
.mix-blend-color-burn { mix-blend-mode: color-burn; }
|
|
|
.mix-blend-hard-light { mix-blend-mode: hard-light; }
|
|
|
.mix-blend-soft-light { mix-blend-mode: soft-light; }
|
|
|
.mix-blend-difference { mix-blend-mode: difference; }
|
|
|
.mix-blend-exclusion { mix-blend-mode: exclusion; }
|
|
|
.mix-blend-hue { mix-blend-mode: hue; }
|
|
|
.mix-blend-saturation { mix-blend-mode: saturation; }
|
|
|
.mix-blend-color { mix-blend-mode: color; }
|
|
|
.mix-blend-luminosity { mix-blend-mode: luminosity; }
|
|
|
|
|
|
/* 自定义滚动条 */
|
|
|
.custom-scrollbar::-webkit-scrollbar {
|
|
|
width: 6px;
|
|
|
height: 6px;
|
|
|
}
|
|
|
|
|
|
.custom-scrollbar::-webkit-scrollbar-track {
|
|
|
background: #f1f1f1;
|
|
|
border-radius: 3px;
|
|
|
}
|
|
|
|
|
|
.custom-scrollbar::-webkit-scrollbar-thumb {
|
|
|
background: linear-gradient(135deg, #4a90e2, #357abd);
|
|
|
border-radius: 3px;
|
|
|
}
|
|
|
|
|
|
.custom-scrollbar::-webkit-scrollbar-thumb:hover {
|
|
|
background: linear-gradient(135deg, #357abd, #2c5aa0);
|
|
|
}
|
|
|
|
|
|
/* 自定义选择框 */
|
|
|
.custom-select {
|
|
|
position: relative;
|
|
|
display: inline-block;
|
|
|
}
|
|
|
|
|
|
.custom-select select {
|
|
|
appearance: none;
|
|
|
-webkit-appearance: none;
|
|
|
-moz-appearance: none;
|
|
|
background: white;
|
|
|
border: 1px solid #ddd;
|
|
|
border-radius: 8px;
|
|
|
padding: 0.8rem 2.5rem 0.8rem 1rem;
|
|
|
font-size: 0.9rem;
|
|
|
cursor: pointer;
|
|
|
transition: border-color 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.custom-select::after {
|
|
|
content: '▼';
|
|
|
position: absolute;
|
|
|
right: 1rem;
|
|
|
top: 50%;
|
|
|
transform: translateY(-50%);
|
|
|
pointer-events: none;
|
|
|
color: #666;
|
|
|
font-size: 0.8rem;
|
|
|
}
|
|
|
|
|
|
.custom-select select:focus {
|
|
|
outline: none;
|
|
|
border-color: #4a90e2;
|
|
|
}
|
|
|
|
|
|
/* 自定义复选框 */
|
|
|
.custom-checkbox {
|
|
|
position: relative;
|
|
|
display: inline-block;
|
|
|
cursor: pointer;
|
|
|
}
|
|
|
|
|
|
.custom-checkbox input[type="checkbox"] {
|
|
|
opacity: 0;
|
|
|
position: absolute;
|
|
|
left: 0;
|
|
|
top: 0;
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
cursor: pointer;
|
|
|
}
|
|
|
|
|
|
.custom-checkbox .checkmark {
|
|
|
display: inline-block;
|
|
|
width: 20px;
|
|
|
height: 20px;
|
|
|
border: 2px solid #ddd;
|
|
|
border-radius: 4px;
|
|
|
position: relative;
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.custom-checkbox input[type="checkbox"]:checked + .checkmark {
|
|
|
background: linear-gradient(135deg, #4a90e2, #357abd);
|
|
|
border-color: #4a90e2;
|
|
|
}
|
|
|
|
|
|
.custom-checkbox input[type="checkbox"]:checked + .checkmark::after {
|
|
|
content: '✓';
|
|
|
position: absolute;
|
|
|
left: 50%;
|
|
|
top: 50%;
|
|
|
transform: translate(-50%, -50%);
|
|
|
color: white;
|
|
|
font-size: 12px;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
|
|
|
/* 自定义单选框 */
|
|
|
.custom-radio {
|
|
|
position: relative;
|
|
|
display: inline-block;
|
|
|
cursor: pointer;
|
|
|
}
|
|
|
|
|
|
.custom-radio input[type="radio"] {
|
|
|
opacity: 0;
|
|
|
position: absolute;
|
|
|
left: 0;
|
|
|
top: 0;
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
cursor: pointer;
|
|
|
}
|
|
|
|
|
|
.custom-radio .radiomark {
|
|
|
display: inline-block;
|
|
|
width: 20px;
|
|
|
height: 20px;
|
|
|
border: 2px solid #ddd;
|
|
|
border-radius: 50%;
|
|
|
position: relative;
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.custom-radio input[type="radio"]:checked + .radiomark {
|
|
|
border-color: #4a90e2;
|
|
|
}
|
|
|
|
|
|
.custom-radio input[type="radio"]:checked + .radiomark::after {
|
|
|
content: '';
|
|
|
position: absolute;
|
|
|
left: 50%;
|
|
|
top: 50%;
|
|
|
transform: translate(-50%, -50%);
|
|
|
width: 10px;
|
|
|
height: 10px;
|
|
|
background: linear-gradient(135deg, #4a90e2, #357abd);
|
|
|
border-radius: 50%;
|
|
|
}
|
|
|
|
|
|
/* 自定义开关 */
|
|
|
.custom-switch {
|
|
|
position: relative;
|
|
|
display: inline-block;
|
|
|
width: 50px;
|
|
|
height: 24px;
|
|
|
}
|
|
|
|
|
|
.custom-switch input[type="checkbox"] {
|
|
|
opacity: 0;
|
|
|
width: 0;
|
|
|
height: 0;
|
|
|
}
|
|
|
|
|
|
.custom-switch .slider {
|
|
|
position: absolute;
|
|
|
cursor: pointer;
|
|
|
top: 0;
|
|
|
left: 0;
|
|
|
right: 0;
|
|
|
bottom: 0;
|
|
|
background-color: #ccc;
|
|
|
transition: 0.3s;
|
|
|
border-radius: 24px;
|
|
|
}
|
|
|
|
|
|
.custom-switch .slider:before {
|
|
|
position: absolute;
|
|
|
content: "";
|
|
|
height: 18px;
|
|
|
width: 18px;
|
|
|
left: 3px;
|
|
|
bottom: 3px;
|
|
|
background-color: white;
|
|
|
transition: 0.3s;
|
|
|
border-radius: 50%;
|
|
|
}
|
|
|
|
|
|
.custom-switch input:checked + .slider {
|
|
|
background: linear-gradient(135deg, #4a90e2, #357abd);
|
|
|
}
|
|
|
|
|
|
.custom-switch input:checked + .slider:before {
|
|
|
transform: translateX(26px);
|
|
|
}
|
|
|
|
|
|
/* 自定义范围滑块 */
|
|
|
.custom-range {
|
|
|
-webkit-appearance: none;
|
|
|
appearance: none;
|
|
|
width: 100%;
|
|
|
height: 6px;
|
|
|
border-radius: 3px;
|
|
|
background: #ddd;
|
|
|
outline: none;
|
|
|
transition: background 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.custom-range::-webkit-slider-thumb {
|
|
|
-webkit-appearance: none;
|
|
|
appearance: none;
|
|
|
width: 20px;
|
|
|
height: 20px;
|
|
|
border-radius: 50%;
|
|
|
background: linear-gradient(135deg, #4a90e2, #357abd);
|
|
|
cursor: pointer;
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.custom-range::-webkit-slider-thumb:hover {
|
|
|
transform: scale(1.2);
|
|
|
}
|
|
|
|
|
|
.custom-range::-moz-range-thumb {
|
|
|
width: 20px;
|
|
|
height: 20px;
|
|
|
border-radius: 50%;
|
|
|
background: linear-gradient(135deg, #4a90e2, #357abd);
|
|
|
cursor: pointer;
|
|
|
border: none;
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.custom-range::-moz-range-thumb:hover {
|
|
|
transform: scale(1.2);
|
|
|
}
|
|
|
|
|
|
/* 自定义文件上传 */
|
|
|
.custom-file-upload {
|
|
|
position: relative;
|
|
|
display: inline-block;
|
|
|
cursor: pointer;
|
|
|
padding: 0.8rem 1.5rem;
|
|
|
background: linear-gradient(135deg, #4a90e2, #357abd);
|
|
|
color: white;
|
|
|
border-radius: 8px;
|
|
|
transition: all 0.3s ease;
|
|
|
border: none;
|
|
|
font-size: 0.9rem;
|
|
|
}
|
|
|
|
|
|
.custom-file-upload:hover {
|
|
|
transform: translateY(-2px);
|
|
|
box-shadow: 0 4px 15px rgba(74, 144, 226, 0.3);
|
|
|
}
|
|
|
|
|
|
.custom-file-upload input[type="file"] {
|
|
|
position: absolute;
|
|
|
left: -9999px;
|
|
|
}
|
|
|
|
|
|
/* 自定义标签 */
|
|
|
.custom-tag {
|
|
|
display: inline-block;
|
|
|
padding: 0.3rem 0.8rem;
|
|
|
background: rgba(74, 144, 226, 0.1);
|
|
|
color: #4a90e2;
|
|
|
border-radius: 15px;
|
|
|
font-size: 0.8rem;
|
|
|
font-weight: 500;
|
|
|
margin: 0.2rem;
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.custom-tag:hover {
|
|
|
background: rgba(74, 144, 226, 0.2);
|
|
|
transform: translateY(-1px);
|
|
|
}
|
|
|
|
|
|
.custom-tag.removable {
|
|
|
padding-right: 2rem;
|
|
|
position: relative;
|
|
|
}
|
|
|
|
|
|
.custom-tag.removable::after {
|
|
|
content: '×';
|
|
|
position: absolute;
|
|
|
right: 0.5rem;
|
|
|
top: 50%;
|
|
|
transform: translateY(-50%);
|
|
|
cursor: pointer;
|
|
|
font-weight: bold;
|
|
|
opacity: 0.7;
|
|
|
transition: opacity 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.custom-tag.removable:hover::after {
|
|
|
opacity: 1;
|
|
|
}
|
|
|
|
|
|
/* 自定义分页 */
|
|
|
.custom-pagination {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.5rem;
|
|
|
justify-content: center;
|
|
|
margin: 2rem 0;
|
|
|
}
|
|
|
|
|
|
.custom-pagination .page-item {
|
|
|
padding: 0.5rem 0.8rem;
|
|
|
border: 1px solid #ddd;
|
|
|
background: white;
|
|
|
color: #666;
|
|
|
border-radius: 6px;
|
|
|
cursor: pointer;
|
|
|
transition: all 0.3s ease;
|
|
|
font-size: 0.9rem;
|
|
|
}
|
|
|
|
|
|
.custom-pagination .page-item:hover {
|
|
|
background: #f8f9fa;
|
|
|
border-color: #4a90e2;
|
|
|
color: #4a90e2;
|
|
|
}
|
|
|
|
|
|
.custom-pagination .page-item.active {
|
|
|
background: linear-gradient(135deg, #4a90e2, #357abd);
|
|
|
border-color: #4a90e2;
|
|
|
color: white;
|
|
|
}
|
|
|
|
|
|
.custom-pagination .page-item.disabled {
|
|
|
opacity: 0.5;
|
|
|
cursor: not-allowed;
|
|
|
pointer-events: none;
|
|
|
}
|
|
|
|
|
|
/* 大屏模式动画效果 */
|
|
|
@keyframes titleGlow {
|
|
|
0%, 100% { text-shadow: 0 0 10px rgba(0, 212, 255, 0.8), 0 0 20px rgba(0, 212, 255, 0.6), 0 0 30px rgba(0, 212, 255, 0.4); }
|
|
|
50% { text-shadow: 0 0 20px rgba(0, 212, 255, 1), 0 0 30px rgba(0, 212, 255, 0.8), 0 0 40px rgba(0, 212, 255, 0.6); }
|
|
|
}
|
|
|
|
|
|
@keyframes mapScan {
|
|
|
0% { transform: translateX(-100%); }
|
|
|
100% { transform: translateX(100vw); }
|
|
|
}
|
|
|
|
|
|
@keyframes legendPulse {
|
|
|
0%, 100% { box-shadow: 0 0 5px rgba(0, 212, 255, 0.5); }
|
|
|
50% { box-shadow: 0 0 15px rgba(0, 212, 255, 0.8), 0 0 25px rgba(0, 212, 255, 0.4); }
|
|
|
}
|
|
|
|
|
|
@keyframes iconGlow {
|
|
|
0%, 100% { text-shadow: 0 0 10px rgba(0, 212, 255, 0.8); }
|
|
|
50% { text-shadow: 0 0 20px rgba(0, 212, 255, 1), 0 0 30px rgba(0, 212, 255, 0.6); }
|
|
|
}
|
|
|
|
|
|
@keyframes statusPulse {
|
|
|
0%, 100% { box-shadow: 0 4px 20px rgba(0, 212, 255, 0.3); }
|
|
|
50% { box-shadow: 0 6px 30px rgba(0, 212, 255, 0.6), 0 0 20px rgba(0, 212, 255, 0.4); }
|
|
|
}
|
|
|
|
|
|
@keyframes videoScan {
|
|
|
0% { transform: translateY(-100%); opacity: 0.3; }
|
|
|
50% { opacity: 0.8; }
|
|
|
100% { transform: translateY(100%); opacity: 0.3; }
|
|
|
}
|
|
|
|
|
|
@keyframes videoIconPulse {
|
|
|
0%, 100% { transform: scale(1); filter: drop-shadow(0 0 10px rgba(0, 212, 255, 0.6)); }
|
|
|
50% { transform: scale(1.1); filter: drop-shadow(0 0 20px rgba(0, 212, 255, 0.9)); }
|
|
|
}
|
|
|
|
|
|
@keyframes dataFlow {
|
|
|
0% { transform: translateX(-100%) scaleX(0); }
|
|
|
50% { transform: translateX(0) scaleX(1); }
|
|
|
100% { transform: translateX(100%) scaleX(0); }
|
|
|
}
|
|
|
|
|
|
@keyframes borderScan {
|
|
|
0% { border-color: rgba(0, 212, 255, 0.3); }
|
|
|
50% { border-color: rgba(0, 212, 255, 1); }
|
|
|
100% { border-color: rgba(0, 212, 255, 0.3); }
|
|
|
}
|
|
|
|
|
|
/* 大屏模式下的特殊效果 */
|
|
|
body.fullscreen-mode .monitor-layout::before {
|
|
|
content: '';
|
|
|
position: fixed;
|
|
|
top: 0;
|
|
|
left: 0;
|
|
|
right: 0;
|
|
|
bottom: 0;
|
|
|
background:
|
|
|
radial-gradient(circle at 20% 20%, rgba(0, 212, 255, 0.1) 0%, transparent 50%),
|
|
|
radial-gradient(circle at 80% 80%, rgba(116, 75, 162, 0.1) 0%, transparent 50%),
|
|
|
radial-gradient(circle at 40% 60%, rgba(102, 126, 234, 0.1) 0%, transparent 50%);
|
|
|
pointer-events: none;
|
|
|
z-index: 1;
|
|
|
}
|
|
|
|
|
|
body.fullscreen-mode .status-card {
|
|
|
animation: statusPulse 3s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
body.fullscreen-mode .legend-color {
|
|
|
animation: legendPulse 2s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
body.fullscreen-mode .video-placeholder::before {
|
|
|
animation: videoScan 3s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
body.fullscreen-mode .video-placeholder i {
|
|
|
animation: videoIconPulse 2s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
body.fullscreen-mode .area-item {
|
|
|
animation: borderScan 4s ease-in-out infinite;
|
|
|
}
|
|
|
|
|
|
/* 自定义面包屑 */
|
|
|
.custom-breadcrumb {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 0.5rem;
|
|
|
padding: 1rem;
|
|
|
background: rgba(255, 255, 255, 0.1);
|
|
|
border-radius: 8px;
|
|
|
margin-bottom: 1rem;
|
|
|
}
|
|
|
|
|
|
.custom-breadcrumb .breadcrumb-item {
|
|
|
color: #666;
|
|
|
text-decoration: none;
|
|
|
transition: color 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.custom-breadcrumb .breadcrumb-item:hover {
|
|
|
color: #4a90e2;
|
|
|
}
|
|
|
|
|
|
.custom-breadcrumb .breadcrumb-item.active {
|
|
|
color: #2c3e50;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
.custom-breadcrumb .breadcrumb-separator {
|
|
|
color: #999;
|
|
|
margin: 0 0.5rem;
|
|
|
}
|
|
|
|
|
|
/* 工单系统样式 */
|
|
|
.workorder-layout {
|
|
|
padding: 20px;
|
|
|
max-width: 1400px;
|
|
|
margin: 0 auto;
|
|
|
}
|
|
|
|
|
|
.workorder-header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
margin-bottom: 30px;
|
|
|
padding-bottom: 20px;
|
|
|
border-bottom: 2px solid #2a3f5f;
|
|
|
}
|
|
|
|
|
|
.workorder-header h3 {
|
|
|
color: #64b5f6;
|
|
|
font-size: 24px;
|
|
|
margin: 0;
|
|
|
}
|
|
|
|
|
|
.workorder-actions {
|
|
|
display: flex;
|
|
|
gap: 10px;
|
|
|
}
|
|
|
|
|
|
.workorder-stats {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
|
gap: 20px;
|
|
|
margin-bottom: 30px;
|
|
|
}
|
|
|
|
|
|
.stat-card {
|
|
|
background: linear-gradient(135deg, #1e3a5f 0%, #2a4a6b 100%);
|
|
|
border: 1px solid #3a5f7f;
|
|
|
border-radius: 12px;
|
|
|
padding: 20px;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 15px;
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.stat-card:hover {
|
|
|
transform: translateY(-2px);
|
|
|
box-shadow: 0 8px 25px rgba(100, 181, 246, 0.2);
|
|
|
}
|
|
|
|
|
|
.stat-icon {
|
|
|
width: 50px;
|
|
|
height: 50px;
|
|
|
border-radius: 50%;
|
|
|
background: linear-gradient(135deg, #64b5f6, #42a5f5);
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
color: white;
|
|
|
font-size: 20px;
|
|
|
}
|
|
|
|
|
|
.stat-info {
|
|
|
flex: 1;
|
|
|
}
|
|
|
|
|
|
.stat-number {
|
|
|
font-size: 28px;
|
|
|
font-weight: bold;
|
|
|
color: #64b5f6;
|
|
|
margin-bottom: 5px;
|
|
|
}
|
|
|
|
|
|
.stat-label {
|
|
|
color: #b0bec5;
|
|
|
font-size: 14px;
|
|
|
}
|
|
|
|
|
|
.workorder-table {
|
|
|
background: #1a2332;
|
|
|
border-radius: 12px;
|
|
|
overflow: hidden;
|
|
|
border: 1px solid #2a3f5f;
|
|
|
}
|
|
|
|
|
|
.table-header {
|
|
|
padding: 20px;
|
|
|
background: #2a3f5f;
|
|
|
border-bottom: 1px solid #3a5f7f;
|
|
|
}
|
|
|
|
|
|
.table-controls {
|
|
|
display: flex;
|
|
|
gap: 15px;
|
|
|
align-items: center;
|
|
|
}
|
|
|
|
|
|
.filter-select, .search-input {
|
|
|
padding: 8px 12px;
|
|
|
background: #1a2332;
|
|
|
border: 1px solid #3a5f7f;
|
|
|
border-radius: 6px;
|
|
|
color: #e0e0e0;
|
|
|
font-size: 14px;
|
|
|
}
|
|
|
|
|
|
.search-input {
|
|
|
flex: 1;
|
|
|
max-width: 300px;
|
|
|
}
|
|
|
|
|
|
.workorder-list {
|
|
|
width: 100%;
|
|
|
border-collapse: collapse;
|
|
|
}
|
|
|
|
|
|
.workorder-list th,
|
|
|
.workorder-list td {
|
|
|
padding: 15px;
|
|
|
text-align: left;
|
|
|
border-bottom: 1px solid #2a3f5f;
|
|
|
}
|
|
|
|
|
|
.workorder-list th {
|
|
|
background: #2a3f5f;
|
|
|
color: #64b5f6;
|
|
|
font-weight: 600;
|
|
|
font-size: 14px;
|
|
|
}
|
|
|
|
|
|
.workorder-list td {
|
|
|
color: #e0e0e0;
|
|
|
font-size: 14px;
|
|
|
}
|
|
|
|
|
|
/* 设备管理样式 */
|
|
|
.device-layout {
|
|
|
padding: 20px;
|
|
|
max-width: 1400px;
|
|
|
margin: 0 auto;
|
|
|
}
|
|
|
|
|
|
.device-header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
margin-bottom: 30px;
|
|
|
padding-bottom: 20px;
|
|
|
border-bottom: 2px solid #2a3f5f;
|
|
|
}
|
|
|
|
|
|
.device-header h3 {
|
|
|
color: #64b5f6;
|
|
|
font-size: 24px;
|
|
|
margin: 0;
|
|
|
}
|
|
|
|
|
|
.device-actions {
|
|
|
display: flex;
|
|
|
gap: 10px;
|
|
|
}
|
|
|
|
|
|
.device-categories {
|
|
|
display: flex;
|
|
|
gap: 10px;
|
|
|
margin-bottom: 30px;
|
|
|
flex-wrap: wrap;
|
|
|
}
|
|
|
|
|
|
.category-btn {
|
|
|
padding: 10px 20px;
|
|
|
background: #2a3f5f;
|
|
|
border: 1px solid #3a5f7f;
|
|
|
border-radius: 25px;
|
|
|
color: #b0bec5;
|
|
|
cursor: pointer;
|
|
|
transition: all 0.3s ease;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 8px;
|
|
|
}
|
|
|
|
|
|
.category-btn:hover,
|
|
|
.category-btn.active {
|
|
|
background: linear-gradient(135deg, #64b5f6, #42a5f5);
|
|
|
color: white;
|
|
|
border-color: #64b5f6;
|
|
|
}
|
|
|
|
|
|
.device-grid {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
|
|
gap: 20px;
|
|
|
}
|
|
|
|
|
|
/* 告警系统样式 */
|
|
|
.warning-layout {
|
|
|
padding: 20px;
|
|
|
max-width: 1400px;
|
|
|
margin: 0 auto;
|
|
|
}
|
|
|
|
|
|
.warning-header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
margin-bottom: 30px;
|
|
|
padding-bottom: 20px;
|
|
|
border-bottom: 2px solid #2a3f5f;
|
|
|
}
|
|
|
|
|
|
.warning-header h3 {
|
|
|
color: #64b5f6;
|
|
|
font-size: 24px;
|
|
|
margin: 0;
|
|
|
}
|
|
|
|
|
|
.warning-actions {
|
|
|
display: flex;
|
|
|
gap: 10px;
|
|
|
}
|
|
|
|
|
|
.warning-overview {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
|
gap: 20px;
|
|
|
margin-bottom: 30px;
|
|
|
}
|
|
|
|
|
|
.warning-card {
|
|
|
background: linear-gradient(135deg, #1e3a5f 0%, #2a4a6b 100%);
|
|
|
border-radius: 12px;
|
|
|
padding: 20px;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 15px;
|
|
|
transition: all 0.3s ease;
|
|
|
border-left: 4px solid;
|
|
|
}
|
|
|
|
|
|
.warning-card.critical {
|
|
|
border-left-color: #f44336;
|
|
|
}
|
|
|
|
|
|
.warning-card.high {
|
|
|
border-left-color: #ff9800;
|
|
|
}
|
|
|
|
|
|
.warning-card.medium {
|
|
|
border-left-color: #ffeb3b;
|
|
|
}
|
|
|
|
|
|
.warning-card.low {
|
|
|
border-left-color: #4caf50;
|
|
|
}
|
|
|
|
|
|
.warning-icon {
|
|
|
width: 40px;
|
|
|
height: 40px;
|
|
|
border-radius: 50%;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
color: white;
|
|
|
font-size: 18px;
|
|
|
}
|
|
|
|
|
|
.warning-card.critical .warning-icon {
|
|
|
background: #f44336;
|
|
|
}
|
|
|
|
|
|
.warning-card.high .warning-icon {
|
|
|
background: #ff9800;
|
|
|
}
|
|
|
|
|
|
.warning-card.medium .warning-icon {
|
|
|
background: #ffeb3b;
|
|
|
color: #333;
|
|
|
}
|
|
|
|
|
|
.warning-card.low .warning-icon {
|
|
|
background: #4caf50;
|
|
|
}
|
|
|
|
|
|
.warning-info {
|
|
|
flex: 1;
|
|
|
}
|
|
|
|
|
|
.warning-number {
|
|
|
font-size: 24px;
|
|
|
font-weight: bold;
|
|
|
color: #e0e0e0;
|
|
|
margin-bottom: 5px;
|
|
|
}
|
|
|
|
|
|
.warning-label {
|
|
|
color: #b0bec5;
|
|
|
font-size: 14px;
|
|
|
}
|
|
|
|
|
|
.warning-types {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
|
|
|
gap: 20px;
|
|
|
}
|
|
|
|
|
|
.warning-type-card {
|
|
|
background: #1a2332;
|
|
|
border: 1px solid #2a3f5f;
|
|
|
border-radius: 12px;
|
|
|
padding: 20px;
|
|
|
}
|
|
|
|
|
|
.warning-type-card h4 {
|
|
|
color: #64b5f6;
|
|
|
margin: 0 0 15px 0;
|
|
|
font-size: 18px;
|
|
|
}
|
|
|
|
|
|
.warning-grid {
|
|
|
display: grid;
|
|
|
gap: 10px;
|
|
|
}
|
|
|
|
|
|
/* 统计分析样式 */
|
|
|
.statistics-layout {
|
|
|
padding: 20px;
|
|
|
max-width: 1400px;
|
|
|
margin: 0 auto;
|
|
|
}
|
|
|
|
|
|
.statistics-header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
margin-bottom: 30px;
|
|
|
padding-bottom: 20px;
|
|
|
border-bottom: 2px solid #2a3f5f;
|
|
|
}
|
|
|
|
|
|
.statistics-header h3 {
|
|
|
color: #64b5f6;
|
|
|
font-size: 24px;
|
|
|
margin: 0;
|
|
|
}
|
|
|
|
|
|
.statistics-actions {
|
|
|
display: flex;
|
|
|
gap: 10px;
|
|
|
align-items: center;
|
|
|
}
|
|
|
|
|
|
.time-range-select {
|
|
|
padding: 8px 12px;
|
|
|
background: #2a3f5f;
|
|
|
border: 1px solid #3a5f7f;
|
|
|
border-radius: 6px;
|
|
|
color: #e0e0e0;
|
|
|
font-size: 14px;
|
|
|
}
|
|
|
|
|
|
.kpi-cards {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
|
gap: 20px;
|
|
|
margin-bottom: 30px;
|
|
|
}
|
|
|
|
|
|
.kpi-card {
|
|
|
background: linear-gradient(135deg, #1e3a5f 0%, #2a4a6b 100%);
|
|
|
border: 1px solid #3a5f7f;
|
|
|
border-radius: 12px;
|
|
|
padding: 20px;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 15px;
|
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
|
|
|
|
.kpi-card:hover {
|
|
|
transform: translateY(-2px);
|
|
|
box-shadow: 0 8px 25px rgba(100, 181, 246, 0.2);
|
|
|
}
|
|
|
|
|
|
.kpi-icon {
|
|
|
width: 50px;
|
|
|
height: 50px;
|
|
|
border-radius: 50%;
|
|
|
background: linear-gradient(135deg, #64b5f6, #42a5f5);
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
color: white;
|
|
|
font-size: 20px;
|
|
|
}
|
|
|
|
|
|
.kpi-info {
|
|
|
flex: 1;
|
|
|
}
|
|
|
|
|
|
.kpi-value {
|
|
|
font-size: 28px;
|
|
|
font-weight: bold;
|
|
|
color: #64b5f6;
|
|
|
margin-bottom: 5px;
|
|
|
}
|
|
|
|
|
|
.kpi-label {
|
|
|
color: #b0bec5;
|
|
|
font-size: 14px;
|
|
|
margin-bottom: 5px;
|
|
|
}
|
|
|
|
|
|
.kpi-change {
|
|
|
font-size: 12px;
|
|
|
font-weight: 600;
|
|
|
}
|
|
|
|
|
|
.kpi-change.positive {
|
|
|
color: #4caf50;
|
|
|
}
|
|
|
|
|
|
.kpi-change.negative {
|
|
|
color: #f44336;
|
|
|
}
|
|
|
|
|
|
.charts-container {
|
|
|
display: grid;
|
|
|
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
|
|
|
gap: 20px;
|
|
|
}
|
|
|
|
|
|
.chart-card {
|
|
|
background: #1a2332;
|
|
|
border: 1px solid #2a3f5f;
|
|
|
border-radius: 12px;
|
|
|
padding: 20px;
|
|
|
}
|
|
|
|
|
|
.chart-card h4 {
|
|
|
color: #64b5f6;
|
|
|
margin: 0 0 15px 0;
|
|
|
font-size: 18px;
|
|
|
}
|
|
|
|
|
|
.chart-card canvas {
|
|
|
width: 100% !important;
|
|
|
height: 300px !important;
|
|
|
}
|
|
|
|
|
|
/* 通用按钮样式 */
|
|
|
.btn {
|
|
|
padding: 10px 20px;
|
|
|
border: none;
|
|
|
border-radius: 6px;
|
|
|
cursor: pointer;
|
|
|
font-size: 14px;
|
|
|
font-weight: 500;
|
|
|
display: inline-flex;
|
|
|
align-items: center;
|
|
|
gap: 8px;
|
|
|
transition: all 0.3s ease;
|
|
|
text-decoration: none;
|
|
|
}
|
|
|
|
|
|
.btn-primary {
|
|
|
background: linear-gradient(135deg, #64b5f6, #42a5f5);
|
|
|
color: white;
|
|
|
}
|
|
|
|
|
|
.btn-primary:hover {
|
|
|
background: linear-gradient(135deg, #42a5f5, #2196f3);
|
|
|
transform: translateY(-1px);
|
|
|
box-shadow: 0 4px 12px rgba(100, 181, 246, 0.3);
|
|
|
}
|
|
|
|
|
|
.btn-secondary {
|
|
|
background: #2a3f5f;
|
|
|
color: #b0bec5;
|
|
|
border: 1px solid #3a5f7f;
|
|
|
}
|
|
|
|
|
|
.btn-secondary:hover {
|
|
|
background: #3a5f7f;
|
|
|
color: #e0e0e0;
|
|
|
border-color: #4a6f8f;
|
|
|
}
|
|
|
|
|
|
/* 模态框样式 */
|
|
|
#modalContainer {
|
|
|
position: fixed;
|
|
|
top: 0;
|
|
|
left: 0;
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
background: rgba(0, 0, 0, 0.8);
|
|
|
display: none;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
z-index: 10000;
|
|
|
}
|
|
|
|
|
|
.modal {
|
|
|
background: #1a2332;
|
|
|
border: 1px solid #2a3f5f;
|
|
|
border-radius: 12px;
|
|
|
padding: 30px;
|
|
|
max-width: 600px;
|
|
|
width: 90%;
|
|
|
max-height: 80vh;
|
|
|
overflow-y: auto;
|
|
|
}
|
|
|
|
|
|
.modal h3 {
|
|
|
color: #64b5f6;
|
|
|
margin: 0 0 20px 0;
|
|
|
font-size: 20px;
|
|
|
}
|
|
|
|
|
|
.modal-close {
|
|
|
position: absolute;
|
|
|
top: 15px;
|
|
|
right: 15px;
|
|
|
background: none;
|
|
|
border: none;
|
|
|
color: #b0bec5;
|
|
|
font-size: 24px;
|
|
|
cursor: pointer;
|
|
|
padding: 5px;
|
|
|
}
|
|
|
|
|
|
.modal-close:hover {
|
|
|
color: #e0e0e0;
|
|
|
}
|
|
|
|
|
|
/* 新增响应式设计 */
|
|
|
@media (max-width: 1200px) {
|
|
|
.charts-container {
|
|
|
grid-template-columns: 1fr;
|
|
|
}
|
|
|
|
|
|
.warning-types {
|
|
|
grid-template-columns: 1fr;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@media (max-width: 992px) {
|
|
|
.workorder-stats,
|
|
|
.kpi-cards {
|
|
|
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
|
}
|
|
|
|
|
|
.device-grid {
|
|
|
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
|
}
|
|
|
|
|
|
.warning-overview {
|
|
|
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@media (max-width: 768px) {
|
|
|
.workorder-header,
|
|
|
.device-header,
|
|
|
.warning-header,
|
|
|
.statistics-header {
|
|
|
flex-direction: column;
|
|
|
gap: 15px;
|
|
|
align-items: flex-start;
|
|
|
}
|
|
|
|
|
|
.workorder-actions,
|
|
|
.device-actions,
|
|
|
.warning-actions,
|
|
|
.statistics-actions {
|
|
|
width: 100%;
|
|
|
justify-content: flex-start;
|
|
|
}
|
|
|
|
|
|
.device-categories {
|
|
|
justify-content: center;
|
|
|
}
|
|
|
|
|
|
.table-controls {
|
|
|
flex-direction: column;
|
|
|
gap: 10px;
|
|
|
}
|
|
|
|
|
|
.search-input {
|
|
|
max-width: 100%;
|
|
|
}
|
|
|
} |