这是本文档旧的修订版!
import { Component, } from '@angular/core';
import { IonicPage, ViewController, ModalController, AlertController, ItemSliding, NavParams } from 'ionic-angular';
import { ZequiplocEdit } from './ZequiplocEdit/ZequiplocEdit';
import { ZEquipAL } from './ZEquipAL/ZEquipAL';
import { AITopoServer } from '../../../providers/aitopo.server';
import { GlobalFunction } from '../../GlobalFunction/GlobalFunction';
import { WindEditPage } from "../../Tfeng/equipment/windEdit";
import { gMapGlobal } from '../../map/mapClass/gMapGlobal';
import { SystemSel } from '../../../providers/system.serve';
import { EquipsServe } from '../../../providers/strata/EquipsServe';
import { ZwarnServe } from '../../../providers/strata/ZwarnServe';
import { WorkInfo } from '../../../providers/ZworkInfo.serve';

@IonicPage()
@Component({
  selector: 'gs_Zequiploc',
  templateUrl: 'Zequiploc.html',
  providers: [GlobalFunction],
})
export class Zequiploc {
  枚举值处理
  stat = 39;0', '未使用'], ['1', '使用中'], ['2', '已废弃';状态 cstatus
  showData = [];
  nrid = '';列表的下文读取
  mZsearchValue = '';搜索内容
  option = { f: '', gridid: '', nrid: '' }搜索框设置
  isBusy = false;忙碌
  mZnextMsg = '';下一页的标识内容
  sOpt = [false, true, true, true, true, true, true, true, true, true];是否显示搜索框
  sData: Array<any> = [];
  addModal: any;其他组件的调用
  areaID: string;区域id
  workID: string;工作面id
  name: string = '';区域名称
  rootData;原始数据
  father;宿主指针
  globalStyle;
  sys;
  mZwideLevel = 0;
  Ptype = '0';
  reSizeFun;
  firstRun = true;
  settings = {
    columns: {
      id: {
        title: 'ID'
      },
      name: {
        title: 'Full Name'
      },
      username: {
        title: 'User Name'
      },
      email: {
        title: 'Email'
      }
    }
  };

  constructor(
    navP: NavParams,
    system: SystemSel,
    private serve: AITopoServer,
    private modalCtrl: ModalController,
    private alertCtrl: AlertController,  用于超级用户的弹出框
    private vCtrl: ViewController,
    private gF: GlobalFunction,
    private gMapGlobal: gMapGlobal,
    private equSer: EquipsServe,
    private warn: ZwarnServe,
    workInfo: WorkInfo
  ) {
    let data = navP.get('data');
    if (!data) return;
    this.Ptype = data.p || '0';
    this.father = system.globalComp.map;
    this.father.mCdFormComp = this;
    this.areaID = workInfo.nowAreaID;
    this.workID = workInfo.nowWorkID;
    this.name = workInfo.getWorkName();
    this.mZsearchValue = data.filters;
    this.sys = data.t || 1;
    建立窗口调整功能
    this.gF.setLayerLevel([800, 600, 400, 200]);
    this.reSizeFun = () => { this.mZwideLevel = this.gF.reLayer(); }
    window.addEventListener("resize", this.reSizeFun);
    this.reSizeFun();
    this.mZwideLevel = this.gF.reLayer();
    this.fnZreload();
  }
  helpDiv = 'unshowDiv';
  showDiv() { this.helpDiv = 'showDiv'; }
  cancelDiv() { this.helpDiv = 'unshowDiv'; }

  /
   * 设置设备的过滤内容,对外接口
   * @param str 过滤值
   */
  setFilters(str) {
    str = str || '';
    this.sOpt[0] = true;
    this.mZsearchValue = str;
    this.getItems('1');
  }

  firstFilter() {
    if (this.mZsearchValue != undefined) {
      this.sOpt[0] = true;
      for (var k in this.rootData) {
        if (this.rootData.hasOwnProperty(k)) {
          let r = false;
          坐标
          if (this.sOpt[1] && this.rootData[k][25] == '') r = true;
          else if (this.sOpt[2] && this.rootData[k][25] != '') r = true;
          if (r == false) continue;
          状态
          r = false;
          if (this.sOpt[3] && this.rootData[k][16] == '0') r = true;
          else if (this.sOpt[4] && this.rootData[k][16] == '1') r = true;
          else if (this.sOpt[5] && this.rootData[k][16] == '2') r = true;
          if (r == false) continue;
          else this.sData.push(this.rootData[k]);
        }
      }
      this.getItems(undefined);

    };
    this.firstRun = false;
  }

  changePos() {
    if (this.serve.gZlockPosition) this.serve.gZlockPosition = false;
    else this.serve.gZlockPosition = true;
    this.serve.fZsaveGlobal();
  }

  读取下一页
  doInfinite(infiniteScroll?) {
    如果其他通信进行中
    if (this.isBusy == true) {
      this.serve.msgShow(1, 'high', '信息', '其他操作进行中,请稍后再试');
      if (infiniteScroll) infiniteScroll.complete();
      return;
    }
    如果已经没有内容,说明不需要再次进行读取
    if (this.option.nrid == '') {
      this.mZnextMsg = '';
      if (infiniteScroll) infiniteScroll.complete();
      return;
    }
    this.isBusy = true;
    this.mZnextMsg = '读取中';
    this.fZread().then) => {
      this.isBusy = false;
      if (infiniteScroll) infiniteScroll.complete();
    }).catch((err) => {
      this.isBusy = false;
      if (infiniteScroll) infiniteScroll.complete();
      this.mZnextMsg = err.msg;
      this.errorProcess(err);
    });
  }

  读取
  fZread() {
    return this.equSer.get(this.areaID, this.workID).then(data => {
      this.rootData = data;
      this.reLoadData();
      return Promise.resolve();
    }).catch(err => Promise.reject(err));
  }

  删除
  delete(item: string, items?) {
    if (this.isBusy == true) return this.serve.msgShow(1, 'high', '错误', '其他操作正在进行中!');
    let ids = [];
    if (items != undefined) ids = items;
    else ids.push(item);
    this.equSer.del(this.areaID, ids).then(() => {
      this.reLoadData();
      this.isBusy = false;
      this.serve.msgShow(1, 'high', '信息', '删除成功!');
      this.serve.synCdInforInServer(this.areaID, '396', 'syn');强制同步
      if (this.father.equLocAUD) return this.father.equLocAUD(this.workID, 3, item);
      return;
    }).catch(err => this.errorProcess(err));
  }

  错误处理
  errorProcess(err) {
    console.log(err);
    this.isBusy = false;
    if (err.errCode == '1002') return this.serve.msgShow(3, 'low', '错误', '超时或者账户在其他地点登陆!');
    this.serve.msgShow(3, 'high', '错误', err.msg);
  }
  仅仅高亮点击行
  forcueLine(item1) {
    if (this.globalStyle && this.delAllItem == false) this.globalStyle[-1] = '';
    if (this.delAllItem == false) this.globalStyle = item1;
    item1[-1] = 'selected';
  }

  是否处于全部删除的状态
  delAllItem = false;
  delAllName = '删除';

  delAll() {
    if (this.globalStyle) {
      this.globalStyle[-1] = '';
      this.globalStyle = undefined;
    }
    if (this.delAllItem == false) {
      this.delAllItem = true;
      this.delAllName = '确认';
    }
    else {
      let ids = [];
      this.delAllItem = false;
      this.delAllName = '删除';
      for (let i = 0; i < this.showData.length; i++) {
        const e = this.showData[i].data;
        if (e[-1] == 'selected') ids.push(e[0])
      }
      if (ids.length > 0) this.delete('', ids);
    }
  }

  /添加批量数据 */
  addSome() {
    this.addModal = this.modalCtrl.create('ZEquipAL', { areaID: this.areaID, workID: this.workID, t: this.sys, father: this.father }, { cssClass: 'Zequloc' });
    this.addModal.onDidDismiss(() => this.fnZreload(;
    this.addModal.present();
  }

  添加或者编辑
  fZaddEdit(item1: any, mZisData: boolean, slidingItem?: ItemSliding, ) {
    if (slidingItem) slidingItem.close();
    if (this.isBusy == true) return this.serve.msgShow(1, '', '信息', '其他处理正在进行中,请稍后');
    if (this.globalStyle) this.globalStyle[-1] = '';
    this.globalStyle = item1;
    this.globalStyle[-1] = 'selected';
    if (this.Ptype == '1') {
      this.addModal = this.modalCtrl.create('WindEditPage', { data: { typeName: item1[3], rid: this.areaID, hid: item1[0], gid: this.workID, father: this.father } }, { cssClass: 'Zequloc' });
      this.addModal.onDidDismiss) => this.fnZreload(;
      this.addModal.present();
      return;
    }
    this.addModal = this.modalCtrl.create('ZequiplocEdit', { father: this.father, data: item1, isData: mZisData, areaID: this.areaID, workID: this.workID, allData: this.showData }, { cssClass: 'Zequloc' });
    this.addModal.onDidDismiss(res => {
      if (!res) return;
      if (res.del == true) return this.delete(item1[0]);
      else { this.fnZreload(); }
    });
    this.addModal.present();
  }

  过滤选项
  showSearch(n) {
    let cell = ['', '无坐标信息', '有坐标信息', '未使用', '使用中', '已废弃',]
    let alertT = this.alertCtrl.create({ cssClass: 'Zequloc' });
    alertT.setTitle('过滤选项:');
    alertT.setMessage('请选择需要显示的仪表:');
    for (let i = n; i < n + 3; i++) {
      if (cell[i] == '') continue;
      alertT.addInput({
        type: 'checkbox',
        label: cell[i],
        value: i.toString(),
        checked: this.sOpt[i],
      });
    }
    alertT.addButton({
      text: '确定',
      handler: data => {
        for (let i = n; i < n + 3; i++)this.sOpt[i] = false;
        for (let i = 0; i < data.length; i++)this.sOpt[parseInt(data[i])] = true;
        this.creatFilter();
      }
    });
    alertT.present();
  }

  creatFilter() {
    this.sData.splice(0, this.sData.length);
    for (var k in this.rootData) {
      if (this.rootData.hasOwnProperty(k)) {
        let r = false;
        坐标
        if (this.sOpt[1] && this.rootData[k][25] == '') r = true;
        else if (this.sOpt[2] && this.rootData[k][25] != '') r = true;
        if (r == false) continue;
        状态
        r = false;
        if (this.sOpt[3] && this.rootData[k][16] == '0') r = true;
        else if (this.sOpt[4] && this.rootData[k][16] == '1') r = true;
        else if (this.sOpt[5] && this.rootData[k][16] == '2') r = true;
        if (r == false) continue;
        else this.sData.push(this.rootData[k]);
      }
    }
    if (this.sOpt[0]) this.getItems('1');
    else this.getItems('');
  }

  重新读取内容
  async fnZreload() {
    if (this.isBusy == true) return;
    else this.isBusy = true;
    try {
      await this.fZread();
      this.creatFilter();
      if (this.firstRun) this.firstFilter();
    } catch (error) {
      this.mZnextMsg = error.msg;
      this.errorProcess(error);
    }
    this.isBusy = false;
  }

  findNoGoem() {
    this.showData = [];
    for (let k in this.rootData) {
      let t;
      if (this.rootData[k][25].length == 0) {
        if (this.Ptype == '0') {
          if this.gMapGlobal.mFPropHash[this.rootData[k][2]].type & 2) != 0) {测点配置属性
            if (this.rootData[k][25] == '' || this.rootData[k][25] == 'null') t = false;
            else t = true;
            this.showData.push({ data: this.rootData[k], locat: t });
          }
        } else if (this.Ptype == '1') {
          if ((this.gMapGlobal.mFPropHash[this.rootData[k][2]].type & 1) != 0) {设备
            if (this.rootData[k][25] == '' || this.rootData[k][25] == 'null') t = false;
            else t = true;
            this.showData.push({ data: this.rootData[k], locat: t });
          }
        }
      }
    }
  }

  过滤
  getItems($event) {
    this.showData = [];
    let ser = this.mZsearchValue.split(' ');
    if (ser && ser.length != 0) {
      for (let i = 0; i < ser.length;) {
        const e = ser[i];
        if (e == '') ser.splice(i, 1);
        else i++
      }
    }
    for (let k = 0; k < this.sData.length; k++) {
      let needJump = false;
      for (let i = 1; i < this.sData[k].length; i++) {
        如果空,或者抖索框为空,那么全部添加
        if ($event == '' || this.mZsearchValue == undefined || this.mZsearchValue == '') {
          let t;
          if (this.Ptype == '0') {
            if ((this.gMapGlobal.mFPropHash[this.sData[k][2]].type & 2) != 0) {测点配置属性
              if (this.sData[k][25] == '' || this.sData[k][25] == 'null') t = false;
              else t = true;
              this.showData.push({ data: this.sData[k], locat: t });
            }
          } else if (this.Ptype == '1') {
            if ((this.gMapGlobal.mFPropHash[this.sData[k][2]].type & 1) != 0) {基本属性
              if (this.sData[k][25] == '' || this.sData[k][25] == 'null') t = false;
              else t = true;
              this.showData.push({ data: this.sData[k], locat: t });
            }
          }
          break;
        }
        不为空的话,进行逐个添加
        for (let j = 0; j < ser.length; j++) {
          const e = ser[j];
          if (e[0] == 't' && e[1] == '=') continue;
          let t;
           console.log('查找信息', this.sData[k][i]);

          if (this.sData[k][i].indexOf(e) < 0) continue;
          if (this.sData[k][25] == '' || this.sData[k][25] == 'null') t = false;
          else t = true;
          this.currentItems.push({ data: this.sData[k], locat: t });
          if (this.Ptype == '0') {
            if ((this.gMapGlobal.mFPropHash[this.sData[k][2]].type & 2) != 0) {测点配置属性
              if (this.sData[k][25] == '' || this.sData[k][25] == 'null') t = false;
              else t = true;
              this.showData.push({ data: this.sData[k], locat: t });
            }
          } else if (this.Ptype == '1') {
            if ((this.gMapGlobal.mFPropHash[this.sData[k][2]].type & 1) != 0) {基本设备
              if (this.sData[k][25] == '' || this.sData[k][25] == 'null') t = false;
              else t = true;
              this.showData.push({ data: this.sData[k], locat: t });
            }
          }
          needJump = true;
          break;
        }
        if (needJump == true) break;
      }
    }

    通信地址过滤
    let decs = [];
    for (let j = 0; j < ser.length; j++) {
      const e = ser[j];
      if (e[0] == 't' && e[1] == '=') { decs.push(e.replace(/t\=/g, '' }
    }
    if (decs && decs.length != 0) {
      for (let i = 0; i < decs.length; i++) decs[i] = decs[i].replace(/t\=/g, '');
      console.log('过滤', decs);
      for (let i = 0; i < this.showData.length;) {
        let needDel = true;
        const e = this.showData[i].data;
        每个过滤关键字
        for (let k = 0; k < decs.length; k++) {
          needDel = true;
          const f = decs[k];
          通信地址判断
          if (e[5].indexOf(f) < 0) continue;
          else { needDel = false; break; }
        }
        if (needDel) this.showData.splice(i, 1);
        else i++;
      }
    }
    this.equSer.equs
    this.sortData();
  }

  sortData() {
    this.showData.sorta, b) => {
      let [aNum, bNum] = [Number(a.data[16]), Number(b.data[16])];
      if (aNum != 1 && bNum == 1) return 1;
      else if (aNum == 1 && bNum != 1) return -1;
      if (a.data[2] > b.data[2]) return 1;
      else if (a.data[2] < b.data[2]) return -1;
      if (this.getNumber(a.data[15]) > this.getNumber(b.data[15] return 1;
      return -1
    });
  }


  getNumber(t: string) {
    let res: any = t.match(/[0-9]+/);
    if (res) res = res[0];
    else return t;
    return Number(res);
  }

  reLoadData() {
    this.showData = [];.splice(0, this.showData.length);
    let t;
    for (var k in this.rootData) {
      if (this.Ptype == '0') {
        if ((this.gMapGlobal.mFPropHash[this.rootData[k][2]].type & 2) != 0) {测点配置属性
          if (this.rootData[k][25] == '' || this.rootData[k][25] == 'null') t = false;
          else t = true;
          this.showData.push({ data: this.rootData[k], locat: t });
        }
      } else if (this.Ptype == '1') {
        if this.gMapGlobal.mFPropHash[this.rootData[k][2]].type & 1) != 0) {基本属性
          if (this.rootData[k][25] == '' || this.rootData[k][25] == 'null') t = false;
          else t = true;
          this.showData.push({ data: this.rootData[k], locat: t });
        }
      }
    }
    this.sortData();
    if (this.sOpt[0]) {
      this.creatFilter();
      this.getItems('1');
    }
  }
  cancel() { this.vCtrl.dismiss(); }

  locat(item) { if (this.father.equLocPosition) this.father.equLocPosition(item); }

  ngOnDestroy() {
    window.removeEventListener("resize", this.reSizeFun);
    if (this.globalStyle && this.delAllItem == false) this.globalStyle[-1] = '';
    if (this.addModal != undefined) this.addModal.dismiss();
    if (this.father) this.father.onCompDismiss(4);
  }
  将工作面设备配置默认值
  theAreaTitle = "1301胶带";
  intevalTime;
  addNum = 0;
  addCont = 1;50
  areaCont = 1;
  1 深 2 浅 3 综
  organizedData() {
    console.log("全部的值", this.showData);
    let arr = [];
    for (let i = 0; i < this.showData.length; i++) {
      arr[i] = this.showData[i];
    }
    冒泡排序
     for(let i=0;i<this.currentItems.length;i++){
       arr[i]=this.currentItems[i];
     }
       for(var a=0;a<arr.length;a++){
         for(var b=0;b<arr.length;b++){
             var c;
             var t = arr[a]["data"][18].split("‖");
             var k = arr[b]["data"][18].split("‖");
             if(t[2]<k[2]){
                 c = arr[a];
                 arr[a] = arr[b];
                 arr[b] = c;
             }
           }
         }
    this.editAlert("轮询区域名称", [{ name: "name", type: 'text', placeholder: "区域名" },
      {name:"start",type: 'text',placeholder:"距工作面起点"},
      {name:"end",type: 'text',placeholder:"距工作面终点"}
    ],
      arr);
  }
  isbusyAdd = false;
  tianjiafangfa(resText) {
    if (this.isbusyAdd) return;
    this.isbusyAdd = true;
    console.log("添加结果", resText);

    this.equSer.update(this.areaID, resText).then((data) => {
      console.log("添加结果", data);
      this.isbusyAdd = false;
      this.addNum++;
      this.addCont++;
          this.serve.synCdInforInServer(this.areaID, '396', 'syn');强制同步
          this.viewCtrl.dismiss({ w: this.workID, g: this.form.get('geom').value, i: this.form.get('cid').value });
    })
  }
  organizedAlarmPlan() {
    console.log("全部的值", this.showData);
    let arr = [];
    for (let i = 0; i < this.showData.length; i++) {
      arr[i] = this.showData[i];
    }
    this.warn.get().then(v => {
      console.log("预案解果", v);
      let brr = [];
      for (let i = 0; i < v.length; i++) {
        brr.push({ name: "name", type: 'radio', label: v[i][1], value: v[i][0] });
      }
      brr.push({name:"type",type: 'radio',label:"深孔",value:"sk"});
      brr.push({name:"type",type: 'radio',label:"浅孔",value:"qk"});
      this.editAlert("报警预案设置", brr, arr);
    });


  }
  /
   * 仪表修改弹框
   */
  editAlert(title, content, arr) {
    console.log(title, content);
    let alert = this.alertCtrl.create({
      title: title,
      inputs: content,
      buttons: [
        { text: '取消', },
        {
          text: '确定',
          handler: data => {
            switch (title) {
              case "报警预案设置":
                this.addPlanInfo(arr, data);
                break;
              case "轮询区域名称":
                this.addAreaInfo(arr, data);
                break;
              case "按距离筛选":
                this.selectEquipment(arr, data);
                break;
              case "按深浅孔筛选":
                this.selectType(arr, data);
                break;
            }
          }
        }
      ]
    });
    alert.present();
  }
  /
   * 添加预案信息
   */
  addPlanInfo(arr, data) {
    console.log("调整后的全部的值", arr);
    this.intevalTime = setInterval(() => {
      if (!arr[this.addNum]) {
        clearInterval(this.intevalTime);
        this.serve.synCdInforInServer(this.areaID, '396', 'syn');强制同步
        return;
      }
      let brr = arr[this.addNum]["data"];
      brr[26] = "1$" + data;

      this.tianjiafangfa(brr)

    }, 500);
  }
  addAreaInfo(arr, data) {
    this.intevalTime = setInterval(() => {
      if (!arr[this.addNum]) {
        clearInterval(this.intevalTime);
        this.serve.synCdInforInServer(this.areaID, '396', 'syn');强制同步
        return;
      }
      let brr = arr[this.addNum]["data"];
      brr[14] = data["name"];
      this.tianjiafangfa(brr)

    }, 500);
  }
  /**
   * 设备的筛选
   * 目前只有按照工作面距离筛选
   */
  selectEquip() {
    let arr = [];
    for (let i = 0; i < this.showData.length; i++) {
      arr[i] = this.showData[i];
    }
    this.editAlert("按距离筛选", [{ name: "start", type: 'text', placeholder: "起始距离" }, { name: "end", type: 'text', placeholder: "结束距离" }], arr);
  }
  selectEquipment(arr, data) {
    console.log("选择条件", data);
    let b = [];
    for (let i = 0; i < arr.length; i++) {
      let a = arr[i]["data"][18].split("‖");
      console.log(a[2], a[2] >= Number(data["start"]), a[2] < Number(data["end"]), a[2]);

      if (a[2] >= Number(data["start"]) && a[2] < Number(data["end"])) {
        b.push(arr[i]);
      }
    }
    if (!data["start"] || !data["end"]) {
      b = this.showData;
    }
    this.showData = b;
    this.editAlert("按深浅孔筛选", [{ name: "type", type: 'radio', label: "深孔", value: "sk" }, { name: "type", type: 'radio', label: "浅孔", value: "qk" }], b);
  }
  selectType(arr, data) {
    console.log(data);
    let s = [];
    let q = [];
    for (let i = 0; i < arr.length; i++) {
      let b = arr[i]["data"][18].split("‖");
      if (b[0] <= 10) {浅孔
        q.push(arr[i]);
      }
      else {
        s.push(arr[i]);
      }
    }
    if (data == "sk") {
      this.showData = s;
    }
    if (data == "qk") {
      this.showData = q;
    }
  }
}