# vxe表格指定条件行合并


<template>
  <section class="container">
    <vxe-table
      border
      resizable
      height="300"
      :scroll-y="{ enabled: false }"
      :span-method="mergeRowMethod"
      :data="tableData3">
      <vxe-column
        type="seq"
        width="60"></vxe-column>
      <vxe-column
        field="key"
        title="Key"></vxe-column>
      <vxe-column
        field="content"
        title="Translate"></vxe-column>
      <vxe-column
        field="language"
        title="Language"
        :filters="[
          { label: '中文', value: 'zh_CN' },
          { label: 'English', value: 'en_US' },
        ]"></vxe-column>
        <vxe-column
        field="aaa"
        title="aaa"></vxe-column>
        <vxe-column
        field="bbb"
        title="bbb"></vxe-column>
    </vxe-table>
  </section>
</template>

<script>
  export default {
    name: 'VxeSpanMethodDemo',
    data() {
      return {
        tableData3: [
          {
            id: 10001,
            key: 'app.label.name',
            content: '名称',
            language: 'zh_CN',
            aaa: 34,
            bbb: 56,
            ccc: 1,
          },
          {
            id: 10002,
            key: 'app.label.name',
            content: 'Name',
            language: 'en_US',
            aaa: 34,
            bbb: 56,
            ccc: 1,
          },
          {
            id: 10003,
            key: 'app.label.sex',
            content: '性别',
            language: 'zh_CN',
            aaa: 34,
            bbb: 56,
            ccc: 1,
          },
          {
            id: 10004,
            key: 'app.label.sex',
            content: 'Sex',
            language: 'en_US',
            aaa: 34,
            bbb: 56,
            ccc: 1,
          },
          {
            id: 10005,
            key: 'app.label.age',
            content: '年龄',
            language: 'zh_CN',
            aaa: 34,
            bbb: 56,
            ccc: 1,
          },
          {
            id: 10006,
            key: 'app.label.age',
            content: 'Age',
            language: 'en_US',
            aaa: 34,
            bbb: 56,
            ccc: 1,
          },
          {
            id: 10007,
            key: 'app.label.role',
            content: '角色',
            language: 'zh_CN',
            aaa: 34,
            bbb: 56,
            ccc: 1,
          },
          {
            id: 10008,
            key: 'app.label.role',
            content: 'Role',
            language: 'en_US',
            aaa: 34,
            bbb: 56,
            ccc: 2,
          },
          {
            id: 10009,
            key: 'app.label.address',
            content: '地址',
            language: 'zh_CN',
            aaa: 34,
            bbb: 56,
            ccc: 3,
          },
          {
            id: 10010,
            key: 'app.label.address',
            content: 'Address',
            language: 'en_US',
            aaa: 34,
            bbb: 56,
            ccc: 3,
          },
          {
            id: 10011,
            key: 'app.label.nickname',
            content: '昵称',
            language: 'zh_CN',
            aaa: 34,
            bbb: 56,
            ccc: 4,
          },
          {
            id: 10012,
            key: 'app.label.nickname',
            content: 'Nickname',
            language: 'en_US',
            aaa: 34,
            bbb: 56,
            ccc: 4,
          },
        ],
      }
    },
    props: {},
    components: {},
    watch: {},
    computed: {},
    methods: {
      // 通用行合并函数(将相同多列数据合并为一行)
      mergeRowMethod({ row, _rowIndex, column, visibleData }) {
        // 需要合并的列
        const fields = ['aaa', 'bbb']
        // .ccc 为关键字
        const cellValue = row.ccc
        if (cellValue && fields.includes(column.property)) {
          // 上一行
          const prevRow = visibleData[_rowIndex - 1]
          // 合并结尾行
          let nextRow = visibleData[_rowIndex + 1]
          // .ccc 为关键字
          if (prevRow && prevRow.ccc === cellValue) {
            return { rowspan: 0, colspan: 0 }
          } else {
            let countRowspan = 1
            // .ccc 为关键字
            while (nextRow && nextRow.ccc === cellValue) {
              nextRow = visibleData[++countRowspan + _rowIndex]
            }
            if (countRowspan > 1) {
              return { rowspan: countRowspan, colspan: 1 }
            }
          }
        }
      },
    },
    created() {},
    mounted() {},
  }
</script>

<style scoped lang="scss"></style>


Expand Copy
Last Updated: 7/26/2023, 5:01:36 PM