本文摘要
针对泛微 E9 流程中浏览按钮无法直接新增数据的痛点,文章介绍了通过 ecodeSDK 的 overwritePropsFnQueueMapSet 接口覆盖 WeaBrowser 组件默认属性的做法。核心步骤包括限定页面路径和目标字段、调整新建链接参数、开启 hasAddBtn 并绑定点击事件,在弹窗中提交数据后回填到表单字段。适用于 ecode 表单开发人员,需注意链接获取失败时的提示处理。

在使用泛微 E9 的流程使用过程中,可能会遇到现场增加浏览按钮数据的需求,为了注重用户体验,本文将介绍如何为浏览按钮类型的单选字段增加一个“+”号按钮,方便用户直接添加新数据。 image.png image.png


需求背景

在 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);
};
},
});

代码详解

  1. 功能限制作用范围

    if (!ecodeSDK.checkLPath('/spa/workflow/static4form/index.html#/main/workflow/req')) return;

    通过 ecodeSDK.checkLPath 方法,限定功能只在特定页面生效,避免对其他页面造成干扰。

  2. 目标字段判断

    if (newProps.fieldlabel !== '选择服务商' || newProps.viewAttr === '1') return;

    通过 fieldlabel 和 viewAttr 属性判断,只对特定的字段“选择服务商”进行增强。

  3. 动态调整链接参数

    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 等。

  4. 添加“+”按钮

    newProps.hasAddBtn = true;
    newProps.addOnClick = () => { ... };

    设置 hasAddBtn 属性为 true,为组件显示“+”按钮,并通过 addOnClick 实现按钮点击事件。

  5. 弹窗逻辑 使用 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();
    }
    );
  6. 错误处理 当链接无效时,弹出提示信息:

    WfForm.showMessage("获取新建链接失败,请联系管理员", 2, 10);

效果展示

  1. 在表单中,点击“选择服务商”字段右侧的“+”按钮。
  2. 弹出数据新增窗口,用户可以输入新数据。
  3. 提交后,新增数据会自动回填到“选择服务商”字段中。

总结

通过简单的代码增强,我们为 WeaBrowser 添加了一个实用的功能,使用户能够更加方便地添加和选择数据。这种方式不仅提升了用户体验,还避免了频繁跳转页面的麻烦。希望本文对大家在泛微 ecode 开发中有所帮助!