动态获取数据合并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)}

最终实现效果:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element UI 中,`el-row` 和 `el-col` 可以多层嵌套使用,实现更加复杂的布局。例如,可以通过多层嵌套实现两列布局中,左侧固定宽度,右侧自适应宽度的效果。 下面是一个示例代码,展示了如何使用多层嵌套的 `el-row` 和 `el-col` 实现这个效果: ```html <template> <el-row> <el-col :span="6"> <div class="left">左侧固定宽度</div> </el-col> <el-col :span="18"> <el-row> <el-col :span="8"> <div class="right">右侧自适应宽度</div> </el-col> <el-col :span="8"> <div class="right">右侧自适应宽度</div> </el-col> <el-col :span="8"> <div class="right">右侧自适应宽度</div> </el-col> </el-row> </el-col> </el-row> </template> <script> export default { data() { return {} } } </script> <style scoped> .left { width: 200px; height: 100px; background-color: #ccc; } .right { height: 100px; background-color: #ddd; margin: 10px; } </style> ``` 在这个示例中,外层的 `el-row` 表示整个布局的行,其中包含两个 `el-col`,分别表示左侧固定宽度区域和右侧自适应宽度区域。右侧自适应宽度的区域再次使用了 `el-row` 和 `el-col` 进行多层嵌套,实现了三列等宽的布局。 注意,在多层嵌套的情况下,需要根据具体情况来设置 `span` 属性,以实现合适的布局效果。同时,也需要注意多层嵌套可能会导致布局嵌套层级过深,对页面的性能和维护带来不利影响。因此,在实际开发中,应根据具体情况来选择合适的布局方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值