fix(c2c): 修复买方待付款页面灰色无法操作问题

根因: c2c_order_model.dart 的 _parsePaymentMethod 不识别 GREEN_POINTS,
导致 paymentMethod=null → hasPaymentInfo=false → 收款信息卡片隐藏 → 页面不可操作

前端修复:
- C2cPaymentMethod 枚举增加 greenPoints,解析器支持 GREEN_POINTS
- 支持逗号分隔的多支付方式字符串(取第一个作为主要方式)
- 订单详情页增加绿积分图标和卖方 Kava 地址显示(买方可复制)

后端修复:
- takeOrder() 接买单时自动获取卖方 Kava 地址写入 sellerKavaAddress
- 买方在订单详情页可看到卖方 Kava 地址用于转绿积分

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-31 05:41:14 -08:00
parent f167f1227c
commit 8c31dee000
3 changed files with 27 additions and 5 deletions

View File

@ -318,12 +318,17 @@ export class C2cService {
paymentDeadline,
};
// 如果是买单,接单方提供收款信息
// 如果是买单,接单方(卖方)提供收款信息
if (order.type === C2C_ORDER_TYPE.BUY) {
updateData.paymentMethod = options?.paymentMethod;
updateData.paymentAccount = options?.paymentAccount;
updateData.paymentQrCode = options?.paymentQrCode;
updateData.paymentRealName = options?.paymentRealName;
// 获取卖方takerKava 地址,买方需要用它来转绿积分
const takerKavaAddress = await this.identityClient.getUserKavaAddress(takerAccountSequence);
if (takerKavaAddress) {
updateData.sellerKavaAddress = takerKavaAddress;
}
}
const updatedOrder = await this.c2cOrderRepository.updateStatus(orderNo, C2C_ORDER_STATUS.MATCHED as any, updateData);

View File

@ -16,9 +16,10 @@ enum C2cOrderStatus {
/// C2C收款方式
enum C2cPaymentMethod {
alipay, //
wechat, //
bank, //
greenPoints, // 绿
alipay, //
wechat, //
bank, //
}
/// C2C订单模型
@ -164,7 +165,11 @@ class C2cOrderModel {
static C2cPaymentMethod? _parsePaymentMethod(String? method) {
if (method == null) return null;
switch (method.toUpperCase()) {
// "GREEN_POINTS,ALIPAY"
final primary = method.split(',').first.trim().toUpperCase();
switch (primary) {
case 'GREEN_POINTS':
return C2cPaymentMethod.greenPoints;
case 'ALIPAY':
return C2cPaymentMethod.alipay;
case 'WECHAT':
@ -209,6 +214,8 @@ class C2cOrderModel {
///
String get paymentMethodText {
switch (paymentMethod) {
case C2cPaymentMethod.greenPoints:
return '绿积分';
case C2cPaymentMethod.alipay:
return '支付宝';
case C2cPaymentMethod.wechat:

View File

@ -403,6 +403,14 @@ class _C2cOrderDetailPageState extends ConsumerState<C2cOrderDetailPage> {
value: order.paymentRealName!,
),
// Kava 绿
if (order.sellerKavaAddress != null && isBuyer)
_buildPaymentInfoRow(
label: 'Kava 地址',
value: order.sellerKavaAddress!,
canCopy: true,
),
//
const SizedBox(height: 12),
Container(
@ -660,6 +668,8 @@ class _C2cOrderDetailPageState extends ConsumerState<C2cOrderDetailPage> {
IconData _getPaymentIcon(C2cPaymentMethod? method) {
switch (method) {
case C2cPaymentMethod.greenPoints:
return Icons.eco;
case C2cPaymentMethod.alipay:
return Icons.account_balance_wallet;
case C2cPaymentMethod.wechat: