Element Plus 双表格联动

简介:在工作过程中写了一个组件,基于Element Plus 的双表格联动。总体构成相对来说较为简单,记录一下开发过程,原本组件基于若依框架,本文只基于Element Plus。内容相对来说较为基础,就是data内容的添加。

可实现功能:双表格联动,表格b的内容跟随表格a的选择而变动。

页面展示:

 

设计思路:

整体框架是两个卡片,两个卡片中各有一个表格,一个用于显示原有数据,一个用于显示添加数据。

模板部分:

模板部分主要是两个卡片的设计部分

<template>
  <div class="card-container">
    <el-card class="card-a">
      <el-form :inline="true">
        <el-form-item style="width: 100%;margin-top: 10px">
          <el-table :data="projectList" >
            <el-table-column label="项目名称" prop="name"/>
            <el-table-column type="selection" width="55" align="center" :reserve-selection="true"/>
            <input type="checkbox">
          </el-table>
        </el-form-item>
      </el-form>
    </el-card>

    <el-card class="card-b">
      <el-table max-height="500" :data="selectProjectList">
        <el-table-column label="已关联项目" prop="name"/>
      </el-table>
    </el-card>
  </div>
</template>

Js部分:

js部分主要就是选择时的执行逻辑,主要就是selectable方法部分。

<script setup>
const projectList = ref([
  // 初始化十个选择项
  { name: '项目1', selected: false },
  { name: '项目2', selected: false },
  { name: '项目3', selected: false },
  { name: '项目4', selected: false },
  { name: '项目5', selected: false },
  { name: '项目6', selected: false },
  { name: '项目7', selected: false },
  { name: '项目8', selected: false },
  { name: '项目9', selected: false },
  { name: '项目10', selected: false }
]);

const selectProjectList = ref([]);

function selectable(row) {
  selectProjectList.value = row;
}

</script>

style部分:

<style scoped lang="scss">
.card-container {
  width: 100%;
  display: flex; /* 使用 Flexbox 布局 */
  justify-content: space-between; /* 在主轴上均匀分布空间 */
  gap: 20px; /* 两个卡片之间的间距 */
}

.card-a {
  flex: 8;
}

.card-b {
  flex: 4;
}
</style>

<think>我们参考用户提供的引用和问题,用户希望了解在ElementPlus表格组件中如何实现多级显示(例如树形结构、嵌套表格等)。引用[1]中提到了嵌套表格的拖拽排序,引用[2]中提到了级联选择器,但用户问题焦点在表格的多级显示上。ElementPlus表格组件确实支持多级显示,这通常通过树形数据(treedata)和展开行(expandablerows)来实现。下面我们将给出一个实现树形表格的示例教程。步骤1:准备树形结构的数据树形表格需要数据具有层级关系,通常每个数据对象包含一个children字段用于存储子节点。步骤2:在el-table上使用row-key和tree-props属性-row-key:指定每一行的唯一标识符,通常是数据的id字段。-tree-props:指定树形结构的配置,如children(子节点字段名),hasChildren(是否含有子节点的标志字段,可选)。步骤3:使用el-table-column定义列,并设置type="expand"来创建展开行(可选,用于显示子表格或详细信息)然而,如果直接显示树形结构的多级,通常不需要额外的展开列,而是通过内置的树形表格模式。ElementPlus表格组件支持通过设置tree-props来开启树形模式,并自动显示展开/折叠图标。下面是一个简单的示例,展示如何构建一个树形表格:</think> 在 Element Plus 框架中,表格组件 (`el-table`) 确实支持多级显示功能,即**树形表格结构**和**嵌套展开行**两种实现方式。下面是具体实现方法及示例: --- ### 方法一:树形表格 (Tree Table) 适用于展示层级数据(如部门-员工、分类-子类等),通过指定 `row-key` 和 `tree-props` 实现: ```vue <template> <el-table :data="tableData" row-key="id" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" > <el-table-column prop="name" label="名称" width="180" /> <el-table-column prop="type" label="类型" /> </el-table> </template> <script setup> const tableData = [ { id: 1, name: "一级分类", type: "分类", children: [ { id: 11, name: "二级子类", type: "子类", children: [ { id: 111, name: "三级条目", type: "条目" } ] } ] }, // 其他数据... ]; </script> ``` **关键属性**: 1. `row-key="id"`:指定行唯一标识字段(必填) 2. `:tree-props="{ children: 'children' }"`:指定子节点字段名(支持自定义) 3. 数据需包含嵌套的 `children` 数组结构 --- ### 方法二:嵌套展开行 (Expandable Rows) 通过 `type="expand"` 实现点击展开下级内容,支持嵌套表格: ```vue <template> <el-table :data="parentData"> <el-table-column type="expand"> <template #default="scope"> <!-- 嵌套下级表格 --> <el-table :data="scope.row.children"> <el-table-column prop="name" label="子项名称" /> </el-table> </template> </el-table-column> <el-table-column prop="name" label="主项名称" /> </el-table> </template> <script setup> const parentData = [ { id: 1, name: "主分类A", children: [ { id: 11, name: "子类A-1" }, { id: 12, name: "子类A-2" } ] } ]; </script> ``` **特点**: - 点击行前的箭头图标展开嵌套内容 - 支持在展开区域放置**任意组件**(文本/表格/表单) - 通过 `scope.row` 获取当前行数据 --- ### 多级表格实战技巧 1. **懒加载子节点** 添加 `lazy` 属性和 `load` 方法实现异步加载: ```vue <el-table lazy :load="loadNode" ... > ``` 2. **联动拖拽排序** 配合 `sortablejs` 实现拖拽(引用[1]的联动方案): ```javascript import Sortable from 'sortablejs'; onMounted(() => { new Sortable(el, { onEnd: ({ newIndex, oldIndex }) => { // 更新数据位置并同步父子级关系 } }) }) ``` 3. **样式优化** 通过 CSS 控制缩进实现视觉层级: ```css .el-table .el-table__row--level-1 td:first-child .cell { padding-left: 30px !important; } ``` --- ### 多级表格应用场景 1. 分类管理系统(商品/文件分类) 2. 组织架构展示(公司-部门-员工) 3. 嵌套式数据报表(地区-城市-销售点) 4. 树形配置菜单(如权限管理系统) > 注意:复杂嵌套建议拆分子组件维护(如单独封装子表格),避免主组件逻辑过重[^1][^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咚咚响咚呛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值