告警表格化

pull/145/head
ZHW 2 months ago
parent 4aaad471e6
commit 74605b6de6

@ -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<ResultVO<any>>(
`/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);

@ -384,7 +384,7 @@ const loadDevices = async (): Promise<void> => {
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<void> => {
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<void> => {
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<void> => {
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<void> => {
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<void> => {
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<void> => {
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<void> => {
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<ResultVO<boolean>>(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<ResultVO<any>>('/api/web/device/edit', {
const result = await request<ResultVO>('/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<ResultVO<any>>('/api/web/device/add', {
const result = await request<ResultVO>('/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;

@ -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;

Loading…
Cancel
Save