Vue结合el-table实现合并单元格(以及高亮单元表头和指定行)

这篇具有很好参考价值的文章主要介绍了Vue结合el-table实现合并单元格(以及高亮单元表头和指定行)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现效果如下:

Vue结合el-table实现合并单元格(以及高亮单元表头和指定行),vue3,vue2,vue.js,前端,javascript

思路:
1.首先使用动态表头表格。
2.其次实现动态计算合并单元格。(计算规则 传递需要合并的字段)
3.然后封装公共的计算单元格方法 export导出供多个页面使用。
4.同时需要封装成公共的组件供多个页面使用。
5.组件内写指定表头行高亮颜色以及指定行高亮颜色方法。

封装公共计算单元格合并方法


/**
 * 合并相同数据,导出合并行所需的方法(只适合el-table)
 * @param {Array} dataArray el-table表数据源
 * @param {Array} mergeRowProp 合并行的列prop
 * @param {Array} sameRuleRowProp 相同合并规则行的列prop
 */
export function getSpanMethod(dataArray, mergeRowProp, sameRuleRowProp) {
  /**
     * 要合并行的数据
     */
  const rowspanNumObject = {}

  // 初始化 rowspanNumObject
  mergeRowProp.map(item => {
    rowspanNumObject[item] = new Array(dataArray.length).fill(1, 0, 1).fill(0, 1)
    rowspanNumObject[`${item}-index`] = 0
  })

  // 计算相关的合并信息
  for (let i = 1; i < dataArray.length; i++) {
    mergeRowProp.map(key => {
      const index = rowspanNumObject[`${key}-index`]
      if (dataArray[i][key] === dataArray[i - 1][key]) {
        rowspanNumObject[key][index]++
      } else {
        rowspanNumObject[`${key}-index`] = i
        rowspanNumObject[key][i] = 1
      }
    })
  }

  /**
     * 添加同规则合并行的数据
     */
  if (sameRuleRowProp !== undefined) {
    const k = Object.keys(rowspanNumObject).filter(key => {
      if (!key.includes('index')) {
        return key
      }
    })[0]
    for (const prop of sameRuleRowProp) {
      rowspanNumObject[prop] = rowspanNumObject[k]
      rowspanNumObject[`${prop}-index`] = rowspanNumObject[`${k}-index`]
      mergeRowProp.push(prop)
    }
  }

  /**
     * 导出合并方法
     */
  const spanMethod = function({ row, column, rowIndex, columnIndex }) {
    if (mergeRowProp.includes(column['property'])) {
      const rowspan = rowspanNumObject[column['property']][rowIndex]
      if (rowspan > 0) {
        return { rowspan: rowspan, colspan: 1 }
      }
      return { rowspan: 0, colspan: 0 }
    }
    return { rowspan: 1, colspan: 1 }
  }

  return spanMethod
}

简单使用代码案例


<template>
  <div class="container">
    <el-card>
      <el-button
        type="text"
      >vue2合并单元格多列或指定列<i
        class="el-icon-s-order"
      /></el-button>
      <el-table :data="tableData" :span-method="spanMethod" border>
        <el-table-column prop="title" label="测试合并单元格多列" align="center">
          <el-table-column
            prop="name"
            label="姓名"
            width="100"
            align="center"
          />
          <el-table-column
            prop="gradeName"
            label="成绩指标"
            width="100"
            align="center"
          />
          <el-table-column
            prop="unit"
            label="单位"
            width="100"
            align="center"
          />
          <el-table-column prop="weight" label="权重" align="center" />
          <el-table-column prop="amount1" label="数值 1(元)" align="center" />
          <el-table-column prop="amount2" label="数值 2(元)" align="center" />
        </el-table-column>
      </el-table>
    </el-card>
  </div>
</template>

<script>
import { getSpanMethod } from '@/utils/commonunit.js'
export default {
  name: 'Index',
  data() {
    return {
      tableData: []
    }
  },
  computed: {
    spanMethod() {
      return getSpanMethod(
        this.tableData,
        ['name'],
        ['gradeName', 'unit', 'weight']
      )
    }
  },
  created() {
    this.getPageList()
  },

  methods: {
    getPageList() {
      const getTableDatas = [
        {
          id: '1',
          name: '王小虎',
          gradeName: '指标库',
          unit: '单位',
          weight: '权重',
          amount1: '234',
          amount2: '165'
        },
        {
          id: '1',
          name: '王小虎',
          gradeName: '指标库',
          unit: '单位',
          weight: '权重',
          amount1: '234',
          amount2: '165'
        },
        {
          id: '1',
          name: '王小虎',
          gradeName: '指标库',
          unit: '单位',
          weight: '权重',
          amount1: '234',
          amount2: '165'
        },
        {
          id: '1',
          name: '王小虎',
          gradeName: '指标库',
          unit: '单位',
          weight: '权重',
          amount1: '234',
          amount2: '165'
        },
        {
          id: '1',
          name: '黎明',
          gradeName: '指标库',
          unit: '单位',
          weight: '权重',
          amount1: '234',
          amount2: '165'
        },
        {
          id: '1',
          name: '黎明',
          gradeName: '指标库',
          unit: '单位',
          weight: '权重',
          amount1: '234',
          amount2: '165'
        },
        {
          id: '1',
          name: '黎明',
          gradeName: '指标库',
          unit: '单位',
          weight: '权重',
          amount1: '234',
          amount2: '165'
        },
        {
          id: '1',
          name: '李红',
          gradeName: '指标库',
          unit: '单位',
          weight: '权重',
          amount1: '234',
          amount2: '165'
        },
        {
          id: '1',
          name: '李红',
          gradeName: '指标库',
          unit: '单位',
          weight: '权重',
          amount1: '234',
          amount2: '165'
        }
      ]
      this.tableData = getTableDatas
    }
  }
}
</script>

<style scoped lang="scss">
.container {
  width: 100%;
}
</style>

高亮指定表头行数据样式 高亮表头行样式 方法

Vue结合el-table实现合并单元格(以及高亮单元表头和指定行),vue3,vue2,vue.js,前端,javascript

 tableRowClassName({ row, rowIndex }) { // 高亮指定数据行
      if (row.valueAttributes === 'Y') {
        console.log(rowIndex)
        return 'warning-row'
      }
      return ''
    },
    headerRowCell(e) {
      if (e.column && e.column.property === 'title') { // 指定表头行样式
        return this.customHeaderCellStyle
      } else {
        return {}
      }
    }

下面是封装组件代码,详细可以私信我哈,看到必回!!!

Vue结合el-table实现合并单元格(以及高亮单元表头和指定行),vue3,vue2,vue.js,前端,javascript文章来源地址https://www.toymoban.com/news/detail-846074.html

vue3同理哈,都可以使用

到了这里,关于Vue结合el-table实现合并单元格(以及高亮单元表头和指定行)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端vue+elementui导出复杂(单元格合并,多级表头)表格el-table转为excel导出

    需求 :前端对el-table表格导出 插件 : npm install xlsx -S npm install file-saver --save 原理 :直接导出el-table的表格里面的数据,这样就会存在缺点,只会导出当前页面的数据,如果需要导出全部数据,可以自己重新渲染一个全部数据不可见的el-table表格,来导出就可以了 扩展 :经过

    2024年02月04日
    浏览(54)
  • Vue+Element-UI 中 el-table 动态合并单元格 :span-method 方法

    记录一下工作时遇到的 el-table 合并单元格的需求,超详细😊 el-table官方提供了合并单元格的方法与返回格式 如下: 根据叙述有了如下思路: 因为后端返回的数据非统一, 可能不是按照类别排好的😨, 所以官网的例子满足不了所有的需求所以我们通过遍历table的数据比较前后两

    2024年02月12日
    浏览(51)
  • el-table 合并单元格(合并行)

    1.  添加 :span-method=\\\"objectSpanMethod\\\"  2.  写objectSpanMethod 方法 其中,switch中 0和1 是根据下面这张图中的顺序来的,  完整代码如下:

    2024年02月11日
    浏览(31)
  • el-table合并单元格

    el-tabel数据结构 此处为this.rolePermitItemList 合并后的样式: el-table-column 需要添加property字段,属性值同props,用来判断需要合并的字段

    2024年02月14日
    浏览(30)
  • el-table单元格合并思路

    el-table单元格合并的关键是el-table的 span-method 属性,本文将讲解一下我在单元格合并的思路,本人前端小白,可能有理解错误仅供参考,本文重点介绍思路,毕竟每个人需求不一样 注意:有时候不需要单元格合并,可以使用插槽 前提 单元格的合并必须得有数据,所以应该先

    2024年02月12日
    浏览(29)
  • el-table 怎么合并相同单元格

    问题背景 项目需求table表格中,相同的类型合并成一个单元格展示。 问题描述 el-table 并没有相关的语法直接合并,需要我们自己传入一个方法返回一个数组格式,来确定要合并行列。 解决问题 首先需要在 el-table 标签上绑定 :span-method=\\\"objectSpanMethod\\\" 再去 methods 中定义 object

    2024年02月16日
    浏览(37)
  • Element ui el-table 合并单元格

      el-table v-loading=\\\"loading\\\" :data=\\\"tableData\\\" style=\\\"width: 100%\\\" highlight-current-row :span-method=\\\"arraySpanMethod\\\"         el-table-column type=\\\"index\\\" label=\\\"序号\\\" /         el-table-column v-for=\\\"item in formThead\\\" :key=\\\"item.label\\\" :label=\\\"item.label\\\" :prop=\\\"item.prop\\\" :formatter=\\\"item.formatter\\\" :width=\\\"item.width || \\\'auto\\\'\\\" /        

    2024年02月02日
    浏览(30)
  • element-ui中的el-table合并单元格

    在写项目的时候有时候会经常遇到把行和列合并起来的情况,因为有些数据是重复渲染的,不合并行列会使表格看起来非常的混乱,如下:  而我们想要的数据是下面这种情况,将重复的行进行合并,使表格看起来简单明了,如下:   1:html部分 所谓的合并行就是将多行相同

    2024年02月10日
    浏览(30)
  • vue3中el-table实现多表头并表格合并行或列

    1、el-table中添加事件 :span-method=\\\"genderSpanCity\\\" 2、js添加函数 效果图为

    2024年01月23日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包