index.vue 5.5 KB
<template>
  <div style="padding:5px 10px">
    <div class="mb12 font-small-bold">{{ allTableArguments.listName }}</div>
    <!--  TODO:如果需要定长度的话可以使用这个在组件外部  <div class="tableList" style=" height: 600px;">-->
    <el-scrollbar style="height: 100%;">
      <el-table
        v-loading="allTableArguments.loading"
        class="processList"
        border
        :data="allTableArguments.List"
        style="width: 100%;"
        @selection-change="handleSelectionChange(row)"
        @sort-change="changeTableSort"
      >

        <el-table-column v-if="allTableArguments.columObj.nIndex" type="index" label="序号" width="50" :index="allTableArguments.columObj.nIndextable ? nIndex : ''" />

        <!-- TODO: 选择框是否开启,selectable控制是否单行禁用 -->
        <el-table-column v-if="allTableArguments.columObj.selection" type="selection" :selectable="allTableArguments.columObj.selectable" width="50px" />

        <!-- TODO: 普通列 -->
        <el-table-column
          v-for="(column,columIndex) in allTableArguments.columObj.columnData"
          :key="columIndex"
          :prop="column.prop"
          :label="column.label"
          :width="column.width"
          :fixed="column.fixed"
          :align="column.align || 'center'"
          :sortable="column.sortable"
          :index="columIndex"
          show-overflow-tooltip
        >
          <template slot-scope="{row,$index}">

            <!-- 默认展示 -->
            <span v-if="column.text && column.editRow !== $index">{{ row[column.prop] || '-' }}</span>
            <!-- 状态对象展示 -->
            <span v-if="column.status && row[column.prop]">{{ row[column.prop].msg }}</span>
            <!-- 自定义内容 -->
            <span v-if="column.ownDefined">{{ column.ownDefinedReturn(row,$index) }}</span>

            <!-- TODO: 时间数据   -->
            <span v-if="column.time">{{ row[column.prop] | transformDateByFormat('YYYY-MM-DD HH:mm') }}</span>
            <!-- switch开关 -->
            <el-switch v-if="column.switch" v-model="row[column.prop]" :inactive-text="row[column.prop] ? column.openText:column.closeText" @change="switchChange(row,$index,column.prop)" />
            <!-- 图片展示 -->
            <el-popover trigger="hover" placement="top" popper-class="popper">
              <img v-if="column.image" :src="viewUrl + row[column.prop]" alt="">
              <el-image v-if="column.image" :src="viewUrl + row[column.prop]" />
            </el-popover>

            <!-- 图片数组 -->
            <el-popover v-if="column.imageArr" trigger="hover" placement="top" popper-class="popper">
              <img v-if="row[column.prop].length>0" :src="row[column.prop][0]" alt="">
              <el-image v-if="row[column.prop].length >0" :src="row[column.prop][0]" :preview-src-list="row[column.prop]" />
            </el-popover>

            <!-- 可编辑input,仅在text默认展示类型才可编辑-->
            <el-input v-if="column.editRow === $index" v-model="row[column.prop]" @blur="editInputBlur(row,$index,column.prop,columIndex)" />
            <!-- 操作按钮 -->
            <span v-if="column.isOperation" class="processListBtns">
              <span v-for="(operations, index) in column.operation" :key="index">
                <el-button v-if=" operations.clickType === '1' " :icon="operations.icon" :type="typeParent" :style="{color:operations.color}" :size="size" @click="handleDetail(row,$index)">{{ operations.label }}</el-button>
                <el-button v-else-if=" operations.clickType === '2' " :icon="operations.icon" :type="typeParent" :style="{color:operations.color}" :size="size" @click="handleUpdate(row,$index)">{{ operations.label }}</el-button>
                <el-button v-else-if=" operations.clickType === '3' " :icon="operations.icon" :type="typeParent" :style="{color:operations.color}" :size="size" @click="handleDelete(row,$index)">{{ operations.label }}</el-button>
              </span>
            </span>
          </template>
        </el-table-column>
      </el-table>
    </el-scrollbar>
    <div />
    <!--    </div>-->
  </div>
</template>

<script>

import { BaseTableArgumentsTest } from '@/components/Table/AllTableArguments/BaseTableArguments'

export default {
  name: 'BaseTable',
  props: {
    allTableArguments: {
      type: BaseTableArgumentsTest,
      default: () => {
        return new BaseTableArgumentsTest()
      }
    }
  },
  data() {
    return {
      typeParent: 'text',
      size: 'mini'
    }
  },
  methods: {
    /* TODO:自定义分页索引,实现索引继承 */
    nIndex(index) {
      // TODO: 当前页数 - 1 * 每页数据条数 + 1
      const page = this.allTableArguments.queryParams.page // TODO: 当前页码
      const rows = this.allTableArguments.queryParams.rows // TODO: 每页条数
      return index + 1 + (page - 1) * rows
    },
    changeTableSort(val) {
      this.$emit('change-table-sort', val)
    },
    handleSelectionChange(row) {
      this.$emit('handle-selection-change', row)
    },
    handleDetail(row) {
      this.$emit('handle-detail', row)
    },
    handleUpdate(row) {
      this.$emit('handle-update', row)
    },
    handleDelete(row) {
      this.$emit('handle-delete', row)
    }
  }
}

</script>

<style lang="scss" scoped>
/* TODO: 这里是控制内容列表的样式 */
.processListBtns {
  .el-button {
  }
}

/* TODO: 深层穿透,解决底部滚动条问题 */
.tableList{
  /deep/ .el-scrollbar__wrap{
    overflow-x: hidden;
  }
  /deep/ .is-horizontal {
    display: none;
  }
}

</style>