## 设置是什么 模块`a-settings`提供了`设置`特性,可以在前端集中显示每个模块的`设置`管理页面,便于用户统一配置 > 由于`设置`底层采用的是`Form验证`特性,所以只需提供与`设置`相关的`JSON Schema`配置信息即可 ## 设置分类 每个模块可以提供两种`设置`: 1. `用户设置`:与用户相关的`设置` 2. `实例设置`:与当前实例相关的`设置` ## 定义Schema和Validation `src/suite-vendor/test-party/modules/test-party/backend/src/meta.js` > 从略 ## 定义Settings 在模块的`meta`中,分别为`用户设置`和`实例设置`指定`validator` `src/suite-vendor/test-party/modules/test-party/backend/src/meta.js` ```javascript settings: { user: { validator: 'userTest', }, instance: { validator: 'instanceTest', }, }, ``` |名称|说明| |--|--| |settings.user|用户设置| |settings.user.validator|与用户设置相关的`validator`| |settings.instance|实例设置| |settings.instance.validator|与实例设置相关的`validator`| ## 定义缺省值 在模块的`Config`中,分别为`用户设置`和`实例设置`指定`缺省值` `src/suite-vendor/test-party/modules/test-party/backend/src/config/config.js` ```javascript // settings config.settings = { instance: { groupInfo: { slogan: '', }, }, user: { groupInfo: { username: 'zhennann', }, groupExtra: { panelExtra: { groupInfo: { mobile: '123', sex: 1, language: 'en-us', }, }, }, }, }; ``` ## 使用设置 1. 前端页面:在前端,可以直接通过`设置`菜单来管理每个模块的`设置`页面 2. 后端Api:在后端,模块`a-settings`提供了全局Bean组件`settings` `src/suite-vendor/test-party/modules/test-party/backend/src/controller/test/feat/settings.js` ### - Api: 用户设置 #### getUser 获取某个属性的值 ``` javascript let value = await this.ctx.bean.settings.getUser({ name: '/groupInfo/username' }); ``` |名称|说明| |--|--| |name|字段名称,采用`JSON Pointer`格式| #### loadSettingsUser 获取完整的`设置`对象 ``` javascript let data = await this.ctx.bean.settings.loadSettingsUser(); let value = data.groupInfo.username; ``` #### saveSettingsUser 保存完整的`设置`对象 ``` javascript data.groupInfo.username = 'zhennann'; await this.ctx.bean.settings.saveSettingsUser({ data }); ``` ### - Api: 实例设置 #### getInstance 获取某个属性的值 ``` javascript let value = await this.ctx.bean.settings.getInstance({ name: '/groupInfo/slogan' }); ``` |名称|说明| |--|--| |name|字段名称,采用`JSON Pointer`格式| #### loadSettingsInstance 获取完整的`设置`对象 ``` javascript let data = await this.ctx.bean.settings.loadSettingsInstance(); let value = data.groupInfo.slogan; ``` #### saveSettingsInstance 保存完整的`设置`对象 ``` javascript data.groupInfo.slogan = 'Less is more, while more is less'; await this.ctx.bean.settings.saveSettingsInstance({ data }); ```