赞
踩
前端开发过程中常常会遇到各种开发表格的场景,有时候有的表格比较简单有的比较复杂(如下图简单示例所示,有合并项和多级表头),Elementui的el-table控件也可以支持构建复杂的表格,本文将指导你如何快速开发复杂表格~~~
数据结构比较复杂的时候,可使用多级表头来展现数据的层次关系。
只需要在 el-table-column 里面嵌套 el-table-column,就可以实现多级表头。
- <template>
- <div class="tableWrap">
- <el-table
- id="resultTableProject"
- :data="tableData"
- border
- v-loading="loading"
- element-loading-text="数据查询中"
- :span-method="spanMethod"
- height="620"
- size='small'
- >
- <el-table-column
- label="项目编号"
- prop="id"
- wdth="160"
- align="center"
- />
- <el-table-column
- label="项目名称"
- prop="casename"
- align="center"
- />
-
- <el-table-column
- label="部门"
- prop="bm"
- align="center"
- />
-
-
- <el-table-column
- label="部门人员(产值)"
- align="center"
-
- >
- <el-table-column
- v-for="(item, index) in userData"
- :key="index"
- :label="item.name"
- :prop="item.name + 'cz'"
- width="200"
- align="center"
- />
- </el-table-column>
- </el-table>
-
- </div>
- </template>
- <script setup>
- import { ref, onMounted,onBeforeMount, watch, reactive ,toRefs,toRaw,shallowRef} from "vue";
-
- let tableData=ref([
- { id:202112312,casename:'小家电项目',bm:"制造一队",'张三cz':100,},
- { id:202112342,casename:'小家电项目',bm:"制造二队",'李四cz':200,},
- { id:202112343,casename:'电视机',bm:"制造三队",'王五cz':300},
- { id:202112344,casename:'电视机',bm:"制造三队",'王五cz':300,},
- { id:202112345,casename:'空调项目',bm:"制造四队",'孙七cz':300},
- { id:202112346,casename:'冰箱项目',bm:"制造四队",'孙七cz':300},
- ])
-
- let userData=ref([
- {
- name:'张三',
- },
- {
- name:'李四',
- },
- {
- name:'王五',
- },
- {
- name:'孙七',
- }
- ])
-
-
- </script>
通过给table
传入span-method
方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行row
、当前列column
、当前行号rowIndex
、当前列号columnIndex
四个属性。该函数可以返回一个包含两个元素的数组,第一个元素代表rowspan
,第二个元素代表colspan
。 也可以返回一个键名为rowspan
和colspan
的对象。
- <template>
- <div class="tableWrap">
- <el-table
- id="resultTableProject"
- :data="tableData"
- border
- v-loading="loading"
- element-loading-text="数据查询中"
- :span-method="spanMethod"
- height="620"
- size='small'
- >
- <el-table-column
- label="项目编号"
- prop="id"
- wdth="160"
- align="center"
- />
- <el-table-column
- label="项目名称"
- prop="casename"
- align="center"
- />
-
- <el-table-column
- label="部门"
- prop="bm"
- align="center"
- />
-
-
- <el-table-column
- label="部门人员(产值)"
- align="center"
-
- >
- <el-table-column
- v-for="(item, index) in userData"
- :key="index"
- :label="item.name"
- :prop="item.name + 'cz'"
- width="200"
- align="center"
- />
- </el-table-column>
- </el-table>
-
- </div>
- </template>
- <script setup>
- import { ref, onMounted,onBeforeMount, watch, reactive ,toRefs,toRaw,shallowRef} from "vue";
-
- let tableData=ref([
- { id:202112312,casename:'小家电项目',bm:"制造一队",'张三cz':100,},
- { id:202112342,casename:'小家电项目',bm:"制造二队",'李四cz':200,},
- { id:202112343,casename:'电视机',bm:"制造三队",'王五cz':300},
- { id:202112344,casename:'电视机',bm:"制造三队",'王五cz':300,},
- { id:202112345,casename:'空调项目',bm:"制造四队",'孙七cz':300},
- { id:202112346,casename:'冰箱项目',bm:"制造四队",'孙七cz':300},
- ])
-
- let userData=ref([
- {
- name:'张三',
- },
- {
- name:'李四',
- },
- {
- name:'王五',
- },
- {
- name:'孙七',
- }
- ])
-
-
- const spanMethod = ({ row, column, rowIndex, columnIndex }) => {
- // 如果当前列不是组织机构列,则返回 { rowspan: 1, colspan: 1 },表示该单元格不需要合并
- // if (columnIndex !== 0 && columnIndex !== 1&& columnIndex !== 2 &&columnIndex!==9&&columnIndex!==10) {
- // return { rowspan: 1, colspan: 1 };
- // }
- if (columnIndex !== 0 && columnIndex !== 1) {
- return { rowspan: 1, colspan: 1 };
- }
-
- // 如果当前行是该组织机构的第一行,则计算该组织机构的行数,并返回 { rowspan, colspan: 1 },表示需要合并的行数为 rowspan
- if (
- rowIndex === 0 ||
- row.casename !== tableData.value[rowIndex - 1].casename
- ) {
- const rowCount = tableData.value.filter(
- (i) => i.casename === row.casename
- ).length;
- return { rowspan: rowCount, colspan: 1 };
- }
- // 否则返回 { rowspan: 0, colspan: 0 },表示该单元格已被上方单元格合并
- return { rowspan: 0, colspan: 0 };
- };
-
- </script>
- <style lang="less" scoped>
- .tableQualityProject {
- height: 100vh;
- width: 100%;
- overflow: auto;
- background-image: #f2f2f2;
- h1 {}
- }
- .tableWrap {
- padding: 0 20px;
- // width: 100%;
- // margin: 0 auto;
- /deep/ .el-table__header th {
- background-color: #409eff!important ; /* 设置表头颜色 */
- color: #fff; /* 设置表头文字颜色 */
- // background-color:#FAFAFA;
- // color:#252525;
- border:1px solid f5f5f5;
- }
- /deep/ .el-table .cell {
- // font-weight: 700;
- font-size: 16px;
- padding: 0;
- }
- .gzlWrap {
- // border-bottom:1px solid #dfdfdf;
- &:last-child {
- border-bottom: none;
- }
- span {
- display: inline-block;
- padding: 5px 0;
- }
- .key {
- width: 60%;
- }
- .value {
- width: 40%;
- }
- }
-
- .selfTableHead {
- display: flex;
- span {
- display: inline-block;
- width: 60px;
- }
- }
- }
- </style>
最简单的:修改表头样式即可
- .tableWrap {
- padding: 0 20px;
- // width: 100%;
- // margin: 0 auto;
- /deep/ .el-table__header th {
- background-color: #409eff!important ; /* 设置表头颜色 */
- color: #fff; /* 设置表头文字颜色 */
- // background-color:#FAFAFA;
- // color:#252525;
- border:1px solid f5f5f5;
- }
- /deep/ .el-table .cell {
- // font-weight: 700;
- font-size: 16px;
- padding: 0;
- }
- .gzlWrap {
- // border-bottom:1px solid #dfdfdf;
- &:last-child {
- border-bottom: none;
- }
- span {
- display: inline-block;
- padding: 5px 0;
- }
- .key {
- width: 60%;
- }
- .value {
- width: 40%;
- }
- }
-
- .selfTableHead {
- display: flex;
- span {
- display: inline-block;
- width: 60px;
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。