• Ant Design Vue & Element-ui 中table 合并行功能,以及带分页并合并行


     1. Ant Design Vue 中 table 合并行功能

    1. ref="table"
    2. :dataSource="comList"
    3. :columns="columns"
    4. :scroll="{ y: 430 }"
    5. size="small"
    6. rowKey="id"
    7. :rowClassName="rowClassNameHandle"
    8. :customRow="
    9. record => {
    10. return {
    11. on: {
    12. click: () => clickRow(record), // 点击行
    13. },
    14. }
    15. }
    16. "
    17. :pagination="ipagination"
    18. @change="handleTableChange"
    19. />
    20. columns: [
    21. {
    22. title: '楼层',
    23. dataIndex: 'floor',
    24. align: 'center',
    25. width: 130,
    26. ellipsis: true,
    27. customRender: (text, row, index) => {
    28. const obj = {
    29. children: text,
    30. attrs: {},
    31. }
    32. obj.attrs.rowSpan = row.rowSpan
    33. return obj
    34. },
    35. },
    36. {
    37. title: '名称',
    38. dataIndex: 'name',
    39. align: 'center',
    40. ellipsis: true,
    41. },
    42. ],
    43. this.setRowSpan(this.comList, 'floor')
    44. //数据处理 data:表格数据,field: 要合并行的属性字段
    45. setRowSpan(data, field) {
    46. let count = 0
    47. let indexCount = 1
    48. while (indexCount < data.length) {
    49. const item = data[count]
    50. if (!item.rowSpan) {
    51. item.rowSpan = 1
    52. }
    53. if (item[field] === data[indexCount][field]) {
    54. item.rowSpan++
    55. data[indexCount].rowSpan = 0
    56. } else {
    57. count = indexCount
    58. }
    59. indexCount++
    60. }
    61. },

    以上,如果表格不用分页,那么按照 floor 字段值一样就合并行的功能就已经实现了。

    以下,如果表格是按照10条数据为一页来分页的合并行功能实现:

    1. // 进一步处理数据,按10条数据分页,来调整合并行的值
    2. this.comList.forEach((item, index) => {
    3. const rowSpan = item.rowSpan
    4. const remain = index % 10
    5. const pages = parseInt(item.rowSpan / 10)
    6. const currentPage = parseInt(index / 10)
    7. if (rowSpan > 10 - remain) {
    8. item.rowSpan = 10 - remain //首
    9. const rowSpanRemain =
    10. pages > 1 ? rowSpan - (pages - 1) * 10 - (10 - remain)
    11. : rowSpan - (10 - remain)
    12. for (let i = 1; i < pages; i++) {
    13. arr[(i + currentPage) * 10].rowSpan = 10
    14. }
    15. let end = (pages + currentPage) * 10
    16. if(rowSpan - (10 - remain) > 0 && pages === 0){
    17. end = (pages + currentPage + 1) * 10
    18. }
    19. arr[end].rowSpan = rowSpanRemain //尾
    20. }
    21. })

    2. Element ui 中table 合并行功能

    1. :data="
    2. comList.slice(
    3. (ipagination.pageNo - 1) * ipagination.pageSize,
    4. ipagination.pageNo * ipagination.pageSize,
    5. )
    6. "
    7. style="width: 100%"
    8. max-height="450"
    9. :span-method="objectSpanMethod"
    10. stripe
    11. border
    12. size="mini"
    13. >
    14. <el-table-column prop="floor" label="楼栋" width="150"> el-table-column>
    15. <el-table-column prop="name" label="wifi名称"> el-table-column>
    16. <el-pagination
    17. :current-page="ipagination.pageNo"
    18. :page-size="ipagination.pageSize"
    19. layout="total, prev, pager, next"
    20. :total="ipagination.total"
    21. @current-change="handleCurrentChange"
    22. size="mini"
    23. >
    24. el-pagination>
    25. // arr 为表格数据源
    26. this.setRowSpan(arr, 'floor')
    27. // 如果有分页才需要此段代码
    28. arr.forEach((item, index) => {
    29. const rowSpan = item.rowSpan
    30. const remain = index % 10
    31. const pages = parseInt(item.rowSpan / 10)
    32. const currentPage = parseInt(index / 10)
    33. if (rowSpan > 10 - remain) {
    34. item.rowSpan = 10 - remain //首
    35. const rowSpanRemain =
    36. pages > 1 ? rowSpan - (pages - 1) * 10 - (10 - remain)
    37. : rowSpan - (10 - remain)
    38. for (let i = 1; i < pages; i++) {
    39. arr[(i + currentPage) * 10].rowSpan = 10
    40. }
    41. let end = (pages + currentPage) * 10
    42. if(rowSpan - (10 - remain) > 0 && pages === 0){
    43. end = (pages + currentPage + 1) * 10
    44. }
    45. arr[end].rowSpan = rowSpanRemain //尾
    46. }
    47. })
    48. this.comList = arr
    49. objectSpanMethod({ row, column, rowIndex, columnIndex }) {
    50. if (columnIndex === 0) {
    51. console.log(row)
    52. if (row.rowSpan > 0) {
    53. return { rowspan: row.rowSpan, colspan: 1 }
    54. } else {
    55. return {
    56. rowspan: 0,
    57. colspan: 0,
    58. }
    59. }
    60. }
    61. },

  • 相关阅读:
    Apache-Atlas-2.2.0 独立编译部署
    天地不仁,以万物为刍狗!
    我国首个发酵饲料原料行标准修订发布 国稻种芯现代饲草规划
    信息化赋能,移动办公系统WorkPlus助推智慧检务工作安全高效发展
    微信小程序之投票管理
    pip某些包发生SSL错误
    【动手学深度学习】CNN浅记
    ESP8266-Station模式连接服务器
    美国FBA海运专线究竟是什么?美国fba海运专线都有那些?
    快速搭建一个简单的SpringBoot项目-详细步骤
  • 原文地址:https://blog.csdn.net/qq_41283814/article/details/133814345