首页 > 其他分享 >vue3 + arco design vue 表身单元格合并

vue3 + arco design vue 表身单元格合并

时间:2024-07-23 10:51:01浏览次数:11  
标签:vue title rowIndex 单元格 value 表身 let dataIndex tableData

表格展示效果如下图:

后端返回的数据格式如下

arco design vue单元格合并还挺复杂的,今天接到这个需求时,还是有点无从下手,后来经过一些列尝试之后得出如下代码

<a-table
  class="table-data"
  :data="tableData"
  :bordered="{wrapper: true, cell: true}"
  :span-method="dataSpanMethod"
  :columns="tableColumns"
  :pagination="false"
  :scroll="{ y: '35rem' }"
/>
const tableData = ref([])
const tableColumns = ref([
  {
    title: "Module/Framework",
    dataIndex: "module",
    align: 'center'
  },
  {
    title: "Pid",
    dataIndex: "id",
    align: 'center'
  },
  {
    title: "Thread/Module",
    dataIndex: "thread",
    slotName: "thread",
    align: 'center'
  },
  {
    title: "Avg",
    dataIndex: "avg",
    align: 'center'
  },
  {
    title: "2sigma",
    dataIndex: "sigma2",
    align: 'center'
  },
  {
    title: "3sigma",
    dataIndex: "sigma3",
    align: 'center'
  },
  {
    title: "Max",
    dataIndex: "max",
    align: 'center'
  }
])
//将接口返回的数据转化为对应要求的格式
const transformDataTable = (transformData) => {
  let newData = []
  for (let item1 in transformData) { // 遍历模块(如FDI、MAF)
    let subModules = transformData[item1]

    for( let item2 in subModules){ // 遍历子模块(如1984、2162、2164)
      let subThread = subModules[item2]

      for(let item3 in subThread){
        const stats = subThread[item3]

        const newDataObject = {
          module: item1,
          thread: item3,
          id: item2,
          avg: stats[0],
          sigma2: stats[1],
          sigma3: stats[2],
          max: stats[3]
        }
        newData.push(newDataObject)
      }
    }
  }
  return newData
}

//单元格合并函数

const dataSpanMethod = ({ record, column, rowIndex }) => {
  if (column.dataIndex === 'module') {
    // 如果是第一行或者当前记录的模块与上一行的不同
    if (rowIndex === 0 || tableData.value[rowIndex].module !== tableData.value[rowIndex - 1].module) {
      let rowCount = 1
      // 计算下面有多少行是相同的模块
      for (let i = rowIndex + 1; i < tableData.value.length; i++) {
        if (tableData.value[i].module === record.module) {
          rowCount++
        } else {
          break
        }
      }
      return {
        rowspan: rowCount,
        colspan: 1
      }
    } else {
      // 如果当前记录的模块与上一行的相同,则这个单元格不应被渲染
      return {
        rowspan: 0,
        colspan: 0
      }
    }
  } else if (column.dataIndex === 'id') {
    // 如果是第一行或者当前记录的模块与上一行的不同
    if (rowIndex === 0 || tableData.value[rowIndex].id !== tableData.value[rowIndex - 1].id) {
      let rowCount = 1
      // 计算下面有多少行是相同的模块
      for (let i = rowIndex + 1; i < tableData.value.length; i++) {
        if (tableData.value[i].id === record.id) {
          rowCount++
        } else {
          break
        }
      }
      return {
        rowspan: rowCount,
        colspan: 1
      }
    } else {
      // 如果当前记录的模块与上一行的相同,则这个单元格不应被渲染
      return {
        rowspan: 0,
        colspan: 0
      }
    }
  }
}

标签:vue,title,rowIndex,单元格,value,表身,let,dataIndex,tableData
From: https://www.cnblogs.com/twq46/p/18317803

相关文章

  • vue基础知识
    Vue.js是一个用于构建用户界面的渐进式JavaScript框架。以下是Vue.js开发的基础知识:1.Vue实例在Vue中,一切都是从创建一个Vue实例开始的:varvm=newVue({//选项});2.数据与方法Vue实例的数据对象:vardata={a:1}varvm=newVue({el:'#example',......
  • vue的运行过程和各阶段分析
    Vue.js的运行过程可以分为以下几个主要步骤:1.初始化阶段a.解析模板(TemplateParsing)Vue.js使用HTML-based模板语法,当创建一个Vue实例时,它会将提供的模板字符串编译成渲染函数(renderfunction)。这个过程包括了将模板中的指令(如v-if、v-for)和插值表达式(如{{message......
  • 【vue+jdbc实现数据库操作java web前后分离版】
    创建数据库droptableifexistsusers;createtableusers(idbigint(20)notnullauto_incrementcomment'用户id',usernamevarchar(100)default''comment'用户名',phone......
  • vue项目打包以及在nginx中部署
    ——————vue项目打包点击npm脚本下的build中的三角即可没有npm脚本的话点下package.json,还没有的参考博客https://www.cnblogs.com/yansans/p/18303172 稍微等一会,打包完成后数据会放在新生成的dist目录中  打包结束  ——————在nginx中部署在文件夹......
  • java毕业设计-基于springboot+vue的校园二手交易系统,基于java的校园二手交易系统,基于j
    文章目录前言演示视频项目背景项目架构和内容获取(文末获取)具体实现截图前台功能管理后台技术栈具体功能模块设计系统需求分析可行性分析系统测试为什么我?关于我我自己的网站前言博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业......
  • 基于java+springboot+vue实现的公司日常考勤系统(文末源码+Lw)132
     基于SpringBoot+Vue的实现的公司日常考勤系统(源码+数据库+万字Lun文+流程图+ER图+结构图+开题报告+演示视频+软件包)选题背景及意义:分析企业的考勤管理系统过程可以看到,考勤管理系统中主要要解决的是:1.考勤信息的管理;2.考勤、出勤信息的请假及申请;3.给系统设定用户登录权......
  • 基于java+springboot+vue实现的在线课程管理系统(文末源码+Lw)133
     基于SpringBoot+Vue的实现的在线课程管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:本在线课程管理系统有管理员,教师,学生。管理员功能有个人中心,学生管理,教师管理,在线课程管理,课件信息管理,知识要点管理,教学计划管理,考试大纲管理,科目类型管理,......
  • 基于java+springboot+vue实现的在线课程管理系统(文末源码+Lw)133
     基于SpringBoot+Vue的实现的在线课程管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:本在线课程管理系统有管理员,教师,学生。管理员功能有个人中心,学生管理,教师管理,在线课程管理,课件信息管理,知识要点管理,教学计划管理,考试大纲管理,科目类型管理,......
  • 稍微整理一下前端面试可能会问的八股--VUE
    Vue基础Vue实例和生命周期Vue实例的创建过程。各个生命周期钩子的作用及其应用场景。--生命周期少不了,和vue2的区别等模板语法插值和指令(如v-bind、v-if、v-for、v-model等)。计算属性和侦听器计算属性(computed)和方法(methods)的区别。--必会侦听器(watch)的使......
  • vite+vue3+ts+pinis搭建项目框架
    一:使用vite快速创建脚手架1.创建新项目命令行输入后,依次选择vue->typescript。1yarncreatevitevite_vue3_typescript_pinia_template--template2.cd 到项目文件,安装依赖,启动项目1#进入项目文件夹2cdvite_vue3_typescript_pinia_template3#安装依赖4y......