<template>
  <div class="eContainer-table-block">
    <el-table
      :id="tableRef"
      :data="list"
      ref="table"
      style="width: 100%"
      class="eContainer-table"
      :header-cell-style="{ background: 'eef1f6', color: '#606266' }"
      v-bind="$attrs"
      v-on="tableListeners"
      v-loading="loading"
      :max-height="maxHeight"
    >
      <el-table-column
        v-for="(item, key) in columnsConfig"
        :key="key"
        v-bind="item"
      ></el-table-column>
      <slot></slot>
    </el-table>
    <c-col :span="16" style="text-align:left">
    <el-pagination
      class="eContainer-pagination"
      v-if="paginationShow"
      :background="type == 'small' ? false : true"
      small
      layout="prev, pager, next, jumper"
      :page-size="limit"
      :current-page="current"
      :total="total"
      v-on="$listeners"
    ></el-pagination>
    </c-col>
    <c-col :span="8">
    <div class="paginationLable" v-if="paginationShow">
      当前显示第 {{ page1 }}-{{ page2 }} 条，共 {{ total }} 条
    </div>
    </c-col>
  </div>
</template>

<script>
export default {
  props: {
    type: {
      type: String,
      default: "normal",
    },
    list: {
      type: Array,
      default: () => {
        return [];
      },
    },
    columnsConfig: {
      type: Array,
      default: () => {
        return [];
      },
    },
    total: {
      type: Number,
      default: 0,
    },
    current: {
      type: Number,
      default: 0,
    },
    limit: {
      type: Number,
      default: 0,
    },
    outerHeight: {
      type: Number,
      default: undefined,
    },
    loading: {
      type: Boolean,
      default: false,
    },
    tableRowClassName: {
      type: Function,
    },
    maxHeight: {
      type: String,
      default: undefined,
    },
    paginationShow: {
      type: Boolean,
      required: false,
      default: true,
    },
  },
  data() {
    return {
      page1: "",
      page2: "",
      tableListeners: {},
      tableRef: "tableRef" + Math.floor(Math.random() * 100),
    };
  },
  watch: {
    current: function () {
      this.getPageNum();
    },
    outerHeight: function () {
      if (this.outerHeight !== undefined) {
        window.removeEventListener("resize", this.handleResizeBind);
        this.clientHeight = `${document.documentElement.clientHeight}`;
        this.changeFixed();
        this.handleResizeBind = this.handleResize.bind(
          this,
          this.tableRef,
          this.outerHeight
        );
        window.addEventListener("resize", this.handleResizeBind);
      }
    },
  },
  created() {
    this.getPageNum();
    this.tableListeners = { ...this.$listeners };
    //delete this.tableListeners["current-change"];
  },
  mounted() {
    if (this.outerHeight) {
      this.clientHeight = `${document.documentElement.clientHeight}`;
      this.changeFixed();
      this.handleResizeBind = this.handleResize.bind(
        this,
        this.tableRef,
        this.outerHeight
      );
      window.addEventListener("resize", this.handleResizeBind);
    }
  },
  methods: {
    changeFixed() {
      let content = document.getElementById(this.tableRef);
      let clientHeight = `${document.documentElement.clientHeight}`;
      let target;
      for (let i = 0; i < content.children.length; i++) {
        if (content.children[i].classList.contains("el-table__body-wrapper")) {
          target = content.children[i];
        }
      }
      target.style.maxHeight = clientHeight - this.outerHeight + "px";
    },
    handleResize: (tableRef, outerHeight) => {
      let content = document.getElementById(tableRef);
      let clientHeight = `${document.documentElement.clientHeight}`;
      let target;
      for (let i = 0; i < content.children.length; i++) {
        if (content.children[i].classList.contains("el-table__body-wrapper")) {
          target = content.children[i];
        }
      }
      target.style.maxHeight = clientHeight - outerHeight + "px";
    },
    getPageNum() {
      if (this.current == Math.ceil(this.total / this.limit)) {
        this.page1 = this.current * this.limit - this.limit + 1;
        this.page2 = this.total;
      } else {
        this.page1 = this.current * this.limit - this.limit + 1;
        this.page2 = this.current * this.limit;
      }
    },
    tableRowClass: function ({ row, rowIndex }) {
      if (this.tableRowClassName) {
        return this.tableRowClassName({ row, rowIndex });
      } else {
        return "";
      }
    },
  },
  destroyed: function () {
    if (this.outerHeight) {
      window.removeEventListener("resize", this.handleResizeBind);
    }
  },
};
</script>

<style>
.eContainer-table-block .paginationLable {
  font-size: 12px;
  color: #808080;
  height: 26px;
  line-height: 26px;
  float: right;
  /* margin-top: 20px; */
}
.eContainer-table-block .el-table__body-wrapper {
  overflow: auto;
}
.el-table .warning-row {
  background: oldlace;
}
.el-table .success-row {
  background: #f0f9eb;
}
.el-table--small td, .el-table--small th {
    padding: 3px 0;
}
/* .eContainer-table thead tr th.is-leaf{
  border-bottom: transparent;
} */
</style>