【技术开源】基于 Ant Design 的 Mendix 原生气泡确认框组件

【技术开源】基于 Ant Design 的 Mendix 原生气泡确认框组件

·Gavin·

研发背景 (Background)

在 Mendix 开发中,当用户执行“删除”、“提交”等敏感操作时,通常需要进行二次确认。Mendix 原生的做法是弹出一个全局的模态框 (Popup Window) 或者使用浏览器自带的 window.confirm()

然而,这两种方式在现代 Web 应用中存在明显的体验缺陷:

  1. 全局模态框过于沉重,打断了用户的心流。
  2. 浏览器自带的 Confirm 样式陈旧,无法与企业级 UI 保持一致。

为了提供一种更轻量、更优雅的防误触交互,我们将 Ant Design 的 Popconfirm (气泡确认框) 组件引入到了 Mendix 中。


技术挑战与痛点 (The Challenge)

开发这个组件的核心难点在于 “插槽嵌套 (Widgets within Widgets)”“事件拦截”

  1. 内容包裹:Popconfirm 需要包裹一个触发元素(通常是一个按钮)。在 Mendix 中,这意味着我们的组件必须支持接受其他的 Mendix Widgets 作为子节点。
  2. 事件流控制:当用户点击被包裹的按钮时,不能直接触发按钮原有的 Action,而是需要先弹出气泡;只有当用户在气泡中点击“确认”后,才执行真正的业务逻辑。

我们的解决方案 (Our Solution)

我们利用 React 的 cloneElement 和 Mendix 的 ActionValue API 完美解决了上述问题。

1. 无缝的插槽体验

开发者可以在 Studio Pro 中,将任意的 Mendix 组件(如原生 Button、文本、图标,甚至是前面提到的 Mx Antd Button)拖入到 Popconfirm 的包裹区域(DropZone)中。组件会自动接管子元素的点击事件。

2. 丰富的可定制性

  • 文本定制:支持自定义气泡的主标题(Title)和详细描述(Description)。
  • 按钮定制:确认/取消按钮的文字、样式(如将确认按钮设为 Danger 红色)均可独立配置。
  • 位置控制:支持 12 种弹出方位(如 TopLeft, BottomRight 等),自动适应页面边缘,防止遮挡。

3. 异步操作支持

气泡的“确认”按钮完美接入了 Mendix 的 Action 机制。如果绑定的 Microflow 是一个耗时操作,确认按钮会自动显示 Loading 状态,直到后端执行完毕气泡才会关闭。


开源价值与影响 (Open Source Impact)

  • 🎨 交互体验升级:为 Mendix 应用带来了媲美顶级 SaaS 产品的细腻交互体验。
  • ⏱️ 减少开发心智负担:开发者不再需要为了一个简单的确认提示去专门画一个 Popup 页面。
  • 🤝 开源回馈:该组件同样作为 Mendix-Antd 开源生态的一部分,完全免费开放。

体验与使用 (Try it out)

在线体验 (Demo)Mendix Antd Widget Demo

获取源码 (GitHub)GavinCnod/mendix-antd-popconfirm

安装指南

  1. 从 GitHub Release 下载 .mpk 文件。
  2. 将其放置在您的 Mendix 项目目录 {YourMendixProjectFolder}/widgets/ 下。
  3. 在 Studio Pro 中同步项目,将组件拖入页面,并在其内部放入一个按钮即可。