feat: 添加业务分析后端接口
新增 AnalysisController 提供 6 个分析接口: - /admin/analysis/profit - 盈利分析(交易手续费/充提手续费/资金利差) - /admin/analysis/cash-flow - 资金流动趋势(按月统计充值/提现/净流入) - /admin/analysis/trade - 交易分析(买入/卖出统计+趋势) - /admin/analysis/coin-distribution - 币种交易分布 - /admin/analysis/user-growth - 用户增长分析(新增/活跃用户) - /admin/analysis/risk - 风险指标(大额交易/异常提现/KYC/冻结账户) - /admin/analysis/health - 综合健康度评分 更新 Mapper 添加分析查询方法: - OrderFundMapper: 手续费统计、时间范围查询、大额交易、异常提现 - OrderTradeMapper: 交易金额统计、活跃用户、币种分布 前端 API 对接: - 新增 6 个分析相关 Query hooks - 更新 analytics.vue 使用真实数据 - 动态决策建议基于实际数据
This commit is contained in:
359
REFACTOR_PLAN.md
Normal file
359
REFACTOR_PLAN.md
Normal file
@@ -0,0 +1,359 @@
|
||||
# Monisuo 前端重构计划 - 使用 shadcn_ui
|
||||
|
||||
**创建时间**: 2026-03-22 02:20
|
||||
**状态**: ⏳ 进行中
|
||||
|
||||
---
|
||||
|
||||
## ✅ 已完成
|
||||
|
||||
### 1. 依赖安装
|
||||
- ✅ shadcn_ui 0.2.6 已安装
|
||||
- ✅ flutter_animate 已安装
|
||||
- ✅ lucide_icons_flutter 已安装
|
||||
|
||||
### 2. 技能文档
|
||||
- ✅ 全局技能:`~/.agents/skills/shadcn-ui-flutter/`
|
||||
- ✅ 项目技能:`~/.agent/skills/shadcn-ui-flutter/`
|
||||
|
||||
### 3. 主应用配置
|
||||
- ✅ `main.dart` 已更新为 ShadApp
|
||||
- ✅ 主题配置完成(深色模式 + Slate 配色)
|
||||
|
||||
---
|
||||
|
||||
## 🔄 重构计划
|
||||
|
||||
### 阶段 1: 核心页面重构(优先)
|
||||
|
||||
#### 1.1 主页面
|
||||
- ✅ `main_page_shadcn.dart` - 已创建
|
||||
- ⏳ 替换原来的 `main_page.dart`
|
||||
|
||||
#### 1.2 登录/注册页面
|
||||
- ✅ `login_page_shadcn.dart` - 已创建示例
|
||||
- ⏳ 创建 `register_page_shadcn.dart`
|
||||
- ⏳ 完整表单验证
|
||||
|
||||
#### 1.3 首页(home_page.dart)
|
||||
需要重构的内容:
|
||||
- 使用 ShadCard 替换 Material Card
|
||||
- 使用 ShadButton 替换 ElevatedButton
|
||||
- 使用 LucideIcons 替换 Material Icons
|
||||
- 使用 ShadTheme 获取主题
|
||||
|
||||
#### 1.4 行情页面(market_page.dart)
|
||||
需要重构的内容:
|
||||
- 币种列表使用 ShadCard
|
||||
- 价格显示使用 shadcn 文本样式
|
||||
- 搜索框使用 ShadInput
|
||||
|
||||
#### 1.5 交易页面(trade_page.dart)
|
||||
需要重构的内容:
|
||||
- 买入/卖出使用 ShadButton
|
||||
- 数量输入使用 ShadInputFormField
|
||||
- 币种选择使用 ShadSelect
|
||||
|
||||
#### 1.6 资产页面(asset_page.dart)
|
||||
需要重构的内容:
|
||||
- 资产卡片使用 ShadCard
|
||||
- 充值/提现按钮使用 ShadButton
|
||||
- 资金列表优化
|
||||
|
||||
#### 1.7 个人中心(mine_page.dart)
|
||||
需要重构的内容:
|
||||
- 菜单项使用 shadcn 样式
|
||||
- 设置项使用 ShadSwitch
|
||||
- 退出登录使用 ShadButton
|
||||
|
||||
---
|
||||
|
||||
### 阶段 2: 组件优化
|
||||
|
||||
#### 2.1 自定义组件
|
||||
创建项目特定的 shadcn 组件:
|
||||
|
||||
**CoinCard** - 币种卡片
|
||||
```dart
|
||||
class CoinCard extends StatelessWidget {
|
||||
final String name;
|
||||
final String code;
|
||||
final double price;
|
||||
final double change24h;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ShadCard(
|
||||
child: Row(
|
||||
children: [
|
||||
ShadAvatar(coinIcon),
|
||||
Column(
|
||||
children: [
|
||||
Text(name, style: ShadTheme.of(context).textTheme.large),
|
||||
Text(code, style: ShadTheme.of(context).textTheme.muted),
|
||||
],
|
||||
),
|
||||
Spacer(),
|
||||
Column(
|
||||
children: [
|
||||
Text('\$$price', style: ShadTheme.of(context).textTheme.large),
|
||||
ShadBadge(
|
||||
child: Text('$change24h%'),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**TradeButton** - 交易按钮
|
||||
```dart
|
||||
class TradeButton extends StatelessWidget {
|
||||
final bool isBuy;
|
||||
final VoidCallback onPressed;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ShadButton(
|
||||
backgroundColor: isBuy ? Colors.green : Colors.red,
|
||||
child: Text(isBuy ? '买入' : '卖出'),
|
||||
onPressed: onPressed,
|
||||
);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**AssetCard** - 资产卡片
|
||||
```dart
|
||||
class AssetCard extends StatelessWidget {
|
||||
final String title;
|
||||
final double balance;
|
||||
final double change;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ShadCard(
|
||||
title: Text(title),
|
||||
child: Column(
|
||||
children: [
|
||||
Text('\$$balance', style: ShadTheme.of(context).textTheme.h2),
|
||||
Text('$change%', style: ShadTheme.of(context).textTheme.muted),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 阶段 3: 高级功能
|
||||
|
||||
#### 3.1 表单管理
|
||||
使用 ShadForm 重构所有表单:
|
||||
- 登录表单
|
||||
- 注册表单
|
||||
- 交易表单
|
||||
- 充值/提现表单
|
||||
|
||||
#### 3.2 对话框
|
||||
使用 ShadDialog 替换所有对话框:
|
||||
- 确认对话框
|
||||
- 错误提示
|
||||
- 成功提示
|
||||
|
||||
#### 3.3 动画
|
||||
使用 flutter_animate 添加动画:
|
||||
- 页面切换动画
|
||||
- 列表加载动画
|
||||
- 按钮点击动画
|
||||
|
||||
---
|
||||
|
||||
## 📋 重构检查清单
|
||||
|
||||
### 必须替换的组件
|
||||
|
||||
- [ ] `MaterialApp` → `ShadApp.custom`
|
||||
- [ ] `Scaffold` → 保持使用
|
||||
- [ ] `AppBar` → 自定义 AppBar
|
||||
- [ ] `ElevatedButton` → `ShadButton`
|
||||
- [ ] `TextButton` → `ShadButton.link`
|
||||
- [ ] `OutlinedButton` → `ShadButton.outline`
|
||||
- [ ] `TextField` → `ShadInputFormField`
|
||||
- [ ] `Card` → `ShadCard`
|
||||
- [ ] `Icon(Icons.xxx)` → `Icon(LucideIcons.xxx)`
|
||||
|
||||
### 样式迁移
|
||||
|
||||
- [ ] `Theme.of(context)` → `ShadTheme.of(context)`
|
||||
- [ ] `Colors.xxx` → `ShadTheme.of(context).colorScheme.xxx`
|
||||
- [ ] `TextStyle` → `ShadTheme.of(context).textTheme.xxx`
|
||||
|
||||
---
|
||||
|
||||
## 🎯 重构步骤
|
||||
|
||||
### 步骤 1: 替换主入口
|
||||
```bash
|
||||
# 1. 备份原文件
|
||||
cp lib/main.dart lib/main_backup.dart
|
||||
|
||||
# 2. 使用新版本(已完成)
|
||||
# main.dart 已更新为使用 ShadApp
|
||||
```
|
||||
|
||||
### 步骤 2: 逐页重构
|
||||
```bash
|
||||
# 按优先级重构
|
||||
1. login_page.dart # 登录页(已完成示例)
|
||||
2. main_page.dart # 主页(已完成示例)
|
||||
3. home_page.dart # 首页
|
||||
4. market_page.dart # 行情
|
||||
5. trade_page.dart # 交易
|
||||
6. asset_page.dart # 资产
|
||||
7. mine_page.dart # 我的
|
||||
```
|
||||
|
||||
### 步骤 3: 组件优化
|
||||
```bash
|
||||
# 创建自定义组件
|
||||
1. CoinCard - 币种卡片
|
||||
2. TradeButton - 交易按钮
|
||||
3. AssetCard - 资产卡片
|
||||
4. PriceChart - 价格图表
|
||||
```
|
||||
|
||||
### 步骤 4: 测试验证
|
||||
```bash
|
||||
# 测试所有功能
|
||||
1. 用户登录/注册
|
||||
2. 查看行情
|
||||
3. 进行交易
|
||||
4. 查看资产
|
||||
5. 个人设置
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎨 主题定制
|
||||
|
||||
### 当前主题配置
|
||||
```dart
|
||||
ShadThemeData(
|
||||
brightness: Brightness.dark,
|
||||
colorScheme: const ShadSlateColorScheme.dark(),
|
||||
)
|
||||
```
|
||||
|
||||
### 可选配色方案
|
||||
- **Slate**(当前):专业、稳重
|
||||
- **Zinc**:现代、简洁
|
||||
- **Blue**:活力、信任
|
||||
- **Green**:财富、增长
|
||||
- **Violet**:创新、独特
|
||||
|
||||
### 自定义品牌色
|
||||
```dart
|
||||
ShadThemeData(
|
||||
colorScheme: const ShadSlateColorScheme.dark(
|
||||
custom: {
|
||||
'brand': Color(0xFF00D4AA), # 品牌绿
|
||||
'up': Color(0xFF10B981), # 涨
|
||||
'down': Color(0xFFEF4444), # 跌
|
||||
},
|
||||
),
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 预期效果
|
||||
|
||||
### 视觉改进
|
||||
- ✅ 更现代的设计风格
|
||||
- ✅ 统一的视觉语言
|
||||
- ✅ 更好的深色模式支持
|
||||
- ✅ 流畅的动画效果
|
||||
|
||||
### 用户体验改进
|
||||
- ✅ 更清晰的视觉层次
|
||||
- ✅ 更好的交互反馈
|
||||
- ✅ 更快的加载动画
|
||||
- ✅ 更直观的表单验证
|
||||
|
||||
### 代码质量改进
|
||||
- ✅ 更少的样板代码
|
||||
- ✅ 更好的组件复用
|
||||
- ✅ 更容易的主题切换
|
||||
- ✅ 更简单的表单管理
|
||||
|
||||
---
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 方式 1: 渐进式重构(推荐)
|
||||
```bash
|
||||
# 1. 保持现有页面运行
|
||||
# 2. 逐个页面重构
|
||||
# 3. 测试通过后替换原文件
|
||||
```
|
||||
|
||||
### 方式 2: 完全重构
|
||||
```bash
|
||||
# 1. 重构所有页面
|
||||
# 2. 全面测试
|
||||
# 3. 一次性发布
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 重构示例
|
||||
|
||||
### Before (Material)
|
||||
```dart
|
||||
ElevatedButton(
|
||||
child: Text('登录'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: AppColors.primary,
|
||||
),
|
||||
onPressed: () {},
|
||||
)
|
||||
```
|
||||
|
||||
### After (shadcn_ui)
|
||||
```dart
|
||||
ShadButton(
|
||||
child: Text('登录'),
|
||||
onPressed: () {},
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⏱️ 预计时间
|
||||
|
||||
- **阶段 1**(核心页面):2-3 小时
|
||||
- **阶段 2**(组件优化):1-2 小时
|
||||
- **阶段 3**(高级功能):1-2 小时
|
||||
- **测试验证**:1 小时
|
||||
|
||||
**总计**:5-8 小时
|
||||
|
||||
---
|
||||
|
||||
## 🎯 下一步
|
||||
|
||||
1. ✅ 确认依赖已安装
|
||||
2. ⏳ 选择重构方式(渐进式推荐)
|
||||
3. ⏳ 开始重构首页
|
||||
4. ⏳ 逐步完成其他页面
|
||||
5. ⏳ 全面测试
|
||||
|
||||
---
|
||||
|
||||
**状态**: 准备就绪,等待开始重构
|
||||
**建议**: 采用渐进式重构,降低风险
|
||||
Reference in New Issue
Block a user