第一次美化

This commit is contained in:
kongduo
2026-06-11 19:18:48 +08:00
parent 57b0a46183
commit 06dfe98cb6
28 changed files with 1338 additions and 325 deletions

View File

@@ -5,7 +5,7 @@
<template>
<div
class="flex justify-between fixed top-0 left-0 right-0 z-10 h-16 bg-white text-slate-700 dark:text-slate-300 dark:bg-slate-900 shadow dark:shadow-gray-700 items-center px-2"
class="gva-tech-header flex justify-between fixed top-0 left-0 right-0 z-10 h-16 items-center px-2"
>
<div class="flex items-center cursor-pointer flex-1">
<div

View File

@@ -238,7 +238,7 @@
// 设备卡片容器
.container-device {
padding: 24px;
background-color: var(--el-bg-color, #f5f7fa);
background: transparent;
}
.device-grid {
@@ -246,25 +246,28 @@
grid-template-columns: repeat(auto-fill, minmax(330px, 1fr));
gap: 12px;
width: 100%;
background-color: var(--el-bg-color, #f5f7fa);
background: transparent;
}
.device-card {
background-color: var(--el-bg-color-overlay, #ffffff);
border-radius: 8px;
border-radius: 12px;
padding: 16px;
display: flex;
gap: 12px;
color: var(--el-text-color-regular, #303133);
color: var(--tech-text);
position: relative;
transition: all 0.3s ease;
border: 1px solid var(--el-border-color, #e4e7ed);
border: 1px solid rgba(0, 212, 255, 0.22);
background:
linear-gradient(135deg, rgba(9, 24, 48, 0.88), rgba(5, 16, 32, 0.76)),
radial-gradient(circle at 100% 0%, rgba(0, 212, 255, 0.08), transparent 34%);
box-shadow: inset 0 0 24px rgba(0, 212, 255, 0.05), 0 14px 34px rgba(0, 0, 0, 0.24);
align-items: center;
cursor: pointer;
&:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
border-color: var(--el-color-primary, #409eff);
border-color: rgba(0, 212, 255, 0.56);
box-shadow: 0 16px 34px rgba(0, 0, 0, 0.3), 0 0 24px rgba(0, 212, 255, 0.16);
}
}
@@ -311,11 +314,11 @@
top: -4px;
right: 0;
cursor: pointer;
color: var(--el-text-color-placeholder, #94a3b8);
color: rgba(220, 243, 255, 0.72);
font-size: 18px;
&:hover {
color: var(--el-text-color-primary, #303133);
color: #67e8f9;
}
}
@@ -328,7 +331,7 @@
.device-name {
font-size: 14px;
font-weight: 600;
color: var(--el-text-color-primary, #303133);
color: var(--tech-text-strong);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@@ -354,7 +357,7 @@
align-items: center;
gap: 4px;
font-size: 12px;
color: var(--el-text-color-regular, #606266);
color: #dceeff;
.el-icon {
font-size: 14px;

View File

@@ -196,6 +196,12 @@
import { LineChart } from 'echarts/charts'
import { TooltipComponent, GridComponent } from 'echarts/components'
import VChart from 'vue-echarts'
import {
techChartAxisLabel,
techChartAxisLine,
techChartSplitLine,
techChartTooltip
} from '@/utils/techChartTheme'
use([CanvasRenderer, LineChart, TooltipComponent, GridComponent])
@@ -317,9 +323,7 @@
const buildAlarmTrendOption = (dates = [], alarmCounts = []) => ({
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(255, 255, 255, 0.95)',
borderColor: '#e4e7ed',
textStyle: { color: '#303133' }
...techChartTooltip
},
grid: {
left: 48,
@@ -331,16 +335,16 @@
type: 'category',
data: dates,
boundaryGap: false,
axisLine: { lineStyle: { color: '#e4e7ed' } },
axisLabel: { color: '#909399', fontSize: 11 }
axisLine: techChartAxisLine,
axisLabel: techChartAxisLabel
},
yAxis: {
type: 'value',
minInterval: 1,
axisLine: { show: false },
axisTick: { show: false },
splitLine: { lineStyle: { color: '#f0f2f5' } },
axisLabel: { color: '#909399', fontSize: 11 }
...techChartSplitLine,
axisLabel: techChartAxisLabel
},
series: [
{
@@ -560,13 +564,13 @@
<style lang="scss" scoped>
.project-overview {
background-color: #f5f7fa;
padding: 12px;
display: flex;
flex-direction: column;
gap: 12px;
min-height: calc(100vh - 120px);
color: #303133;
min-height: calc(100% - 12px);
color: var(--tech-text);
background: transparent;
}
.top-panel {
@@ -581,10 +585,12 @@
.alarm-list,
.alarm-trend,
.alarm-card {
background: #ffffff;
border: 1px solid #e4e7ed;
border-radius: 6px;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
border: 1px solid rgba(0, 212, 255, 0.22);
border-radius: 12px;
background:
linear-gradient(135deg, rgba(9, 24, 48, 0.88), rgba(5, 16, 32, 0.76)),
radial-gradient(circle at 100% 0%, rgba(0, 212, 255, 0.08), transparent 34%);
box-shadow: inset 0 0 24px rgba(0, 212, 255, 0.05), 0 14px 34px rgba(0, 0, 0, 0.24);
}
.overview-card {
@@ -610,18 +616,18 @@
.tab {
font-size: 14px;
color: #909399;
color: var(--tech-text);
cursor: pointer;
padding-bottom: 6px;
position: relative;
transition: color 0.2s;
&:hover {
color: #409eff;
color: #67e8f9;
}
&.active {
color: #409eff;
color: #67e8f9;
font-weight: 600;
&::after {
@@ -631,29 +637,30 @@
left: 0;
right: 0;
height: 2px;
background: #409eff;
background: var(--tech-cyan);
border-radius: 1px;
box-shadow: 0 0 10px rgba(0, 212, 255, 0.5);
}
}
}
.fullscreen-icon {
color: #909399;
color: var(--tech-text-muted);
cursor: pointer;
font-size: 16px;
&:hover {
color: #409eff;
color: #67e8f9;
}
}
.map-container {
flex: 1;
min-height: 0;
border-radius: 6px;
border-radius: 8px;
overflow: hidden;
border: 1px solid #ebeef5;
background: #f0f2f5;
border: 1px solid rgba(0, 212, 255, 0.18);
background: rgba(2, 8, 23, 0.62);
}
.map-canvas {
@@ -673,7 +680,7 @@
.alarm-title {
font-size: 15px;
font-weight: 600;
color: #303133;
color: var(--tech-text-strong);
padding: 4px 8px;
}
@@ -714,7 +721,7 @@
.project-name {
font-size: 15px;
font-weight: 600;
color: #303133;
color: var(--tech-text-strong);
margin-bottom: 6px;
word-break: break-all;
}
@@ -724,7 +731,7 @@
align-items: flex-start;
gap: 4px;
font-size: 12px;
color: #909399;
color: var(--tech-text-muted);
line-height: 1.5;
.el-icon {
@@ -751,13 +758,14 @@
height: auto;
margin-right: 0;
padding: 12px;
border: 1px solid #e4e7ed;
border-radius: 6px;
border: 1px solid rgba(0, 212, 255, 0.18);
border-radius: 8px;
width: 100%;
background: rgba(2, 8, 23, 0.42);
&.is-checked {
border-color: #409eff;
background: #ecf5ff;
border-color: rgba(0, 212, 255, 0.56);
background: rgba(0, 212, 255, 0.12);
}
}
@@ -768,13 +776,13 @@
.project-option-name {
font-size: 14px;
font-weight: 600;
color: #303133;
color: var(--tech-text-strong);
margin-bottom: 4px;
}
.project-option-address {
font-size: 12px;
color: #909399;
color: var(--tech-text-muted);
line-height: 1.5;
}
@@ -831,7 +839,7 @@
.alarm-stat-label {
font-size: 12px;
color: #909399;
color: #dceeff;
line-height: 1.4;
}
@@ -839,7 +847,7 @@
font-size: 20px;
font-weight: bold;
font-family: 'DIN', 'Arial', sans-serif;
color: #303133;
color: var(--tech-text-strong);
line-height: 1.2;
&.danger {
@@ -855,7 +863,7 @@
display: flex;
justify-content: space-between;
font-size: 12px;
color: #909399;
color: #dceeff;
&.second-row {
margin-top: 4px;
@@ -875,7 +883,7 @@
}
.value-item {
color: #303133;
color: var(--tech-text-strong);
&.online {
color: #67c23a;
@@ -927,7 +935,7 @@
width: 48px;
height: 48px;
border-radius: 50%;
background: #ffffff;
background: rgba(5, 16, 32, 0.92);
}
}
@@ -940,7 +948,7 @@
width: 48px;
height: 48px;
border-radius: 50%;
background: #ffffff;
background: rgba(5, 16, 32, 0.92);
}
}
@@ -962,7 +970,7 @@
.process-label {
font-size: 11px;
color: #909399;
color: var(--tech-text-muted);
text-align: center;
}
@@ -982,7 +990,7 @@
.process-divider {
width: 1px;
height: 90px;
background: #e4e7ed;
background: rgba(0, 212, 255, 0.18);
margin: 0 12px;
}
@@ -1003,14 +1011,15 @@
gap: 6px;
font-size: 14px;
font-weight: 600;
color: #303133;
color: var(--tech-text-strong);
}
.dot {
width: 3px;
height: 14px;
background: #409eff;
background: var(--tech-cyan);
border-radius: 2px;
box-shadow: 0 0 10px rgba(0, 212, 255, 0.5);
}
.alarm-table {
@@ -1073,8 +1082,8 @@
display: flex;
align-items: flex-start;
gap: 4px;
background: #ffffff;
border: 1px solid #409eff;
background: rgba(5, 16, 32, 0.92);
border: 1px solid rgba(0, 212, 255, 0.56);
border-radius: 4px;
padding: 4px 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
@@ -1088,13 +1097,13 @@
.map-device-name {
font-size: 11px;
color: #303133;
color: var(--tech-text-strong);
font-weight: 600;
}
.map-device-sub {
font-size: 10px;
color: #909399;
color: var(--tech-text-muted);
}
@keyframes map-pulse {

View File

@@ -92,6 +92,14 @@
import { PieChart, LineChart } from 'echarts/charts'
import { TitleComponent, TooltipComponent, LegendComponent, GridComponent } from 'echarts/components'
import VChart from 'vue-echarts'
import {
techChartAxisLabel,
techChartAxisLine,
techChartCenterText,
techChartLegend,
techChartSplitLine,
techChartTooltip
} from '@/utils/techChartTheme'
import { ref, watch, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
@@ -176,15 +184,13 @@
return {
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(15, 23, 42, 0.9)',
borderColor: 'transparent',
textStyle: { color: '#fff' }
...techChartTooltip
},
legend: {
orient: 'horizontal',
top: 0,
left: 'center',
textStyle: { color: '#606266', fontSize: 12 }
...techChartLegend
},
grid: {
left: 36,
@@ -196,16 +202,16 @@
type: 'category',
data: dates,
boundaryGap: false,
axisLine: { lineStyle: { color: '#e4e7ed' } },
axisLabel: { color: '#909399', fontSize: 11 }
axisLine: techChartAxisLine,
axisLabel: techChartAxisLabel
},
yAxis: {
type: 'value',
minInterval: 1,
axisLine: { show: false },
axisTick: { show: false },
splitLine: { lineStyle: { color: '#f0f2f5' } },
axisLabel: { color: '#909399', fontSize: 11 }
...techChartSplitLine,
axisLabel: techChartAxisLabel
},
series: seriesData
}
@@ -230,7 +236,7 @@
orient: 'vertical',
right: 8,
top: 'middle',
textStyle: { color: '#606266', fontSize: 12 },
textStyle: techChartLegend.textStyle,
itemWidth: 10,
itemHeight: 10
},
@@ -245,7 +251,7 @@
labelLine: { show: false },
itemStyle: {
borderRadius: 6,
borderColor: '#fff',
borderColor: 'rgba(0, 212, 255, 0.22)',
borderWidth: 2
},
label: {
@@ -302,7 +308,7 @@
orient: 'vertical',
right: 8,
top: 'middle',
textStyle: { color: '#606266', fontSize: 12 },
textStyle: techChartLegend.textStyle,
itemWidth: 10,
itemHeight: 10
},
@@ -317,7 +323,7 @@
labelLine: { show: false },
itemStyle: {
borderRadius: 6,
borderColor: '#fff',
borderColor: 'rgba(0, 212, 255, 0.22)',
borderWidth: 2
},
// 中心文字
@@ -329,7 +335,7 @@
style: {
text: totalCount,
textAlign: 'center',
fill: '#303133',
fill: techChartCenterText.primary,
fontSize: 22,
fontWeight: 'bold'
}
@@ -341,7 +347,7 @@
style: {
text: '总数',
textAlign: 'center',
fill: '#909399',
fill: techChartCenterText.secondary,
fontSize: 12
}
}
@@ -404,16 +410,16 @@
type: 'category',
data: xAxisData,
boundaryGap: false,
axisLine: { lineStyle: { color: '#e4e7ed' } },
axisLabel: { color: '#909399', fontSize: 11 }
axisLine: techChartAxisLine,
axisLabel: techChartAxisLabel
},
yAxis: {
type: 'value',
minInterval: 1,
axisLine: { show: false },
axisTick: { show: false },
splitLine: { lineStyle: { color: '#f0f2f5' } },
axisLabel: { color: '#909399', fontSize: 11 }
...techChartSplitLine,
axisLabel: techChartAxisLabel
},
series: [
{
@@ -591,10 +597,16 @@
.alarm-table-box {
padding: 12px;
background: #ffffff;
border: 1px solid #e4e7ed;
border-radius: 6px;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
margin-top: 12px;
border: 1px solid rgba(0, 212, 255, 0.22);
border-radius: 12px;
background:
linear-gradient(135deg, rgba(9, 24, 48, 0.88), rgba(5, 16, 32, 0.76)),
radial-gradient(circle at 100% 0%, rgba(0, 212, 255, 0.08), transparent 34%);
box-shadow: inset 0 0 24px rgba(0, 212, 255, 0.05), 0 14px 34px rgba(0, 0, 0, 0.24);
}
.echarts-box .title {
color: var(--tech-text-strong);
}
</style>

View File

@@ -89,6 +89,13 @@
import { PieChart, LineChart } from 'echarts/charts'
import { TitleComponent, TooltipComponent, LegendComponent, GridComponent } from 'echarts/components'
import VChart from 'vue-echarts'
import {
techChartAxisLabel,
techChartAxisLine,
techChartLegend,
techChartSplitLine,
techChartTooltip
} from '@/utils/techChartTheme'
import { ref, watch, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
@@ -164,15 +171,13 @@
return {
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(15, 23, 42, 0.9)',
borderColor: 'transparent',
textStyle: { color: '#fff' }
...techChartTooltip
},
legend: {
orient: 'horizontal',
top: 0,
left: 'center',
textStyle: { color: '#606266', fontSize: 12 }
...techChartLegend
},
grid: {
left: 36,
@@ -184,16 +189,16 @@
type: 'category',
data: dates,
boundaryGap: false,
axisLine: { lineStyle: { color: '#e4e7ed' } },
axisLabel: { color: '#909399', fontSize: 11 }
axisLine: techChartAxisLine,
axisLabel: techChartAxisLabel
},
yAxis: {
type: 'value',
minInterval: 1,
axisLine: { show: false },
axisTick: { show: false },
splitLine: { lineStyle: { color: '#f0f2f5' } },
axisLabel: { color: '#909399', fontSize: 11 }
...techChartSplitLine,
axisLabel: techChartAxisLabel
},
series: seriesData
}
@@ -299,10 +304,16 @@
.alarm-table-box {
padding: 12px;
background: #ffffff;
border: 1px solid #e4e7ed;
border-radius: 6px;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
margin-top: 12px;
border: 1px solid rgba(0, 212, 255, 0.22);
border-radius: 12px;
background:
linear-gradient(135deg, rgba(9, 24, 48, 0.88), rgba(5, 16, 32, 0.76)),
radial-gradient(circle at 100% 0%, rgba(0, 212, 255, 0.08), transparent 34%);
box-shadow: inset 0 0 24px rgba(0, 212, 255, 0.05), 0 14px 34px rgba(0, 0, 0, 0.24);
}
.echarts-box .title {
color: var(--tech-text-strong);
}
</style>

View File

@@ -89,6 +89,13 @@
import { PieChart, LineChart } from 'echarts/charts'
import { TitleComponent, TooltipComponent, LegendComponent, GridComponent } from 'echarts/components'
import VChart from 'vue-echarts'
import {
techChartAxisLabel,
techChartAxisLine,
techChartLegend,
techChartSplitLine,
techChartTooltip
} from '@/utils/techChartTheme'
import { ref, watch, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
@@ -164,15 +171,13 @@
return {
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(15, 23, 42, 0.9)',
borderColor: 'transparent',
textStyle: { color: '#fff' }
...techChartTooltip
},
legend: {
orient: 'horizontal',
top: 0,
left: 'center',
textStyle: { color: '#606266', fontSize: 12 }
...techChartLegend
},
grid: {
left: 36,
@@ -184,16 +189,16 @@
type: 'category',
data: dates,
boundaryGap: false,
axisLine: { lineStyle: { color: '#e4e7ed' } },
axisLabel: { color: '#909399', fontSize: 11 }
axisLine: techChartAxisLine,
axisLabel: techChartAxisLabel
},
yAxis: {
type: 'value',
minInterval: 1,
axisLine: { show: false },
axisTick: { show: false },
splitLine: { lineStyle: { color: '#f0f2f5' } },
axisLabel: { color: '#909399', fontSize: 11 }
...techChartSplitLine,
axisLabel: techChartAxisLabel
},
series: seriesData
}
@@ -299,10 +304,16 @@
.alarm-table-box {
padding: 12px;
background: #ffffff;
border: 1px solid #e4e7ed;
border-radius: 6px;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
margin-top: 12px;
border: 1px solid rgba(0, 212, 255, 0.22);
border-radius: 12px;
background:
linear-gradient(135deg, rgba(9, 24, 48, 0.88), rgba(5, 16, 32, 0.76)),
radial-gradient(circle at 100% 0%, rgba(0, 212, 255, 0.08), transparent 34%);
box-shadow: inset 0 0 24px rgba(0, 212, 255, 0.05), 0 14px 34px rgba(0, 0, 0, 0.24);
}
.echarts-box .title {
color: var(--tech-text-strong);
}
</style>

View File

@@ -89,6 +89,13 @@
import { PieChart, LineChart } from 'echarts/charts'
import { TitleComponent, TooltipComponent, LegendComponent, GridComponent } from 'echarts/components'
import VChart from 'vue-echarts'
import {
techChartAxisLabel,
techChartAxisLine,
techChartLegend,
techChartSplitLine,
techChartTooltip
} from '@/utils/techChartTheme'
import { ref, watch, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
@@ -164,15 +171,13 @@
return {
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(15, 23, 42, 0.9)',
borderColor: 'transparent',
textStyle: { color: '#fff' }
...techChartTooltip
},
legend: {
orient: 'horizontal',
top: 0,
left: 'center',
textStyle: { color: '#606266', fontSize: 12 }
...techChartLegend
},
grid: {
left: 36,
@@ -184,16 +189,16 @@
type: 'category',
data: dates,
boundaryGap: false,
axisLine: { lineStyle: { color: '#e4e7ed' } },
axisLabel: { color: '#909399', fontSize: 11 }
axisLine: techChartAxisLine,
axisLabel: techChartAxisLabel
},
yAxis: {
type: 'value',
minInterval: 1,
axisLine: { show: false },
axisTick: { show: false },
splitLine: { lineStyle: { color: '#f0f2f5' } },
axisLabel: { color: '#909399', fontSize: 11 }
...techChartSplitLine,
axisLabel: techChartAxisLabel
},
series: seriesData
}
@@ -299,10 +304,16 @@
.alarm-table-box {
padding: 12px;
background: #ffffff;
border: 1px solid #e4e7ed;
border-radius: 6px;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
margin-top: 12px;
border: 1px solid rgba(0, 212, 255, 0.22);
border-radius: 12px;
background:
linear-gradient(135deg, rgba(9, 24, 48, 0.88), rgba(5, 16, 32, 0.76)),
radial-gradient(circle at 100% 0%, rgba(0, 212, 255, 0.08), transparent 34%);
box-shadow: inset 0 0 24px rgba(0, 212, 255, 0.05), 0 14px 34px rgba(0, 0, 0, 0.24);
}
.echarts-box .title {
color: var(--tech-text-strong);
}
</style>