<template>

  <div :style="{'overflow-y':'auto','height':htSize+'px'}">

    <el-form label-position="top" class="panel" style="text-align:left;">
      <el-form-item v-show="false" :label="$t('common.dataSource')+':'">
        <el-select v-model="selectedBase" size="mini" filterable :placeholder="$t('dataSource.sourcePlaceholder')" style="width:200px;" clearable @change="handleBaseChange">
          <el-option v-for="item in baseList" :key="item.source_id" :label="item.base_alias || item.database" :value="item.source_id" />
        </el-select>
      </el-form-item>

      <!-- 表下拉框 -->
      <!-- label看到的 key=id -->
      <el-form-item label="数据类型:">
        <el-radio-group v-model="selectedTable" @change="handleDataSrcChange">
          <el-radio-button label="trainnumber">车次</el-radio-button>
          <el-radio-button label="barroport">栏舍</el-radio-button>
        </el-radio-group>
      </el-form-item>

      <!-- <el-form-item>
        <el-select v-model="selectedTable" size="mini" filterable :placeholder="$t('dataSource.tablePlaceholder')" style="width:200px;" clearable @change="handleDataSrcChange">
          <el-option v-for="item in tableList" :key="item.table" :label="item.table_alias || item.tablename" :value="item.table" />
        </el-select>
      </el-form-item> -->

      <el-form-item v-show="false" :label="$t('dataSource.table')+':'">
        <span style="font-size: 12px;margin-right: 5px;">{{ selectedTableName }}</span>
        <el-button type="text" size="mini" @click="editDataSrc">
          {{ $t('common.edit') }}
        </el-button>
      </el-form-item>

      <!-- 字段 -->
      <!-- <el-form-item :label="$t('dataSource.fields')+':'">
        <draggable v-model="tableSchema" v-loading="schemaLoading" :group="{name: 'col',pull: 'clone', put: false}" :move="handleMove">
          <div v-for="col in tableSchema" :key="col.Column" class="drag-list-item">
            <i class="el-icon-rank" style="font-size: 12px;color:#409EFF;" /> {{ col.Comment }}
          </div>
        </draggable>
      </el-form-item> -->
      <el-form-item :label="$t('dataSource.fields')+':'">
        <draggable v-if="isEdit == 'edit'" v-model="tableSchema" v-loading="schemaLoading" :group="{name: 'col',pull: 'clone', put: false}" :move="handleMove">
          <div v-for="col in tableSchema" :key="col.Column" class="drag-list-item">
            <i class="el-icon-rank" style="font-size: 12px;color:#409EFF;" /> {{ col.Comment }}
          </div>
        </draggable>

        <div v-if="isEdit == 'view'" v-for="col in tableSchema" :key="col.Column" class="drag-list-item">
          <i class="el-icon-rank" style="font-size: 12px;color:#409EFF;" /> {{ col.Comment }}
        </div>

      </el-form-item>
    </el-form>

  </div>

</template>
<script>
import { sourceList, linkedTablesByBase } from '@/api/source'
import { GetDataByName } from '@/api/common'
import draggable from 'vuedraggable'
import exeSql from '@/api/exeSql'
import store from '../store'

export default {
  components: { draggable },
  props: {
    resultLoading: {
      default: false
    },
    dataSrc: {
      requred: true
    },
    isEdit: "",

  },
  watch: {
    isEdit: function (newValue) {
      console.log('isEdit:', newValue);  //可以看到数据已经拿到
      this.isEdit = newValue
    }
  },
  data() {
    return {
      radio1: '上海',
      schemaLoading: false,
      baseList: [],

      tableList: [],
      selectedTable: undefined,
      tableSchema: undefined,
      dataSrcVisible: true,
      existWarning: null,
      selectedBase: undefined,

    }
  },
  computed: {
    allSelected() {
      return store.state.dimensions.concat(store.state.caculCols).concat(store.state.caculCols2)
    },
    selectedBaseName() {
      const selectedBase = this.baseList.find(item => item.source_id === this.selectedBase)
      if (!selectedBase) return ''
      return selectedBase.base_alias || selectedBase.database
    },
    selectedTableName() {
      const selectedTable = this.tableList.find(item => item.table === this.selectedTable)
      if (!selectedTable) return ''
      return selectedTable.table_alias || selectedTable.table
    }
  },
  created() {
    console.log('this.dataSrc', this.dataSrc)


    console.log('height', document.documentElement.clientHeight)
    var height = document.documentElement.clientHeight - 260


    this.htSize = height
    // this.getBaseList() 

    // this.get_table_list()
  },
  methods: {
    // async getBaseList() {
    //   const { data } = await sourceList()
    //   this.baseList = data
    // },
    get_table_list() {
      var send_data = {
        name: 'getTABLESV2',
        page: 1,
        offset: 1
      }

      GetDataByName(send_data).then(response => {
        console.log('tableList数据', response.data.list)
        if (response.data.list !== null) {
          this.tableList = response.data.list
        } else {
          this.tableList = []
        }
      })
    },

    initWithDataSrc(dataSrc) {
      console.log('dataSrc:', dataSrc)
      if (dataSrc) {
        this.selectedTable = dataSrc.table
        this.selectedBase = dataSrc.source_id
        // this.fetchTables()
        this.fetchSchema()
      } else {

        this.selectedBase = ''
        // this.tableSchema = []
        // this.dataSrcVisible = true


        this.selectedTable = 'trainnumber'
        this.fetchSchema()

        store.setAllColsAction([])
        this.$emit('change', {
          table: this.selectedTable,
          source_id: this.selectedBase

        })
      }
    },
    editDataSrc() {
      this.dataSrcVisible = true
      this.selectedTable = undefined
    },
    handleBaseChange() {
      this.fetchTables()
    },
    // async fetchTables() {
    //   const { data } = await linkedTablesByBase(this.selectedBase)
    //   this.tableList = data
    // },
    // handleDataSrcChange() {
    //   this.dataSrcVisible = false
    //   this.fetchSchema()
    //   store.setAllColsAction([])
    //   this.$emit('change', {
    //     table: this.selectedTable,
    //     source_id: this.selectedBase

    //   })
    // },
    handleDataSrcChange(e) {
      console.log('selectedTable:', this.selectedTable)

      this.dataSrcVisible = false
      this.fetchSchema()
      store.setAllColsAction([])
      this.$emit('change', {
        table: this.selectedTable,
        source_id: this.selectedBase

      })
    },

    // fetchSchema() {
    //   if (!this.selectedTable) {
    //     this.tableSchema = []
    //     return
    //   }
    //   this.schemaLoading = true
    //   exeSql().fetch({ source_id: this.selectedBase, sql: `desc ${this.selectedTable}` }).then(resp => {
    //     this.schemaLoading = false
    //     this.tableSchema = resp.data.map((item, index) => {
    //       return {
    //         Column: item.Field,
    //         Type: item.Type,
    //         id: index
    //       }
    //     })
    //     store.setAllColsAction(this.tableSchema)
    //   })
    // },
    // 字段下拉框
    fetchSchema() {
      console.log('selectedTable:', this.selectedTable)
      // if (!this.selectedTable) {
      //   this.tableSchema = []
      //   return
      // }
      this.schemaLoading = true

      var send_data2 = {
        name: 'getColumnName',
        page: 1,
        offset: 1,

        returntype: 'Map',
        parammaps: {
          table_name: this.selectedTable
        }
      }
      GetDataByName(send_data2).then(resp => {
        console.log('字段数据:', resp.data.list)
        if (resp.data.list !== null) {
          this.schemaLoading = false
          this.tableSchema = resp.data.list.map((item, index) => {
            return {
              Column: item.Field,
              Type: item.Type,
              id: index,
              Comment: item.Comment
            }
          })
          store.setAllColsAction(this.tableSchema)
        } else {
          this.tableSchema = []
        }
        console.log('tableSchema数据:', this.tableSchema)
      })
    },
    handleMove(evt, originalEvent) {
      if (this.allSelected.find(item => item.Column === evt.draggedContext.element.Column)) {
        if (!this.existWarning) {
          this.existWarning = this.$message({
            type: 'warning',
            message: this.$t('chart.fieldExisted'),
            onClose: (instance) => {
              this.existWarning = null
            }
          })
        }
        return false
      }
    }
  }
}
</script>
<style lang="scss" scoped>
body .el-scrollbar__wrap {
  overflow-x: hidden;
}
.panel {
  /deep/ .el-form-item__label {
    line-height: initial;
  }
  /deep/ .el-form-item__content {
    line-height: initial;
  }
}
.drag-list-item {
  line-height: 1.5;
  font-size: 14px;
  color: #606266;
  cursor: -webkit-grab;
}
</style>