Browse Source

所有的上报信息存储到日志

master
王梦远 2 weeks ago
parent
commit
5b0dd4529b
  1. 1
      src/app.vue
  2. 8
      src/components/system/ErrorEventsModal.vue
  3. 70
      src/layouts/default.vue
  4. 33
      src/stores/systemStore.ts
  5. 22
      src/types/system.d.ts

1
src/app.vue

@ -57,6 +57,7 @@ subscribeEvent('stateUpdate', (data) => {
}
else if (data.fromClass === 'AppCore') { //
deviceStateStore.setDeviceState(data.rely)
systemStore.insertLogs(data.rely.appEvents)
}
else if (data.fromClass === 'TestPageCtrlService') { //
debugStore.updateDebugPageState(data.rely)

8
src/components/system/ErrorEventsModal.vue

@ -2,13 +2,13 @@
import { ref, watchEffect } from 'vue'
import { syncSendCmd } from '@/apis/system'
import { useDeviceStore } from '@/stores/deviceStore'
// import { useDeviceStore } from '@/stores/deviceStore'
const deviceStore = useDeviceStore()
// const deviceStore = useDeviceStore()
const appEvents = ref<Record<string, any>[]>([])
watchEffect(() => {
appEvents.value = deviceStore.deviceStete.appEvents
// appEvents.value = deviceStore.deviceStete.appEvents
})
const confirmClose = (item: Record<string, any>) => {
@ -41,7 +41,7 @@ const confirmClose = (item: Record<string, any>) => {
{{ checkItem.ecodeInfo }}
</span>
</span>
<span v-else>{{ item.description || item.message }}</span>
<!-- <span v-else>{{ item.description || item.message }}</span> -->
<div class="actions">
<button class="delete-button" @click.stop="confirmClose(item)">
关闭

70
src/layouts/default.vue

@ -1,10 +1,8 @@
<script setup lang="ts">
import HomeAlarmSvg from 'assets/images/home/home-alarm.svg'
import WifiConnSvg from 'assets/images/wifi-conn.svg'
import WifiUnconnSvg from 'assets/images/wifi-unconn.svg'
import ErrorEventsModal from 'components/system/ErrorEventsModal.vue'
import NetReconnection from 'components/system/NetReconnection.vue'
// import ErrorBox from 'libs/modalUtil'
import { formatDateTime, openFullscreen } from 'libs/utils'
import { authRoutes } from 'router/routes'
import { useDeviceStore } from 'stores/deviceStore'
@ -149,6 +147,25 @@ const toggleLanguage = () => {
locale.value = locale.value === 'zh' ? 'en' : 'zh'
localStorage.setItem('locale', locale.value) //
}
const statusMap = {
info: {
type: 'primary',
name: '设备提示信息',
},
success: {
type: 'success',
name: '设备执行信息',
},
check: {
type: 'danger',
name: '设备错误信息',
},
warn: {
type: 'warning',
name: '设备告警信息',
},
}
</script>
<template>
@ -217,7 +234,7 @@ const toggleLanguage = () => {
</router-view>
</el-main>
</el-container>
<footer class="footer">
<!-- <footer class="footer">
<div class="ip-info">
IP : {{ deviceInfo.ip }}
</div>
@ -230,7 +247,52 @@ const toggleLanguage = () => {
<div class="time">
{{ currentTime }}
</div>
</footer>
</footer> -->
<el-footer class="footer">
<el-row>
<el-col :span="6">
<div class="ip-info">
IP : {{ deviceInfo.ip }}
</div>
</el-col>
<el-col :span="12">
<div class="footer-left">
<img src="../assets/images/run.svg" alt="">
<span v-if="!systemStore.systemLogList.length" class="text">设备运行状态</span>
<el-popover v-else width="auto" trigger="click" placement="top">
<template #reference>
<el-tag style="width: 100%" :type="statusMap[systemStore.systemLogList[0]?.status as keyof typeof statusMap].type">
{{ statusMap[systemStore.systemLogList[0]?.status as keyof typeof statusMap].name }}: {{ systemStore.systemLogList[0]?.name }}
{{ systemStore.systemLogList[0]?.time }}
</el-tag>
</template>
<template #default>
<div class="log-box">
<el-tag
v-for="(item, key) in systemStore.systemLogList"
:key
:type="statusMap[item?.status as keyof typeof statusMap].type"
>
<div style="display: flex;justify-content: space-between;width: 100%">
<span>
<span>{{ item.name }}: </span>
<span>{{ statusMap[item.status as keyof typeof statusMap].name }}</span>
</span>
<span>{{ item.time }}</span>
</div>
</el-tag>
</div>
</template>
</el-popover>
</div>
</el-col>
<el-col :span="6">
<div class="time">
{{ currentTime }}
</div>
</el-col>
</el-row>
</el-footer>
<NetReconnection />
<ErrorEventsModal />
</el-container>

33
src/stores/systemStore.ts

@ -1,3 +1,5 @@
import { ElMessage } from 'element-plus'
import { formatDateTime } from 'libs/utils'
import { defineStore } from 'pinia'
import { ref } from 'vue'
@ -8,7 +10,32 @@ export const useSystemStore = defineStore('system', () => {
const systemUser = ref({
username: '',
})
const systemLogList = ref<System.SystemLog[]>([])
const insertLog = (log: System.SystemLog) => {
systemLogList.value.unshift(log)
systemLogList.value = systemLogList.value.slice(0, 200)
}
const insertLogs = (appEvents: System.appEvent[]) => {
appEvents.forEach((item) => {
if (item.type === 'AppCheckPointCheckFailEvent' && item.errCheckPoints) {
item.errCheckPoints.forEach((errCheckPoint) => {
const log: System.SystemLog = { name: `${errCheckPoint.ecodeInfo}(${errCheckPoint.ecode})`, status: 'check', time: formatDateTime('YYYY-MM-DD HH:mm:ss', Date.now()), uuid: item.uuid }
ElMessage.error(errCheckPoint.ecodeInfo)
insertLog(log)
})
}
if (item.type === 'AppWarningPromoptEvent') {
const log: System.SystemLog = { name: item.description || '', status: 'warn', time: formatDateTime('YYYY-MM-DD HH:mm:ss', Date.now()), uuid: item.uuid }
ElMessage.warning(item.description)
insertLog(log)
}
if (item.type === 'AppPromoptEvent') {
const log: System.SystemLog = { name: item.message || '', status: 'info', time: formatDateTime('YYYY-MM-DD HH:mm:ss', Date.now()), uuid: item.uuid }
ElMessage.warning(item.message)
insertLog(log)
}
})
}
const loginForm = ref({
name: import.meta.env.FT_NODE_ENV !== 'prod' ? 'admin' : '',
pwd: import.meta.env.FT_NODE_ENV !== 'prod' ? '9973' : '',
@ -102,9 +129,11 @@ export const useSystemStore = defineStore('system', () => {
loading,
websocketConnected,
systemTime,
systemLogList,
updateLoading,
updateConnected,
getSystemTime,
insertLog,
insertLogs,
}
})

22
src/types/system.d.ts

@ -17,4 +17,26 @@ declare namespace System {
fnName: string
params?: Record<string, any> // 改为可选属性,搭配后面的默认值处理
}
interface SystemLog {
name: string
status: 'check' | 'info' | 'warn' | 'success'
time: string
uuid: string
}
interface appEvent {
description?: string
message?: string
type: 'AppWarningPromoptEvent' | 'AppPromoptEvent' | 'AppCheckPointCheckFailEvent'
uuid: string
ecode?: number
traceinfo?: string
errCheckPoints?: errCheckPoint[]
}
interface errCheckPoint {
ecode: number
ecodeInfo: string
index: number
name: string
passed: boolean
}
}
Loading…
Cancel
Save