本文摘要
针对泛微 E9 流程中浏览按钮无法直接新增数据的痛点,文章介绍了通过 ecodeSDK 的 overwritePropsFnQueueMapSet 接口覆盖 WeaBrowser 组件默认属性的做法。核心步骤包括限定页面路径和目标字段、调整新建链接参数、开启 hasAddBtn 并绑定点击事件,在弹窗中提交数据后回填到表单字段。适用于 ecode 表单开发人员,需注意链接获取失败时的提示处理。
在使用泛微 E9 的流程使用过程中,可能会遇到现场增加浏览按钮数据的需求,为了注重用户体验,本文将介绍如何为浏览按钮类型的单选字段增加一个“+”号按钮,方便用户直接添加新数据。

需求背景
在 ecode 表单开发中,WeaBrowser 是一个常用的组件,它可以用来实现浏览选择功能。在某些业务场景下,用户需要在表单中直接新增一条数据并立刻选中,而默认的浏览组件并不支持这样的操作。为了满足这一需求,我们可以通过 ecodeSDK.overwritePropsFnQueueMapSet 接口,覆盖 WeaBrowser 的默认属性,并为其添加“+”按钮,同时绑定数据新增的逻辑。
解决方案
通过以下代码实现:
ecodeSDK.overwritePropsFnQueueMapSet('WeaBrowser', { fn: (newProps) => { // 限定功能作用的页面路径 if (!ecodeSDK.checkLPath('/spa/workflow/static4form/index.html#/main/workflow/req')) return;
// 针对特定字段进行操作(使用时,你只需要改动这里!) if (newProps.fieldlabel !== '选择服务商' || newProps.viewAttr === '1') return;
// 修改链接,调整 URL 参数 let { linkUrl } = newProps; if (linkUrl) { const urlParams = new URLSearchParams(linkUrl.split('?')[1]); urlParams.set('type', '1'); urlParams.delete('billid'); urlParams.set('hidetop', '1'); linkUrl = `${linkUrl.split('?')[0]}?${urlParams.toString()}`; }
// 添加“+”按钮 newProps.hasAddBtn = true;
// 按钮点击事件逻辑 newProps.addOnClick = () => { if (!linkUrl) { WfForm.showMessage("获取新建链接失败,请联系管理员", 2, 10); return; }
// 定义弹窗及按钮交互逻辑 const { Button } = antd; const params = { title: newProps.title, moduleName: 'workflow', style: { width: 600, height: 400 }, buttons: [ // 确定按钮,提交数据并回填到表单 <Button type="primary" onClick={() => { const parentDialog = top.window.getParentDialog(); const diaiframe = document.getElementById(parentDialog.id); diaiframe.contentWindow.ModeForm.doCardSubmit( diaiframe.contentWindow.ModeForm.getCardSubmitExpendId(), '0', '', false, function (billid) { // 回填字段 WfForm.changeFieldValue(newProps.fieldName, { value: billid, specialobj: [{ id: billid, name: billid }], }); parentDialog.hide(); } ); }} > 确定 </Button>, // 取消按钮,关闭弹窗 <Button type="ghost" onClick={() => top.window.getParentDialog().close()} > 取消 </Button>, ], };
// 显示弹窗 window.weaJs.showDialog(linkUrl, params); }; },});代码详解
-
功能限制作用范围
if (!ecodeSDK.checkLPath('/spa/workflow/static4form/index.html#/main/workflow/req')) return;通过
ecodeSDK.checkLPath方法,限定功能只在特定页面生效,避免对其他页面造成干扰。 -
目标字段判断
if (newProps.fieldlabel !== '选择服务商' || newProps.viewAttr === '1') return;通过
fieldlabel和viewAttr属性判断,只对特定的字段“选择服务商”进行增强。 -
动态调整链接参数
const urlParams = new URLSearchParams(linkUrl.split('?')[1]);urlParams.set('type', '1');urlParams.delete('billid');urlParams.set('hidetop', '1');linkUrl = `${linkUrl.split('?')[0]}?${urlParams.toString()}`;根据业务需要修改链接参数,例如移除
billid,添加type=1等。 -
添加“+”按钮
newProps.hasAddBtn = true;newProps.addOnClick = () => { ... };设置
hasAddBtn属性为true,为组件显示“+”按钮,并通过addOnClick实现按钮点击事件。 -
弹窗逻辑 使用
window.weaJs.showDialog方法,创建一个带有“确定”和“取消”按钮的弹窗。用户点击“确定”按钮后,通过以下逻辑提交数据并回填:diaiframe.contentWindow.ModeForm.doCardSubmit(diaiframe.contentWindow.ModeForm.getCardSubmitExpendId(),'0','',false,function (billid) {WfForm.changeFieldValue(newProps.fieldName, {value: billid,specialobj: [{ id: billid, name: billid }],});parentDialog.hide();}); -
错误处理 当链接无效时,弹出提示信息:
WfForm.showMessage("获取新建链接失败,请联系管理员", 2, 10);
效果展示
- 在表单中,点击“选择服务商”字段右侧的“+”按钮。
- 弹出数据新增窗口,用户可以输入新数据。
- 提交后,新增数据会自动回填到“选择服务商”字段中。
总结
通过简单的代码增强,我们为 WeaBrowser 添加了一个实用的功能,使用户能够更加方便地添加和选择数据。这种方式不仅提升了用户体验,还避免了频繁跳转页面的麻烦。希望本文对大家在泛微 ecode 开发中有所帮助!