Element Plus 的 el-table 本身支持展开行、树形数据以及自定义单元格内容,因此当业务数据存在“主表 + 明细表”这样的层级关系时,可以直接在单元格中再次嵌套一个 el-table,实现更加直观的数据展示效果。
常见场景包括订单与商品明细、项目与任务列表、用户与操作记录、商品与 SKU 信息等。核心思路是利用 el-table-column 的插槽,在父表格单元格内部放置一个子表格。
一、基本实现思路
假设页面需要展示订单列表,每一行是一个订单,而订单中的商品需要以表格形式展示:
订单编号 用户 商品明细 ------------------------------------------------ 10001 张三 商品A 2件 100元 商品B 1件 50元 ------------------------------------------------ 10002 李四 商品C 3件 240元 商品D 2件 160元
如果直接把商品明细拼接成字符串,数据较多时可读性较差。更合适的方式是在“商品明细”这一列中嵌套一个新的 el-table。
数据结构可以设计成:
JavaScriptconst tableData = [ { orderNo: '10001', userName: '张三', amount: 150, products: [ { name: '商品A', quantity: 2, price: 50 }, { name: '商品B', quantity: 1, price: 50 } ] }, { orderNo: '10002', userName: '李四', amount: 400, products: [ { name: '商品C', quantity: 3, price: 80 }, { name: '商品D', quantity: 2, price: 80 } ] } ]
每一条主表数据中的 products 就对应当前订单的子表格数据。
二、使用插槽嵌套 el-table
Vue 3 + Element Plus 中,可以通过 el-table-column 的默认插槽获取当前行数据。
完整示例:
vue:data="tableData" border> prop="orderNo" label="订单编号" width="150" /> prop="userName" label="用户" width="120" /> label="商品明细"> #default="scope"> :data="scope.row.products" border size="small" style="width: 100%" > prop="name" label="商品名称" /> prop="quantity" label="数量" width="100" /> prop="price" label="单价" width="120" /> prop="amount" label="订单金额" width="120" />