常规方法就是后端写好接口,前端表单可以直接在init的时候,发起一个请求到后端,后端处理后将结果 返回给前端。下面讲述的是另一种方法:
前端表单打开的时候,都会调用模块/base/base-ui/base-ui-service
的
/api/ui/customize/init
接口获取自定义表单UI配置。
借此接口,该模块开放了视图监听接口com.usoftchina.saas.ui.api.ViewListener
,
其他模块可以实现该接口,该接口会自动调用,返回的数据放在viewModel
// 后端封装的地方
@GetMapping("/init")
public Result onViewInit(@RequestParam("name") String name, String bizType) {
List<Config> configs = configService.getConfig(name);
// 扩展视图初始化参数
View view = uiListenerFactory.initView(name, bizType);
return Result.success(new ModelMap("metadata", configs).addAttribute("viewModel", view.getViewModel().getData()));
}
// 前端封装的地方
initView: function (view) {
let me = this,
url = me.getInitUrl;
return Ext.Ajax.promise({
url,
params: {
name: view.viewName,
bizType: view.caller
},
async: true
}).then(function (res) {
let cfg = me.decodeViewConfig(res.data.metadata);
// 扩展视图初始化参数
me.mergeViewModel(view, res.data.viewModel);
return cfg;
})
.catch(function (e) {
saas.util.BaseUtil.showErrorToast('读取界面配置失败:' + e.message);
return null;
});
},
mergeViewModel: function(view, data) {
if (data) {
var vm = view.getViewModel();
Ext.Object.each(data, function (key, value) {
vm.set(key, value);
});
}
}
给配置了审批流程的表单,设置显示“提交”按钮
扩展模块在/base/base-process/base-process
,
代码在com.usoftchina.saas.process.listener.ProcessViewListener.onViewInit
,
通过查找审批规则表,设置该视图是否需要显示“提交”按钮
@Override
public void onViewInit(View view) {
if (!StringUtils.isEmpty(view.getBizType())) {
ProcessRule rule = processRuleService.findByBizType(view.getBizType(), BaseContextHolder.getCompanyId());
// 显示提交流程按钮
view.getViewModel().set("showSubmitBtn", null != rule && rule.wasEnabled());
}
}
相对常规方法而言,这样做会简单很多