| | |
| | | ord: 2, |
| | | level: 2, |
| | | }, |
| | | { |
| | | label: "告警处理记录", |
| | | name: "alarmVerifyHis", |
| | | src: "/OPSAllocation/alarmVerifyHis", |
| | | closable: true, |
| | | id: 10003, |
| | | menuId: 10, |
| | | enableduse: true, |
| | | ord: 3, |
| | | level: 2, |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | |
| | | meta: { |
| | | title: '审批', |
| | | } |
| | | }, { |
| | | path: 'alarmVerifyHis', |
| | | name: 'alarmVerifyHis', |
| | | component: (resolve) => { |
| | | require(['@/views/OpsAllocation/alarmVerifyHis'], resolve) |
| | | }, |
| | | meta: { |
| | | title: '告警处理记录', |
| | | } |
| | | }] |
| | | }, |
| | | // 强制刷新空界面 |
New file |
| | |
| | | <template> |
| | | <flex-layout> |
| | | <div slot="header"> |
| | | <div class="table-layout filter-box-table"> |
| | | <div class="table-row"> |
| | | <div class="table-cell text-right">省:</div> |
| | | <div class="table-cell"> |
| | | <el-select |
| | | filterable |
| | | v-model="filters.values.province" |
| | | @change="searchCity" |
| | | size="small" |
| | | placeholder="请选择省" |
| | | > |
| | | <el-option |
| | | v-for="item in filters.data.province" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="table-cell text-right">市:</div> |
| | | <div class="table-cell"> |
| | | <el-select |
| | | filterable |
| | | v-model="filters.values.city" |
| | | @change="searchCounty" |
| | | size="small" |
| | | placeholder="请选择市" |
| | | > |
| | | <el-option |
| | | v-for="item in filters.data.city" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="table-cell text-right">区/县:</div> |
| | | <div class="table-cell"> |
| | | <el-select |
| | | filterable |
| | | v-model="filters.values.county" |
| | | @change="searchHome" |
| | | size="small" |
| | | placeholder="请选择区/县" |
| | | > |
| | | <el-option |
| | | v-for="item in filters.data.county" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="table-cell text-right">机房名称:</div> |
| | | <div class="table-cell w360"> |
| | | <el-select |
| | | filterable |
| | | v-model="filters.values.home" |
| | | @change="changeHome" |
| | | size="small" |
| | | placeholder="请选择机房名称" |
| | | > |
| | | <el-option |
| | | v-for="item in filters.data.home" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="table-cell text-right">告警类型:</div> |
| | | <div class="table-cell"> |
| | | <el-select |
| | | v-model="alarmType" |
| | | @change="verifyHisList" |
| | | size="small" |
| | | > |
| | | <el-option label="全部" :value="undefined"> </el-option> |
| | | <el-option label="电池告警" :value="1"> </el-option> |
| | | <el-option label="设备告警" :value="2"> </el-option> |
| | | <el-option label="电源告警" :value="3"> </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="table-cell text-right">处理时间:</div> |
| | | <div class="table-cell"> |
| | | <el-date-picker |
| | | v-model="startDrsj" |
| | | size="small" |
| | | class="time_box" |
| | | :picker-options="pickerOptions0" |
| | | type="date" |
| | | placeholder="选择日期" |
| | | value-format="yyyy-MM-dd" |
| | | ></el-date-picker |
| | | >- |
| | | <el-date-picker |
| | | v-model="endDrsj" |
| | | size="small" |
| | | class="time_box" |
| | | :picker-options="pickerOptions1" |
| | | type="date" |
| | | placeholder="选择日期" |
| | | value-format="yyyy-MM-dd" |
| | | ></el-date-picker> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- 表单 --> |
| | | <div class="flex-page-content"> |
| | | <div class="batteryrHistoryquery" style="width: 100%; height: 100%"> |
| | | <el-table |
| | | stripe |
| | | size="small" |
| | | :data="table.datas" |
| | | height="100%" |
| | | class="tableCent" |
| | | ref="goodsDetailTable" |
| | | tooltip-effect="light" |
| | | > |
| | | <el-table-column :width="50" type="index" label="编号"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-for="header in table.headers" |
| | | :key="header.prop" |
| | | :prop="header.prop" |
| | | :label="header.label" |
| | | :width="header.width" |
| | | :min-width="header.minWidth" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="cztime" |
| | | fixed="right" |
| | | width="180px" |
| | | align="center" |
| | | label="操作" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <!-- <el-button |
| | | :disabled="!isCanDel" |
| | | type="danger" |
| | | size="mini" |
| | | @click="deleteUser(scope.row)" |
| | | >删除</el-button |
| | | > --> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <!-- 底部分页 --> |
| | | <div class="flex-page-footer" slot="footer"> |
| | | <div class="el-pagination-btns"> |
| | | <el-button |
| | | type="primary" |
| | | @click="historyArlm(false)" |
| | | round |
| | | size="mini" |
| | | icon="el-icon-search" |
| | | >查询</el-button |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | size="mini" |
| | | icon="el-icon-wallet" |
| | | @click="historyArlm(true)" |
| | | >导出</el-button |
| | | > |
| | | </div> |
| | | <el-pagination |
| | | class="pagess" |
| | | @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange" |
| | | :current-page="pageNum" |
| | | :page-sizes="[10, 20, 30, 50, 100]" |
| | | :page-size="pageSize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="total" |
| | | ></el-pagination> |
| | | <!-- <el-button type="primary" round size="mini" icon="el-icon-wallet">全部选中</el-button> --> |
| | | </div> |
| | | </flex-layout> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getProvinces, |
| | | searchCity, |
| | | searchCounty, |
| | | getStations, |
| | | } from "@/views/dataMager/js/power"; |
| | | import { verifyHisList } from "@/views/alarmMager/js/verify"; |
| | | // 引入导出表格 |
| | | import { isHasPermit } from "@/assets/js/tools"; |
| | | const ALARMTYPE = ["", "电池告警", "设备告警", "电源告警"]; |
| | | export default { |
| | | name: "batteryrHistoryquery", |
| | | components: {}, |
| | | data() { |
| | | let permits = this.$store.state.user.permits; |
| | | let isCanDel = isHasPermit("batt_alm_delete_permit", permits); |
| | | let thistime = new Date(); |
| | | let yy = thistime.getFullYear(); |
| | | let MM = thistime.getMonth() + 1; |
| | | let dd = thistime.getDate(); |
| | | let day1 = yy + "-" + MM + "-" + dd; |
| | | let startD = new Date(thistime.getTime() - 7 * 24 * 3600 * 1000).format( |
| | | "yyyy-MM-dd" |
| | | ); |
| | | return { |
| | | isCanDel: isCanDel, |
| | | usr_ids: "119001", |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | total: 0, |
| | | /* 日期 */ |
| | | startDrsj: startD, |
| | | endDrsj: day1, |
| | | pickerOptions0: { |
| | | disabledDate: (time) => { |
| | | if (this.endDrsj) { |
| | | return new Date(time.getTime()) > new Date(this.endDrsj); |
| | | } |
| | | }, |
| | | }, |
| | | pickerOptions1: { |
| | | disabledDate: (time) => { |
| | | return ( |
| | | new Date(time.getTime() + 24 * 60 * 60 * 1000) < |
| | | new Date(this.startDrsj) |
| | | ); |
| | | }, |
| | | }, |
| | | alarmType: undefined, |
| | | filters: { |
| | | values: { |
| | | province: "", |
| | | city: "", |
| | | county: "", |
| | | home: "", |
| | | }, |
| | | data: { |
| | | province: [], |
| | | city: [], |
| | | county: [], |
| | | home: [], |
| | | }, |
| | | }, |
| | | /* 表单 */ |
| | | table: { |
| | | headers: [ |
| | | { |
| | | prop: "stationNamex", |
| | | label: "机房名称", |
| | | minWidth: 320, |
| | | }, |
| | | { |
| | | prop: "alarmTypeName", |
| | | label: "告警类型", |
| | | width: 120, |
| | | }, |
| | | { |
| | | prop: "alarmName", |
| | | label: "告警名称", |
| | | width: 162, |
| | | }, |
| | | { |
| | | prop: "almStartTime", |
| | | label: "告警开始时间", |
| | | width: 180, |
| | | }, |
| | | { |
| | | prop: "createTime", |
| | | label: "告警处理时间", |
| | | width: 180, |
| | | }, |
| | | { |
| | | prop: "reason", |
| | | label: "处理描述", |
| | | width: 180, |
| | | }, |
| | | ], |
| | | datas: [], |
| | | }, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.searchProvince(); |
| | | this.verifyHisList(); |
| | | }, |
| | | computed: {}, |
| | | methods: { |
| | | changeHome () { |
| | | // 重置分页信息 |
| | | this.pageNum = 1; |
| | | // 查询数据 |
| | | this.verifyHisList(); |
| | | }, |
| | | verifyHisList() { |
| | | let param = { |
| | | pageNum: this.pageNum, pageSize: this.pageSize, |
| | | stationName1: this.filters.values.province, |
| | | stationName2: this.filters.values.city, |
| | | stationName3: this.filters.values.home, |
| | | stationName5: this.filters.values.county, |
| | | dealTimeStart: this.startDrsj + ' 00:00:00', |
| | | dealTimeEnd: this.endDrsj + ' 23:59:59', |
| | | alarmType: this.alarmType, |
| | | }; |
| | | verifyHisList(param) |
| | | .then((res) => { |
| | | let { code, data } = res.data; |
| | | let list = []; |
| | | let total = 0; |
| | | if (code) { |
| | | total = data.total; |
| | | list = data.list.map((v) => { |
| | | v.stationNamex = v.stationName5 + "-" + v.stationName3; |
| | | v.alarmTypeName = ALARMTYPE[v.alarmType] || "未知"; |
| | | return v; |
| | | }); |
| | | } |
| | | this.table.datas = list; |
| | | this.total = total; |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err); |
| | | }); |
| | | }, |
| | | searchProvince() { |
| | | // 查询省 |
| | | // this.loading = this.$layer.loading(1); |
| | | getProvinces().then((res) => { |
| | | res = res.data; |
| | | var data = []; |
| | | if (res.code) { |
| | | data = res.data.map((v) => { |
| | | return { |
| | | label: v, |
| | | value: v, |
| | | }; |
| | | }); |
| | | } |
| | | let len = data.length; |
| | | // 设置第一笔数据 |
| | | data.unshift({ |
| | | label: "全部(共" + len + "种)", |
| | | value: "", |
| | | }); |
| | | // 设置省 |
| | | this.filters.data.province = data; |
| | | // 查询市 |
| | | this.searchCity(); |
| | | }); |
| | | }, |
| | | searchCity() { |
| | | // 查询市 |
| | | // 重置值 |
| | | this.filters.values.city = this.isAutoLoad ? this.$route.query.city : ""; |
| | | this.filters.values.county = this.isAutoLoad |
| | | ? this.$route.query.county |
| | | : ""; |
| | | this.filters.values.home = this.isAutoLoad ? this.$route.query.home : ""; |
| | | // 构造查询条件 |
| | | let searchParams = { |
| | | stationName1: this.filters.values.province, |
| | | }; |
| | | // 请求后台 |
| | | searchCity(searchParams).then((res) => { |
| | | res = res.data; |
| | | // console.log(res, 'res 市========'); |
| | | var data = []; |
| | | if (res.code) { |
| | | data = res.data.map((v) => { |
| | | return { |
| | | label: v, |
| | | value: v, |
| | | }; |
| | | }); |
| | | } |
| | | let len = data.length; |
| | | // 设置第一笔数据 |
| | | data.unshift({ |
| | | label: "全部(共" + len + "种)", |
| | | value: "", |
| | | }); |
| | | // 设置市 |
| | | this.filters.data.city = data; |
| | | // 查询区县 |
| | | this.searchCounty(); |
| | | }); |
| | | }, |
| | | searchCounty() { |
| | | //查询区县 |
| | | // 重置值 |
| | | this.filters.values.county = this.isAutoLoad |
| | | ? this.$route.query.county |
| | | : ""; |
| | | this.filters.values.home = this.isAutoLoad ? this.$route.query.home : ""; |
| | | // 构造查询条件 |
| | | let searchParams = { |
| | | stationName1: this.filters.values.province, |
| | | stationName2: this.filters.values.city, |
| | | }; |
| | | // 请求后台 |
| | | searchCounty(searchParams).then((res) => { |
| | | res = res.data; |
| | | var data = []; |
| | | // console.log(res, 'res 区县========'); |
| | | if (res.code) { |
| | | data = res.data.map((v) => { |
| | | return { |
| | | label: v, |
| | | value: v, |
| | | }; |
| | | }); |
| | | } |
| | | let len = data.length; |
| | | // 设置第一笔数据 |
| | | data.unshift({ |
| | | label: "全部(共" + len + "种)", |
| | | value: "", |
| | | }); |
| | | // 设置区县 |
| | | this.filters.data.county = data; |
| | | // 查询机房 |
| | | this.searchHome(); |
| | | }); |
| | | }, |
| | | searchHome() { |
| | | //查询机房 |
| | | // 重置分页信息 |
| | | this.pageNum = 1; |
| | | // 重置值 |
| | | this.filters.values.home = this.isAutoLoad ? this.$route.query.home : ""; |
| | | let searchParams = { |
| | | stationName1: this.filters.values.province, |
| | | stationName2: this.filters.values.city, |
| | | stationName5: this.filters.values.county, |
| | | }; |
| | | // 未选择区县 |
| | | if (searchParams.stationName5 == "") { |
| | | // 设置机房 |
| | | this.filters.data.home = [ |
| | | { |
| | | label: "请选择机房名称", |
| | | value: "", |
| | | }, |
| | | ]; |
| | | // 查询数据 |
| | | this.verifyHisList(); |
| | | return; |
| | | } |
| | | |
| | | // 请求后台 |
| | | getStations(searchParams).then((res) => { |
| | | res = res.data; |
| | | // console.log(res, 'res 机房========'); |
| | | let data = []; |
| | | if (res.code) { |
| | | data = res.data.map((v) => { |
| | | return { |
| | | label: v.stationName3, |
| | | value: v.stationName3, |
| | | }; |
| | | }); |
| | | } |
| | | let len = data.length; |
| | | // 设置第一笔数据 |
| | | data.unshift({ |
| | | label: "全部(共" + len + "种)", |
| | | value: "", |
| | | }); |
| | | // 设置机房 |
| | | this.filters.data.home = data; |
| | | |
| | | // 查询数据 |
| | | this.verifyHisList(); |
| | | }); |
| | | }, |
| | | |
| | | handleSizeChange(val) { |
| | | this.pageSize = val; |
| | | /* console.log(`每页 ${newSize} 条`); */ |
| | | this.verifyHisList(); |
| | | }, |
| | | handleCurrentChange(val2) { |
| | | this.pageNum = val2; |
| | | /* console.log(`当前页: ${val2}`); */ |
| | | this.verifyHisList(); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | <style lang="less" scoped> |
| | | .table-head { |
| | | color: #ffff; |
| | | border: 1px solid #ffffff; |
| | | |
| | | thead tr { |
| | | height: 35px; |
| | | } |
| | | |
| | | tbody tr { |
| | | height: 70%; |
| | | } |
| | | } |
| | | |
| | | .weihu { |
| | | width: 100%; |
| | | } |
| | | |
| | | .dainchi { |
| | | width: 100%; |
| | | } |
| | | |
| | | .rooms { |
| | | width: 100%; |
| | | } |
| | | |
| | | .blocks { |
| | | width: 100%; |
| | | } |
| | | |
| | | /* 表单 */ |
| | | // .tableCent { |
| | | // /*margin-top: 3px;*/ |
| | | // font-size: 14px; |
| | | // font-weight: 500; |
| | | // } |
| | | |
| | | /* 条件选择 */ |
| | | .condiOpt { |
| | | width: 100%; |
| | | border: 1px solid #4ba1fa; |
| | | |
| | | // .trTitle { |
| | | // height: 35px; |
| | | // } |
| | | .trTitle { |
| | | height: 35px; |
| | | font-size: 14px; |
| | | font-weight: bold; |
| | | color: #00ffff; |
| | | } |
| | | |
| | | /* 告警状态警示灯 */ |
| | | .tdOne { |
| | | width: 15%; |
| | | |
| | | .light { |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | } |
| | | |
| | | .light li { |
| | | display: inline-block; |
| | | margin: 20px; |
| | | } |
| | | } |
| | | |
| | | /* 告警条件过滤 */ |
| | | .tdTwo { |
| | | width: 30%; |
| | | |
| | | .inputOne { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | .inputOne li { |
| | | display: block; |
| | | width: 24%; |
| | | padding: 3px 0; |
| | | text-align: center; |
| | | } |
| | | } |
| | | |
| | | /* 告警阀值过滤 */ |
| | | .tdTree { |
| | | width: 10%; |
| | | |
| | | .inputOne { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | .inputOne li { |
| | | display: block; |
| | | width: 100%; |
| | | padding: 3px 0; |
| | | text-align: center; |
| | | } |
| | | } |
| | | |
| | | /* 告警等级过滤 */ |
| | | .tdFrou { |
| | | width: 15%; |
| | | |
| | | .inputOne { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | .inputOne li { |
| | | display: block; |
| | | width: 50%; |
| | | padding: 3px 0; |
| | | text-align: center; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | round |
| | | size="mini" |
| | | icon="el-icon-wallet" |
| | | @click="exportFile1()">导出</el-button |
| | | @click="exportData(1)" |
| | | >导出</el-button |
| | | > |
| | | </div> |
| | | <el-pagination |
| | |
| | | round |
| | | size="mini" |
| | | icon="el-icon-wallet" |
| | | @click="exportFile2()">导出</el-button |
| | | @click="exportData(2)" |
| | | >导出</el-button |
| | | > |
| | | </div> |
| | | <el-pagination |
| | |
| | | :current-page="queryInfo2.pagenum" |
| | | :page-sizes="[10, 20, 30, 50, 100]" |
| | | :page-size="queryInfo2.pagesize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="total2" |
| | | ></el-pagination> |
| | | <!-- <el-button type="primary" round size="mini" icon="el-icon-wallet">全部选中</el-button> --> |
| | | </div> |
| | | </flex-layout> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="待处理告警" name="needDispose"> |
| | | <span slot="label"> |
| | | 待处理告警 |
| | | <el-badge class="mark" :value="total3" /> |
| | | </span> |
| | | <flex-layout> |
| | | <!-- 表单 --> |
| | | <div class="flex-page-content"> |
| | | <el-table |
| | | id="batteryrTimequeryTable" |
| | | stripe |
| | | size="small" |
| | | :data="table3.datas" |
| | | tooltip-effect="light" |
| | | height="100%" |
| | | class="tableCent" |
| | | > |
| | | <el-table-column label="编号" type="index" width="50"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-for="header in table3.headers" |
| | | :key="header.prop" |
| | | :prop="header.prop" |
| | | :label="header.label" |
| | | :width="header.width" |
| | | :min-width="header.minWidth" |
| | | show-overflow-tooltip |
| | | align="center" |
| | | ></el-table-column> |
| | | <el-table-column label="确认告警" align="center" :width="80"> |
| | | <template slot-scope="scope"> |
| | | <el-checkbox |
| | | v-model="scope.row.almIsConfirmed" |
| | | disabled |
| | | ></el-checkbox> |
| | | <!-- <input type="checkbox" disabled :checked="scope.row.alarm1 && scope.row.alarm1.length > 0 ? true : false"> --> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="cztime" |
| | | fixed="right" |
| | | width="180px" |
| | | align="center" |
| | | label="操作" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | type="primary" |
| | | size="mini" |
| | | @click="goRealTime(scope.row)" |
| | | >实时</el-button |
| | | > |
| | | <el-button |
| | | type="danger" |
| | | size="mini" |
| | | @click="verify(scope.row)" |
| | | >处理</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <!-- 底部分页 --> |
| | | <div class="flex-page-footer" slot="footer"> |
| | | <div class="el-pagination-btns"> |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | size="mini" |
| | | icon="el-icon-search" |
| | | @click="sendMessage" |
| | | >查询</el-button |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | size="mini" |
| | | icon="el-icon-wallet" |
| | | @click="exportVerifyData()" |
| | | >导出</el-button |
| | | > |
| | | </div> |
| | | <el-pagination |
| | | class="pagess" |
| | | @size-change="handleSizeChange3" |
| | | @current-change="handleCurrentChange3" |
| | | :current-page="queryInfo3.pagenum" |
| | | :page-sizes="[10, 20, 30, 50, 100]" |
| | | :page-size="queryInfo3.pagesize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="total2" |
| | | ></el-pagination> |
| | |
| | | v-if="uploadVisible" |
| | | :stationId="uploadInfo.stationId" |
| | | :type="2" |
| | | :alarm-type="1" |
| | | :alarm-num="currAlarmNum" |
| | | :description="uploadInfo.alarmName" |
| | | ></upload-error> |
| | | </el-dialog> |
| | | <!-- 告警处理 --> |
| | | <el-dialog |
| | | title="告警处理" |
| | | width="640px" |
| | | :visible.sync="verifyVisible" |
| | | :close-on-click-modal="false" |
| | | top="0" |
| | | class="dialog-center dialog-verify" |
| | | :modal-append-to-body="false" |
| | | > |
| | | <verify-form |
| | | v-if="verifyVisible" |
| | | :info="currAlarmData" |
| | | @close="verifyClose" |
| | | ></verify-form> |
| | | </el-dialog> |
| | | </flex-layout> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getVerifyAlarm, |
| | | newsAlarm /*告警信息 */, |
| | | deletionRecord /* 删除 */, |
| | | reporTemergency /* 确认告警 */, |
| | |
| | | roomsStation /* 机房站点 */, |
| | | batterySearch /* 蓄电池组 */, |
| | | } from "@/assets/js/api"; |
| | | import { isHasPermit, Timeout } from "@/assets/js/tools"; |
| | | import { listToBeConfirmed } from "./js/verify"; |
| | | import { isHasPermit } from "@/assets/js/tools"; |
| | | import DispatchForm from "./components/dispatchForm"; |
| | | // 引入导出表格 |
| | | import { export_json_to_excel, formatJson } from "@/assets/js/tools/exportFile"; |
| | |
| | | import NumberTotalTabs from "@/views/alarmMager/components/number-total-tabs.vue"; |
| | | import AlarmDetails from "@/views/alarmMager/components/alarm-details.vue"; |
| | | import UploadError from "@/views/evaluationManage/dialog/uploadError.vue"; |
| | | import VerifyForm from "./components/verify-form"; |
| | | const WSMixin = createWs("battAlarmData"); |
| | | const TABS = { |
| | | unconfirmed: 1, |
| | | confirmed: 2, |
| | | needDispose: 3, |
| | | }; |
| | | export default { |
| | | name: "batteryrTimequery", |
| | | mixins: [WSMixin], |
| | |
| | | let isHZSJ = this.$CFG.clientName.name == "hzsj"; |
| | | let isInGroup = Number(sessionStorage.getItem("isInGroup")) ? true : false; |
| | | return { |
| | | alarmConfig: [], |
| | | currAlarmNum: 0, |
| | | currAlarmData: {}, |
| | | verifyVisible: false, |
| | | isInGroup, |
| | | uploadVisible: false, |
| | | uploadInfo: { |
| | |
| | | pagenum: 1 /* 当前页码 绑定queryInfo.pagenum */, |
| | | pagesize: 20 /* 每页显示的数据 绑定queryInfo.pagesize */, |
| | | }, |
| | | queryInfo3: { |
| | | query: "" /* 查询 */, |
| | | pagenum: 1 /* 当前页码 绑定queryInfo.pagenum */, |
| | | pagesize: 20 /* 每页显示的数据 绑定queryInfo.pagesize */, |
| | | }, |
| | | total1: 0 /* 总共有多少条 */, |
| | | total2: 0 /* 总共有多少条 */, |
| | | total3: 0 /* 总共有多少条 */, |
| | | /* 维护区 */ |
| | | vindicate: [], |
| | | /* 机房站点 */ |
| | |
| | | ], |
| | | datas: [], |
| | | }, |
| | | timer: new Timeout("batteryrTimequery"), |
| | | table3: { |
| | | headers: [ |
| | | { |
| | | prop: "stationNamex", |
| | | label: "机房名称", |
| | | minWidth: 320, |
| | | }, |
| | | { |
| | | prop: "battGroupName", |
| | | label: "电池组名称", |
| | | width: 120, |
| | | }, |
| | | { |
| | | prop: "alarmName", |
| | | label: "告警名称", |
| | | width: 162, |
| | | }, |
| | | { |
| | | prop: "monNum", |
| | | label: "单体编号", |
| | | width: 80, |
| | | }, |
| | | { |
| | | prop: "almValue", |
| | | label: "告警值", |
| | | width: 80, |
| | | }, |
| | | { |
| | | prop: "almLevel", |
| | | label: "告警等级", |
| | | width: 120, |
| | | }, |
| | | { |
| | | prop: "almSeverity", |
| | | label: "告警重要等级", |
| | | width: 120, |
| | | }, |
| | | { |
| | | prop: "almStartTime", |
| | | label: "告警开始时间", |
| | | width: 180, |
| | | }, |
| | | { |
| | | prop: "almConfirmedTime", |
| | | label: "确认告警时间", |
| | | width: 180, |
| | | }, |
| | | ], |
| | | datas: [], |
| | | }, |
| | | // 第一次查询 |
| | | isFirstQuery: false, |
| | | levelRes: { |
| | |
| | | AlarmDetails, |
| | | NumberTotalTabs, |
| | | DispatchForm, |
| | | VerifyForm, |
| | | }, |
| | | mounted() { |
| | | this.listToBeConfirmed(); |
| | | // 根据告警类型勾选筛选条件 |
| | | let alarmType = this.$route.query.alarmType; |
| | | if (alarmType) { |
| | |
| | | // this.startTimer(); /* 定时请求 */ |
| | | }, |
| | | methods: { |
| | | listToBeConfirmed() { |
| | | listToBeConfirmed(1) |
| | | .then((res) => { |
| | | let { code, data } = res.data; |
| | | let list = []; |
| | | if (code && data) { |
| | | list = data; |
| | | } |
| | | this.alarmConfig = list; |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err); |
| | | }); |
| | | }, |
| | | showUploadDialog(data) { |
| | | console.log(data); |
| | | // console.log(data); |
| | | if (!this.alarmConfig.some((v) => v == data.almType)) { |
| | | this.$message.error("当前告警不需要手动处理, 不能上报"); |
| | | return false; |
| | | } |
| | | this.uploadInfo.stationId = data.stationId; |
| | | this.uploadInfo.alarmName = data.alarmName; |
| | | this.currAlarmNum = data.num; |
| | | this.uploadVisible = true; |
| | | }, |
| | | refreshFN() { |
| | | // 告警等级 |
| | | let alarmLevel = this.$route.query.alarmLevel; |
| | | if (alarmLevel) { |
| | | console.log(alarmLevel, "====act?"); |
| | | // console.log(alarmLevel, "====act?"); |
| | | this.$refs.levels.changeHandle(alarmLevel); |
| | | } |
| | | this.acTabs = 'unconfirmed'; |
| | | this.acTabs = "unconfirmed"; |
| | | if (this.$route.query.fromType == "fromIndex") { |
| | | this.selectValue1 = this.$route.query.province; |
| | | this.selectValue2 = |
| | |
| | | }, |
| | | tabClick(tab) { |
| | | this.acTabs = tab.name; |
| | | if (tab.name == "unconfirmed") { |
| | | this.handleCurrentChange1(1); |
| | | } else { |
| | | this.handleCurrentChange2(1); |
| | | } |
| | | this["handleCurrentChange" + TABS[this.acTabs]](1); |
| | | }, |
| | | // 导出表格 |
| | | exportFile1() { |
| | | exportFile(list, idx) { |
| | | let tHeader = []; |
| | | let filterVal = []; |
| | | this.table1.headers.map((item, index) => { |
| | |
| | | }); |
| | | tHeader.push("确认告警"); |
| | | filterVal.push("almIsConfirmed1"); |
| | | let list = this.table1.datas; |
| | | let excelData = formatJson(filterVal, list); |
| | | export_json_to_excel(tHeader, excelData, "电池告警实时数据-未确认"); |
| | | }, |
| | | // 导出表格 |
| | | exportFile2() { |
| | | let tHeader = []; |
| | | let filterVal = []; |
| | | this.table2.headers.map((item, index) => { |
| | | tHeader.push(item.label); |
| | | filterVal.push(item.prop); |
| | | }); |
| | | tHeader.push("确认告警"); |
| | | filterVal.push("almIsConfirmed1"); |
| | | let list = this.table2.datas; |
| | | let excelData = formatJson(filterVal, list); |
| | | export_json_to_excel(tHeader, excelData, "电池告警实时数据-已确认"); |
| | | let fileName = [ |
| | | "电池告警实时数据-未确认", |
| | | "电池告警实时数据-已确认", |
| | | "电池告警-待处理", |
| | | ][idx - 1]; |
| | | export_json_to_excel(tHeader, excelData, fileName); |
| | | }, |
| | | /* 维护区 */ |
| | | async vindicateData() { |
| | |
| | | |
| | | this.paramsAlram1(data.unconfirmedAlarms); |
| | | this.paramsAlram2(data.confirmedAlarms); |
| | | this.paramsAlram3(data.verifyListRes); |
| | | }, |
| | | formatParams(isExportFile) { |
| | | // 判断是否导出全部 === 不能删除,防止isExPortFile={} |
| | |
| | | almSignalIdTwo: params.alm_signal_id, |
| | | battGroupId: this.selectValue3 ? this.selectValue3 : 0, |
| | | page: { |
| | | pageCurr: |
| | | this.acTabs == "unconfirmed" |
| | | ? this.queryInfo1.pagenum |
| | | : this.queryInfo2.pagenum, |
| | | pageSize: |
| | | this.acTabs == "unconfirmed" |
| | | ? this.queryInfo1.pagesize |
| | | : this.queryInfo2.pagesize, |
| | | pageCurr: this["queryInfo" + TABS[this.acTabs]].pagenum, |
| | | pageSize: this["queryInfo" + TABS[this.acTabs]].pagesize, |
| | | }, |
| | | stationname: this.selectValue2, |
| | | stationname1: this.selectValue1, |
| | | uId: sessionStorage.getItem("userId"), |
| | | // 有个接口在传这个参数 |
| | | uid: sessionStorage.getItem("userId"), |
| | | }; |
| | | |
| | | if(isExportFile) { |
| | | if (isExportFile) { |
| | | param.page.pageCurr = 1; |
| | | param.page.pageSize = this.acTabs == "unconfirmed"?this.total1:this.total2; |
| | | param.page.pageSize = this["total" + TABS[this.acTabs]]; |
| | | } |
| | | return param; |
| | | }, |
| | | /* 告警信息未确认 */ |
| | | paramsAlram1(res) { |
| | | paramsAlram1(res, isExportFile) { |
| | | isExportFile = isExportFile === true; |
| | | let loading; |
| | | if (this.isFirstQuery) { |
| | | loading = this.$layer.loading(1); |
| | |
| | | }); |
| | | }); |
| | | }); |
| | | this.table1.datas = list; |
| | | if (isExportFile) { |
| | | this.exportFile(list, 1); |
| | | } else { |
| | | this.table1.datas = list; |
| | | } |
| | | } else { |
| | | this.total1 = 0; |
| | | this.table1.datas = []; |
| | | } |
| | | // console.log("newsAlaa", newsAlaa); |
| | | }, |
| | | /* 告警信息已确认 */ |
| | | paramsAlram2(res) { |
| | | paramsAlram2(res, isExportFile) { |
| | | isExportFile = isExportFile === true; |
| | | let loading; |
| | | if (this.isFirstQuery) { |
| | | loading = this.$layer.loading(1); |
| | |
| | | }); |
| | | }); |
| | | }); |
| | | this.table2.datas = list; |
| | | if (isExportFile) { |
| | | this.exportFile(list, 2); |
| | | } else { |
| | | this.table2.datas = list; |
| | | } |
| | | } else { |
| | | this.total2 = 0; |
| | | this.table2.datas = []; |
| | | } |
| | | }, |
| | | // 导出数据 type 1-未确认,2-未确认 |
| | | paramsAlram3(res, isExportFile) { |
| | | isExportFile = isExportFile === true; |
| | | let loading; |
| | | if (this.isFirstQuery) { |
| | | loading = this.$layer.loading(1); |
| | | } |
| | | |
| | | this.isFirstQuery = false; |
| | | loading && this.$layer.close(loading); // 关闭等待框 |
| | | if (res.code) { |
| | | let data = res.data; |
| | | this.total3 = data.total; |
| | | let list = []; |
| | | data.list.forEach((v) => { |
| | | let { stationName1, stationName2, stationName3, stationName5 } = v; |
| | | let stationName = { |
| | | stationName1, |
| | | stationName2, |
| | | stationName3, |
| | | stationName5, |
| | | }; |
| | | let stationNamex = stationName5 + "-" + stationName3; |
| | | let battGroupName = v.battgroupname; |
| | | let battGroupId = v.battGroupId; |
| | | let stationId = v.stationId; |
| | | list.push({ |
| | | ...v, |
| | | stationName, |
| | | stationNamex, |
| | | battGroupName, |
| | | battGroupId, |
| | | stationId, |
| | | num: v.num, |
| | | // TODO |
| | | // alarmName: v.almSignalIdName, |
| | | monNum: v.monNum == 0 ? "-" : v.monNum, |
| | | almValue: v.almValue, |
| | | almLevel: ["", "一级告警", "二级告警", "三级告警", "四级告警"][ |
| | | v.almLevel |
| | | ], |
| | | almStartTime: v.almStartTime, |
| | | almConfirmedTime: v.almConfirmedTime, |
| | | almIsConfirmed: true, |
| | | almIsConfirmed1: "是", |
| | | almSeverity: v.almSeverity == 0 ? "重要" : "紧急", |
| | | }); |
| | | }); |
| | | if (isExportFile) { |
| | | this.exportFile(list, 3); |
| | | } else { |
| | | this.table3.datas = list; |
| | | } |
| | | } else { |
| | | this.total3 = 0; |
| | | this.table3.datas = []; |
| | | } |
| | | }, |
| | | // 导出数据 type 1-未确认,2-未确认 TODO |
| | | exportData(type) { |
| | | let param = this.formatParams(true); |
| | | newsAlarm(param).then(res=>{ |
| | | console.log(res); |
| | | }).catch(error=>{ |
| | | console.log(error); |
| | | }); |
| | | newsAlarm(param) |
| | | .then((res) => { |
| | | this["paramsAlram" + type](res.data, true); |
| | | }) |
| | | .catch((error) => { |
| | | console.log(error); |
| | | }); |
| | | }, |
| | | exportVerifyData() { |
| | | let param = this.formatParams(true); |
| | | getVerifyAlarm(param) |
| | | .then((res) => { |
| | | this.paramsAlram3(res.data, true); |
| | | }) |
| | | .catch((error) => { |
| | | console.log(error); |
| | | }); |
| | | }, |
| | | verify(obj) { |
| | | this.currAlarmData = { |
| | | ...obj, |
| | | // 1电池 2设备 3电源 |
| | | alarmType: 1, |
| | | }; |
| | | this.verifyVisible = true; |
| | | }, |
| | | verifyClose() { |
| | | this.verifyVisible = false; |
| | | this.sendMessage(); |
| | | }, |
| | | /* 删除 */ |
| | | async delteTim(val, idx) { |
| | |
| | | goRealTime(data) { |
| | | let search = this.createSearch(data.stationName); |
| | | this.$router.push( |
| | | "/dataTest/movingRingSystem" + search + "&batt=" + data.battGroupId + "&listReload=1" |
| | | "/dataTest/movingRingSystem" + |
| | | search + |
| | | "&batt=" + |
| | | data.battGroupId + |
| | | "&listReload=1" |
| | | ); |
| | | }, |
| | | // goHistory(data) { |
| | |
| | | /*console.log(`当前页: ${val}`); */ |
| | | this.sendMessage(); |
| | | }, |
| | | handleSizeChange3(newSize) { |
| | | this.queryInfo3.pagesize = newSize; |
| | | /*console.log(`每页 ${val} 条`); */ |
| | | this.sendMessage(); |
| | | }, |
| | | handleCurrentChange3(newPage) { |
| | | this.queryInfo3.pagenum = newPage; |
| | | /*console.log(`当前页: ${val}`); */ |
| | | this.sendMessage(); |
| | | }, |
| | | dispatch(row) { |
| | | console.log(row); |
| | | this.alarmVisible = true; |
| | |
| | | onWSMessage(res) { |
| | | res = JSON.parse(res.data); |
| | | let data = res.data; |
| | | console.log(data, "=====data"); |
| | | // console.log(data, "=====data"); |
| | | this.paramsAlram(data); |
| | | }, |
| | | changeSkin() { |
New file |
| | |
| | | <template> |
| | | <div class="form"> |
| | | <el-form ref="form" label-width="100px"> |
| | | <el-form-item label="处理描述"> |
| | | <el-input type="textarea" :rows="2" v-model="desc"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div class="wrap-upload"> |
| | | <label class="label el-form-item__label">图片附件</label> |
| | | <el-upload |
| | | action="" |
| | | class="upload" |
| | | :before-upload="beforeUpload" |
| | | :on-change="onChange" |
| | | :auto-upload="false" |
| | | multiple |
| | | accept=".jpg,.png" |
| | | list-type="picture" |
| | | :file-list="fileList" |
| | | > |
| | | <el-button slot="trigger" size="small" type="primary" |
| | | >选取文件</el-button |
| | | > |
| | | <div slot="tip" class="el-upload__tip">只能上传jpg/png文件</div> |
| | | </el-upload> |
| | | </div> |
| | | <div class="footer"> |
| | | <el-button size="small" type="primary" @click="submit">提交</el-button> |
| | | <el-button size="small" @click="close">取消</el-button> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { verifyAlarm } from "../js/verify"; |
| | | export default { |
| | | props: { |
| | | info: { |
| | | type: Object, |
| | | required: true, |
| | | default() { |
| | | return {}; |
| | | }, |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | fileList: [], |
| | | desc: "", |
| | | }; |
| | | }, |
| | | components: {}, |
| | | methods: { |
| | | beforeUpload() { |
| | | return false; |
| | | }, |
| | | submit() { |
| | | let desc = this.desc.trim(); |
| | | if (!desc) { |
| | | this.$message.error("请填写处理描述信息"); |
| | | return false; |
| | | } |
| | | let formData = new FormData(); |
| | | let clearJson = JSON.stringify({ |
| | | ...this.info, |
| | | reason: desc, |
| | | }); |
| | | this.fileList.forEach((file) => { |
| | | formData.append("file", file.raw); |
| | | }); |
| | | formData.append("clearJson", clearJson); |
| | | let loading = this.$layer.loading(1); |
| | | verifyAlarm(formData) |
| | | .then((res) => { |
| | | let { code } = res.data; |
| | | if (code) { |
| | | this.$message.success("操作成功"); |
| | | this.close(); |
| | | } else { |
| | | this.$message.error("操作失败"); |
| | | } |
| | | this.$layer.close(loading); |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err); |
| | | this.$layer.close(loading); |
| | | }); |
| | | }, |
| | | close() { |
| | | this.$emit("close"); |
| | | }, |
| | | onChange(file, fileList) { |
| | | this.fileList = fileList; |
| | | }, |
| | | }, |
| | | |
| | | mounted() {}, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .form { |
| | | background: #fff; |
| | | padding: 12px; |
| | | } |
| | | .label { |
| | | line-height: 32px; |
| | | width: 100px; |
| | | } |
| | | .upload { |
| | | padding-left: 100px; |
| | | } |
| | | >>> .el-upload-list { |
| | | max-height: 300px; |
| | | overflow-y: auto; |
| | | } |
| | | .footer { |
| | | text-align: right; |
| | | padding: 6px 10px 0; |
| | | } |
| | | </style> |
| | |
| | | round |
| | | size="mini" |
| | | icon="el-icon-wallet" |
| | | @click="exportFile1" |
| | | @click="exportData(1)" |
| | | >导出 |
| | | </el-button> |
| | | </div> |
| | |
| | | round |
| | | size="mini" |
| | | icon="el-icon-wallet" |
| | | @click="exportFile2" |
| | | @click="exportData(2)" |
| | | >导出 |
| | | </el-button> |
| | | </div> |
| | |
| | | :page-size="queryInfo2.pagesize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="total2" |
| | | ></el-pagination> |
| | | </div> |
| | | </flex-layout> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="待处理告警" name="needDispose"> |
| | | <span slot="label"> |
| | | 待处理告警 |
| | | <el-badge class="mark" :value="total3" /> |
| | | </span> |
| | | <flex-layout> |
| | | <!-- 表单 --> |
| | | <div class="flex-page-content"> |
| | | <el-table |
| | | stripe |
| | | size="small" |
| | | :data="table3.datas" |
| | | tooltip-effect="light" |
| | | height="100%" |
| | | > |
| | | <el-table-column |
| | | type="index" |
| | | label="编号" |
| | | width="50" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | v-for="header in table3.headers" |
| | | :key="header.prop" |
| | | :prop="header.prop" |
| | | :label="header.label" |
| | | :width="header.width" |
| | | :min-width="header.minWidth" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | > |
| | | </el-table-column> |
| | | <el-table-column label="确认告警" width="80px" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-checkbox |
| | | v-model="scope.row.isalarm1" |
| | | disabled |
| | | ></el-checkbox> |
| | | <!-- <input type="checkbox" :checked='scope.row.alm_is_confirmed ===1?true:false' disabled> --> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="cztime" |
| | | fixed="right" |
| | | width="180px" |
| | | align="center" |
| | | label="操作" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | type="primary" |
| | | size="mini" |
| | | @click="goRealTime(scope.row)" |
| | | >实时</el-button |
| | | > |
| | | <el-button |
| | | type="danger" |
| | | size="mini" |
| | | @click="verify(scope.row)" |
| | | >处理</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <!-- 底部分页 --> |
| | | <div class="flex-page-footer" slot="footer"> |
| | | <div class="el-pagination-btns"> |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | size="mini" |
| | | @click="sendMessage" |
| | | icon="el-icon-search" |
| | | >查询 |
| | | </el-button> |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | size="mini" |
| | | icon="el-icon-wallet" |
| | | @click="exportVerifyData" |
| | | >导出 |
| | | </el-button> |
| | | </div> |
| | | <el-pagination |
| | | class="pagess" |
| | | @size-change="handleSizeChange3" |
| | | @current-change="handleCurrentChange3" |
| | | :current-page="queryInfo3.currentPage" |
| | | :page-sizes="[10, 20, 30, 50, 100]" |
| | | :page-size="queryInfo3.pagesize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="total3" |
| | | ></el-pagination> |
| | | </div> |
| | | </flex-layout> |
| | |
| | | v-if="uploadVisible" |
| | | :stationId="uploadInfo.stationId" |
| | | :type="3" |
| | | :alarm-type="2" |
| | | :alarm-num="currAlarmNum" |
| | | :description="uploadInfo.alarmName" |
| | | ></upload-error> |
| | | </el-dialog> |
| | | <!-- 告警处理 --> |
| | | <el-dialog |
| | | title="告警处理" |
| | | width="640px" |
| | | :visible.sync="verifyVisible" |
| | | :close-on-click-modal="false" |
| | | top="0" |
| | | class="dialog-center dialog-verify" |
| | | :modal-append-to-body="false" |
| | | > |
| | | <verify-form |
| | | v-if="verifyVisible" |
| | | :info="currAlarmData" |
| | | @close="verifyClose" |
| | | ></verify-form> |
| | | </el-dialog> |
| | | </flex-layout> |
| | | </template> |
| | |
| | | getBattGroupIdByDevId, |
| | | } from "@/assets/js/api"; |
| | | import { |
| | | deviceVerifyAlarm, |
| | | deviceAlarm, |
| | | deviceOk, |
| | | deviceDelete, |
| | |
| | | import { getLabelByValue, isHasPermit, Timeout } from "@/assets/js/tools"; |
| | | |
| | | import getDevAlarm from "@/assets/js/tools/getDevAlarm"; |
| | | import { listToBeConfirmed } from "./js/verify"; |
| | | |
| | | import createWs from "@/assets/js/websocket"; |
| | | import NumberTotalTabs from "@/views/alarmMager/components/number-total-tabs.vue"; |
| | | import UploadError from "@/views/evaluationManage/dialog/uploadError.vue"; |
| | | import VerifyForm from "./components/verify-form"; |
| | | const WSMixin = createWs("devAlarmData"); |
| | | const TABS = { |
| | | unconfirmed: 1, |
| | | confirmed: 2, |
| | | needDispose: 3, |
| | | }; |
| | | export default { |
| | | name: "deviceTimequery", |
| | | components: { UploadError, NumberTotalTabs }, |
| | | components: { |
| | | UploadError, |
| | | NumberTotalTabs, |
| | | VerifyForm, |
| | | }, |
| | | mixins: [WSMixin], |
| | | data() { |
| | | let permits = this.$store.state.user.permits; |
| | |
| | | let levels = getDevAlarm().levels; |
| | | let isInGroup = Number(sessionStorage.getItem("isInGroup")) ? true : false; |
| | | return { |
| | | alarmConfig: [], |
| | | currAlarmNum: 0, |
| | | currAlarmData: {}, |
| | | verifyVisible: false, |
| | | isInGroup, |
| | | uploadVisible: false, |
| | | uploadInfo: { |
| | |
| | | currentPage: 1, |
| | | pagesize: 20, |
| | | }, |
| | | queryInfo3: { |
| | | currentPage: 1, |
| | | pagesize: 20, |
| | | }, |
| | | acTabs: "unconfirmed", |
| | | total1: 0, |
| | | total2: 0, |
| | | total3: 0, |
| | | selectValue1: "", |
| | | selectPlace1: "", |
| | | selectValue2: "", |
| | |
| | | ], |
| | | datas: [], |
| | | }, |
| | | table3: { |
| | | headers: [ |
| | | { |
| | | prop: "devId", |
| | | label: "设备ID", |
| | | width: 120, |
| | | }, |
| | | { |
| | | prop: "devName", |
| | | label: "设备名", |
| | | width: 160, |
| | | }, |
| | | { |
| | | prop: "devIp", |
| | | label: "设备IP", |
| | | width: 160, |
| | | }, |
| | | { |
| | | prop: "stationNamex", |
| | | label: "机房名称", |
| | | minWidth: 220, |
| | | }, |
| | | { |
| | | prop: "almTypeName", |
| | | label: "告警事件", |
| | | width: 200, |
| | | }, |
| | | { |
| | | prop: "alarmLevelName", |
| | | label: "告警等级", |
| | | width: 120, |
| | | }, |
| | | // { |
| | | // prop: "almSeverity", |
| | | // label: "告警重要等级", |
| | | // width: 120, |
| | | // }, |
| | | { |
| | | prop: "almStartTime", |
| | | label: "告警开始时间", |
| | | width: 180, |
| | | }, |
| | | { |
| | | prop: "almConfirmedTime", |
| | | label: "告警确认时间", |
| | | width: 180, |
| | | }, |
| | | ], |
| | | datas: [], |
| | | }, |
| | | isFirstQuery: false, |
| | | levelRes: { |
| | | one: 0, |
| | |
| | | }, |
| | | watch: {}, |
| | | mounted() { |
| | | this.listToBeConfirmed(); |
| | | let query = this.$route.query; |
| | | if (query.fromType == "fromIndex") { |
| | | this.selectValue1 = query.province ? query.province : ""; |
| | |
| | | // this.startSearch(); /* 实时告警 */ |
| | | }, |
| | | methods: { |
| | | listToBeConfirmed() { |
| | | listToBeConfirmed(2) |
| | | .then((res) => { |
| | | let { code, data } = res.data; |
| | | let list = []; |
| | | if (code && data) { |
| | | list = data; |
| | | } |
| | | this.alarmConfig = list; |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err); |
| | | }); |
| | | }, |
| | | getBattGroupIdByDevId(devId) { |
| | | return getBattGroupIdByDevId(devId) |
| | | .then((res) => { |
| | |
| | | }); |
| | | }, |
| | | showUploadDialog(data) { |
| | | if (!this.alarmConfig.some((v) => v == data.almType)) { |
| | | this.$message.error("当前告警不需要手动处理, 不能上报"); |
| | | return false; |
| | | } |
| | | this.uploadInfo.stationId = data.stationId; |
| | | this.uploadInfo.alarmName = data.almTypeName; |
| | | this.currAlarmNum = data.num; |
| | | this.uploadVisible = true; |
| | | }, |
| | | createSearch(data) { |
| | |
| | | // console.log(alarmLevel, "====act?"); |
| | | this.$refs.levels.changeHandle(alarmLevel); |
| | | } |
| | | this.acTabs = 'unconfirmed'; |
| | | this.acTabs = "unconfirmed"; |
| | | let query = this.$route.query; |
| | | if (query.fromType == "fromIndex") { |
| | | this.selectValue1 = query.province ? query.province : ""; |
| | |
| | | } |
| | | }, |
| | | // 导出表格 |
| | | exportFile1() { |
| | | exportFile(list, idx) { |
| | | let tHeader = []; |
| | | let filterVal = []; |
| | | this.table1.headers.map((item) => { |
| | |
| | | }); |
| | | tHeader.push("确认告警"); |
| | | filterVal.push("isalarm2"); |
| | | let list = this.table1.datas; |
| | | let excelData = formatJson(filterVal, list); |
| | | export_json_to_excel(tHeader, excelData, "设备告警实时数据-未确认"); |
| | | }, |
| | | // 导出表格 |
| | | exportFile2() { |
| | | let tHeader = []; |
| | | let filterVal = []; |
| | | this.table2.headers.map((item) => { |
| | | tHeader.push(item.label); |
| | | filterVal.push(item.prop); |
| | | }); |
| | | tHeader.push("确认告警"); |
| | | let list = this.table2.datas; |
| | | filterVal.push("isalarm2"); |
| | | let excelData = formatJson(filterVal, list); |
| | | export_json_to_excel(tHeader, excelData, "设备告警实时数据-已确认"); |
| | | let fileName = [ |
| | | "设备告警实时数据-未确认", |
| | | "设备告警实时数据-已确认", |
| | | "设备告警-待处理", |
| | | ][idx - 1]; |
| | | export_json_to_excel(tHeader, excelData, fileName); |
| | | }, |
| | | /* 维护区 */ |
| | | async deviceTime() { |
| | |
| | | |
| | | this.alarmDev1(data.unconfirmedAlarms); |
| | | this.alarmDev2(data.confirmedAlarms); |
| | | this.alarmDev3(data.verifyListRes); |
| | | }, |
| | | /* 告警信息 */ |
| | | alarmDev1(res) { |
| | | alarmDev1(res, isExportFile) { |
| | | isExportFile = isExportFile === true; |
| | | let loading; |
| | | if (this.isFirstQuery) { |
| | | loading = this.$layer.loading(1); |
| | |
| | | item.almSeverity = item.almSeverity == 0 ? "重要" : "紧急"; |
| | | return item; |
| | | }); |
| | | this.table1.datas = alarmNes; |
| | | if (isExportFile) { |
| | | this.exportFile(alarmNes, 1); |
| | | } else { |
| | | this.table1.datas = alarmNes; |
| | | } |
| | | this.total1 = res.data.total; |
| | | this.isFirstQuery = false; |
| | | // 关闭等待框 |
| | |
| | | } |
| | | }, |
| | | /* 告警信息 */ |
| | | async alarmDev2(res) { |
| | | alarmDev2(res, isExportFile) { |
| | | isExportFile = isExportFile === true; |
| | | let loading; |
| | | if (this.isFirstQuery) { |
| | | loading = this.$layer.loading(1); |
| | |
| | | item.almSeverity = item.almSeverity == 0 ? "重要" : "紧急"; |
| | | return item; |
| | | }); |
| | | this.table2.datas = alarmNes; |
| | | if (isExportFile) { |
| | | this.exportFile(alarmNes, 2); |
| | | } else { |
| | | this.table2.datas = alarmNes; |
| | | } |
| | | this.total2 = res.data.total; |
| | | this.isFirstQuery = false; |
| | | // 关闭等待框 |
| | |
| | | // 关闭等待框 |
| | | this.$layer.close(loading); |
| | | } |
| | | }, |
| | | alarmDev3(res, isExportFile) { |
| | | isExportFile = isExportFile === true; |
| | | let loading; |
| | | if (this.isFirstQuery) { |
| | | loading = this.$layer.loading(1); |
| | | } |
| | | if (res.code) { |
| | | const alarmNes = res.data.list.map((item) => { |
| | | let isalarm1 = !!item.almIsConfirmed; |
| | | let { stationName1, stationName2, stationName3, stationName5 } = item; |
| | | let stationNameObj = { |
| | | stationName1, |
| | | stationName2, |
| | | stationName3, |
| | | stationName5, |
| | | }; |
| | | item.stationNameObj = stationNameObj; |
| | | item.stationNamex = stationName5 + "-" + stationName3; |
| | | item.isalarm1 = isalarm1; |
| | | item.isalarm2 = isalarm1 ? "是" : "否"; |
| | | item.almConfirmedTime = isalarm1 ? item.almConfirmedTime : ""; |
| | | item.alarmLevelName = getLabelByValue(item.almLevel, this.levels); |
| | | item.almTypeName = getLabelByValue(item.almType, this.options); |
| | | item.almSeverity = item.almSeverity == 0 ? "重要" : "紧急"; |
| | | return item; |
| | | }); |
| | | if (isExportFile) { |
| | | this.exportFile(alarmNes, 3); |
| | | } else { |
| | | this.table3.datas = alarmNes; |
| | | } |
| | | this.total3 = res.data.total; |
| | | this.isFirstQuery = false; |
| | | // 关闭等待框 |
| | | loading && this.$layer.close(loading); |
| | | } else { |
| | | this.table3.datas = []; |
| | | this.total3 = 0; |
| | | // 关闭等待框 |
| | | this.$layer.close(loading); |
| | | } |
| | | }, |
| | | exportData(type) { |
| | | let param = { |
| | | stationName1: this.selectValue1, |
| | | stationName: this.selectValue2, |
| | | almType: this.value, |
| | | almIsConfirmed: 0, |
| | | page: { |
| | | pageSize: this["total" + type], |
| | | pageCurr: 1, |
| | | }, |
| | | uId: sessionStorage.getItem("userId"), |
| | | almLevel: this.almLevel, |
| | | }; |
| | | deviceAlarm(param) |
| | | .then((res) => { |
| | | this["alarmDev" + type](res.data, true); |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err); |
| | | }); |
| | | }, |
| | | exportVerifyData() { |
| | | let param = { |
| | | stationName1: this.selectValue1, |
| | | stationName: this.selectValue2, |
| | | almType: this.value, |
| | | almIsConfirmed: 0, |
| | | page: { |
| | | pageSize: this.total3, |
| | | pageCurr: 1, |
| | | }, |
| | | uid: sessionStorage.getItem("userId"), |
| | | almLevel: this.almLevel, |
| | | }; |
| | | deviceVerifyAlarm(param) |
| | | .then((res) => { |
| | | this.alarmDev3(res.data, true); |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err); |
| | | }); |
| | | }, |
| | | onWSOpen() { |
| | | this.sendMessage(); |
| | |
| | | almType: this.value, |
| | | almIsConfirmed: 0, |
| | | page: { |
| | | pageSize: |
| | | this.acTabs == "unconfirmed" |
| | | ? this.queryInfo1.pagesize |
| | | : this.queryInfo2.pagesize, |
| | | pageCurr: |
| | | this.acTabs == "unconfirmed" |
| | | ? this.queryInfo1.currentPage |
| | | : this.queryInfo2.currentPage, |
| | | pageSize: this["queryInfo" + TABS[this.acTabs]].pagesize, |
| | | pageCurr: this["queryInfo" + TABS[this.acTabs]].currentPage, |
| | | }, |
| | | uId: sessionStorage.getItem("userId"), |
| | | almLevel: this.almLevel, |
| | |
| | | let data = res.data; |
| | | // console.log(data, "=====data"); |
| | | this.alarmDev(data); |
| | | }, |
| | | verify(obj) { |
| | | this.currAlarmData = { |
| | | ...obj, |
| | | // 1电池 2设备 3电源 |
| | | alarmType: 2, |
| | | almId: obj.almType, |
| | | deviceId: obj.devId, |
| | | deviceName: obj.devName, |
| | | }; |
| | | this.verifyVisible = true; |
| | | }, |
| | | verifyClose() { |
| | | this.verifyVisible = false; |
| | | this.sendMessage(); |
| | | }, |
| | | /* 删除 */ |
| | | async deviceDelete(value) { |
| | |
| | | this.queryInfo2.currentPage = val2; |
| | | this.sendMessage(); |
| | | }, |
| | | // 显示条数 |
| | | handleSizeChange3(val) { |
| | | this.queryInfo3.pagesize = val; |
| | | this.sendMessage(); |
| | | }, |
| | | // 翻页 |
| | | handleCurrentChange3(val2) { |
| | | this.queryInfo3.currentPage = val2; |
| | | this.sendMessage(); |
| | | }, |
| | | totalTabChange(key) { |
| | | this.almLevel = key; |
| | | this.sendMessage(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询待处理告警列表 |
| | | * @param {*} data |
| | | * @returns |
| | | */ |
| | | export const getVerifyAlarm = (data) => { |
| | | return axios({ |
| | | method: "POST", |
| | | url: "battAlarmDataVerify/page", |
| | | data |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 点击确认告警 |
| | | * num |
| | | */ |
| | |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 查询待处理告警列表 |
| | | * @param {*} data |
| | | * @returns |
| | | */ |
| | | export const deviceVerifyAlarm = (data) => { |
| | | return axios({ |
| | | method: "POST", |
| | | url: "devAlarmDataVerify/page", |
| | | data |
| | | }) |
| | | } |
| | | /* |
| | | 确认告警 |
| | | Batt_devalarm_dataAction!updatePro // 旧 |
| | |
| | | data |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 查询电源待处理告警 |
| | | * @param {*} data |
| | | * @returns |
| | | */ |
| | | export const getRTVerifyData = (data) => { |
| | | return axios({ |
| | | method: 'POST', |
| | | url: 'pwrAlarmVerify/page', |
| | | data |
| | | }); |
| | | } |
| | | /** |
| | | * 查询通信电源实时告警 |
| | | * PowerAlarmAction_power_getAllPage2 // 旧 |
New file |
| | |
| | | import axios from "axios"; |
| | | /** |
| | | * 处理告警 |
| | | * @returns |
| | | */ |
| | | export const verifyAlarm = (data) => { |
| | | return axios({ |
| | | method: "POST", |
| | | url: "alarmManualClear/submit", |
| | | headers: { |
| | | "Content-Type": "multipart/form-data" |
| | | }, |
| | | data, |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | | * 告警处理记录 列表 分页 |
| | | * @param {*} data {pageNum, pageSize, stationName1..} |
| | | * @returns |
| | | */ |
| | | export const verifyHisList = (data) => { |
| | | return axios({ |
| | | method: "POST", |
| | | url: "alarmManualClear/page", |
| | | data, |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | | * 查询所有需要确认的告警ID列表 |
| | | * @param {*} type 0全部 1电池告警 2设备告警 3电源告警 |
| | | * @returns |
| | | */ |
| | | export const listToBeConfirmed = (type) => { |
| | | return axios({ |
| | | method: "GET", |
| | | url: "appAlmParam/listToBeConfirmed", |
| | | params: {type} |
| | | }); |
| | | }; |
| | | |
| | |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | <!-- 表单 --> |
| | | <div class="flex-page-content"> |
| | | <el-table |
| | | id="batteryrTimequeryTable" |
| | | stripe |
| | | size="small" |
| | | :data="table.datas" |
| | | height="100%" |
| | | class="tableCent" |
| | | > |
| | | <el-table-column label="编号" align="center" type="index" :width="50"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-for="header in table.headers" |
| | | :key="header.prop" |
| | | :prop="header.prop" |
| | | :label="header.label" |
| | | :width="header.width" |
| | | :min-width="header.minWidth" |
| | | align="center" |
| | | ></el-table-column> |
| | | <el-table-column label="确认告警" align="center" :width="80"> |
| | | <template slot-scope="scope"> |
| | | <el-checkbox |
| | | :value="scope.row.almIsConfirmed == 1" |
| | | disabled |
| | | ></el-checkbox> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="cztime" |
| | | fixed="right" |
| | | width="180px" |
| | | align="center" |
| | | label="操作" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button type="primary" size="mini" @click="goRealTime(scope.row)" |
| | | >实时</el-button |
| | | <el-tabs |
| | | v-model="acTabs" |
| | | type="border-card" |
| | | class="flex-layout noborder" |
| | | @tab-click="tabClick" |
| | | > |
| | | <el-tab-pane label="实时告警" name="realTime"> |
| | | <span slot="label"> |
| | | 实时告警 |
| | | <el-badge class="mark" :value="total1" /> |
| | | </span> |
| | | <flex-layout> |
| | | <!-- 表单 --> |
| | | <div class="flex-page-content"> |
| | | <el-table |
| | | id="batteryrTimequeryTable" |
| | | stripe |
| | | size="small" |
| | | :data="table1.datas" |
| | | height="100%" |
| | | class="tableCent" |
| | | > |
| | | <el-popover |
| | | placement="top-start" |
| | | style="margin-left: 8px" |
| | | trigger="hover" |
| | | > |
| | | <div class="table-tools-more"> |
| | | <el-button |
| | | :disabled="!isCanConfirm" |
| | | type="primary" |
| | | size="mini" |
| | | @click="confirm(scope.row)" |
| | | >确认告警 |
| | | </el-button> |
| | | <el-button |
| | | :disabled="!isCanQuit" |
| | | type="success" |
| | | size="mini" |
| | | @click="cancle(scope.row)" |
| | | >取消确认 |
| | | </el-button> |
| | | <el-button |
| | | :disabled="!isCanDel" |
| | | type="danger" |
| | | size="mini" |
| | | @click="deleteAlarm(scope.row)" |
| | | >删除</el-button |
| | | > |
| | | <el-button |
| | | v-if="isInGroup" |
| | | type="warning" |
| | | size="mini" |
| | | @click="showUploadDialog(scope.row)" |
| | | >故障上传</el-button |
| | | > |
| | | </div> |
| | | <el-button slot="reference" type="success" size="mini" |
| | | >更多</el-button |
| | | <el-table-column |
| | | label="编号" |
| | | align="center" |
| | | type="index" |
| | | :width="50" |
| | | > |
| | | </el-popover> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-for="header in table1.headers" |
| | | :key="header.prop" |
| | | :prop="header.prop" |
| | | :label="header.label" |
| | | :width="header.width" |
| | | :min-width="header.minWidth" |
| | | align="center" |
| | | ></el-table-column> |
| | | <el-table-column label="确认告警" align="center" :width="80"> |
| | | <template slot-scope="scope"> |
| | | <el-checkbox |
| | | :value="scope.row.almIsConfirmed == 1" |
| | | disabled |
| | | ></el-checkbox> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="cztime" |
| | | fixed="right" |
| | | width="180px" |
| | | align="center" |
| | | label="操作" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | type="primary" |
| | | size="mini" |
| | | @click="goRealTime(scope.row)" |
| | | >实时</el-button |
| | | > |
| | | <el-popover |
| | | placement="top-start" |
| | | style="margin-left: 8px" |
| | | trigger="hover" |
| | | > |
| | | <div class="table-tools-more"> |
| | | <el-button |
| | | :disabled="!isCanConfirm" |
| | | type="primary" |
| | | size="mini" |
| | | @click="confirm(scope.row)" |
| | | >确认告警 |
| | | </el-button> |
| | | <el-button |
| | | :disabled="!isCanQuit" |
| | | type="success" |
| | | size="mini" |
| | | @click="cancle(scope.row)" |
| | | >取消确认 |
| | | </el-button> |
| | | <el-button |
| | | :disabled="!isCanDel" |
| | | type="danger" |
| | | size="mini" |
| | | @click="deleteAlarm(scope.row)" |
| | | >删除</el-button |
| | | > |
| | | <el-button |
| | | v-if="isInGroup" |
| | | type="warning" |
| | | size="mini" |
| | | @click="showUploadDialog(scope.row)" |
| | | >故障上传</el-button |
| | | > |
| | | </div> |
| | | <el-button slot="reference" type="success" size="mini" |
| | | >更多</el-button |
| | | > |
| | | </el-popover> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | |
| | | <!-- 底部分页 --> |
| | | <div class="flex-page-footer" slot="footer"> |
| | | <div class="el-pagination-btns"> |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | size="mini" |
| | | icon="el-icon-search" |
| | | @click="sendMessage" |
| | | >查询</el-button |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | size="mini" |
| | | icon="el-icon-wallet" |
| | | @click="exportData">导出</el-button> |
| | | </div> |
| | | <el-pagination |
| | | class="pagess" |
| | | @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange" |
| | | :current-page="queryInfo.pagenum" |
| | | :page-sizes="[10, 20, 30, 50, 100]" |
| | | :page-size="queryInfo.pagesize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="total" |
| | | ></el-pagination> |
| | | <!-- <el-button type="primary" round size="mini" icon="el-icon-wallet">全部选中</el-button> --> |
| | | </div> |
| | | <!-- 底部分页 --> |
| | | <div class="flex-page-footer" slot="footer"> |
| | | <div class="el-pagination-btns"> |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | size="mini" |
| | | icon="el-icon-search" |
| | | @click="sendMessage" |
| | | >查询</el-button |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | size="mini" |
| | | icon="el-icon-wallet" |
| | | @click="exportData1" |
| | | >导出</el-button |
| | | > |
| | | </div> |
| | | <el-pagination |
| | | class="pagess" |
| | | @size-change="handleSizeChange1" |
| | | @current-change="handleCurrentChange1" |
| | | :current-page="queryInfo1.pagenum" |
| | | :page-sizes="[10, 20, 30, 50, 100]" |
| | | :page-size="queryInfo1.pagesize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="total1" |
| | | ></el-pagination> |
| | | <!-- <el-button type="primary" round size="mini" icon="el-icon-wallet">全部选中</el-button> --> |
| | | </div> |
| | | </flex-layout> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="待处理告警" name="needDispose"> |
| | | <span slot="label"> |
| | | 待处理告警 |
| | | <el-badge class="mark" :value="total2" /> |
| | | </span> |
| | | <flex-layout> |
| | | <!-- 表单 --> |
| | | <div class="flex-page-content"> |
| | | <el-table |
| | | id="batteryrTimequeryTable" |
| | | stripe |
| | | size="small" |
| | | :data="table2.datas" |
| | | height="100%" |
| | | class="tableCent" |
| | | > |
| | | <el-table-column |
| | | label="编号" |
| | | align="center" |
| | | type="index" |
| | | :width="50" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-for="header in table2.headers" |
| | | :key="header.prop" |
| | | :prop="header.prop" |
| | | :label="header.label" |
| | | :width="header.width" |
| | | :min-width="header.minWidth" |
| | | align="center" |
| | | ></el-table-column> |
| | | <el-table-column label="确认告警" align="center" :width="80"> |
| | | <template slot-scope="scope"> |
| | | <el-checkbox |
| | | :value="scope.row.almIsConfirmed == 1" |
| | | disabled |
| | | ></el-checkbox> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="cztime" |
| | | fixed="right" |
| | | width="180px" |
| | | align="center" |
| | | label="操作" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | type="primary" |
| | | size="mini" |
| | | @click="goRealTime(scope.row)" |
| | | >实时</el-button |
| | | > |
| | | <el-button |
| | | type="danger" |
| | | size="mini" |
| | | @click="verify(scope.row)" |
| | | >处理</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | |
| | | <!-- 底部分页 --> |
| | | <div class="flex-page-footer" slot="footer"> |
| | | <div class="el-pagination-btns"> |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | size="mini" |
| | | icon="el-icon-search" |
| | | @click="sendMessage" |
| | | >查询</el-button |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | round |
| | | size="mini" |
| | | icon="el-icon-wallet" |
| | | @click="exportData2" |
| | | >导出</el-button |
| | | > |
| | | </div> |
| | | <el-pagination |
| | | class="pagess" |
| | | @size-change="handleSizeChange2" |
| | | @current-change="handleCurrentChange2" |
| | | :current-page="queryInfo2.pagenum" |
| | | :page-sizes="[10, 20, 30, 50, 100]" |
| | | :page-size="queryInfo2.pagesize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="total2" |
| | | ></el-pagination> |
| | | <!-- <el-button type="primary" round size="mini" icon="el-icon-wallet">全部选中</el-button> --> |
| | | </div> |
| | | </flex-layout> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | <!-- 故障上报 --> |
| | | <el-dialog |
| | | title="故障上报" |
| | |
| | | :visible.sync="uploadVisible" |
| | | v-if="uploadVisible" |
| | | :stationId="uploadInfo.stationId" |
| | | :alarm-type="3" |
| | | :type="1" |
| | | :alarm-num="currAlarmNum" |
| | | :description="uploadInfo.alarmName" |
| | | ></upload-error> |
| | | </el-dialog> |
| | | <!-- 告警处理 --> |
| | | <el-dialog |
| | | title="告警处理" |
| | | width="640px" |
| | | :visible.sync="verifyVisible" |
| | | :close-on-click-modal="false" |
| | | top="0" |
| | | class="dialog-center dialog-verify" |
| | | :modal-append-to-body="false" |
| | | > |
| | | <verify-form |
| | | v-if="verifyVisible" |
| | | :info="currAlarmData" |
| | | @close="verifyClose" |
| | | ></verify-form> |
| | | </el-dialog> |
| | | </flex-layout> |
| | | </template> |
| | | |
| | | <script> |
| | | // import { getWsUrl } from "@/assets/js/tools"; |
| | | import VerifyForm from "./components/verify-form"; |
| | | import { |
| | | getProvinces, |
| | | searchCity, |
| | | searchCounty, |
| | | getStations, |
| | | } from "../dataMager/js/power"; |
| | | import { listToBeConfirmed } from "./js/verify"; |
| | | import { |
| | | getRTAlarmData, |
| | | getRTVerifyData, |
| | | confirmRTAlarm, |
| | | cancleRTAlarm, |
| | | delRTAlarm, |
| | |
| | | import NumberTotalTabs from "@/views/alarmMager/components/number-total-tabs.vue"; |
| | | import UploadError from "@/views/evaluationManage/dialog/uploadError.vue"; |
| | | const WSMixin = createWs("powerAlarmRt"); |
| | | const TABS = { |
| | | realTime: 1, |
| | | needDispose: 2, |
| | | }; |
| | | export default { |
| | | name: "powerRealtimeInfo", |
| | | components: { UploadError, NumberTotalTabs }, |
| | | components: { |
| | | UploadError, |
| | | NumberTotalTabs, |
| | | VerifyForm, |
| | | }, |
| | | mixins: [WSMixin], |
| | | data() { |
| | | let permits = this.$store.state.user.permits; |
| | |
| | | let isCanDel = isHasPermit("batt_alm_delete_permit", permits); |
| | | let isInGroup = Number(sessionStorage.getItem("isInGroup")) ? true : false; |
| | | return { |
| | | alarmConfig: [], |
| | | currAlarmNum: 0, |
| | | currAlarmData: {}, |
| | | verifyVisible: false, |
| | | acTabs: "realTime", |
| | | isInGroup, |
| | | uploadVisible: false, |
| | | uploadInfo: { |
| | |
| | | alarmName: "", |
| | | }, |
| | | isAutoLoad: false, |
| | | timer: new Timeout(), |
| | | isCanConfirm: isCanConfirm, |
| | | isCanQuit: isCanQuit, |
| | | isCanDel: isCanDel, |
| | | queryInfo: { |
| | | queryInfo1: { |
| | | pagenum: 1 /* 当前页码 绑定queryInfo.pagenum */, |
| | | pagesize: 10 /* 每页显示的数据 绑定queryInfo.pagesize */, |
| | | }, |
| | | total: 0 /* 总共有多少条 */, |
| | | queryInfo2: { |
| | | pagenum: 1 /* 当前页码 绑定queryInfo.pagenum */, |
| | | pagesize: 10 /* 每页显示的数据 绑定queryInfo.pagesize */, |
| | | }, |
| | | total1: 0 /* 总共有多少条 */, |
| | | total2: 0 /* 总共有多少条 */, |
| | | filters: { |
| | | values: { |
| | | province: "", |
| | |
| | | }, |
| | | checkboxs: JSON.parse(JSON.stringify(checkboxs)), |
| | | /* 表单 */ |
| | | table: { |
| | | table1: { |
| | | headers: [ |
| | | { |
| | | prop: "stationNamex", |
| | | label: "机房名称", |
| | | minWidth: 220, |
| | | }, |
| | | { |
| | | prop: "alarmName", |
| | | label: "告警名称", |
| | | width: 162, |
| | | }, |
| | | { |
| | | prop: "almValue", |
| | | label: "告警值", |
| | | width: 80, |
| | | }, |
| | | { |
| | | prop: "estateStr", |
| | | label: "告警等级", |
| | | width: 120, |
| | | }, |
| | | { |
| | | prop: "almSeverity1", |
| | | label: "告警重要等级", |
| | | width: 120, |
| | | }, |
| | | { |
| | | prop: "almStartTime", |
| | | label: "告警开始时间", |
| | | width: 180, |
| | | }, |
| | | { |
| | | prop: "almConfirmedTime", |
| | | label: "告警确认时间", |
| | | width: 180, |
| | | }, |
| | | ], |
| | | datas: [], |
| | | }, |
| | | table2: { |
| | | headers: [ |
| | | { |
| | | prop: "stationNamex", |
| | |
| | | }, |
| | | watch: {}, |
| | | mounted() { |
| | | this.listToBeConfirmed(); |
| | | // 根据告警类型勾选筛选条件 |
| | | let alarmType = this.$route.query.alarmType; |
| | | if (alarmType) { |
| | |
| | | this.searchProvince(); //查询省 |
| | | }, |
| | | methods: { |
| | | listToBeConfirmed() { |
| | | listToBeConfirmed(3) |
| | | .then((res) => { |
| | | let { code, data } = res.data; |
| | | let list = []; |
| | | if (code && data) { |
| | | list = data; |
| | | } |
| | | this.alarmConfig = list; |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err); |
| | | }); |
| | | }, |
| | | tabClick(tab) { |
| | | this.acTabs = tab.name; |
| | | if (tab.name == "realTime") { |
| | | this.handleCurrentChange1(1); |
| | | } else { |
| | | this.handleCurrentChange2(1); |
| | | } |
| | | }, |
| | | showUploadDialog(data) { |
| | | // 判断告警 是否为配置中的 TODO |
| | | if (!this.alarmConfig.some((v) => v == data.almType)) { |
| | | this.$message.error("当前告警不需要手动处理, 不能上报"); |
| | | return false; |
| | | } |
| | | this.uploadInfo.stationId = data.stationId; |
| | | this.uploadInfo.alarmName = data.alarmName; |
| | | this.currAlarmNum = data.num; |
| | | this.uploadVisible = true; |
| | | }, |
| | | createSearch(data) { |
| | |
| | | if (alarmLevel) { |
| | | this.$refs.levels.changeHandle(alarmLevel); |
| | | } |
| | | |
| | | this.acTabs = "realTime"; |
| | | if (this.$route.query.fromType == "fromIndex") { |
| | | this.isAutoLoad = true; |
| | | this.filters.values.province = this.$route.query.province; |
| | |
| | | this.levelRes.three = levelRes[2]; |
| | | this.levelRes.four = levelRes[3]; |
| | | |
| | | this.searchData(res.data.alarmRes); |
| | | this.searchData1(res.data.alarmRes); |
| | | this.searchData2(res.data.verifyListRes); |
| | | }, |
| | | searchData(res, isExportFile) { |
| | | searchData1(res, isExportFile) { |
| | | // 判断是否导出全部 === 不能删除,防止isExPortFile={} |
| | | isExportFile = isExportFile === true; |
| | | if (res) { |
| | | if (res.code) { |
| | | this.total = res.data.total; |
| | | this.total1 = res.data.total; |
| | | let list = res.data.list.map((item) => { |
| | | let { stationName1, stationName2, stationName3, stationName5 } = item; |
| | | let { stationName1, stationName2, stationName3, stationName5 } = |
| | | item; |
| | | let stationNameObj = { |
| | | stationName1, |
| | | stationName2, |
| | |
| | | item.almSeverity1 = item.almSeverity == 1 ? "紧急" : "重要"; |
| | | return item; |
| | | }); |
| | | if(isExportFile) { |
| | | this.exportFile(list); |
| | | }else { |
| | | this.table.datas = list; |
| | | if (isExportFile) { |
| | | this.exportFile(list, 1); |
| | | } else { |
| | | this.table1.datas = list; |
| | | } |
| | | } else { |
| | | this.total = 0; |
| | | this.table.datas = []; |
| | | this.total1 = 0; |
| | | this.table1.datas = []; |
| | | } |
| | | } |
| | | }, |
| | | exportData() { |
| | | searchData2(res, isExportFile) { |
| | | // 判断是否导出全部 === 不能删除,防止isExPortFile={} |
| | | isExportFile = isExportFile === true; |
| | | if (res) { |
| | | if (res.code) { |
| | | this.total2 = res.data.total; |
| | | let list = res.data.list.map((item) => { |
| | | let { stationName1, stationName2, stationName3, stationName5 } = |
| | | item; |
| | | let stationNameObj = { |
| | | stationName1, |
| | | stationName2, |
| | | stationName3, |
| | | stationName5, |
| | | }; |
| | | item.stationNameObj = stationNameObj; |
| | | item.stationNamex = stationName5 + "-" + stationName3; |
| | | item.estateStr = estateFn(item.almLevel); |
| | | item.almConfirmedTime = |
| | | item.almIsConfirmed == 1 ? item.almConfirmedTime : ""; |
| | | item.almIsConfirmed1 = item.almIsConfirmed == 1 ? "是" : "否"; |
| | | item.almSeverity1 = item.almSeverity == 1 ? "紧急" : "重要"; |
| | | return item; |
| | | }); |
| | | if (isExportFile) { |
| | | this.exportFile(list, 2); |
| | | } else { |
| | | this.table2.datas = list; |
| | | } |
| | | } else { |
| | | this.total2 = 0; |
| | | this.table2.datas = []; |
| | | } |
| | | } |
| | | }, |
| | | exportData1() { |
| | | let params = this.paramsData(true); |
| | | getRTAlarmData(params).then(res=>{ |
| | | let rs = res.data; |
| | | this.searchData(rs, true) |
| | | }).catch(error=>{ |
| | | console.log(error); |
| | | }); |
| | | getRTAlarmData(params) |
| | | .then((res) => { |
| | | let rs = res.data; |
| | | this.searchData1(rs, true); |
| | | }) |
| | | .catch((error) => { |
| | | console.log(error); |
| | | }); |
| | | }, |
| | | exportData2() { |
| | | let params = this.paramsData(true); |
| | | getRTVerifyData(params) |
| | | .then((res) => { |
| | | let rs = res.data; |
| | | this.searchData2(rs, true); |
| | | }) |
| | | .catch((error) => { |
| | | console.log(error); |
| | | }); |
| | | }, |
| | | // 构造查询条件 |
| | | paramsData: function (isExportFile) { |
| | |
| | | |
| | | return { |
| | | page: { |
| | | pageCurr: isExportFile?1:vm.queryInfo.pagenum, |
| | | pageSize: isExportFile?vm.total:vm.queryInfo.pagesize, |
| | | pageCurr: isExportFile |
| | | ? 1 |
| | | : vm["queryInfo" + TABS[this.acTabs]].pagenum, |
| | | pageSize: isExportFile |
| | | ? vm["total" + TABS[this.acTabs]] |
| | | : vm["queryInfo" + TABS[this.acTabs]].pagesize, |
| | | }, |
| | | almTypes: checkArr.length === 0 ? [0] : checkArr, |
| | | stationName1: vm.filters.values.province, //省 |
| | |
| | | }, |
| | | changeHome: function () { |
| | | // 重置分页信息 |
| | | this.queryInfo.pagenum = 1; |
| | | this.queryInfo1.pagenum = 1; |
| | | this.queryInfo2.pagenum = 1; |
| | | // 查询数据 |
| | | this.sendMessage(); |
| | | }, |
| | |
| | | searchHome() { |
| | | //查询机房 |
| | | // 重置分页信息 |
| | | this.queryInfo.pagenum = 1; |
| | | this.queryInfo1.pagenum = 1; |
| | | this.queryInfo2.pagenum = 1; |
| | | // 重置值 |
| | | this.filters.values.home = this.isAutoLoad ? this.$route.query.home : ""; |
| | | let searchParams = { |
| | |
| | | }, |
| | | |
| | | // 导出表格 |
| | | exportFile(list) { |
| | | exportFile(list, idx) { |
| | | let tHeader = []; |
| | | let filterVal = []; |
| | | this.table.headers.forEach((item) => { |
| | | this.table1.headers.forEach((item) => { |
| | | tHeader.push(item.label); |
| | | filterVal.push(item.prop); |
| | | }); |
| | | tHeader.push("确认告警"); |
| | | filterVal.push("almIsConfirmed1"); |
| | | let excelData = formatJson(filterVal, list); |
| | | export_json_to_excel(tHeader, excelData, "电源实时信息告警"); |
| | | export_json_to_excel( |
| | | tHeader, |
| | | excelData, |
| | | 1 == idx ? "电源实时信息告警" : "电源待处理告警" |
| | | ); |
| | | }, |
| | | verify(obj) { |
| | | this.currAlarmData = { |
| | | ...obj, |
| | | // 1电池 2设备 3电源 |
| | | alarmType: 3, |
| | | almId: obj.almType, |
| | | powerDeviceId: obj.PowerDeviceId, |
| | | }; |
| | | this.verifyVisible = true; |
| | | }, |
| | | verifyClose() { |
| | | this.verifyVisible = false; |
| | | this.sendMessage(); |
| | | }, |
| | | /* 告警信息 */ |
| | | /* 删除 */ |
| | |
| | | }) |
| | | .catch((close) => {}); |
| | | }, |
| | | handleSizeChange(newSize) { |
| | | this.queryInfo.pagesize = newSize; |
| | | handleSizeChange1(newSize) { |
| | | this.queryInfo1.pagesize = newSize; |
| | | /*console.log(`每页 ${val} 条`); */ |
| | | this.sendMessage(); |
| | | }, |
| | | handleCurrentChange(newPage) { |
| | | this.queryInfo.pagenum = newPage; |
| | | handleCurrentChange1(newPage) { |
| | | this.queryInfo1.pagenum = newPage; |
| | | /*console.log(`当前页: ${val}`); */ |
| | | this.sendMessage(); |
| | | }, |
| | | handleSizeChange2(newSize) { |
| | | this.queryInfo2.pagesize = newSize; |
| | | /*console.log(`每页 ${val} 条`); */ |
| | | this.sendMessage(); |
| | | }, |
| | | handleCurrentChange2(newPage) { |
| | | this.queryInfo2.pagenum = newPage; |
| | | /*console.log(`当前页: ${val}`); */ |
| | | this.sendMessage(); |
| | | }, |
| | |
| | | }, |
| | | }, |
| | | destroyed() { |
| | | window.onresize = null; |
| | | this.timer.stop(); |
| | | // window.onresize = null; |
| | | }, |
| | | }; |
| | | </script> |
| | |
| | | type: [Number, String], |
| | | default: -100 |
| | | }, |
| | | // 1电池告警 2设备告警 3电源告警 |
| | | alarmType: { |
| | | type: Number, |
| | | required: true |
| | | }, |
| | | alarmNum: { |
| | | type: Number, |
| | | required: true |
| | | }, |
| | | type: { |
| | | type: [Number, String], |
| | | default: -100 |
| | |
| | | let {stationName, stationName3} = this.getStationInfo(params.stationId, this.stationList); |
| | | this.params.stationName = stationName; |
| | | this.params.stationName3 = stationName3; |
| | | this.params.alarmType = this.alarmType; |
| | | this.params.alarmNum = this.alarmNum; |
| | | |
| | | // 确认框 |
| | | this.$confirm("确认上传故障信息", "系统提示", { |
| | | type: "warning" |
| | |
| | | label="操作" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | <!-- <el-button |
| | | type="primary" |
| | | size="mini" |
| | | :disabled="!!scope.row.status" |
| | | @click="showUploadErrorConfirm(scope.row)" |
| | | >确认</el-button |
| | | > |
| | | > --> |
| | | <el-button |
| | | type="danger" |
| | | size="mini" |
| | |
| | | </div> |
| | | <div class="table-cell"> |
| | | <el-button type="primary" size="mini" @click="searchData">查询</el-button> |
| | | <el-button type="primary" size="mini" @click="uploadVisible=true">故障上报</el-button> |
| | | <!-- <el-button type="primary" size="mini" @click="uploadVisible=true">故障上报</el-button> --> |
| | | <el-button type="primary" size="mini" @click="showResult">年度考核结果</el-button> |
| | | </div> |
| | | </div> |
| | |
| | | @size-change="sizeChange"></el-pagination> |
| | | </div> |
| | | <!-- 故障上报 --> |
| | | <el-dialog |
| | | <!-- <el-dialog |
| | | title="故障上报" |
| | | width="auto" |
| | | :visible.sync="uploadVisible" |
| | |
| | | class="dialog-center" |
| | | :modal-append-to-body="false"> |
| | | <upload-error :visible.sync="uploadVisible" v-if="uploadVisible" @success="searchData"></upload-error> |
| | | </el-dialog> |
| | | </el-dialog> --> |
| | | <el-dialog |
| | | title="年度考核结果" |
| | | fullscreen |
| | |
| | | typeCount, |
| | | annualDetail, |
| | | } from "./js/apis"; |
| | | import UploadError from "@/views/evaluationManage/dialog/uploadError.vue"; |
| | | // import UploadError from "@/views/evaluationManage/dialog/uploadError.vue"; |
| | | import UploadErrorConfirm from "@/views/evaluationManage/dialog/uploadErrorConfirm.vue"; |
| | | import { groupNameList } from "@/views/userMager/apis/apis.js"; |
| | | import resultPage from "@/views/evaluationManage/components/resultPage.vue"; |
| | |
| | | components: { |
| | | UploadErrorDetails, |
| | | resultPage, |
| | | UploadError, |
| | | // UploadError, |
| | | totalData, |
| | | Card, |
| | | UploadErrorConfirm |
| | |
| | | }, |
| | | ], |
| | | tableData: [], |
| | | uploadVisible: false, |
| | | // uploadVisible: false, |
| | | uploadConfirmVisible: false, |
| | | itemErrorInfo: { |
| | | stationId: 0, |
| | |
| | | </div> |
| | | <div class="table-cell"> |
| | | <el-button type="primary" size="mini" @click="searchData">查询</el-button> |
| | | <el-button type="primary" size="mini" @click="uploadVisible=true">故障上报</el-button> |
| | | <!-- <el-button type="primary" size="mini" @click="uploadVisible=true">故障上报</el-button> --> |
| | | <el-button type="primary" size="mini" @click="showResult">年度考核结果</el-button> |
| | | </div> |
| | | </div> |
| | |
| | | @size-change="sizeChange"></el-pagination> |
| | | </div> |
| | | <!-- 故障上报 --> |
| | | <el-dialog |
| | | <!-- <el-dialog |
| | | title="故障上报" |
| | | width="auto" |
| | | :visible.sync="uploadVisible" |
| | |
| | | class="dialog-center" |
| | | :modal-append-to-body="false"> |
| | | <upload-error :visible.sync="uploadVisible" v-if="uploadVisible" @success="searchData"></upload-error> |
| | | </el-dialog> |
| | | </el-dialog> --> |
| | | <el-dialog |
| | | title="年度考核结果" |
| | | fullscreen |
| | |
| | | typeCount, |
| | | annualDetail, |
| | | } from "./js/apis"; |
| | | import UploadError from "@/views/evaluationManage/dialog/uploadError.vue"; |
| | | // import UploadError from "@/views/evaluationManage/dialog/uploadError.vue"; |
| | | import UploadErrorConfirm from "@/views/evaluationManage/dialog/uploadErrorConfirm.vue"; |
| | | import { groupNameList } from "@/views/userMager/apis/apis.js"; |
| | | import resultPage from "@/views/evaluationManage/components/resultPage.vue"; |
| | |
| | | components: { |
| | | UploadErrorDetails, |
| | | resultPage, |
| | | UploadError, |
| | | // UploadError, |
| | | totalData, |
| | | Card, |
| | | UploadErrorConfirm |
| | |
| | | }, |
| | | ], |
| | | tableData: [], |
| | | uploadVisible: false, |
| | | // uploadVisible: false, |
| | | uploadConfirmVisible: false, |
| | | itemErrorInfo: { |
| | | stationId: 0, |
| | |
| | | let checkedKeys = obj.checkedKeys; |
| | | this.list.forEach((v) => { |
| | | v.children.forEach((o) => { |
| | | o.almAutoClearEn = checkedKeys.some((m) => m == o.id) * 1; |
| | | o.almAutoClearEn = !checkedKeys.some((m) => m == o.id) * 1; |
| | | }); |
| | | }); |
| | | }, |