Skip to content

支付与权益组件

@mbjia/components

支付与权益组件

处理会员、点数、下载权益、充值和权益不足提示。

这一组组件处理会员、点数、下载权益、充值和权益不足提示。

模块定位

处理会员购买、点数购买、权益不足提示和通用权益拦截流程,通常和下载、分析、拆条等任务联动。

会员点数权益拦截

接入前确认

需要用户信息、权益接口、订单状态接口和支付跳转地址。部分流程通过 eventBus 打开弹窗。

userInforights APIeventBus

接入速览

什么时候用

下载、发布、拆条、AI 分析等动作需要先判断会员、点数、空间或通用权益时使用。

最少必填

弹窗类组件通常需要 open/show、关闭回调和用户/权益数据;流程类通常由 eventBus 打开。

返回什么

多数回调只通知关闭、支付或确认动作;真正订单状态和权益变化需要查服务接口。

容易漏什么

权益弹窗不应散落拼装,优先复用已有流程组件,避免扣费、确认和轮询状态不一致。

组件

组件说明
Payment会员套餐支付弹窗
BuyPointsModal加量包/点数购买弹窗
VipModal会员升级/购买弹窗
InsufficientModalFlow点数不足流程
GeneralInterestsFlow通用权益提示流程
OrderConfirm支付结果二次确认弹窗
DownloadConfirmModal下载次数确认弹窗
PublishConfirmModal发布次数确认弹窗
DownLoadProgress下载进度弹窗
DownLoadOverModal下载成功弹窗
DownLoadFailModal下载失败弹窗
ConfirmDownloadMemo扣费确认弹窗
NotEnoughVideoPointsMemo非会员点数不足弹窗
PurchasePointsMemo基础会员点数不足弹窗
PremiumPointsMemo高级会员点数不足弹窗
BigAccountPointsMemo大客户点数不足弹窗
NotEnoughSpaceMemo非会员空间不足弹窗
VipNotEnoughSpaceMemo会员空间不足弹窗
BuyPointsMemo新版点数加量包购买弹窗
WaitingMemo下载/扣费等待弹窗
GeneralInterestsModalMemo通用权益不足弹窗
MemberRecharge会员充值提醒弹窗
AliBuyModal阿里云服务市场购买/加购授权弹窗
BindPhoneModal下载前绑定手机号弹窗
CollectInfoModal获取试用信息收集弹窗
QueryStorageSpace存储空间查询和空间不足弹窗流程
TaobaoDispatchSelectModal淘宝/抖店发布目标选择弹窗
ECommerceStatusModal电商发布、支付和上传状态弹窗

权益弹窗预览

视频点不足
需扣除 12 个视频点,当前剩余 3 个。

权益拦截

下载、发布、拆条和 AI 分析通常先检查次数/点数/空间,再决定执行任务、升级会员或联系客户经理。

Payment

ts
interface IPayment {
  userInfo: any
  open: boolean
  isDiscount: boolean
  onClose: () => void
  onPay: () => void
}

行为:

  • 用户必须勾选《会员服务协议》后才能支付。
  • 根据 isDiscount 使用不同价格列表。
  • 点击支付后打开 ${MBJIA_ROOT_URL}/alipay?type=${type}

示例:

tsx
<Payment
  open={open}
  userInfo={user}
  isDiscount={false}
  onClose={() => setOpen(false)}
  onPay={() => console.log('开始支付')}
/>

回调出参:

回调出参说明
onClose关闭支付弹窗。
onPay点击支付时触发。组件内部会按套餐类型打开支付地址。

BuyPointsModal

ts
interface IProps {
  show?: boolean
  onClose?: Function
  eventBus?: any
}

回调出参:

回调出参说明
onClose由组件内部调用决定关闭购买点数弹窗。

依赖:

  • reqUserInfo
  • reqRights
  • reqIncrementList
  • getChargeOrderStatus
  • reqGetDescription

VipModal

ts
interface IProps {
  isUpgrade?: boolean
  handlePayCall?: () => void
  close?: () => void
  askLevel?: VIP_LEVEL
  askType?: VIP_TYPE
  show?: boolean
}

回调出参:

回调出参说明
handlePayCall支付动作回调。
close关闭会员弹窗。

枚举:

ts
enum VIP_TYPE {
  MONTH = 3,
  QUARTER = 4,
  YEAR = 5,
}

InsufficientModalFlow

ts
interface PropsType {
  eventBus: any
  hasEnoughPointAction?: (point: number) => void
}

回调出参:

回调出参说明
hasEnoughPointActionpoint: number点数足够时返回可用点数。

当点数不足时展示不同弹窗,并可触发:

事件说明
vip:modal:open打开会员弹窗
global:AllUserInterests:UpgradeVip:changeState通知业务切换会员升级状态

GeneralInterestsFlow

ts
interface PropsType {
  eventBus: any
  userType: TaskJobStatusEnum
}

interface GeneralInterestsOpen {
  title?: string
  desc?: string
}

主要事件:

事件说明
global:GeneralInterestsFlow:show打开通用权益弹窗

订单与确认弹窗

这组组件用于支付、下载、发布前后的确认。它们只负责弹窗 UI 和回调,不直接完成业务扣费。

OrderConfirm

支付完成后的二次确认弹窗。

tsx
<OrderConfirm
  open={confirmOpen}
  handleCancelOrder={() => closeConfirm()}
  handleConfirmOrder={() => queryOrderStatus()}
  desc="支付成功后可下载高清无水印视频"
/>
字段类型必填默认值说明
openboolean-弹窗是否打开。
handleCancelOrder() => void-点击“支付失败/未支付”时触发。
handleConfirmOrder() => void-点击“已支付成功”时触发。
closeModal() => void-关闭弹窗。
descstring'支付成功后发布高清无水印视频'描述文案。
closablebooleanfalse是否展示关闭按钮。
zIndexnumber4001弹窗层级。

DownloadConfirmModal

下载前确认消费次数。

tsx
<DownloadConfirmModal
  open={open}
  remain={10}
  current={1}
  onConfirm={() => download()}
  onClose={() => setOpen(false)}
/>
字段类型必填默认值说明
openboolean-弹窗是否打开。
remainnumber-剩余下载次数。
currentnumber-本次消费次数。
onConfirm() => void-确认下载。
onClose() => void-关闭弹窗。

PublishConfirmModal

发布前确认消费次数;当剩余次数为 0 时只展示升级会员入口。

tsx
<PublishConfirmModal
  open={open}
  remain={3}
  current={1}
  onConfirm={() => publish()}
  onUpgrade={() => openVip()}
  onClose={() => setOpen(false)}
/>
字段类型必填默认值说明
openboolean-弹窗是否打开。
remainnumber-剩余发布次数。
currentnumber-本次消费次数。
onConfirm() => void-确认发布。
onUpgrade() => void-升级会员。
onClose() => void-关闭弹窗。

下载结果弹窗

DownLoadProgress

下载进度弹窗。progress 取值按 0 ~ 1 处理,展示时会乘以 100。

tsx
<DownLoadProgress
  isShowProgress={progressOpen}
  progress={0.6}
  hideProgressBar={() => setProgressOpen(false)}
  emptyProgress={() => resetProgress()}
  copyUrl={() => copyDownloadUrl()}
/>
字段类型必填默认值说明
isShowProgressboolean-是否展示下载进度。
progressnumber | string-下载进度,1 表示完成。
showDownLoadModalFunction-保留回调,当前源码未主动调用。
emptyProgressFunction-清空进度。
hideProgressBarFunction-关闭进度弹窗。
copyUrlFunction-复制下载链接。

DownLoadOverModal

下载成功弹窗。大弹窗会展示“重新下载”、个人中心查看和客户经理二维码。

tsx
<DownLoadOverModal
  isDownLoadVideoModal={open}
  eventBus={eventBus}
  typeOfWork="template"
  hideDownLoadModal={() => setOpen(false)}
  copyUrl={() => copyDownloadUrl()}
/>
字段类型必填默认值说明
isDownLoadVideoModalboolean-是否展示弹窗。
hideDownLoadModal() => void-关闭弹窗。
eventBusany-点击重新下载时触发 global:downloadVideosDirectly
typeOfWork'template' | 'jianji' | 'ai''template'个人中心跳转锚点类型。
showBigDownloadOverModalbooleantrue是否展示大弹窗。
copyUrl() => void-复制下载链接。

DownLoadFailModal

下载失败弹窗,支持复制下载链接和展示客户经理二维码。

tsx
<DownLoadFailModal
  show={open}
  copyUrl={downloadUrl}
  hideDownLoadModal={() => setOpen(false)}
/>
字段类型必填默认值说明
showbooleanfalse是否展示弹窗。
copyUrlstring''需要复制的下载链接。
hideDownLoadModal() => void空函数关闭弹窗。
showBigDownloadOverModalbooleantrue是否展示大弹窗。
isOemboolean-是否 OEM 站点,影响背景和二维码区域。

扣费过程弹窗

这些组件来自 DeductionProcessModule,多数是 CommonModal 的场景化封装。业务通常不直接组合所有弹窗,而是在下载/生成流程里按用户类型和权益状态选择展示。

组件触发场景关键入参主要动作
ConfirmDownloadMemo点数足够,下载/任务前确认扣费confirmDownloadShowdeductPointsrestPointscostInfo确认后继续任务。
NotEnoughVideoPointsMemo非会员视频点不足notEnoughVideoPointsShowdeductPointsrestPoints购买加量包或升级会员。
PurchasePointsMemo基础会员视频点不足purchasePointsShowdeductPointsrestPoints购买加量包或升级会员。
PremiumPointsMemo高级会员视频点不足PremiumPointsShowaccountUrl联系客户经理或购买加量包。
BigAccountPointsMemo大客户视频点不足BigAccountPointsShowaccountUrl联系客户经理。
NotEnoughSpaceMemo非会员存储空间不足notEnoughSpaceShow清理素材或升级会员。
VipNotEnoughSpaceMemo会员存储空间不足vipNotEnoughSpaceShowaccountUrl清理素材或联系客户经理。
WaitingMemo下载/扣费等待中opennotice展示加载态。
MemberRecharge充值提醒reminderShowtextaccountUrl联系客户经理或继续充值。

通用入参约定:

字段类型说明
deductPointsnumber本次需要扣除的视频点。
restPointsnumber当前剩余视频点。
costInfo{ text?: string[] }扣费规则说明。
accountUrlstring客户经理二维码地址。
onOpenChangeFunction弹窗开关变化回调。
onOkFunction确认按钮回调。
onCancelFunction取消按钮回调。

BuyPointsMemo

新版点数加量包购买弹窗,会请求用户信息、权益信息、加量包列表,并在支付后复用 OrderConfirm 查询订单。

tsx
<BuyPointsMemo
  buyPointsShow={open}
  onCancel={() => setOpen(false)}
  defaultAvaterUrl="/default-user.png"
/>
字段类型必填默认值说明
buyPointsShowboolean-是否展示弹窗。
onCancel() => void-关闭弹窗。
defaultAvaterUrlstring内置默认头像用户头像兜底地址。

依赖接口:

接口用途
reqUserInfo获取用户头像、昵称。
reqRights获取会员和权益信息。
reqIncrementList获取加量包列表。
getChargeOrderStatus支付后查询订单状态。

GeneralInterestsModalMemo

通用权益不足弹窗。支持普通用户升级会员、大客户联系客户经理、阿里云服务市场用户购买/加购等分支。

tsx
<GeneralInterestsModalMemo
  GeneralInterestsShow={open}
  title="权益不足"
  desc="当前权益不足,请升级"
  memberShip={TaskJobStatusEnum.FREE}
  eventBus={eventBus}
  onCancel={() => setOpen(false)}
/>
字段类型必填默认值说明
GeneralInterestsShowboolean-是否展示弹窗。
titlestring'权益不足'标题。
descstring'您当前权益不足,请升级'描述,$$高亮内容$$ 会被渲染为红色。
memberShipTaskJobStatusEnumFREE用户会员状态。
eventBusany-普通用户升级时触发 vip:modal:open
mastBigbooleanfalse是否按大客户分支展示。
showConfirmBtnbooleanfalse是否展示确认按钮。
onConfirm() => void-确认按钮回调。
onCancel(type?: string) => void-关闭或购买/加购回调。

AliBuyModal

阿里云服务市场购买/加购授权弹窗。展示购买链接,支持复制链接和输入授权码兑换。

tsx
<AliBuyModal
  open={open}
  type="add"
  onOpenChange={() => setOpen(false)}
/>
字段类型必填默认值说明
openboolean-是否展示弹窗。
type'buy' | 'add'-buy 购买解决方案,add 加购增量包。
onOpenChange(open?: boolean, isClose?: boolean) => void-弹窗关闭或授权成功后触发。

账号与空间前置校验

这些组件一般不单独展示给用户,而是在下载、上传、试用申请等流程前作为前置校验节点。

BindPhoneModal

下载前绑定手机号弹窗。用户输入手机号和验证码,绑定成功后执行 handleDownloadVideo

tsx
<BindPhoneModal
  isShowBindPhone={open}
  setModalConversion={() => setOpen(false)}
  handleDownloadVideo={() => download()}
/>
字段类型必填默认值说明
isShowBindPhoneboolean-是否展示弹窗。
setModalConversion() => void-关闭弹窗。
handleDownloadVideo() => void-绑定成功后继续下载。

依赖接口:

接口用途
getBindVerification获取短信验证码。
bindMobile提交手机号和验证码完成绑定。

CollectInfoModal

获取产品试用信息弹窗。收集姓名、手机号、短信验证码和公司名称,内部复用 useVerifyCode

tsx
<CollectInfoModal
  open={open}
  registry={false}
  onClose={() => setOpen(false)}
  onConfirm={() => submitTrial()}
/>
字段类型必填默认值说明
openboolean-是否展示弹窗。
registryboolean-源码声明字段,当前实现未直接使用。
onClose() => void-关闭弹窗。
onConfirm() => void-提交成功后触发。

提交数据:

字段类型说明
namestring用户姓名。
companystring公司名称。
phonestring手机号,来自 useVerifyCode
codestring短信验证码,来自 useVerifyCode

QueryStorageSpace

存储空间查询流程组件。组件本身不渲染入口,通过 ref.getStorageSpace() 暴露检查方法;空间不足时自动打开对应弹窗。

tsx
const storageRef = useRef<{ getStorageSpace: () => Promise<any> }>(null)

<QueryStorageSpace ref={storageRef} typeOfWork="template" eventBus={eventBus} />

const result = await storageRef.current?.getStorageSpace()
if (result?.spaceEnough) {
  startUpload()
}
字段类型必填默认值说明
typeOfWork'template' | 'ai' | 'jianji'-空间不足后跳转个人中心时使用。
eventBusany-非会员点击升级时触发 vip:modal:open

Ref 方法:

方法返回值说明
getStorageSpace()Promise<{ spaceEnough; isVip; userRight } | null>查询用户权益和空间,空间不足时打开对应弹窗。

电商发布弹窗

TaobaoDispatchSelectModal

淘宝/抖店发布目标选择弹窗。根据 themedoudianData 决定可发布到主图、微详情、视频空间、轻应用讲解视频等目标。

tsx
<TaobaoDispatchSelectModal
  open={open}
  theme="taobaoTemplate"
  eventBus={eventBus}
  data={{ productId, templateId, taobaoProductId, renderLogId }}
  onClose={() => setOpen(false)}
  onConfirm={() => confirm()}
/>
字段类型必填默认值说明
eventBusany-发布、支付、轻应用事件通信。
openbooleantrue弹窗是否打开。
onClose() => void-关闭弹窗。
onConfirm() => void-确认回调。
validateBeforeConfirm() => boolean-确认前校验。
updateOrderStatus(status: number) => void-更新订单状态。
theme'ai' | 'jijian' | 'taobaoTemplate''taobaoTemplate'发布来源。
isMainDisablebooleanfalse是否禁用主图目标。
dataobject{}商品、模板、订单和记录 id。
doudianDataobject-轻应用/抖店数据。

主要事件:

事件说明
taobao:saas:dispatchAI SaaS 发布。
lightApplication:publishVideo轻应用发布视频。
global:taobaoDispatchSelectModal:dispatch电商状态弹窗确认后重新发布。

ECommerceStatusModal

电商状态弹窗。用于展示待支付、上传视频空间中、发布成功、取消、失败、重复订单、轻应用会员不足等状态。

tsx
<ECommerceStatusModal
  open={open}
  status={1}
  application="taobaoTemplate"
  eventBus={eventBus}
  onClose={() => setOpen(false)}
/>
字段类型必填默认值说明
openboolean-弹窗是否打开。
closablebooleanfalse是否可关闭。
statusnumber | string-状态码或特殊状态。
onClose(status?: any) => void-关闭弹窗。
dataany{}业务数据,常用 data.url 跳转商品。
eventBusany-发布、重试、支付确认事件。
application'ai' | 'taobaoTemplate' | 'lightApplication''taobaoTemplate'应用来源。
errorMsgstring-错误文案。
restNumbernumber0剩余次数。
btnTextstring''操作按钮文案。

常见状态:

status说明
0待支付。
1支付完成,等待上传视频空间;内部使用假进度。
2订单完成。
3订单取消。
4上传视频空间失败。
7存在重复订单。
'confirmPayment'支付后确认发布。

流程预览

用户触发下载/分析/拆条查询权益和费用判断点数是否足够
权益判断
足够:执行扣费或任务不足:判断用户类型非会员点数不足会员点数不足购买会员/加量包

MBJIA Tools 文档