# Toast 组件 ## 组件说明 通知反馈组件,基于 Ant Design notification 封装,用于操作完成后向用户展示反馈信息。通知从右上角滑出,默认 3 秒后自动消失,最多同时显示 3 条通知。 ## 组件位置 ``` src/components/Toast/Toast.jsx ``` ## 全局配置 ```javascript notification.config({ placement: 'topRight', // 通知位置:右上角 top: 24, // 距离顶部 24px duration: 3, // 默认显示 3 秒 maxCount: 3, // 最多同时显示 3 条 }) ``` ## API 方法 组件以静态方法的形式提供,无需实例化,直接调用即可。 ### Toast.success() 显示成功通知(绿色图标)。 #### 参数 | 参数名 | 类型 | 必填 | 默认值 | 说明 | |--------|------|------|--------|------| | message | string | 是 | - | 主要消息内容 | | description | string | 否 | '' | 详细描述 | | duration | number | 否 | 3 | 显示时长(秒),0 表示不自动关闭 | #### 使用示例 ```jsx import Toast from '../components/Toast/Toast' // 简单成功提示 Toast.success('操作成功') // 带详细描述 Toast.success('删除成功', '用户 "admin" 已成功删除') // 自定义显示时长(5秒) Toast.success('保存成功', '您的设置已保存', 5) // 不自动关闭 Toast.success('操作成功', '请注意后续操作', 0) ``` ### Toast.error() 显示错误通知(红色图标)。 #### 参数 | 参数名 | 类型 | 必填 | 默认值 | 说明 | |--------|------|------|--------|------| | message | string | 是 | - | 主要消息内容 | | description | string | 否 | '' | 详细描述 | | duration | number | 否 | 3 | 显示时长(秒) | #### 使用示例 ```jsx // 简单错误提示 Toast.error('操作失败') // 带错误详情 Toast.error('删除失败', '该用户下还有关联数据,无法删除') // API 错误处理 try { await api.deleteUser(userId) Toast.success('删除成功') } catch (error) { Toast.error('删除失败', error.message) } ``` ### Toast.warning() 显示警告通知(橙色图标)。 #### 参数 | 参数名 | 类型 | 必填 | 默认值 | 说明 | |--------|------|------|--------|------| | message | string | 是 | - | 主要消息内容 | | description | string | 否 | '' | 详细描述 | | duration | number | 否 | 3 | 显示时长(秒) | #### 使用示例 ```jsx // 警告提示 Toast.warning('操作警告', '此操作可能影响系统稳定性') // 权限警告 Toast.warning('权限不足', '您没有执行此操作的权限') // 数据警告 Toast.warning('数据异常', '检测到部分数据可能不完整') ``` ### Toast.info() 显示信息通知(蓝色图标)。 #### 参数 | 参数名 | 类型 | 必填 | 默认值 | 说明 | |--------|------|------|--------|------| | message | string | 是 | - | 主要消息内容 | | description | string | 否 | '' | 详细描述 | | duration | number | 否 | 3 | 显示时长(秒) | #### 使用示例 ```jsx // 信息提示 Toast.info('系统提示', '系统将在5分钟后进行维护') // 操作提示 Toast.info('导入中', '正在导入数据,请稍候...') // 功能提示 Toast.info('新功能上线', '我们上线了新的数据导出功能') ``` ### Toast.custom() 显示自定义通知,支持所有 Ant Design notification 配置。 #### 参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | config | Object | 是 | 完整的 notification 配置对象 | #### 使用示例 ```jsx import { Button } from 'antd' // 带操作按钮的通知 Toast.custom({ message: '新版本可用', description: '发现新版本 v2.0.0,是否立即更新?', duration: 0, btn: ( ), key: 'update-key', }) // 自定义图标和样式 Toast.custom({ message: '自定义通知', description: '这是一个自定义样式的通知', icon: , style: { background: '#fffbe6', }, }) ``` ## 完整使用示例 ### 配合 ConfirmDialog 使用 ```jsx import ConfirmDialog from '../components/ConfirmDialog/ConfirmDialog' import Toast from '../components/Toast/Toast' const handleDeleteUser = (record) => { ConfirmDialog.delete({ itemName: `用户名:${record.userName}`, itemInfo: `姓名:${record.name}`, onOk() { return new Promise((resolve) => { setTimeout(() => { const newUsers = filteredUsers.filter((u) => u.id !== record.id) setFilteredUsers(newUsers) resolve() Toast.success('删除成功', `用户 "${record.userName}" 已成功删除`) }, 1000) }) }, }) } ``` ### 批量操作反馈 ```jsx const handleBatchDelete = () => { ConfirmDialog.batchDelete({ count: selectedRowKeys.length, items: selectedUsers, onOk() { return new Promise((resolve) => { setTimeout(() => { const count = selectedRowKeys.length const newUsers = filteredUsers.filter((u) => !selectedRowKeys.includes(u.id)) setFilteredUsers(newUsers) setSelectedRowKeys([]) resolve() Toast.success('批量删除成功', `已成功删除 ${count} 个用户`) }, 1000) }) }, }) } ``` ### 异步操作反馈 ```jsx const handleSaveUser = async (userData) => { try { setLoading(true) await api.updateUser(userData) setShowEditDrawer(false) Toast.success('保存成功', '用户信息已更新') fetchUsers() // 重新加载列表 } catch (error) { Toast.error('保存失败', error.message) } finally { setLoading(false) } } ``` ### 多步骤操作反馈 ```jsx const handleImportData = async () => { try { Toast.info('导入开始', '正在验证数据格式...') await api.validateData() Toast.info('验证通过', '正在导入数据...') const result = await api.importData() Toast.success('导入完成', `成功导入 ${result.count} 条数据`) } catch (error) { if (error.type === 'validation') { Toast.warning('验证失败', error.message) } else { Toast.error('导入失败', error.message) } } } ``` ### 表单提交反馈 ```jsx const handleSubmit = async (values) => { try { await api.createUser(values) Toast.success('创建成功', `用户 "${values.userName}" 已成功创建`) setShowEditDrawer(false) fetchUsers() } catch (error) { if (error.code === 'DUPLICATE') { Toast.warning('用户名已存在', '请使用其他用户名') } else { Toast.error('创建失败', error.message) } } } ``` ### 带按钮的持久通知 ```jsx const showUpdateNotification = () => { const key = `update-${Date.now()}` Toast.custom({ message: '发现新版本', description: '系统发现新版本 v2.0.0,建议立即更新', duration: 0, // 不自动关闭 key, btn: ( ), }) } ``` ## 使用场景 1. **操作成功反馈** - 增删改操作成功后的提示 2. **操作失败反馈** - 操作失败时显示错误信息 3. **警告提示** - 权限不足、数据异常等警告 4. **信息通知** - 系统公告、功能提示等 5. **进度通知** - 多步骤操作的进度反馈 6. **版本更新通知** - 带操作按钮的持久通知 ## 最佳实践 ### 消息文案 ```jsx // 好的做法:简洁明了 Toast.success('删除成功', '用户已删除') // 避免:冗余重复 Toast.success('删除成功', '删除用户成功') // ❌ ``` ### 显示时长 ```jsx // 简单提示:3秒(默认) Toast.success('保存成功') // 重要信息:5秒 Toast.warning('权限不足', '请联系管理员', 5) // 需要用户操作:不自动关闭 Toast.custom({ message: '需要您的确认', description: '...', duration: 0, btn: , }) ``` ### 类型选择 ```jsx // 成功:操作完成 Toast.success('保存成功') // 错误:操作失败、异常 Toast.error('保存失败', error.message) // 警告:权限、数据问题 Toast.warning('权限不足') // 信息:提示、公告 Toast.info('系统维护通知') ``` ## 样式特性 - **圆角设计**:8px 圆角,现代化视觉效果 - **阴影效果**:0 4px 12px rgba(0, 0, 0, 0.15) - **彩色图标**: - 成功:绿色 (#52c41a) - 错误:红色 (#ff4d4f) - 警告:橙色 (#faad14) - 信息:蓝色 (#1677ff) ## 注意事项 1. 通知从右上角滑出,默认 3 秒后自动消失 2. 最多同时显示 3 条通知,超出的会排队等待 3. `duration: 0` 表示通知不自动关闭,需手动关闭或调用 API 关闭 4. 通知内容不宜过长,建议 message 不超过 20 字,description 不超过 50 字 5. 频繁操作时避免连续显示大量通知,可以考虑合并提示 6. 配合 ConfirmDialog 使用时,在 `onOk` 回调中显示操作结果 7. 错误通知建议显示具体错误信息,帮助用户排查问题