当前位置: 首页 > news >正文

Vue——别再自己写枚举了!RuoYi-Vue3字典管理全局缓存,让代码量减少90%


1. 核心问题:枚举值管理的痛点

1.1 传统开发中的枚举困境

在后台管理系统中,到处都有枚举值和选项数据:

// ❌ 传统做法:硬编码在各个组件中// 用户状态constuserStatus=[{label:'正常',value:'0'},{label:'停用',value:'1'}];// 性别constsexOptions=[{label:'男',value:'0'},{label:'女',value:'1'},{label:'未知',value:'2'}];// 订单状态constorderStatus=[{label:'待支付',value:'0'},{label:'已支付',value:'1'},{label:'已发货',value:'2'},{label:'已完成',value:'3'}];// 通知类型constnoticeType=[{label:'公告',value:'1'},{label:'通知',value:'2'}];

痛点分析

  • ⚠️重复定义:每个页面都要重新定义一遍
  • ⚠️不一致:不同地方定义的枚举值可能冲突
  • ⚠️维护困难:修改一个枚举值需要同步多个文件
  • ⚠️无法复用:新增页面需要重新复制粘贴
  • ⚠️后端不匹配:前端枚举值与后端字典数据脱节

1.2 工程级挑战

假设项目有100个下拉框、单选框、复选框: - 每个都需要3-5个选项 - 每个选项需要在3个地方使用(列表展示/搜索表单/编辑表单) - 如果硬编码 → 300次重复定义 - 如果修改一个选项 → 需要同步3个地方 采用字典管理后: - 统一定义在数据库中 → 0次重复 - 修改一个选项 → 自动同步所有地方 - 前端缓存一次加载 → 后续直接使用

2. 解决方案:字典管理的架构设计

2.1 整体架构图

┌─────────────────────────────────────────────────────┐ │ 字典管理系统 │ ├─────────────────────────────────────────────────────┤ │ │ │ 前端层 │ │ ┌──────────────────────────────────────┐ │ │ │ • dict-tag组件(标签渲染) │ │ │ │ • v-dict指令(自动填充) │ │ │ │ • useDict Hook(按需加载) │ │ │ └──────────────────────────────────────┘ │ │ ↓ HTTP请求 │ │ 缓存层(Pinia Store) │ │ ┌──────────────────────────────────────┐ │ │ │ • 字典数据Map存储 │ │ │ │ • 懒加载机制 │ │ │ │ • 缓存失效策略 │ │ │ └──────────────────────────────────────┘ │ │ ↓ RESTful API │ │ 后端层 │ │ ┌──────────────────────────────────────┐ │ │ │ • DictController(字典接口) │ │ │ │ • DictService(业务逻辑) │ │ │ │ • Redis缓存(可选) │ │ │ └──────────────────────────────────────┘ │ │ ↓ SQL查询 │ │ 数据层 │ │ ┌──────────────────────────────────────┐ │ │ │ • sys_dict_type(字典类型表) │ │ │ │ • sys_dict_data(字典数据表) │ │ │ └──────────────────────────────────────┘ │ └─────────────────────────────────────────────────────┘

2.2 数据流转流程

已缓存

未缓存

组件首次使用字典

检查Pinia缓存

直接返回缓存数据

发起HTTP请求

后端查询数据库

返回字典数据

存入Pinia Store

返回给组件

后续使用直接从缓存读取

管理员修改字典

后端更新数据库

清除前端缓存

下次使用时重新加载


3. 核心实现一:字典数据表设计

3.1 字典类型表

CREATETABLE`sys_dict_type`(`dict_id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'字典主键',`dict_name`varchar(100)DEFAULT''COMMENT'字典名称',`dict_type`varchar(100)DEFAULT''COMMENT'字典类型',`status`char(1)DEFAULT'0'COMMENT'状态(0正常 1停用)'
http://www.jsqmd.com/news/917796/

相关文章:

  • 2026年 风机/上风风机/上风通风机/边墙风机厂家推荐榜:技术实力与通风性能深度盘点 - 品牌企业推荐师(官方)
  • 终极压缩包密码找回指南:如何用ArchivePasswordTestTool轻松破解加密文件
  • Unity UI避坑指南:TMPro文本框动态伸缩时,背景图为什么总对不齐?
  • 保姆级教程:用R语言Signac包从零处理10x Genomics单细胞ATAC数据(附避坑指南)
  • 如何在Windows上轻松搞定PDF处理:Poppler终极指南
  • 为什么92%的艺术科技团队在AI工具链整合中失败?——基于17个真实项目故障日志的根因分析报告
  • 用 AE 视频 + HTML5 打造极简氛围感圣诞树页面
  • LwIP下ICMP协议浅析
  • 2025-2026年工程信息平台推荐:十大排行评测市场分析防盲区性价比高注意事项
  • 不只是Enter Play Mode Setting:深度优化Unity工作流,手动控制Domain Reload的完整实践
  • 2026 制造研发降本增效提速,有限元仿真替代实体测试,持证专业分析公司权威推荐 - 品牌榜中榜
  • Pearcleaner:macOS彻底清理工具的终极指南
  • 告别复杂环境配置,Hermes 本地部署 5 分钟就能搞定
  • 现在不评估Gemini替代方案,Q4可能面临API配额冻结风险:2024下半年Google Cloud政策突变预警
  • 如何用Universal Pokemon Randomizer ZX为宝可梦游戏注入无限新鲜感?
  • 3个实战场景:如何用Smart Money Concepts构建机构级交易策略
  • GEO公司集中在哪里?
  • C++ -- 堆栈的分配和大小端
  • Apache Airflow:彻底解决复杂工作流调度难题的数据管道自动化平台
  • 第24篇|相机权限和设备枚举:先判断能力再打开预览
  • Gemini商业分析报告效能评估白皮书(2024Q2独家数据+ROI测算模型)
  • 暗黑破坏神2存档编辑器:免费Web版工具完全指南
  • C# SQLite参数化查询实战:防SQL注入与数据访问层封装
  • 面部静态活体检测(高精度版)API集成指南
  • Visuino可视化编程实现ESP32 RGB LED随机渐变效果
  • Firmware Extractor:安卓固件逆向工程的一体化解决方案
  • 打破Java字节码黑箱:JD-GUI的实战逆向工程指南
  • HS2-HF补丁:让Honey Select 2游戏体验焕然一新的终极解决方案
  • 5分钟快速上手:YOLO-Face人脸检测实战指南(从零到精通)
  • PyTorch实现的MANO手部模型:3D手势生成与计算机视觉应用终极指南