首页 > 其他分享 >Vue element 表格跨行合并单元格

Vue element 表格跨行合并单元格

时间:2023-09-04 12:11:43浏览次数:32  
标签:Vue spanMap rowIndex 单元格 element columnIndex rowspan address tableData

1、定义 table.js

/**
 * 生成表格合并行坐标阵列 rowspan、colspan 信息
 * @param {表格数据} tableData
 * @param {合并列字段} mergeColumns example : ["filed1",[filed2]]
 * @returns 坐标阵列
 */
export function getTableSpanMap(tableData, mergeColumns) {
  var spanMap = {}
  var prevRowMap = {}
  mergeColumns = mergeColumns || []
  tableData.forEach((row, rowIndex) => {
    Object.keys(row).forEach((columnKey, columnIndex) => {
      if (!mergeColumns.some(x => x === columnKey)) {
        spanMap[rowIndex + '-' + columnIndex] = {
          rowspan: 1,
          colspan: 1
        }
      } else {
        if (
          tableData[rowIndex - 1] &&
          tableData[rowIndex][columnKey] == [tableData[rowIndex - 1][columnKey]]
        ) {
          var span = spanMap[prevRowMap[columnIndex] + '-' + columnIndex]
          span.rowspan = span.rowspan + 1
          span.colspan = 1

          spanMap[rowIndex + '-' + columnIndex] = {
            rowspan: 0,
            colspan: 1
          }
        } else {
          prevRowMap[columnIndex] = rowIndex
          spanMap[rowIndex + '-' + columnIndex] = {
            rowspan: 1,
            colspan: 1
          }
        }
      }
    })
  })
  return spanMap
}

2、Vue 页面使用 table.js

<el-table :data="tableData" style="width: 100%" :span-method="objectSpanMethod">
	<el-table-column
					 prop="date"
					 label="日期"
					 width="180">
	</el-table-column>
	<el-table-column
					 prop="name"
					 label="姓名"
					 width="180">
	</el-table-column>
	<el-table-column
					 prop="address"
					 label="地址">
	</el-table-column>
</el-table>
<script>
	import { getTableSpanMap } from '@/utils/table'
	export default {
	    data() {
	      return {       
	        spanMap: {},
	        tableData:[]
	      }
	    },
	    created() {
	        this.fetchTableData()
	    },
	    methods:{
	          fetchTableData() {
	          this.tableData=[{
	                              date: '2016-05-02',
	                              name: '王小虎',
	                              address: '上海市普陀区金沙江路 1518 弄'
	                            }, {
	                              date: '2016-05-04',
	                              name: '王小虎',
	                              address: '上海市普陀区金沙江路 1517 弄'
	                            }, {
	                              date: '2016-05-01',
	                              name: '王小虎',
	                              address: '上海市普陀区金沙江路 1519 弄'
	                            }, {
	                              date: '2016-05-03',
	                              name: '哈哈哈',
	                              address: '上海市普陀区金沙江路 1519 弄'
	                            }]
	          this.setTableSpanMap();// 设置合并行坐标阵列
	        },
	          setTableSpanMap(){
	            this.spanMap = getTableSpanMap(this.tableData,["name","address"])//合并 name、address 列
	          },
	          objectSpanMethod({ row, column, rowIndex, columnIndex }) {
	            return this.spanMap[rowIndex + '-' + columnIndex]
	          }
	        }
	}
</script>

标签:Vue,spanMap,rowIndex,单元格,element,columnIndex,rowspan,address,tableData
From: https://www.cnblogs.com/lwc1st/p/17676580.html

相关文章

  • VUE 打开新页面方法记录
    1.使用VUERouter主要使用router的resolve方法进行路径及参数构造jumpPage(){letrouteData=this.$router.resolve({name:"newPage",query:{name:"zs"}})window.open(routeData.href,"_blank&qu......
  • 20230529 java.lang.reflect.AnnotatedElement
    介绍java.lang.reflect.AnnotatedElementpublicinterfaceAnnotatedElementAPIisAnnotationPresentgetAnnotationgetAnnotationsgetAnnotationsByTypegetDeclaredAnnotationgetDeclaredAnnotationsByTypegetDeclaredAnnotations......
  • Vue2.0 使用wangEditor(富文本编辑器)
     1、安装npminstallwangeditor--save2、页面中使用2.1定义容器<divid="content"></div>2.2引用wangeditor//引入wangeditorimportwangEditorfrom"wangeditor";2.3创建实例,调用它的方法,使页面中呈现富文本编辑在mouted()勾子函数中操作mounted(){......
  • .Net+vue+Element 七牛云上传
    API安装官方文档:developer.qiniu.com/kodo/1237/c…Nuget搜索安装 Qiniu Bucket储存空间名bucket接口文档:developer.qiniu.com/kodo/3941/t…stringBucket="image";//七牛云储存空间的名字stringAccessKey="VuDqYiw8qQobmajri.......";stringSecretKey......
  • element-ui 的下拉树
    我了解到在element-ui中并没有下拉树这个组件,所以只能用<el-select>组件和<el-tree>结合来实现1、html<scriptsrc="../resources/js/vue.js"></script><scriptsrc="../resources/js/element-ui/index.js"></script><linkhref="......
  • vue 组件递归显示,递归组件中事件传值问题。
    1、比如下面的结构[{id:1,text:'1',children:{id:2,text:'2',children:{id:3,text:'3'......}}]可以看到,每个节点下面的children都是不一定的,有的可能会有很多层,有的可能只有一层。......
  • vue组件切换_demo
    项目参考:36_动态组件_哔哩哔哩_bilibili项目结构:App.vue<template><component:is="Component"></component><button@click="switchHandle">switchComponent</button></template><script>importComponent......
  • 手把手教你vue3-ts-uniapp-vite创建多端小程序-3 统一ui,uni-ui库
    uni-ui官网地址https://uniapp.dcloud.net.cn/component/uniui/quickstart.html1.安装sass、sass-loadernpminstallsass-Dnpminstallsass-loader-D2.安装uni-uinpminstall@dcloudio/uni-ui3.配置easycom。在pages.json中配置"easycom":{"autoscan&q......
  • vue自定义事件用法及$emit
    子组件<template><button@click="handle">自定义事件</button></template><script>exportdefault{data(){return{message:"我子组件"}},methods:{handle(){......
  • vue 参数父传子 Props 实例
    1,子组件<template><h1>props传递参数</h1><p>{{title}}</p><ul><liv-for="iteminnelist">{{item}}</li></ul></template><script>exportdefault{name:"myco......