332 lines
8.2 KiB
Vue
332 lines
8.2 KiB
Vue
<template>
|
||
<div class="top-right-box">
|
||
<ItemBox :title="$t('dashboard.realtimeAlarm')">
|
||
<div v-loading="loading" class="box">
|
||
<div class="alarm-list">
|
||
<template v-if="listData.length">
|
||
<div v-for="(item, index) in listData" :key="index" :class="index % 2 ? 'item1' : 'item'">
|
||
<div class="alarm-title">
|
||
<div class="dev">
|
||
<span class="title">{{ $t('dashboard.device') }}:</span>
|
||
<span class="value">{{ item.deviceName }}</span>
|
||
</div>
|
||
<div class="time-box">
|
||
<div class="time">{{ item.createTime }}</div>
|
||
</div>
|
||
<div class="leve">
|
||
<span :class="item.name === '异常' ? 'leve-value' : 'leve-value2'">{{ item.name }}</span>
|
||
</div>
|
||
</div>
|
||
<div class="bottom">
|
||
<span class="content">{{ item.description }}</span>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
<div v-else style="height:100%;text-align:center;font-size:14px;color:#999;display: flex;justify-content: center;align-items: center;">
|
||
{{ $t('screen.runSuccess' ) }}
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</ItemBox>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import { GetAlarmList } from '@/api/alarm/realtime'
|
||
export default {
|
||
name: 'Index',
|
||
props: {
|
||
stationId: {
|
||
type: Number,
|
||
default: 0
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
config: {
|
||
header: ['等级', '内容', '时间'],
|
||
data: [],
|
||
columnWidth: [80],
|
||
align: ['center', 'center', 'center', 'center'],
|
||
headerBGC: '#062b40',
|
||
oddRowBGC: 'rgba(255, 255, 255, 0)',
|
||
evenRowBGC: 'rgba(255, 255, 255, 0.05)'
|
||
},
|
||
pageflag: false,
|
||
listData: [],
|
||
loading: false
|
||
}
|
||
},
|
||
computed: {
|
||
eventLevels() {
|
||
return this.$store.getters.dicts['eventLevel'] || []
|
||
},
|
||
eventTypes() {
|
||
return this.$store.getters.dicts['eventType'] || []
|
||
}
|
||
},
|
||
watch: {},
|
||
created() {
|
||
// this.GetAlarmList()
|
||
},
|
||
mounted() {
|
||
// this.getData()
|
||
},
|
||
methods: {
|
||
oldsortData(data) {
|
||
const result = data.sort(function(a, b) {
|
||
return b.createTime - a.createTime
|
||
})
|
||
return result
|
||
},
|
||
async getData() {
|
||
this.loading = true
|
||
this.pageflag = false
|
||
const params = {
|
||
pageNum: 1,
|
||
pageSize: 50,
|
||
status: 0,
|
||
stationIds: this.stationId ? [this.stationId] : [],
|
||
deviceTypeList: [],
|
||
description: '',
|
||
eventLevels: ['1', '2', '3'],
|
||
eventTypes: ['2', '3', '4', '5', '6']
|
||
}
|
||
this.config.data = []
|
||
try {
|
||
const res = await GetAlarmList(params)
|
||
// const sortDataRes = this.oldsortData(res.data.list)
|
||
const chartData = []
|
||
res.data.list.forEach(item => {
|
||
const eventLevel = this.getEventLevelsname(item.eventLevel)
|
||
const lastIndex = item.timeStamp.lastIndexOf('.')
|
||
const result = item.timeStamp.slice(0, lastIndex)
|
||
item.timeStamp = result
|
||
|
||
const i = {
|
||
name: eventLevel,
|
||
deviceName: item.name,
|
||
description: item.description,
|
||
createTime: item.timeStamp
|
||
}
|
||
chartData.push(i)
|
||
})
|
||
// console.log(chartData)
|
||
this.listData = chartData
|
||
|
||
this.pageflag = true
|
||
} catch (error) {
|
||
// console.log(error);
|
||
} finally {
|
||
this.loading = false
|
||
}
|
||
},
|
||
getEventLevelsname(item) {
|
||
return (
|
||
this.eventLevels.find(level => Number(level.value) === item).label || ''
|
||
)
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
.top-right-box{
|
||
width: 100%;
|
||
height: 100%;
|
||
overflow: hidden;
|
||
.box {
|
||
width: 100%;
|
||
height: 100%;
|
||
padding: 10px;
|
||
padding-bottom: 0;
|
||
overflow-y: auto;
|
||
overflow-x: hidden;
|
||
font-family: Source Han Sans CN;
|
||
|
||
.top-box {
|
||
width: 100%;
|
||
height: 30px;
|
||
line-height: 30px;
|
||
}
|
||
|
||
.alarm-list {
|
||
width: 100%;
|
||
height: 100%;
|
||
margin: 0 auto;
|
||
overflow: auto;
|
||
|
||
.alarm-title {
|
||
display: flex;
|
||
width: 100%;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
|
||
.dev {
|
||
flex: 1;
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
|
||
.title {
|
||
display: inline-block;
|
||
|
||
font-family: Source Han Sans CN;
|
||
font-size: 14px;
|
||
font-weight: normal;
|
||
text-align: center;
|
||
letter-spacing: 0px;
|
||
|
||
color: rgba(206, 235, 255, 0.7);
|
||
|
||
}
|
||
|
||
.value {
|
||
|
||
font-family: Source Han Sans CN;
|
||
font-size: 14px;
|
||
font-weight: normal;
|
||
letter-spacing: 0px;
|
||
|
||
color: rgba(206, 235, 255, 0.7);
|
||
width: calc(100% - 45px);
|
||
display: -webkit-box; //将盒子转换为弹性盒子
|
||
-webkit-box-orient: vertical; //文本显示方式,默认水平
|
||
-webkit-line-clamp: 1; //设置显示多少行
|
||
overflow: hidden;
|
||
}
|
||
|
||
.time {
|
||
/* 12:33:17 */
|
||
|
||
opacity: 1;
|
||
|
||
font-family: Source Han Sans CN;
|
||
font-size: 14px;
|
||
font-weight: normal;
|
||
letter-spacing: 0px;
|
||
|
||
color: #ffffff;
|
||
|
||
z-index: 1;
|
||
}
|
||
}
|
||
|
||
.time-box {
|
||
min-width: 117px;
|
||
height: 100%;
|
||
/* 设备:PCS */
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
margin-right: 5px;
|
||
|
||
.title {
|
||
font-family: Source Han Sans CN;
|
||
font-size: 14px;
|
||
font-weight: normal;
|
||
text-align: center;
|
||
letter-spacing: 0px;
|
||
flex-shrink: 0;
|
||
|
||
color: rgba(206, 235, 255, 0.7);
|
||
}
|
||
|
||
.time {
|
||
/* 12:33:17 */
|
||
|
||
opacity: 1;
|
||
|
||
font-family: Source Han Sans CN;
|
||
font-size: 14px;
|
||
font-weight: normal;
|
||
letter-spacing: 0px;
|
||
|
||
color: rgba(206, 235, 255, 0.7);
|
||
|
||
z-index: 1;
|
||
display: -webkit-box; //将盒子转换为弹性盒子
|
||
-webkit-box-orient: vertical; //文本显示方式,默认水平
|
||
-webkit-line-clamp: 1; //设置显示多少行
|
||
overflow: hidden;
|
||
}
|
||
}
|
||
|
||
.leve {
|
||
// width: 20%;
|
||
margin-left: auto;
|
||
|
||
height: 100%;
|
||
/* 异常 */
|
||
text-align: center;
|
||
opacity: 1;
|
||
font-family: Source Han Sans CN;
|
||
font-size: 14px;
|
||
font-weight: normal;
|
||
letter-spacing: 0em;
|
||
color: #ffeeee;
|
||
text-shadow: 0px 0px 5px 0px #ff0000, 0px 0px 5px 0px #ffb800;
|
||
|
||
.leve-value {
|
||
display: inline-block;
|
||
width: 40px;
|
||
background: url(../../../../assets/images/alarm-error.png) no-repeat;
|
||
background-size: 100% 100%;
|
||
}
|
||
|
||
.leve-value2 {
|
||
display: inline-block;
|
||
width: 40px;
|
||
background: url(../../../../assets/images/alarm-error-2.png) no-repeat;
|
||
background-size: 100% 100%;
|
||
}
|
||
}
|
||
}
|
||
|
||
.bottom {
|
||
width: 100%;
|
||
margin-top: 10px;
|
||
padding: 5px;
|
||
display: flex;
|
||
align-items: center;
|
||
background-image: url('../../../../assets/images/alarm-con-bg.png');
|
||
background-size: 100% 100%;
|
||
|
||
.content {
|
||
/* 这是内容这是内容这是内容这是内容这是内容这 */
|
||
|
||
opacity: 1;
|
||
|
||
font-family: Source Han Sans CN;
|
||
font-size: 14px;
|
||
font-weight: normal;
|
||
letter-spacing: 0px;
|
||
|
||
color: rgba(255, 255, 255, 1);
|
||
|
||
display: inline-block;
|
||
}
|
||
}
|
||
|
||
.item {
|
||
width: 100%;
|
||
padding: 5px 10px;
|
||
background-color: #0c3650;
|
||
background-size: 100% 100%;
|
||
margin-bottom: 10px;
|
||
|
||
}
|
||
|
||
.item1 {
|
||
width: 100%;
|
||
padding: 5px 10px;
|
||
margin-bottom: 10px;
|
||
background-color: transparent;
|
||
background-size: 100% 100%;
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</style>
|