当前位置:   article > 正文

Vxe UI vue vxe-table 实现表格数据分组功能,根据字段数据分组_vxe-table分组展开

vxe-table分组展开

Vxe UI vue vxe-table 实现表格数据分组功能,根据字段数据分组

实现数据分组功能

基于树结构功能就可以直接实现数据分组功能,代码如下:

<template>
  <div>
    <vxe-button status="primary" @click="listToGroup()">取消分组</vxe-button>
    <vxe-button status="primary" @click="listToGroup('name')">按名称+类型分组</vxe-button>
    <vxe-button status="primary" @click="listToGroup('type')">按类型分组</vxe-button>
    <vxe-button status="primary" @click="listToGroup('date')">按时间分组</vxe-button>

    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script lang="ts" setup>
import { reactive } from 'vue'
import XEUtils from 'xe-utils'

const allList = [
  { id: 10000, name: 'Test1', type: 'mp3', size: '1024', date: '2020-08-01' },
  { id: 10050, name: 'Test2', type: 'mp4', size: '0', date: '2021-04-01' },
  { id: 24300, name: 'Test3', type: 'avi', size: '1024', date: '2020-03-01' },
  { id: 20045, name: 'Test4', type: 'html', size: '600', date: '2021-04-01' },
  { id: 10053, name: 'Test5', type: 'avi', size: '0', date: '2021-04-01' },
  { id: 24330, name: 'Test6', type: 'txt', size: '25', date: '2021-10-01' },
  { id: 21011, name: 'Test7', type: 'pdf', size: '512', date: '2020-01-01' },
  { id: 22200, name: 'Test8', type: 'js', size: '1024', date: '2021-06-01' },
  { id: 23666, name: 'Test9', type: 'xlsx', size: '2048', date: '2020-11-01' },
  { id: 23677, name: 'Test9', type: 'js', size: '1024', date: '2021-06-01' },
  { id: 23671, name: 'Test3', type: 'js', size: '1024', date: '2021-06-01' },
  { id: 23672, name: 'Test6', type: 'js', size: '1024', date: '2021-06-01' },
  { id: 23688, name: 'Test8', type: 'js', size: '1024', date: '2021-06-01' },
  { id: 23681, name: 'Test2', type: 'js', size: '1024', date: '2021-06-01' },
  { id: 23682, name: 'Test8', type: 'js', size: '1024', date: '2021-06-01' },
  { id: 24555, name: 'Test1', type: 'avi', size: '224', date: '2020-10-01' },
  { id: 24566, name: 'Test2', type: 'js', size: '1024', date: '2021-06-01' },
  { id: 24577, name: 'Test1', type: 'js', size: '1024', date: '2021-06-01' }
]

const gridOptions = reactive({
  height: 400,
  border: 'inner',
  showOverflow: true,
  treeConfig: {},
  columns: [
    { field: 'name', title: 'Name', treeNode: true },
    { field: 'size', title: 'Size' },
    { field: 'type', title: 'Type' },
    { field: 'date', title: 'Date' }
  ],
  data: allList
})

let idKey = 1
const handleGroupByField = (list, field) => {
  const result = []
  XEUtils.each(XEUtils.groupBy(list, field), (childList, field) => {
    result.push({
      id: idKey++,
      name: field,
      type: '',
      size: '',
      date: '',
      children: childList
    })
  })
  return result
}

const listToGroup = (field?: string) => {
  gridOptions.data = field ? handleGroupByField(allList, field) : allList
}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

按名称分组

效果如下
在这里插入图片描述

按时间分组

效果如下
在这里插入图片描述

还可以实现多字段数据分组

效果如下
在这里插入图片描述

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

闽ICP备14008679号