diff --git a/src/main/resources/web/src/views/Dashboard.vue b/src/main/resources/web/src/views/Dashboard.vue index da337d8..b6ab024 100644 --- a/src/main/resources/web/src/views/Dashboard.vue +++ b/src/main/resources/web/src/views/Dashboard.vue @@ -318,7 +318,7 @@ const fetchStatsData = async () => { // 检查token是否存在 if (!token) { console.warn('未获取到 Token,跳转到登录页') - router.push('/login') + await router.push('/login') return } @@ -383,16 +383,15 @@ const fetchStatsData = async () => { } catch (error: any) { console.error('获取统计数据失败:', error) - const errorMsg = error.message?.includes('401') + error.message?.includes('401') ? '登录已过期,请重新登录' : error.message?.includes('Network') ? '网络连接失败,请检查网络' - : error.message || '获取数据失败,请稍后重试' - - // 如果是认证错误,登出并跳转到登录页 + : error.message || '获取数据失败,请稍后重试'; +// 如果是认证错误,登出并跳转到登录页 if (error.message?.includes('401')) { authStore.logout() - router.push('/login') + await router.push('/login') } } } @@ -408,7 +407,7 @@ const fetchAlertData = async () => { // 检查token是否存在 if (!token) { console.warn('未获取到 Token,跳转到登录页') - router.push('/login') + await router.push('/login') return } @@ -454,17 +453,15 @@ const fetchAlertData = async () => { latestAlert.value = null return } - - const errorMsg = error.message?.includes('401') + error.message?.includes('401') ? '登录已过期,请重新登录' : error.message?.includes('Network') ? '网络连接失败,请检查网络' - : error.message || '获取数据失败,请稍后重试' - - // 如果是认证错误,登出并跳转到登录页 + : error.message || '获取数据失败,请稍后重试'; +// 如果是认证错误,登出并跳转到登录页 if (error.message?.includes('401')) { authStore.logout() - router.push('/login') + await router.push('/login') } latestAlert.value = null } finally { @@ -473,46 +470,7 @@ const fetchAlertData = async () => { } // 查看告警详情 -const viewAlertDetail = (alert: Alert) => { - // 这里可以弹出详情对话框或跳转到详情页 - console.log('查看告警详情:', alert) - alert.alertMessage // 示例:显示告警详情 -} - // 处理告警 -const resolveAlert = async (alert: Alert) => { - console.log('处理告警:', alert) - // 这里可以调用后端接口处理告警 - // 示例:调用处理告警的API - try { - const result = await request>( - `/api/alerts/${alert.alertId}/resolve`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - resolvedBy: authStore.userInfo?.username || 'current_user' - }) - } - ) - - if (result.code === 200) { - // 更新本地状态 - 添加安全检查 - const index = allAlerts.value.findIndex(a => a.alertId === alert.alertId) - if (index !== -1 && allAlerts.value[index]) { - allAlerts.value[index].status = 'processing' - console.log('告警状态已更新') - } else { - console.warn(`未找到告警ID为 ${alert.alertId} 的记录`) - } - } - } catch (error) { - console.error('处理告警失败:', error) - } -} - // 分页控制方法 const changePage = (page: number) => { if (page >= 1 && page <= totalPages.value) { @@ -737,26 +695,6 @@ onMounted(() => { min-width: 50px; } -.alert-level-badge.critical { - background: #ffebee; - color: #c62828; -} - -.alert-level-badge.error { - background: #ffebee; - color: #c62828; -} - -.alert-level-badge.warning { - background: #fff8e1; - color: #ff8f00; -} - -.alert-level-badge.info { - background: #e8f5e9; - color: #2e7d32; -} - .status-badge { display: inline-block; padding: 4px 8px; @@ -767,53 +705,6 @@ onMounted(() => { min-width: 60px; } -.status-badge.pending { - background: #fff3e0; - color: #ef6c00; -} - -.status-badge.processing { - background: #e3f2fd; - color: #1976d2; -} - -.status-badge.resolved { - background: #e8f5e9; - color: #2e7d32; -} - -.status-badge.closed { - background: #f5f5f5; - color: #666; -} - -.action-btn { - padding: 6px 12px; - border: none; - border-radius: 4px; - cursor: pointer; - font-size: 12px; - margin-right: 4px; -} - -.view-btn { - background: #2196f3; - color: white; -} - -.view-btn:hover { - background: #1976d2; -} - -.resolve-btn { - background: #4caf50; - color: white; -} - -.resolve-btn:hover { - background: #388e3c; -} - /* 分页样式 */ .pagination-controls { display: flex; @@ -945,20 +836,6 @@ onMounted(() => { color: #666; } -.chart-placeholder { - height: 200px; - display: flex; - align-items: center; - justify-content: center; - background: #f8f9fa; - border-radius: 4px; -} - -.placeholder-text { - text-align: center; - color: #666; -} - @media (max-width: 768px) { .stats-grid { grid-template-columns: repeat(2, 1fr); diff --git a/src/main/resources/web/src/views/equipment/WaterMaker.vue b/src/main/resources/web/src/views/equipment/WaterMaker.vue index bd25ebc..3aa1665 100644 --- a/src/main/resources/web/src/views/equipment/WaterMaker.vue +++ b/src/main/resources/web/src/views/equipment/WaterMaker.vue @@ -384,7 +384,7 @@ const loadDevices = async (): Promise => { const token = authStore.token if (!token) { console.warn('未获取到 Token,跳转到登录页') - router.push('/login') + await router.push('/login') return } @@ -418,7 +418,7 @@ const loadDevices = async (): Promise => { console.error('加载设备数据失败:', error) if ((error as Error).message.includes('401')) { authStore.logout() - router.push('/login') + await router.push('/login') } } } @@ -429,7 +429,7 @@ const loadCityList = async (): Promise => { const token = authStore.token if (!token) { console.warn('未获取到 Token,跳转到登录页') - router.push('/login') + await router.push('/login') return } @@ -456,7 +456,7 @@ const loadCityList = async (): Promise => { cityList.value = [] if ((error as Error).message.includes('401')) { authStore.logout() - router.push('/login') + await router.push('/login') } } } @@ -467,7 +467,7 @@ const loadCampusListByCity = async (cityId: string): Promise => { const token = authStore.token if (!token) { console.warn('未获取到 Token,跳转到登录页') - router.push('/login') + await router.push('/login') return } @@ -494,7 +494,7 @@ const loadCampusListByCity = async (cityId: string): Promise => { campusList.value = [] if ((error as Error).message.includes('401')) { authStore.logout() - router.push('/login') + await router.push('/login') } } } @@ -505,7 +505,7 @@ const loadEditCampusListByCity = async (cityId: string): Promise => { const token = authStore.token if (!token) { console.warn('未获取到 Token,跳转到登录页') - router.push('/login') + await router.push('/login') return } @@ -532,7 +532,7 @@ const loadEditCampusListByCity = async (cityId: string): Promise => { editCampusList.value = [] if ((error as Error).message.includes('401')) { authStore.logout() - router.push('/login') + await router.push('/login') } } } @@ -641,17 +641,7 @@ const viewDevice = (id: string) => { } // 显示离线模态框 -const showOfflineModal = (deviceId: string) => { - currentDeviceId.value = deviceId - showOfflineReasonModal.value = true -} - // 显示故障模态框 -const showFaultModalFunc = (deviceId: string) => { - currentDeviceId.value = deviceId - showFaultModal.value = true -} - // 确认设置为离线 const confirmOffline = async () => { try { @@ -659,7 +649,7 @@ const confirmOffline = async () => { const token = authStore.token if (!token) { console.warn('未获取到 Token,跳转到登录页') - router.push('/login') + await router.push('/login') return } @@ -684,7 +674,7 @@ const confirmOffline = async () => { alert('设置设备离线失败') if ((error as Error).message.includes('401')) { authStore.logout() - router.push('/login') + await router.push('/login') } } } @@ -696,7 +686,7 @@ const confirmFault = async () => { const token = authStore.token if (!token) { console.warn('未获取到 Token,跳转到登录页') - router.push('/login') + await router.push('/login') return } @@ -721,66 +711,12 @@ const confirmFault = async () => { alert('设置设备故障失败') if ((error as Error).message.includes('401')) { authStore.logout() - router.push('/login') + await router.push('/login') } } } // 更新设备状态为在线 -const updateDeviceStatus = async (deviceId: string, status: string) => { - try { - // 显式检查token - const token = authStore.token - if (!token) { - console.warn('未获取到 Token,跳转到登录页') - router.push('/login') - return - } - - let url = '' - let body = {} - - switch (status) { - case 'online': - url = `/api/web/device-status/${deviceId}/online` - break - case 'offline': - url = `/api/web/device-status/${deviceId}/offline` - body = { reason: '手动设置为离线' } - break - case 'fault': - url = `/api/web/device-status/${deviceId}/fault` - body = { faultType: 'MANUAL', description: '手动设置为故障' } - break - default: - throw new Error('不支持的状态类型') - } - - const result = await request>(url, { - method: 'POST', - body: JSON.stringify(body) - }) - - if (result.code === 200) { - // 更新本地数据 - const device = devices.value.find(d => d.deviceId === deviceId) - if (device) { - device.status = status as DeviceStatus - } - alert(`设备已标记为${formatStatus(status as DeviceStatus)}`) - } else { - alert(`更新设备状态失败: ${result.message}`) - } - } catch (error) { - console.error('更新设备状态失败:', error) - alert('更新设备状态失败') - if ((error as Error).message.includes('401')) { - authStore.logout() - router.push('/login') - } - } -} - // 删除设备 const deleteDevice = async (deviceId: string) => { if (!confirm(`确定要删除设备 ${deviceId} 吗?此操作不可恢复。`)) { @@ -790,7 +726,7 @@ const deleteDevice = async (deviceId: string) => { try { const token = authStore.token if (!token) { - router.push('/login') + await router.push('/login') return } @@ -810,7 +746,7 @@ const deleteDevice = async (deviceId: string) => { alert('删除设备失败') if ((error as Error).message.includes('401')) { authStore.logout() - router.push('/login') + await router.push('/login') } } } @@ -850,7 +786,7 @@ const updateDevice = async () => { try { const token = authStore.token if (!token) { - router.push('/login') + await router.push('/login') return } @@ -875,7 +811,7 @@ const updateDevice = async () => { deviceType: editingDevice.value.deviceType } - const result = await request>('/api/web/device/edit', { + const result = await request('/api/web/device/edit', { method: 'PUT', body: JSON.stringify(deviceToUpdate) }) @@ -910,7 +846,7 @@ const updateDevice = async () => { alert('更新设备失败') if ((error as Error).message.includes('401')) { authStore.logout() - router.push('/login') + await router.push('/login') } } } @@ -922,7 +858,7 @@ const addDevice = async () => { const token = authStore.token if (!token) { console.warn('未获取到 Token,跳转到登录页') - router.push('/login') + await router.push('/login') return } @@ -948,7 +884,7 @@ const addDevice = async () => { } // 使用统一请求工具,自动携带token - const result = await request>('/api/web/device/add', { + const result = await request('/api/web/device/add', { method: 'POST', body: JSON.stringify(deviceToAdd) }) @@ -979,7 +915,7 @@ const addDevice = async () => { alert('添加设备失败') if ((error as Error).message.includes('401')) { authStore.logout() - router.push('/login') + await router.push('/login') } } } @@ -1096,34 +1032,6 @@ onMounted(async () => { background-color: #f8f9fa; } -.status-tag { - display: inline-block; - padding: 4px 8px; - border-radius: 4px; - font-size: 12px; - font-weight: 500; -} - -.status-tag.online { - background-color: #e6f7ee; - color: #00875a; -} - -.status-tag.offline { - background-color: #f5f5f5; - color: #8c8c8c; -} - -.status-tag.warning { - background-color: #fff7e6; - color: #d48806; -} - -.status-tag.fault { - background-color: #ffebe6; - color: #cf1322; -} - .operation-buttons { display: flex; gap: 8px; diff --git a/src/main/resources/web/src/views/equipment/WaterSupplier.vue b/src/main/resources/web/src/views/equipment/WaterSupplier.vue index 72802cc..48d7e12 100644 --- a/src/main/resources/web/src/views/equipment/WaterSupplier.vue +++ b/src/main/resources/web/src/views/equipment/WaterSupplier.vue @@ -290,7 +290,7 @@ const loadWaterSuppliers = async () => { const token = authStore.token if (!token) { console.warn('未获取到 Token,跳转到登录页') - router.push('/login') + await router.push('/login') return } @@ -327,7 +327,7 @@ const loadWaterSuppliers = async () => { alert('获取供水机列表失败,请检查网络连接'); if (error instanceof Error && error.message.includes('401')) { authStore.logout(); - router.push('/login'); + await router.push('/login'); } } } @@ -342,7 +342,7 @@ const loadAvailableMakers = async () => { try { const token = authStore.token if (!token) { - router.push('/login') + await router.push('/login') return } @@ -371,7 +371,7 @@ const loadAvailableMakers = async () => { availableMakers.value = [] if ((error as Error).message.includes('401')) { authStore.logout() - router.push('/login') + await router.push('/login') } } } @@ -386,7 +386,7 @@ const loadAvailableMakersForEdit = async () => { try { const token = authStore.token if (!token) { - router.push('/login') + await router.push('/login') return } @@ -785,34 +785,6 @@ onMounted(() => { background-color: #f8f9fa; } -.status-tag { - display: inline-block; - padding: 4px 8px; - border-radius: 4px; - font-size: 12px; - font-weight: 500; -} - -.status-tag.online { - background-color: #e6f7ee; - color: #00875a; -} - -.status-tag.offline { - background-color: #f5f5f5; - color: #8c8c8c; -} - -.status-tag.warning { - background-color: #fff7e6; - color: #d48806; -} - -.status-tag.error { - background-color: #ffebe6; - color: #cf1322; -} - .operation-buttons { display: flex; gap: 8px;