<!--
    上传文件的弹窗
-->

<template>
  <div v-show="dialog.addDevice">
    <el-dialog
      :title="title"
      :center="isCenter"
      :visible.sync="dialog.addDevice"
      :width="width"
      :fullscreen="isFull"
    >
      <div id="addDevice">
        <div v-show="!isCenter">
          <my-cascader @change="changeCader"></my-cascader>
        </div>
        <div v-if="isCenter">
          <div>
            <div class="hanson-bar" style="overflow:hidden;">
              <el-button
                style="float:right;"
                size="small"
                @click="undo"
                icon="iconfont icon-undo"
              >撤销</el-button>
              <el-button
                style="float:right;"
                size="small"
                @click="reset"
                icon="iconfont icon-shuaxin"
              >刷新</el-button>
              <el-button style="float:right;" size="small" @click="addMain">增加</el-button>
              <el-input
                v-model="addNum"
                placeholder="增加个数"
                style="width:50px;float:right;"
                size="small"
              ></el-input>
            </div>
            <div v-show="main && main.length" id="myHandson" ref="myHandson"></div>
          </div>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="addSpace">添加业务空间</el-button>
      </span>
    </el-dialog>
    <qrcode :dialog="myDialog" :addBody="true" ref="qrcode"></qrcode>
    <firm ref="firm" :dialog="myDialog"></firm>
    <supply-dialog ref="supply" :dialog="myDialog"></supply-dialog>
    <supplier-dialog ref="supplier" @changeSupplier="supplierChange" :dialog="myDialog"></supplier-dialog>
    <guarantee-dialog ref="guarantee" :dialog="myDialog"></guarantee-dialog>
    <upload-files-dialog
      ref="upload"
      @changeFile="fileChange"
      :keysArr="filesArr"
      :dialog="myDialog"
    ></upload-files-dialog>
    <upload-img-dialog @changeFile="imgChange" :keysArr="imgsArr" :dialog="myDialog"></upload-img-dialog>
    <maintainer-dialog @changeMaintainer="changeMaintainer" ref="maintainer" :dialog="myDialog"></maintainer-dialog>
    <insurer-dialog @changeInsurer="changeInsurer" ref="insurer" :dialog="myDialog"></insurer-dialog>
    <pic-dialog :dialog="myDialog" :keysArr="picsArr" @change="changePics"></pic-dialog>
  </div>
</template>
<script>

import myCascader from "@/components/business_space/lib/cascaders/assets";
// import hansonTable from "@/components/business_space/dialogHanson/addDevice";
import { getSpaceHeader } from "@/api/scan/request";
import { mapGetters, mapActions } from "vuex";
import tools from "@/utils/tools";
import qrcode from "@/components/business_space/lib/qrcode";
import firm from "@/components/business_space/dialogs/list/firm";
import supplyDialog from "@/components/business_space/dialogs/list/supplyDialog";
import supplierDialog from "@/components/business_space/dialogs/list/supplierDialog";
import maintainerDialog from "@/components/business_space/dialogs/list/maintainerDialog";
import insurerDialog from "@/components/business_space/dialogs/list/insurerDialog";
import guaranteeDialog from "@/components/business_space/dialogs/list/guaranteeDialog";
import uploadFilesDialog from "@/components/business_space/dialogs/list/filesDialog";
import uploadImgDialog from "@/components/business_space/dialogs/list/uploadImgDialog";
import picDialog from "@/components/business_space/dialogs/list/picDialog"

let table = function (num) {
  let main = []
  for (let i = 0; i < num; i++) {
    main.push({})
  }
  return main
}
export default {
  components: {
    myCascader,
    // hansonTable,
    qrcode, //二维码页面
    firm, //
    supplyDialog,
    supplierDialog,
    guaranteeDialog,
    uploadFilesDialog,
    maintainerDialog,
    insurerDialog,
    uploadImgDialog,
    picDialog
  },
  props: {
    dialog: {
      type: Object,
      default: function () {
        return {
          addDevice: false
        };
      }
    },
    headerData: {
      type: Array,
      default: function () {
        return []
      }
    }
  },
  computed: {
    ...mapGetters("layout", ["projectId", "secret", "userId"]),
  },
  data() {
    return {
      width: "30%",
      isFull: true,//dialog是否为全屏
      title: "添加业务空间",
      isCenter: true,
      deviceType: {},
      main: table(10),
      mess: {},
      headers: null,
      page: {
        size: 50,
        sizes: [10, 30, 50, 100, 150, 200],
        total: 400,
        currentPage: 1
      },
      id: null,
      myDialog: {
        qrcode: false, //二维码弹窗
        firm: false, //厂商弹窗
        supply: false, //选择供应合同
        supplier: false, //供应商选择
        guarantee: false, //选择保单
        maintainer: false, //选择维修商
        insurer: false, //选择保险公司
        uploadFiles: false,//上传文件
        uploadImgs: false,//上传单个图片
        pic: false, //多个图片
      },
      addNum: 1,//增加个数
      row: null,//被修改的row
      filesArr: [],//保存临时的文件key
      messKey: null,
      imgsArr: [],//临时保存的图片key数组
      picsArr: [],//临时设备图片keys数组
    };
  },
  created() {

  },
  mounted() {
  },
  methods: {
    //增加个数
    addMain() {
      for (let i = 0; i < this.addNum; i++) {
        this.main.push({})
      }
      this.hot.loadData(this.main)
    },

    //添加业务空间确定
    addSpace() {
      console.log(this.main)
      let pushData = []
      this.main.map(item => {
        if (!!item.infos) {
          for (let key in item.infos) {
            if (!!item.infos[key]) {
              pushData.push(item)
            }
          }
        }
      })
      console.log(pushData)
    },

    //下一步
    // step(val) {
    //   if (!!val) {
    //     this.isFull = true
    //     this.isCenter = true
    //     this.title = "添加资产"
    //     this.getData()
    //   } else {
    //     this.isFull = false
    //     this.isCenter = false
    //   }
    // },
    //修改设备类型
    changeCader(val) {
      this.deviceType = val
    },
    //获取header的mess
    getHeader(mess) {
      this.mess = mess;
    },

    //获取主体内容
    // getMain(floorMess) {
    //   console.log(floorMess);
    // },

    //获取表头
    getData() {
      this.main = table(10)
      getSpaceHeader({
        code: "space",
        ProjId: this.projectId
      }).then(res => {
        this.headers = res.data.Content;
        if (!!this.hot) {
          this.hot.destroy();
          this.hot = null;
        }
        let data = tools.getItem(this.deviceType.code)
        if (!!data) {
          this.main = data
        }
        this.initHot();
      });
    },

    //撤回
    undo() {
      this.hot.undo();
    },

    //刷新
    reset() {
      this.getData();
    },

    //添加设备
    addDevice() {
      console.log("addDevice")
    },

    /**
     * 表头文案处理函数
     * @param arr header数组数据
     *
     * @return 处理好的文案
     */
    delHeader(arr) {
      let data = arr.map(item => {
        if (
          item.InputMode == "A1" ||
          item.InputMode == "A2" ||
          item.InputMode == "B1" ||
          item.InputMode == "C5" ||
          item.InputMode == "D1" ||
          item.InputMode == "D2" ||
          item.InputMode == "X" ||
          item.InputMode == "L" ||
          item.InputMode == "L1" ||
          item.InputMode == "L2" ||
          item.InputMode == "F1" ||
          item.InputMode == "F2"
        ) {
          if (item.unit == "") {
            return item.InfoPointName;
          } else {
            return item.InfoPointName + "(" + item.unit + ")";
          }
        } else {
          return undefined;
        }
      });
      data = data.filter(item => item);
      //   data.unshift("同时创建资产", "所属建筑楼层", "所属系统实例");
      return data;
    },

    /**
     * 表头数据处理函数
     * @param arr header数组数据
     *
     * @return 处理好的数据格式
     */
    getType(arr) {
      let data = arr.map(item => {
        //二维码
        if (item.infoPointCode == "EquipQRCode") {
          return {
            data: "infos." + item.infoPointCode,
            renderer: tools.lookDetails,
            readOnly: true
          }
        }
        //厂商选择
        if (item.infoPointCode == "Brand" || item.infoPointCode == "Specification") {
          return {
            data: "infos." + item.infoPointCode,
            renderer: tools.lookDetails,
            readOnly: true
          }
        }
        if (item.infoPointCode == "SupplierContractID") {
          return {
            data: "infos." + item.infoPointCode,
            renderer: tools.lookDetails,
            readOnly: true
          }
        }

        if (item.infoPointCode == "InsuranceNum") {
          //选择保单
          return {
            data: "infos." + item.infoPointCode,
            renderer: tools.lookDetails,
            readOnly: true
          }
        }

        if (item.infoPointCode == "InsuranceFile" || item.infoPointCode == "Archive") {
          return {
            data: "infos." + item.infoPointCode,
            renderer: tools.lookDetails,
            readOnly: true
          }
        }

        if (
          item.infoPointCode == "InstallLocation" ||
          item.infoPointCode == "InstallPic" ||
          item.infoPointCode == "InstallDrawing" ||
          item.infoPointCode == "Nameplate" ||
          item.infoPointCode == "Pic" ||
          item.infoPointCode == "Drawing"
        ) {
          return {
            data: "infos." + item.infoPointCode,
            renderer: tools.lookDetails,
            readOnly: true
          }
        }

        if (
          item.infoPointCode == "Maintainer" ||
          item.infoPointCode == "Supplier" ||
          item.infoPointCode == "Insurer" ||
          item.infoPointCode == "InsurerContactor"
        ) {
          return {
            data: "infos." + item.infoPointCode,
            renderer: tools.lookDetails,
            readOnly: true
          }
        }
        if (item.InputMode == "D1") {
          return {
            data: "infos." + item.infoPointCode,
            renderer: tools.customDropdownRenderer,
            editor: "chosen",
            chosenOptions: {
              // multiple: true,//多选
              data: item.DataSource || ""
            }
          };
        } else if (item.InputMode == "A1" || item.InputMode == "A2") {
          return {
            data: "infos." + item.infoPointCode,
            type: "numeric",
            numericFormat: {
              pattern: "0,0.00"
              // culture: 'de-DE' // use this for EUR (German),
              // more cultures available on http://numbrojs.com/languages.html
            }
          };
        } else if (item.InputMode == "C5") {
          return {
            data: "infos." + item.infoPointCode,
            type: "date",
            dateFormat: "YYYY-MM-DD",
            correctFormat: true
          };
        } else if (
          item.InputMode == "B1" ||
          item.InputMode == "L" ||
          item.InputMode == "L1" ||
          item.InputMode == "L2"
        ) {
          return {
            data: "infos." + item.infoPointCode
          };
        } else if (
          item.InputMode == "X" ||
          item.InputMode == "F2"
          // item.InputMode == "L1" ||
          // item.InputMode == "L2"
        ) {
          return {
            data: "infos." + item.infoPointCode,
            readOnly: true
          };
        } else if (item.InputMode == "D2") {
          return {
            data: "infos." + item.infoPointCode,
            renderer: tools.customDropdownRenderer,
            editor: "chosen",
            chosenOptions: {
              multiple: true, //多选
              data: item.DataSource.Content || ""
            }
          };
        } else {
          return undefined;
        }

      });
      //   data.unshift(
      //     {
      //       type: "checkbox",
      //       checkedTemplate: 1,
      //       uncheckedTemplate: 0,
      //       data: "Checked",
      //       label: {
      //         position: "after",
      //       }
      //     },
      //     {
      //       data: "flowBuild",
      //       renderer: tools.customDropdownRenderer,
      //       editor: "chosen",
      //       chosenOptions: {
      //         // multiple: true,//多选
      //         // data: item.DataSource.Content || ""
      //       }
      //     },
      //     {
      //       data: "system",
      //       renderer: tools.customDropdownRenderer,
      //       editor: "chosen",
      //       chosenOptions: {
      //         // multiple: true,//多选
      //         // data: item.DataSource.Content || ""
      //       }
      //     }
      //   );
      data = data.filter(item => item);
      return data;
    },

    //初始化插件
    initHot() {
      var container = document.getElementById("myHandson");
      let winHeight = document.documentElement.clientHeight;
      this.hot = new Handsontable(container, {
        data: this.main,
        colHeaders: this.delHeader(this.headers), //表头文案
        columns: this.getType(this.headers), //数据显示格式
        filters: true,
        height: winHeight - 100 - 50 - 60,
        columnSorting: true, //添加排序
        sortIndicator: true, //添加排序
        renderAllRows: true,
        autoColumnSize: true,
        language: "zh-CN",
        manualColumnResize: true,
        manualColumnMove: true,
        dropdownMenu: [
          "filter_by_condition",
          "filter_by_value",
          "filter_action_bar"
        ],
        contextMenu: this.onlyRead ? false :{
          items: {
            remove_row: {
              name: "删除该业务空间"
            }
          }
        },
        filters: true,
        afterFilter: this.trimmedRows,
        // 事件
        afterChange: this.tdChange, //修改后
        afterFilter: this.trimmedRows, //排序前
        beforeRemoveRow: this.romoveFm, //右键删除
        afterOnCellMouseDown: this.eventClick //鼠标点击
      });
      let pro = document.getElementById("hot-display-license-info");
      if (!!pro) {
        pro.parentNode.removeChild(pro);
      }
      this.isLoading = false;
    },

    tdChange() {
      tools.setItem(this.deviceType.code, this.main)
    },

    //表格中的点击
    eventClick(el, rowArr) {
      console.log(rowArr)
      //点击的是表头
      if (rowArr.row < 0) {
        return;
      }
      let filter = this.filtersArr;
      //被筛选过后的数组
      let trimmedArr = this.trimmedRows();
      //是否启用了排序
      let isSort = this.hot.getPlugin("columnSorting").isSorted();
      if (trimmedArr.length && isSort) {
        let sortArr = this.myHotArr.getPlugin("columnSorting").rowsMapper
          .__arrayMap;
        let infos = this.main[trimmedArr[sortArr[rowArr.row]]];
        this.getInfors(infos, sortArr[rowArr.row]);
      } else if (isSort) {
        //排序后的数组
        let sortArr = this.hot.getPlugin("columnSorting").rowsMapper.__arrayMap;
        let infos = this.main[sortArr[rowArr.row]];
        this.getInfors(infos, sortArr[rowArr.row]);
      } else if (trimmedArr.length) {
        let infos = this.main[trimmedArr[rowArr.row]];
        this.getInfors(infos, trimmedArr[rowArr.row]);
      } else {
        let infos = this.main[rowArr.row];
        this.getInfors(infos, rowArr);
      }
    },

    getInfors(infos, row) {
      //其他的开始判断
      let val = this.hot.colToProp(row.col);
      if (val == "infos.EquipQRCode") {
        this.myDialog.qrcode = true;
        this.$refs.qrcode.getCanvas(1111);
      }

      if (val == "infos.Brand" || val == "infos.Specification") {
        this.myDialog.firm = true;
      }

      if (val == "infos.SupplierContractID") {
        let falg = null
        if (!!this.main[row.row].infos) {
          if (!!this.main[row.row].infos) {
            falg = this.main[row.row].infos.dpSupplierId
          }
        }
        if (!!falg) {
          this.id = falg
          this.myDialog.supply = true;
        } else {
          this.$message("请先选择供应商")
        }
      }

      if (val == "infos.InsuranceNum") {
        //选择保单
        this.myDialog.guarantee = true;
      }

      if (val == "infos.InsuranceFile" || val == "infos.Archive") {
        this.filesArr = this.main[row.row].infos ? (this.main[row.row].infos[val.split(".")[1]] ? [this.main[row.row].infos[val.split(".")[1]]] : []) : []
        this.myDialog.uploadFiles = true
      }

      if (
        val == "infos.InstallLocation" ||
        val == "infos.InstallPic" ||
        val == "infos.InstallDrawing" ||
        val == "infos.Nameplate" ||
        val == "infos.Drawing"
      ) {
        if (val == "infos.Nameplate") {
          this.imgsArr = this.main[row.row].infos ? (this.main[row.row].infos[val.split(".")[1]] ? [this.main[row.row].infos[val.split(".")[1]].key] : []) : []
        } else {
          this.imgsArr = this.main[row.row].infos ? (this.main[row.row].infos[val.split(".")[1]] ? [this.main[row.row].infos[val.split(".")[1]]] : []) : []
        }
        this.myDialog.uploadImgs = true
      }

      if (val == "infos.Pic") {
        // console.log(this.main[row.row].infos[val.split(".")[1]], "this.main[row.row].infos[val.split")
        this.picsArr = this.main[row.row].infos ? (this.main[row.row].infos[val.split(".")[1]] ? this.main[row.row].infos[val.split(".")[1]] : []) : []
        console.log(this.picsArr)
        this.myDialog.pic = true
      }

      if (
        val == "infos.Supplier"
      ) {
        this.myDialog.supplier = true;
      }

      if (val == "infos.Maintainer") {
        this.myDialog.maintainer = true;
      }

      if (
        val == "infos.Insurer" ||
        val == "infos.InsurerContactor") {
        this.myDialog.insurer = true;
      }
      this.row = row.row
      this.messKey = val
      console.log(val, row);
    },

    //获取被筛选掉的行号
    trimmedRows() {
      // var plugin = hot.getPlugin('trimRows').trimmedRows;//获取被筛选掉的行号
      var plugin = this.hot.getPlugin("trimRows").trimmedRows;
      let dataLength = this.main.length;
      let dataArr = new Array();
      for (let i = 0; i < dataLength; i++) {
        dataArr.push(i);
      }
      if (plugin.length <= 0) {
        dataArr = undefined;
      } else {
        dataArr = this.array_diff(dataArr, plugin);
      }
      return dataArr || [];
      // var DataArray = new Array();

      // for (var i = 0; i < plugin.length; i++) {
      //     // 通过行号获取数据
      //     DataArray.push(this.hot.getSourceDataAtRow(plugin[i]));
      // }
    },

    //判断是否为空行
    isEmptyRow(instance, row) {
      var rowData = instance.countRows();
      for (var i = 0, ilen = rowData.length; i < ilen; i++) {
        if (rowData[i] !== null) {
          return false;
        }
      }
      return true;
    },

    //如果选择供应商之后
    supplierChange(data) {
      console.log(data, "供应商")
      for (let key in data) {
        this.utilToKey(key, "name", data, "Supplier")
        this.utilToKey(key, "email", data, "SupplierEmail")
        this.utilToKey(key, "website", data, "SupplierWeb")
        this.utilToKey(key, "phone", data, "SupplierPhone")
        this.utilToKey(key, "fox", data, "SupplierFax")
        this.utilToKey(key, "man", data, "SupplierContactor")
        this.utilToKey(key, "venderId", data, "dpSupplierId")
      }
      tools.setItem(this.deviceType.code, this.main)
    },

    //保险商变更
    changeInsurer(data) {
      console.log(data, "保险商")
      for (let key in data) {
        this.utilToKey(key, "name", data, "Insurer")
        this.utilToKey(key, "email", data, "InsurerEmail")
        this.utilToKey(key, "website", data, "InsurerWeb")
        this.utilToKey(key, "phone", data, "InsurerFax")
        this.utilToKey(key, "man", data, "InsurerContactor")
        this.utilToKey(key, "venderId", data, "dpInsurerId")
      }
      tools.setItem(this.deviceType.code, this.main)
    },

    //维修商变更
    changeMaintainer(data) {
      for (let key in data) {
        this.utilToKey(key, "name", data, "Maintainer")
        this.utilToKey(key, "email", data, "MaintainerEmail")
        this.utilToKey(key, "website", data, "MaintainerWeb")
        this.utilToKey(key, "phone", data, "MaintainerPhone")
        this.utilToKey(key, "fox", data, "MaintainerFax")
        this.utilToKey(key, "man", data, "MaintainerContactor")
        this.utilToKey(key, "venderId", data, "dpMaintainerId")
      }
      tools.setItem(this.deviceType.code, this.main)
    },

    utilToKey(key, name, data, messName) {
      if (key == name) {
        this.setDataToMain(data[key], messName, this.row)
      }
    },

    //上传文件弹窗触发事件
    fileChange(keys) {
      this.setDataToMain(keys[0], this.messKey.split(".")[1], this.row)
      tools.setItem(this.deviceType.code, this.main)
    },

    //上传图片弹窗触发事件
    imgChange(keys) {
      this.setDataToMain(keys[0], this.messKey.split(".")[1], this.row)
      tools.setItem(this.deviceType.code, this.main)
    },

    //设备图片弹窗改变事件
    changePics(keys) {
      this.setDataToMain(keys, this.messKey.split(".")[1], this.row)
      tools.setItem(this.deviceType.code, this.main)
      console.log("assets", keys)
    },

    //判断是否有值，有值赋值
    setDataToMain(data, key, row) {
      if (!!data && data != '--') {
        if (!!this.main[row].infos) {
          //铭牌照片特殊处理
          if (key == 'Nameplate') {
            this.main[row].infos[key] = {
              "systemId": "dataPlatform",
              "name": "铭牌照片",
              "type": "image",
              "key": data
            }
          } else {
            this.main[row].infos[key] = data
          }
        } else {
          this.main[row].infos = {}
          if (key == 'Nameplate') {
            this.main[row].infos[key] = {
              "systemId": "dataPlatform",
              "name": "铭牌照片",
              "type": "image",
              "key": data
            }
          } else {
            this.main[row].infos[key] = data
          }
        }
      } else {
        this.main[row].infos[key] = ''
      }
    }
  },
  watch: {
    dialog: {
      deep: true,
      handler(newName, oldName) {
        // this.getData()
        console.log(this.dialog)
        if (this.dialog.addDevice) {
          this.getData()
        }
      },
    }
  }
};
</script>
<style lang="less" scoped>
#addDevice {
  overflow: hidden;
}
</style>
