elementUI 写一个表头列名、表体单元格样式、翻页器相对较为动态的表格el-table

简介: elementUI 写一个表头列名、表体单元格样式、翻页器相对较为动态的表格el-table


<template>
  <!-- 表格---------------------------------------- -->
  <div class="table">
    <el-table :data="tableBodyData" stripe :height="total<=5? 550 : 480">
      <el-table-column
        v-for="(a, $i) in tableHeadData"
        :key="$i"
        :label="a.label"
        :width="a.width"
        :min-width="a.minWidth"
        show-overflow-tooltip
      >
        <template slot-scope="scope">
          <span :color="getColor(a.fieldName, scope.row[a.fieldName])">{{
            scope.row[a.fieldName]
          }}</span>
        </template>
      </el-table-column>
    </el-table>
    <el-pagination
      style="margin-top: 20px"
      :hidden="total<=5"
      @size-change="initTableData"
      @current-change="initTableData"
      :total="total"
      :page-sizes="[5, 10, 20, 50]"
      :page-size.sync="pageSize"
      :current-page.sync="currentPage"
      layout="total, sizes, prev, pager, next, jumper"
    ></el-pagination>
  </div>
  <!-- ---------------------------------------- -->
</template>
<script>
export default {
  data() {
    return {
      // 表格相关数据----------------------------------------
      tableHeadData: [],
      tableBodyData: [],
      currentPage: 1,
      pageSize: 10,
      total: 0,
      // ----------------------------------------
    };
  },
  created() {
    this.tableHeadData = [
      { label: "字段名1", fieldName: "fieldName1", width: 100 },
      { label: "字段名2", fieldName: "fieldName2", minWidth: 300 },
      { label: "字段名3", fieldName: "fieldName3", width: 120 },
      { label: "字段名4", fieldName: "fieldName4", width: 100 },
      { label: "字段名5", fieldName: "fieldName5", width: 160 },
    ];
    this.tableBodyData = [
      {
        fieldName1: "红色预警",
        fieldName2: "值2",
        fieldName3: "值3",
        fieldName4: "值4",
        fieldName5: "值5",
      },
      {
        fieldName1: "值1",
        fieldName2: "橙色预警",
        fieldName3: "值3",
        fieldName4: "值4",
        fieldName5: "值5",
      },
      {
        fieldName1: "值1",
        fieldName2: "值2",
        fieldName3: "黄色预警",
        fieldName4: "值4",
        fieldName5: "值5",
      },
      {
        fieldName1: "值1",
        fieldName2: "值2",
        fieldName3: "值3",
        fieldName4: "值4",
        fieldName5: "值5",
      },
      {
        fieldName1: "值1",
        fieldName2: "值2",
        fieldName3: "值3",
        fieldName4: "值4",
        fieldName5: "值5",
      },
      {
        fieldName1: "值1",
        fieldName2: "值2",
        fieldName3: "值3",
        fieldName4: "值4",
        fieldName5: "值5",
      },
      {
        fieldName1: "值1",
        fieldName2: "值2",
        fieldName3: "值3",
        fieldName4: "值4",
        fieldName5: "值5",
      },
      {
        fieldName1: "值1",
        fieldName2: "值2",
        fieldName3: "值3",
        fieldName4: "值4",
        fieldName5: "值5",
      },
      {
        fieldName1: "值1",
        fieldName2: "值2",
        fieldName3: "值3",
        fieldName4: "值4",
        fieldName5: "值5",
      },
      {
        fieldName1: "值1",
        fieldName2: "值2",
        fieldName3: "值3",
        fieldName4: "值4",
        fieldName5: "值5",
      },
    ];
    this.total = this.tableBodyData.length;
  },
  methods: {
    initTableData() {
      //加载数据----------------------------------------
      /* var d = {
        current: this.currentPage,
        size: this.pageSize,
      };
      this.$d.getTableData(d, {
        s: (d) => {
            // this.hideLoad();
            this.total=d.total;
            this.tableBodyData=d;
        },
      }); */
      // ----------------------------------------
    },
    getColor(type, value) {
      switch (type) {
        case "fieldName1":
        case "fieldName2":
        case "fieldName3":
          return value;
          break;
      }
      return "";
    },
  },
};
</script>
<style lang='scss' >
// 各种预警颜色----------------------------------------
[color="红色预警"] {
  color: #dc2e08;
}
[color="橙色预警"] {
  color: #ff7834;
}
[color="黄色预警"] {
  color: #fff840;
}
// 表格----------------------------------------
.el-table th {
  background-color: #0a2247;
  color: white;
  font-size: 14px;
  font-weight: bold;
}
.el-table--striped .el-table__body tr.el-table__row--striped td {
  background: #071435; //斑马纹
}
.el-table td,
.el-table th {
  text-align: center;
  border-bottom: 1px solid #0a365d;
  border-left: 1px solid #0a365d;
  padding: 8.88px 0;
  &:first-of-type {
    border-left: none;
  }
}
.el-table th.is-leaf {
  border-color: #0c416c;
}
.el-table td.gutter,
.el-table th.gutter {
  border: none;
}
.el-table tr {
  background-color: #040b2a;
  color: #10c3ff;
  &:hover {
    color: white;
    & > td {
      background-color: #0a2247 !important;
    }
  }
}
.el-table,
.el-table__expanded-cell {
  background-color: transparent;
}
.el-table,
.el-table__expanded-cell,
.el-table--border::after,
.el-table--group::after,
.el-table::before {
  background-color: transparent;
}
.el-table__empty-text {
  line-height: 500px;
  color: #0c416c;
}
// 翻页----------------------------------------
.el-pagination {
  text-align: center;
}
.el-pagination,
.el-pagination * {
  transition: 0.2s ease-out;
}
.el-pagination .btn-next,
.el-pagination .btn-prev {
  background: none;
  color: #00c8ff;
}
.el-dialog,
.el-pager li,
.el-pagination__jump,
.el-pagination__total {
  color: #00c8ff99;
  background: none;
}
.el-pagination button:disabled {
  color: #00c8ff55;
  background-color: transparent;
}
.el-pager li.btn-quicknext,
.el-pager li.btn-quickprev {
  color: #00c8ff99;
}
.el-input__inner {
  background: transparent;
  border-color: #2f4685;
  color: #0080b9;
}
.el-input__icon {
  color: #2f4685 !important;
}
.el-select:hover .el-input__inner {
  border-color: #00c8ff;
}
//----------------------------------------
</style>

💡 另外,在elementUI官方文档里面的el-pagination控件有一个:hide-on-single-page属性  

虽然这个属性也可以达到“当数据总条数小于一定数量”就隐藏翻页控件的作用,但是首次加载控件的时候不会判断,非得用户去使用了翻页控件里面的下拉框修改每页显示条数的时候才会触发隐藏的判断,所以从这个角度出发我不推荐大家使用:hide-on-single-page属性

还是老老实实用:hidden吧~


相关文章
|
7月前
|
前端开发 微服务
Element-Plus 表格 el-table 如何支持分页多选
Element-Plus 表格 el-table 如何支持分页多选
layUI数据表格可编辑表格单元格值修改之后获取修改前的值
layUI数据表格可编辑表格单元格值修改之后获取修改前的值
381 0
|
JavaScript 前端开发 Java
72jqGrid 分组表头 - 有合并列的样式
72jqGrid 分组表头 - 有合并列的样式
62 0
|
前端开发
element ui el-table 多选 表头全选框替换文字
element ui el-table 多选 表头全选框替换文字
1663 0
|
前端开发 JavaScript API
在 Vue3 + Element Plus 中生成动态表格,动态修改表格,多级表头,合并单元格
在 Vue 中,表格组件是使用频率及复杂度排名第一的组件,前端经常需要根据后台返回的数据动态渲染表格,比如动态表格如何生成,因为表格的列并不是固定的,在未知表格具体有哪些列的场景下,前端如何动态渲染表格数据。又或者需要把表格单元格进行合并处理,比如第一列是日期,需要把相同的日期进行合并,这样表格看起来会更加清晰。 本文手把手教你如何在 Vue3 + Element Plus 中创建表格、生成动态表格、创建动态多级表头、表格行合并、列合并等问题。如果你正在搭建后台管理工具,又不想处理前端问题,推荐使用卡拉云 ,卡拉云是新一代低代码开发工具,可一键接入常见数据库及 API ,无需懂前端,仅需拖拽即
3153 0
|
5月前
HTML【详解】表格 table 标签(table的属性,语义化表格,简易表格,合并单元格)
HTML【详解】表格 table 标签(table的属性,语义化表格,简易表格,合并单元格)
303 0
HTML【详解】表格 table 标签(table的属性,语义化表格,简易表格,合并单元格)
elementui表格自定义表头的两种方法
这篇文章主要是总结了elementui-table表格怎么自定义表头,两种方式需求不一样,大家还有啥好的方法或者遇到的bug评论区留言大家一起解决。
1077 0
|
JavaScript 前端开发 Java
71jqGrid 分组表头 - 没有合并列的样式
71jqGrid 分组表头 - 没有合并列的样式
32 0
jqgrid实现表头合并功能
jqgrid实现表头合并功能
386 0