docs: 插件enums、vuex文档

This commit is contained in:
aringlai 2021-03-04 20:01:30 +08:00
parent adfc7651f9
commit be5172ca1b
4 changed files with 288 additions and 4 deletions

View File

@ -1,7 +1,226 @@
# @webank/fes-plugin-enums
## 介绍
日常业务开发中有很多场景会使用到枚举值比如select-options、table-column。
该插件提供统一的枚举存取及丰富的函数来处理枚举。
## 启用方式
`package.json` 中引入依赖:
```json
{
"dependencies": {
"@webank/fes": "^2.0.0",
"@webank/fes-plugin-enums": "^2.0.0"
}
}
```
## 配置
## API
### 静态配置
`.fes.js` 中配置:
```js
// 配置格式:[[key, value], ...]
export default {
enums: {
status: [['0', '无效的'], ['1', '有效的']]
}
}
```
### 动态配置
在业务代码中
```js
import { enums } from '@webank/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 '@webank/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就是当前值
:::

View File

@ -1,9 +1,62 @@
# @webank/fes-plugin-vuex
## 介绍
集成vuex插件
增强vuex导出所有的mutations、actions和getter的事件类型编辑器提示
约定模式module和plugin定义放在sotres目录下文件名包含plugin被解析为插件无需额外配置定义即可用。
::: tip
vuex的提供的api直接导入使用
:::
## 启用方式
`package.json` 中引入依赖:
```json
{
"dependencies": {
"@webank/fes": "^2.0.0",
"@webank/fes-plugin-vuex": "^2.0.0"
}
}
```
## 配置
`.fes.js` 中配置:
```js
export default {
vuex: {
strict: true // 开启严格模式
}
}
```
## 场景使用
vuex定义模块之后使用getter、mutation、action都是通过传入字符路径
```js
import { useStore } from 'vuex';
const store = useStore();
store.getters['user/address']
store.commit('counter/increment')
store.dispatch('user/login')
```
## API
使用该插件,可以利用导出的事件类型,如:
```js
import { useStore } from 'vuex';
import { MUTATION_TYPES, GETTER_TYPES, ACTION_TYPES } from '@webank/fes';
const store = useStore();
store.getters[GETTER_TYPES.user.address]
store.commit(MUTATION_TYPES.counter.increment)
store.dispatch(ACTION_TYPES.user.login)
```
## API
### MUTATION_TYPES
* 类型 `Object`
* mutation的所有事件类型
### GETTER_TYPES
* 类型 `Object`
* getter的所有方法名
### ACTION_TYPES
* 类型 `Object`
* action的所有事件类型

View File

@ -111,7 +111,7 @@ function format(_enum = [], extend = []) {
* @param dir
*/
function parseValueDir(value, dir='value') {
if (['object', 'function'].indexOf(typeof value) || !value || !dir) return value
if (!['object', 'function'].includes(typeof value) || !value || !dir) return value
if (dir.startsWith('[')) {
let key = dir.slice(1, dir.indexOf(']'))
return parseValueDir(value[key], dir.slice(dir.indexOf(']') + 1))
@ -133,7 +133,7 @@ function parseValueDir(value, dir='value') {
* 转换传入的枚举数组
* @param {string} name 枚举名称
* @param {Array<Object|Array>} _enum 枚举数组,数组元素可以是数组或者对象
* @param {{keyName: 'key', valueName: string}} opt keyName: 指定枚举键名称取值属性 valueName 指定枚举键值取值属性
* @param {keyName: string, valueName: string} opt keyName: 指定枚举键名称取值属性 valueName 指定枚举键值取值属性
*/
function convert(name, _enum, opt = { keyName: '', valueName: '' }) {
if (!name) {

View File

@ -63,6 +63,18 @@ export default {
]
});
console.log(roles);
console.log(enums.get('status', {
extend: [
{
key: 'name',
dir: 'value'
},
{
key: 'disabled',
transfer: item => item.key === '0'
}
]
}));
onMounted(() => {
console.log(router);
setTimeout(() => {