一、思路步骤:

  1. 根据后台传输的数据进行格式转化;
  2. 索引为多少的时候进行跨行;
        <table id="table">
<thead>
<tr>
<th class="field">领域</th>
<th class="task">任务目标</th>
<th class="shorttask">短期目标</th>
<th class="standard">成功标准</th>
<th class="remask">教学情景</th>
<th class="remask">开始时间</th>
<th class="remask">结束时间</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in datafilter(fieldlist) " :key="index">
<td v-if="getfieldRow(index).flag" :rowspan="getfieldRow(index).value">{{ item.field }}</td>
<td v-if="gettaskRow(index).flag" :rowspan="gettaskRow(index).value">{{ item.task }}</td>
<td>{{ item.shortgoal_item }}</td>
<td>{{ item.standard }}</td>
<td v-if="getfieldRow(index).flag" :rowspan="getfieldRow(index).value">单训课、家庭康复指导</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

二、后台json数据格式:

"fieldlist": [
            {
                "field": "A领域",
                "tasklist": [
                    {
                        "task": "任务目标A1",
                        "shortgoal": [
                            {
                                "shortgoal_item": "短期目标1",
                                "standard": "成功标准"
                            },
                            {
                                "shortgoal_item": "短期目标2",
                                "standard": "成功标准"
                            }
                        ]
                    },
                      {
                        "task": "任务目标A2",
                        "shortgoal": [
                            {
                                "shortgoal_item": "短期目标1",
                                "standard": "成功标准"
                            },
                            {
                                "shortgoal_item": "短期目标2",
                                "standard": "成功标准"
                            },
                              {
                                "shortgoal_item": "短期目标3",
                                "standard": "成功标准"
                            }
                        ]
                    }
                ]
            }
      
        ]
三、方法
  1. datafilter方法对后台数据进行转化成一个数组装所有的内容对象;
  2. getallRow方法得到表格总共有多少行;
  3. gettaskRow、getfieldRow方法进行计算某一列中的哪一行需要跨行(rowspan)
    datafilter(fieldlist) {
let arr = []
for (let item of fieldlist) {
for (let i of item.tasklist) {
for (let j of i.shortgoal) {
arr.push({
field: item.field,
task: i.task,
shortgoal_item: j.shortgoal_item,
standard: j.standard
})
}
} }
console.log(arr)
console.log(arr.length)
return arr
},
getallRow() { let allnumbers = 0
for (let item of this.fieldlist) {
for (let i of item.tasklist) {
allnumbers = allnumbers + i.shortgoal.length
}
}
return allnumbers
},
gettaskRow(inx) {
let index = 0
let dict = {}
let dictfliter = {}
for (let item of this.fieldlist) {
for (let i = -1; i < item.tasklist.length - 1; i++) {
index = index + item.tasklist[i + 1].shortgoal.length
dict[index] = item.tasklist[i + 1].shortgoal.length
}
}
for (let item = 0; item < Object.keys(dict).length; item++) {
if (item == 0) {
dictfliter["0"] = Number(Object.keys(dict)[item])
dictfliter[Object.keys(dict)[item]] = Object.values(dict)[item + 1]
} else {
dictfliter[Object.keys(dict)[item]] = Object.values(dict)[item + 1]
}
}
// console.log(dictfliter)
return {flag: dictfliter.hasOwnProperty(inx), value: dictfliter[inx]}
},
getfieldRow(inx) {
let count = 0
let dict = {}
for (let item of this.fieldlist) {
let index = 0
for (let i of item.tasklist) {
index = index + i.shortgoal.length //计算某个领域对应的所有短期目标的条目
}
dict[count] = index
count = count + index
}
// console.log(dict)
return {flag: dict.hasOwnProperty(inx), value: dict[inx]}
},

博主,暂时没有想到更好的方法进行跨行跨列动态表格的生成,若有大家更好的建议,欢迎大家留言~

vue跨行跨列动态表格生成的更多相关文章

  1. latex制作表格-跨行跨列

    1.列的合并,使用 \multicolumn{跨几列}{格式}{填充内容} \documentclass[UTF8]{ctexart} \begin{document} 三囚犯问题进行300次实验后\ ...

  2. vue:使用element-ui制作动态表格

    参考; https://github.com/PanJiaChen/vue-element-admin/blob/master/src/views/table/dynamic-table/compon ...

  3. javascript 将 table 导出 Excel ,可跨行跨列

    <script language="JavaScript" type="text/javascript"> //jQuery HTML导出Excel ...

  4. vue+element项目中动态表格合并

    需求:elementui里的table虽然有合并函数(:span-method),单基本都是设置固定值合并.现在有一个树型结构的数据,要求我们将里面的某个list和其他属性一起展开展示,并且list中 ...

  5. Excel中复杂跨行跨列数据

    XSSFWorkbook wb = new XSSFWorkbook(); // 工作表 XSSFSheet sheet = wb.createSheet("车辆使用情况统计"); ...

  6. Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)

    Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成) 动态表单生成 ElementUI官网引导 Element表单生成 Element动态增减表单,在线代码 关键配置 templa ...

  7. vue原生表格怎样实现动态列及表格数据下载

    最近项目经常用到带有合并效果以及动态列的表格,而翻阅iview和element-ui官网没有找到合适的(也有可能自己的水平有限,不会改写),所以只好自己用原生表格写了一个,具体效果如下: 这个表格右侧 ...

  8. Latex 表格(跨行、跨列、背景加灰)new

    一. 效果如图 二.代码如下 1. 首部增加宏包: \usepackage{multirow} 2. 正文部分增加: \begin{table} \centering \caption{Suspici ...

  9. HTML表格跨行、跨列操作(rowspan、colspan)

    转自:https://blog.csdn.net/u012724595/article/details/79401401 一般使用<td>元素的colspan属性来实现单元格跨列操作,使用 ...

  10. colspan是跨列,rowspan是跨行

    colspan是跨列,rowspan是跨行,可以看作是网页设计表格中的列和行的一个属性.跨列相当于把两列或者多列合并成一个单元格:跨行同理是把两行或者多行合并成一行:colspan和rowspan分别 ...

随机推荐

  1. 一文教会你mock(Mockito和PowerMock双剑合璧)

    作者:京东物流 杨建民 1.什么是Mock Mock有模仿.伪造的含义.Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.mock工具使用 ...

  2. Java用户交互方法——Scanner

    Scanner用户交互 使用Next方法接收 Scanner scanner = new Scanner(System.in); if(scanner.hasNext()){//判断用户有无输入 St ...

  3. [深度探索C++对象模型]memcpy和memset注意事项

    不管使用memcpy()还是memset(),都只有在"classes不含任何由编译器产生的内部members"时才能运行.如果这个类声明一个或者一个以上的virtual func ...

  4. Django推导流程,Django模块的下载和基本使用、Django的应用和目录结构讲解、Django三板斧

    今日内容 纯手撸web框架 1.web框架的本质: 理解1:连接前端与数据库的中间介质 理解2:socket服务端 2.手写web框架: 1.编写socket服务端代码 import socket s ...

  5. ArcGIS实现打点、线路图、色块、自定义弹窗

    闲聊: 马上就要过年了,不知道大家过年都放几天假,小颖公司就只放8天假,就这还有一天是集体调休扣年假,就很··············还不如不放,不过庆幸最近这两周项目也做完了也没啥事,不然就静不下心 ...

  6. windows使用管理员权限安装软件

    安装步骤 系统搜索 cmd 点击右键,使用管理者方式运行 输入用户名密码 成功以管理员身份运行 cd 到软件存储的目录 输入软件执行文件名, 按回车键,成功开始安装

  7. Java基础学习笔记-数据类型、数制

    数据类型,跟JS感觉差异不是很大,但是有个String不是很一样的样子 数据类型分为 基本数据类型和复合数据类型 基本数据类型分为下面三种 数值类型 1.整数类型:byte,short,int,lon ...

  8. Consumer接口-Consumer接口的默认方法andThen

    Consumer接口 java.util.function.Consumer<T〉接口则正好与Supplier接口相反,它不是生产一个数据,而是消费一个数据,其数据类型由泛型决定. 抽象方法:a ...

  9. 重写Object类的equals方法-Objects类的equals方法

    重写Object类的equals方法 Object类的equals方法默认比较的是两个对象的地址值,没有意义所以我们学要重写equals方法,比较两个对象的属性值(name,age) 对象的属性值一样 ...

  10. you-get下载B站视频

    you-get下载B站视频 库存 you-get介绍 https://github.com/soimort/you-get you-get是一个命令行工具,可以下载知名网站的视频 支持的网站有  ht ...