最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue使用vxe-table實(shí)現(xiàn)數(shù)據(jù)分組統(tǒng)計(jì)與表尾合計(jì)

 更新時(shí)間:2026年06月02日 08:17:51   作者:鹵蛋fg6  
在數(shù)據(jù)報(bào)表或管理系統(tǒng)中,經(jīng)常需要按某個(gè)字段對(duì)數(shù)據(jù)進(jìn)行分組,并計(jì)算每組的統(tǒng)計(jì)值(如求和、平均值),本文將通過一個(gè)完整的示例,演示如何使用vxe-table實(shí)現(xiàn)數(shù)據(jù)分組統(tǒng)計(jì)與表尾合計(jì),有需要的小伙伴可以了解下

在數(shù)據(jù)報(bào)表或管理系統(tǒng)中,經(jīng)常需要按某個(gè)字段對(duì)數(shù)據(jù)進(jìn)行分組,并計(jì)算每組的統(tǒng)計(jì)值(如求和、平均值),同時(shí)在表格底部顯示所有數(shù)據(jù)的合計(jì)。vxe-table 提供了靈活的聚合配置 aggregateConfig 和自定義計(jì)算函數(shù) calcValuesMethod,配合手動(dòng)表尾 footerData,可以輕松實(shí)現(xiàn)這類需求。

本文將通過一個(gè)完整的示例,演示如何按角色(role)對(duì)數(shù)據(jù)進(jìn)行分組,統(tǒng)計(jì)每個(gè)角色的 num 字段總和,并在表格尾部顯示所有數(shù)據(jù)的 num 總計(jì)。

屬性說明

配置項(xiàng) / 屬性所在位置作用
aggregateConfig.groupFields表格配置(gridOptions)指定分組字段,例如 ['role'],表格會(huì)按該字段對(duì)數(shù)據(jù)進(jìn)行分組,并在每個(gè)分組后插入“分組合計(jì)行”
aggregateConfig.calcValuesMethod表格配置自定義分組統(tǒng)計(jì)值計(jì)算函數(shù),接收當(dāng)前分組的子數(shù)據(jù)(children)和列信息(column),返回統(tǒng)計(jì)值
aggFunc列配置(columns)標(biāo)記該列需要參與聚合計(jì)算,配合分組統(tǒng)計(jì)使用
footerData表格配置手動(dòng)指定表尾合計(jì)行的數(shù)據(jù),適用于簡單的總計(jì)、平均值等,更復(fù)雜時(shí)可配合 updateFooter 方法動(dòng)態(tài)計(jì)算
rowGroupNode列配置標(biāo)識(shí)該列作為分組的顯示節(jié)點(diǎn),通常設(shè)置為 true,使分組后的行可以展開/折疊(示例中使用)

分組聚合需要同時(shí)設(shè)置 aggregateConfig.groupFields 和至少一列的 rowGroupNode: true,同時(shí)要聚合的列必須設(shè)置 aggFunc: true(或自定義聚合函數(shù))。

代碼

<template>
  <div>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>
<script setup>
import { reactive } from 'vue'
// 表尾合計(jì)行數(shù)據(jù)(手動(dòng)維護(hù)總計(jì))
const footerSummaryRow = reactive({
  seq: '總計(jì)',
  num: 0
})
const gridOptions = reactive({
  border: true,
  showOverflow: true,       // 超出顯示省略號(hào)
  showFooter: true,         // 開啟表尾
  height: 500,
  loading: false,
  // 分組聚合配置
  aggregateConfig: {
    groupFields: ['role'],   // 按角色字段分組
    // 自定義分組統(tǒng)計(jì)值的計(jì)算方法
    calcValuesMethod({ column, children }) {
      // 只對(duì) num 列進(jìn)行求和
      if (column.field === 'num') {
        let sum = 0
        children.forEach(item => {
          sum += item.num
        })
        return sum
      }
      // 其他列不統(tǒng)計(jì),返回 0 或空字符串
      return 0
    }
  },
  // 列定義
  columns: [
    { type: 'seq', width: 70, title: '序號(hào)' },
    { field: 'name', title: '姓名', minWidth: 150, rowGroupNode: true },  // 分組顯示節(jié)點(diǎn)
    { field: 'role', title: '角色', width: 120 },
    { field: 'num', title: '數(shù)量', width: 100, aggFunc: true },           // 參與聚合
    { field: 'age', title: '年齡', width: 80 },
    { field: 'address', title: '地址', minWidth: 200 }
  ],
  data: [],               // 動(dòng)態(tài)加載的數(shù)據(jù)
  footerData: [footerSummaryRow]   // 表尾數(shù)據(jù)
})
// 模擬異步加載數(shù)據(jù),并計(jì)算表尾總計(jì)
const loadData = () => {
  gridOptions.loading = true
  setTimeout(() => {
    const rawData = [
      { id: 10001, name: 'Test1', role: 'Develop', sex: 'Woman', age: 28, num: 63, date: '2025-02-01', address: 'test abc' },
      { id: 10002, name: 'Test2', role: 'Test', sex: 'Man', age: 22, num: 63, date: '2025-01-01', address: 'Guangzhou' },
      { id: 10003, name: 'Test3', role: 'PM', sex: 'Woman', age: 32, num: 10, date: '2025-05-01', address: 'Shanghai' },
      { id: 10004, name: 'Test4', role: 'Designer', sex: 'Man', age: 32, num: 24, date: '2025-01-01', address: 'test abc' },
      { id: 10005, name: 'Test5', role: 'Develop', sex: 'Man', age: 30, num: 98, date: '2025-01-01', address: 'Shanghai' },
      { id: 10006, name: 'Test6', role: 'Designer', sex: 'Man', age: 30, num: 46, date: '2025-03-01', address: 'test abc' },
      { id: 10007, name: 'Test7', role: 'Test', sex: 'Woman', age: 29, num: 35, date: '2025-05-01', address: 'test abc' },
      { id: 10008, name: 'Test8', role: 'PM', sex: 'Woman', age: 35, num: 84, date: '2025-11-01', address: 'test abc' },
      { id: 10009, name: 'Test9', role: 'Test', sex: 'Man', age: 21, num: 25, date: '2025-05-01', address: 'test abc' },
      { id: 10010, name: 'Test10', role: 'PM', sex: 'Woman', age: 28, num: 32, date: '2025-03-01', address: 'test abc' },
      { id: 10011, name: 'Test11', role: 'Test', sex: 'Woman', age: 29, num: 24, date: '2025-03-01', address: 'test abc' },
      { id: 10012, name: 'Test12', role: 'Develop', sex: 'Man', age: 37, num: 28, date: '2025-10-01', address: 'test abc' },
      { id: 10013, name: 'Test13', role: 'Test', sex: 'Woman', age: 24, num: 38, date: '2025-02-01', address: 'test abc' },
      { id: 10014, name: 'Test14', role: 'Develop', sex: 'Man', age: 34, num: 46, date: '2025-08-01', address: 'test abc' },
      { id: 10015, name: 'Test15', role: 'Designer', sex: 'Man', age: 21, num: 48, date: '2025-05-01', address: 'test abc' },
      { id: 10016, name: 'Test16', role: 'Designer', sex: 'Woman', age: 21, num: 59, date: '2025-10-01', address: 'test abc' },
      { id: 10017, name: 'Test17', role: 'Test', sex: 'Man', age: 31, num: 81, date: '2025-12-01', address: 'test abc' },
      { id: 10018, name: 'Test18', role: 'Develop', sex: 'Woman', age: 32, num: 75, date: '2025-10-01', address: 'test abc' },
      { id: 10019, name: 'Test19', role: 'Test', sex: 'Man', age: 37, num: 80, date: '2025-02-01', address: 'test abc' },
      { id: 10020, name: 'Test20', role: 'Develop', sex: 'Man', age: 41, num: 60, date: '2025-03-01', address: 'test abc' }
    ]
    // 計(jì)算總計(jì)(num 總和)
    let totalNum = 0
    rawData.forEach(row => {
      totalNum += row.num
    })
    footerSummaryRow.num = totalNum
    gridOptions.data = rawData
    gridOptions.loading = false
  }, 200)
}
// 調(diào)用加載
loadData()
</script>

實(shí)現(xiàn)思路

  • 分組顯示:表格會(huì)按 role 字段將數(shù)據(jù)分組,同一角色的數(shù)據(jù)連續(xù)排列,并在每個(gè)分組前顯示一個(gè)可展開/折疊的分組行(分組標(biāo)題行)。
  • 分組統(tǒng)計(jì)行:在每個(gè)分組的末尾,自動(dòng)插入一行“分組合計(jì)”,其中 num 列顯示該組內(nèi)所有 num 值的總和(由 * calcValuesMethod 自定義計(jì)算)。 表尾總計(jì):表格底部固定一行(footerData),顯示所有數(shù)據(jù)的 num 總計(jì)。該總計(jì)需要手動(dòng)從數(shù)據(jù)源計(jì)算并賦值。

vxe-table 通過 aggregateConfig 和 aggFunc 提供了強(qiáng)大的分組聚合能力,結(jié)合自定義計(jì)算函數(shù) calcValuesMethod 可以滿足任意復(fù)雜的統(tǒng)計(jì)需求。而表尾合計(jì)通過 footerData 手動(dòng)維護(hù),靈活直觀。兩者配合使用,能夠快速搭建具有分組統(tǒng)計(jì)和總計(jì)功能的專業(yè)數(shù)據(jù)表格。

到此這篇關(guān)于Vue使用vxe-table實(shí)現(xiàn)數(shù)據(jù)分組統(tǒng)計(jì)與表尾合計(jì)的文章就介紹到這了,更多相關(guān)Vue vxe-table數(shù)據(jù)分組統(tǒng)計(jì)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue-resource?獲取本地json數(shù)據(jù)404問題的解決

    vue-resource?獲取本地json數(shù)據(jù)404問題的解決

    這篇文章主要介紹了vue-resource?獲取本地json數(shù)據(jù)404問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue.js快速入門教程

    Vue.js快速入門教程

    Vue.js是一個(gè)專注于視圖模型(ViewModal)的框架。接下來給大家?guī)砹藇ue.js快速入門教程,非常不錯(cuò),具有參考借鑒價(jià)值,一起看看吧
    2016-09-09
  • Vite?Vue3?EsLint?Prettier配置步驟極簡方法詳解

    Vite?Vue3?EsLint?Prettier配置步驟極簡方法詳解

    這篇文章主要為大家介紹了Vite?Vue3?EsLint?Prettier配置步驟的極簡方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Vue中組件(Component)和插件(Plugin)的區(qū)別及說明

    Vue中組件(Component)和插件(Plugin)的區(qū)別及說明

    這篇文章主要介紹了Vue中組件(Component)和插件(Plugin)的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • vue項(xiàng)目打包時(shí)自動(dòng)更新版本號(hào)的實(shí)現(xiàn)方法

    vue項(xiàng)目打包時(shí)自動(dòng)更新版本號(hào)的實(shí)現(xiàn)方法

    本文主要介紹了vue項(xiàng)目打包時(shí)自動(dòng)更新版本號(hào)的實(shí)現(xiàn)方法,通過在根目錄下創(chuàng)建autoVersion.js腳本文件,頁面獲取版本號(hào)時(shí)直接使用,修改package.json配置,感興趣的可以了解一下
    2025-02-02
  • vue使用axios實(shí)現(xiàn)excel文件下載的功能

    vue使用axios實(shí)現(xiàn)excel文件下載的功能

    這篇文章主要介紹了vue中使用axios實(shí)現(xiàn)excel文件下載的功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Vue3基于?rem?比例縮放方案示例詳解

    Vue3基于?rem?比例縮放方案示例詳解

    這篇文章主要介紹了Vue3基于rem比例縮放方案,本縮放方案置于hooks中即可,文中通過示例代碼介紹了vue-cli3 中使用rem布局的方法,需要的朋友可以參考下
    2023-05-05
  • vue前端框架—Mint UI詳解(更適用于移動(dòng)端)

    vue前端框架—Mint UI詳解(更適用于移動(dòng)端)

    這篇文章主要介紹了vue前端框架—Mint UI的詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Vue-router路由該如何使用

    Vue-router路由該如何使用

    這篇文章主要介紹了Vue-router路由該如何使用,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • Vue3-KeepAlive,多個(gè)頁面使用keepalive方式

    Vue3-KeepAlive,多個(gè)頁面使用keepalive方式

    這篇文章主要介紹了Vue3-KeepAlive,多個(gè)頁面使用keepalive方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評(píng)論

株洲市| 峡江县| 淮滨县| 麻栗坡县| 徐州市| 全州县| 平远县| 中江县| 白水县| 宁河县| 台湾省| 东台市| 乌海市| 门头沟区| 佳木斯市| 抚松县| 临泽县| 独山县| 安岳县| 潜山县| 含山县| 南投市| 日喀则市| 华宁县| 林周县| 福安市| 高雄市| 韶关市| 宁蒗| 察隅县| 芜湖市| 镇宁| 新沂市| 浪卡子县| 台州市| 丹棱县| 元朗区| 鹰潭市| 云梦县| 南华县| 霍林郭勒市|