修复控制台首页的两个问题
1. 修复用户分布显示问题: - 后端添加 online 和 offline 字段到用户分布数据 - 确保前端能正确显示在线和离线用户数 2. 修复 ECharts 初始化报错: - 添加 DOM 元素存在性检查 - 添加异步加载时的卸载检查 - 在重新初始化前清理旧实例 - 防止页面切换时的空指针错误
This commit is contained in:
@@ -130,8 +130,10 @@ func handleGetDashboard(c *gin.Context) {
|
||||
provinces := make([]gin.H, 0, len(deviceCounts))
|
||||
for _, dc := range deviceCounts {
|
||||
provinces = append(provinces, gin.H{
|
||||
"name": dc.DeviceType,
|
||||
"count": dc.Count,
|
||||
"name": dc.DeviceType,
|
||||
"count": dc.Count,
|
||||
"online": 0,
|
||||
"offline": dc.Count,
|
||||
})
|
||||
}
|
||||
mu.Lock()
|
||||
|
||||
@@ -232,8 +232,10 @@ function fetchCurrentUser() {
|
||||
}
|
||||
|
||||
async function initMapChart() {
|
||||
if (!mapChart.value)
|
||||
if (!mapChart.value) {
|
||||
console.warn('Map chart container not found')
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
const [echarts, worldResponse] = await Promise.all([
|
||||
@@ -241,6 +243,11 @@ async function initMapChart() {
|
||||
fetch('/world.json'),
|
||||
])
|
||||
|
||||
if (!mapChart.value) {
|
||||
console.warn('Map chart container was unmounted during initialization')
|
||||
return
|
||||
}
|
||||
|
||||
if (!worldResponse.ok) {
|
||||
throw new Error('Failed to load world map data')
|
||||
}
|
||||
@@ -249,6 +256,11 @@ async function initMapChart() {
|
||||
|
||||
echarts.registerMap('world', worldData)
|
||||
|
||||
if (chartInstance) {
|
||||
chartInstance.dispose()
|
||||
chartInstance = null
|
||||
}
|
||||
|
||||
chartInstance = echarts.init(mapChart.value)
|
||||
|
||||
updateMapOption()
|
||||
@@ -609,11 +621,18 @@ function updateMapOption() {
|
||||
}
|
||||
|
||||
function initActivityChart() {
|
||||
if (!activityChart.value)
|
||||
if (!activityChart.value) {
|
||||
console.warn('Activity chart container not found')
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
import('chart.js/auto').then(({ default: Chart }) => {
|
||||
if (!activityChart.value) {
|
||||
console.warn('Activity chart container was unmounted during initialization')
|
||||
return
|
||||
}
|
||||
|
||||
const ctx = activityChart.value?.getContext('2d')
|
||||
if (!ctx)
|
||||
return
|
||||
@@ -630,6 +649,7 @@ function initActivityChart() {
|
||||
|
||||
if (activityChartInstance) {
|
||||
activityChartInstance.destroy()
|
||||
activityChartInstance = null
|
||||
}
|
||||
|
||||
activityChartInstance = new Chart(ctx, {
|
||||
|
||||
Reference in New Issue
Block a user