<template>
  <div id="main" class="h-all">
    <el-container class="h-all">
      <el-header height="auto">
        <div class="header-button-box">
          <el-button size='mini' icon="el-icon-circle-plus-outline" type="primary"
                     v-if="createAndCopyCommand.visible"
                     @click="createIndexTemplateInit">
            {{$t("common.createBtn")}}
          </el-button>
          <el-button size='mini' icon="el-icon-delete" type="danger"
                     v-if="deleteCommand.visible"
                     @click="deleteIndexTemplateInitEL">{{$t("common.deleteBtn")}}
          </el-button>
          <div class="search">
            <div class="search-div">
              <label>{{$t('IndexTemplate.indexTemplateName')}}:</label>
              <el-input size='mini' :placeholder="$t('common.placeholder')"
                        v-model="queryIndexTemplateName"
                        style="width: 180px"
                        clearable>
              </el-input>
            </div>
            <div class="search-div">
              <label>{{$t('IndexTemplate.deviceModel')}}:</label>
              <el-select v-model="queryDeviceModel" size="mini" :placeholder="$t('common.selectOption')" :clearable="true">
                <el-option
                  v-for="item in deviceModelList"
                  :key="item.deviceModelKey"
                  :label="item.deviceModel"
                  :value="item.deviceModel">
                </el-option>
              </el-select>
            </div>
            <div class="search-div">
              <el-button icon="el-icon-search" type="primary" size = 'mini' @click="queryIndexTemplateByCondition">{{$t('common.queryBtn')}}</el-button>
            </div>
          </div>
        </div>
      </el-header>
      <!-- table数据表格 -->
      <el-main class="adapt-height-box">
        <el-table
          :empty-text="$t('common.noData')"
          tooltip-effect="dark"
          ref="singleTable"
          :span-method="cellMerge"
          :data="indexTemplateColl"
          stripe
          header-row-class-name="table-header"
          cell-class-name="table-cell"
          class="adapt-height"
          height="auto"
          border
          @selection-change="handleSelectionChange">
          <el-table-column
            type="selection"
            width="28">
          </el-table-column>
          <el-table-column
            prop="performTemplateName"
            :label="$t('IndexTemplate.indexTemplateName')">
          </el-table-column>
          <el-table-column
            prop="description"
            :label="$t('IndexTemplate.description')">
          </el-table-column>
          <el-table-column
            prop="deviceType"
            :label="$t('IndexTemplate.deviceType')">
          </el-table-column>
          <el-table-column
            prop="deviceModel"
            :label="$t('IndexTemplate.deviceModel')">
          </el-table-column>
          <el-table-column
            prop="performName"
            :label="$t('IndexTemplate.index')"
            :show-overflow-tooltip="true">
          </el-table-column>
          <el-table-column
            width="105px"
            v-if="updateCommand.visible"
            :label="$t('common.operation')">
            <template slot-scope="scope">
              <el-button
                size="mini"
                style="background: #175BE3"
                :title="$t('common.copyBtn')"
                @click="handleCopy(scope.row)">
                <svg class="icon" aria-hidden="true">
                  <use xlink:href="#icon-fuzhi"></use>
                </svg>
              </el-button>
              <el-button
                size="mini"
                style="background: #008000"
                :title="$t('common.updateBtn')"
                @click="handleUpdate(scope.row)">
                <svg class="icon" aria-hidden="true">
                  <use xlink:href="#icon-bianji"></use>
                </svg>
              </el-button>
            </template>
          </el-table-column>
        </el-table>
      </el-main>
    </el-container>
    <CommandExecuteContext v-bind:commands="commandContext"></CommandExecuteContext>
  </div>
</template>

<script>
import CommandExecuteContext from '../../commands/CommandExecuteContext'
import IndexTemplateCommands from '../../commands/IndexTemplateCommands'
import IndexTeplateService from '../../domain/services/IndexTeplateService'
import DeviceService from '@/domain/services/DeviceService'
import HelperUtil from '../../utils/HelperUtil'
import loading from '../../utils/Loading'

export default {
  name: 'IndexTemplate',

  components: {
    CommandExecuteContext
  },
  data: function () {
    return {
      // 命令
      commandContext: {},
      // 为修改传参数
      multipleSelection: [],
      createAndCopyInitList: {},
      deleteList: [],
      copyInitList: {},
      updateInitList: {},

      queryIndexTemplateName: '',
      queryDeviceModel: '',
      selectList: [],
      deviceModelList: [],
      spanArr: [],
      pos: 0,

      IndexTemplateArray: [],

      // 双向绑定展示数据
      indexTemplateList0: [],
      indexTemplateList: [],
      indexTemplateColl: [],
    }
  },

  computed: {
    createAndCopyCommand () {
      return IndexTemplateCommands.createAndCopyCommand(this.createAndCopyTitle, this.createAndCopyInitList, this.commandContext)
    },
    copyCommand () {
      return IndexTemplateCommands.copyCommand(this.copyInitList, this.commandContext)
    },
    deleteCommand () {
      return IndexTemplateCommands.deleteIndexTemplateCommand(this.deleteList, this.commandContext)
    },
    updateCommand () {
      return IndexTemplateCommands.updateIndexTemplateCommand(this.updateInitList, this.commandContext)
    }
  },
  created: function () {
    if (this.$route.query.performTemplateName != null) {
      this.queryIndexTemplateName = this.$route.query.performTemplateName
      this.TurnFromCollectTask(this.$route.query.performTemplateName)
    }
    if (this.$route.query.performTemplateName == null) {
      this.getAllIndexTemplate()
      // this.queryInit()
    }
    this.getAllDeviceModel()
  },
  methods: {
    /**
     * @Description  : 跳转查询
     * @author       : ls
     * @date         : 2020/4/29 14:09
     * @param        :
     * @return       :
     */
    TurnFromCollectTask: function (val) {
      let _this = this
      _this.selectList = []
      _this.selectList.push({
        quaryAttribute: 'performTemplateName',
        compareSymbol: 'like',
        compareValue: val
      })
      IndexTeplateService.queryIndexTemplate(_this.selectList).then(result => {
        _this.indexTemplateList0 = result
        _this.indexTemplateList = Object.values(result)
        if (_this.indexTemplateList.length === 0) {
          this.InfoTip.warningTip(_this, HelperUtil.getCheckStatusCodeObjectByCode(_this.successCode.QUERY_NULL_CODE))
        } else {
          this.handleIndexTemplateList()
          this.InfoTip.successTip(_this, HelperUtil.getStatusCodeObjectByCode(_this.successCode.QUERY_CODE))
        }
      }).catch(err => {
        this.InfoTip.errorTip(_this, err)
      })
    },
    /**
     * @Description  : 复制
     * @author       : ls
     * @date         : 2020/5/25 11:53
     * @param        :
     * @return       :
     */
    copyDeviceInit: function (val) {
      this.copyInitList = val
      this.copyCommand.execute()
    },
    /**
     * @Description  : 修改
     * @author       : ls
     * @date         : 2020/5/25 11:54
     * @param        :
     * @return       :
     */
    updateDeviceInit: function (val) {
      this.updateInitList = val
      this.updateCommand.execute()
    },
    /**
     * @Description  : fuzhi
     * @author       : ls
     * @date         : 2020/4/27 10:54
     * @param        :
     * @return       :
     */
    handleCopy: function (row) {
      this.copyInitList = this.indexTemplateList0[row.performTemplateKey]
      this.copyCommand.execute()
    },
    /**
     * @Description  : xiugai
     * @author       : ls
     * @date         : 2020/4/27 10:55
     * @param        :
     * @return       :
     */
    handleUpdate: function (row) {
      this.updateInitList = this.indexTemplateList0[row.performTemplateKey]
      this.updateCommand.execute()
    },
    /**
     * @Description  : 合并判断
     * @author       : ls
     * @date         : 2020/4/27 10:32
     * @param        :
     * @return       :
     */
    cellMerge ({ rowIndex, columnIndex }) {
      if (columnIndex === 0 || columnIndex === 1 || columnIndex === 2 || columnIndex === 6) {
        const _row = this.spanArr[rowIndex]
        const _col = _row > 0 ? 1 : 0
        return {
          rowspan: _row,
          colspan: _col
        }
      }
    },
    /**
     * @Description  : 合并判断
     * @author       : ls
     * @date         : 2020/4/27 10:30
     * @param        :
     * @return       :
     */
    getSpanArr (data) {
      this.spanArr = []
      for (var i = 0; i < data.length; i++) {
        if (i === 0) {
          this.spanArr.push(1)
          this.pos = 0
        } else {
          if (data[i].performTemplateKey === data[i - 1].performTemplateKey) {
            this.spanArr[this.pos] += 1
            this.spanArr.push(0)
          } else {
            this.spanArr.push(1)
            this.pos = i
          }
        }
      }
    },
    /**
     * @Description  : shezhitiaojian
     * @author       : ls
     * @date         : 2020/4/27 10:05
     * @param        :
     * @return       :
     */
    setSelectList: function () {
      this.selectList = []
      if (this.queryDeviceModel !== null && this.queryDeviceModel !== '') {
        this.selectList.push({
          quaryAttribute: 'deviceModel',
          compareSymbol: '=',
          compareValue: this.queryDeviceModel
        })
      }
      if (this.queryIndexTemplateName !== '' && this.queryIndexTemplateName !== null) {
        this.selectList.push({
          quaryAttribute: 'performTemplateName',
          compareSymbol: 'like',
          compareValue: this.queryIndexTemplateName
        })
      }
    },
    /**
     * @Description  : 查询
     * @author       : ls
     * @date         : 2020/6/10 15:50
     * @param        :
     * @return       :
     */
    queryInit: function () {
      this.beginItem = 1
      this.setSelectList()
      let _this = this
      let loadingInstance = _this.Loading.openLoading()
      IndexTeplateService.getIndexTemplateTotalCounts(this.selectList).then(result => {
        _this.total = result
        _this.Loading.closeLoading(loadingInstance)
        if (this.total === 0 || this.total < 0) {
          _this.indexTemplateColl = []
        } else {
          if (this.total < 100 && this.total > 0) {
            this.endItem = this.total
          } else {
            this.endItem = 100
          }
          this.queryIndexTemplateDataByConditionCurrentPage()
        }
      }).catch(err => {
        _this.Loading.closeLoading(loadingInstance)
        _this.InfoTip.errorTip(_this, err)
      })
    },
    /**
     * @Description  : 分页
     * @author       : ls
     * @date         : 2020/6/10 15:58
     * @param        :
     * @return       :
     */
    queryIndexTemplateDataByConditionCurrentPage: function () {
      let _this = this
      let loadingInstance = _this.Loading.openLoading()
      IndexTeplateService.queryIndexTemplateListPaging(this.beginItem, this.endItem, this.selectList).then(result => {
        _this.indexTemplateList0 = result
        _this.indexTemplateList = Object.values(result)
        if (_this.indexTemplateList.length === 0) {
          _this.Loading.closeLoading(loadingInstance)
        } else {
          this.handleIndexTemplateList()
          _this.Loading.closeLoading(loadingInstance)
        }
      }).catch(err => {
        _this.Loading.closeLoading(loadingInstance)
        _this.InfoTip.errorTip(_this, err)
      })
    },
    /**
     * @Description  : 条件查询
     * @author       : ls
     * @date         : 2020/6/10 16:22
     * @param        :
     * @return       :
     */
    queryIndexTemplateByCondition1: function () {
      this.beginItem = 1
      this.setSelectList()
      this.IndexTemplateDataTotalNumber()
    },
    /**
     * @Description  :
     * @author       : ls
     * @date         : 2020/6/10 16:26
     * @param        :
     * @return       :
     */
    IndexTemplateDataTotalNumber: function () {
      let _this = this
      let loadingInstance = _this.Loading.openLoading()
      IndexTeplateService.getIndexTemplateTotalCounts(_this.selectList).then(result => {
        _this.total = result
        _this.Loading.closeLoading(loadingInstance)
        if (_this.total === 0 || _this.total < 0) {
          _this.InfoTip.warningTip_alarm(_this, HelperUtil.getCheckStatusCodeObjectByCode(_this.successCode.QUERY_NULL_CODE))
          _this.indexTemplateColl = []
        } else {
          if (_this.total < 100 && _this.total > 0) {
            _this.endItem = _this.total
          } else {
            _this.endItem = 100
          }
          _this.InfoTip.successTip(_this, HelperUtil.getCheckStatusCodeObjectByCode(_this.successCode.QUERY_CODE))
          _this.queryIndexTemplateDataByConditionCurrentPage()
        }
      }).catch(err => {
        _this.Loading.closeLoading(loadingInstance)
        _this.InfoTip.errorTip(_this, err)
      })
    },
    /**
     * @Description  : chaxun
     * @author       : ls
     * @date         : 2020/4/27 10:04
     * @param        :
     * @return       :
     */
    queryIndexTemplateByCondition: function () {
      let _this = this
      _this.setSelectList()
      let loadingInstance = _this.Loading.openLoading()
      IndexTeplateService.queryIndexTemplate(_this.selectList).then(result => {
        _this.indexTemplateList0 = result
        _this.indexTemplateList = Object.values(result)
        if (_this.indexTemplateList.length === 0) {
          _this.Loading.closeLoading(loadingInstance)
          this.InfoTip.warningTip(_this, HelperUtil.getCheckStatusCodeObjectByCode(_this.successCode.QUERY_NULL_CODE))
        } else {
          this.handleIndexTemplateList()
          _this.Loading.closeLoading(loadingInstance)
          this.InfoTip.successTip(_this, HelperUtil.getStatusCodeObjectByCode(_this.successCode.QUERY_CODE))
        }
      }).catch(err => {
        this.Loading.closeLoading(loadingInstance)
        this.InfoTip.errorTip(_this, err)
      })
    },
    /**
     * @Description  : 获取网元型号
     * @author       : ls
     * @date         : 2020/4/27 9:57
     * @param        :
     * @return       :
     */
    getAllDeviceModel: function () {
      let _this = this
      DeviceService.getAllDeviceModelCollection().then(result => {
        _this.deviceModelList = Object.values(result)
      }).catch(err => {
        _this.InfoTip.errorTip(_this, err)
      })
    },
    /**
     * @Description  : huoqusuoyou
     * @author       : ls
     * @date         : 2020/4/27 9:36
     * @param        :
     * @return       :
     */
    getAllIndexTemplate: function () {
      let _this = this
      let loadingInstance = loading.openLoading()
      IndexTeplateService.getAllIndexTemplateCollection().then(result => {
        if (JSON.stringify(result) === '{}') {
          this.indexTemplateColl = []
          loadingInstance.close()
        } else {
          _this.indexTemplateList0 = result
          _this.indexTemplateList = Object.values(result)
          if (_this.indexTemplateList.length === 0) {
            // this.InfoTip.warningTip(_this, HelperUtil.getCheckStatusCodeObjectByCode(_this.successCode.QUERY_NULL_CODE))
            loadingInstance.close()
          } else {
            this.handleIndexTemplateList()
            // this.InfoTip.successTip(_this, HelperUtil.getStatusCodeObjectByCode(_this.successCode.QUERY_CODE))
            loadingInstance.close()
          }
        }
      }).catch(err => {
        this.InfoTip.errorTip(this, err)
        loadingInstance.close()
      })
    },
    /**
     * @Description  : 处理数据
     * @author       : ls
     * @date         : 2020/5/28 12:57
     * @param        :
     * @return       :
     */
    handleIndexTemplateList: function () {
      this.indexTemplateColl = []
      for (let t in this.indexTemplateList) {
        for (let k in this.indexTemplateList[t].unitList) {
          this.indexTemplateColl.push(
            {
              performTemplateKey: this.indexTemplateList[t].performTemplateKey,
              performTemplateName: this.indexTemplateList[t].performTemplateName,
              description: this.indexTemplateList[t].description,
              deviceModel: this.indexTemplateList[t].unitList[k].deviceModel,
              deviceTypeKey: this.indexTemplateList[t].unitList[k].deviceTypeKey,
              deviceType: this.indexTemplateList[t].unitList[k].deviceType,
              deviceParam: this.indexTemplateList[t].unitList[k].deviceParam,
              performName: this.indexTemplateList[t].unitList[k].performName,
              performTemplateUnitID: this.indexTemplateList[t].unitList[k].performTemplateUnitID
            }
          )
        }
      }
      this.getSpanArr(this.indexTemplateColl)
    },
    /**
     * @Description  : chuanjian
     * @author       : ls
     * @date         : 2020/4/26 15:01
     * @param        :
     * @return       :
     */
    createIndexTemplateInit () {
      this.createAndCopyTitle = this.$t('IndexTemplateCommands.createIndexTemplate')
      this.createAndCopyCommand.execute()
    },
    deleteIndexTemplateInitEL () {
      if (this.multipleSelection.length === 0) {
        this.InfoTip.warningTip(this, HelperUtil.getCheckStatusCodeObjectByCode(this.successCode.DELETE_SELECT_CODE))
      } else {
        this.deleteList = []
        for (var i = 0; i < this.multipleSelection.length; i++) {
          this.deleteList.push(this.multipleSelection[i].performTemplateKey)
        }
        this.deleteCommand.execute()
      }
    },
    /* ---------------------------Table选择--------------------------- */

    /**
     * @Description  : fuzhi
     * @author       : ls
     * @date         : 2020/4/29 18:12
     * @param        :
     * @return       :
     */
    handleSelectionChange (val) {
      this.multipleSelection = val
    }
  },

  watch: {
    '$route' (to) {
      if (to.name === '指标模板管理' && to.query.performTemplateName !== undefined) {
        this.queryIndexTemplateName = to.query.performTemplateName
        this.TurnFromCollectTask(to.query.performTemplateName)
      }
    },
    commandContext (newVal, oldVal) {
      if (JSON.stringify(newVal) === '{}') {
        this.getAllIndexTemplate()
        // this.queryInit()
        this.queryIndexTemplateName = ''
        this.queryDeviceModel = ''
      }
      deep: true
    }
  }
}
</script>

<style scoped>
  table{
    width: 100%;
    border:1px solid #e9eaec;
    border-collapse:collapse
  }
  th{
    background:#eef1f6;
    color:#606266
  }
  th,td{
    border: 1px solid #e9eaec;
    text-align: left;
    padding-left: 10px;
    vertical-align: center;
    line-height: 31px;
  }
  /*tr:hover{*/
  /*  background-color: #409EFF;*/
  /*}*/
</style>