-
- ref="table"
- :dataSource="comList"
- :columns="columns"
- :scroll="{ y: 430 }"
- size="small"
- rowKey="id"
- :rowClassName="rowClassNameHandle"
- :customRow="
- record => {
- return {
- on: {
- click: () => clickRow(record), // 点击行
- },
- }
- }
- "
- :pagination="ipagination"
- @change="handleTableChange"
- />
-
-
- columns: [
- {
- title: '楼层',
- dataIndex: 'floor',
- align: 'center',
- width: 130,
- ellipsis: true,
- customRender: (text, row, index) => {
- const obj = {
- children: text,
- attrs: {},
- }
- obj.attrs.rowSpan = row.rowSpan
- return obj
- },
- },
- {
- title: '名称',
- dataIndex: 'name',
- align: 'center',
- ellipsis: true,
- },
- ],
-
-
- this.setRowSpan(this.comList, 'floor')
-
- //数据处理 data:表格数据,field: 要合并行的属性字段
- setRowSpan(data, field) {
- let count = 0
- let indexCount = 1
- while (indexCount < data.length) {
- const item = data[count]
- if (!item.rowSpan) {
- item.rowSpan = 1
- }
- if (item[field] === data[indexCount][field]) {
- item.rowSpan++
- data[indexCount].rowSpan = 0
- } else {
- count = indexCount
- }
-
- indexCount++
- }
- },
以上,如果表格不用分页,那么按照 floor 字段值一样就合并行的功能就已经实现了。
以下,如果表格是按照10条数据为一页来分页的合并行功能实现:
- // 进一步处理数据,按10条数据分页,来调整合并行的值
- this.comList.forEach((item, index) => {
- const rowSpan = item.rowSpan
- const remain = index % 10
- const pages = parseInt(item.rowSpan / 10)
- const currentPage = parseInt(index / 10)
- if (rowSpan > 10 - remain) {
- item.rowSpan = 10 - remain //首
- const rowSpanRemain =
- pages > 1 ? rowSpan - (pages - 1) * 10 - (10 - remain)
- : rowSpan - (10 - remain)
- for (let i = 1; i < pages; i++) {
- arr[(i + currentPage) * 10].rowSpan = 10
- }
- let end = (pages + currentPage) * 10
- if(rowSpan - (10 - remain) > 0 && pages === 0){
- end = (pages + currentPage + 1) * 10
- }
- arr[end].rowSpan = rowSpanRemain //尾
- }
- })
2. Element ui 中table 合并行功能
-
- :data="
- comList.slice(
- (ipagination.pageNo - 1) * ipagination.pageSize,
- ipagination.pageNo * ipagination.pageSize,
- )
- "
- style="width: 100%"
- max-height="450"
- :span-method="objectSpanMethod"
- stripe
- border
- size="mini"
- >
- <el-table-column prop="floor" label="楼栋" width="150"> el-table-column>
- <el-table-column prop="name" label="wifi名称"> el-table-column>
-
- <el-pagination
- :current-page="ipagination.pageNo"
- :page-size="ipagination.pageSize"
- layout="total, prev, pager, next"
- :total="ipagination.total"
- @current-change="handleCurrentChange"
- size="mini"
- >
- el-pagination>
-
-
-
- // arr 为表格数据源
- this.setRowSpan(arr, 'floor')
-
- // 如果有分页才需要此段代码
- arr.forEach((item, index) => {
- const rowSpan = item.rowSpan
- const remain = index % 10
- const pages = parseInt(item.rowSpan / 10)
- const currentPage = parseInt(index / 10)
- if (rowSpan > 10 - remain) {
- item.rowSpan = 10 - remain //首
- const rowSpanRemain =
- pages > 1 ? rowSpan - (pages - 1) * 10 - (10 - remain)
- : rowSpan - (10 - remain)
- for (let i = 1; i < pages; i++) {
- arr[(i + currentPage) * 10].rowSpan = 10
- }
- let end = (pages + currentPage) * 10
- if(rowSpan - (10 - remain) > 0 && pages === 0){
- end = (pages + currentPage + 1) * 10
- }
- arr[end].rowSpan = rowSpanRemain //尾
- }
- })
-
- this.comList = arr
-
-
-
-
- objectSpanMethod({ row, column, rowIndex, columnIndex }) {
- if (columnIndex === 0) {
- console.log(row)
- if (row.rowSpan > 0) {
- return { rowspan: row.rowSpan, colspan: 1 }
- } else {
- return {
- rowspan: 0,
- colspan: 0,
- }
- }
- }
- },
-
相关阅读:
Apache-Atlas-2.2.0 独立编译部署
天地不仁,以万物为刍狗!
我国首个发酵饲料原料行标准修订发布 国稻种芯现代饲草规划
信息化赋能,移动办公系统WorkPlus助推智慧检务工作安全高效发展
微信小程序之投票管理
pip某些包发生SSL错误
【动手学深度学习】CNN浅记
ESP8266-Station模式连接服务器
美国FBA海运专线究竟是什么?美国fba海运专线都有那些?
快速搭建一个简单的SpringBoot项目-详细步骤
-
原文地址:https://blog.csdn.net/qq_41283814/article/details/133814345