feat(web): 构建Flutter Web应用并添加资金管理功能

- 生成Flutter Web构建产物,包括主应用文件、资源文件和CanvasKit支持
- 添加资金订单管理功能,支持资金充值和提现操作
- 更新管理后台界面,优化仪表板和订单页面显示
- 扩展后端API接口,增加资金相关服务和控制器
- 添加数据库索引优化查询性能
This commit is contained in:
2026-04-05 23:58:01 +08:00
165 changed files with 221727 additions and 252 deletions

View File

@@ -69,7 +69,7 @@ class _FundOrderCard extends StatelessWidget {
case 1:
return '待审批';
case 2:
return '完成';
return '出款';
case 3:
return '已驳回';
case 4:

View File

@@ -214,6 +214,10 @@ class _FundOrdersPageState extends State<FundOrdersPage> {
const SizedBox(height: AppSpacing.sm),
_buildRejectionReason(order),
],
if (order.withdrawContact != null) ...[
const SizedBox(height: AppSpacing.sm - AppSpacing.xs),
_buildDetailRow('联系方式', order.withdrawContact!, c),
],
if (order.receivableAmount != null && !order.isDeposit) ...[
const SizedBox(height: AppSpacing.sm),
_buildPayableRow(order),
@@ -222,26 +226,42 @@ class _FundOrdersPageState extends State<FundOrdersPage> {
const SizedBox(height: AppSpacing.sm + AppSpacing.xs),
_buildActions(order),
],
const SizedBox(height: AppSpacing.sm),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'创建: ${_formatTime(order.createTime)}',
style: AppTextStyles.bodySmall(context).copyWith(color: c.mutedText),
),
if (order.rejectReason != null)
Expanded(
child: Text(
'驳回: ${order.rejectReason}',
style: AppTextStyles.bodySmall(context).copyWith(color: AppColorScheme.getDownColor(_isDark)),
textAlign: TextAlign.right,
overflow: TextOverflow.ellipsis,
),
),
],
),
],
),
);
}
// ---------------------------------------------------------------------------
// Card Header - type badge + status badge
// Card Header (order type + status badge)
// ---------------------------------------------------------------------------
Widget _buildCardHeader(OrderFund order) {
final upColor = AppColorScheme.getUpColor(_isDark);
final downColor = AppColorScheme.getDownColor(_isDark);
final upBg = AppColorScheme.getUpBackgroundColor(_isDark, opacity: 0.12);
final downBg = AppColorScheme.getDownBackgroundColor(_isDark, opacity: 0.12);
final typeColor = order.isDeposit ? upColor : downColor;
final typeBg = order.isDeposit ? upBg : downBg;
final c = _colors;
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildBadge(order.typeText, typeColor, typeBg),
Text(
order.isDeposit ? '充值' : '提现',
style: AppTextStyles.headlineMedium(context).copyWith(color: c.primaryText),
),
_buildStatusBadge(order),
],
);