@blocklet/payment-react
Version:
Reusable react components for payment kit v2
154 lines (122 loc) • 6.09 kB
Markdown
# 自动充值组件
自动充值功能通过在用户信用余额低于指定阈值时自动为其充值,确保服务不中断。该功能由两个主要组件管理:`AutoTopup`,用于显示当前配置;以及 `AutoTopupModal`,用于提供设置界面。
## 自动充值工作流
下图展示了配置自动充值功能的典型用户流程。用户与 `AutoTopup` 显示组件交互,该组件会启动 `AutoTopupModal` 以进行更改。然后,该模态框与后端 API 通信以保存配置。
<!-- DIAGRAM_IMAGE_START:flowchart:16:9 -->

<!-- DIAGRAM_IMAGE_END -->
## AutoTopup
`AutoTopup` 组件是一个显示卡片,用于展示特定货币的当前自动充值状态,并提供配置入口。它支持多种渲染模式以实现灵活性。
### 属性
| Prop | Type | Description |
| --- | --- | --- |
| `currencyId` | `string` | **必需。** 要管理的信用货币的 ID。 |
| `onConfigChange` | `(config: AutoRechargeConfig) => void` | 可选。配置成功更新时触发的回调函数。 |
| `mode` | `'default' \| 'simple' \| 'custom'` | 可选。渲染模式。默认为 `'default'`。<br/>- `default`:完全展开的卡片,显示所有详细信息。<br/>- `simple`:紧凑的折叠视图,带有一个展开详情的按钮。<br/>- `custom`:使用 `children` render prop 渲染自定义 UI。 |
| `sx` | `SxProps` | 可选。应用于组件的自定义 MUI 样式。 |
| `children` | `(openModal, config, paymentData, loading) => React.ReactNode` | 可选。仅在 `mode` 为 `'custom'` 时使用的 render prop 函数。它接收构建自定义界面所需的工具。 |
### 用法
#### 简单模式
这是最常见的用例,提供一个紧凑的显示,用户可以展开以查看更多详细信息。
```tsx CreditManagement.tsx icon=logos:react
import { PaymentProvider, AutoTopup } from '@blocklet/payment-react';
function CreditManagement({ session, currencyId }) {
const handleConfigChange = (config) => {
console.log('自动充值配置已更新:', config);
// 你可能需要在此处刷新用户余额
};
return (
<PaymentProvider session={session}>
<AutoTopup
currencyId={currencyId}
mode="simple"
onConfigChange={handleConfigChange}
sx={{ mt: 2 }}
/>
</PaymentProvider>
);
}
```
#### 自定义模式
要完全控制 UI,请使用带有 render prop 的 `custom` 模式。这允许您将自动充值状态和配置触发器无缝集成到现有布局中。
```tsx CustomAutoTopupDisplay.tsx icon=logos:react
import { PaymentProvider, AutoTopup } from '@blocklet/payment-react';
import { Button, Card, CardContent, Typography } from '@mui/material';
function CustomAutoTopupDisplay({ session, currencyId }) {
return (
<PaymentProvider session={session}>
<AutoTopup currencyId={currencyId} mode="custom">
{(openModal, config, paymentData, loading) => {
if (loading) return <div>加载配置中...</div>;
return (
<Card variant="outlined">
<CardContent>
<Typography variant="h6">智能自动充值</Typography>
{config?.enabled ? (
<Typography color="success.main">
状态:已激活
</Typography>
) : (
<Typography color="text.secondary">
状态:未激活
</Typography>
)}
<Button onClick={openModal} variant="contained" sx={{ mt: 2 }}>
{config?.enabled ? '修改设置' : '立即设置'}
</Button>
</CardContent>
</Card>
);
}}
</AutoTopup>
</PaymentProvider>
);
}
```
## AutoTopupModal
`AutoTopupModal` 是一个对话框组件,允许用户启用、禁用和配置自动充值功能的所有方面,包括触发阈值、购买金额和支付方式。
### 属性
| Prop | Type | Description |
| --- | --- | --- |
| `open` | `boolean` | **必需。** 控制模态框是否可见。 |
| `onClose` | `() => void` | **必需。** 关闭模态框的回调函数。 |
| `currencyId` | `string` | **必需。** 正在配置的信用货币的 ID。 |
| `customerId` | `string` | 可选。客户的 DID。默认为 `PaymentProvider` 会话中的用户。 |
| `onSuccess` | `(config: AutoRechargeConfig) => void` | 可选。配置成功保存后触发的回调。 |
| `onError` | `(error: any) => void` | 可选。提交过程中发生错误时触发的回调。 |
| `defaultEnabled` | `boolean` | 可选。如果为 `true`,当为新配置打开模态框时,“启用自动充值”开关将默认开启。 |
### 用法
以下是一个关于如何管理 `AutoTopupModal` 状态并处理其回调的完整示例。
```tsx AutoRechargeSettings.tsx icon=logos:react
import { PaymentProvider, AutoTopupModal } from '@blocklet/payment-react';
import { useState } from 'react';
import { Button } from '@mui/material';
function AutoRechargeSettings({ session, currencyId }) {
const [isModalOpen, setModalOpen] = useState(false);
const handleSuccess = (config) => {
console.log('配置已成功保存:', config);
setModalOpen(false);
// 可选地,显示成功提示或刷新数据
};
const handleError = (error) => {
console.error('保存配置失败:', error);
// 可选地,向用户显示错误消息
};
return (
<PaymentProvider session={session}>
<Button variant="contained" onClick={() => setModalOpen(true)}>
配置自动充值
</Button>
<AutoTopupModal
open={isModalOpen}
onClose={() => setModalOpen(false)}
currencyId={currencyId}
onSuccess={handleSuccess}
onError={handleError}
defaultEnabled={true}
/>
</PaymentProvider>
);
}
```
此设置提供了一种强大的方式来管理自动充值功能,在给予用户控制权的同时,确保了维持其服务信用的流畅体验。