<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-upload2" type="success"
                     @click="importToExcelInit"
                     v-if="deleteLinkCommand.visible">
            {{$t("common.importBtn")}}
          </el-button>
          <el-button size='mini' icon="el-icon-download" type="success" @click="exportToExcelInit">
            {{$t("common.exportBtn")}}
          </el-button>
          <el-button size='mini' icon="el-icon-circle-plus-outline" type="primary"
                     v-if="deleteLinkCommand.visible"
                     @click="createLinkInit">
            {{$t("common.createBtn")}}
          </el-button>
          <el-button size='mini' icon="el-icon-delete" type="danger"
                     v-if="deleteLinkCommand.visible"
                     @click="deleteLinkInit">
            {{$t("common.deleteBtn")}}
          </el-button>
          <div class="search">
            <div class="search-input-box">
              <label>{{ $t('LinkConfigurationManagement.linkName') }}：</label>
              <el-input size='mini' :placeholder="$t('common.placeholder')"
                        style="width: 180px"
                        v-model="queryLinkNameInput"
                        clearable>
              </el-input>
            </div>
            <div class="search-input-box">
              <label>{{ $t('LinkConfigurationManagement.startNodeName') }}：</label>
              <el-select size="mini" v-model="queryStartNodeNameInput"
                         :placeholder="$t('LinkConfigurationManagement.selectStartDevicePlaceholder')"
                         :clearable="true">
                <el-option
                  v-for="item in deviceList"
                  :key="item.deviceKey"
                  :label="item.displayName"
                  :value="item.deviceKey"></el-option>
              </el-select>
            </div>
            <div class="search-input-box">
              <label>{{ $t('LinkConfigurationManagement.endNodeName') }}：</label>
              <el-select size="mini" v-model="queryEndNodeNameInput"
                         :placeholder="$t('LinkConfigurationManagement.selectStartDevicePlaceholder')"
                         :clearable="true">
                <el-option
                  v-for="item in deviceList"
                  :key="item.deviceKey"
                  :label="item.displayName"
                  :value="item.deviceKey"></el-option>
              </el-select>
            </div>
            <el-button icon="el-icon-search" type="primary" size='mini' @click="queryLinkDataByCondition"
                       v-loading.fullscreen.lock="fullscreenLoading">{{ $t('common.queryBtn')}}
            </el-button>
          </div>
        </div>
      </el-header>
      <el-main class="adapt-height-box">
        <el-table
          :empty-text="$t('common.noData')"
          header-row-class-name="table-header"
          cell-class-name="table-cell"
          class="adapt-height"
          height="auto"
          border
          ref="singleTable"
          :data="linkList"
          stripe
          tooltip-effect="dark"
          @selection-change="handleSelectionChange">
          <el-table-column
            type="selection"
            width="28">
          </el-table-column>
          <el-table-column
            prop="linkKey"
            v-if="false"
            :label="$t('LinkConfigurationManagement.linkId')">
          </el-table-column>
          <el-table-column
            prop="linkName"
            :label="$t('LinkConfigurationManagement.linkName')"
            :show-overflow-tooltip="true">
          </el-table-column>
          <el-table-column
            prop="startDeviceName"
            :label="$t('LinkConfigurationManagement.startDeviceName')"
            :show-overflow-tooltip="true">
          </el-table-column>
          <el-table-column
            prop="startPortName"
            width="150"
            :label="$t('LinkConfigurationManagement.startDevicePort')"
            :show-overflow-tooltip="true">
          </el-table-column>
          <el-table-column
            prop="endDeviceName"
            :label="$t('LinkConfigurationManagement.endDeviceName')"
            :show-overflow-tooltip="true">
          </el-table-column>
          <el-table-column
            prop="endPortName"
            :label="$t('LinkConfigurationManagement.endDevicePort')"
            :show-overflow-tooltip="true">
          </el-table-column>
          <el-table-column
            width="105px"
            v-if="updateLinkCommand.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="updateLinkInit(scope.row)">
                <svg class="icon" aria-hidden="true">
                  <use xlink:href="#icon-bianji"></use>
                </svg>
              </el-button>
            </template>
          </el-table-column>
<!--          <el-table-column-->
<!--            prop="startGroupID"-->
<!--            :label="$t('LinkConfigurationManagement.startGroupID')"-->
<!--            :show-overflow-tooltip="true">-->
<!--          </el-table-column>-->
<!--          <el-table-column-->
<!--          prop="endGroupID"-->
<!--          :label="$t('LinkConfigurationManagement.endGroupID')"-->
<!--          :show-overflow-tooltip="true">-->
<!--          </el-table-column>-->
<!--          <el-table-column-->
<!--          prop="linkStatus"-->
<!--          :formatter="formatLinkStatus"-->
<!--          :label="$t('LinkConfigurationManagement.linkStatus')"-->
<!--          :show-overflow-tooltip="true">-->
<!--          </el-table-column>-->
        </el-table>
        <el-pagination
          background
          @current-change="handleCurrentChange"
          :current-page.sync="currentPage"
          :page-size="pageSize"
          layout="total, prev, pager, next, jumper"
          :total="total">
        </el-pagination>
      </el-main>
    </el-container>

    <CommandExecuteContext v-bind:commands="commandContext"></CommandExecuteContext>

  </div>
</template>

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

export default {
  name: 'LinkConfigurationManagement',

  components: {
    CommandExecuteContext
  },
  computed: {

    importCommand () {
      return DeviceCommands.importLinkCommand(this.commandContext)
    },
    createAndCopyCommand () {
      return DeviceCommands.createAndCopyLinkCommand(this.createAndCopyTitle, this.createAndCopyInitList, this.commandContext)
    },
    deleteLinkCommand () {
      return DeviceCommands.deleteLinkCommand(this.deleteList, this.commandContext)
    },
    updateLinkCommand () {
      return DeviceCommands.updateLinkCommand(this.updateInitList, this.commandContext)
    }

  },
  // 存放 数据
  data: function () {
    return {

      // 命令
      commandContext: {},

      // 为了创建复制初始化传参
      createAndCopyInitList: [],
      createAndCopyTitle: '',

      // 删除相关
      deleteList: [],
      selectList: [],

      // 为修改传参数
      updateInitList: [],

      // 条件查询输入框
      queryLinkNameInput: '',
      queryStartNodeNameInput: '',
      queryEndNodeNameInput: '',
      // 表格宽度
      formLabelWidth: '120px',
      beginItem: 1,
      endItem: 100,
      total: 100,
      currentPage: 1,
      pageSize: 100,
      // 获取设备信息时的表格内容
      linkList: [],
      deviceList: [],
      multipleSelection: [],
      fullscreenLoading: false
    }
  },
  // 存放 方法
  methods: {
    /**
     * @Description  : 存值
     * @author       : ls
     * @date         : 2020/6/24 9:46
     * @param        :
     * @return       :
     */
    handleSelectionChange (val) {
      this.multipleSelection = val
    },
    /**
     * @Description  : 获取链路
     * @author       : ls
     * @date         : 2020/6/24 9:49
     * @param        :
     * @return       :
     */
    queryLink: function () {
      this.beginItem = 1
      this.setSelectList()
      let _this = this
      let loadingInstance = _this.Loading.openLoading()
      LinkService.queryLinkTotalNumber(_this.selectList).then(result => {
        _this.Loading.closeLoading(loadingInstance)
        _this.total = result
        if (_this.total === 0 || _this.total < 0) {
          _this.deviceList = []
        } else {
          if (_this.total < 100 && _this.total > 0) {
            _this.endItem = _this.total
          } else {
            _this.endItem = 100
          }
          _this.linkByConditionCurrentPage()
        }
      }).catch(err => {
        _this.endItem = 100
        _this.Loading.closeLoading(loadingInstance)
        _this.InfoTip.errorTip(_this, err)
      })
    },
    /**
     * @Description  : 分页查询
     * @author       : ls
     * @date         : 2020/6/24 9:53
     * @param        :
     * @return       :
     */
    linkByConditionCurrentPage: function () {
      let _this = this
      let loadingInstance = _this.Loading.openLoading()
      LinkService.queryLinkDataSplitNumber(this.beginItem, this.endItem, this.selectList).then(result => {
        // 成功
        _this.linkList = Object.values(result)
        _this.Loading.closeLoading(loadingInstance)
      }).catch(err => {
        // 失败
        _this.Loading.closeLoading(loadingInstance)
        _this.InfoTip.errorTip(_this, err)
      })
    },
    /**
     * @Description  : 变化
     * @author       : ls
     * @date         : 2020/6/24 10:03
     * @param        :
     * @return       :
     */
    handleCurrentChange (val) {
      this.currentPage = val
      this.beginItem = ((val - 1) * 100) + 1
      this.endItem = this.beginItem + 99
      if (this.endItem > this.total) {
        this.endItem = this.total
      }
      this.LinkByConditionCurrentPage()
    },
    /**
     * @Description  : 条件查询
     * @author       : ls
     * @date         : 2020/6/24 10:08
     * @param        :
     * @return       :
     */
    queryLinkDataByCondition: function () {
      this.beginItem = 1
      this.setSelectList()
      this.queryLinkTotalNumber()
    },
    /**
     * @Description  : 条件查询
     * @author       : ls
     * @date         : 2020/6/24 10:11
     * @param        :
     * @return       :
     */
    queryLinkTotalNumber: function () {
      let _this = this
      let loadingInstance = _this.Loading.openLoading()
      LinkService.queryLinkTotalNumber(_this.selectList).then(result => {
        _this.Loading.closeLoading(loadingInstance)
        _this.total = result
        if (_this.total === 0 || _this.total < 0) {
          _this.linkList = []
          _this.InfoTip.warningTip_alarm(_this, HelperUtil.getCheckStatusCodeObjectByCode(_this.successCode.QUERY_NULL_CODE))
        } else {
          if (_this.total < 100 && _this.total > 0) {
            _this.endItem = _this.total
          } else {
            _this.endItem = 100
          }
          _this.InfoTip.successTip(_this, HelperUtil.getStatusCodeObjectByCode(_this.successCode.QUERY_CODE))
          _this.linkByConditionCurrentPage()
        }
      }).catch(err => {
        _this.endItem = 100
        _this.Loading.closeLoading(loadingInstance)
        _this.InfoTip.errorTip(_this, err)
      })
    },
    /**
     * @Description  : 获取链路
     * @author       : ls
     * @date         : 2020/6/24 9:46
     * @param        :
     * @return       :
     */
    getAllLinkInit: function () {
      let _this = this
      let loadingInstance = loading.openLoading()
      LinkService.getAllLinkCollection().then(result => {
        // 成功
        _this.linkList = Object.values(result)
        loadingInstance.close()
      }).catch(err => {
        // 失败
        loadingInstance.close()
        this.InfoTip.errorTip(this, err)
      })
    },
    getAllLink: function (vue) {
      console.log('获取全部链路信息：')
      // 为了测试其他先注释了
      let loadingInstance = loading.openLoading()
      LinkService.getAllLinkCollection().then(result => {
        // 成功
        vue.linkList = Object.values(result)
        loadingInstance.close()
      }).catch(err => {
        // 失败
        loadingInstance.close()
        this.InfoTip.errorTip(this, err)
      })
    },

    /**
       * @Description  :获取全部网元信息
       * @author       ::
       * @date         :
       */
    getAllDeviceInit: function () {
      console.log('获取全部网元信息:')

      let loadingInstance = loading.openLoading()
      DeviceService.getAllDeviceCollection().then(result => {
        // 成功
        this.deviceList = Object.values(result)
        loadingInstance.close()
      }).catch(err => {
        // 失败
        loadingInstance.close()
        this.InfoTip.errorTip(this, err)
      })
    },
    /**
     * @description   : 导入
     * @author        : ls
     * @date          : 2020/6/23 19:25
     * @param         :
     * @return        :
     **/
    importToExcelInit: function () {
      this.importCommand.execute()
    },
    /**
     * @description   : 导出
     * @author        : ls
     * @date          : 2020/6/23 21:58
     * @param         :
     * @return        :
     **/
    exportToExcelInit: function () {
      let _this = this
      _this.setSelectList()
      let loadingInstance = _this.Loading.openLoading()
      LinkService.downloadLinkFile(_this.selectList).then(result => {
        _this.Loading.closeLoading(loadingInstance)
      }).catch(err => {
        _this.Loading.closeLoading(loadingInstance)
        // 失败
        _this.InfoTip.errorTip(_this, err)
      })
    },
    /**
       * @Description  ：创建链路初始化
       * @author       : bjh
       * @param        :
       * @return       :
       * @exception    :
       * @date         : 2018/12/7 13:29
       */
    createLinkInit: function () {
      this.createAndCopyTitle = this.$t('LinkConfigurationManagement.createLinkInfo')// {{$t('DeviceConfigurationManagement.copyDeviceInfo')"}}

      this.createAndCopyInitList = {
        'linkKey': '',
        'linkName': '',
        'startDeviceKey': '',
        'startPortName': '',
        'endDeviceKey': '',
        'endPortName': '',
        'linkStatus': 0,
        'linkType': 0,
        'delFlag': 0,
        'modifyTime': ''

      }
      this.createAndCopyCommand.execute()
    },
    /**
       * @Description  ：检查链路添加时，端口名称的合法性（必须是数字）
       * @author       : bjh
       * @param        :
       * @return       :
       * @exception    :
       * @date         : 2018/12/28 14:45
       */
    portNameCheck: function (text) {
      var reg = /^[0-9]*$/
      var re = new RegExp(reg)
      if (!re.test(text)) {
        return true
      } else {
        return false
      }
    },

    /**
       * @Description  ：在表格数据重新载入时，对条件查询框进行清空
       * @author       : bjh
       * @param        :
       * @return       :
       * @exception    :
       * @date         : 2019/1/10 19:03
       */
    clearQueryInput: function () {
      this.queryLinkNameInput = ''
      this.queryStartNodeNameInput = ''
      this.queryEndNodeNameInput = ''
    },

    /**
       * @Description  ：删除链路信息初始化(支持批量)
       * @author       : bjh
       * @param        :
       * @return       :
       * @exception    :
       * @date         : 2018/12/7 13:32
       */
    deleteLinkInit: function () {
      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++) {
          var obj = {'linkKey': this.multipleSelection[i]['linkKey']}
          this.deleteList.push(obj)
        }
        this.deleteLinkCommand.execute()
      }
    },
    /**
     * @description   : 条件查询
     * @author        : ls
     * @date          : 2020/6/23 22:05
     * @param         :
     * @return        :
     **/
    queryLinkByCondition: function () {
      let _this = this
      _this.setSelectList()
      let loadingInstance = _this.Loading.openLoading()
      LinkService.conditionQueryLink(_this.selectList).then(result => {
        _this.Loading.closeLoading(loadingInstance)
        _this.linkList = Object.values(result)
        _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/6/24 9:52
     * @param        :
     * @return       :
     */
    setSelectList: function () {
      this.selectList = []
      if (this.queryLinkNameInput !== '' && this.queryLinkNameInput != null) {
        this.selectList.push({
          quaryAttribute: 'linkName',
          compareSymbol: 'like',
          compareValue: this.queryLinkNameInput
        })
      }
      if (this.queryStartNodeNameInput !== '' && this.queryStartNodeNameInput != null) {
        this.selectList.push({
          quaryAttribute: 'startDeviceKey',
          compareSymbol: '=',
          compareValue: this.queryStartNodeNameInput
        })
      }
      if (this.queryEndNodeNameInput !== '' && this.queryEndNodeNameInput != null) {
        this.selectList.push({
          quaryAttribute: 'endDeviceKey',
          compareSymbol: '=',
          compareValue: this.queryEndNodeNameInput
        })
      }
    },
    /**
     * @Description  : 复制
     * @author       : ls
     * @date         : 2020/6/23 13:53
     * @param        :
     * @return       :
     */
    handleCopy: function (val) {
      this.createAndCopyTitle = this.$t('LinkConfigurationManagement.copyLinkInfo')
      this.createAndCopyInitList = val
      this.createAndCopyCommand.execute()
    },
    /**
     * @Description  :  修改链路
     * @author       : ls
     * @date         : 2020/6/23 13:50
     * @param        :
     * @return       :
     */
    updateLinkInit: function (val) {
      this.updateInitList = val
      this.updateLinkCommand.execute()
    },
    formatStartDeviceKey: function (row, column) {
      for (var j = 0; j < this.deviceList.length; j++) {
        if (row.startDeviceKey == this.deviceList[j]['deviceKey']) {
          return this.deviceList[j]['displayName']
        }
      }
    },

    formatEndDeviceKey: function (row, column) {
      for (var j = 0; j < this.deviceList.length; j++) {
        if (row.endDeviceKey == this.deviceList[j]['deviceKey']) {
          return this.deviceList[j]['displayName']
        }
      }
    },

    formatLinkStatus: function (row, colum) {
      let result = row.linkStatus
      if (row.linkStatus === 0) {
        result = this.$t('LinkConfigurationManagement.inUsing')
      }
      if (row.linkStatus === 1) {
        result = this.$t('LinkConfigurationManagement.unplaned')
      }
      if (row.linkStatus === 2) {
        result = this.$t('LinkConfigurationManagement.logicalBreak')
      }
      return result
    }
  },
  watch: {
    commandContext (newVal, oldVal) {
      if (JSON.stringify(newVal) === '{}') {
        this.queryLinkNameInput = ''
        this.queryStartNodeNameInput = ''
        this.queryEndNodeNameInput = ''
        // this.getAllLink(this)
        this.queryLink()
        this.$refs.singleTable.clearSelection()
      }
      deep: true
    }
  },
  created () {
    // this.getAllLinkInit()
    this.queryLink()
    this.getAllDeviceInit()
  }
}
</script>

<style scoped>

</style>
