element-ui 封装 表格

一、封装表格组件

javascript 复制代码
<template>
  <el-table :data="list" :default-sort="{ prop: 'date' }" style="width: 100%">
    <template v-for="item in tableColumn">
      <el-table-column
        v-if="item.filters"
        :prop="item.prop"
        :label="item.label"
        :sortable="item.sortable"
        :filters="item.filters"
        :filter-method="filterHandler(item.filterMethod)"
      />
      <el-table-column
        v-if="!item.filters"
        :prop="item.prop"
        :label="item.label"
        :sortable="item.sortable"
      />
    </template>
  </el-table>
</template>

<script scoped>
export default {
  data() {
    return {
      list: [],
      tableColumn: [],
    };
  },
  props: {
    data: {
      type: Array,
      default: [],
    },
    column: {
      type: Array,
      default: [],
    },
  },
  watch: {
    data: {
      immediate: true,
      deep: true,
      handler(val) {
        if (val.length) {
          this.list = JSON.parse(JSON.stringify(val));
        }
      },
    },
    column: {
      immediate: true,
      deep: true,
      handler(val) {
        if (val.length) {
          this.tableColumn = JSON.parse(JSON.stringify(val));
        }
      },
    },
  },
  methods: {
    // 如果没传,那么默认等值判断
    filterHandler(filterMethod) {
      if (filterMethod) {
        return item.filterMethod;
      } else {
        return (value, row, column) => {
          const property = column["property"];
          return row[property] === value;
        };
      }
    },
  },
};
</script>

二、使用方法

javascript 复制代码
<template>
  <div id="app"><Tabel :data="data" :column="column" /></div>
</template>

<script>
import Tabel from "@/components/Tabel.vue";
export default {
  components: { Tabel },
  data() {
    return {
      column: [
        {
          label: "日期",
          prop: "date",
          sortable: true,
        },
        {
          label: "姓名",
          prop: "name",
          filters: [{ text: "王小龙", value: "王小龙" }],
        },
        {
          label: "地址",
          prop: "address",
        },
      ],
      data: [
        {
          date: "2016-05-02",
          name: "王小猪",
          address: "上海市普陀区金沙江路 1518 弄",
        },
        {
          date: "2016-05-04",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1517 弄",
        },
        {
          date: "2016-05-01",
          name: "王小龙",
          address: "上海市普陀区金沙江路 1519 弄",
        },
        {
          date: "2016-05-03",
          name: "王小海",
          address: "上海市普陀区金沙江路 1516 弄",
        },
      ],
    };
  },
};
</script>
相关推荐
oscar9998 天前
CPO 共封装光学——当“电互连的极限”只能靠“光进封装”来突破
芯片·封装
oscar9998 天前
玻璃基板与面板级封装——从“圆形晶圆逻辑”到“矩形大板逻辑”的范式迁移
芯片·封装
小大宇8 天前
Vue知识点-ElementPlus-06 单选+多选+下拉+日期选择
前端·vue.js·elementui
oscar9999 天前
3D 异构集成中的热—力—电耦合——被封装结构放大的系统级问题
芯片·封装·电耦合
切糕师学AI9 天前
el-select-v2 深度解析:用虚拟滚动解决海量数据下拉选择性能瓶颈
前端·vue.js·elementui·el-select-v2
oscar99910 天前
TSV 与 3D 堆叠——垂直方向上的密度跃迁及其代价
芯片·封装·tsv
oscar99910 天前
Chiplet 与中介层的“共同设计”——互连标准、良率博弈与热耦合
芯片·封装·chiplet
oscar99911 天前
EMIB 与桥接路线——在“不铺满硅”的前提下逼近 2.5D 的互连密度
人工智能·芯片·封装·emib
oscar99916 天前
Interposer 导论——硅、玻璃、有机三种平台的第一性比较
芯片·封装·interposer
oscar99916 天前
Embedded Die 与 Bridge——在“没有中介层”的条件下逼近中介层的互连密度
bridge·芯片·封装·embedded die