<template>
  <el-dialog :title="baseListData.description" :close-on-click-modal="false"  :close-on-press-escape="false" @close="closeDialog" :visible.sync="visible" width="685px" v-drag>
    <el-form label-position="top" inline="inline" size="mini" label-width="120px">
      <el-form-item :label="baseListData.caption1" v-if="baseListData.caption1 != '' && baseListData.caption1 != null">
        <el-input v-model="param1"></el-input>
      </el-form-item>
      <el-form-item :label="baseListData.caption2" v-if="baseListData.caption2 != '' && baseListData.caption2 != null">
        <el-input v-model="param2"></el-input>
      </el-form-item>
      <el-form-item :label="baseListData.caption3" v-if="baseListData.caption3 != '' && baseListData.caption3 != null">
        <el-input v-model="param3"></el-input>
      </el-form-item>
      <el-form-item :label="baseListData.caption4" v-if="baseListData.caption4 != '' && baseListData.caption4 != null">
        <el-input v-model="param4"></el-input>
      </el-form-item>
      <el-form-item :label="baseListData.caption5" v-if="baseListData.caption5 != '' && baseListData.caption5 != null">
        <el-input v-model="param5"></el-input>
      </el-form-item>
      <el-form-item :label="baseListData.caption6" v-if="baseListData.caption6 != '' && baseListData.caption6 != null ">
        <el-select v-model="param6" style="width: 120px">
          <el-option label="全部" value=""></el-option>
          <el-option label="在用" value="Y"></el-option>
          <el-option label="不在用" value="N"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item :label="baseListData.caption7" v-if="baseListData.caption7 != '' && baseListData.caption7 != null">
        <el-input v-model="param7"></el-input>
      </el-form-item>
      <el-button style="margin-top: 18px" type="primary" @click="getDataList(false)">查询
      </el-button>
    </el-form>

    <el-table
      :height="height"
      :data="dataList"
      border
      @row-dblclick="getRowData"
      v-loading="dataListLoading"
      style="width: 100%;">
      <el-table-column
        v-for="(item,index) in columnList" :key="index"
        :sortable="item.columnSortable"
        :prop="item.columnProp"
        :header-align="item.headerAlign"
        :show-overflow-tooltip="item.showOverflowTooltip"
        :align="item.align"
        :fixed="item.fixed==''?false:item.fixed"
        :min-width="item.columnWidth"
        :label="item.columnLabel">
        <template slot-scope="scope">
          {{ scope.row[item.columnProp] }}
        </template>
      </el-table-column>
    </el-table>

    <span slot="footer" class="dialog-footer">
      <el-button @click="visible = false" type="primary">关闭</el-button>
    </span>
  </el-dialog>

</template>

<script>


import {
  getChooselistEam,
  getChooselistDataEam,
} from "@/api/chooselist/chooselist.js"

export default {
  data() {
    return {
      height: 200,
      tagNo: '',
      title: '列表',
      columnList: [],
      queryTable: {},
      visible: false,
      dataListLoading: true,
      fullscreenLoading: false,
      param1: '',
      param2: '',
      param3: '',
      param4: '',
      param5: '',
      param6: '',
      param7: this.$store.state.user.name,
      param: '',
      conSql: '',
      dataList: [],
      baseListData: {
        caption1: '',
        caption2: '',
        caption3: '',
        caption4: '',
        caption5: '',
        caption6: '',
        caption7: '',
        description: '',
        fieldname1: '',
        fieldname2: '',
        fieldname3: '',
        fieldname4: '',
        fieldname5: '',
        fieldname6: '',
        sqlcode: '',
        tagno: '',
      },
      defaultParam: false
    }
  },
  methods: {

    // 获取 用户的配置
    init (tagNo, param, conSql) {
      this.tagNo = tagNo
      this.visible = true
      this.param = param
      this.conSql = conSql ? conSql : ''
      // 根据 tagNo 获取列表
      getChooselistEam({"tagNo": tagNo}).then(({data}) => {
        this.columnList = []
        this.baseListData = data.data
        let start = data.data.sqlcode.toUpperCase().indexOf("Select".toUpperCase())
        let end = data.data.sqlcode.toUpperCase().indexOf("from".toUpperCase())
        let length = end - start
        let columns = data.data.sqlcode.trim().substring(start + 6, length).trim()
        let props = columns.split(",")
        props.forEach((item, index) => {
          let name = '信息列'
          switch (index) {
            case 0:
              name = this.baseListData.caption1
              break;
            case 1:
              name = this.baseListData.caption2
              break;
            case 2:
              name = this.baseListData.caption3
              break;
            case 3:
              name = this.baseListData.caption4
              break;
            case 4:
              name = this.baseListData.caption5
              break;
            case 5:
              name = this.baseListData.caption6
              break;
            case 6:
              name = this.baseListData.caption7
              break;
          }
          let index1 = item.indexOf(" as ")
          let index2 = item.indexOf(".")
          let l = item.length
          let prop = item
          if (index1 > 0) {
            prop = item.substring(index1 + 3, l).trim()
          }
          if (index1 < 0 && index2 > 0) {
            prop = item.substring(index2 + 1, l)
          }
          let column = {
            "columnProp": prop.trim(),
            "columnLabel": name,
            "columnHidden": false,
            "columnImage": false,
            "columnSortable": false,
            "columnWidth": null,
            "format": null,
            "sortLv": index,
            "status": true,
            "fixed": false,
            "serialNumber": null,
            "columnType": null,
            "align": null
          }
          this.columnList.push(column)
        })
        this.getDataList(true)
      })
      this.dataListLoading = false
    },

    getDataList (bool) {
      let sql = this.baseListData.sqlcode
      if (bool) {
        sql += " and (" + this.baseListData.fieldname1 + " like '%" + this.param + "%' OR " + this.baseListData.fieldname2 + " like '%" + this.param + "%'" + " ) "
      }
      if (this.param1) {
        sql += " and " + this.baseListData.fieldname1 + " like '%" + this.param1 + "%'"
      }
      if (this.param2) {
        sql += " and " + this.baseListData.fieldname2 + " like '%" + this.param2 + "%'"
      }
      if (this.param3) {
        sql += " and " + this.baseListData.fieldname3 + " like '%" + this.param3 + "%'"
      }
      if (this.param4) {
        sql += " and " + this.baseListData.fieldname4 + " like '%" + this.param4 + "%'"
      }
      if (this.param5) {
        sql += " and " + this.baseListData.fieldname5 + " like '%" + this.param5 + "%'"
      }
      if (this.param6 ) {
        sql += " and active like '%" + this.param6 + "%'"
      }
      if (this.tagNo <= 500 && this.tagNo !== 93) {
        if (this.param7) {
          sql += " and site in (select site from eam_access_site where username = '" + this.param7 + "') " + " and (site + '-' + bu_no) in (select (a.site + '-' + a.bu_no) from AccessBu as a left join eam_access_site as b on a.site = b.site and a.username = b.username where a.username = '" + this.param7 + "')"
        }
      }
      if (this.tagNo > 500 && this.tagNo < 1000) {
        if (this.param7) {
          sql += " and site in (select site from eam_access_site where username = '" + this.param7 + "') "
        }
      }
      sql += this.conSql
      getChooselistDataEam({"sqlcode": sql}).then(({data}) => {
        if (data.code == 0) {
          this.dataList = data.baseListData;
        } else {
          this.$message.error(data.msg)
        }
      })
    },

    getRowData (row) {
      this.visible = false
      this.$emit('getBaseData',row)
    },

    closeDialog () {
      this.param1 = ''
      this.param2 = ''
      this.param3 = ''
      this.param4 = ''
      this.param5 = ''
      this.param6 = ''
      this.param7 = this.$store.state.user.name
      this.param = ''
    }
  }
}
</script>
<style>


</style>
