5.2 KiB
5.2 KiB
NoVault App - React Native 移动端实施计划
📋 项目概述
将现有的 Web 端记账应用(frontend/)迁移到 React Native 原生应用(app/)。
技术栈对比
| 维度 | Web 端 (frontend/) | 移动端 (app/) |
|---|---|---|
| 框架 | React 19 + Vite | React Native 0.83 |
| 路由 | react-router-dom | @react-navigation/native |
| 状态 | Context + Hooks | Context + Hooks (复用) |
| 样式 | CSS 文件 | StyleSheet (需重写) |
| HTTP | fetch | fetch (可复用) |
| 图表 | ECharts | react-native-svg-charts 或 WebView |
| 图标 | @iconify/react | react-native-vector-icons |
| 动画 | framer-motion | react-native-reanimated |
🎯 核心功能模块
基于 Web 端的 pages 结构,移动端需要实现以下模块:
第一阶段:基础架构 (P0)
-
项目结构搭建
- src/ 目录结构
- 导航配置
- 主题系统
- API 服务层
-
认证模块
- 登录页面
- Token 存储 (AsyncStorage)
- 自动刷新机制
-
首页 (Home)
- 资产概览卡片
- 快捷记账入口
- 最近交易列表
第二阶段:核心功能 (P1)
-
交易模块 (Transactions)
- 交易列表 (虚拟滚动)
- 新增/编辑交易
- 交易详情
-
账户模块 (Accounts)
- 账户列表
- 账户详情
- 新增/编辑账户
-
分类管理
- 分类选择器
- 图标选择
第三阶段:增强功能 (P2)
- 预算模块 (Budget)
- 报表模块 (Reports)
- 设置模块 (Settings)
- 工具模块 (Tools)
📁 目录结构设计
app/
├── src/
│ ├── components/ # 可复用组件
│ │ ├── common/ # 通用组件 (Button, Card, Input...)
│ │ ├── transaction/ # 交易相关组件
│ │ └── account/ # 账户相关组件
│ │
│ ├── screens/ # 页面组件 (对应 Web 的 pages)
│ │ ├── Auth/ # 登录/注册
│ │ ├── Home/ # 首页
│ │ ├── Transactions/ # 交易
│ │ ├── Accounts/ # 账户
│ │ ├── Budget/ # 预算
│ │ ├── Reports/ # 报表
│ │ └── Settings/ # 设置
│ │
│ ├── navigation/ # 导航配置
│ │ ├── index.tsx # 根导航
│ │ ├── MainTab.tsx # 底部 Tab 导航
│ │ └── types.ts # 导航类型定义
│ │
│ ├── services/ # API 服务 (从 Web 端移植)
│ │ ├── api.ts # 基础 HTTP 客户端
│ │ ├── authService.ts
│ │ ├── transactionService.ts
│ │ └── accountService.ts
│ │
│ ├── hooks/ # 自定义 Hooks (从 Web 端移植)
│ │ ├── useTheme.tsx
│ │ └── useAuth.tsx
│ │
│ ├── contexts/ # Context Providers
│ │ ├── ThemeContext.tsx
│ │ └── AuthContext.tsx
│ │
│ ├── types/ # TypeScript 类型 (直接复用 Web 端)
│ │ └── index.ts
│ │
│ ├── theme/ # 主题配置
│ │ ├── colors.ts
│ │ ├── spacing.ts
│ │ └── typography.ts
│ │
│ └── utils/ # 工具函数 (从 Web 端移植)
│ ├── format.ts
│ └── date.ts
│
├── App.tsx # 应用入口
└── index.js # 注册入口
🔄 代码复用策略
可直接复用 (90%+)
| 模块 | 说明 |
|---|---|
types/index.ts |
类型定义完全相同 |
services/*.ts |
API 调用逻辑,需微调 storage 方式 |
utils/*.ts |
工具函数(日期格式化、金额计算等) |
需要适配 (50%)
| 模块 | 说明 |
|---|---|
hooks/*.tsx |
核心逻辑复用,UI 相关部分需调整 |
| 状态管理 | Context 逻辑复用,Provider 包装调整 |
需要重写 (100%)
| 模块 | 说明 |
|---|---|
| 所有 UI 组件 | <div> → <View>, CSS → StyleSheet |
| 导航系统 | react-router → react-navigation |
| 样式系统 | CSS 文件 → RN StyleSheet |
✅ 任务清单
Phase 1: 基础架构
- 1.1 创建 src/ 目录结构
- 1.2 安装核心依赖 (react-navigation, async-storage, vector-icons)
- 1.3 配置主题系统 (colors, typography, spacing)
- 1.4 移植 types/index.ts
- 1.5 创建 API 服务层 (适配 AsyncStorage)
- 1.6 配置导航结构 (Stack + Tab)
- 1.7 创建 AuthContext 和 ThemeContext
Phase 2: 核心页面
- 2.1 登录页面
- 2.2 首页 (资产概览 + 快捷入口)
- 2.3 交易列表页
- 2.4 新增交易页
- 2.5 账户列表页
Phase 3: 完善功能
- 3.1 交易详情和编辑
- 3.2 账户详情和编辑
- 3.3 分类选择器组件
- 3.4 预算模块
- 3.5 设置页面
📝 备注
- 优先保证核心记账流程可用
- 图表功能暂时使用 WebView 嵌入 ECharts,后期可替换为原生方案
- 保持 API 接口与 Web 端一致,后端无需改动