系统配置
平台提供了系统配置组件及类库,用于存储及获取配置信息。支持按组织配置,下级组织继承上级组织的配置。并且可以扩展为其他路径配置
在应用中添加配置组件后
- 在应用中生成两张表:配置表 config 和 配置项表 config_schema
- 在企业门户应用的统一通用配置中,可以配置该应用的配置信息
在 IDE 中,从市场下载系统配置组件(无需添加到页面上)
配置表结构
系统配置存储在 config 表中,结构如下,其中配置、分组、路径和服务联合唯一
列 | 模型名 | 字段名 | 说明 |
---|---|---|---|
主键 | id | id | ID |
配置 | name | name | 配置 |
配置名称 | label | label | 配置的描述 |
配置内容 | content | content | 配置的内容,JSON 格式,一个配置可以包含多个配置项 |
分组 | grouping | grouping | 用户自定义 |
路径 | path | path | 以/分隔的路径,路径上定义的配置,路径的下级节点可继承该配置 |
路径名称 | pathLabel | path_label | 路径的描述 |
标签 | tag | tag | 用户自定义 |
服务 | service | service | 配置对应的应用名,系统提供的配置大多属于企业门户 entry |
配置内容可以通过配置一个配置结构,实现界面编辑,配置结构存储在 config_schema 表中,结构如下,其中配置和服务联合唯一
列 | 模型名 | 字段名 | 说明 |
---|---|---|---|
主键 | id | id | 主键 |
配置 | name | name | 配置 |
配置名称 | label | label | 配置的描述 |
配置结构 | schemaContent | schema_content | 配置的结构,符合 xRender 规范的 JSON 格式 |
标签 | tag | tag | 用户自定义 |
服务 | service | service | 配置对应的应用名,系统提供的配置大多属于企业门户 entry |
使用配置
添加配置项
企业门户应用提供“统一配置项”,用于给应用添加配置项,如下图所示
配置项中最主要是填写“配置结构”,为了便于填写,表单下方给出了“配置结构模板”,列举了常用的四种模板(输入、单选、多选、开关)。首次添加配置结构时,将模板内容复制到配置结构中,再进行修改。也可以打开其他配置项,参考它的配置结构。另外,配置项使用 xRender,参考官网 https://xrender.fun/
添加配置
企业门户应用提供“统一通用配置”,用于给应用添加配置,如下图所示
选择一个配置项,在“配置内容”中显示出对应的配置内容,如下图所示
获取配置
系统提供前后端方法,用于获取配置信息
JS 库
JS 库为 model/UI2/wxsys/lib/base/config.js
JS 库提供两个方法
- 方法一:获取配置
- getConfigByPage(page,serviceName,name,grouping,path,range)
- 方法二:按组织获取配置
- getOrgConfigByPage(page,serviceName,name,grouping,path,range)
- 参数说明
- page:页面对象,必填
- serviceName:服务,必填,用于请求路径和 sql 查询
- name:配置,支持多个配置(多配置使用英文逗号隔开(48)),也可以指定为模糊查询。传入 123 查询 name=123 的配置,传入 123% 查询 name like 123% 的配置,传入 123,234 查询 name in (123,234) 的配置
- grouping:分组,用于 sql 查询
- path:路径,支持传入多个,逗号分隔。作为 getOrgConfig 的参数时,path 指组织的 fid 或 id,如果传入的是人员 id,查找配置的顺序为,先找人员的配置,然后找主岗的配置
- range:范围,path 参数不为空时生效,self 取自身,nearest 取最近,all 取全部,默认为 nearest
- 返回结果为 JSON 数组
- name:配置
- label:配置名称
- grouping:分组
- content:配置内容,JSON 格式
- path:路径
获取企业门户应用中的常用功能个数 portal.commonFunc,示例代码如下
import Config from "$UI/wxsys/lib/base/config"
Config.getConfigByPage(this,"entry","portal.commonFunc").then(function(data){
if (data.length > 0){
var content = data[0].content;
if(content && content.countfunc){
self.limit = content.countfunc
}
}
var data = self.comp("countData");
data.refreshData();
},function(error){
throw error;
});
Java 库
Java 库为 com.justep.util.ConfigUtil,提供两个方法
- 方法一:获取配置
- JSONArray getConfig(String service,String name,String grouping,String path,String range)
- 方法二:按组织获取
- JSONArray getOrgConfig(String service,String name,String grouping,String path,String range)
- 参数说明
- service 服务,传 null 表示获取当前应用的配置
- name:配置,支持多个配置(多配置使用英文逗号隔开(48)),也可以指定为模糊查询。传入 123 查询 name=123 的配置,传入 123% 查询 name like 123% 的配置,传入 123,234 查询 name in (123,234) 的配置()
- grouping:分组,用于 sql 查询
- path:路径,支持传入多个,逗号分隔。作为 getOrgConfig 的参数时,path 指组织的 fid 或 id,如果传入的是人员 id,查找配置的顺序为,先找人员的配置,然后找主岗的配置
- range:范围,path 参数不为空时生效,self 取自身,nearest 取最近,all 取全部,默认为 nearest
- 返回结果为 JSON 数组
- name:配置
- label:配置名称
- grouping:分组
- content:配置内容,JSON 格式
- path:路径
获取配置使用案例:获取开启双重认证配置 use-two-factor-login,示例代码如下
JSONArray configs = ConfigUtil.getConfig(null,"use-two-factor-login",null,null,null);
if(configs.size()>0) {
JSONObject config = configs.getJSONObject(0);
JSONObject items = config.getJSONObject("content");
Boolean login = items.getBoolean("twoFactorLogin");
return login;
}
按组织获取使用案例:获取当前登录者的双重认证白名单配置 two-factor-login,示例代码如下
JSONArray configs = ConfigUtil.getOrgConfig(null,"two-factor-login",null,userId,null);
if(configs.size()>0) {
JSONObject config = configs.getJSONObject(0);
JSONObject items = config.getJSONObject("content")
Boolean login = items.getBoolean("twoFactorLogin");
return login;
}
平台扩展
平台为了更好的配置,扩展了一些属性和编辑器
设置受保护的配置项
增加 ext.protect 属性,设置受保护的配置项,在前端获取该配置时,获取不到受保护的配置项
例如:设置 appSecret 和 appKey 为受保护的配置,代码如下
{
"ui:labelWidth": 180,
"type": "object",
"properties": {
"appKey": {
"title": "AppKey",
"type": "string"
},
"appSecret": {
"title": "AppSecret",
"type": "string"
},
"agentId": {
"title": "AgentId",
"type": "string"
},
"enableProxy": {
"title": "访问代理",
"type": "boolean",
"default": true,
"ui:widget": "switch"
}
},
"ext":{
"protect":["appKey","appSecret"]
}
}
path 存人员 ID
增加 ext.personOption 属性,配置 path 存人员 id 还是人员成员 id,有些配置以人为主,不管在哪个岗位下,都使用人员的配置时使用。可选项为 person 或 personMember。不设置表示存人员成员 id
例如:双重认证白名单将配置设置到人员上,代码如下
{
"ui:labelWidth": 180,
"type": "object",
"properties": {
"twoFactorLogin": {
"title": "开启双重认证",
"type": "boolean",
"default": false,
"ui:widget":"switch"
}
},
"ext": {
"personOption": "person"
}
}
动态配置编码
增加 ext.asNamePart 属性,将某个属性的值添加到配置 name 中,形成 name--属性值的新 name,用于设置多个同类型的配置
例如:系统支持配置多个微信小程序,每个配置的 name 为 com.qq.weixin.miniapp--appID 的形式,代码如下
{
"ui:labelWidth": 180,
"type": "object",
"properties": {
"appID": {
"title": "appID",
"type": "string"
},
"appSecret": {
"title": "appSecret",
"type": "string"
},
"token": {
"title": "消息事件消息加解密token",
"type": "string"
},
"encodingAESKey": {
"title": "消息事件消息加解密encodingAESKey",
"type": "string"
},
"notifyUrl": {
"title": "微信推送消息解密后通知地址",
"type": "string"
}
},
"ext":{
"asNamePart":"appID"
}
}
配置后的效果
为空时显示默认值还是空值
系统提供 alwaysShowDefault 属性,用来控制当一个配置项值为空时,显示默认值,还是显示空
- 默认情况:显示默认值
- alwaysShowDefault 设置为 true:显示默认值
- alwaysShowDefault 设置为 false: 显示空
例如:组织配置中的用户名正则表达式,在用户清除后,需要显示为空,设置 alwaysShowDefault 为 false 即可,代码如下
"usernameReg": {
"title": "用户名正则表达式",
"type": "string",
"default": "^[a-z][a-z0-9]*$",
"alwaysShowDefault":false
},
xRender隐藏操作按钮(49)
xRender 组件默认开启“显示操作按钮”,开启后需要通过点击“确认”提交按钮才能提交 xrender 数据,关闭该属性后表单内组件填入内容失去焦点后,组件会自动自动校验数据,在校验通过后,所有表单数据会统一设置到绑定字段
显示 Html 片段的编辑器
系统提供 HtmlEditor 编辑器,用来显示一个 Html 片段,例如:图标配置中,在 SVG 配置项中添加一段 SVG 代码,下面显示出 SVG 图标,如下图所示
图标配置中的 SVG 配置项的代码如下
"svg": {
"title": "SVG",
"type": "string",
"widget": "HtmlEditor",
"style": {
"backgroundColor": "#cccccc",
"width": "40px",
"height": "40px",
"padding": "3px",
"marginTop": "5px"
},
"options": {
"rows": 1
}
}