feat:实时报警信息对接接口

main
黄伟杰 7 days ago
parent 42953cfcc1
commit 19aeb6ca96

@ -0,0 +1,28 @@
import request from '@/config/axios'
// 实时报警记录 VO
export interface DeviceWarningRecordVO {
createTime: string
updateTime: string
creator: string
updater: string
deleted: boolean
id: number
deviceId: number
modelId: number
rule: string
alarmLevel: string
addressValue: string
ruleId: number
deviceName: string
modelName: string
ruleName: string
}
// 实时报警记录 API
export const DeviceWarningRecordApi = {
// 获得实时报警记录列表
getList: async () => {
return await request.get({ url: `/iot/device-warinning-record/getList` })
}
}

@ -165,7 +165,7 @@ service.interceptors.response.use(
'<div>5 分钟搭建本地环境</div>'
})
return Promise.reject(new Error(msg))
} else if (code !== 200) {
} else if (code !== 200 && code !== 0) {
if (msg === '无效的刷新令牌') {
// hard coding忽略这个提示直接登出
console.log(msg)

@ -29,25 +29,64 @@
<script setup lang="ts">
import { ref, onMounted, onUnmounted } from 'vue'
import { DeviceWarningRecordApi, DeviceWarningRecordVO } from '@/api/iot/deviceWarningRecord'
const alarms = ref([
{ time: '08:12:03', level: '严重', type: 'danger', msg: '产线B-包装工位异常停机' },
{ time: '08:15:27', level: '严重', type: 'danger', msg: '产线C-温控传感器漂移' },
{ time: '08:20:10', level: '警告', type: 'warn', msg: '产线A-物料待料' },
{ time: '08:35:42', level: '提示', type: 'safe', msg: '产线E-设备保养提醒' },
{ time: '08:40:18', level: '提示', type: 'safe', msg: '产线F-成品抽检合格' },
{ time: '09:02:56', level: '严重', type: 'danger', msg: '产线D-站点扫码失败' },
{ time: '09:15:12', level: '警告', type: 'warn', msg: '产线H-人员到岗不足' },
{ time: '09:26:33', level: '警告', type: 'warn', msg: '产线I-实时能耗升高' },
{ time: '09:37:05', level: '严重', type: 'danger', msg: '产线G-夹具寿命告警' },
{ time: '09:45:21', level: '警告', type: 'warn', msg: '产线J-物流滞后' }
])
const alarms = ref<any[]>([])
const isAnimating = ref(false)
const listRef = ref<HTMLElement | null>(null)
let timer: ReturnType<typeof setInterval> | null = null
onMounted(() => {
const getAlarms = async () => {
try {
const data = await DeviceWarningRecordApi.getList() || []
console.log('data',data)
alarms.value = data.map((item: DeviceWarningRecordVO) => {
//
let timeStr = ''
if (item.createTime) {
const d = new Date(item.createTime)
timeStr = d.toTimeString().slice(0, 8)
}
//
let type = 'safe'
let levelText = item.alarmLevel
if (item.alarmLevel === '2') {
type = 'danger'
levelText = '严重'
} else if (item.alarmLevel === '1') {
type = 'warn'
levelText = '警告'
} else if (item.alarmLevel === '0') {
type = 'safe'
levelText = '提示'
} else {
//
if (item.alarmLevel === '严重') type = 'danger'
else if (item.alarmLevel === '警告') type = 'warn'
else if (item.alarmLevel === '提示') type = 'safe'
}
return {
time: timeStr,
level: levelText,
type: type,
msg: `${item.deviceName}-${item.ruleName}`
}
})
startAnimation()
} catch (error) {
console.error('Failed to fetch alarms:', error)
}
}
const startAnimation = () => {
if (timer) clearInterval(timer)
if (alarms.value.length === 0) return
timer = setInterval(() => {
isAnimating.value = true
setTimeout(() => {
@ -58,6 +97,10 @@ onMounted(() => {
isAnimating.value = false
}, 360)
}, 3000)
}
onMounted(() => {
getAlarms()
})
onUnmounted(() => {

Loading…
Cancel
Save