基于Element Plus的表格嵌套多选框的简单实现

前端项目中的小插曲

需求

最近做一个简单的页面,需要实现如下类似表单多选框效果:
原型效果图

多选框组的整齐排布,令我想到使用表格+多选框实现。

技术栈

Vue3,Element Plus UI

实现思路

如果只是简单地使用table的<el-table-column />标签,最后实现的效果是所有字段的“可见”“可写”实现了“属性共享”,它们将一起发生改变,就比如点击任何一个字段的“可见”多选框后,将变成这样:
错误示范
这显然不合理。
经过一番分析和动手实现,发现一条解决途径:

  • 使用到插槽,即table中使用<template #default="scope"> </template>
  • 并且每一个字段都单独创建自己的多选框组,这一条需要使用v-for动态实现,v-for的源数据取自与table绑定的数据源

代码

注释处是一行测试代码,方便查看每一个字段选中的选项。

<el-table :data="permissionConfig" stripe style="width: 100%">
        <el-table-column prop="field" label="字段" width="180" />
        <el-table-column prop="permission" label="操作权限" width="290">
          <template #default="scope">
            <!-- <el-button type="primary" @click="test">测试</el-button> -->
            <el-form>
              <el-checkbox-group v-model="scope.row.permission">
                <el-checkbox
                  v-for="child in scope.row.menu"
                  :key="child.id"
                  :label="child.label"
                  size="mini"
                  text-color="#FF0000"
                />
              </el-checkbox-group>
            </el-form>
          </template>
        </el-table-column>
 </el-table>
const permissionConfig = ref([
  {
    field: '姓名',
    permission: [],
    menu: [
      {
        label: '可见',
        id: 1,
      },
      {
        label: '可写',
        id: 0,
      },
    ],
  },
  ...
  {
    field: '人力意见',
    permission: [],
    menu: [
      {
        label: '可见',
        id: 1,
      },
      {
        label: '可写',
        id: 0,
      },
    ],
  },
  {
    field: '总经理意见',
    permission: [],
    menu: [
      {
        label: '可见',
        id: 1,
      },
      {
        label: '可写',
        id: 0,
      },
    ],
  },
])

测试效果

不同的字段选中不同的操作权限

不同字段选中不同的操作权限

控制台打印table数据源

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

midLakePavilion

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

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

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

打赏作者

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

抵扣说明:

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

余额充值