设置是什么

模块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

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

// 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

获取某个属性的值

let value = await this.ctx.bean.settings.getUser({ 
  name: '/groupInfo/username'
});
名称 说明
name 字段名称,采用JSON Pointer格式

loadSettingsUser

获取完整的设置对象

let data = await this.ctx.bean.settings.loadSettingsUser();
let value = data.groupInfo.username;

saveSettingsUser

保存完整的设置对象

data.groupInfo.username = 'zhennann';
await this.ctx.bean.settings.saveSettingsUser({ data });

- Api: 实例设置

getInstance

获取某个属性的值

let value = await this.ctx.bean.settings.getInstance({ 
  name: '/groupInfo/slogan'
});
名称 说明
name 字段名称,采用JSON Pointer格式

loadSettingsInstance

获取完整的设置对象

let data = await this.ctx.bean.settings.loadSettingsInstance();
let value = data.groupInfo.slogan;

saveSettingsInstance

保存完整的设置对象

data.groupInfo.slogan = 'Less is more, while more is less';
await this.ctx.bean.settings.saveSettingsInstance({ data });