详细分析ruoyi系统的数据字典(附思路)

前言

数据字典在ruoyi系统很常见,主要用于减少对后端的访问,直接在系统上配置即可

1. Vue3

以下Demo只是给个思路:

前端Vue3渲染前获取所有字典

// 获取所有字典
const dictStore = useDictStoreWithOut()
const userStore = useUserStoreWithOut()
const permissionStore = usePermissionStoreWithOut()
if (!dictStore.getIsSetDict) {
  await dictStore.setDictMap()
}

后续通过执行函数,调用字典中所有值:

类似推荐:详细分析Vuex中的mapGetters

export const useDictStore = defineStore('dict', {
  state: (): DictState => ({
    dictMap: new Map<string, any>(),
    isSetDict: false
  }),
  getters: {
    getDictMap(): Recordable {
      const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)
      if (dictMap) {
        this.dictMap = dictMap
      }
      return this.dictMap
    },
    getIsSetDict(): boolean {
      return this.isSetDict
    }
  },

后续在dict.ts中定义各个字典Key
并在最终的前端界面定义标签

<!--
    type: 字典 KEY
    value: 字典值
-->
<dict-tag :type="DICT_TYPE.MANONG" :value="row.logType" />

类似的数据字典函数如下:

// 导入 Vue Composition API 中的 ref 函数
import { ref } from 'vue'

// 定义字典数据类型
interface DictDataType {
  label: string;
  value: string;
}

// 定义数字类型的字典数据类型
interface NumberDictDataType extends DictDataType {
  value: number;
}

// 从 VueX 中获取字典数据的辅助函数
const getDictOptions = (dictType: string): DictDataType[] => {
  // 这里应该从 Vuex 中获取字典数据,这里简化为直接返回一个空数组
  return []
}

// 获取数字类型的字典选项
const getIntDictOptions = (dictType: string): NumberDictDataType[] => {
  const dictOptions: DictDataType[] = getDictOptions(dictType)
  const intDictOptions: NumberDictDataType[] = []
  dictOptions.forEach((dict: DictDataType) => {
    intDictOptions.push({
      ...dict,
      value: parseInt(dict.value)
    })
  })
  return intDictOptions
}

// 获取字符串类型的字典选项
const getStrDictOptions = (dictType: string): DictDataType[] => {
  const dictOptions: DictDataType[] = getDictOptions(dictType)
  return dictOptions.map(dict => ({
    ...dict,
    value: dict.value.toString()
  }))
}

// 获取布尔类型的字典选项
const getBoolDictOptions = (dictType: string): DictDataType[] => {
  const dictOptions: DictDataType[] = getDictOptions(dictType)
  return dictOptions.map(dict => ({
    ...dict,
    value: dict.value.toString() === 'true'
  }))
}

// 根据字典值获取对应的字典对象
const getDictObj = (dictType: string, value: any): DictDataType | undefined => {
  const dictOptions: DictDataType[] = getDictOptions(dictType)
  return dictOptions.find(dict => dict.value === value.toString())
}

// 根据字典值获取对应的字典名称
const getDictLabel = (dictType: string, value: any): string => {
  const dictOptions: DictDataType[] = getDictOptions(dictType)
  const dictLabel = ref('')
  dictOptions.forEach((dict: DictDataType) => {
    if (dict.value === value.toString()) {
      dictLabel.value = dict.label
    }
  })
  return dictLabel.value
}

// 导出函数
export {
  getDictOptions,
  getIntDictOptions,
  getStrDictOptions,
  getBoolDictOptions,
  getDictObj,
  getDictLabel
}

2. Vue2

Vue2和3大同小异,只是语法格式不同而已
通过dict.js存储相关的信息

import {getStore, setStore} from '@/util/store'

import {getDictionary} from '@/api/system/dict'

const dict = {
  state: {
    flowRoutes: getStore({name: 'flowRoutes'}) || {},
  },
  actions: {
    //发送错误日志
    FlowRoutes({commit}) {
      return new Promise((resolve, reject) => {
        getDictionary({code: 'flow'}).then(res => {
          commit('SET_FLOW_ROUTES', res.data.data);
          resolve();
        }).catch(error => {
          reject(error)
        })
      })
    },
  },
  mutations: {
    SET_FLOW_ROUTES: (state, data) => {
      state.flowRoutes = data.map(item => {
        return {
          routeKey: `${item.code}_${item.dictKey}`,
          routeValue: item.remark,
        };
      });
      setStore({name: 'flowRoutes', content: state.flowRoutes})
    },
  }

};

export default dict;
  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RuoYi-plus是一个基于RuoYi升级的springcloud版本管理系统。软件由SMP多商户后台管理系统+API后端接口组成,项目支持cms内容管理和商城业务,提供单机版服务、微服务体系双向选择,微服务集成分布式事务解决方案seata,框架基于SpringBoot2.x,springcloudG版本。 RuoYi-plus项目介绍 项目核心: 多商户权限系统+商城平台+CMS内容管理+微服务API系统 架构技术: 基于SpringBoot2.x, springcloud G版本eureka、hystrix、feign、config、gateway微服务架构体系的全新版本,集成分布式事务解决方案seata,集成redis、quartz、tk.mybatis、lombok、各种设计模式等。 项目优势: 架构更清晰、技术更前沿、代码更整洁、页面更美观、学习商用均可。可用于OA系统、 CRM系统、 PDM系统等二次开发,微服务架构学习,非常适用于公司管理平台旧版本升级、新平台搭建快速整合、同时提供API接口服务(供APP、微端、h5等使用)。 RuoYi-plus内置功能 管理平台基础功能 1、用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2、部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 3、岗位管理:配置系统用户所属担任职务。 4、菜单管理:配置系统菜单,操作权限,按钮权限标识等。 5、角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 6、字典管理:对系统中经常使用的一些较为固定的数据进行维护。 7、参数管理:对系统动态配置常用参数。 8、通知公告:系统通知公告信息发布维护。 9、操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 10、登录日志:系统登录日志记录查询包含登录异常。 11、在线用户:当前系统中活跃用户状态监控。 12、定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 13、代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 14、系统接口:根据业务代码自动生成相关的api接口文档。 15、服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 16、在线构建器:拖动表单元素生成相应的HTML代码。 17、连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 商城业务基础功能 1、商户管理:多商户系统核心业务,商户管理对应权限数据。 2、类别管理:商品类别配置,为商品区分类别。 3、商品管理:每个商户下的商品信息。 CMS内容基础功能 1、文章类别管理:文章列表信息,为文章区分不同类别。 2、文章信息管理:文章具体信息,直接生成文章html页面。 3、素材类别管理:为素材提供类别以区分不同业务的素材图片/视频。 4、素材信息管理:文章信息的素材图片管理。 API接口基础功能 1、业务模块:接收网关gateWay转发请求,api微服务结构处理具体业务,解决分布式事务。 2、订单模块:订单相关业务处理。 3、商品模块:商品相关业务处理。 商用须知 本项目遵循MIT协议,无需授权,留言备注公司信息即可。 演示地址账号:tecom  密码:123456
Vue Ruoyi中,数据字典是用来对应数据库中的某个字段的值和对应的中文含义。通过维护一个字典表,我们可以将数据库中存储的数字值转换成对应的中文,使得页面显示更加友好和易于理解。举个例子,比如我们有一个字段叫sex,值为1代表男性,值为2代表女性。通过维护一个字典表,我们可以将数据库中存储的1转换成男性,将存储的2转换成女性,这样在页面查询时就可以直接显示中文而不是数字。 在Vue Ruoyi中,我们可以通过调用API来获取字典表的数据。比如,我们可以使用以下代码来获取字典表的数据: import { getDicts } from "@/api/system/dict/data"; getDicts("sex").then(res => { // 这里的res就是获取到的字典表数据 // 可以将数据存储到本地或者通过逻辑处理后使用 }); 通过以上代码,我们可以获取到字段名为sex的字典表数据,并对其进行相关的操作和处理。 总的来说,Vue Ruoyi中的数据字典是用来将数据库中的字段值转换成对应的中文含义,在页面显示中起到了很重要的作用。我们可以通过调用API来获取字典表的数据,并根据需要进行处理和使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [若依VUE数据字典使用](https://blog.csdn.net/qq_34198305/article/details/128967268)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [ruoyi-vue版本(十)字典管理 的源码解析](https://blog.csdn.net/python113/article/details/128741430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [ruoyi-vue-pro:基于SpringBoot,Spring Security,JWT,Vue&Element的前一次分离权限管理系统](https://download.csdn.net/download/weixin_42166626/15607582)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农研究僧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值