1. 项目概述
最近在重构一个Vue2项目到Vue3时,遇到了Element UI升级到Element Plus后ElMessageBox组件不兼容的问题。特别是在需要自定义按钮的业务场景中,原有的Vue2写法在Vue3环境下完全失效。经过多次尝试,我最终实现了一个可复用的任务处理确认弹窗组件,支持"取消"、"处理当前任务(ONE)"和"处理全部任务(ALL)"三种操作。
这个方案完美解决了以下痛点:
- Vue3环境下Element Plus的ElMessageBox组件与Vue2版本API差异大
- 自定义按钮布局和异步操作难以实现
- 图标渲染方式在Vue3中完全不同
- 批量任务处理场景缺乏统一解决方案
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术栈与前置准备
2.1 技术选型解析
选择Vue3+Element Plus组合主要基于以下考虑:
-
Vue3优势:
- Composition API更适合复杂逻辑封装
<script setup>语法简化组件编写- 更好的TypeScript支持
- 更小的打包体积和更优的性能
-
Element Plus必要性:
- 与Vue3完美兼容的UI组件库
- 提供完整的弹窗解决方案
- 内置丰富的图标库
- 成熟的样式体系和主题定制能力
2.2 环境准备清单
在开始实现前,请确保项目已具备以下条件:
-
基础环境:
- Node.js 14+
- Vue CLI 4.5+ 或 Vite 2+
- Vue 3.2+ (推荐最新稳定版)
-
依赖安装:
bash复制
npm install element-plus @element-plus/icons-vue -
项目配置:
- 在main.js中全局注册Element Plus:
javascript复制import { createApp } from 'vue' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' const app = createApp(App) app.use(ElementPlus) app.mount('#app')
- 在main.js中全局注册Element Plus:
-
API准备:
- 确保后端接口已实现任务处理API
- 接口应支持接收任务ID和处理类型参数
- 返回Promise对象以便异步处理
3. 核心实现详解
3.1 组件结构设计
弹窗组件的核心架构如下:
code复制ElMessageBox (容器)
├── 标题区 (title)
├── 内容区 (message)
│ ├── 警告图标 (ElIcon + Warning)
│ ├── 提示文本 (span)
│ └── 按钮组
