"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)('

@fesjs/plugin-enums

介绍

日常业务开发中,有很多场景会使用到枚举值,比如select-options、table-column。

该插件提供统一的枚举存取及丰富的函数来处理枚举。

启用方式

package.json 中引入依赖:

{\n    "dependencies": {\n        "@fesjs/fes": "^2.0.0",\n        "@fesjs/plugin-enums": "^2.0.0"\n    }\n}\n
1
2
3
4
5
6

配置

静态配置

.fes.js 中配置:

// 配置格式:[[key, value], ...]\nexport default {\n    enums: {\n        status: [['0', '无效的'], ['1', '有效的']]\n    }\n}\n
1
2
3
4
5
6

动态配置

在业务代码中

import { enums } from '@fesjs/fes';\n// 动态添加\nenums.push('status', [['0', '无效的'], ['1', '有效的']]\nenums.get('status', '1') // 有效的\n
1
2
3
4

场景使用

<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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

API

get

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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

push

动态添加枚举,重复添加会覆盖

枚举项为数组,枚举项的[0]解析为key,枚举项的[1]解析为value

枚举项为对象时,根据opt配置keyName、valueName取枚举项属性值分别作为key和value,如果valueName未设置则value就是枚举项

remove

移除指定的枚举

concat

基于现有的枚举,连接上新的枚举后返回新的枚举

convert

将传入的枚举格式转换为{key, value}的形式

extend配置

扩展枚举项属性的配置

提示

同时设置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
1
2
3
4
5
6
7
8
9
10
11
12

dir规则

dir是指定枚举项value的取值方式,规则如下:

// 假如枚举项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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

提示

枚举项value如果是基本类型,则规则不生效,value就是当前值

',45),e={},t=(0,a(3744).Z)(e,[["render",function(n,s){return p}]])},3744:(n,s)=>{s.Z=(n,s)=>{const a=n.__vccOpts||n;for(const[n,p]of s)a[n]=p;return a}}}]);