Files
monisuo/flutter_monisuo/lib/data/models/account_models.dart
sion ffac6fc267 refactor: 将前端从 uni-app x 重构为 Flutter
变更内容:
- 删除 uni-app x 项目 (app/ 目录)
- 新增 Flutter 项目 (flutter_monisuo/ 目录)
- 新增部署脚本 (deploy/ 目录)

Flutter 项目功能:
- 用户登录/注册
- 首页资产概览
- 行情币种列表
- 交易买卖操作
- 资产账户管理
- 充值/提现/划转
- 深色主题
- JWT Token 认证

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 00:21:21 +08:00

167 lines
4.3 KiB
Dart

/// 资产总览模型
class AssetOverview {
final String totalAsset;
final String fundBalance;
final String tradeBalance;
final String totalProfit;
AssetOverview({
required this.totalAsset,
required this.fundBalance,
required this.tradeBalance,
required this.totalProfit,
});
factory AssetOverview.fromJson(Map<String, dynamic> json) {
return AssetOverview(
totalAsset: json['totalAsset']?.toString() ?? '0.00',
fundBalance: json['fundBalance']?.toString() ?? '0.00',
tradeBalance: json['tradeBalance']?.toString() ?? '0.00',
totalProfit: json['totalProfit']?.toString() ?? '0.00',
);
}
}
/// 资金账户模型
class AccountFund {
final int id;
final int userId;
final String balance;
final String frozenBalance;
final DateTime? updateTime;
AccountFund({
required this.id,
required this.userId,
required this.balance,
required this.frozenBalance,
this.updateTime,
});
factory AccountFund.fromJson(Map<String, dynamic> json) {
return AccountFund(
id: json['id'] as int? ?? 0,
userId: json['userId'] as int? ?? 0,
balance: json['balance']?.toString() ?? '0.00',
frozenBalance: json['frozenBalance']?.toString() ?? '0.00',
updateTime: json['updateTime'] != null
? DateTime.tryParse(json['updateTime'])
: null,
);
}
}
/// 交易账户模型(持仓)
class AccountTrade {
final int id;
final int userId;
final String coinCode;
final String quantity;
final String avgPrice;
final String totalCost;
final String currentValue;
final String profit;
final double profitRate;
final DateTime? updateTime;
AccountTrade({
required this.id,
required this.userId,
required this.coinCode,
required this.quantity,
required this.avgPrice,
required this.totalCost,
required this.currentValue,
required this.profit,
required this.profitRate,
this.updateTime,
});
factory AccountTrade.fromJson(Map<String, dynamic> json) {
return AccountTrade(
id: json['id'] as int? ?? 0,
userId: json['userId'] as int? ?? 0,
coinCode: json['coinCode'] as String? ?? '',
quantity: json['quantity']?.toString() ?? '0',
avgPrice: json['avgPrice']?.toString() ?? '0.00',
totalCost: json['totalCost']?.toString() ?? '0.00',
currentValue: json['currentValue']?.toString() ?? '0.00',
profit: json['profit']?.toString() ?? '0.00',
profitRate: (json['profitRate'] as num?)?.toDouble() ?? 0,
updateTime: json['updateTime'] != null
? DateTime.tryParse(json['updateTime'])
: null,
);
}
/// 格式化盈亏率
String get formattedProfitRate {
final prefix = profitRate >= 0 ? '+' : '';
return '$prefix${profitRate.toStringAsFixed(2)}%';
}
/// 是否盈利
bool get isProfit => profitRate >= 0;
}
/// 资金流水模型
class AccountFlow {
final int id;
final int userId;
final String flowType;
final String amount;
final String balanceBefore;
final String balanceAfter;
final String remark;
final DateTime? createTime;
AccountFlow({
required this.id,
required this.userId,
required this.flowType,
required this.amount,
required this.balanceBefore,
required this.balanceAfter,
required this.remark,
this.createTime,
});
factory AccountFlow.fromJson(Map<String, dynamic> json) {
return AccountFlow(
id: json['id'] as int? ?? 0,
userId: json['userId'] as int? ?? 0,
flowType: json['flowType']?.toString() ?? '',
amount: json['amount']?.toString() ?? '0.00',
balanceBefore: json['balanceBefore']?.toString() ?? '0.00',
balanceAfter: json['balanceAfter']?.toString() ?? '0.00',
remark: json['remark']?.toString() ?? '',
createTime: json['createTime'] != null
? DateTime.tryParse(json['createTime'])
: null,
);
}
/// 流水类型文字
String get flowTypeText {
switch (flowType) {
case '1':
return '充值';
case '2':
return '提现';
case '3':
return '转入交易账户';
case '4':
return '从交易账户转出';
case '5':
return '卖出收入';
case '6':
return '买入支出';
default:
return '未知';
}
}
/// 是否为收入
bool get isIncome => ['1', '3', '5'].contains(flowType);
}