"use strict";(self.webpackChunkfes_js=self.webpackChunkfes_js||[]).push([[673],{9073:(n,s,a)=>{a.r(s),a.d(s,{data:()=>p});const p={key:"v-c253c956",path:"/reference/plugin/plugins/enums.html",title:"@fesjs/plugin-enums",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:2,title:"介绍",slug:"介绍",children:[]},{level:2,title:"启用方式",slug:"启用方式",children:[]},{level:2,title:"配置",slug:"配置",children:[{level:3,title:"静态配置",slug:"静态配置",children:[]},{level:3,title:"动态配置",slug:"动态配置",children:[]}]},{level:2,title:"场景使用",slug:"场景使用",children:[]},{level:2,title:"API",slug:"api",children:[{level:3,title:"get",slug:"get",children:[]},{level:3,title:"push",slug:"push",children:[]},{level:3,title:"remove",slug:"remove",children:[]},{level:3,title:"concat",slug:"concat",children:[]},{level:3,title:"convert",slug:"convert",children:[]},{level:3,title:"extend配置",slug:"extend配置",children:[]},{level:3,title:"dir规则",slug:"dir规则",children:[]}]}],filePathRelative:"reference/plugin/plugins/enums.md",git:{updatedTime:1654594164e3,contributors:[{name:"harrywan",email:"445436867@qq.com",commits:1}]}}},9533:(n,s,a)=>{a.r(s),a.d(s,{default:()=>t});const p=(0,a(6252).uE)('
日常业务开发中,有很多场景会使用到枚举值,比如select-options、table-column。
该插件提供统一的枚举存取及丰富的函数来处理枚举。
在 package.json
中引入依赖:
{\n "dependencies": {\n "@fesjs/fes": "^2.0.0",\n "@fesjs/plugin-enums": "^2.0.0"\n }\n}\n
在 .fes.js
中配置:
// 配置格式:[[key, value], ...]\nexport default {\n enums: {\n status: [['0', '无效的'], ['1', '有效的']]\n }\n}\n
在业务代码中
import { enums } from '@fesjs/fes';\n// 动态添加\nenums.push('status', [['0', '无效的'], ['1', '有效的']]\nenums.get('status', '1') // 有效的\n
动态添加的枚举项支持数组和对象
枚举项为对象时,可以指定keyName和valueName属性名
导出枚举值,可指定取值的路径
导出枚举可扩展属性
<template>\n <div>\n <!-- 遍历枚举status -->\n <div v-for="item in enumsGet('status')" :key="item.key">\n {{item.value}}:{{item.key}}\n </div>\n <!-- 遍历枚举扩展后的roles -->\n <div v-for="item in roles" :key="item.key">\n {{item.name}}:{{item.disabled}}\n </div>\n <!-- 获取枚举roles为2的英文名 -->\n <div>{{enumsGet('roles', '2', { dir: 'eName' })}}</div>\n </div>\n</template>\n<script>\nimport { enums } from '@fesjs/fes';\n\nexport default {\n setup() {\n // 动态添加枚举,枚举项是对象,并指定key的属性名为id\n enums.push('roles', [\n {\n id: '1',\n cName: '系统管理员',\n eName: 'System',\n perm: ['1', '2', '3']\n },\n {\n id: '2',\n cName: '业务管理员',\n eName: 'Business',\n perm: ['1', '2']\n },\n {\n id: '3',\n cName: '普通用户',\n eName: 'User',\n perm: ['1']\n }\n ], { keyName: 'id' });\n // 导出定制格式的roles,扩展枚举项新的属性name、disabled\n const roles = enums.get('roles', {\n extend: [\n {\n key: 'name',\n dir: 'cName' // 指定取值路径,取属性cName的值\n },\n {\n key: 'disabled',\n // 传入函数,获取结果值\n transfer: item => item.value.perm.some(i => i >= 2)\n }\n ]\n });\n console.log(roles);\n // [{key: '1', name: '系统管理员', disabled: true, value: {...}}, ....]\n return {\n enumsGet: enums.get,\n roles\n };\n }\n};\n</script>\n\n
get(name: string)
获取指定名字的枚举
get(name: string, key: string)
获取指定名字及键枚举默认值
get(name: string, opt: {extend: Array<Object>})
获取指定名字的自定义格式枚举,查看extend配置
get(name: string, key: string, opt: {dir: string})
获取指定名字及键枚举dir规则的值
get('status')\nget('status', '1')\nget('status', {\n extend: [\n {\n key: 'name',\n dir: 'value',\n },\n {\n key: 'disabled',\n transfer: item => item === '0'\n }\n ]\n})\nget('status', '1', {dir: 'value'})\n
动态添加枚举,重复添加会覆盖
push(name: string, _enum: Array<Array>)
push(name: string, _enum: Array<Object>, opt?: Object)
枚举项为数组,枚举项的[0]解析为key,枚举项的[1]解析为value
枚举项为对象时,根据opt配置keyName、valueName取枚举项属性值分别作为key和value,如果valueName未设置则value就是枚举项
移除指定的枚举
基于现有的枚举,连接上新的枚举后返回新的枚举
concat(name: string, _enum: Array<Array|Object>, opt?: Object))
将传入的枚举格式转换为{key, value}的形式
convert(name: string, _enum: Array<Array|Object>, opt?: Object))
扩展枚举项属性的配置
extend: Array<Object>
key
指定扩展的属性名dir
指定该属性的取值路径transfer(item: {key: any, value: any})
转换函数,参数未枚举项,返回就是该属性的值提示
同时设置dir和transfer,transfer优先
get('status', {\n extend: [\n {\n key: 'name',\n dir: 'value',\n },\n {\n key: 'disabled',\n transfer: item => item.key === '0'\n }\n ]\n})\n
dir是指定枚举项value的取值方式,规则如下:
A
、A.B
[0]
、[0][1]
A[0]
、[0].A
、A[0].B
// 假如枚举项value的结构如下\nconst user = {\n age: 18,\n name: 'aring',\n role: [\n {\n id: 1,\n name: '管理员'\n },\n {\n id: 2,\n name: '业务操作员'\n }\n ]\n}\n// 那么规则解析是:\ndir value\n'age' => 18\n'role[0]' => {id: 1, name: '管理员'}\n'role[1].id' => 2\n
提示
枚举项value如果是基本类型,则规则不生效,value就是当前值