
在 ERP 系统开发中,新增单据、查看详情、批量编辑、流程审批、操作提醒、侧边筛选面板等交互场景,全部依赖弹窗、抽屉、消息提示组件承载。传统开发需要区分模态弹窗、非模态窗口、侧边抽屉、各类消息提示,单独封装 DOM、遮罩、动画、数据重置逻辑,代码冗余、交互不统一。
WebBuilder 内置完整的Window、Dialog、Drawer、Tip、Message、Toast、Tooltip全套弹窗交互组件,基于 XWL 声明式配置实现,支持动态创建窗口、自动重置表单、多层嵌套弹窗、四边侧滑抽屉、全局自定义共享提示,完美覆盖 ERP 采购 / 销售 / 生产 / 财务全业务弹窗交互需求,一套组件解决所有弹出层场景。
基于提供的完整示例 XWL 代码,平台弹出层分为 7 大类,分别匹配 ERP 不同业务场景:
无强制遮罩,可拖拽、多窗口同时打开,适合并行查看多份单据详情、多 BOM 对比。
关键属性与业务价值:
instanced: false 模板窗口,支持 JS 动态新建多实例,批量打开多条订单详情;click(e, options){
let win = app.dynamicNewWin;
delete win.cid;
win = Wb.create(win);
win.show();
}ERP 场景:批量勾选多条采购订单,一键批量打开独立窗口并行查看;
2. closeAction: "destroy" 关闭即销毁,释放内存,大量弹窗场景优化性能;
3. resetDialog: true 隐藏窗口自动清空所有输入框值,无需手动写重置表单 JS;
ERP 高频场景:新增物料、新增供应商弹窗,关闭再打开自动清空上次填写内容;
4. modal: true 模态窗口,遮罩锁定父页面,强制用户完成操作再返回,用于必填审批、关键确认编辑。
固定居中弹窗,自带底部确认 / 取消按钮,用于 90% 单据新增、编辑、查看:采购订单编辑、BOM 编辑、客户档案弹窗。
plainTitle、labelUp 自定义标题布局,适配紧凑表单弹窗。支持上 / 下 / 左 / 右四个方向滑出,不阻断主页面完整视野:
rightDrawer可直接改造为 ERP 单据右侧详情抽屉,点击表格行,右侧滑出完整订单信息,无需跳转页面。提供多层级标准化消息 API,无需自定义弹窗,一行代码调用:
表格
方法 | 用途 | ERP 业务场景 |
|---|---|---|
Wb.info() | 普通提示 | 查询完成、筛选提示 |
Wb.succ() | 成功提示 | 保存单据、审核完成、入库成功 |
Wb.warn() | 警告提示 | 库存低于安全库存、单据未审核 |
Wb.error() | 错误提示 | 编码重复、数量不足、保存失败 |
Wb.confirm() | 二次确认弹窗 | 删除单据、作废订单、清空库存(高危操作) |
Wb.choose() | 多按钮选择弹窗 | 保存并新增 / 仅保存两种操作选择 |
支持自定义按钮、HTML 富文本内容、动画淡入淡出,高危删除操作强制二次确认,规避误操作风险。
页面角落短时自动消失提示,用于按钮点击即时反馈,保存、删除、提交后快速告知用户结果。
分级 API:Wb.tipSucc / tipWarn / tipError / tipDone,区分成功 / 警告 / 错误 / 完成状态。
不打断操作,自动消失,用于后台异步任务进度提醒(如报表导出、批量同步完成)。
绑定在组件上,鼠标移入弹出说明,无需点击:物料编码规则、字段填写说明、按钮功能释义;
支持自定义复杂表单气泡,可嵌入输入框、按钮,甚至全局共享统一提示模板(示例myShareTip全局共用提示组件,统一样式,减少重复配置)。
传统开发多窗口需要手动拼接 DOM、管理实例,WebBuilder 通过模板窗口instanced: false配合Wb.create()快速生成独立窗口实例,实现多订单、多物料并行对比查看。
resetDialog: true属性开启后,窗口隐藏时自动清空所有 text/number/date 输入框,ERP 新增弹窗无需手写ds.clear()重置逻辑,大幅减少 JS 代码量。
在模块initialize生命周期全局注册共享 Tip 实例,所有页面组件可复用同一份提示样式:
events: {
initialize(options){
Wb.apply(app, {
myShareTip: new Wb.Tip({
cls: 'w-error-color', fontSize: '1.5em',
events: {beforetip(comp) { this.text = '提示:' + comp.cid; }}
})
});
}
}所有组件通过 tip:"@app.myShareTip" 复用,全系统提示样式统一,后期修改仅改一处。
右侧抽屉查看单据详情时,主表格页面仍可滚动、筛选,兼顾 “浏览明细 + 批量操作” 复合场景,是 ERP 列表页面提升操作效率的核心组件。
Dialog 内可继续打开新 Dialog、Window,平台自动管理 z-index 层级,审批弹窗、明细弹窗多层嵌套不会出现遮罩错位、弹窗被遮挡问题。
基于示例 Dialog 组件改造,可直接导入 WebBuilder,包含表单、顶部操作菜单、嵌套子弹窗、自动重置能力:
({
cname: "module",
cid: "erp_purchase_order_win",
title: "采购订单弹窗模块",
events: {
initialize(options){
// 全局共享提示组件
Wb.apply(app, {
orderTip: new Wb.Tip({
cls: 'w-normal-color', fontSize: '1em',
events: {
beforetip(comp){
this.text = comp.text + "填写规范:编码不可重复,数量大于0";
}
}
})
});
}
},
items : [{
cname: "array",
cid: "winTemplates",
items : [{
// 采购订单主编辑弹窗
cname: "dialog",
cid: "purchaseOrderDialog",
title: "采购订单编辑",
layout: "grid1",
resetDialog: true, // 关闭自动清空表单
width: "75em",
height: "55em",
// 弹窗顶部操作菜单
menu: {
cname: "menu",
cid: "topMenu",
isProperty: true,
items : [{
cname: "item",
icon: "add",
text: "新增明细",
events: {click(){ app.orderLineDialog.show(); }}
},
{
cname: "item",
icon: "delete",
text: "删除选中明细"
},
{cname: "divider"},
{
cname: "item",
icon: "print",
text: "打印订单"
}
]
},
items : [{
// 基础头部字段
cname: "text",
cid: "orderCode",
text: "采购单号",
required: true,
tip: "@app.orderTip"
},
{
cname: "select",
cid: "supplierId",
text: "供应商",
url: "erp_supplier?xaction=listSupplier",
required: true
},
{
cname: "date",
cid: "orderDate",
text: "下单日期",
required: true
},
{
cname: "textArea",
cid: "remark",
text: "备注说明"
},
// 物料明细表格
{
cname: "grid",
cid: "orderLineGrid",
title: "物料明细",
height: "30em",
columns: [
{text:"物料编码",field:"matCode"},
{text:"物料名称",field:"matName"},
{text:"采购数量",field:"qty"},
{text:"单价",field:"price"},
{text:"金额",field:"amt"}
]
},
// 弹窗内打开明细新增子弹窗按钮
{
cname: "button",
cid: "addLineBtn",
text: "新增物料明细",
type: "primary",
onClick: "app.orderLineDialog.show()"
}
]
},
// 明细嵌套子弹窗
{
cname: "dialog",
cid: "orderLineDialog",
title: "添加采购物料",
layout: "grid1",
width: "50em",
resetDialog: true,
items : [
{cname: "text", cid:"matCode", text:"物料编码", required:true},
{cname: "number", cid:"qty", text:"采购数量", minValue:0.01, required:true},
{cname: "number", cid:"price", text:"单价", minValue:0}
]
},
// 右侧详情抽屉
{
cname: "drawer",
cid: "orderDetailDrawer",
dockPosition: "right",
width: "45vw",
title: "订单完整详情预览",
items: [{cname: "component", html: "展示订单全流程信息、入库记录、付款记录"}]
}
]
},
{
cname: "viewport",
cid: "mainView",
layout: "grid1",
items : [{
cname: "label",
text: "采购订单弹窗交互演示",
cls: "w-title3"
},
{
cname: "button",
text: "新增采购订单",
events: {click(){ app.purchaseOrderDialog.show(); }}
},
{
cname: "button",
text: "查看订单侧边详情抽屉",
events: {click(){ app.orderDetailDrawer.show(); }}
},
{
cname: "button",
text: "删除订单测试确认弹窗",
events: {
click(){
Wb.confirm("确认删除该采购订单?删除后无法恢复", ()=>{
Wb.succ("订单删除成功");
});
}
}
}
]
}
]
})对比维度 | WebBuilder 弹窗组件体系 | 传统前后端分离开发 | 普通拖拽低代码平台 |
|---|---|---|---|
自动表单重置 | resetDialog 属性零代码实现 | 每个弹窗单独写 JS 清空表单,重复代码极多 | 无自动重置,关闭弹窗数据保留,需手动清除 |
动态多窗口创建 | 模板 + Wb.create 一行生成实例 | 手动管理窗口 DOM、实例、销毁逻辑,大量 JS | 不支持动态批量创建窗口 |
四边位侧滑抽屉 | 原生 Drawer 组件,上下左右四种滑出 | 需手写 CSS 动画、遮罩、定位,兼容性差 | 仅支持右侧抽屉,无上下 / 左侧布局 |
多层弹窗嵌套 | 自动管理 z-index 层级,无遮挡错乱 | 手动控制层级,多层弹窗极易出现遮罩错位 | 仅支持单层弹窗,弹窗内不能再打开弹窗 |
全局共享提示模板 | initialize 全局注册,全页面复用 | 每个页面单独定义提示样式,UI 不统一 | 无法自定义全局共享提示组件 |
标准化消息 API | 内置 succ/confirm/warn 全套方法,富文本支持 | 封装统一消息组件需要单独开发底层库 | 仅简单成功提示,无二次确认、自定义多按钮弹窗 |
弹窗、抽屉、消息提示是 ERP 系统用户交互的基础载体,交互体验、开发效率直接影响整套系统落地周期与员工使用感受。WebBuilder 整合 Window/Dialog/Drawer/Tip/Message/Tooltip 全套弹出层组件,依托 XWL 声明式配置,将动态窗口、自动表单重置、侧边滑出、全局统一提示等高阶能力开箱即用,无需封装底层交互逻辑。
基于这套完整弹窗体系,开发人员可以快速搭建采购、销售、库存、生产、财务全业务单据弹窗,兼顾多窗口并行查看、侧边快速预览、高危操作风险管控等复杂业务交互需求,在保证交互统一、数据安全的前提下,大幅降低 ERP 前端交互页面开发与维护工作量。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。