当前位置:   article > 正文

element ui 合并单元格封装_spanmethod 封装

spanmethod 封装

前言

通过element-ui的table组件span-method属性,封装一个可以自动根据字段对  进行自动合并的方法

SPAN-METHOD属性

element-ui中table组件的属性,回调函数是一个行和列的合并方法,对每个单元格执行方法,通过返回当前单元格所占行列数目进行合并

  1. <template>
  2. <div>
  3. <el-table :span-method="spanMethod">
  4. <el-table-column></el-table-column>
  5. </el-table>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. methods:{
  11. spanMethod({row,column,rowIndex,columnIndex}){
  12. if(columnIndex===0){
  13. if(rowIndex%2===0){
  14. // 返回值可以为数组,第一个值为合并的行数,第二个值为合并的列数
  15. return [2,1]
  16. }else{
  17. // 返回值也可以为对象,rowspan为合并的行数,colspan为合并的列数
  18. return{rowspan:0,colspan:0}
  19. }
  20. }
  21. }
  22. }
  23. }
  24. </script>

回调函数参数:

参数说明
row当前行内容
column当前列内容
rowIndex当前所在的行数
columnIndex当前所在的列数

代码封装:

  1. //参数:list-element-ui表格数据,props-需要进行合并的列对应的字段列表,rowIndex-当前行数,colIndex-当前列数
  2. Vue.prototype.$spanMethodFunc=function(list, props, rowIndex, colIndex) {
  3. if (colIndex >= props.length || !props[colIndex]) {
  4. // 根据传入的字段列表,判断不需要合并的列
  5. return [1, 1]
  6. } else {
  7. //使用try-catch,如果方法错误返回错误信息
  8. try {
  9. let _props = props.slice(0, colIndex + 1)//截取需要用到判断的字段名
  10. // 判断是否从本行开始合并
  11. let merge = _props.some(item => {
  12. // 如果当前行所需要判断合并的字段中有一个跟前一条数据不一样,本条数据即为合并的起点,第一条数据直接为合并起点
  13. return (
  14. rowIndex == 0 || (item&&list[rowIndex][item] != list[rowIndex - 1][item])
  15. )
  16. })
  17. // 如果本条数据是合并起点,获取需要合并的数据条数
  18. if (merge) {
  19. let _list = list.slice(rowIndex)//截取从本条数据开始的列表
  20. // 获取合并行数
  21. let _lineNum = _list.findIndex((item, ind) => {
  22. //同merge判断,找到合并的终点
  23. return (
  24. ind &&
  25. _props.some(item1 => {
  26. return (item1&&item[item1] != _list[0][item1])
  27. })
  28. )
  29. })
  30. // 合并行数为-1时,输出_list的长度,否则输出_lineNum
  31. return [_lineNum === -1 ? _list.length : _lineNum, 1]
  32. } else {
  33. // 否则,返回[0,0],即本条数据被合并
  34. return [0, 0]
  35. }
  36. } catch (err) {
  37. // 打印报错
  38. console.error('spanMethodFunc error:', err)
  39. }
  40. }
  41. },

代码示例:

  1. <script>
  2. export default {
  3. data(){
  4. return{
  5. list:[{
  6. department: '设计',
  7. grouping: '',
  8. duty: '总监',
  9. name: '刘备',
  10. age: 34,
  11. sex: 1,
  12. num: '34'
  13. }],
  14. props:["department","group","duty","","age"] // 对应的合并列,不需要合并的空字符串代替
  15. }
  16. },
  17. methods:{
  18. spanMethod({row,column,rowIndex,columnIndex}){
  19. return this.$spanMethodFunc(this.list,this.props,rowIndex,columnIndex)
  20. },
  21. }
  22. }
  23. </script>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/279873
推荐阅读
相关标签
  

闽ICP备14008679号