动态获取数据合并el-row和el-col

原本后台返回数据都是各自独立,互不影响的,数据结构如图:

[{
                       "mainContent": "AA",
                      "secondContent": "b",
                      "testProject": "日常运行",
                      "result": "",
                      "note": ""
                      },
                      {
                      "mainContent": "AA",
                      "secondContent": "b",
                      "testProject": "哈哈哈哈哈哈哈哈哈哈",
                      "result": "",
                      "note": ""
                      },
					  {
                      "mainContent": "AA",
                      "secondContent": "c",
                      "testProject": "哈哈哈哈哈哈哈哈哈哈",
                      "result": "",
                      "note": ""
                      }
]

若是一条一条数据显示出来是这样的:

想要实现相同内容合并,如图:

关键点在于,将原本没有关系的一条一条的数据进行相应处理,就是改变一下数据结构(如果后台可以给你提供理想的数据结构就不用改了,直接用),这里主要是写如何让前端自己处理数据,实现动态合并。

想要的数据结构为:

解释一下:就是将mainContent相同的数据单独提取出来,到时候页面显示就显示一条,而这条mainContent的行高需要动态渲染,依据mainContent相同的数据的条数(length1)。

若secondContent也相同,也需要合并,将secondContent单独提取出来,里面存放对应的每条需要合并的内容(content),secondContent的行高需要动态渲染,依据content相同数据的条数(length)。

具体的后台返回数据不变,到时候直接遍历显示就好。

{
  "head": [
    {
      "projectName": "热介质锅炉年度检验报告",
      "mainContent": "安全附件和仪表",
      "length1": "4",
      "secondContent": [
        {
          "content": "安全阀",
          "length": "2"
        },
        {
          "content": "压力表",
          "length": "2"
        }
      ],
      "data": [
        {
          "mainContent": "AA",
          "secondContent": "b",
          "testProject": "日常运行",
          "testResult": "",
          "testRemark": ""
        },
        {
          "mainContent": "AA",
          "secondContent": "b",
          "testProject": "安全阀是否在检验有效期",
          "testResult": "",
          "testRemark": ""
        },
        {
          "mainContent": "AA",
          "secondContent": "c",
          "testProject": "是否泄露",
          "testResult": "",
          "testRemark": ""
        },
        {
          "mainContent": "AA",
          "secondContent": "c",
          "testProject": "外观",
          "testResult": "",
          "testRemark": ""
        }
      ]
    },
    {
      "mainContent": "安全管理情况",
      "length1": "4",
      "data": [
        {
          "mainContent": "AA",
          "secondContent": "b",
          "testProject": "锅炉日常运行记录是否齐全",
          "testResult": "",
          "testRemark": ""
        },
        {
          "mainContent": "AA",
          "secondContent": "c",
          "testProject": "哈哈哈哈哈哈哈哈哈哈",
          "testResult": "",
          "testRemark": ""
        },
        {
          "mainContent": "AA",
          "secondContent": "c",
          "testProject": "哈哈哈哈哈哈哈哈哈哈",
          "testResult": "",
          "testRemark": ""
        },
        {
          "mainContent": "AA",
          "secondContent": "c",
          "testProject": "哈哈哈哈哈哈哈哈哈哈",
          "testResult": "",
          "testRemark": ""
        }
      ]
    }
  ]
}

部分页面代码:

<el-row class="b3" v-for="(item,index) in this.form.head" :key="index"
                                :style="{height:px(item.length1)}">
                            <el-col :span="item.secondContent?2:3" class="bdr"
                                    :style="{height:px(item.data.length),lineHeight:px(item.data.length)}">
                                <span style="line-height: normal">{{item.mainContent}}</span>
                            </el-col>
                            <el-col :span="1" :style="{height:px(item.length1)}"
                                    v-if="item.secondContent">
                                <el-row v-for="(item2,index2) in item.secondContent" :key="index2">
                                    <el-col class="bdr bdb"
                                            :style="{height:px(item2.length),lineHeight:px(item2.length)}">
                                        <span>{{item2.content}}</span>
                                    </el-col>
                                </el-row>
                            </el-col>
</el-row>

关键点在于样式的动态显示,如::style="{height:px(item.length1)}

最终实现效果:

 

<think>好的,我现在需要回答用户关于element-ui中el-colel-row组件的使用方法功能介绍的问题。首先,我应该回忆一下自己之前学过的相关知识,并结合用户提供的引用内容来组织答案。 用户提到了三个引用,其中引用13提到了使用弹性布局设置对齐方式,引用2展示了嵌套使用el-colel-row来创建表格结构。用户的主要问题是了解这两个组件的用法功能,所以需要从基础开始解释,确保结构清晰。 首先,应该介绍el-rowel-col的基本概念,说明它们是布局组件,基于栅格系统。然后分点讲解功能,比如栅格系统、响应式布局、对齐方式等。每个功能点需要结合用户提供的引用中的例子,比如弹性盒子的设置、span属性的分配,以及如何嵌套使用。 接下来,需要给出具体的使用方法,比如如何创建行列,如何设置span,响应式布局的参数,以及如何通过typejustify进行对齐。这里可能需要引用用户提到的解决方案,比如设置display: flexflex-wrap来处理空行问题,或者使用type="flex"justify属性来调整对齐方式。 然后,注意事项部分需要提醒用户避免直接使用CSS覆盖,正确嵌套组件,以及处理可能出现的问题,比如空行问题,这时候可以引用引用1中的解决方法,即设置el-row的样式为弹性盒子并自动换行。 在示例部分,可以结合引用2中的代码,展示一个典型的布局结构,说明如何通过嵌套el-col来实现复杂的布局,比如在特定列中添加表格结构。同时,引用3中的例子可以用来展示对齐方式的设置。 最后,生成的相关问题需要与布局相关,可能涉及响应式设计、常见问题处理、与其他布局方式的对比等,确保问题能够帮助用户进一步学习。 需要确保回答中使用正确的中文表达,避免技术术语使用不当,并且将引用内容自然地融入回答中,比如在讲解弹性布局时提到引用13的内容,在嵌套结构时提到引用2的例子。同时,按照用户的格式要求,行内公式使用$...$,独立公式用$$...$$,不过这个问题可能涉及数学公式较少,但需要检查是否有需要的地方正确应用了LaTeX格式。 最后,检查是否有遗漏的重要功能或常见问题,确保回答全面且准确,帮助用户彻底理解el-rowel-col的用法。</think>### Element-UI el-row el-col 使用方法及功能介绍 #### 一、组件功能概述 1. **栅格系统核心** - `el-row` 定义行容器,`el-col` 定义列容器,基于24分栏栅格系统实现布局 - 支持通过 `span` 属性分配宽度,例如 `:span="6"` 表示占父容器宽度的 $6/24 = 25\%$ 2. **响应式布局** 支持多设备适配参数: ```html <el-col :xs="24" :sm="12" :md="8" :lg="6"> <!-- xs: <768px, sm: ≥768px, md: ≥992px, lg: ≥1200px --> ``` 3. **对齐控制** 通过 `type="flex"` 启用弹性布局后,可用 `justify` 设置主轴对齐方式(如 `start|center|end|space-between|space-around`),`align` 设置交叉轴对齐(如 `top|middle|bottom`)[^3]。 #### 二、典型使用场景 1. **基础布局结构** ```html <el-row> <el-col :span="8">左侧内容</el-col> <el-col :span="16">右侧内容</el-col> </el-row> ``` 2. **嵌套表格结构**(如引用[2]示例) ```html <el-row> <el-col :span="12"> <div style="display: flex"> <el-col :span="8" v-for="(col,index) in 3" :key="index"> <el-row v-for="(row,idx) in 3" :key="idx">第{{row}}行第{{col}}列</el-row> </el-col> </div> </el-col> </el-row> ``` #### 三、关键配置参数 | 组件 | 属性 | 说明 | 示例值 | |--------|--------------|-------------------------------|-----------------------| | el-row | gutter | 栅格间隔(像素) | `:gutter="20"` | | | type | 布局模式(flex/普通) | `type="flex"` | | | justify | 水平对齐方式 | `justify="space-between"` | | el-col | span | 栅格占位格数 | `:span="6"` | | | offset | 栅格左侧间隔格数 | `:offset="3"` | #### 四、常见问题解决方案 1. **页面缩放出现空行** 设置弹性布局自动换行: ```css .el-row { display: flex; flex-wrap: wrap; align-content: flex-start; } ```[^1] 2. **多列对齐异常** 启用弹性布局并指定对齐方式: ```html <el-row type="flex" justify="center"> <el-col :span="12">居中对齐内容</el-col> </el-row> ```[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值