didiyu
2019-09-24 6e0dfcdd914738ff0739cde57fa103a7a212d352
Signed-off-by: didiyu <1293722656@qq.com>
3个文件已修改
7个文件已添加
4001 ■■■■■ 已修改文件
src/App.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warnmanage/cellhistory.vue 897 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warnmanage/cellreal.vue 335 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warnmanage/cellwarnset.vue 531 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warnmanage/equiphistory.vue 726 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warnmanage/equipreal.vue 732 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warnmanage/equipwarnset.vue 634 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warnmanage/js/csv.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warnmanage/js/export-csv.js 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/App.vue
@@ -138,6 +138,12 @@
            {
              label: '设备告警历史查询',
              name: 'warnmanage/equiphistory'
            },{
              label: '电池告警参数设置',
              name: 'warnmanage/cellwarnset'
            },{
              label: '设备告警参数设置',
              name: 'warnmanage/equipwarnset'
            }
          ]
        }
src/router.js
@@ -9,6 +9,11 @@
            'monitor/real': (resolve)=>require(['./views/monitor/realTime.vue'], resolve),
            'monitor/history': (resolve)=>require(['./views/monitor/history.vue'], resolve),
            'warnmanage/cellreal': (resolve)=>require(['./views/warnmanage/cellreal.vue'], resolve),
            'warnmanage/cellhistory': (resolve)=>require(['./views/warnmanage/cellhistory.vue'], resolve),
            'warnmanage/equipreal': (resolve)=>require(['./views/warnmanage/equipreal.vue'], resolve),
            'warnmanage/equiphistory': (resolve)=>require(['./views/warnmanage/equiphistory.vue'], resolve),
            'warnmanage/cellwarnset':  (resolve)=>require(['./views/warnmanage/cellwarnset.vue'], resolve),
            'warnmanage/equipwarnset':  (resolve)=>require(['./views/warnmanage/equipwarnset.vue'], resolve)
        }
    }
];
src/views/warnmanage/cellhistory.vue
New file
@@ -0,0 +1,897 @@
<template>
    <div class="view-root">
        <div class="view-root-inner">
            <div class="view-layout">
        <Row>
        <Col span="3">
        维护区
        </Col>
        <Col span="8">
        机房站点
        </Col>
        <Col span="5">
        蓄电池组
        </Col>
        <Col span="8">
        告警开始日期
        </Col>
        </Row>
        <Row>
        <Col span="3">
            <Select v-model="whq" :value='4451' @on-change="changedwhq" style="width:160px" placement="bottom" >
        <Option v-for="item in station_name1" :value="item.value" :key="item.value">{{ item.label }}</Option>
          </Select>
        </Col>
        <Col span="8">
                <Select v-model="jfzd" @on-change="changedjfzd" style="width:430px" placement="bottom" >
        <Option v-for="item in  station_name" :value="item.value" :key="item.value">{{ item.label }}</Option>
    </Select>
        </Col>
        <Col span="5">
                <Select v-model="xdcz" @on-change="changed" style="width:200px" placement="bottom" >
        <Option v-for="item in battgroup_name" :value="item.value" :key="item.value">{{ item.label }}</Option>
    </Select>
        </Col>
        <Col span="4">
            <DatePicker type="date" format="yyyy-MM-dd" v-model="startTime"   @on-change="startTimeChoose" placeholder="请选择时间段"  :editable="false" style="width: 200px; color: #515a6e;"></DatePicker>
        </Col>
        <Col span="4">
            <DatePicker type="date" format="yyyy-MM-dd" v-model="endTime"  @on-change="endTimeOpen"
             placeholder="请选择时间段" :editable="false" style="width: 200px;color: #515a6e;"></DatePicker>
        </Col>
        </Row>
        <Row>
        <Col span="12">
            <CheckboxGroup v-model="warncond" @on-change="changed">
                <Row>
                 <Col span="8">
                        <Checkbox label="119002" size="large">
                        <span>组端电压</span>
                        </Checkbox>
                 </Col>
                 <Col span="8">
                        <Checkbox label="119003" size="large">
                            <span>充电电流</span>
                        </Checkbox>
                 </Col>
                 <Col span="8">
                        <Checkbox label="119004" size="large">
                            <span>放电电流</span>
                        </Checkbox>
                 </Col>
                </Row>
                <Row>
                 <Col span="8">
                     <Checkbox label="119005" size="large">
                        <span>单体电压</span>
                    </Checkbox>
                 </Col>
                 <Col span="8">
                    <Checkbox label="119007" size="large">
                        <span>单体内阻</span>
                    </Checkbox>
                 </Col>
                 <Col span="8">
                    <Checkbox label="119006" size="large">
                        <span>单体温度</span>
                    </Checkbox>
                 </Col>
                </Row>
            </CheckboxGroup>
        </Col>
        <Col span="4">
             <Col >
                  <CheckboxGroup v-model="warnthr" @on-change="changed">
                     <Row span="12">
                         <Checkbox label="1" size="large">
                        <span>上限告警</span>
                        </Checkbox>
                     </Row>
                     <Row span="12">
                         <Checkbox label="0" size="large">
                            <span>下限告警</span>
                        </Checkbox>
                     </Row>
                  </CheckboxGroup>
             </Col>
        </Col>
        <Col span="8">
            <CheckboxGroup v-model="warngra" @on-change="changed">
                 <Row>
                      <Col span="12">
                        <Checkbox label="1" size="large">
                        <span>一级告警</span>
                        </Checkbox>
                      </Col>
                      <Col span="12">
                        <Checkbox label="2" size="large">
                            <span>二级告警</span>
                        </Checkbox>
                      </Col>
                 </Row>
                 <Row>
                      <Col span="12">
                         <Checkbox label="3" size="large">
                            <span>三级告警</span>
                        </Checkbox>
                      </Col>
                      <Col span="12">
                        <Checkbox label="4" size="large">
                            <span>四级告警</span>
                        </Checkbox>
                      </Col>
                 </Row>
            </CheckboxGroup>
        </Col>
    </Row>
    <Divider style="background-color: #2d8cf0" />
            <Table :highlight-row="selectone" :data="tableData1" :disabled-hover="true" border :columns="tableColumns1" ref="table" @on-current-change="selectonedata" @on-selection-change="selectmoredata" :height="tableHeight" no-data-text="暂无数据"></Table>
            <div style="margin: 10px;overflow: hidden">
                <div style="float: left;"> <Button :size="buttonSize" @click="tabCheckbox" icon="md-checkmark-circle" type="warning">{{selecttext?'取消':'多选'}}</Button></div>
                <div style="float: right;">
                    <Page :total="pageAll"  size="small" show-elevator show-sizer :current="1" @on-change="getpageCurr" @on-page-size-change="getpageSize"/>
                </div>
                <div style="float: right; margin-right:20px"><Button :size="buttonSize"  @click="sureExp"  icon="ios-download-outline" type="primary">导出</Button></div>
                <div  style="float: right; margin-right:20px">
                    <ButtonGroup >
                            <Button :size="buttonSize" @click="delrecord" icon="ios-warning-outline" type="error">删除记录</Button>
                    </ButtonGroup>
                </div>
            </div>
            </div>
        </div>
    </div>
</template>
<script>
import {ajax, formatSeconds, sethoubeiTime,
        Timeout, getMaxFromArr, getMinFromArr,
        Title, getSumFromArr, getAvgFromArr} from "../../libs/common"
import {getBattstate, BTSCircle} from '../../assets/js/battInfo'
import $ from 'jquery'
import Csv from './js/csv.js';
import ExportCsv from './js/export-csv.js';
import { setTimeout } from 'timers';
export default {
    components: {
    },
    data() {
        return {
            selecttext:false,
            selectone: true,
            operatedata: [],
            buttonSize: 'small',
            timer: new Timeout(),        // 实时告警计时器
            loading: true,
            station_name1:[],
            station_name:[],
            battgroup_name:[],
            whq: '',
            jfzd: '',
            xdcz: '0',
            warncond: ['119002', '119003', '119004', '119005', '119007', '119006'],
            warnthr:['1','0'],
            warngra:['1','2','3','4'],
            pageCurr: '1',
            pageSize: '10',
            pageAll: 1,
            tableHeight: 450,
            tableData1: [],
            tableColumns1: [
                {
                    title: '编号',
                    key: 'number'
                },
                {
                    title: '机房名称',
                    key: 'comname',
                    render: (h, params) => {
                        //console.log(params);
                        return h('div',  params.row.comname);
                    }
                },
                {
                    title: '电池组名称',
                    key: 'battname'
                },
                {
                    title: '告警名称',
                    key: 'warnname'
                },
                {
                    title: '单体编号',
                    key: 'singname'
                },
                {
                    title: '告警值',
                    key: 'warnval'
                },
                    {
                    title: '告警等级',
                    key: 'warnlev'
                },
                {
                    title: '确认告警',
                    key: 'warnsure',
                    width: 150,
                    align: 'center',
                    render: (h, params) => {
                        const row = params.row;
                        const color = row.warnsure === 0 ? 'error' : 'success';
                        const text = row.warnsure === 0 ? '未确认' : '已确认';
                        return h('Tag', {
                            props: {
                                type: 'dot',
                                color: color
                            }
                        }, text);
                    }
                },
                {
                    title: '告警确认时间',
                    key: 'warnsuretime'
                },
                    {
                    title: '告警开始时间',
                    key: 'warnstarttime'
                },
                    {
                    title: '告警结束时间',
                    key: 'warnstoptime'
                }
            ],
                startTime: '2000-01-01',
                endTime: new Date()
        }
    },
    computed:{
        fault_type_id(){
            if(this.warncond.indexOf("119002")>-1){return '119002'}
            else{return '0';}
        },
        fault_level(){
            if(this.warncond.indexOf("119003")>-1){return '119003'}
            else{return '0';}
        },
        record_uid(){
            if(this.warncond.indexOf("119004")>-1){return '119004'}
            else{return '0';}
        },
        maint_type_id(){
            if(this.warncond.indexOf("119005")>-1){return '119005'}
            else{return '0';}
        },
        maint_close(){
            if(this.warncond.indexOf("119007")>-1){return '119007'}
            else{return '0';}
        },
        maint_done(){
            if(this.warncond.indexOf("119006")>-1){return '119006'}
            else{return '0';}
        },
        alm_id(){
            if(this.warnthr.indexOf("1")>-1){return '1'}
            else{return '100';}
        },
        alm_signal_id(){
             if(this.warnthr.indexOf("0")>-1){return '0'}
            else{return '100';}
        },
        numone(){
             if(this.warngra.indexOf("1")>-1){return '1'}
            else{return '0';}
        },
        BattGroupId(){
              if(this.warngra.indexOf("2")>-1){return '2'}
            else{return '0';}
        },
        master_audit(){
              if(this.warngra.indexOf("3")>-1){return '3'}
            else{return '0';}
        },
        appoint_uid(){
              if(this.warngra.indexOf("4")>-1){return '4'}
            else{return '0';}
        },
        dealwhq(){
            if(!isNaN(this.whq)){return '';}
            else{return this.whq;}
        },
        dealjfzd(){
            if(!isNaN(this.jfzd)){return '';}
            else{return this.jfzd;}
        },
        dealxdcz(){
            if(this.xdcz<10000){
                return '0';
            }
            else{
                return this.xdcz;
            }
        },
        STtime(){
            return this.formatDateTime(this.startTime)+" 00:00:00";
        },
        EDtime(){
            return this.formatDateTime(this.endTime)+" 23:59:59";
        },
        Page(){
           return {pageCurr:this.pageCurr ,pageSize:this.pageSize, pageAll:this.pageAll};
        }
    },
    methods: {
        getpageCurr(a){
          this.pageCurr=a;
          this.creatTable();
        },
        getpageSize(b){
            this.pageSize=b;
            this.creatTable();
        },
        startTimeChoose () {
          if (new Date(this.startTime) - new Date(this.endTime) > 0) {
            this.startTime = '2000-01-01';
            return;
          }
          this.changed();
        },
    // 结束时间验证
        endTimeOpen () {
          if (this.endTime-new Date()>0) {
            this.endTime = new Date();
            return;
          }
          this.changed();
        },
         formatDateTime (date) {
            var y = date.getFullYear();
            var m = date.getMonth() + 1;
            m = m < 10 ? ('0' + m) : m;
            var d = date.getDate();
            d = d < 10 ? ('0' + d) : d;
            var h = date.getHours();
            var minute = date.getMinutes();
            minute = minute < 10 ? ('0' + minute) : minute;
            return y + '-' + m + '-' + d;
        },
         urlEncode(param, key, encode) {
                    var vm=this;
                  if(param==null) return '';
                  var paramStr = '';
                  var t = typeof (param);
                  if (t == 'string' || t == 'number' || t == 'boolean') {
                    paramStr += '&' + key + '=' + ((encode==null||encode) ? encodeURIComponent(param) : param);
                  } else {
                    for (var i in param) {
                      var k = key == null ? i : key + (param instanceof Array ? '[' + i + ']' : '.' + i);
                      paramStr += vm.urlEncode(param[i], k, encode);
                    }
                  }
                  return paramStr;
        },
        getallwhq(){
              var vm=this;
            //页面加载时查询维护区中的枢纽类型
            ajax({
                 type:"post",
                 url:"User_battgroup_baojigroup_battgroupAction!serchStationName1InGroup",
                 async: true,
                dataType: 'json',
                data: "json="+JSON.stringify(null),
                success:function(data){
                        data=data.result;
                        data=eval("("+data+")");
                        if(data.code==1 && data.data.length>0){
                        this.station_name1=[];
                        for(var i=0;i<=data.data.length;i++){
                            var obj={};
                            if(i==0){
                                obj.label='全部(共'+data.data.length+'种)';
                                obj.value=data.data.length;
                                vm.sn1placeholder=obj.label;
                            }else{
                                obj.label=data.data[i-1];
                                obj.value=data.data[i-1];
                            }
                           vm.station_name1.push(obj);
                        }
                    }else{
                        vm.station_name1=[];
                        vm.station_name1.push({
                             value: '暂无管理的维护区',
                            label: '暂无管理的维护区'
                        });
                    }
                     vm.getalljfzd();
                }
            });
        },
         changedwhq(){
            this.getalljfzd();
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
        },
        getalljfzd(){
            var vm=this;
            var checkedwhq=vm.dealwhq;
                ajax({
                type:"post",
                 url:"User_battgroup_baojigroup_battgroupAction!serchStationNameInGroup",
                 async: true,
                dataType: 'json',
                data: "json="+JSON.stringify({UNote:checkedwhq}),
                success:function(data){
                        data=data.result;
                        data=eval("("+data+")");
                        // console.log(data);
                        if(data.code==1 && data.data.length>0){
                        vm.station_name=[];
                        for(var i=0;i<=data.data.length;i++){
                            var obj={};
                            if(i==0){
                                obj.label='全部(共'+data.data.length+'种)';
                                vm.snplaceholder=obj.label;
                                obj.value=data.data.length;
                            }else{
                                obj.label=data.data[i-1];
                                obj.value=data.data[i-1];
                            }
                           vm.station_name.push(obj);
                        }
                    }else{
                        vm.station_name=[];
                        vm.station_name.push({
                             value: '暂无管理的机房站点',
                            label: '暂无管理的机房站点'
                        });
                    }
                    vm.getallxdcz();
                 }
               })
        },
          changedjfzd(){
            this.getallxdcz();
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
        },
        getallxdcz(){
            var vm=this;
            var checkedwhq=vm.dealwhq;
            var checkedjfzd=vm.jfzd;
                ajax({
                type:"post",
                 url:"User_battgroup_baojigroup_battgroupAction!serchBattgroupidInGroup",
                 async: true,
                dataType: 'json',
                data: "json="+JSON.stringify({UNote:checkedwhq,UName:checkedjfzd}),
                success:function(data){
                        data=data.result;
                        data=eval("("+data+")");
                        // console.log(data);
                        if(data.code==1 && data.data.length>0){
                        vm.battgroup_name=[];
                        for(var i=0;i<=data.data.length;i++){
                            var obj={};
                            if(i==0){
                                obj.label='全部(共'+data.data.length+'种)';
                                obj.value=data.data.length;
                                vm.bnplaceholder=obj.label;
                            }else{
                                obj.label=data.data[i-1].BattGroupName+"-"+data.data[i-1].MonCount+"节";
                                obj.value=data.data[i-1].BattGroupId;
                            }
                           vm.battgroup_name.push(obj);
                        }
                    }else{
                        vm.battgroup_name=[];
                        vm.battgroup_name.push({
                             value: '暂无管理的蓄电池组',
                            label: '暂无管理的蓄电池组'
                        });
                    }
                 }
               })
        },
        startSearch: function() {
            var self = this;
            this.timer.start(function() {
                self.mockTableData1();
            }, 8000);
        },
         mockTableData1 () {
            //console.warn('haha87686');
            var vm=this;
            var searchcond={
                    page: vm.Page,
                    binf: {
                            StationName1: vm.dealwhq?vm.dealwhq:'',
                            StationName:  vm.dealjfzd?vm.dealjfzd:'',
                            BattGroupId:  vm.dealxdcz?vm.dealxdcz:0
                          },
                    mainf:{
                        appoint_uid: vm.appoint_uid?vm.appoint_uid:4, /*<!-- 四级告警 -->*/
                        master_audit: vm.master_audit?vm.master_audit:3, /*<!-- 三级告警 -->*/
                        num: vm.numone?vm.numone:1, /*<!-- 一级告警 -->*/
                        BattGroupId: vm.BattGroupId?vm.BattGroupId:2, /*<!-- 二级告警 -->*/
                        usr_id: 0,
                        fault_type_id: vm.fault_type_id?vm.fault_type_id:119002, /*<!-- 组端电压 -->*/
                        fault_level: vm.fault_level?vm.fault_level:119003,   /*<!-- 充电电流 -->*/
                        record_uid: vm.record_uid?vm.record_uid:119004,   /*<!-- 放电电流 -->*/
                        maint_type_id: vm.maint_type_id?vm.maint_type_id:119005, /*<!-- 单体电压 -->*/
                        maint_done: vm.maint_done?vm.maint_done:119006, /*<!-- 单体温度 -->*/
                        maint_close: vm.maint_close?vm.maint_close:119007, /*<!-- 单体内阻 -->*/
                        master_id: 0 /*<!-- 连接条阻抗 -->*/
                    },
                    adata_H:{
                        MonNum: 0,
                        alm_id: vm.alm_id?vm.alm_id:1,   /*<!-- 上限告警  -->*/
                        alm_start_time: vm.STtime?vm.STtime:'2000-01-01'+" 00:00:00",
                        alm_start_time1: vm.EDtime?vm.EDtime:new Date()+" 23:59:59",
                        alm_signal_id: vm.alm_signal_id?vm.alm_signal_id:0, /*<!-- 下限告警 -->*/
                        Record_Id: 0     /*<!-- 容量更换告警 -->*/
                    }
            }
            vm.loading=true;
                ajax({
                type:"post",
                url:"Battalarm_data_historyAction!serchByInfo",
                async: true,
                dataType: 'json',
                data: "json="+JSON.stringify(searchcond),
                success:function(data){
                        var alldt = [];
                        data=data.result;
                        data=eval("("+data+")");
                        if(data.code==1 && data.data.length>0){
                       var data2=data.data;
                        for(var i=0;i<=data2.length-1;i++){
                                 if(i == (data2.length-1)){
                                   vm.pageAll = data2[i].page.pageAll;
                              }
                                var wv=null;
                                if(data2[i].adata_H&&data2[i].binf){
                                            if(data2[i].adata_H.alm_signal_id >= 19 && data2[i].adata_H.alm_signal_id <= 22){
                                            wv=(data2[i].adata_H.alm_value).toFixed(0)+'AH';       //容量告警
                                        }else if((data2[i].adata_H.alm_signal_id >= 9 && data2[i].adata_H.alm_signal_id <= 10)){
                                            wv=(data2[i].adata_H.alm_value).toFixed(3)+'V';        //单体电压
                                        }else if(data2[i].adata_H.alm_signal_id >= 1 && data2[i].adata_H.alm_signal_id <= 4){
                                            wv=(data2[i].adata_H.alm_value).toFixed(1)+'V';        //在线电压,组端电压
                                        }else if(data2[i].adata_H.alm_signal_id >= 5 && data2[i].adata_H.alm_signal_id <= 5){
                                            wv=(data2[i].adata_H.alm_value).toFixed(1)+'A';        //充电电流,放电电流
                                        }else if(data2[i].adata_H.alm_signal_id >= 13 && data2[i].adata_H.alm_signal_id <= 14){
                                            wv=(data2[i].adata_H.alm_value).toFixed(3)+'mΩ';       //单体内阻
                                        }else if(data2[i].adata_H.alm_signal_id >= 11 && data2[i].adata_H.alm_signal_id <= 12){
                                            wv=(data2[i].adata_H.alm_value).toFixed(1)+'℃';        //单体温度
                                        }else{
                                            wv=(data2[i].adata_H.alm_value);
                                        }
                                var oneobj={
                                     number:(vm.pageCurr-1)*vm.pageSize+(i+1),  //编号
                                    // number: i+1,
                                    comname:data2[i].binf.StationName, //机房名称
                                    battname:data2[i].binf.BattGroupName, //电池组名称
                                    warnname:data2[i].binf.StationName8,   //告警名称
                                    singname:data2[i].adata_H.MonNum,        //单体编号
                                    warnval:wv,                         //告警值
                                    warnlev:data2[i].binf.StationName9,  //告警等级
                                    warnsure:data2[i].adata_H.alm_is_confirmed, //告警确认
                                    warnsuretime:data2[i].adata_H.alm_is_confirmed!=0?data2[i].adata_H.alm_confirmed_time:"-",  //告警确认时间
                                    warnstarttime:data2[i].adata_H.alm_start_time,   //告警开始时间
                                    warnstoptime:data2[i].adata_H.alm_end_time!=0?data2[i].adata_H.alm_end_time:"-"    //告警结束时间
                                }
                                 oneobj.label=data2[i].adata_H.num.toString();
                                 oneobj.note=data2[i].binf.StationName8;
                                if(vm.num){if(oneobj.number==vm.num){oneobj._highlight=true;}}
                                if(vm.allnum.length>0){if(vm.isInArray(vm.allnum ,oneobj.number)){oneobj._checked=true; }}
                               alldt.push(oneobj);
                                 }
                        }
                    }else{
                        // if(data.data.length == 1){
                        //   vm.pageAll = data.data[0].page.pageAll;
                        //  }
                    }
                    vm.tableData1 = alldt;
                    vm.timer.open();
                    //clearTimeout($.ti);
                    // $.ti=setTimeout(vm.creatTable,8000);
                    vm.loading=false;
                 },
                 error:function(){
                    // clearTimeout($.ti);
                    // $.ti=setTimeout(vm.creatTable,8000);
                 }
               });
            },
            creatTable(){
                 var vm=this;
                 vm.tableData1 = vm.mockTableData1();
            },
            changed(){
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
            },
            exportXls(params){
                if(params.filename){
                    if(params.filename.indexOf('.xls')===-1){
                        params.filename += '.xls';
                    }
                } else{
                    params.filename = 'table.xls';
                }
                let columns = [];
                let datas = [];
                if(params.columns && params.data){
                    columns = params.columns;
                    datas = params.data;
                }else{
                    columns = this.allColumns;
                    if(!('original' in params)) params.original = true;
                    datas = params.original ? this.data : this.rebuildData;
                }
                let noHeader = false;
                if('noHeader' in params) noHeader = params.noHeader;
                const data = Csv(columns, datas, params, noHeader);
                if(params.callback) params.callback(data);
                else ExportCsv.download(params.filename, data);
            },
            sureExp(){
                var vm=this;
                vm.exportXls({
                    filename: "电池告警历史数据",
                    columns: vm.tableColumns1,
                    data: vm.tableData1.map(function(k){
                        if(k.warnsure){k.warnsure='是';}else{k.warnsure='否';}
                        if(k.warnstarttime){ k.warnstarttime='="'+k.warnstarttime+'"'}
                        if(k.warnsuretime.length>3){k.warnsuretime='="'+k.warnsuretime+'"'}
                        if(k.warnstoptime.length>3){k.warnstoptime='="'+k.warnstoptime+'"'}
                        return k;
                    })
                });
                vm.mockTableData1();
            },
            confirm () {
                this.$Modal.info({
                    title: '未选中表格数据项!',
                    content: '<p>请选择一行表格数据</p><p>也可以点击左下角进行多行选择</p>'
                });
            },
            alertSure(msg, fun, arr, url){
                var vm=this;
                var tit='';
                if(!vm.num){
                    tit='已选项要'+msg+'吗?';
                }
                else{tit='编号为'+vm.num+'要'+msg+'吗?'}
                this.$Modal.confirm({
                    title: tit,
                    content: '<p>敏感操作请谨慎处理!</p>',
                    onOk: () => {
                        vm.allnum=[];
                        vm.num=0;
                        if(fun){fun(arr, url)}
                    },
                    onCancel: () => {
                        vm.operatedata=[];
                        vm.num=0;
                        vm.allnum=[];
                        vm.mockTableData1();
                    }
                });
            },
            tabCheckbox(){
                var vm=this;
                vm.operatedata=[];
                vm.selecttext=!vm.selecttext;
                if(vm.tableColumns1[0].type=='selection'){
                    vm.$refs.table.selectAll(false);
                    vm.tableColumns1.splice(0,1);
                    vm.selectone=true;
                    vm.allnum=[];
                }
                else{vm.tableColumns1.unshift({
                        type: 'selection',
                        width: 60,
                        align: 'center'
                });
                  vm.selectone=false;
                  vm.num=0;
                  vm.mockTableData1();
                }
            },
            selectonedata(val){
                 // console.warn(val,'单选111');
                var vm=this;
                if(vm.operatedata.length>0){vm.operatedata=[]};
                vm.operatedata.push(val);
                vm.num=vm.operatedata[0].number;
            },
            delrecord(){
                var vm=this;
                if(vm.operatedata==0){vm.confirm();}
                else{
                      var narr=vm.operatedata.map(function(k){
                            var obj={
                                      stationname:k.comname+"-"+k.battname,
                                      num:k.label,
                                      note:k.note
                                        };
                                return obj;
                            });
                     var url="Battalarm_data_historyAction!delete";
                      vm.alertSure('删除记录',vm.ajaxdata, narr, url);
                }
            },
            selectmoredata(val){
                var vm=this;
               if(vm.tableColumns1[0].type=='selection'){
                    if(vm.operatedata.length>0){vm.operatedata=[]};
                     // console.warn(val,'多选222');
                    vm.operatedata=val;
                    vm.allnum=vm.operatedata.map(function(k){return k.number});
               }
            },
            isInArray(arr,value){
                for(var i = 0; i < arr.length; i++){
                    if(value === arr[i]){
                        return true;
                    }
                }
                return false;
            },
            ajaxdata(arr, url){
                var vm=this;
                var js=JSON.stringify(arr).toString();
                ajax({
                      type:"post",
                      url:url,
                      async: true,
                      dataType: 'json',
                      data: "json="+js,
                      success:function(data){
                          data=data.result;
                          data=eval("("+data+")");
                          if(data.code==1){
                          vm.mockTableData1();
                          vm.operatedata=[];
                          vm.$Message.success('操作成功');
                          }else{
                                vm.$Message.error('操作失败');
                          }
                      }
                    });
            }
    },
    mounted: function() {
        var vm=this;
        vm.num=0;
        vm.allnum=[];
        vm.getallwhq();
        this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 160;
        this.startSearch();
    },
    destroyed: function() {
        clearTimeout($.ti);
    }
}
</script>
<style scoped>
    .view-layout {
        height: 100%;
    }
    .view-layout-left {
        float: left;
        width: 360px;
        height: 100%;
        overflow-y: auto;
    }
    .view-layout-right {
        margin-left: 370px;
        height: 100%;
        overflow-y: auto;
    }
    .ivu-date-picker-cells-cell em{
        color: #515a6e;
    }
</style>
src/views/warnmanage/cellreal.vue
@@ -15,18 +15,18 @@
        </Row>
        <Row>
        <Col span="8">
            <Select v-model="whq" :value='4451' @on-change="creatTable" style="width:200px" placement="bottom" >
            <Select v-model="whq" :value='4451' @on-change="changedwhq" style="width:200px" placement="bottom" >
        <Option v-for="item in station_name1" :value="item.value" :key="item.value">{{ item.label }}</Option>
          </Select>
        </Col>
        <Col span="8">
                <Select v-model="jfzd" @on-change="creatTable" style="width:200px" placement="bottom" >
                <Select v-model="jfzd" @on-change="changedjfzd" style="width:200px" placement="bottom" >
        <Option v-for="item in  station_name" :value="item.value" :key="item.value">{{ item.label }}</Option>
    </Select>
            
        </Col>
        <Col span="8">
                <Select v-model="xdcz" @on-change="creatTable" style="width:200px" placement="bottom" >
                <Select v-model="xdcz" @on-change="changed" style="width:200px" placement="bottom" >
        <Option v-for="item in battgroup_name" :value="item.value" :key="item.value">{{ item.label }}</Option>
    </Select>
            
@@ -40,7 +40,7 @@
        </Row>
        <Row>
        <Col span="8">
             <CheckboxGroup v-model="warncond" @on-change="creatTable">
             <CheckboxGroup v-model="warncond" @on-change="changed">
               <Col>
                 <Row span="12">
                     <Checkbox label="119002" size="large"> 
@@ -73,7 +73,7 @@
        </Col>
        <Col span="8">
             <Col >
                  <CheckboxGroup v-model="warnthr" @on-change="creatTable">
                  <CheckboxGroup v-model="warnthr" @on-change="changed">
                     <Row span="12">
                         <Checkbox label="1" size="large"> 
                        <span>上限告警</span>
@@ -89,7 +89,7 @@
             </Col>
        </Col>
        <Col span="8">
            <CheckboxGroup v-model="warngra" @on-change="creatTable">
            <CheckboxGroup v-model="warngra" @on-change="changed">
               <Col>
                 <Row span="12">
                     <Checkbox label="1" size="large"> 
@@ -118,13 +118,23 @@
        
    </Row>     
    <Divider />
    <Divider style="background-color: #2d8cf0" />
    
      <Table :data="tableData1" border :columns="tableColumns1" ref="table" :height="tableHeight" no-data-text="数据加载中..." stripe></Table>
      <Table :highlight-row="selectone" :data="tableData1" :disabled-hover="true" border :columns="tableColumns1" ref="table" @on-current-change="selectonedata" @on-selection-change="selectmoredata" :height="tableHeight" no-data-text="暂无数据"></Table>
            <div style="margin: 10px;overflow: hidden">
                <div style="float: left;"> <Button :size="buttonSize" @click="tabCheckbox" icon="md-checkmark-circle" type="warning">{{selecttext?'取消':'多选'}}</Button></div>
                <div style="float: right;">
                    <Page :total="pageAll"  size="small" show-elevator show-sizer :current="1" @on-change="getpageCurr" @on-page-size-change="getpageSize"/>
                </div>
                <div style="float: right; margin-right:20px"><Button :size="buttonSize"  @click="sureExp"  icon="ios-download-outline" type="primary">导出</Button></div>
                <div  style="float: right; margin-right:20px">
                    <ButtonGroup >
                            <Button :size="buttonSize" @click="surewarn" icon="md-thumbs-up" type="success">确认告警</Button>
                            <Button :size="buttonSize" @click="cancelwarn" icon="md-close" type="info">取消告警</Button>
                            <Button :size="buttonSize" @click="delrecord" icon="ios-warning-outline" type="error">删除记录</Button>
                    </ButtonGroup>
                </div>
            </div>
@@ -133,6 +143,7 @@
            </div>
        </div>
    </div>
</template>
<script>
@@ -140,8 +151,9 @@
        Timeout, getMaxFromArr, getMinFromArr, 
        Title, getSumFromArr, getAvgFromArr} from "../../libs/common"
import {getBattstate, BTSCircle} from '../../assets/js/battInfo'
import $ from 'jquery'
import $ from 'jquery';
import Csv from './js/csv.js';
import ExportCsv from './js/export-csv.js';
import { setTimeout } from 'timers';
export default {
    components: {
@@ -149,8 +161,11 @@
    },
    data() {
        return {
            selecttext:false,
            selectone: true,
            operatedata: [],
            buttonSize: 'small',
            timer: new Timeout(),        // 实时告警计时器
            loading: true,
            station_name1:[],
            station_name:[],
            battgroup_name:[],
@@ -236,6 +251,7 @@
                    key: 'warnstoptime'
                    
                }
            ]
@@ -302,49 +318,27 @@
            else{return this.jfzd;}
        },
        dealxdcz(){
            if(!isNaN(this.xdcz)){return '0';}
            else{return this.jfzd;}
            if(this.xdcz<10000){
                return '0';
            }
            else{
                return this.xdcz;
            }
        }
    },
    methods: {
        getwarncond(val){
            console.log(this.warncond);
        },
        getpageCurr(a){
           console.warn(44599933);
          this.pageCurr=a;
          this.creatTable();
          
        },
        getpageSize(b){
            console.warn(8877);
            this.pageSize=b;
            this.creatTable();
        },
        isInArray(arr,value){
        for(var i = 0; i < arr.length; i++){
            if(value === arr[i]){
                return true;
            }
        }
        return false;
        },
        getwarnthr(){
            console.log(this.warnthr);
        },
        getwarngra(){
            console.log(this.warngra);
        },
        // getxdcz(){
        //     console.log(this.xdcz);
        // },
                 urlEncode(param, key, encode) {
        urlEncode(param, key, encode) {
                    var vm=this;
                  if(param==null) return '';  
                  var paramStr = '';  
@@ -358,7 +352,7 @@
                    }  
                  }  
                  return paramStr;  
                },
        },
        getallwhq(){
              var vm=this;
@@ -388,7 +382,7 @@
                           vm.station_name1.push(obj);
                        }
                    }else{
                        vm.station_name1=[];
                        vm.station_name1.push({
                             value: '暂无管理的维护区',
                            label: '暂无管理的维护区'
@@ -401,6 +395,13 @@
                       
            }); 
           
        },
        changedwhq(){
            this.getalljfzd();
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
        },
        getalljfzd(){
            var vm=this;
@@ -430,7 +431,7 @@
                           vm.station_name.push(obj);
                        }
                    }else{
                        vm.snplaceholder='暂无管理的机房站点';
                        vm.station_name=[];
                        vm.station_name.push({
                             value: '暂无管理的机房站点',
                            label: '暂无管理的机房站点'
@@ -442,6 +443,13 @@
               })
        },
        changedjfzd(){
            this.getallxdcz();
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
        },
        getallxdcz(){
            var vm=this;
@@ -464,7 +472,7 @@
                            if(i==0){
                                obj.label='全部(共'+data.data.length+'种)';  
                                obj.value=data.data.length;    
                                vm.bnplaceholder=obj.label;
                            }else{
                                obj.label=data.data[i-1].BattGroupName+"-"+data.data[i-1].MonCount+"节";
                                obj.value=data.data[i-1].BattGroupId;   
@@ -472,7 +480,7 @@
                           vm.battgroup_name.push(obj);
                        }
                    }else{
                        vm.bnplaceholder='暂无管理的蓄电池组';
                       vm.battgroup_name=[];
                        vm.battgroup_name.push({
                             value: '暂无管理的蓄电池组',
                            label: '暂无管理的蓄电池组'
@@ -488,6 +496,7 @@
            var self = this;
            this.timer.start(function() {
                self.mockTableData1();
                // console.warn(self.operatedata ,555);
            }, 8000);
        },
         mockTableData1 () {
@@ -523,8 +532,6 @@
                    'bmd.mainf.appoint_uid': vm.appoint_uid?vm.appoint_uid:4 /*<!-- 四级告警 -->*/
            }
                
            console.log(searchcond);
            vm.loading=true;
                ajax({
                type:"post",
                url:"Battalarm_dataAction!serchByCondition",
@@ -535,14 +542,13 @@
                        var alldt = [];
                        data=data.result;
                        data=eval("("+data+")");
                        console.log(44444);
                        console.log(data);
                        if(data.code==1 && data.data.length>0){
                       var data2=data.data;
                        for(var i=0;i<=data2.length-1;i++){
                                 if(i == (data2.length-1)){
                                   vm.pageAll = data2[i].page.pageAll;
                                 console.log(777777);
                              }else{     
                                var wv=null;
                                if(data2[i].adata&&data2[i].binf){
@@ -576,8 +582,9 @@
                                    warnstarttime:data2[i].adata.alm_start_time,   //告警开始时间
                                    warnstoptime:data2[i].adata.alm_is_confirmed!=0?data2[i].adata.alm_end_time:"-"    //告警结束时间
                                } 
                                oneobj.label=data2[i].adata.num.toString();
                                if(vm.num){if(oneobj.number==vm.num){oneobj._highlight=true;}}
                                if(vm.allnum.length>0){if(vm.isInArray(vm.allnum ,oneobj.number)){oneobj._checked=true; }}
                               alldt.push(oneobj);
                                 }
@@ -593,17 +600,13 @@
                         }
                       
                    }
                    console.log(alldt);
                    vm.tableData1 = alldt;
                    vm.timer.open();
                    //clearTimeout($.ti);
                    // $.ti=setTimeout(vm.creatTable,8000);
                    vm.loading=false;
                 },
                 error:function(){
                    // clearTimeout($.ti);
                    // $.ti=setTimeout(vm.creatTable,8000);
                 }
               });
@@ -611,14 +614,222 @@
            creatTable(){
                 var vm=this;
                 vm.tableData1 = vm.mockTableData1();
            },
             changed(){
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
            },
            exportXls(params){
                if(params.filename){
                    if(params.filename.indexOf('.xls')===-1){
                        params.filename += '.xls';
                    }
                } else{
                    params.filename = 'table.xls';
                }
                let columns = [];
                let datas = [];
                if(params.columns && params.data){
                    columns = params.columns;
                    datas = params.data;
                }else{
                    columns = this.allColumns;
                    if(!('original' in params)) params.original = true;
                    datas = params.original ? this.data : this.rebuildData;
                }
                let noHeader = false;
                if('noHeader' in params) noHeader = params.noHeader;
                const data = Csv(columns, datas, params, noHeader);
                if(params.callback) params.callback(data);
                else ExportCsv.download(params.filename, data);
            },
            sureExp(){
                var vm=this;
                vm.exportXls({
                    filename: "电池告警实时数据",
                    columns: vm.tableColumns1,
                    data: vm.tableData1.map(function(k){
                        if(k.warnsure){k.warnsure='是';}else{k.warnsure='否';}
                        if(k.warnstarttime){ k.warnstarttime='="'+k.warnstarttime+'"'}
                        if(k.warnsuretime.length>3){k.warnsuretime='="'+k.warnsuretime+'"'}
                        if(k.warnstoptime.length>3){k.warnstoptime='="'+k.warnstoptime+'"'}
                        return k;
                    })
                });
                vm.mockTableData1();
            },
            confirm () {
                this.$Modal.info({
                    title: '未选中表格数据项!',
                    content: '<p>请选择一行表格数据</p><p>也可以点击左下角进行多行选择</p>'
                });
            },
            alertSure(msg, fun, arr, url){
                var vm=this;
                var tit='';
                if(!vm.num){
                    tit='已选项要'+msg+'吗?';
                }
                else{tit='编号为'+vm.num+'要'+msg+'吗?'}
                this.$Modal.confirm({
                    title: tit,
                    content: '<p>敏感操作请谨慎处理!</p>',
                    onOk: () => {
                        vm.allnum=[];
                        vm.num=0;
                        if(fun){fun(arr, url)}
                    },
                    onCancel: () => {
                        vm.operatedata=[];
                        vm.num=0;
                        vm.allnum=[];
                        vm.mockTableData1();
                    }
                });
            },
            tabCheckbox(){
                var vm=this;
                vm.operatedata=[];
                vm.selecttext=!vm.selecttext;
                if(vm.tableColumns1[0].type=='selection'){
                    vm.$refs.table.selectAll(false);
                    vm.tableColumns1.splice(0,1);
                    vm.selectone=true;
                    vm.allnum=[];
                }
                else{vm.tableColumns1.unshift({
                        type: 'selection',
                        width: 60,
                        align: 'center'
                });
                  vm.selectone=false;
                  vm.num=0;
                  vm.mockTableData1();
                }
            },
            selectonedata(val){
                 // console.warn(val,'单选111');
                var vm=this;
                if(vm.operatedata.length>0){vm.operatedata=[]};
                vm.operatedata.push(val);
                vm.num=vm.operatedata[0].number;
            },
            surewarn(){
                var vm=this;
                if(vm.operatedata.length==0){vm.confirm();}
                else{
                           var narr=vm.operatedata.map(function(k){
                                 var obj={
                                            stationname:k.comname+"-"+k.battname,
                                            num:k.label,
                                            alm_confirmed_time:new Date().format('yyyy-MM-dd hh:mm:ss'),
                                            alm_is_confirmed: 1,
                                            note:k.warnname
                                        };
                                   return obj;
                            });
                            var url="Battalarm_dataAction!update";
                      vm.alertSure('确认告警',vm.ajaxdata, narr, url);
                }
            },
            cancelwarn(){
                var vm=this;
                if(vm.operatedata.length==0){vm.confirm();}
                else{
                     var narr=vm.operatedata.map(function(k){
                            var obj={
                                      stationname:k.comname+"-"+k.battname,
                                      num:k.label,
                                      alm_end_time:new Date().format('yyyy-MM-dd hh:mm:ss'),
                                      Record_Id:    0,
                                      alm_cleared_type: 2,
                                      note:k.warnname
                                        };
                                return obj;
                            });
                     var url="Battalarm_dataAction!cancelalarm";
                      vm.alertSure('取消告警',vm.ajaxdata, narr, url);
                }
            },
            delrecord(){
                var vm=this;
                if(vm.operatedata==0){vm.confirm();}
                else{
                      var narr=vm.operatedata.map(function(k){
                            var obj={
                                      stationname:k.comname+"-"+k.battname,
                                      num:k.label,
                                      note:k.warnname
                                        };
                                return obj;
                            });
                     var url="Battalarm_dataAction!delete";
                      vm.alertSure('删除记录',vm.ajaxdata, narr, url);
                }
            },
            selectmoredata(val){
                var vm=this;
               if(vm.tableColumns1[0].type=='selection'){
                    if(vm.operatedata.length>0){vm.operatedata=[]};
                     // console.warn(val,'多选222');
                    vm.operatedata=val;
                    vm.allnum=vm.operatedata.map(function(k){return k.number});
               }
            },
            isInArray(arr,value){
                for(var i = 0; i < arr.length; i++){
                    if(value === arr[i]){
                        return true;
                    }
                }
                return false;
            },
            ajaxdata(arr, url){
                var vm=this;
                var js=JSON.stringify(arr).toString();
                ajax({
                      type:"post",
                      url:url,
                      async: true,
                      dataType: 'json',
                      data: "bads="+js,
                      success:function(data){
                          data=data.result;
                          data=eval("("+data+")");
                          if(data.code==1){
                          vm.mockTableData1();
                          vm.operatedata=[];
                          vm.$Message.success('操作成功');
                          }else{
                                vm.$Message.error('操作失败');
                          }
                      }
                    });
            }
    },  
    mounted: function() {
        var vm=this;
        vm.num=0;
        vm.allnum=[];
        vm.getallwhq();
        this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 160;
        this.startSearch();
src/views/warnmanage/cellwarnset.vue
New file
@@ -0,0 +1,531 @@
<template>
    <div class="view-root">
        <div class="view-root-inner">
            <div class="view-layout">
        <Row>
        <Col span="24">
        参数选择
        </Col>
        </Row>
        <Row>
        <Col span="24">
            <Select v-model="whq"  @on-change="changedwhq"  placement="bottom" disabled placeholder="电池容量告警参数" >
        <Option v-for="item in station_name1" :value="item.value" :key="item.value">{{ item.label }}</Option>
          </Select>
        </Col>
        </Row>
    <Divider style="background-color: transparent;" />
      <Table :highlight-row="selectone" :data="tableData1" :disabled-hover="true" border :columns="tableColumns1" ref="table" @on-current-change="selectonedata"  :height="tableHeight" no-data-text="暂无数据"></Table>
            <div style="margin: 10px;overflow: hidden">
               <!--  <div style="float: left;"> <Button :size="buttonSize" @click="tabCheckbox" icon="md-checkmark-circle" type="warning">{{selecttext?'取消':'多选'}}</Button></div> -->
                <div style="float: right;">
                    <Page :total="pageAll"  size="small" show-elevator show-sizer :current="1" @on-change="getpageCurr" @on-page-size-change="getpageSize"/>
                </div>
                <div  style="float: right; margin-right:20px">
                    <ButtonGroup >
                            <Button :size="buttonSize" @click="surewarn" icon="md-create" type="success">修改</Button>
                            <!-- <Button :size="buttonSize" @click="cancelwarn" icon="md-close" type="info">取消告警</Button>
                            <Button :size="buttonSize" @click="delrecord" icon="ios-warning-outline" type="error">删除记录</Button> -->
                    </ButtonGroup>
                </div>
            </div>
       <Modal
        v-model="showmodal"
        title="告警参数修改"
        @on-ok="endalert"
        @on-cancel="cancel" draggable>
        <Row>
        <Col span="10" style="marginRight:10%;">
        告警ID
        </Col>
        <Col span="10">
        告警名称
        </Col>
        </Row>
        <Row>
        <Col span="10" style="marginRight:10%;">
        <Input v-model="operatedata[0].battname" disabled placeholder="Enter something..德萨." />
        </Col>
        <Col span="10" >
        <Input v-model="operatedata[0].comname" disabled placeholder="Enter some" />
        </Col>
        </Row>
         <Row>
        <Col span="10" style="marginRight:10%;">
        告警上限系数值(0.0~30.0)
        </Col>
        <Col span="10">
        告警上限等级(1~4)
        </Col>
        </Row>
         <Row>
        <Col span="10" style="marginRight:10%;">
        <Input v-model="operatedata[0].warnname" @on-change="dealdata" placeholder="Enteruuuuu" />
        </Col>
        <Col span="10" style="padding:1% 0">
        <RadioGroup v-model="operatedata[0].singname">
        <Radio label="1"></Radio>
        <Radio label="2"></Radio>
        <Radio label="3"></Radio>
        <Radio label="4"></Radio>
    </RadioGroup>
        </Col>
        </Row>
      <Row>
        <Col span="10" style="marginRight:10%;">
        告警下限系数值(0.0~30.0)
        </Col>
        <Col span="10">
        告警下限等级(1~4)
        </Col>
        </Row>
       <Row>
        <Col span="10" style="marginRight:10%;">
        <Input v-model="operatedata[0].warnsuretime" @on-change="dealdata2"  placeholder="Enteruuuuu" />
        </Col>
        <Col span="10" style="padding:1% 0">
        <RadioGroup v-model="operatedata[0].warnstarttime" >
        <Radio label="1"></Radio>
        <Radio label="2"></Radio>
        <Radio label="3"></Radio>
        <Radio label="4"></Radio>
    </RadioGroup>
        </Col>
        </Row>
      <Row>
        <Col span="10" style="marginRight:10%;marginTop:3%;">
       <Checkbox v-model="upx" @on-change="changeupx">告警上限使能</Checkbox>
        </Col>
        <Col span="10" style="marginTop:3%;">
        <Checkbox v-model="downx" @on-change="changedownx">告警下限使能</Checkbox>
        </Col>
        </Row>
    </Modal>
            </div>
        </div>
    </div>
</template>
<script>
import {ajax, formatSeconds, sethoubeiTime,
        Timeout, getMaxFromArr, getMinFromArr,
        Title, getSumFromArr, getAvgFromArr} from "../../libs/common"
import {getBattstate, BTSCircle} from '../../assets/js/battInfo'
import $ from 'jquery';
import { setTimeout } from 'timers';
export default {
    components: {
    },
    data() {
        return {
            warnparamstate:[
                {key:'Batt_Alarm_Type_OnlineVol',name:'在线电压告警'},
                {key:'Batt_Alarm_Type_GroupVol',name:'组端电压告警'},
                {key:'Batt_Alarm_Type_BattChargeCurr',name:'充电电流告警'},
                {key:'Batt_Alarm_Type_BattDisChargeCurr',name:'放电电流告警'},
                {key:'Batt_Alarm_Type_MonVol',name:'单体电压告警'},
                {key:'Batt_Alarm_Type_MonTmp',name:'单体温度告警'},
                {key:'Batt_Alarm_Type_MonRes',name:'单体内阻告警'},
                {key:'Batt_Alarm_Type_ConnRes',name:'单体连接条告警'},
                {key:'Batt_Alarm_Type_DisChargeMonVol',name:'放电单体电压告警'},
                {key:'Batt_Alarm_Type_CapAlarm',name:'容量告警告警'},
                {key:'Batt_Alarm_Type_CapChange',name:'容量更换告警'},],
            showmodal:false,
            selecttext:false,
            selectone: true,
            operatedata: [{number:null,comname:'',battname:'',warnname:'',singname:'',warnsure:'',warnsuretime:'',warnstarttime:'',warnstoptime:''}],
            buttonSize: 'small',
            timer: new Timeout(),        // 实时告警计时器
            station_name1:[{label: '电池告警参数',value:1},{label: '电池容量告警参数',value:0}],
            station_name:[],
            battgroup_name:[],
            whq: 0,
            jfzd: '',
            xdcz: '0',
            warncond: ['119002', '119003', '119004', '119005', '119007', '119006'],
            warnthr:['1','0'],
            warngra:['1','2','3','4'],
            pageCurr: '1',
            pageSize: '10',
            pageAll: 1,
            tableHeight: 450,
            tableData1: [],
            tableColumns1: [
                {
                    title: '编号',
                    key: 'number'
                },
                {
                    title: '告警名称',
                    key: 'comname',
                    render: (h, params) => {
                        //console.log(params);
                        return h('div',  params.row.comname);
                    }
                },
                {
                    title: '告警ID',
                    key: 'battname'
                },
                {
                    title: '告警上限系数值(0.0~30.0)',
                    key: 'warnname'
                },
                {
                    title: '告警上限等级(1~4)',
                    key: 'singname'
                },
                {
                    title: '告警上限使能',
                    key: 'warnsure',
                    width: 150,
                    align: 'center',
                    render: (h, params) => {
                        const row = params.row;
                        const color = row.warnsure === 0 ? 'error' : 'success';
                        const text = row.warnsure === 0 ? '未确认' : '已确认';
                        return h('Tag', {
                            props: {
                                type: 'dot',
                                color: color
                            }
                        }, text);
                    }
                },
                    {
                    title: '告警下限系数值(0.0~30.0)',
                    key: 'warnsuretime'
                },
                {
                    title: '告警下限等级(1~4)',
                    key: 'warnstarttime',
                },
                {
                    title: '告警下限使能',
                    key: 'warnstoptime',
                    width: 150,
                    align: 'center',
                    render: (h, params) => {
                        const row = params.row;
                        const color = row.warnstoptime === 0 ? 'error' : 'success';
                        const text = row.warnstoptime === 0 ? '未确认' : '已确认';
                        return h('Tag', {
                            props: {
                                type: 'dot',
                                color: color
                            }
                        }, text);
                    }
                }
            ],
            upx:false,
            downx:false
        }
    },
    methods: {
         changeupx(){
            var b=this.upx?1:0;
            for (var k in this.operatedata[0]){
                if(k=='warnsure'){this.operatedata[0].warnsure=b;}
            }
         },
         changedownx(){
             var b=this.downx?1:0;
            for (var k in this.operatedata[0]){
                if(k=='warnstoptime'){this.operatedata[0].warnstoptime=b;}
            }
         },
        getParmName(keywords){
            var name="";
            for(var i=0;i<this.warnparamstate.length;i++){
                if(this.warnparamstate[i].key == keywords){
                    name = this.warnparamstate[i].name;
                    break;
                }
            }
            return name;
        },
        getpageCurr(a){
          this.pageCurr=a;
          this.creatTable();
        },
        getpageSize(b){
            this.pageSize=b;
            this.creatTable();
        },
        changedwhq(){
            this.getalljfzd();
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
        },
        changedjfzd(){
            this.getallxdcz();
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
        },
        startSearch: function() {
            var self = this;
            this.timer.start(function() {
                self.mockTableData1();
                // console.warn(self.operatedata ,555);
            }, 8000);
        },
         mockTableData1 () {
            //console.warn('haha87686');
            var vm=this;
            var searchcond={
                    alm_id:vm.whq
            }
                ajax({
                type:"post",
                url:"Alarm_paramAction!serchByCondition",
                async: true,
                dataType: 'json',
                data: "json="+JSON.stringify(searchcond),
                success:function(data){
                        var alldt = [];
                        data=data.result;
                        data=eval("("+data+")");
                        if(data.code==1 && data.data.length>0){
                       var data2=data.data;
                        for(var i=0;i<=data2.length-1;i++){
                                if(data2[i]){
                                var oneobj={
                                     number:(vm.pageCurr-1)*vm.pageSize+(i+1),  //编号
                                    // number: i+1,
                                    comname:  vm.getParmName(data2[i].alm_name), //机房名称
                                    battname:data2[i].alm_id, //电池组名称
                                    warnname:data2[i].alm_high_coe,   //告警名称
                                    singname:data2[i].alm_high_level.toString(),        //单体编号
                                    warnsure:data2[i].alm_high_en, //告警确认
                                    warnsuretime:data2[i].alm_low_coe,  //告警确认时间
                                    warnstarttime:data2[i].alm_low_level.toString(),   //告警开始时间
                                    warnstoptime:data2[i].alm_low_en    //告警结束时间
                                }
                                if(vm.num){if(oneobj.number==vm.num){oneobj._highlight=true;}}
                               alldt.push(oneobj);
                                 }
                        }
                    }else{
                        if(data.data.length == 1){
                          vm.pageAll = data.data[0].page.pageAll;
                         }
                    }
                    vm.tableData1 = alldt;
                    vm.timer.open();
                 },
                 error:function(){
                 }
               });
            },
            creatTable(){
                 var vm=this;
                 vm.tableData1 = vm.mockTableData1();
            },
             changed(){
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
            },
            confirm () {
                this.$Modal.info({
                    title: '未选中表格数据项!',
                    content: '<p>请选择一行表格数据</p>'
                });
            },
            alertSure(){
                var vm=this;
                vm.showmodal = true
            },
            selectonedata(val){
                var vm=this;
                // if(vm.operatedata.length>0){vm.operatedata=[]};
                vm.$set(vm.operatedata,''+0, val);
                if(vm.operatedata[0].warnsure==1){vm.upx=true;}else{vm.upx=false;}
                if(vm.operatedata[0].warnstoptime==1){vm.downx=true;}else{vm.downx=false;}
                // vm.operatedata.push(val);
                vm.num=vm.operatedata[0].number;
            },
            surewarn(){
                var vm=this;
                if(!vm.operatedata[0].number){vm.confirm();}
                else{
                      vm.alertSure();
                }
            },
            endalert(){
                var vm=this;
                var tit='';
                tit='确认修改'+vm.operatedata[0].comname+'参数吗?'
                this.$Modal.confirm({
                    title: tit,
                    content: '<p>敏感操作请谨慎处理!</p>',
                    onOk: () => {
                        vm.allnum=[];
                        vm.num=0;
                        vm.ajaxdata();
                    },
                    onCancel: () => {
                        vm.showmodal = false;
                        vm.operatedata=[{number:null,comname:'',battname:'',warnname:'',singname:'',warnsure:'',warnsuretime:'',warnstarttime:'',warnstoptime:''}];
                        vm.num=0;
                        vm.mockTableData1();
                    }
                });
            },
            ajaxdata(){
                var vm=this;
                var narr={
                            alm_name:vm.operatedata[0].comname,
                            alm_id:vm.operatedata[0].battname,
                            alm_high_coe:vm.operatedata[0].warnname,
                            alm_high_level:vm.operatedata[0].singname,
                            alm_low_coe:vm.operatedata[0].warnsuretime,
                            alm_low_level:vm.operatedata[0].warnstarttime,
                            alm_high_en:vm.operatedata[0].warnsure,
                            alm_low_en:vm.operatedata[0].warnstoptime
                        };
                var url="Alarm_paramAction!update";
                var js=JSON.stringify(narr).toString();
                vm.num=0;
                ajax({
                      type:"post",
                      url:url,
                      async: true,
                      dataType: 'json',
                      data: "json="+js,
                      success:function(data){
                          data=data.result;
                          data=eval("("+data+")");
                          if(data.code==1){
                          vm.mockTableData1();
                          vm.operatedata=[{number:null,comname:'',battname:'',warnname:'',singname:'',warnsure:'',warnsuretime:'',warnstarttime:'',warnstoptime:''}];
                          vm.$Message.success('操作成功');
                          }else{
                                vm.$Message.error('操作失败');
                          }
                      }
                    });
            },
            cancel () {
                var vm=this;
                vm.operatedata=[{number:null,comname:'',battname:'',warnname:'',singname:'',warnsure:'',warnsuretime:'',warnstarttime:'',warnstoptime:''}];
                vm.num=0;
                vm.mockTableData1();
            },
            dealdata(){
            var vm=this;
            if(vm.operatedata[0].warnname>0){
                vm.operatedata[0].warnname=parseFloat(vm.operatedata[0].warnname);
                if(vm.operatedata[0].warnname>30){vm.operatedata[0].warnname=30};
            }
            else {vm.operatedata[0].warnname=0;}
            },
             dealdata2(){
                var vm=this;
                if(vm.operatedata[0].warnsuretime>0){
                    vm.operatedata[0].warnsuretime=parseFloat(vm.operatedata[0].warnsuretime);
                    if(vm.operatedata[0].warnsuretime>30){vm.operatedata[0].warnsuretime=30};
                }
                else {vm.operatedata[0].warnsuretime=0;}
             }
    },
    mounted: function() {
        var vm=this;
        vm.num=0;
        vm.allnum=[];
        // vm.getallwhq();
        this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 160;
        this.startSearch();
    },
    destroyed: function() {
        clearTimeout($.ti);
    }
}
</script>
<style scoped>
    .view-layout {
        height: 100%;
    }
    .view-layout-left {
        float: left;
        width: 360px;
        height: 100%;
        overflow-y: auto;
    }
    .view-layout-right {
        margin-left: 370px;
        height: 100%;
        overflow-y: auto;
    }
</style>
src/views/warnmanage/equiphistory.vue
New file
@@ -0,0 +1,726 @@
<template>
    <div class="view-root">
        <div class="view-root-inner">
            <div class="view-layout">
        <Row>
        <Col span="8">
        维护区
        </Col>
        <Col span="8">
        机房站点
        </Col>
        <Col span="8">
        告警开始时间
        </Col>
        </Row>
        <Row>
        <Col span="8">
            <Select v-model="whq" :value='4451' @on-change="changedwhq" style="width:200px" placement="bottom" >
        <Option v-for="item in station_name1" :value="item.value" :key="item.value">{{ item.label }}</Option>
          </Select>
        </Col>
        <Col span="8">
                <Select v-model="jfzd" @on-change="changedjfzd" style="width:200px" placement="bottom" >
        <Option v-for="item in  station_name" :value="item.value" :key="item.value">{{ item.label }}</Option>
    </Select>
        </Col>
        <Col span="4">
            <DatePicker type="date" format="yyyy-MM-dd" v-model="startTime"   @on-change="startTimeChoose" placeholder="请选择时间段"  :editable="false" style="width: 200px; color: #515a6e;"></DatePicker>
        </Col>
        <Col span="4">
            <DatePicker type="date" format="yyyy-MM-dd" v-model="endTime"  @on-change="endTimeOpen"
             placeholder="请选择时间段" :editable="false" style="width: 200px;color: #515a6e;"></DatePicker>
        </Col>
        </Row>
    <Divider style="background-color: #2d8cf0"/>
       <Table :highlight-row="selectone" :data="tableData1" :disabled-hover="true" border :columns="tableColumns1" ref="table" @on-current-change="selectonedata" @on-selection-change="selectmoredata" :height="tableHeight" no-data-text="暂无数据"></Table>
            <div style="margin: 10px;overflow: hidden">
                <div style="float: left;"> <Button :size="buttonSize" @click="tabCheckbox" icon="md-checkmark-circle" type="warning">{{selecttext?'取消':'多选'}}</Button></div>
                <div style="float: right;">
                    <Page :total="pageAll"  size="small" show-elevator show-sizer :current="1" @on-change="getpageCurr" @on-page-size-change="getpageSize"/>
                </div>
                <div style="float: right; margin-right:20px"><Button :size="buttonSize"  @click="sureExp"  icon="ios-download-outline" type="primary">导出</Button></div>
                <div  style="float: right; margin-right:20px">
                    <ButtonGroup >
                            <Button :size="buttonSize" @click="delrecord" icon="ios-warning-outline" type="error">删除记录</Button>
                    </ButtonGroup>
                </div>
            </div>
            </div>
        </div>
    </div>
</template>
<script>
import {ajax, formatSeconds, sethoubeiTime,
        Timeout, getMaxFromArr, getMinFromArr,
        Title, getSumFromArr, getAvgFromArr} from "../../libs/common"
import {getBattstate, BTSCircle} from '../../assets/js/battInfo'
import $ from 'jquery'
import Csv from './js/csv.js';
import ExportCsv from './js/export-csv.js';
import { setTimeout } from 'timers';
export default {
    components: {
    },
    data() {
        return {
            selecttext:false,
            selectone: true,
            operatedata: [],
            buttonSize: 'small',
            timer: new Timeout(),        // 实时告警计时器
            loading: true,
            station_name1:[],
            station_name:[],
            warn_style:[
                {label:'全部',value:0},{label:'通信故障',value:119020},{label:'继电器告警',value:618501},{label:'通讯告警',value:618502},
                {label:'设备过温告警',value:618503}, {label:'二极管D1告警',value:618504}, {label:'续航不足告警',value:119023},
                {label:'基站停电告警',value:119024}, {label:'基站发电告警',value:119025},{label:'基站掉站告警',value:119026},
                {label:'基站开门告警',value:119027}
                ],
            whq: '',
            jfzd: '',
            xdcz: '0',
            warncond: ['119002', '119003', '119004', '119005', '119007', '119006'],
            warnthr:['1','0'],
            warngra:['1','2','3','4'],
            pageCurr: 1,
            pageSize: 10,
            pageAll: 1,
            tableHeight: 450,
            tableData1: [],
            tableColumns1: [
                {
                    title: '编号',
                    key: 'number'
                },
                {
                    title: '设备ID',
                    key: 'comname',
                    render: (h, params) => {
                        //console.log(params);
                        return h('div',  params.row.comname);
                    }
                },
                {
                    title: '设备名称',
                    key: 'battname'
                },
                {
                    title: '设备IP',
                    key: 'warnname'
                },
                {
                    title: '所在机房名称',
                    key: 'singname'
                },
                {
                    title: '告警事件',
                    key: 'warnval'
                },
                    {
                    title: '告警等级',
                    key: 'warnlev'
                },
                {
                    title: '告警确认',
                    key: 'warnsure',
                    width: 150,
                    align: 'center',
                    render: (h, params) => {
                        const row = params.row;
                        const color = row.warnsure === 0 ? 'error' : 'success';
                        const text = row.warnsure === 0 ? '未确认' : '已确认';
                        return h('Tag', {
                            props: {
                                type: 'dot',
                                color: color
                            }
                        }, text);
                    }
                },
                {
                    title: '告警确认时间',
                    key: 'warnsuretime'
                },
                    {
                    title: '告警开始时间',
                    key: 'warnstarttime'
                },
                    {
                    title: '告警结束时间',
                    key: 'warnstoptime'
                }
            ],
            startTime: '2000-01-01',
            endTime: new Date()
        }
    },
    computed:{
        fault_type_id(){
            if(this.warncond.indexOf("119002")>-1){return '119002'}
            else{return '0';}
        },
        fault_level(){
            if(this.warncond.indexOf("119003")>-1){return '119003'}
            else{return '0';}
        },
        record_uid(){
            if(this.warncond.indexOf("119004")>-1){return '119004'}
            else{return '0';}
        },
        maint_type_id(){
            if(this.warncond.indexOf("119005")>-1){return '119005'}
            else{return '0';}
        },
        maint_close(){
            if(this.warncond.indexOf("119007")>-1){return '119007'}
            else{return '0';}
        },
        maint_done(){
            if(this.warncond.indexOf("119006")>-1){return '119006'}
            else{return '0';}
        },
        alm_id(){
            if(this.warnthr.indexOf("1")>-1){return '1'}
            else{return '100';}
        },
        alm_signal_id(){
             if(this.warnthr.indexOf("0")>-1){return '0'}
            else{return '100';}
        },
        numone(){
             if(this.warngra.indexOf("1")>-1){return '1'}
            else{return '0';}
        },
        BattGroupId(){
              if(this.warngra.indexOf("2")>-1){return '2'}
            else{return '0';}
        },
        master_audit(){
              if(this.warngra.indexOf("3")>-1){return '3'}
            else{return '0';}
        },
        appoint_uid(){
              if(this.warngra.indexOf("4")>-1){return '4'}
            else{return '0';}
        },
        dealwhq(){
            if(!isNaN(this.whq)){return '';}
            else{return this.whq;}
        },
        dealjfzd(){
            if(!isNaN(this.jfzd)){return '';}
            else{return this.jfzd;}
        },
        dealxdcz(){
            if(isNaN(this.xdcz)){
                return '0';
            }
            else{
                return this.xdcz;
            }
        },
        STtime(){
            return this.formatDateTime(this.startTime)+" 00:00:00";
        },
        EDtime(){
            return this.formatDateTime(this.endTime)+" 23:59:59";
        }
        // Page(){
        //    return {pageCurr:this.pageCurr ,pageSize:this.pageSize, pageAll:this.pageAll};
        // }
    },
    methods: {
        getpageCurr(a){
          this.pageCurr=a;
          this.creatTable();
        },
        getpageSize(b){
            this.pageSize=b;
            this.creatTable();
        },
        startTimeChoose () {
          if (new Date(this.startTime) - new Date(this.endTime) > 0) {
            this.startTime = '2000-01-01';
            return;
          }
          this.changedjfzd();
        },
    // 结束时间验证
        endTimeOpen () {
          if (this.endTime-new Date()>0) {
            this.endTime = new Date();
            return;
          }
          this.changedjfzd();
        },
         formatDateTime (date) {
            var y = date.getFullYear();
            var m = date.getMonth() + 1;
            m = m < 10 ? ('0' + m) : m;
            var d = date.getDate();
            d = d < 10 ? ('0' + d) : d;
            var h = date.getHours();
            var minute = date.getMinutes();
            minute = minute < 10 ? ('0' + minute) : minute;
            return y + '-' + m + '-' + d;
        },
        //获取设备的告警类型
         getAlarmTypeByAlmType(alm_type){
            if(alm_type>0){
                switch(alm_type){
                    case 618501:return "继电器K1告警";
                    case 618502:return "通讯告警";
                    case 618503:return "设备过温告警";
                    case 618504:return "二极管D1告警";
                    case 119023:return "续航不足告警";
                    case 119024:return "基站停电告警";
                    case 119025:return "基站发电告警";
                    case 119026:return "基站掉站告警";
                    case 119027:return "基站开门告警";
                    case 119028:return "设备高温告警";
                    case 119032:return "设备SD卡故障";
                    case 119033:return "采集线告警";
                }
            }
            return "通信故障";
        },
        //获取告警等级
         getAlarmLevel(alm_level){
            if(alm_level>0){
                switch(alm_level){
                    case 1:return "一级告警";
                    case 2:return "二级告警";
                    case 3:return "三级告警";
                    case 4:return "四级告警";
                }
            }
            return "";
        },
        getallwhq(){
              var vm=this;
            //页面加载时查询维护区中的枢纽类型
            ajax({
                 type:"post",
                 url:"User_battgroup_baojigroup_battgroupAction!serchStationName1InGroup",
                 async: true,
                dataType: 'json',
                data: "json="+JSON.stringify(null),
                success:function(data){
                        data=data.result;
                        data=eval("("+data+")");
                        if(data.code==1 && data.data.length>0){
                        this.station_name1=[];
                        for(var i=0;i<=data.data.length;i++){
                            var obj={};
                            if(i==0){
                                obj.label='全部(共'+data.data.length+'种)';
                                obj.value=data.data.length;
                                vm.sn1placeholder=obj.label;
                            }else{
                                obj.label=data.data[i-1];
                                obj.value=data.data[i-1];
                            }
                           vm.station_name1.push(obj);
                        }
                    }else{
                        vm.station_name1=[];
                        vm.station_name1.push({
                             value: '暂无管理的维护区',
                            label: '暂无管理的维护区'
                        });
                    }
                     vm.getalljfzd();
                }
            });
        },
        changedwhq(){
            this.getalljfzd();
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
        },
        getalljfzd(){
            var vm=this;
            var checkedwhq=vm.dealwhq;
                ajax({
                type:"post",
                 url:"User_battgroup_baojigroup_battgroupAction!serchStationNameInGroup",
                 async: true,
                dataType: 'json',
                data: "json="+JSON.stringify({UNote:checkedwhq}),
                success:function(data){
                        data=data.result;
                        data=eval("("+data+")");
                        // console.log(data);
                        if(data.code==1 && data.data.length>0){
                        vm.station_name=[];
                        for(var i=0;i<=data.data.length;i++){
                            var obj={};
                            if(i==0){
                                obj.label='全部(共'+data.data.length+'种)';
                                vm.snplaceholder=obj.label;
                                obj.value=data.data.length;
                            }else{
                                obj.label=data.data[i-1];
                                obj.value=data.data[i-1];
                            }
                           vm.station_name.push(obj);
                        }
                    }else{
                        vm.station_name=[];
                        vm.station_name.push({
                             value: '暂无管理的机房站点',
                            label: '暂无管理的机房站点'
                        });
                    }
                    // vm.getallxdcz();
                 }
               })
        },
        changedjfzd(){
            // this.getallxdcz();
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
        },
        startSearch: function() {
            var self = this;
            this.timer.start(function() {
                self.mockTableData1();
            }, 8000);
        },
         mockTableData1 () {
            //console.warn('haha87686');
            var vm=this;
            var searchcond={
                 binf:{
                    StationName: vm.dealjfzd?vm.dealjfzd:'',
                    StationName1: vm.dealwhq?vm.dealwhq:'',
                    BattProductDate: vm.STtime?vm.STtime:'2000-01-01'+" 00:00:00",
                    BattProductDate1: vm.EDtime?vm.EDtime:new Date()+" 23:59:59"
                 },
                 page: {pageSize: vm.pageSize, pageCurr: vm.pageCurr}
            };
            // console.log(searchcond);
            vm.loading=true;
                ajax({
                type:"post",
                url:"Batt_devalarm_data_historyAction!serchByCondition",
                async: true,
                dataType: 'text',
                data: "json="+JSON.stringify(searchcond),
                success:function(data){
                        var alldt = [];
                        data=data.result;
                        data=eval("("+data+")");
                        if(data.code==1 && data.data.length>0){
                       var data2=data.data;
                        for(var i=0;i<=data2.length;i++){
                                 if(i == (data2.length-1)){
                                   vm.pageAll = data2[i].usr_id;
                              }
                                if(data2[i]){
                                      var ws=0,alm_confirmed_time='...';
                                     if(data2[i].alm_is_confirmed == 1){
                                          ws=1;
                                          alm_confirmed_time=data2[i].alm_confirmed_time;
                                     }
                                var oneobj={
                                     number:(vm.pageCurr-1)*vm.pageSize+(i+1),  //编号
                                    // number: i+1,
                                    comname:data2[i].dev_id, //设备id
                                    battname:data2[i].dev_name,        //设备名称
                                    warnname:data2[i].dev_ip,      //设备ip
                                    singname:data2[i].stationName, //所在机房
                                    warnval: vm.getAlarmTypeByAlmType(data2[i].alm_type), //故障事件
                                    warnlev: vm.getAlarmLevel(data2[i].alm_level),
                                    warnsure:ws, //告警确认
                                    warnsuretime:alm_confirmed_time,  //告警确认时间
                                    warnstarttime:data2[i].alm_start_time,   //告警开始时间
                                    warnstoptime:data2[i].alm_end_time    //告警结束时间
                                }
                                oneobj.label=data2[i].num.toString();
                                if(vm.num){if(oneobj.number==vm.num){oneobj._highlight=true;}}
                                if(vm.allnum.length>0){if(vm.isInArray(vm.allnum ,oneobj.number)){oneobj._checked=true; }}
                               alldt.push(oneobj);
                                 }
                        }
                    }else{
                        // if(data.data.length == 1){
                        //   vm.pageAll = data.data[0].page.pageAll;
                        //  }
                    }
                    vm.tableData1 = alldt;
                    vm.timer.open();
                    //clearTimeout($.ti);
                    // $.ti=setTimeout(vm.creatTable,8000);
                    vm.loading=false;
                 },
                 error:function(){
                    // clearTimeout($.ti);
                    // $.ti=setTimeout(vm.creatTable,8000);
                 }
               });
            },
            creatTable(){
                 var vm=this;
                 vm.tableData1 = vm.mockTableData1();
            },
            exportXls(params){
                if(params.filename){
                    if(params.filename.indexOf('.xls')===-1){
                        params.filename += '.xls';
                    }
                } else{
                    params.filename = 'table.xls';
                }
                let columns = [];
                let datas = [];
                if(params.columns && params.data){
                    columns = params.columns;
                    datas = params.data;
                }else{
                    columns = this.allColumns;
                    if(!('original' in params)) params.original = true;
                    datas = params.original ? this.data : this.rebuildData;
                }
                let noHeader = false;
                if('noHeader' in params) noHeader = params.noHeader;
                const data = Csv(columns, datas, params, noHeader);
                if(params.callback) params.callback(data);
                else ExportCsv.download(params.filename, data);
            },
            sureExp(){
                var vm=this;
                vm.exportXls({
                    filename: "设备告警历史数据",
                    columns: vm.tableColumns1,
                    data: vm.tableData1.map(function(k){
                        if(k.comname){k.comname="\t"+k.comname;}
                        if(k.warnsure){k.warnsure='是';}else{k.warnsure='否';}
                        if(k.warnstarttime){ k.warnstarttime='="'+k.warnstarttime+'"'}
                        if(k.warnsuretime.length>3){k.warnsuretime='="'+k.warnsuretime+'"'}
                        if(k.warnstoptime.length>3){k.warnstoptime='="'+k.warnstoptime+'"'}
                        return k;
                    })
                });
                vm.mockTableData1();
            },
            confirm () {
                this.$Modal.info({
                    title: '未选中表格数据项!',
                    content: '<p>请选择一行表格数据</p><p>也可以点击左下角进行多行选择</p>'
                });
            },
            alertSure(msg, fun, arr, url){
                var vm=this;
                var tit='';
                if(!vm.num){
                    tit='已选项要'+msg+'吗?';
                }
                else{tit='编号为'+vm.num+'要'+msg+'吗?'}
                this.$Modal.confirm({
                    title: tit,
                    content: '<p>敏感操作请谨慎处理!</p>',
                    onOk: () => {
                        vm.allnum=[];
                        vm.num=0;
                        if(fun){fun(arr, url)}
                    },
                    onCancel: () => {
                        vm.operatedata=[];
                        vm.num=0;
                        vm.allnum=[];
                        vm.mockTableData1();
                    }
                });
            },
            tabCheckbox(){
                var vm=this;
                vm.operatedata=[];
                vm.selecttext=!vm.selecttext;
                if(vm.tableColumns1[0].type=='selection'){
                    vm.$refs.table.selectAll(false);
                    vm.tableColumns1.splice(0,1);
                    vm.selectone=true;
                    vm.allnum=[];
                }
                else{vm.tableColumns1.unshift({
                        type: 'selection',
                        width: 60,
                        align: 'center'
                });
                  vm.selectone=false;
                  vm.num=0;
                  vm.mockTableData1();
                }
            },
            selectonedata(val){
                 // console.warn(val,'单选111');
                var vm=this;
                if(vm.operatedata.length>0){vm.operatedata=[]};
                vm.operatedata.push(val);
                vm.num=vm.operatedata[0].number;
            },
            delrecord(){
                var vm=this;
                if(vm.operatedata==0){vm.confirm();}
                else{
                      var narr=vm.operatedata.map(function(k){
                            var obj={
                                      num:k.label,
                                      stationname:k.singname,
                                      note:k.warnval
                                        };
                                return obj;
                            });
                     var url="Batt_devalarm_data_historyAction!deletePro";
                      vm.alertSure('删除记录',vm.ajaxdata, narr, url);
                }
            },
            selectmoredata(val){
                var vm=this;
               if(vm.tableColumns1[0].type=='selection'){
                    if(vm.operatedata.length>0){vm.operatedata=[]};
                     // console.warn(val,'多选222');
                    vm.operatedata=val;
                    vm.allnum=vm.operatedata.map(function(k){return k.number});
               }
            },
            isInArray(arr,value){
                for(var i = 0; i < arr.length; i++){
                    if(value === arr[i]){
                        return true;
                    }
                }
                return false;
            },
            ajaxdata(arr, url){
                var vm=this;
                var js=JSON.stringify(arr).toString();
                ajax({
                      type:"post",
                      url:url,
                      async: true,
                      dataType: 'json',
                      data: "json="+js,
                      success:function(data){
                          data=data.result;
                          data=eval("("+data+")");
                          if(data.code==1){
                          vm.mockTableData1();
                          vm.operatedata=[];
                          vm.$Message.success('操作成功');
                          }else{
                                vm.$Message.error('操作失败');
                          }
                      }
                    });
            }
    },
    mounted: function() {
        var vm=this;
         vm.num=0;
        vm.allnum=[];
        vm.getallwhq();
        this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 160;
        this.startSearch();
    },
    destroyed: function() {
        clearTimeout($.ti);
    }
}
</script>
<style scoped>
    .view-layout {
        height: 100%;
    }
    .view-layout-left {
        float: left;
        width: 360px;
        height: 100%;
        overflow-y: auto;
    }
    .view-layout-right {
        margin-left: 370px;
        height: 100%;
        overflow-y: auto;
    }
</style>
src/views/warnmanage/equipreal.vue
New file
@@ -0,0 +1,732 @@
<template>
    <div class="view-root">
        <div class="view-root-inner">
            <div class="view-layout">
        <Row>
        <Col span="8">
        维护区
        </Col>
        <Col span="8">
        机房站点
        </Col>
        <Col span="8">
        告警类型
        </Col>
        </Row>
        <Row>
        <Col span="8">
            <Select v-model="whq" :value='4451' @on-change="changedwhq" style="width:200px" placement="bottom" >
        <Option v-for="item in station_name1" :value="item.value" :key="item.value">{{ item.label }}</Option>
          </Select>
        </Col>
        <Col span="8">
                <Select v-model="jfzd" @on-change="changedjfzd" style="width:200px" placement="bottom" >
        <Option v-for="item in  station_name" :value="item.value" :key="item.value">{{ item.label }}</Option>
    </Select>
        </Col>
        <Col span="8">
                <Select v-model="xdcz" @on-change="changedjfzd" style="width:200px" placement="bottom" >
        <Option v-for="item in warn_style" :value="item.value" :key="item.value">{{ item.label }}</Option>
    </Select>
        </Col>
        </Row>
    <Divider style="background-color: #2d8cf0"/>
      <Table :highlight-row="selectone" :data="tableData1" :disabled-hover="true" border :columns="tableColumns1" ref="table" @on-current-change="selectonedata" @on-selection-change="selectmoredata" :height="tableHeight" no-data-text="暂无数据"></Table>
            <div style="margin: 10px;overflow: hidden">
                <div style="float: left;"> <Button :size="buttonSize" @click="tabCheckbox" icon="md-checkmark-circle" type="warning">{{selecttext?'取消':'多选'}}</Button></div>
                <div style="float: right;">
                    <Page :total="pageAll"  size="small" show-elevator show-sizer :current="1" @on-change="getpageCurr" @on-page-size-change="getpageSize"/>
                </div>
                <div style="float: right; margin-right:20px"><Button :size="buttonSize"  @click="sureExp"  icon="ios-download-outline" type="primary">导出</Button></div>
                <div  style="float: right; margin-right:20px">
                    <ButtonGroup >
                            <Button :size="buttonSize" @click="surewarn" icon="md-thumbs-up" type="success">确认告警</Button>
                            <Button :size="buttonSize" @click="cancelwarn" icon="md-close" type="info">取消告警</Button>
                            <Button :size="buttonSize" @click="delrecord" icon="ios-warning-outline" type="error">删除记录</Button>
                    </ButtonGroup>
                </div>
            </div>
            </div>
        </div>
    </div>
</template>
<script>
import {ajax, formatSeconds, sethoubeiTime,
        Timeout, getMaxFromArr, getMinFromArr,
        Title, getSumFromArr, getAvgFromArr} from "../../libs/common"
import {getBattstate, BTSCircle} from '../../assets/js/battInfo'
import $ from 'jquery'
import Csv from './js/csv.js';
import ExportCsv from './js/export-csv.js';
import { setTimeout } from 'timers';
export default {
    components: {
    },
    data() {
        return {
            selecttext:false,
            selectone: true,
            operatedata: [],
            buttonSize: 'small',
            timer: new Timeout(),        // 实时告警计时器
            loading: true,
            station_name1:[],
            station_name:[],
            warn_style:[
                {label:'全部',value:0},{label:'通信故障',value:119020},{label:'继电器告警',value:618501},{label:'通讯告警',value:618502},
                {label:'设备过温告警',value:618503}, {label:'二极管D1告警',value:618504}, {label:'续航不足告警',value:119023},
                {label:'基站停电告警',value:119024}, {label:'基站发电告警',value:119025},{label:'基站掉站告警',value:119026},
                {label:'基站开门告警',value:119027}
                ],
            whq: '',
            jfzd: '',
            xdcz: '0',
            warncond: ['119002', '119003', '119004', '119005', '119007', '119006'],
            warnthr:['1','0'],
            warngra:['1','2','3','4'],
            pageCurr: '1',
            pageSize: '10',
            pageAll: 1,
            tableHeight: 450,
            tableData1: [],
            tableColumns1: [
                {
                    title: '编号',
                    key: 'number'
                },
                {
                    title: '设备ID',
                    key: 'comname',
                    render: (h, params) => {
                        //console.log(params);
                        return h('div',  params.row.comname);
                    }
                },
                {
                    title: '设备名称',
                    key: 'battname'
                },
                {
                    title: '设备IP',
                    key: 'warnname'
                },
                {
                    title: '所在机房名称',
                    key: 'singname'
                },
                {
                    title: '告警事件',
                    key: 'warnval'
                },
                    {
                    title: '告警等级',
                    key: 'warnlev'
                },
                {
                    title: '告警确认',
                    key: 'warnsure',
                    width: 150,
                    align: 'center',
                    render: (h, params) => {
                        const row = params.row;
                        const color = row.warnsure === 0 ? 'error' : 'success';
                        const text = row.warnsure === 0 ? '未确认' : '已确认';
                        return h('Tag', {
                            props: {
                                type: 'dot',
                                color: color
                            }
                        }, text);
                    }
                },
                {
                    title: '告警确认时间',
                    key: 'warnsuretime'
                },
                    {
                    title: '告警开始时间',
                    key: 'warnstarttime'
                },
                    {
                    title: '告警结束时间',
                    key: 'warnstoptime'
                }
            ]
        }
    },
    computed:{
        fault_type_id(){
            if(this.warncond.indexOf("119002")>-1){return '119002'}
            else{return '0';}
        },
        fault_level(){
            if(this.warncond.indexOf("119003")>-1){return '119003'}
            else{return '0';}
        },
        record_uid(){
            if(this.warncond.indexOf("119004")>-1){return '119004'}
            else{return '0';}
        },
        maint_type_id(){
            if(this.warncond.indexOf("119005")>-1){return '119005'}
            else{return '0';}
        },
        maint_close(){
            if(this.warncond.indexOf("119007")>-1){return '119007'}
            else{return '0';}
        },
        maint_done(){
            if(this.warncond.indexOf("119006")>-1){return '119006'}
            else{return '0';}
        },
        alm_id(){
            if(this.warnthr.indexOf("1")>-1){return '1'}
            else{return '100';}
        },
        alm_signal_id(){
             if(this.warnthr.indexOf("0")>-1){return '0'}
            else{return '100';}
        },
        numone(){
             if(this.warngra.indexOf("1")>-1){return '1'}
            else{return '0';}
        },
        BattGroupId(){
              if(this.warngra.indexOf("2")>-1){return '2'}
            else{return '0';}
        },
        master_audit(){
              if(this.warngra.indexOf("3")>-1){return '3'}
            else{return '0';}
        },
        appoint_uid(){
              if(this.warngra.indexOf("4")>-1){return '4'}
            else{return '0';}
        },
        dealwhq(){
            if(!isNaN(this.whq)){return '';}
            else{return this.whq;}
        },
        dealjfzd(){
            if(!isNaN(this.jfzd)){return '';}
            else{return this.jfzd;}
        },
        dealxdcz(){
            if(isNaN(this.xdcz)){
                return '0';
            }
            else{
                return this.xdcz;
            }
        }
    },
    methods: {
        getpageCurr(a){
          this.pageCurr=a;
          this.creatTable();
        },
        getpageSize(b){
            this.pageSize=b;
            this.creatTable();
        },
        //获取设备的告警类型
         getAlarmTypeByAlmType(alm_type){
            if(alm_type>0){
                switch(alm_type){
                    case 618501:return "继电器K1告警";
                    case 618502:return "通讯告警";
                    case 618503:return "设备过温告警";
                    case 618504:return "二极管D1告警";
                    case 119023:return "续航不足告警";
                    case 119024:return "基站停电告警";
                    case 119025:return "基站发电告警";
                    case 119026:return "基站掉站告警";
                    case 119027:return "基站开门告警";
                    case 119028:return "设备高温告警";
                    case 119032:return "设备SD卡故障";
                    case 119033:return "采集线告警";
                }
            }
            return "通信故障";
        },
        //获取告警等级
         getAlarmLevel(alm_level){
            if(alm_level>0){
                switch(alm_level){
                    case 1:return "一级告警";
                    case 2:return "二级告警";
                    case 3:return "三级告警";
                    case 4:return "四级告警";
                }
            }
            return "";
        },
        getallwhq(){
              var vm=this;
            //页面加载时查询维护区中的枢纽类型
            ajax({
                 type:"post",
                 url:"User_battgroup_baojigroup_battgroupAction!serchStationName1InGroup",
                 async: true,
                dataType: 'json',
                data: "json="+JSON.stringify(null),
                success:function(data){
                        data=data.result;
                        data=eval("("+data+")");
                        if(data.code==1 && data.data.length>0){
                        this.station_name1=[];
                        for(var i=0;i<=data.data.length;i++){
                            var obj={};
                            if(i==0){
                                obj.label='全部(共'+data.data.length+'种)';
                                obj.value=data.data.length;
                                vm.sn1placeholder=obj.label;
                            }else{
                                obj.label=data.data[i-1];
                                obj.value=data.data[i-1];
                            }
                           vm.station_name1.push(obj);
                        }
                    }else{
                        vm.station_name1=[];
                        vm.station_name1.push({
                             value: '暂无管理的维护区',
                            label: '暂无管理的维护区'
                        });
                    }
                     vm.getalljfzd();
                }
            });
        },
        changedwhq(){
            this.getalljfzd();
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
        },
        getalljfzd(){
            var vm=this;
            var checkedwhq=vm.dealwhq;
                ajax({
                type:"post",
                 url:"User_battgroup_baojigroup_battgroupAction!serchStationNameInGroup",
                 async: true,
                dataType: 'json',
                data: "json="+JSON.stringify({UNote:checkedwhq}),
                success:function(data){
                        data=data.result;
                        data=eval("("+data+")");
                        // console.log(data);
                        if(data.code==1 && data.data.length>0){
                        vm.station_name=[];
                        for(var i=0;i<=data.data.length;i++){
                            var obj={};
                            if(i==0){
                                obj.label='全部(共'+data.data.length+'种)';
                                vm.snplaceholder=obj.label;
                                obj.value=data.data.length;
                            }else{
                                obj.label=data.data[i-1];
                                obj.value=data.data[i-1];
                            }
                           vm.station_name.push(obj);
                        }
                    }else{
                        vm.station_name=[];
                        vm.station_name.push({
                             value: '暂无管理的机房站点',
                            label: '暂无管理的机房站点'
                        });
                    }
                    // vm.getallxdcz();
                 }
               })
        },
        changedjfzd(){
            // this.getallxdcz();
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
        },
        startSearch: function() {
            var self = this;
            this.timer.start(function() {
                self.mockTableData1();
            }, 8000);
        },
         mockTableData1 () {
            //console.warn('haha87686');
            var vm=this;
            var searchcond={
                    stationName1: vm.dealwhq?vm.dealwhq:'',
                    stationName: vm.dealjfzd?vm.dealjfzd:'',
                    alm_type: vm.dealxdcz?vm.dealxdcz:0,
                    page: {pageSize: vm.pageSize, pageCurr: vm.pageCurr}
            };
            vm.loading=true;
                ajax({
                type:"post",
                url:"Batt_devalarm_dataAction!serchByInfo",
                async: true,
                dataType: 'json',
                data: "json="+JSON.stringify(searchcond),
                success:function(data){
                        var alldt = [];
                        data=data.result;
                        data=eval("("+data+")");
                        if(data.code==1 && data.data.length>0){
                       var data2=data.data;
                        for(var i=0;i<=data2.length;i++){
                                 if(i == (data2.length-1)){
                                   vm.pageAll = data2[i].usr_id;
                              }
                                if(data2[i]){
                                      var ws=0,alm_confirmed_time='...';
                                     if(data2[i].alm_is_confirmed == 1){
                                          ws=1;
                                          alm_confirmed_time=data2[i].alm_confirmed_time;
                                     }
                                var oneobj={
                                     number:(vm.pageCurr-1)*vm.pageSize+(i+1),  //编号
                                    // number: i+1,
                                    comname:data2[i].dev_id, //设备id
                                    battname:data2[i].dev_name,        //设备名称
                                    warnname:data2[i].dev_ip,      //设备ip
                                    singname:data2[i].stationName, //所在机房
                                    warnval: vm.getAlarmTypeByAlmType(data2[i].alm_type), //故障事件
                                    warnlev: vm.getAlarmLevel(data2[i].alm_level),
                                    warnsure:ws, //告警确认
                                    warnsuretime:alm_confirmed_time,  //告警确认时间
                                    warnstarttime:data2[i].alm_start_time,   //告警开始时间
                                    warnstoptime:'...'    //告警结束时间
                                }
                                oneobj.num=data2[i].num.toString();
                                if(vm.num){if(oneobj.number==vm.num){oneobj._highlight=true;}}
                                if(vm.allnum.length>0){if(vm.isInArray(vm.allnum ,oneobj.number)){oneobj._checked=true; }}
                               alldt.push(oneobj);
                                 }
                        }
                    }else{
                        // if(data.data.length == 1){
                        //   vm.pageAll = data.data[0].page.pageAll;
                        //  }
                    }
                    vm.tableData1 = alldt;
                    vm.timer.open();
                    //clearTimeout($.ti);
                    // $.ti=setTimeout(vm.creatTable,8000);
                    vm.loading=false;
                 },
                 error:function(){
                    // clearTimeout($.ti);
                    // $.ti=setTimeout(vm.creatTable,8000);
                 }
               });
            },
            creatTable(){
                 var vm=this;
                 vm.tableData1 = vm.mockTableData1();
            },
             exportXls(params){
                if(params.filename){
                    if(params.filename.indexOf('.xls')===-1){
                        params.filename += '.xls';
                    }
                } else{
                    params.filename = 'table.xls';
                }
                let columns = [];
                let datas = [];
                if(params.columns && params.data){
                    columns = params.columns;
                    datas = params.data;
                }else{
                    columns = this.allColumns;
                    if(!('original' in params)) params.original = true;
                    datas = params.original ? this.data : this.rebuildData;
                }
                let noHeader = false;
                if('noHeader' in params) noHeader = params.noHeader;
                const data = Csv(columns, datas, params, noHeader);
                if(params.callback) params.callback(data);
                else ExportCsv.download(params.filename, data);
            },
            sureExp(){
                var vm=this;
                vm.exportXls({
                    filename: "设备告警实时数据",
                    columns: vm.tableColumns1,
                    data: vm.tableData1.map(function(k){
                        if(k.comname){k.comname="\t"+k.comname;}
                        if(k.warnsure){k.warnsure='是';}else{k.warnsure='否';}
                        if(k.warnstarttime){ k.warnstarttime='="'+k.warnstarttime+'"'}
                        if(k.warnsuretime.length>3){k.warnsuretime='="'+k.warnsuretime+'"'}
                        if(k.warnstoptime.length>3){k.warnstoptime='="'+k.warnstoptime+'"'}
                        return k;
                    })
                });
                vm.mockTableData1();
            },
            confirm () {
                this.$Modal.info({
                    title: '未选中表格数据项!',
                    content: '<p>请选择一行表格数据</p><p>也可以点击左下角进行多行选择</p>'
                });
            },
            alertSure(msg, fun, arr, url){
                var vm=this;
                var tit='';
                if(!vm.num){
                    tit='已选项要'+msg+'吗?';
                }
                else{tit='编号为'+vm.num+'要'+msg+'吗?'}
                this.$Modal.confirm({
                    title: tit,
                    content: '<p>敏感操作请谨慎处理!</p>',
                    onOk: () => {
                        vm.allnum=[];
                        vm.num=0;
                        if(fun){fun(arr, url)}
                    },
                    onCancel: () => {
                        vm.operatedata=[];
                        vm.num=0;
                        vm.allnum=[];
                        vm.mockTableData1();
                    }
                });
            },
            tabCheckbox(){
                var vm=this;
                vm.operatedata=[];
                vm.selecttext=!vm.selecttext;
                if(vm.tableColumns1[0].type=='selection'){
                    vm.$refs.table.selectAll(false);
                    vm.tableColumns1.splice(0,1);
                    vm.selectone=true;
                    vm.allnum=[];
                }
                else{vm.tableColumns1.unshift({
                        type: 'selection',
                        width: 60,
                        align: 'center'
                });
                  vm.selectone=false;
                  vm.num=0;
                  vm.mockTableData1();
                }
            },
            selectonedata(val){
                 // console.warn(val,'单选111');
                var vm=this;
                if(vm.operatedata.length>0){vm.operatedata=[]};
                vm.operatedata.push(val);
                vm.num=vm.operatedata[0].number;
            },
            surewarn(){
                var vm=this;
                if(vm.operatedata.length==0){vm.confirm();}
                else{
                           var narr=vm.operatedata.map(function(k){
                                 var obj={
                                            num:k.num,
                                            stationName:k.singname,
                                            alm_is_confirmed:1,
                                            alm_confirmed_time:new Date().format('yyyy-MM-dd hh:mm:ss'),
                                            note:k.warnval
                                        };
                                   return obj;
                            });
                            var url="Batt_devalarm_dataAction!updatePro";
                      vm.alertSure('确认告警',vm.ajaxdata, narr, url);
                }
            },
            cancelwarn(){
                var vm=this;
                if(vm.operatedata.length==0){vm.confirm();}
                else{
                     var narr=vm.operatedata.map(function(k){
                            var obj={
                                      num:k.num,
                                      stationName:k.singname,
                                      note:k.warnval,
                                      alm_cleared_type:2,
                                      alm_end_time:new Date().format('yyyy-MM-dd hh:mm:ss'),
                                      record_id:0
                                        };
                                return obj;
                            });
                     var url="Batt_devalarm_dataAction!cancelPro";
                      vm.alertSure('取消告警',vm.ajaxdata, narr, url);
                }
            },
            delrecord(){
                var vm=this;
                if(vm.operatedata==0){vm.confirm();}
                else{
                      var narr=vm.operatedata.map(function(k){
                            var obj={
                                      num:k.num,
                                      stationName:k.singname,
                                      note:k.warnval
                                    };
                                return obj;
                            });
                     var url="Batt_devalarm_dataAction!deletePro";
                      vm.alertSure('删除记录',vm.ajaxdata, narr, url);
                }
            },
            selectmoredata(val){
                var vm=this;
               if(vm.tableColumns1[0].type=='selection'){
                    if(vm.operatedata.length>0){vm.operatedata=[]};
                     // console.warn(val,'多选222');
                    vm.operatedata=val;
                    vm.allnum=vm.operatedata.map(function(k){return k.number});
               }
            },
            isInArray(arr,value){
                for(var i = 0; i < arr.length; i++){
                    if(value === arr[i]){
                        return true;
                    }
                }
                return false;
            },
            ajaxdata(arr, url){
                var vm=this;
                var js=JSON.stringify(arr).toString();
                ajax({
                      type:"post",
                      url:url,
                      async: true,
                      dataType: 'json',
                      data: "json="+js,
                      success:function(data){
                          data=data.result;
                          data=eval("("+data+")");
                          if(data.code==1){
                          vm.mockTableData1();
                          vm.operatedata=[];
                          vm.$Message.success('操作成功');
                          }else{
                                vm.$Message.error('操作失败');
                          }
                      }
                    });
            }
    },
    mounted: function() {
        var vm=this;
         vm.num=0;
        vm.allnum=[];
        vm.getallwhq();
        this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 160;
        this.startSearch();
    },
    destroyed: function() {
        clearTimeout($.ti);
    }
}
</script>
<style scoped>
    .view-layout {
        height: 100%;
    }
    .view-layout-left {
        float: left;
        width: 360px;
        height: 100%;
        overflow-y: auto;
    }
    .view-layout-right {
        margin-left: 370px;
        height: 100%;
        overflow-y: auto;
    }
</style>
src/views/warnmanage/equipwarnset.vue
New file
@@ -0,0 +1,634 @@
<template>
    <div class="view-root">
        <div class="view-root-inner">
            <div class="view-layout">
        <Row>
        <Col span="12">
        维护区
        </Col>
        <Col span="12">
        机房站点
        </Col>
        </Row>
        <Row>
        <Col span="12">
            <Select v-model="whq"  @on-change="changedwhq"  placement="bottom" >
        <Option v-for="item in station_name1" :value="item.value" :key="item.value">{{ item.label }}</Option>
          </Select>
        </Col>
        <Col span="12">
                <Select v-model="jfzd" @on-change="changedjfzd"  placement="bottom" >
        <Option v-for="item in  station_name" :value="item.value" :key="item.value">{{ item.label }}</Option>
    </Select>
        </Col>
        </Row>
    <Divider style="background-color: transparent;" />
      <Table :highlight-row="selectone" :data="tableData1" :disabled-hover="true" border :columns="tableColumns1" ref="table" @on-current-change="selectonedata"  :height="tableHeight" no-data-text="暂无数据"></Table>
            <div style="margin: 10px;overflow: hidden">
               <!--  <div style="float: left;"> <Button :size="buttonSize" @click="tabCheckbox" icon="md-checkmark-circle" type="warning">{{selecttext?'取消':'多选'}}</Button></div> -->
                <div style="float: right;">
                    <Page :total="pageAll"  size="small" show-elevator show-sizer :current="1" @on-change="getpageCurr" @on-page-size-change="getpageSize"/>
                </div>
                <div  style="float: right; margin-right:20px">
                    <ButtonGroup >
                            <Button :size="buttonSize" @click="surewarn" icon="md-create" type="success">修改</Button>
                            <!-- <Button :size="buttonSize" @click="cancelwarn" icon="md-close" type="info">取消告警</Button>
                            <Button :size="buttonSize" @click="delrecord" icon="ios-warning-outline" type="error">删除记录</Button> -->
                    </ButtonGroup>
                </div>
            </div>
       <Modal
        v-model="showmodal"
        title="告警参数修改"
        @on-ok="endalert"
        @on-cancel="cancel" draggable>
        <Row>
        <Col span="10" style="marginRight:10%;">
        告警ID
        </Col>
        <Col span="10">
        告警名称
        </Col>
        </Row>
        <Row>
        <Col span="10" style="marginRight:10%;">
        <Input v-model="operatedata[0].battname" disabled placeholder="Enter something..德萨." />
        </Col>
        <Col span="10" >
        <Input v-model="operatedata[0].comname" disabled placeholder="Enter some" />
        </Col>
        </Row>
         <Row>
        <Col span="10" style="marginRight:10%;">
        告警上限系数值(0.0~30.0)
        </Col>
        <Col span="10">
        告警上限等级(1~4)
        </Col>
        </Row>
         <Row>
        <Col span="10" style="marginRight:10%;">
        <Input v-model="operatedata[0].warnname" @on-change="dealdata" placeholder="Enteruuuuu" />
        </Col>
        <Col span="10" style="padding:1% 0">
        <RadioGroup v-model="operatedata[0].singname">
        <Radio label="1"></Radio>
        <Radio label="2"></Radio>
        <Radio label="3"></Radio>
        <Radio label="4"></Radio>
    </RadioGroup>
        </Col>
        </Row>
      <Row>
        <Col span="10" style="marginRight:10%;">
        告警下限系数值(0.0~30.0)
        </Col>
        <Col span="10">
        告警下限等级(1~4)
        </Col>
        </Row>
       <Row>
        <Col span="10" style="marginRight:10%;">
        <Input v-model="operatedata[0].warnsuretime" @on-change="dealdata2" placeholder="Enteruuuuu" />
        </Col>
        <Col span="10" style="padding:1% 0">
        <RadioGroup v-model="operatedata[0].warnstarttime" >
        <Radio label="1"></Radio>
        <Radio label="2"></Radio>
        <Radio label="3"></Radio>
        <Radio label="4"></Radio>
    </RadioGroup>
        </Col>
        </Row>
      <Row>
        <Col span="10" style="marginRight:10%;marginTop:3%;">
       <Checkbox v-model="upx" @on-change="changeupx">告警上限使能</Checkbox>
        </Col>
        <Col span="10" style="marginTop:3%;">
        <Checkbox v-model="downx" @on-change="changedownx">告警下限使能</Checkbox>
        </Col>
        </Row>
    </Modal>
            </div>
        </div>
    </div>
</template>
<script>
import {ajax, formatSeconds, sethoubeiTime,
        Timeout, getMaxFromArr, getMinFromArr,
        Title, getSumFromArr, getAvgFromArr} from "../../libs/common"
import {getBattstate, BTSCircle} from '../../assets/js/battInfo'
import $ from 'jquery';
import { setTimeout } from 'timers';
export default {
    components: {
    },
    data() {
        return {
            warnparamstate:[
                {key:'Batt_Alarm_Type_OnlineVol',alm_id:119001,name:'在线电压告警'},
            {key:'Batt_Alarm_Type_GroupVol',alm_id:119002,name:'组端电压告警'},
            {key:'Batt_Alarm_Type_BattChargeCurr',alm_id:119003,name:'充电电流告警'},
            {key:'Batt_Alarm_Type_BattDisChargeCurr',alm_id:119004,name:'放电电流告警'},
            {key:'Batt_Alarm_Type_MonVol',alm_id:119005,name:'单体电压告警'},
            {key:'Batt_Alarm_Type_MonTmp',alm_id:119006,name:'单体温度告警'},
            {key:'Batt_Alarm_Type_MonRes',alm_id:119007,name:'单体内阻告警'},
            {key:'Batt_Alarm_Type_ConnRes',alm_id:119008,name:'单体连接条告警'},
            {key:'Batt_Alarm_Type_DisChargeMonVol',alm_id:119009,name:'放电单体电压告警'},
            {key:'Batt_Alarm_Type_CapAlarm',alm_id:119010,name:'容量告警告警'},
            {key:'Batt_Alarm_Type_CapChange',alm_id:119011,name:'容量更换告警'},
               ],
            showmodal:false,
            selecttext:false,
            selectone: true,
            operatedata: [{number:null,comname:'',battname:'',warnname:'',singname:'',warnsure:'',warnsuretime:'',warnstarttime:'',warnstoptime:''}],
            buttonSize: 'small',
            timer: new Timeout(),        // 实时告警计时器
            station_name1:[],
            station_name:[],
            battgroup_name:[],
            whq: 91000001,
            jfzd: 0,
            xdcz: '0',
            warncond: ['119002', '119003', '119004', '119005', '119007', '119006'],
            warnthr:['1','0'],
            warngra:['1','2','3','4'],
            pageCurr: '1',
            pageSize: '10',
            pageAll: 1,
            tableHeight: 450,
            tableData1: [],
            tableColumns1: [
                {
                    title: '设备',
                    key: 'number'
                },
                {
                    title: '告警名称',
                    key: 'comname',
                    render: (h, params) => {
                        //console.log(params);
                        return h('div',  params.row.comname);
                    }
                },
                {
                    title: '告警ID',
                    key: 'battname'
                },
                {
                    title: '告警上限系数值(0.0~30.0)',
                    key: 'warnname'
                },
                {
                    title: '告警上限等级(1~4)',
                    key: 'singname'
                },
                {
                    title: '告警上限使能',
                    key: 'warnsure',
                    width: 150,
                    align: 'center',
                    render: (h, params) => {
                        const row = params.row;
                        const color = row.warnsure === 0 ? 'error' : 'success';
                        const text = row.warnsure === 0 ? '未确认' : '已确认';
                        return h('Tag', {
                            props: {
                                type: 'dot',
                                color: color
                            }
                        }, text);
                    }
                },
                    {
                    title: '告警下限系数值(0.0~30.0)',
                    key: 'warnsuretime'
                },
                {
                    title: '告警下限等级(1~4)',
                    key: 'warnstarttime',
                },
                {
                    title: '告警下限使能',
                    key: 'warnstoptime',
                    width: 150,
                    align: 'center',
                    render: (h, params) => {
                        const row = params.row;
                        const color = row.warnstoptime === 0 ? 'error' : 'success';
                        const text = row.warnstoptime === 0 ? '未确认' : '已确认';
                        return h('Tag', {
                            props: {
                                type: 'dot',
                                color: color
                            }
                        }, text);
                    }
                }
            ],
            upx:false,
            downx:false
        }
    },
    methods: {
         dealdata(){
            var vm=this;
            if(vm.operatedata[0].warnname>0){
                vm.operatedata[0].warnname=parseFloat(vm.operatedata[0].warnname);
                if(vm.operatedata[0].warnname>30){vm.operatedata[0].warnname=30};
            }
            else {vm.operatedata[0].warnname=0;}
         },
         dealdata2(){
            var vm=this;
            if(vm.operatedata[0].warnsuretime>0){
                vm.operatedata[0].warnsuretime=parseFloat(vm.operatedata[0].warnsuretime);
                if(vm.operatedata[0].warnsuretime>30){vm.operatedata[0].warnsuretime=30};
            }
            else {vm.operatedata[0].warnsuretime=0;}
         },
         getallwhq(){
              var vm=this;
            //页面加载时查询维护区中的枢纽类型
            ajax({
                 type:"post",
                 url:"User_battgroup_baojigroup_battgroupAction!serchStationByStationName1",
                 async: true,
                dataType: 'json',
                data: "json="+JSON.stringify({UNote:""}),
                success:function(data){
                        data=data.result;
                        data=eval("("+data+")");
                        if(data.code==1 && data.data.length>0){
                            // console.warn(data);
                            var data2=data.data;
                        this.station_name1=[];
                        for(var i=0;i<=data2.length-1;i++){
                            var obj={};
                                 obj.label=data2[i].StationName;
                                 obj.value=data2[i].FBSDeviceId;
                             if(obj.label&&obj.value){vm.station_name1.push(obj);}
                        }
                    }else{
                        vm.station_name1=[];
                        vm.station_name1.push({
                             value: '暂无管理的维护区',
                            label: '暂无管理的维护区'
                        });
                    }
                      vm.getalljfzd();
                }
            });
        },
        getalljfzd(){
            var vm=this;
            var checkedwhq=vm.whq;
                ajax({
                type:"post",
                 url:"Dev_paramAction!serchByInfo",
                 async: true,
                dataType: 'json',
                data: "json="+JSON.stringify({"dev_id":checkedwhq}),
                success:function(data){
                        data=data.result;
                        data=eval("("+data+")");
                        // console.log(data);
                        if(data.code==1 && data.data.length>0){
                        vm.station_name=[];
                        for(var i=0;i<=data.data.length;i++){
                            var obj={};
                            if(i==0){
                                obj.label='全部(共'+data.data.length+'种)';
                                obj.value=0;
                            }else{
                                obj.label=vm.getParmName(data.data[i-1]);
                                obj.value=data.data[i-1];
                            }
                           vm.station_name.push(obj);
                        }
                        vm.jfzd=0;
                    }else{
                        vm.station_name=[];
                        vm.station_name.push({
                             value: '暂无管理的机房站点',
                            label: '暂无管理的机房站点'
                        });
                    }
                 }
               })
        },
         changeupx(){
            var b=this.upx?1:0;
            for (var k in this.operatedata[0]){
                if(k=='warnsure'){this.operatedata[0].warnsure=b;}
            }
         },
         changedownx(){
             var b=this.downx?1:0;
            for (var k in this.operatedata[0]){
                if(k=='warnstoptime'){this.operatedata[0].warnstoptime=b;}
            }
         },
        getParmName(keywords){
            var name="";
            for(var i=0;i<this.warnparamstate.length;i++){
                if(this.warnparamstate[i].alm_id == keywords){
                    name = this.warnparamstate[i].name;
                    break;
                }
            }
            return name;
        },
        getpageCurr(a){
          this.pageCurr=a;
          this.creatTable();
        },
        getpageSize(b){
            this.pageSize=b;
            this.creatTable();
        },
        changedwhq(){
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.getalljfzd();
            this.creatTable();
        },
        changedjfzd(){
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
        },
        startSearch: function() {
            var self = this;
            this.timer.start(function() {
                self.mockTableData1();
                // console.warn(self.operatedata ,555);
            }, 8000);
        },
         mockTableData1 () {
            //console.warn('haha87686');
            var vm=this;
            var searchcond={
                   "dev_id":vm.whq,
                    "alm_id":vm.jfzd
            }
                ajax({
                type:"post",
                url:"Dev_paramAction!serchByCondition",
                async: true,
                dataType: 'json',
                data: "json="+JSON.stringify(searchcond),
                success:function(data){
                        var alldt = [];
                        data=data.result;
                        data=eval("("+data+")");
                        if(data.code==1 && data.data.length>0){
                       var data2=data.data;
                        for(var i=0;i<=data2.length-1;i++){
                                if(data2[i]){
                                var oneobj={
                                     number:data2[i].note,  //编号
                                    // number: i+1,
                                    comname:  vm.getParmName(data2[i].alm_id), //机房名称
                                    battname:data2[i].alm_id, //电池组名称
                                    warnname: data2[i].alm_high_coe,   //告警名称
                                    singname:data2[i].alm_high_level.toString(),        //单体编号
                                    warnsure:data2[i].alm_high_en, //告警确认
                                    warnsuretime:data2[i].alm_low_coe,  //告警确认时间
                                    warnstarttime:data2[i].alm_low_level.toString(),   //告警开始时间
                                    warnstoptime:data2[i].alm_low_en    //告警结束时间
                                }
                                oneobj.dev_id=data2[i].dev_id;
                                if(vm.num){if(oneobj.number==vm.num){oneobj._highlight=true;}}
                               alldt.push(oneobj);
                                 }
                        }
                    }else{
                        if(data.data.length == 1){
                          vm.pageAll = data.data[0].page.pageAll;
                         }
                    }
                    vm.tableData1 = alldt;
                    vm.timer.open();
                 },
                 error:function(){
                 }
               });
            },
            creatTable(){
                 var vm=this;
                 vm.tableData1 = vm.mockTableData1();
            },
             changed(){
            this.pageCurr=1;
            this.pageSize=10;
            this.pageAll=1;
            this.creatTable();
            },
            confirm () {
                this.$Modal.info({
                    title: '未选中表格数据项!',
                    content: '<p>请选择一行表格数据</p>'
                });
            },
            alertSure(){
                var vm=this;
                vm.showmodal = true
            },
            selectonedata(val){
                 // console.warn(val,'单选111');
                var vm=this;
                // if(vm.operatedata.length>0){vm.operatedata=[]};
                vm.$set(vm.operatedata,''+0, val);
                if(vm.operatedata[0].warnsure==1){vm.upx=true;}else{vm.upx=false;}
                if(vm.operatedata[0].warnstoptime==1){vm.downx=true;}else{vm.downx=false;}
                // vm.operatedata.push(val);
                vm.num=vm.operatedata[0].number;
            },
            surewarn(){
                var vm=this;
                if(!vm.operatedata[0].number){vm.confirm();}
                else{
                      vm.alertSure();
                }
            },
            endalert(){
                var vm=this;
                var tit='';
                tit='确认修改'+vm.operatedata[0].comname+'参数吗?'
                this.$Modal.confirm({
                    title: tit,
                    content: '<p>敏感操作请谨慎处理!</p>',
                    onOk: () => {
                        vm.allnum=[];
                        vm.num=0;
                        vm.ajaxdata();
                    },
                    onCancel: () => {
                        vm.showmodal = false;
                        vm.operatedata=[{number:null,comname:'',battname:'',warnname:'',singname:'',warnsure:'',warnsuretime:'',warnstarttime:'',warnstoptime:''}];
                        vm.num=0;
                        vm.mockTableData1();
                    }
                });
            },
            ajaxdata(){
                var vm=this;
                var narr={
                            alm_name:vm.operatedata[0].comname,
                            alm_id:vm.operatedata[0].battname,
                            alm_high_coe:vm.operatedata[0].warnname,
                            alm_high_level:vm.operatedata[0].singname,
                            alm_low_coe:vm.operatedata[0].warnsuretime,
                            alm_low_level:vm.operatedata[0].warnstarttime,
                            alm_high_en:vm.operatedata[0].warnsure,
                            alm_low_en:vm.operatedata[0].warnstoptime,
                            note:vm.operatedata[0].number,
                            dev_id: vm.operatedata[0].dev_id
                        };
                var url="Dev_paramAction!update";
                var js=JSON.stringify(narr).toString();
                vm.num=0;
                ajax({
                      type:"post",
                      url:url,
                      async: true,
                      dataType: 'json',
                      data: "json="+js,
                      success:function(data){
                          data=data.result;
                          data=eval("("+data+")");
                          if(data.code==1){
                          vm.mockTableData1();
                          vm.operatedata=[{number:null,comname:'',battname:'',warnname:'',singname:'',warnsure:'',warnsuretime:'',warnstarttime:'',warnstoptime:''}];
                          vm.$Message.success('操作成功');
                          }else{
                                vm.$Message.error('操作失败');
                          }
                      }
                    });
            },
            cancel () {
                var vm=this;
                vm.operatedata=[{number:null,comname:'',battname:'',warnname:'',singname:'',warnsure:'',warnsuretime:'',warnstarttime:'',warnstoptime:''}];
                vm.num=0;
                vm.mockTableData1();
            },
    },
    mounted: function() {
        var vm=this;
        vm.num=0;
        vm.allnum=[];
        vm.getallwhq();
        this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 160;
        this.startSearch();
    },
    destroyed: function() {
        clearTimeout($.ti);
    }
}
</script>
<style scoped>
    .view-layout {
        height: 100%;
    }
    .view-layout-left {
        float: left;
        width: 360px;
        height: 100%;
        overflow-y: auto;
    }
    .view-layout-right {
        margin-left: 370px;
        height: 100%;
        overflow-y: auto;
    }
</style>
src/views/warnmanage/js/csv.js
New file
@@ -0,0 +1,59 @@
/*
  inspired by https://www.npmjs.com/package/react-csv-downloader
  now removed from Github
*/
const newLine = '\r\n';
const appendLine = (content, row, { separator, quoted }) => {
    const line = row.map(data => {
        if (!quoted) return data;
        // quote data
        data = typeof data === 'string' ? data.replace(/"/g, '"') : data;
        return `"${data}"`;
    });
    content.push(line.join(separator));
};
const defaults = {
    separator: ',',
    quoted: false
};
export default function csv(columns, datas, options, noHeader = false) {
    options = Object.assign({}, defaults, options);
    let columnOrder;
    const content = [];
    const column = [];
    if (columns) {
        columnOrder = columns.map(v => {
            if (typeof v === 'string') return v;
            if (!noHeader) {
                column.push(typeof v.title !== 'undefined' ? v.title : v.key);
            }
            return v.key;
        });
        if (column.length > 0) appendLine(content, column, options);
    } else {
        columnOrder = [];
        datas.forEach(v => {
            if (!Array.isArray(v)) {
                columnOrder = columnOrder.concat(Object.keys(v));
            }
        });
        if (columnOrder.length > 0) {
            columnOrder = columnOrder.filter((value, index, self) => self.indexOf(value) === index);
            if (!noHeader) appendLine(content, columnOrder, options);
        }
    }
    if (Array.isArray(datas)) {
        datas.forEach(row => {
            if (!Array.isArray(row)) {
                row = columnOrder.map(k => (typeof row[k] !== 'undefined' ? row[k] : ''));
            }
            appendLine(content, row, options);
        });
    }
    return content.join(newLine);
}
src/views/warnmanage/js/export-csv.js
New file
@@ -0,0 +1,76 @@
function has (browser) {
    const ua = navigator.userAgent;
    if (browser === 'ie') {
        const isIE = ua.indexOf('compatible') > -1 && ua.indexOf('MSIE') > -1;
        if (isIE) {
            const reIE = new RegExp('MSIE (\\d+\\.\\d+);');
            reIE.test(ua);
            return parseFloat(RegExp['$1']);
        } else {
            return false;
        }
    } else {
        return ua.indexOf(browser) > -1;
    }
}
const csv = {
    _isIE11 () {
        let iev = 0;
        const ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
        const trident = !!navigator.userAgent.match(/Trident\/7.0/);
        const rv = navigator.userAgent.indexOf('rv:11.0');
        if (ieold) {
            iev = Number(RegExp.$1);
        }
        if (navigator.appVersion.indexOf('MSIE 10') !== -1) {
            iev = 10;
        }
        if (trident && rv !== -1) {
            iev = 11;
        }
        return iev === 11;
    },
    _isEdge () {
        return /Edge/.test(navigator.userAgent);
    },
    _getDownloadUrl (text) {
        const BOM = '\uFEFF';
        // Add BOM to text for open in excel correctly
        if (window.Blob && window.URL && window.URL.createObjectURL) {
            const csvData = new Blob([BOM + text], { type: 'text/xls' });
            return URL.createObjectURL(csvData);
        } else {
            return 'data:attachment/xls;charset=utf-8,' + BOM + encodeURIComponent(text);
        }
    },
    download (filename, text) {
        if (has('ie') && has('ie') < 10) {
            // has module unable identify ie11 and Edge
            const oWin = window.top.open('about:blank', '_blank');
            oWin.document.charset = 'utf-8';
            oWin.document.write(text);
            oWin.document.close();
            oWin.document.execCommand('SaveAs', filename);
            oWin.close();
        } else if (has('ie') === 10 || this._isIE11() || this._isEdge()) {
            const BOM = '\uFEFF';
            const csvData = new Blob([BOM + text], { type: 'text/xls' });
            navigator.msSaveBlob(csvData, filename);
        } else {
            const link = document.createElement('a');
            link.download = filename;
            link.href = this._getDownloadUrl(text);
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }
    }
};
export default csv;