当前位置:   article > 正文

vue3中el-table实现多表头并表格合并行或列_vue3el-table设置3 4 6行合并

vue3el-table设置3 4 6行合并
1、el-table中添加事件 :span-method="genderSpanCity"
  1. <el-table :span-method="genderSpanCity"
  2. :data="data.tableData"
  3. :fit="true" table-layout="fixed" header-align="center" stripe
  4. style="width:100%;height: 96%;"
  5. :cell-style="{borderColor:'#aaa'}"
  6. :header-cell-style="{color:'#000',textAlign:'center',borderColor:' #CCC',background:'#f9f9f9',height:'50px'}"
  7. v-else>
  8. <el-table-column :label="$t('wms.dailyProduct')" align="center" height="70px">
  9. <el-table-column>
  10. <el-table-column prop="process" :label="$t('mes.workingProcedure')" width="100" align="center"/>
  11. <el-table-column prop="item" width="130"/>
  12. <el-table-column prop="item2" width="150"/>
  13. </el-table-column>
  14. <!--二级标题日期-->
  15. <el-table-column v-for="(name,index) in data.title" :key="name" :label="name" align="center">
  16. <!-- 三级标题-->
  17. <el-table-column v-for="column in data.tableColumns" :key="column.prop"
  18. :prop="column.prop"
  19. :label="column.label" align="center">
  20. <template #default="scope">
  21. {{ scope.row.custom.length > 0 ? scope.row.custom[index][column.prop] : scope.row.custom[column.prop] }}
  22. </template>
  23. </el-table-column>
  24. </el-table-column>
  25. </el-table-column>
  26. </el-table>
2、js添加函数
  1. // 合并列
  2. const genderSpanCity = ({
  3. row,
  4. column,
  5. rowIndex,
  6. columnIndex
  7. }) => {
  8. // 合并前4行的2列与3
  9. for (let i = 0; i < 13; i++) {
  10. if (columnIndex === 1 && rowIndex === i) {
  11. return {
  12. rowspan: 1,
  13. colspan: 2
  14. }
  15. } else if (columnIndex === 2 && rowIndex === i) {
  16. return {
  17. rowspan: 0,
  18. colspan: 0
  19. }
  20. }
  21. }
  22. // 合并第4行以后的数据
  23. for (let i = 4; i < data.tableData.length; i++) {
  24. if (columnIndex > 3 && columnIndex % 2 === 0 && rowIndex === i) {
  25. return [1, 3]
  26. } else if (columnIndex >= 3 && columnIndex % 2 === 1 && rowIndex === i) {
  27. return [0, 0]
  28. }
  29. }
  30. // 合并前两列的数据
  31. if (columnIndex === 0 || columnIndex === 1) {
  32. // 获取当前单元格的值
  33. const currentValue = row[column.property]
  34. // 获取上一行相同列的值
  35. const preRow = data.tableData[rowIndex - 1]
  36. const preValue = preRow ? preRow[column.property] : null
  37. // 如果当前值和上一行的值相同,则将当前单元格隐藏
  38. if (currentValue === preValue) {
  39. return {
  40. rowspan: 0,
  41. colspan: 0
  42. }
  43. } else {
  44. // 否则计算当前单元格应该跨越多少行
  45. let rowspan = 1
  46. for (let i = rowIndex + 1; i < data.tableData.length; i++) {
  47. const nextRow = data.tableData[i]
  48. const nextValue = nextRow[column.property]
  49. if (nextValue === currentValue) {
  50. rowspan++
  51. } else {
  52. break
  53. }
  54. }
  55. return {
  56. rowspan,
  57. colspan: 1
  58. }
  59. }
  60. }
  61. }
效果图为
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/101051
推荐阅读
相关标签
  

闽ICP备14008679号