<template> <!-- 设备连接告警 --> <div class="leakage-cable"> <el-button-group> <el-button v-for="item in tabs" :key="item.key" :type="confirmStatus === item.key ? 'primary' : ''" @click="changeType(item)" >{{ item.label }}</el-button > </el-button-group> <div class="leakage-top"> <div style="color: #666666"></div> <div class="operate-btn"> <el-button type="primary" @click="getTableData">刷新</el-button> <el-button type="primary" @click="isQuery = !isQuery">查询</el-button> <el-button type="primary" @click="exportList">导出</el-button> </div> </div> <div v-if="isQuery"> <search @search="getTableData" /> </div> <el-table :data="tableData" style="width: 100%" :cell-class-name="cellClassFn" :header-cell-style="{ background: '#EAF1FE', color: '#666666' }" > <el-table-column prop="startPointDeviceName" label="网元设备" align="center" /> <el-table-column prop="connectStatusName" label="连接状态" align="center" /> <el-table-column prop="endPointDeviceName" label="网元设备" align="center" /> <el-table-column prop="uploadTime" label="上传时间" align="center" /> <el-table-column prop="confirmPerson" label="确认人" align="center" /> <el-table-column prop="confirmTime" label="确认时间" align="center" /> <el-table-column fixed="right" label="操作" align="center" width="100"> <template slot-scope="scope"> <el-button type="text" v-if="scope.row.confirmStatus === 1" @click="cancel2(scope.row)" >取消</el-button > <el-button type="text" v-else @click="confirm2(scope.row)" >确认</el-button > </template> </el-table-column> </el-table> <el-dialog title="告警详情" :visible.sync="centerDialogVisible" width="30%" center > <table style="margin: auto" class="device-detail-tb"> <tr style="line-height: 50px"> <td style="width: 150px"> <label class="particulars">网元设备:</label> </td> <td style="width: 180px; text-align: left"> <label v-text="dialogInfo.startPointDeviceName"></label> </td> </tr> <tr style="line-height: 50px"> <td style="width: 150px"> <label class="particulars">连接状态:</label> </td> <td style="width: 180px; text-align: left"> <label v-text="dialogInfo.connectStatusName"></label> </td> </tr> <tr style="line-height: 50px"> <td style="width: 150px"> <label class="particulars">网元设备:</label> </td> <td style="width: 180px; text-align: left"> <label v-text="dialogInfo.endPointDeviceName"></label> </td> </tr> <tr style="line-height: 50px"> <td style="width: 150px"> <label class="particulars">上传时间:</label> </td> <td style="width: 180px; text-align: left"> <label v-text="dialogInfo.uploadTime"></label> </td> </tr> </table> <span slot="footer" class="dialog-footer"> <el-button type="primary" v-if=" dialogInfo.confirmStatus === 1 && dialogInfo.connectStatusName === '连接正常' " @click="cancel(dialogInfo)" >取消告警</el-button > <el-button v-else-if="dialogInfo.confirmStatus !== 1" type="primary" @click="confirm(dialogInfo)" >确认告警</el-button > </span> </el-dialog> <Pagination :limit="params.size" :page="params.current" :total="total" class="pagination" @pagination="handlePageChange" /> </div> </template> <script> import { deviceList, deviceConfirm, deviceCancel } from "../api"; import { exportConnet } from "@/api/export"; import search from "@/views/monitor/equipment/components/search.vue"; import download from "@/utils/download"; export default { data() { return { dialogInfo: [], centerDialogVisible: false, confirmStatus: 2, params: { current: 1, size: 10, }, total: 10, tableData: [], tabs: [ { label: "全部", key: 2, }, { label: "已确认", key: 1, }, { label: "未确认", key: 0, }, ], isQuery: false, searchOption: {}, }; }, components: { search }, methods: { // 表格背景图颜色 cellClassFn({ row, column, rowIndex, columnIndex }) { if ( row.connectStatusName == "连接正常" && column.property == "connectStatusName" ) { return "green"; } if ( row.connectStatusName == "连接异常" && column.property == "connectStatusName" ) { return "red"; } if (rowIndex % 2 == 1) { return "stripe"; } }, handlePageChange(pageData) { this.params.size = pageData.size; this.params.current = pageData.page; this.getTableData(); }, getTableData(option) { let type = this.confirmStatus == 2 ? "" : this.confirmStatus; let param = { confirmStatus: type, ...this.params, ...option, }; deviceList(param).then((res) => { let list = res.records || []; this.tableData = list; this.total = res.total; }); }, confirm2(row) { this.centerDialogVisible = true; this.dialogInfo = row; }, confirm(dialogInfo) { let id = dialogInfo.id; deviceConfirm({ id: id }).then((res) => { this.getTableData(); }); this.centerDialogVisible = false }, cancel2(row) { this.centerDialogVisible = true; this.dialogInfo = row; }, cancel(dialogInfo) { let query = { connectStatusName: dialogInfo.connectStatusName, id: dialogInfo.id, }; deviceCancel(query).then((res) => { console.log(res); this.getTableData(); }); this.centerDialogVisible = false }, changeType(item) { this.confirmStatus = item.key; this.getTableData(); }, exportList() { let type = this.confirmStatus == 2 ? "" : this.confirmStatus; let param = { confirmStatus: type, ...this.params, ...this.searchOption, }; exportConnet(param).then((res) => { download(res, "vnd.ms-excel", `设备连接告警.xls`); }); }, }, mounted() { this.getTableData(); }, }; </script> <style lang="scss" scoped> .leakage-cable { .leakage-top { margin-bottom: 20px; display: flex; align-items: flex-end; justify-content: space-between; } & ::v-deep .cell { color: #333333; } & ::v-deep .stripe { background-color: #eaf1fe; } & ::v-deep .red { background-color: #f00; } & ::v-deep .green { background-color: green; } .page { display: flex; align-items: center; justify-content: center; margin: 20px 0; .pageNum { margin: 0 20px; } } } </style>