当前位置: 首页 > 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.gsyq.cn/news/1429114.html

相关文章:

  • 终极压缩包密码找回指南:如何用ArchivePasswordTestTool轻松破解加密文件
  • 2026年 风机/上风风机/上风通风机/边墙风机厂家推荐榜:技术实力与通风性能深度盘点 - 品牌企业推荐师(官方)
  • 如何在Windows上轻松搞定PDF处理:Poppler终极指南
  • 现在不评估Gemini替代方案,Q4可能面临API配额冻结风险:2024下半年Google Cloud政策突变预警
  • 如何用Universal Pokemon Randomizer ZX为宝可梦游戏注入无限新鲜感?
  • Apache Airflow:彻底解决复杂工作流调度难题的数据管道自动化平台
  • GEO公司集中在哪里?
  • 3个实战场景:如何用Smart Money Concepts构建机构级交易策略
  • C++ -- 堆栈的分配和大小端
  • Gemini商业分析报告效能评估白皮书(2024Q2独家数据+ROI测算模型)
  • 暗黑破坏神2存档编辑器:免费Web版工具完全指南
  • C# SQLite参数化查询实战:防SQL注入与数据访问层封装
  • Firmware Extractor:安卓固件逆向工程的一体化解决方案
  • Android View 绘制流程 与invalidate 和postInvalidate 分析--从源码角度
  • 不只是编译:用BES SDK和GCC-Arm工具链,在Windows上打造你的第一个蓝牙音频固件
  • 基于Arduino与TEA5767的FM收音机制作:从原理到实践的完整指南
  • 第25篇|Surface 预览控制:ArkUI 页面如何接住相机画面
  • APP攻防-资产收集篇反代理反证书反模拟器MsgiskLSP模块系统证书
  • 猫抓Cat-Catch:浏览器视频下载神器,一键嗅探网页媒体资源完整指南
  • 解锁小说离线阅读新可能:novel-downloader重新定义数字阅读体验
  • 如何用SMUDebugTool解锁AMD Ryzen处理器的终极性能:完全指南
  • 别再死记硬背了!用Kettle+MySQL手把手还原一个‘客户忠诚度分级’复杂存储过程
  • COM3D2.MaidFiddler:如何用实时编辑器快速修改COM3D2女仆属性
  • 横向辅助驾驶及人机共驾控制策略优化【附仿真】
  • 终极指南:使用msoffcrypto-tool轻松解锁加密Office文档
  • 5分钟搞定200+小说网站:novel-downloader离线阅读终极指南
  • 5步实现加密音频格式转换:开源工具深度解析与应用指南
  • UniApp + Painter实战:从‘社交裂变’到‘数据报告’,解锁小程序图片生成的3个高级应用场景
  • HS2-HF Patch终极指南:如何轻松优化你的Honey Select 2游戏体验
  • 基于SCARA机械臂的DIY写字钟:从运动学算法到嵌入式实现