he wei
2023-08-18 c4b8bdadf95987a4c3fb5d58adf93e89f7dcb1f7
AU 告警待处理 上报流程等提交
3个文件已添加
13个文件已修改
2271 ■■■■ 已修改文件
src/assets/js/tools/getPageMenu.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/OpsAllocation/alarmVerifyHis.vue 624 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/alarmMager/batteryrTimequery.vue 400 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/alarmMager/components/verify-form.vue 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/alarmMager/deviceTimequery.vue 376 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/alarmMager/js/batteryrTimequery.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/alarmMager/js/deviceTimequery.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/alarmMager/js/power.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/alarmMager/js/verify.js 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/alarmMager/powerRealtimeInfo.vue 608 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/evaluationManage/dialog/uploadError.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/evaluationManage/task-admin.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/evaluationManage/task-monitor.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/evaluationManage/task-ops.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/pageSetting/components/alarmConfig.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/tools/getPageMenu.js
@@ -655,6 +655,17 @@
          ord: 2,
          level: 2,
        },
        {
          label: "告警处理记录",
          name: "alarmVerifyHis",
          src: "/OPSAllocation/alarmVerifyHis",
          closable: true,
          id: 10003,
          menuId: 10,
          enableduse: true,
          ord: 3,
          level: 2,
        },
      ]
    },
    {
src/router/index.js
@@ -973,6 +973,15 @@
    meta: {
      title: '审批',
    }
  }, {
    path: 'alarmVerifyHis',
    name: 'alarmVerifyHis',
    component: (resolve) => {
      require(['@/views/OpsAllocation/alarmVerifyHis'], resolve)
    },
    meta: {
      title: '告警处理记录',
    }
  }]
},
// 强制刷新空界面
src/views/OpsAllocation/alarmVerifyHis.vue
New file
@@ -0,0 +1,624 @@
<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>
src/views/alarmMager/batteryrTimequery.vue
@@ -340,7 +340,8 @@
                round
                size="mini"
                icon="el-icon-wallet"
                @click="exportFile1()">导出</el-button
                @click="exportData(1)"
                >导出</el-button
              >
            </div>
            <el-pagination
@@ -468,7 +469,8 @@
                round
                size="mini"
                icon="el-icon-wallet"
                @click="exportFile2()">导出</el-button
                @click="exportData(2)"
                >导出</el-button
              >
            </div>
            <el-pagination
@@ -478,6 +480,102 @@
              :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>
@@ -514,14 +612,33 @@
        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 /* 确认告警 */,
@@ -532,7 +649,8 @@
  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";
@@ -540,7 +658,13 @@
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],
@@ -552,6 +676,10 @@
    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: {
@@ -579,8 +707,14 @@
        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: [],
      /* 机房站点 */
@@ -769,7 +903,56 @@
        ],
        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: {
@@ -786,8 +969,10 @@
    AlarmDetails,
    NumberTotalTabs,
    DispatchForm,
    VerifyForm,
  },
  mounted() {
    this.listToBeConfirmed();
    // 根据告警类型勾选筛选条件
    let alarmType = this.$route.query.alarmType;
    if (alarmType) {
@@ -816,20 +1001,39 @@
    // 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 =
@@ -846,14 +1050,10 @@
    },
    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) => {
@@ -862,23 +1062,13 @@
      });
      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() {
@@ -955,6 +1145,7 @@
      this.paramsAlram1(data.unconfirmedAlarms);
      this.paramsAlram2(data.confirmedAlarms);
      this.paramsAlram3(data.verifyListRes);
    },
    formatParams(isExportFile) {
      // 判断是否导出全部 === 不能删除,防止isExPortFile={}
@@ -985,28 +1176,25 @@
        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);
@@ -1050,12 +1238,20 @@
            });
          });
        });
        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);
@@ -1100,17 +1296,105 @@
            });
          });
        });
        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) {
@@ -1160,7 +1444,11 @@
    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) {
@@ -1244,6 +1532,16 @@
      /*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;
@@ -1259,7 +1557,7 @@
    onWSMessage(res) {
      res = JSON.parse(res.data);
      let data = res.data;
      console.log(data, "=====data");
      // console.log(data, "=====data");
      this.paramsAlram(data);
    },
    changeSkin() {
src/views/alarmMager/components/verify-form.vue
New file
@@ -0,0 +1,121 @@
<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>
src/views/alarmMager/deviceTimequery.vue
@@ -186,7 +186,7 @@
                round
                size="mini"
                icon="el-icon-wallet"
                @click="exportFile1"
                @click="exportData(1)"
                >导出
              </el-button>
            </div>
@@ -316,7 +316,7 @@
                round
                size="mini"
                icon="el-icon-wallet"
                @click="exportFile2"
                @click="exportData(2)"
                >导出
              </el-button>
            </div>
@@ -329,6 +329,103 @@
              :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>
@@ -349,8 +446,26 @@
        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>
@@ -362,6 +477,7 @@
  getBattGroupIdByDevId,
} from "@/assets/js/api";
import {
  deviceVerifyAlarm,
  deviceAlarm,
  deviceOk,
  deviceDelete,
@@ -372,14 +488,25 @@
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;
@@ -390,6 +517,10 @@
    let levels = getDevAlarm().levels;
    let isInGroup = Number(sessionStorage.getItem("isInGroup")) ? true : false;
    return {
      alarmConfig: [],
      currAlarmNum: 0,
      currAlarmData: {},
      verifyVisible: false,
      isInGroup,
      uploadVisible: false,
      uploadInfo: {
@@ -408,9 +539,14 @@
        currentPage: 1,
        pagesize: 20,
      },
      queryInfo3: {
        currentPage: 1,
        pagesize: 20,
      },
      acTabs: "unconfirmed",
      total1: 0,
      total2: 0,
      total3: 0,
      selectValue1: "",
      selectPlace1: "",
      selectValue2: "",
@@ -524,6 +660,56 @@
        ],
        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,
@@ -536,6 +722,7 @@
  },
  watch: {},
  mounted() {
    this.listToBeConfirmed();
    let query = this.$route.query;
    if (query.fromType == "fromIndex") {
      this.selectValue1 = query.province ? query.province : "";
@@ -554,6 +741,20 @@
    // 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) => {
@@ -569,8 +770,13 @@
        });
    },
    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) {
@@ -602,7 +808,7 @@
        // 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 : "";
@@ -620,7 +826,7 @@
      }
    },
    // 导出表格
    exportFile1() {
    exportFile(list, idx) {
      let tHeader = [];
      let filterVal = [];
      this.table1.headers.map((item) => {
@@ -629,23 +835,13 @@
      });
      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() {
@@ -702,9 +898,11 @@
      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);
@@ -730,7 +928,11 @@
          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;
        // 关闭等待框
@@ -743,7 +945,8 @@
      }
    },
    /* 告警信息 */
    async alarmDev2(res) {
    alarmDev2(res, isExportFile) {
      isExportFile = isExportFile === true;
      let loading;
      if (this.isFirstQuery) {
        loading = this.$layer.loading(1);
@@ -768,7 +971,11 @@
          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;
        // 关闭等待框
@@ -779,6 +986,90 @@
        // 关闭等待框
        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();
@@ -793,14 +1084,8 @@
        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,
@@ -813,6 +1098,21 @@
      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) {
@@ -919,6 +1219,16 @@
      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();
src/views/alarmMager/js/batteryrTimequery.js
@@ -11,6 +11,19 @@
}
/**
 * 查询待处理告警列表
 * @param {*} data
 * @returns
 */
export const getVerifyAlarm = (data) => {
  return axios({
    method: "POST",
    url: "battAlarmDataVerify/page",
    data
  })
}
/**
 * 点击确认告警
 * num
 */
src/views/alarmMager/js/deviceTimequery.js
@@ -13,6 +13,18 @@
  })
}
/**
 * 查询待处理告警列表
 * @param {*} data
 * @returns
 */
export const deviceVerifyAlarm = (data) => {
  return axios({
    method: "POST",
    url: "devAlarmDataVerify/page",
    data
  })
}
/* 
确认告警
Batt_devalarm_dataAction!updatePro // 旧
src/views/alarmMager/js/power.js
@@ -11,6 +11,19 @@
    data
  });
}
/**
 * 查询电源待处理告警
 * @param {*} data
 * @returns
 */
export const getRTVerifyData = (data) => {
  return axios({
    method: 'POST',
    url: 'pwrAlarmVerify/page',
    data
  });
}
/**
 * 查询通信电源实时告警
 * PowerAlarmAction_power_getAllPage2  // 旧
src/views/alarmMager/js/verify.js
New file
@@ -0,0 +1,42 @@
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}
  });
};
src/views/alarmMager/powerRealtimeInfo.vue
@@ -180,120 +180,244 @@
        </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="故障上报"
@@ -308,23 +432,44 @@
        :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,
@@ -338,9 +483,17 @@
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;
@@ -349,6 +502,11 @@
    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: {
@@ -357,15 +515,19 @@
        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: "",
@@ -382,7 +544,47 @@
      },
      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",
@@ -434,6 +636,7 @@
  },
  watch: {},
  mounted() {
    this.listToBeConfirmed();
    // 根据告警类型勾选筛选条件
    let alarmType = this.$route.query.alarmType;
    if (alarmType) {
@@ -463,9 +666,37 @@
    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) {
@@ -492,7 +723,7 @@
      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;
@@ -519,16 +750,18 @@
      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,
@@ -544,25 +777,73 @@
            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) {
@@ -580,8 +861,12 @@
      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, //省
@@ -595,7 +880,8 @@
    },
    changeHome: function () {
      // 重置分页信息
      this.queryInfo.pagenum = 1;
      this.queryInfo1.pagenum = 1;
      this.queryInfo2.pagenum = 1;
      // 查询数据
      this.sendMessage();
    },
@@ -702,7 +988,8 @@
    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 = {
@@ -752,17 +1039,35 @@
    },
    // 导出表格
    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();
    },
    /* 告警信息 */
    /* 删除 */
@@ -864,13 +1169,23 @@
        })
        .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();
    },
@@ -911,8 +1226,7 @@
    },
  },
  destroyed() {
    window.onresize = null;
    this.timer.stop();
    // window.onresize = null;
  },
};
</script>
src/views/evaluationManage/dialog/uploadError.vue
@@ -63,6 +63,15 @@
      type: [Number, String],
      default: -100
    },
    // 1电池告警  2设备告警  3电源告警
    alarmType: {
      type: Number,
      required: true
    },
    alarmNum: {
      type: Number,
      required: true
    },
    type: {
      type: [Number, String],
      default: -100
@@ -152,6 +161,9 @@
      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"
src/views/evaluationManage/task-admin.vue
@@ -133,13 +133,13 @@
            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"
src/views/evaluationManage/task-monitor.vue
@@ -114,7 +114,7 @@
          </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>
@@ -165,7 +165,7 @@
        @size-change="sizeChange"></el-pagination>
    </div>
    <!-- 故障上报 -->
    <el-dialog
    <!-- <el-dialog
      title="故障上报"
      width="auto"
      :visible.sync="uploadVisible"
@@ -174,7 +174,7 @@
      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
@@ -229,7 +229,7 @@
  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";
@@ -243,7 +243,7 @@
  components: {
    UploadErrorDetails,
    resultPage,
    UploadError,
    // UploadError,
    totalData,
    Card,
    UploadErrorConfirm
@@ -346,7 +346,7 @@
        },
      ],
      tableData: [],
      uploadVisible: false,
      // uploadVisible: false,
      uploadConfirmVisible: false,
      itemErrorInfo: {
        stationId: 0,
src/views/evaluationManage/task-ops.vue
@@ -114,7 +114,7 @@
          </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>
@@ -166,7 +166,7 @@
        @size-change="sizeChange"></el-pagination>
    </div>
    <!-- 故障上报 -->
    <el-dialog
    <!-- <el-dialog
      title="故障上报"
      width="auto"
      :visible.sync="uploadVisible"
@@ -175,7 +175,7 @@
      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
@@ -230,7 +230,7 @@
  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";
@@ -244,7 +244,7 @@
  components: {
    UploadErrorDetails,
    resultPage,
    UploadError,
    // UploadError,
    totalData,
    Card,
    UploadErrorConfirm
@@ -347,7 +347,7 @@
        },
      ],
      tableData: [],
      uploadVisible: false,
      // uploadVisible: false,
      uploadConfirmVisible: false,
      itemErrorInfo: {
        stationId: 0,
src/views/pageSetting/components/alarmConfig.vue
@@ -62,7 +62,7 @@
      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;
        });
      });
    },