Skip to content

系统字典

字典作为业务开发中常用功能,app端进行了移植,用法与web端保持一致

提示

initDict()中获取到的字典选项集合为响应式对象,ts中使用需.value,极端情况下可能需要配合watch使用

字典在后端系统管理-字典管理中进行维护

image-20251217104637275

获取字典选项

typescript
// 引入 @/utils/Dict,拿到initDict函数
import { initDict } from '@/utils/Dict'

// 参数中传入dict_code,返回对象中原封不动解构出来即可使用
const {sys_notice_type} = initDict("sys_notice_type")

获取到的ts类型为

typescript
interface SysDictDataType {
  /**
   * 主键id
   */
  id?: string;

  /**
   * 父级id
   */
  parentId?: string;

  /**
   * 字典类型编码
   */
  dictTypeCode?: string;

  /**
   * 字典标签
   */
  label?: string;

  /**
   * 字典值
   */
  value?: string;

  /**
   * 字典排序
   */
  sort?: number;

  /**
   * 备注
   */
  remark?: string;

  /**
   * 删除标识
   */
  delFlag?: string;

  /**
   * 状态
   */
  status?: string;

  /**
   * 回显颜色
   */
  tagStyle?: string;

  /**
   * 数据子集
   */
  children?: Array<SysDictDataType>;
}

根据value获取label

typescript
// 导入 initDict和getDictLabel
import { initDict, getDictLabel } from '@/utils/Dict'
// 拿到目标字典选项集合
const {sys_notice_type} = initDict("sys_notice_type")
// 传入字典选项集合和需要翻译的value,将返回balel,如果不存在则直接返回value
const label = getDictLabel(sys_notice_type.value, '1')

在模板中使用

模板中可以将字典翻译为tag标签,样式颜色与后端定义的相同。使用时需要保证 dict-data-value 值存在,可以使用v-if进行判断加载,详见

<template>
	<view class="content">
        <!--组件中使用 
            dict-data-option 传如字典选项,
            dict-data-value 传入需要被翻译的值
        -->
        <dict-tag dict-data-value="0" :dict-data-option="sys_status"/>
	</view>
</template>

<script lang="ts" setup>
// 引入 DictTag 组件
import DictTag from "@/components/dict-tag/index.vue"
// 引入 initDict 函数
import {initDict} from "@/utils/Dict"
// 获取字典选项列表
const {sys_status} = initDict("sys_status")
</script>