Vue3 + vxe-table + Element Plus 实现树型表格权限树勾选、回显

背景

记录一下权限树选择、筛选、回显等复杂需求的处理,可能平常业务中很少遇到这种需求,由于前端接收的树形数据结构层级很深,数据都由前端缓存,点击提交按钮才会调用接口,我觉得这个案例对多层级的树型结构数据处理很有参考性,希望能给遇到类似问题的人一些思路。

首先需求需要满足以下功能:

  1. 权限组件弹窗展示,以树型表格展示,要求表格快速渲染;
  2. 支持输入子节点名称筛选(筛选数据由接口返回,也就是说每次筛选都会重新调用一次查询接口);
  3. 未提交之前,无论筛选多少次,父、子节点的勾选都要支持勾选的回显;
  4. 统计勾选子节点的数量;
  5. 未点提交按钮之前缓存数据

开发框架

  • NodeJs 18.x
  • Vue 3.2.x
  • Element Plus
  • vxe-table 4.5.x

Demo 在沙盒中运行,使用的是Vite Vue3 模板,表格渲染使用vxe-table 库(很好用);
Vue 使用 2.x 或 3.x 都可以,vxe-table 选择适合的版本就可以,这个 Demo 主要关注的是数据处理。

实现过程

  1. 安装依赖和引入组件
npm install element-plus --save
npm install vxe-table xe-utils --save
  1. 项目结构
    项目结构
    这是沙盒项目中的代码结构,TreeGird.vue 、TreeTableModal.vue、ConfigModal.vue 为关键组件,

  2. 页面介绍
    HomeView.vue
    入口文件,引入TreeTableModal

TreeTableModal.vue
表格弹窗组件,引入TreeGrid.vue,ConfigModal.vue,表格头部配置、表格数据都是在这个组件完成,列表勾选,子节点筛选也是这里处理。

TreeGrid.vue
树形表格组件,统计叶子节点数量,数据由父组件传入。

ConfigModal.vue
编辑弹窗组件,对应树形组件的配置功能

功能截图

截图

编辑扩展配置截图,并缓存编辑内容
截图

Demo地址

代码可以直接在沙盒里预览、运行

沙盒地址

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3中使用vxe-table和TypeScript进行国际化的步骤如下: 1. 首先,安装vxe-tablevue-i18n依赖: ```shell npm install vxe-table vue-i18n ``` 2. 在Vue的入口文件(通常是main.ts)中,引入vxe-tablevue-i18n,并进行相关配置: ```typescript import { createApp } from 'vue'; import App from './App.vue'; import XEUtils from 'xe-utils'; import VXETable from 'vxe-table'; import 'vxe-table/lib/style.css'; import { createI18n } from 'vue-i18n'; // 导入vxe-table的国际化语言包 import zhCN from 'vxe-table/lib/locale/lang/zh-CN'; import enUS from 'vxe-table/lib/locale/lang/en-US'; // 创建vue-i18n实例 const i18n = createI18n({ locale: 'zh-CN', // 设置默认语言 messages: { 'zh-CN': zhCN, 'en-US': enUS } }); // 使用vxe-table const app = createApp(App); app.use(VXETable); app.use(i18n); app.mount('#app'); ``` 3. 在组件中使用vxe-table的国际化功能,可以通过`$t`方法来获取对应的翻译文本: ```html <template> <div> <vxe-table :data="tableData"> <vxe-table-column type="index" title="序号"></vxe-table-column> <vxe-table-column field="name" title="姓名"></vxe-table-column> <vxe-table-column field="age" title="年龄"></vxe-table-column> </vxe-table> </div> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 20 }, { name: '李四', age: 25 }, { name: '王五', age: 30 } ] }; } }; </script> ``` 4. 在组件中使用vue-i18n的国际化功能,可以通过`$t`方法来获取对应的翻译文本: ```html <template> <div> <p>{{ $t('message.greeting') }}</p> </div> </template> <script> export default { mounted() { console.log(this.$t('message.greeting')); } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值