Implements, verifies, and archives the three remaining Wave 2 changes from openspec/MIGRATION-PLAN.md. - add-wallet-settlement (P3): demo recharge, guarded withdrawal freeze and one-time admin review, paginated own fund entries, idempotent per-shop weekly/monthly settlement statements with commission rate and one-time payout confirmation. - add-merchant-onboarding (P5): personal/enterprise applications with one live application per user, guarded review with mandatory rejection reason, and transactional shop + owner provisioning returning one-time credentials; mall onboarding/status pages and an admin review console. - add-membership-messaging (P7): platform member levels, append-only growth accrual on order completion with guarded one-way leveling, order/shipment/ refund system messages with unread/read state and soft deletion, plus the mall header unread badge. Backend: migrations 0019-0023, new wallet, settlement, merchant_onboarding, membership and messaging modules, event hooks in order/fulfillment/aftersale, and integration suites for each. Shared contract extended and all three frontends updated; code indexes, domain docs, backend guidelines and the migration tracker synced. Verification: cargo test -p vmall-api green twice consecutively; mall, admin and shop-admin builds pass; browser smoke on every new surface; openspec validate --all --strict green (33 passed). The three changes share the @vmall/shared contract, the mall mock adapter and per-app locale/nav files, so they are committed together to keep every commit buildable.
135 lines
6.1 KiB
TypeScript
135 lines
6.1 KiB
TypeScript
export default {
|
||
en: {
|
||
wallet: {
|
||
title: "My wallet",
|
||
available: "Available balance",
|
||
frozen: "Frozen funds",
|
||
loadFailed: "Unable to load your wallet.",
|
||
entriesTitle: "Fund entries",
|
||
entriesEmpty: "No fund entries yet.",
|
||
entriesFailed: "Unable to load fund entries.",
|
||
entryDate: "Date",
|
||
entryAccount: "Account",
|
||
entryReason: "Reason",
|
||
entryDelta: "Change",
|
||
entryBalance: "Balance after",
|
||
accountAvailable: "Available",
|
||
accountFrozen: "Frozen",
|
||
rechargeTitle: "Recharge",
|
||
rechargeDemoBadge: "Simulated · demo",
|
||
rechargeDemoNote:
|
||
"This is a demo recharge: no payment provider is contacted and no real money moves.",
|
||
rechargeAmount: "Recharge amount ({currency})",
|
||
rechargeAmountHint:
|
||
"Enter a major-unit amount in {currency}; it is credited to your available balance immediately.",
|
||
rechargeSubmit: "Simulate recharge",
|
||
rechargeSuccess: "Simulated recharge credited: {amount}.",
|
||
rechargeFailed: "Recharge failed. Please try again.",
|
||
rechargeConflict:
|
||
"The recharge conflicted with the current account state, so it was not applied. Balances have been refreshed.",
|
||
withdrawTitle: "Withdraw funds",
|
||
withdrawHint:
|
||
"A withdrawal leaves your available balance immediately and is held as frozen funds until the platform reviews the request.",
|
||
withdrawAmount: "Withdrawal amount ({currency})",
|
||
withdrawAmountHint: "It cannot exceed the available balance.",
|
||
withdrawMethod: "Payout method",
|
||
withdrawMethodBank: "Bank transfer",
|
||
withdrawMethodAlipay: "Alipay",
|
||
withdrawMethodWechat: "WeChat Pay",
|
||
withdrawAccount: "Payout account",
|
||
withdrawAccountHint: "Bank account number or payment handle",
|
||
withdrawHolder: "Account holder (optional)",
|
||
withdrawSubmit: "Submit withdrawal request",
|
||
withdrawSuccess: "Withdrawal request submitted; the amount is now frozen and pending review.",
|
||
withdrawConflict:
|
||
"Insufficient available balance: a withdrawal freezes the full amount, so this request was rejected as a conflict. The balances below show the current server state.",
|
||
withdrawFailed: "Unable to submit the withdrawal request.",
|
||
validationRequired: "Enter a positive amount, a payout method and a payout account.",
|
||
historyTitle: "Withdrawal requests",
|
||
historyEmpty: "No withdrawal requests yet.",
|
||
historyCreatedAt: "Requested",
|
||
historyAmount: "Amount",
|
||
historyMethod: "Method",
|
||
historyAccount: "Payout account",
|
||
historyStatus: "Status",
|
||
historyNote: "Review note",
|
||
historyReviewedAt: "Reviewed",
|
||
status_pending: "Pending review",
|
||
status_approved: "Approved",
|
||
status_rejected: "Rejected",
|
||
reason_wallet_recharge: "Simulated recharge",
|
||
reason_wallet_withdrawal_freeze: "Withdrawal held",
|
||
reason_wallet_withdrawal_approved: "Withdrawal paid out",
|
||
reason_wallet_withdrawal_rejected: "Withdrawal returned",
|
||
reason_order_payment: "Order payment",
|
||
reason_aftersale_refund: "After-sale refund",
|
||
reason_settlement_payout: "Settlement payout",
|
||
reason_opening_balance: "Opening balance",
|
||
},
|
||
},
|
||
zh: {
|
||
wallet: {
|
||
title: "我的钱包",
|
||
available: "可用余额",
|
||
frozen: "冻结资金",
|
||
loadFailed: "钱包数据加载失败。",
|
||
entriesTitle: "资金明细",
|
||
entriesEmpty: "暂无资金明细。",
|
||
entriesFailed: "资金明细加载失败。",
|
||
entryDate: "时间",
|
||
entryAccount: "账户",
|
||
entryReason: "原因",
|
||
entryDelta: "变动",
|
||
entryBalance: "变动后余额",
|
||
accountAvailable: "可用",
|
||
accountFrozen: "冻结",
|
||
rechargeTitle: "充值",
|
||
rechargeDemoBadge: "模拟 · 演示",
|
||
rechargeDemoNote: "这是模拟充值:不会接入任何支付渠道,也不会发生真实资金流转。",
|
||
rechargeAmount: "充值金额({currency})",
|
||
rechargeAmountHint: "请输入 {currency} 主单位金额,将立即计入可用余额。",
|
||
rechargeSubmit: "模拟充值",
|
||
rechargeSuccess: "模拟充值已到账:{amount}。",
|
||
rechargeFailed: "充值失败,请重试。",
|
||
rechargeConflict: "充值因账户状态冲突未生效,余额已重新加载。",
|
||
withdrawTitle: "申请提现",
|
||
withdrawHint: "提现会立即从可用余额中扣除并计为冻结资金,等待平台审核。",
|
||
withdrawAmount: "提现金额({currency})",
|
||
withdrawAmountHint: "不得超过可用余额。",
|
||
withdrawMethod: "提现方式",
|
||
withdrawMethodBank: "银行转账",
|
||
withdrawMethodAlipay: "支付宝",
|
||
withdrawMethodWechat: "微信支付",
|
||
withdrawAccount: "收款账户",
|
||
withdrawAccountHint: "银行卡号或收款账号",
|
||
withdrawHolder: "开户人(选填)",
|
||
withdrawSubmit: "提交提现申请",
|
||
withdrawSuccess: "提现申请已提交,金额已冻结并等待审核。",
|
||
withdrawConflict:
|
||
"可用余额不足:提现会冻结全额资金,因此本次申请被拒绝(冲突)。下方余额为服务器当前状态。",
|
||
withdrawFailed: "提现申请提交失败。",
|
||
validationRequired: "请填写正确的金额、提现方式与收款账户。",
|
||
historyTitle: "提现记录",
|
||
historyEmpty: "暂无提现申请。",
|
||
historyCreatedAt: "申请时间",
|
||
historyAmount: "金额",
|
||
historyMethod: "方式",
|
||
historyAccount: "收款账户",
|
||
historyStatus: "状态",
|
||
historyNote: "审核备注",
|
||
historyReviewedAt: "审核时间",
|
||
status_pending: "待审核",
|
||
status_approved: "已通过",
|
||
status_rejected: "已拒绝",
|
||
reason_wallet_recharge: "模拟充值",
|
||
reason_wallet_withdrawal_freeze: "提现冻结",
|
||
reason_wallet_withdrawal_approved: "提现已打款",
|
||
reason_wallet_withdrawal_rejected: "提现已退回",
|
||
reason_order_payment: "订单支付",
|
||
reason_aftersale_refund: "售后退款",
|
||
reason_settlement_payout: "结算打款",
|
||
reason_opening_balance: "期初余额",
|
||
},
|
||
},
|
||
};
|