# ConfirmDialog 组件 ## 组件说明 确认对话框组件,基于 Ant Design Modal 封装,提供统一的确认对话框样式和交互。支持单个删除、批量删除、警告确认和通用确认等多种场景。 ## 组件位置 ``` src/components/ConfirmDialog/ConfirmDialog.jsx ``` ## API 方法 组件以静态方法的形式提供,无需实例化,直接调用即可。 ### ConfirmDialog.delete() 显示单个项目删除确认对话框。 #### 参数 | 参数名 | 类型 | 必填 | 默认值 | 说明 | |--------|------|------|--------|------| | title | string | 否 | '确认删除' | 对话框标题 | | itemName | string | 是 | - | 要删除的项目名称 | | itemInfo | string | 否 | - | 项目附加信息 | | onOk | function | 否 | - | 确认回调,支持返回 Promise | | onCancel | function | 否 | - | 取消回调 | #### 使用示例 ```jsx import ConfirmDialog from '../components/ConfirmDialog/ConfirmDialog' const handleDeleteUser = (record) => { ConfirmDialog.delete({ itemName: `用户名:${record.userName}`, itemInfo: `姓名:${record.name}`, onOk() { return new Promise((resolve) => { setTimeout(() => { // 执行删除操作 deleteUser(record.id) resolve() Toast.success('删除成功', `用户 "${record.userName}" 已成功删除`) }, 1000) }) }, }) } ``` ### ConfirmDialog.batchDelete() 显示批量删除确认对话框。 #### 参数 | 参数名 | 类型 | 必填 | 默认值 | 说明 | |--------|------|------|--------|------| | count | number | 是 | - | 要删除的项目数量 | | items | Array | 是 | - | 项目列表 | | onOk | function | 否 | - | 确认回调,支持返回 Promise | | onCancel | function | 否 | - | 取消回调 | ##### ItemInfo 对象 | 属性名 | 类型 | 必填 | 说明 | |--------|------|------|------| | name | string | 是 | 项目名称 | | info | string | 否 | 项目附加信息 | #### 使用示例 ```jsx const handleBatchDelete = () => { const selectedUsers = filteredUsers.filter((u) => selectedRowKeys.includes(u.id)) const items = selectedUsers.map((user) => ({ name: user.userName, info: user.name, })) ConfirmDialog.batchDelete({ count: selectedRowKeys.length, items, 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) }) }, }) } ``` ### ConfirmDialog.warning() 显示警告确认对话框。 #### 参数 | 参数名 | 类型 | 必填 | 默认值 | 说明 | |--------|------|------|--------|------| | title | string | 是 | - | 对话框标题 | | content | string\|ReactNode | 是 | - | 对话框内容 | | okText | string | 否 | '确定' | 确认按钮文字 | | cancelText | string | 否 | '取消' | 取消按钮文字 | | onOk | function | 否 | - | 确认回调 | | onCancel | function | 否 | - | 取消回调 | #### 使用示例 ```jsx const handleRiskyOperation = () => { ConfirmDialog.warning({ title: '操作警告', content: '此操作可能影响系统稳定性,确定要继续吗?', okText: '继续操作', onOk() { // 执行危险操作 performRiskyOperation() }, }) } ``` ### ConfirmDialog.confirm() 显示通用确认对话框。 #### 参数 | 参数名 | 类型 | 必填 | 默认值 | 说明 | |--------|------|------|--------|------| | title | string | 是 | - | 对话框标题 | | content | string\|ReactNode | 是 | - | 对话框内容 | | okText | string | 否 | '确定' | 确认按钮文字 | | cancelText | string | 否 | '取消' | 取消按钮文字 | | okType | string | 否 | 'primary' | 确认按钮类型(primary/danger) | | onOk | function | 否 | - | 确认回调 | | onCancel | function | 否 | - | 取消回调 | #### 使用示例 ```jsx const handleSubmit = () => { ConfirmDialog.confirm({ title: '提交确认', content: '确定要提交当前表单吗?', okText: '提交', onOk() { // 执行提交操作 submitForm() }, }) } ``` ## 完整使用示例 ### 单个删除 ```jsx import ConfirmDialog from '../components/ConfirmDialog/ConfirmDialog' import Toast from '../components/Toast/Toast' function UserListPage() { 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) }) }, }) } return ( ) } ``` ### 批量删除 ```jsx function UserListPage() { const [selectedRowKeys, setSelectedRowKeys] = useState([]) const handleBatchDelete = () => { const selectedUsers = filteredUsers.filter((u) => selectedRowKeys.includes(u.id)) const items = selectedUsers.map((user) => ({ name: user.userName, info: user.name, })) ConfirmDialog.batchDelete({ count: selectedRowKeys.length, items, 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) }) }, }) } return ( ) } ``` ### 自定义内容 ```jsx ConfirmDialog.confirm({ title: '重置密码', content: (

确定要重置用户 {user.userName} 的密码吗?

新密码将发送到用户邮箱

), okText: '确认重置', okType: 'primary', onOk() { resetPassword(user.id) }, }) ``` ### 异步操作处理 ```jsx const handleDeleteUser = (record) => { ConfirmDialog.delete({ itemName: `用户名:${record.userName}`, itemInfo: `姓名:${record.name}`, async onOk() { try { // 调用 API 删除用户 await api.deleteUser(record.id) // 更新本地数据 const newUsers = filteredUsers.filter((u) => u.id !== record.id) setFilteredUsers(newUsers) Toast.success('删除成功', `用户 "${record.userName}" 已成功删除`) } catch (error) { Toast.error('删除失败', error.message) throw error // 阻止对话框关闭 } }, }) } ``` ## 特性说明 ### 删除确认样式 - 红色危险图标 - 高亮显示要删除的项目信息 - 红色警告提示"此操作不可恢复,请谨慎操作!" - 危险样式的确认按钮 ### 批量删除列表 - 最多显示 200px 高度的滚动列表 - 每个项目显示名称和附加信息 - 项目间用分隔线隔开 ### Promise 支持 - `onOk` 回调支持返回 Promise - 异步操作进行时,确认按钮显示 loading 状态 - Promise reject 时,对话框不会关闭 - 适合调用 API 等异步操作 ### 居中显示 - 所有对话框默认垂直居中显示(`centered: true`) ## 使用场景 1. **删除确认** - 删除用户、设备、订单等数据前的确认 2. **批量删除** - 批量删除多条数据前的确认 3. **危险操作警告** - 执行可能影响系统的操作前的警告 4. **通用确认** - 提交表单、保存设置等操作的确认 5. **重要操作二次确认** - 任何需要用户明确确认的操作 ## 注意事项 1. 删除操作统一使用红色危险样式,提醒用户谨慎操作 2. `onOk` 回调支持同步和异步(返回 Promise)两种方式 3. 批量删除时,`items` 数组会在对话框中完整展示,注意数量控制 4. 对话框内容支持字符串和 React 节点,可以自定义复杂内容 5. 确认按钮文字建议明确操作类型,如"确认删除"、"确认提交"等 6. 配合 Toast 组件使用,提供操作结果反馈 7. 异步操作失败时,throw error 可以阻止对话框关闭