- 主子表形式,主表显示汇总信息,子表显示明细,我当时做的第一个版本是主子表展示不同的表格信息,此需求最大的问题是怎么保证主表行点击后展示的是对应的主表行的明细,当然,这个后台做是最方便的,但是当时后台给我返回的是明细接口,怎么保证主表行点击后在子表展示明细,是在前台做的。
- 当时我去请教了带我的同事,以下是解决方法:主表格数据是数组里面包含多个对象的,循环每个数组,给每个数组对象中添加数组,作为一个标志,等会放入返回的明细数据,这样就可以保证每行的明细数据独立出来。
- 以下是部分代码,仅作参考,参考element-ui官网的以下demo
<template>
<el-table
:data="tableData"
style="width: 100%">
<el-table-column type="expand">
<template slot-scope="props">
<el-form label-position="left" inline class="demo-table-expand">
<el-form-item label="商品名称">
<span>{{ props.row.name }}</span>
</el-form-item>
<el-form-item label="所属店铺">
<span>{{ props.row.shop }}</span>
</el-form-item>
<el-form-item label="商品 ID">
<span>{{ props.row.id }}</span>
</el-form-item>
<el-form-item label="店铺 ID">
<span>{{ props.row.shopId }}</span>
</el-form-item>
<el-form-item label="商品分类">
<span>{{ props.row.category }}</span>
</el-form-item>
<el-form-item label="店铺地址">
<span>{{ props.row.address }}</span>
</el-form-item>
<el-form-item label="商品描述">
<span>{{ props.row.desc }}</span>
</el-form-item>
</el-form>
</template>
</el-table-column>
<el-table-column
label="商品 ID"
prop="id">
</el-table-column>
<el-table-column
label="商品名称"
prop="name">
</el-table-column>
<el-table-column
label="描述"
prop="desc">
</el-table-column>
</el-table>
</template>
因为我们要做的是表格,所以将 <template slot-scope=“props”>中的内容替换为表格,即以下代码:
<el-table
:data="props.row.detail"
border
style="width: 100%">
<el-table-column
align="center"
prop="actualWeight"
label="数量"
>
</el-table-column>
<el-table-column
align="center"
prop="batchId"
label="批次号">
</el-table-column>
<el-table-column
align="center"
prop="makerName"
label="生产厂家名称">
</el-table-column>
<el-table-column
align="center"
prop="productDate"
label="生产厂家日期">
</el-table-column>
</el-table>
js部分代码:
//主表请求数据,添加detail数组
getCollect(){
reportCount(this.queryParams)
.then(response => {
for(var i in response.list){
let val = response.list[i];
this.$set(val, 'detail',[])
}
//将请求来的详情数据放入detail数组中
// 点击主表格行,获取子表格明细
expandChange(val){
reportDetails(this.detailsQuery)
.then(response => {
console.log('response', response)
that.$set(val, 'detail', response );
})
},
getCollect()方法是请求主表数据,reportCount是请求接口,
这样即可实现下拉展示子表的内容,这里的detail即就是子表的详情信息数组,这里要注意的是,element-ui官方给出的例子是表单,这里是表格,只需要给表格绑定详情数据对象,下面表格的行绑定字段就可以了。