<template>
  <ht-tree-list-dialog
    :single="single"
    :data="data"
    :table-columns="tableColumns"
    :pagination="pageResult"
    :tree-data="treeData"
    dialog-title="数据列表选择"
    :append-to-body="true"
    @load="handleLoad"
    @loadListData="loadListData"
    @onConfirm="onConfirm"
    @reset="reset"
    quickSearchProps="name,alias"
    search-placeholder="名称、别名"
    :destroy-on-close="destroyOnClose"
    ref="htTreeListDialog"
  />
</template>
<script>
import form from '@/api/form.js'
export default {
  name: 'EipDataListTemplateSelector',
  props: {
    value: Array,
    single: {
      type: Boolean,
      default: true
    },
    defKey: {
      type: String,
      default: ''
    },
    type: {
      type: String,
      default: ''
    },
    name: String,
    formType: {
      type: String,
      default: 'pc'
    },

    destroyOnClose: {
      type: Boolean,
      default: false
    },
    rightType: {
      type: String,
      default: ''
    },
    isMobile: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
      data: [],
      treeData: null,
      tableColumns: [
        {prop: 'name', label: '视图名称'},
        {prop: 'alias', label: '视图别名'},
        {prop: 'sqlAlias', label: 'sql别名'},
        {prop: 'typeName', label: '分类'}
      ],
      querys: [],
      pageResult: {
        page: 1,
        pageSize: 50,
        total: 0
      },
      typeIdQuery: null
    }
  },
  mounted() {},
  methods: {
    loadTreeData() {
      let param = {pageBean: {page: 1, pageSize: -1}}
      form.getCustomViewList(param).then(response => {
        this.treeData = response.rows
      })
    },
    showDialog(data) {
      this.loadTreeData()
      this.$refs.htTreeListDialog.showDialog(data)
    },
    handleClose() {
      this.$refs.htTreeListDialog.handleClose()
    },
    handleLoad(param, cb) {
      param.params = param.params || {}
      if (this.defKey != '') {
        if (this.type == 'flow') {
          param.querys.push({
            property: 'defId',
            value: this.defKey,
            operation: 'EQUAL',
            relation: 'AND'
          })
        } else {
          param.querys.push({
            property: 'formKey',
            value: this.defKey,
            operation: 'EQUAL',
            relation: 'AND'
          })
        }
      }
      // 参数说明  url  requestBodyParam  requestParam
      form
        .getViewList(param, this.typeIdQuery)
        .then(response => {
          this.data = response.rows
          this.pageResult = {
            page: response.page,
            pageSize: response.pageSize,
            total: response.total
          }
        })
        .finally(() => cb())
    },
    loadListData(nodedata) {
      let queryFilter = {
        pageBean: this.pageResult,
        querys: []
      }
      this.typeIdQuery = nodedata.alias
      this.handleLoad(queryFilter, () => {})
    },
    onConfirm(selection) {
      this.$emit('onConfirm', selection, this.name)
      this.$emit('input', selection)
    },
    reset() {
      /**
       * 点击重置按钮
       * 1. 清空树条件  this.typeIdQuery = "";
       * 2. 清空树选中状态
       * */
      if (this.typeIdQuery) {
        this.$refs.htTreeListDialog.$refs.tree.$refs.elTree.currentNode.node.isCurrent = false
      }
      this.typeIdQuery = ''
    }
  }
}
</script>
