index.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <template>
  2. <div class="home-container">
  3. <el-row :gutter="15" class="home-card-three">
  4. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  5. <div class="home-card-item" style="height: auto">
  6. <div class="home-card-item-title">
  7. <span>{{ $t('message.alarmList.title') }}</span>
  8. <el-button size="small" text type="primary" @click="toMore()">{{ $t('message.alarmList.moreInfo') }}</el-button>
  9. </div>
  10. <el-table :data="tableData.data" style="width: 100%" v-loading="loading">
  11. <el-table-column label="ID" align="center" prop="id" width="100" v-col="'ID'" />
  12. <!-- 告警类型 -->
  13. <el-table-column :label="$t('message.alarmCenter.columns.alarmType')" width="120" prop="type" align="center" show-overflow-tooltip v-col="'type'">
  14. <template #default="scope">
  15. <!-- 规则告警 -->
  16. <span v-if="scope.row.type == 1">{{ $t('message.alarmCenter.ruleAlarm') }}</span>
  17. <!-- 设备自主告警 -->
  18. <span v-else-if="scope.row.type == 2">{{ $t('message.alarmCenter.deviceSelfAlarm') }}</span>
  19. <!-- 规则侧告警升级 -->
  20. <span v-else-if="scope.row.type == 3">{{ $t('message.alarmCenter.ruleAlarmUpgrade') }}</span>
  21. <!-- 设备自主告警 -->
  22. <span v-else>{{ $t('message.alarmCenter.deviceSelfAlarm') }}</span>
  23. </template>
  24. </el-table-column>
  25. <!-- 规则级别 -->
  26. <el-table-column :label="$t('message.alarmCenter.columns.alarmLevel')" width="120" align="center" prop="alarmLevel.name" show-overflow-tooltip v-col="'alarmLevel'" />
  27. <!-- 规则名称 -->
  28. <el-table-column :label="$t('message.alarmCenter.columns.ruleName')" prop="ruleName" show-overflow-tooltip v-col="'ruleName'" />
  29. <!-- 产品标识 -->
  30. <el-table-column :label="$t('message.alarmCenter.columns.productKey')" prop="productKey" show-overflow-tooltip v-col="'productKey'" />
  31. <!-- 设备标识 -->
  32. <el-table-column :label="$t('message.alarmCenter.columns.deviceKey')" prop="deviceKey" show-overflow-tooltip v-col="'deviceKey'" />
  33. <!-- 告警状态 -->
  34. <el-table-column prop="status" :label="$t('message.alarmCenter.columns.alarmStatus')" width="120" align="center" v-col="'status'">
  35. <template #default="scope">
  36. <!-- 已处理 -->
  37. <el-tag type="success" size="small" v-if="scope.row.status">{{ $t('message.alarmCenter.status.processed') }}</el-tag>
  38. <!-- 未处理 -->
  39. <el-tag type="info" size="small" v-else>{{ $t('message.alarmCenter.status.unprocessed') }}</el-tag>
  40. </template>
  41. </el-table-column>
  42. <!-- 告警时间 -->
  43. <el-table-column prop="createdAt" :label="$t('message.alarmCenter.columns.alarmTime')" align="center" width="170" v-col="'createdAt'"></el-table-column>
  44. <!-- 操作 -->
  45. <el-table-column :label="$t('message.alarmCenter.columns.action')" width="130" align="center" fixed="right" v-col="'handle'">
  46. <template #default="scope">
  47. <!-- 详情 -->
  48. <el-button v-auth="'detail'" size="small" text type="primary" @click="onOpenDetailDic(scope.row)">{{ $t('message.alarmCenter.actions.detail') }}</el-button>
  49. <!-- 处理 -->
  50. <el-button v-auth="'edit'" size="small" text type="warning" @click="onOpenEditDic(scope.row)" v-if="scope.row.status == 0">{{ $t('message.alarmCenter.actions.handle') }}</el-button>
  51. </template>
  52. </el-table-column>
  53. </el-table>
  54. </div>
  55. </el-col>
  56. </el-row>
  57. <EditDic ref="editDicRef" @dataList="getAlarmList" />
  58. <DetailDic ref="detailRef" @dataList="getAlarmList" />
  59. </div>
  60. </template>
  61. <script lang="ts" setup>
  62. import { toRefs, reactive, onMounted, ref } from 'vue'
  63. import { useRouter } from 'vue-router'
  64. import api from '/@/api/datahub'
  65. import EditDic from '../log/component/edit.vue'
  66. import DetailDic from '../log/component/detail.vue'
  67. const editDicRef = ref()
  68. const detailRef = ref()
  69. const router = useRouter()
  70. const state = reactive({
  71. loading: false,
  72. tableData: {
  73. data: [],
  74. total: 0,
  75. loading: false,
  76. param: {
  77. pageNum: 1,
  78. pageSize: 20,
  79. status: '',
  80. dateRange: [],
  81. },
  82. },
  83. })
  84. const { loading, tableData } = toRefs(state)
  85. const getAlarmList = () => {
  86. api.iotManage.getAlarmList(state.tableData.param).then((res: any) => {
  87. state.tableData.data = res.list
  88. state.tableData.total = res.Total
  89. })
  90. }
  91. //打开详情页
  92. const onOpenDetailDic = (row: any) => {
  93. detailRef.value.openDialog(row)
  94. }
  95. // 打开修改产品弹窗
  96. const onOpenEditDic = (row: any) => {
  97. editDicRef.value.openDialog(row)
  98. }
  99. // 告警信息-更多信息
  100. const toMore = () => {
  101. router.push({ path: '/iotmanager/alarm/log' })
  102. }
  103. // 页面加载时
  104. onMounted(() => {
  105. getAlarmList()
  106. })
  107. </script>
  108. <style scoped lang="scss">
  109. .home-container {
  110. overflow: hidden;
  111. .home-card-one,
  112. .home-card-two,
  113. .home-card-three {
  114. .icoimg {
  115. width: 75px;
  116. height: 75px;
  117. }
  118. .title_status {
  119. width: 7px;
  120. height: 7px;
  121. background: #c1bbbb;
  122. border-radius: 50px;
  123. margin-right: 5px;
  124. }
  125. .home-card-item,
  126. .home-card-top {
  127. width: 100%;
  128. border-radius: 8px;
  129. transition: all ease 0.3s;
  130. padding: 10px 20px;
  131. overflow: hidden;
  132. background: var(--el-color-white);
  133. color: var(--el-text-color-primary);
  134. // border: 1px solid var(--next-border-color-light);
  135. &:hover {
  136. // box-shadow: 0 2px 12px var(--next-color-dark-hover);
  137. transition: all ease 0.3s;
  138. }
  139. &-icon {
  140. width: 70px;
  141. height: 70px;
  142. border-radius: 100%;
  143. flex-shrink: 1;
  144. i {
  145. color: var(--el-text-color-placeholder);
  146. }
  147. }
  148. &-title {
  149. font-size: 15px;
  150. font-weight: bold;
  151. height: 30px;
  152. }
  153. }
  154. }
  155. .home-card-three {
  156. .home-card-item-title {
  157. display: flex;
  158. justify-content: space-between;
  159. // span:nth-child(2) {
  160. // color: #409eff;
  161. // }
  162. }
  163. }
  164. }
  165. </style>