Initial commit
This commit is contained in:
155
lib/models/order.dart
Normal file
155
lib/models/order.dart
Normal file
@@ -0,0 +1,155 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
enum OrderStatus {
|
||||
all,
|
||||
pendingPayment,
|
||||
pendingVerification,
|
||||
verified,
|
||||
pendingRefund,
|
||||
refunded,
|
||||
}
|
||||
|
||||
class OrderItem {
|
||||
final String id;
|
||||
final String orderNo;
|
||||
final String customerName;
|
||||
final String customerPhone;
|
||||
final String productName;
|
||||
final double amount;
|
||||
final OrderStatus status;
|
||||
final DateTime createdAt;
|
||||
final DateTime? paidAt;
|
||||
final DateTime? verifiedAt;
|
||||
final DateTime? refundedAt;
|
||||
final String? verifyCode;
|
||||
final int quantity;
|
||||
final String? remark;
|
||||
final String? scenicSpot;
|
||||
|
||||
const OrderItem({
|
||||
required this.id,
|
||||
required this.orderNo,
|
||||
required this.customerName,
|
||||
required this.customerPhone,
|
||||
required this.productName,
|
||||
required this.amount,
|
||||
required this.status,
|
||||
required this.createdAt,
|
||||
this.paidAt,
|
||||
this.verifiedAt,
|
||||
this.refundedAt,
|
||||
this.verifyCode,
|
||||
required this.quantity,
|
||||
this.remark,
|
||||
this.scenicSpot,
|
||||
});
|
||||
|
||||
String get statusText {
|
||||
switch (status) {
|
||||
case OrderStatus.pendingPayment:
|
||||
return '待支付';
|
||||
case OrderStatus.pendingVerification:
|
||||
return '待核销';
|
||||
case OrderStatus.verified:
|
||||
return '已核销';
|
||||
case OrderStatus.pendingRefund:
|
||||
return '待退款';
|
||||
case OrderStatus.refunded:
|
||||
return '已退款';
|
||||
default:
|
||||
return '全部';
|
||||
}
|
||||
}
|
||||
|
||||
Color get statusColor {
|
||||
switch (status) {
|
||||
case OrderStatus.pendingPayment:
|
||||
return const Color(0xFFF59E0B);
|
||||
case OrderStatus.pendingVerification:
|
||||
return const Color(0xFF3B82F6);
|
||||
case OrderStatus.verified:
|
||||
return const Color(0xFF10B981);
|
||||
case OrderStatus.pendingRefund:
|
||||
return const Color(0xFFEF4444);
|
||||
case OrderStatus.refunded:
|
||||
return const Color(0xFF64748B);
|
||||
default:
|
||||
return const Color(0xFF64748B);
|
||||
}
|
||||
}
|
||||
|
||||
bool get canVerify => status == OrderStatus.pendingVerification;
|
||||
bool get canRefund => status == OrderStatus.pendingVerification || status == OrderStatus.verified;
|
||||
|
||||
OrderItem copyWith({
|
||||
String? id,
|
||||
String? orderNo,
|
||||
String? customerName,
|
||||
String? customerPhone,
|
||||
String? productName,
|
||||
double? amount,
|
||||
OrderStatus? status,
|
||||
DateTime? createdAt,
|
||||
DateTime? paidAt,
|
||||
DateTime? verifiedAt,
|
||||
DateTime? refundedAt,
|
||||
String? verifyCode,
|
||||
int? quantity,
|
||||
String? remark,
|
||||
String? scenicSpot,
|
||||
}) {
|
||||
return OrderItem(
|
||||
id: id ?? this.id,
|
||||
orderNo: orderNo ?? this.orderNo,
|
||||
customerName: customerName ?? this.customerName,
|
||||
customerPhone: customerPhone ?? this.customerPhone,
|
||||
productName: productName ?? this.productName,
|
||||
amount: amount ?? this.amount,
|
||||
status: status ?? this.status,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
paidAt: paidAt ?? this.paidAt,
|
||||
verifiedAt: verifiedAt ?? this.verifiedAt,
|
||||
refundedAt: refundedAt ?? this.refundedAt,
|
||||
verifyCode: verifyCode ?? this.verifyCode,
|
||||
quantity: quantity ?? this.quantity,
|
||||
remark: remark ?? this.remark,
|
||||
scenicSpot: scenicSpot ?? this.scenicSpot,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'orderNo': orderNo,
|
||||
'customerName': customerName,
|
||||
'customerPhone': customerPhone,
|
||||
'productName': productName,
|
||||
'amount': amount,
|
||||
'status': status.name,
|
||||
'createdAt': createdAt.toIso8601String(),
|
||||
'paidAt': paidAt?.toIso8601String(),
|
||||
'verifiedAt': verifiedAt?.toIso8601String(),
|
||||
'refundedAt': refundedAt?.toIso8601String(),
|
||||
'verifyCode': verifyCode,
|
||||
'quantity': quantity,
|
||||
'remark': remark,
|
||||
'scenicSpot': scenicSpot,
|
||||
};
|
||||
|
||||
factory OrderItem.fromJson(Map<String, dynamic> json) => OrderItem(
|
||||
id: json['id'] ?? '',
|
||||
orderNo: json['orderNo'] ?? '',
|
||||
customerName: json['customerName'] ?? '',
|
||||
customerPhone: json['customerPhone'] ?? '',
|
||||
productName: json['productName'] ?? '',
|
||||
amount: (json['amount'] ?? 0.0).toDouble(),
|
||||
status: OrderStatus.values.byName(json['status'] ?? 'pendingPayment'),
|
||||
createdAt: DateTime.tryParse(json['createdAt'] ?? '') ?? DateTime.now(),
|
||||
paidAt: json['paidAt'] != null ? DateTime.tryParse(json['paidAt']) : null,
|
||||
verifiedAt: json['verifiedAt'] != null ? DateTime.tryParse(json['verifiedAt']) : null,
|
||||
refundedAt: json['refundedAt'] != null ? DateTime.tryParse(json['refundedAt']) : null,
|
||||
verifyCode: json['verifyCode'],
|
||||
quantity: json['quantity'] ?? 1,
|
||||
remark: json['remark'],
|
||||
scenicSpot: json['scenicSpot'],
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user