fes.js/docs/zh/reference/plugin/plugins/enums.md
2021-03-05 18:58:14 +08:00

226 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# @fesjs/plugin-enums
## 介绍
日常业务开发中有很多场景会使用到枚举值比如select-options、table-column。
该插件提供统一的枚举存取及丰富的函数来处理枚举。
## 启用方式
`package.json` 中引入依赖:
```json
{
"dependencies": {
"@fesjs/fes": "^2.0.0",
"@fesjs/plugin-enums": "^2.0.0"
}
}
```
## 配置
### 静态配置
`.fes.js` 中配置:
```js
// 配置格式:[[key, value], ...]
export default {
enums: {
status: [['0', '无效的'], ['1', '有效的']]
}
}
```
### 动态配置
在业务代码中
```js
import { enums } from '@fesjs/fes';
// 动态添加
enums.push('status', [['0', '无效的'], ['1', '有效的']]
enums.get('status', '1') // 有效的
```
## 场景使用
- 动态添加的枚举项支持数组和对象
- 枚举项为对象时可以指定keyName和valueName属性名
- 导出枚举值,可指定取值的路径
- 导出枚举可扩展属性
```vue
<template>
<div>
<!-- 遍历枚举status -->
<div v-for="item in enumsGet('status')" :key="item.key">
{{item.value}}{{item.key}}
</div>
<!-- 遍历枚举扩展后的roles -->
<div v-for="item in roles" :key="item.key">
{{item.name}}{{item.disabled}}
</div>
<!-- 获取枚举roles为2的英文名 -->
<div>{{enumsGet('roles', '2', { dir: 'eName' })}}</div>
</div>
</template>
<script>
import { enums } from '@fesjs/fes';
export default {
setup() {
// 动态添加枚举枚举项是对象并指定key的属性名为id
enums.push('roles', [
{
id: '1',
cName: '系统管理员',
eName: 'System',
perm: ['1', '2', '3']
},
{
id: '2',
cName: '业务管理员',
eName: 'Business',
perm: ['1', '2']
},
{
id: '3',
cName: '普通用户',
eName: 'User',
perm: ['1']
}
], { keyName: 'id' });
// 导出定制格式的roles扩展枚举项新的属性name、disabled
const roles = enums.get('roles', {
extend: [
{
key: 'name',
dir: 'cName' // 指定取值路径取属性cName的值
},
{
key: 'disabled',
// 传入函数,获取结果值
transfer: item => item.value.perm.some(i => i >= 2)
}
]
});
console.log(roles);
// [{key: '1', name: '系统管理员', disabled: true, value: {...}}, ....]
return {
enumsGet: enums.get,
roles
};
}
};
</script>
```
## API
### get
* `get(name: string)` 获取指定名字的枚举
* `get(name: string, key: string)` 获取指定名字及键枚举默认值
* `get(name: string, opt: {extend: Array<Object>})` 获取指定名字的自定义格式枚举,[查看extend配置](#extend配置)
* `get(name: string, key: string, opt: {dir: string})` 获取指定名字及键枚举[dir规则](#dir规则)的值
```js
get('status')
get('status', '1')
get('status', {
extend: [
{
key: 'name',
dir: 'value',
},
{
key: 'disabled',
transfer: item => item === '0'
}
]
})
get('status', '1', {dir: 'value'})
```
### push
动态添加枚举,重复添加会覆盖
* `push(name: string, _enum: Array<Array>)`
* `push(name: string, _enum: Array<Object>, opt?: Object)`
* opt.keyName 指定key的取值属性默认是key
* opt.valueName 指定value的取值属性
枚举项为数组,枚举项的[0]解析为key枚举项的[1]解析为value
枚举项为对象时根据opt配置keyName、valueName取枚举项属性值分别作为key和value`如果valueName未设置则value就是枚举项`
### remove
* remove(name: string)
移除指定的枚举
### concat
基于现有的枚举,连接上新的枚举后返回新的枚举
* `concat(name: string, _enum: Array<Array|Object>, opt?: Object))`
* opt.keyName 指定key的取值属性默认是key
* opt.valueName 指定value的取值属性
* opt.before 是否添加在现有的之前默认是false
* opt.extend返回的枚举[extend配置](#extend配置)
### convert
将传入的枚举格式转换为{key, value}的形式
* `convert(name: string, _enum: Array<Array|Object>, opt?: Object))`
* opt.keyName 指定key的取值属性默认是key
* opt.valueName 指定value的取值属性
### extend配置
扩展枚举项属性的配置
* `extend: Array<Object>`
* `key` 指定扩展的属性名
* `dir` 指定该属性的取值路径
* `transfer(item: {key: any, value: any})` 转换函数,参数未枚举项,返回就是该属性的值
::: tip
同时设置[dir](#dir规则)和transfertransfer优先
:::
```js
get('status', {
extend: [
{
key: 'name',
dir: 'value',
},
{
key: 'disabled',
transfer: item => item.key === '0'
}
]
})
```
### dir规则
dir是指定枚举项value的取值方式规则如下
* 对象属性 `A`、`A.B`
* 数组 `[0]`、`[0][1]`
* 混合 `A[0]`、`[0].A`、`A[0].B`
```js
// 假如枚举项value的结构如下
const user = {
age: 18,
name: 'aring',
role: [
{
id: 1,
name: '管理员'
},
{
id: 2,
name: '业务操作员'
}
]
}
// 那么规则解析是:
dir value
'age' => 18
'role[0]' => {id: 1, name: '管理员'}
'role[1].id' => 2
```
::: tip
枚举项value如果是基本类型则规则不生效value就是当前值
:::