Vue表格自定义合计、小计功能

 一、合计

<template> 
<avue-crud
          :option="optiondata"
          :table-loading="loading"
          :data="testdata"
          :page.sync="page"
          :span-method="spanMethod"
          ref="cruddata"
          @current-change="currentChangedata"
          @size-change="sizeChangedata"
          @on-load="echaerinfo"
        ></avue-crud>

</template>

<script>
export default {
  data() {
    return {
          // 表格的属性
      optiondata: {
        height: 'auto',
        calcHeight: 30,
        tip: false,
        searchShow: false,
        searchMenuSpan: 6,
        menu: false,
        border: true,
        // index: true,
        // indexLabel: '序号',
        viewBtn: false,
        addBtn: false,
        delBtn: false,
        editBtn: false,
        selection: false,
        header: false,
        column: [
          {
            label: '分区级别',
            prop: 'areaLevel',
            dicUrl: '/api/blade-system/dict-biz/dictionary?code=area_level',
            props: {
              label: 'dictValue',
              value: 'dictKey',
            },
            // formatter: (row) => {
            //   return row.areaLevel == 'first_level'
            //     ? '一级'
            //     : row.areaLevel == 'second_level'
            //     ? '二级'
            //     : '三级'
            // },
          },
          {
            label: '分区名称',
            prop: 'areaName',
          },
          {
            label: '供水量(m³)',
            prop: 'totalWaterSupply',
            value: 'all',
          },
          {
            label: '用水量(m³)',
            prop: 'totalWaterUse',
          },
          // {
          //   label: '售水量(m³)',
          //   prop: 'meteredWaterConsum',
          //   value: 'all',
          // },
          {
            label: '漏损水量(m³)',
            prop: 'leakWaterConsum',
            type: 'number',
          },
          {
            label: '漏损率(%)',
            prop: 'leakRatio',
            type: 'number',
          },
          {
            label: '漏损率同比',
            prop: 'yearOnYearDiff',
            type: 'number',
          },
          {
            label: '漏损率环比',
            prop: 'linkRelativeDiff',
            type: 'number',
          },
        ],
      },
      testdata: [
        {
          areaLevel: 1,
          areaName: 'aaa11',
          leakRatio: 10,
          leakWaterConsum: 1,
        },
        {
          areaLevel: 1,
          areaName: 'aaa22',
          leakRatio: 10,
          leakWaterConsum: 1,
        },
        {
          areaLevel: 2,
          areaName: 'aaa33',
          leakRatio: 10,
          leakWaterConsum: 1,
        },
        {
          areaLevel: 2,
          areaName: 'aaa44',
          leakRatio: 10,
          leakWaterConsum: 1,
        },
        {
          areaLevel: 2,
          areaName: 'aaa55',
          leakRatio: 10,
          leakWaterConsum: 1,
        },
        {
          areaLevel: 2,
          areaName: 'aaa66',
          leakRatio: 10,
          leakWaterConsum: 1,
        },
        {
          areaLevel: 3,
          areaName: 'aaa77',
          leakRatio: 10,
          leakWaterConsum: 1,
        },
        {
          areaLevel: 3,
          areaName: 'aaa88',
          leakRatio: 10,
          leakWaterConsum: 1,
        },
        {
          areaLevel: 3,
          areaName: 'aaa99',
          leakRatio: 10,
          leakWaterConsum: 1,
        },
        {
          areaLevel: 3,
          areaName: 'aaa10',
          leakRatio: 10,
          leakWaterConsum: 1,
        },
      ],
  }

 // 合计
    getSummary() {
      let sums = {} // 合计行
      // 遍历属性
      this.optiondata.column.forEach((item) => {
        let prop = item.prop
        if (['areaLevel', 'areaName'].includes(prop)) {
          sums[prop] = ''
        } else {
          let values = this.testdata.map((ele) => Number(ele[prop] || 0)) // 将数组中同一 
  属性的值构成一个新的数组
          // 计算各个属性的值的总和
          sums[prop] =
            values.length > 0
              ? values.reduce((a, b) => {
                  return a + b
                })
              : 0
        }
      })
      this.testdata.push(sums) // 将总计行插入数组最后一行
    },


}
</script>

效果图:

二、各分类小计

// 小计
    getSum() {
      let newArr = [] // 新数组
      let currentArr = [] // 临时数组(同一个分类的)
      let currentLevel = this.testdata[0].areaLevel // 根据属性为 'areaLevel' 进行分组
      this.testdata.forEach((item, i) => {
        if (item.areaLevel == currentLevel) {
          currentArr.push(item)
        } else {
          newArr = newArr.concat(currentArr)
          newArr.push(this.getPropSums(currentArr, i)) // 新增一行这个分类的小计
          currentArr = [] // 清空临时数组
          currentLevel = item.areaLevel // 更新当前的分类(areaLevel)
          currentArr.push(item)
        }
      })
      newArr = newArr.concat(currentArr) // 将最后一组分类 push 进来
      newArr.push(this.getPropSums(currentArr, this.testdata.length)) // 将最后一组分类的小计插入最后一行
      this.testdata = newArr
    },

    // 计算各个属性的小计
    getPropSums(currentArr, i) {
      let sums = {}
      this.optiondata.column.forEach((item) => {
        let prop = item.prop
        if (!['areaLevel', 'areaName'].includes(prop)) {
          let values = currentArr.map((ele) => Number(ele[prop] || 0))
          sums[prop] =
            values.length > 0
              ? values.reduce((a, b) => {
                  return a + b
                })
              : 0
        }
        sums['areaLevel'] = this.testdata[i - 1].areaLevel
        sums['areaName'] = '小计'
      })
      return sums
    },

效果图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/241850.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity | Shader基础知识(第四集:Shader结构体)

一、本节介绍 上一集&#xff0c;我们做了一个案例&#xff0c;这一集&#xff0c;我们继续讲一个语法&#xff0c;在shader里写结构体。 二、结构体的需求 1.shader里是不好随便去声明数据的&#xff0c;我们前面传入数据时&#xff0c;用的是括号传入&#xff08;如图&…

Redis怎么测?这篇文章写的太全了

Redis是一个高性能、内存数据库和缓存系统&#xff0c;在开发和生产环境中被广泛应用。本文将介绍如何进行有效的Redis软件测试&#xff0c;以确保其稳定性、高性能和可靠性。 Redis作为一种非关系型数据库和缓存系统&#xff0c;被广泛用于支持高流量、低延迟的应用。为了保证…

iic应用篇

一.iic的优点 1. IIC总线物理链路简单&#xff0c;硬件实现方便&#xff0c;扩展性非常好&#xff08;1个主机控制器可以根据需求增加从机数量&#xff0c;同时删减从机数量也不会影响总线通信&#xff09;&#xff1b;IIC总线只需要SDA和SCL两条信号线&#xff0c;相比于PCI/…

锂电池基础知识及管理方式总结

这两天在排查一个锂电池无法充电的问题&#xff0c;用的是电池管理芯片BQ25713&#xff0c;网上相关的资料也很少&#xff0c;查看数据手册时&#xff0c;里面也有很多术语参数等不是很理解&#xff0c;所以&#xff0c;在此对锂电池的基础知识做个简单的总结&#xff0c;方面后…

详解Django+Vue+Docker搭建接口测试平台实战

一. 开头说两句 正好接口自动化测试平台需要迁移到新的测试服务器上&#xff0c;就想要体验一番Docker的“一次构建&#xff0c;处处运行”。这篇文章简单介绍了下这次部署的过程&#xff0c;其中使用了Dockerfile定制镜像和Docker-Compose多容器编排。 二. 项目介绍 项目采…

Python-乒乓球小游戏【附完整源码】

乒乓球小游戏 乒乓球小游戏是一个简单而有趣的2D页面交互式游戏&#xff0c;玩家可以通过键盘输入来控制球拍上下移动来接球&#xff0c;从而体验乒乓球的乐趣。该游戏有单人和双人两种模式 运行效果&#xff1a; 一&#xff1a;主程序&#xff1a; import sys import cfg …

app自动化测试(Android)

Capability 是一组键值对的集合&#xff08;比如&#xff1a;"platformName": "Android"&#xff09;。Capability 主要用于通知 Appium 服务端建立 Session 需要的信息。客户端使用特定语言生成 Capabilities&#xff0c;最终会以 JSON 对象的形式发送给 …

芝麻杂草目标检测数据集VOC+YOLO格式近1300张

芝麻&#xff0c;芝麻科芝麻属的一年生草本植物&#xff0c;茎中空或具白色髓部&#xff1b;叶子为卵形&#xff1b;花朵单生或少数同生于腋下&#xff0c;呈白色&#xff1b;芝麻蒴果基部钝圆&#xff0c;顶部有尖&#xff0c;中间有棱&#xff1b;芝麻的种子通常呈扁平椭圆形…

k8s-service 7

由控制器来完成集群的工作负载&#xff0c;service&#xff08;微服务&#xff09;是将工作负载的应用暴露出去&#xff0c;从而解决访问问题 作用&#xff1a;无论是在集群内还是集群外&#xff0c;都可以访问pod上的应用&#xff0c;其实现对集群内的应用pod自动发现和负载均…

Linux面试题分享:从入门到精通的全面指南

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Llama2-Chinese-7b-Chat安装部署

文章目录 前言一、文件介绍 &#x1f4c1;二、环境配置 ♟三、Llama2-Chinese-7b-Chat下载 ⏬总结 前言 本文主要介绍如何使用Llama2-Chinese-7b-Chat&#xff0c;最后的效果如图所示&#xff1a; 一、文件介绍 &#x1f4c1; ⬇️ 下载地址&#xff1a;https://pan.baidu.…

软件测试工程师要掌握哪些专业技能

1.软件测试理论知识&#xff1a;掌握软件测试的基本概念、测试方法、测试技术和测试流程&#xff0c;包括黑盒测试、白盒测试、性能测试、安全测试等。 2.编程语言和脚本语言&#xff1a;掌握至少一种编程语言和脚本语言&#xff0c;例如Java、Python、JavaScript等。 3.自动化…

微服务网关Gateway

springcloud官方提供的网关组件spring-cloud-starter-gateway,看pom.xml文件,引入了webflux做响应式编程,请求转发用到了netty的reactor模型。hystrix停止维护后,官方推荐resilience4j做服务熔断,网关这里也能看到依赖。 对于网关提供的功能,大方向上主要是服务路由转发…

mybatis动态SQL-choose-when-otherwise

1、建库建表 create database mybatis-example; use mybatis-example; create table emp (empNo varchar(40),empName varchar(100),sal int,deptno varchar(10) ); insert into emp values(e001,张三,8000,d001); insert into emp values(e002,李四,9000,d001); insert into…

从零开始搭建企业管理系统(三):集成 Spring Data Jpa

集成 Spring Data Jpa 什么是 Jpa什么是 Spring Data Jpa什么是 HibernateJPA、Spring Data Jpa、Hibernate 之间的关系集成 Spring Data JpaPOM 依赖配置文件UserEntity启动程序Jpa 配置Jpa 注解UserRepositoryUserServiceUserServiceImplUserControllerBaseEntity 什么是 Jpa…

YOLOv8-Seg改进:ASF-YOLO助力小目标分割| 2023年12月最新成果

🚀🚀🚀本文改进: ASF-YOLO一种新的特征融合网络架构,该网络由两个主要的组件网络组成,可以为小目标分割提供互补的信息:(1)SSFF模块,它结合了来自多尺度图像的全局或高级语义信息;(2)TFE模块,它可以捕获小目标的局部精细细节等 🚀🚀🚀YOLOv8-seg创新专栏:ht…

什么是接口测试?如何做接口测试

接口测试是指对系统或应用程序接口进行测试&#xff0c;以验证接口的功能、可靠性、性能、安全性等方面的需求是否被满足。接口测试可以用于测试不同系统、模块、组件之间的交互和通信&#xff0c;包括 Web 接口、网络接口、数据库接口等。其重点是测试数据传输、数据格式、数据…

CTF竞赛二进制类题型解析(逆向工程、二进制漏洞利用、缓冲区溢出)

在CTF&#xff08;Capture The Flag&#xff09;竞赛中&#xff0c;二进制&#xff08;Binary&#xff09;类题型通常涉及逆向工程、二进制漏洞利用、缓冲区溢出等方面的挑战。这些题目考验参赛者对底层编程和系统安全的理解。以下是15道二进制类题目及其标准答案&#xff0c;并…

【深度学习】PHP操作mysql数据库总结

一.PHP数据库的扩展分类 1.MySQL 扩展是针对 MySQL 4.1.3 或更早版本设计的&#xff0c;是 PHP 与 MySQL数据库交互的早期扩展。由于其不支持 MySQL 数据库服务器的新特性&#xff0c;且安全性差&#xff0c;在项目开发中不建议使用&#xff0c;可用 MySQLi 扩展代替。 2.MySQ…

python:五种算法(PSO、RFO、HHO、WOA、GWO)求解23个测试函数(python代码)

一、五种算法简介 1、粒子群优化算法PSO 2、红狐优化算法RFO 3、哈里斯鹰优化算法HHO 4、鲸鱼优化算法WOA 5、灰狼优化算法GWO 二、5种算法求解23个函数 &#xff08;1&#xff09;23个函数简介 参考文献&#xff1a; [1] Yao X, Liu Y, Lin G M. Evolutionary program…