6.2 KiB
6.2 KiB
Omniledger 跨界记账中枢
跨境外汇投资组合追踪系统 | Cross-Border Portfolio Tracker
资产管理 · 交易记录 · 持仓分析 · 多币种支持
项目介绍
Omniledger 是一款专业的跨境外汇投资组合追踪应用,帮助用户管理多币种资产组合,支持股票、加密货币和现金的全面持仓管理。系统采用高精度数值计算,确保金融数据计算的准确性。
核心优势
- 多资产类型支持 - 股票、加密货币、现金全覆盖
- 多币种管理 - 支持不同货币的交易和换算
- 高精度计算 - 采用 Big.js 确保金融计算精度
- 实时持仓计算 - 自动聚合交易记录生成持仓报告
功能特性
资产管理
- 添加/查看资产(支持 STOCK/CRYPTO/CASH 三种类型)
- 统一的资产符号体系,防止重复
- 资产基础货币设置
交易记录
- 支持多种交易类型:买入(BUY)、卖出(SELL)、分红(DIVIDEND)、空投(AIRDROP)、手续费(FEE)
- 高精度数值存储(36位精度,18位小数)
- 交易手续费精确记录
- 实时汇率支持
持仓总览
- 实时持仓计算
- 自动聚合同资产交易
- 持仓卡片直观展示
交易历史
- 完整的交易流水账
- 按执行时间排序
- 交易详情一览无余
主题切换
- 浅色/深色模式
- 系统主题自动检测
- 流畅的过渡动画
技术栈
前端
| 技术 | 版本 | 用途 |
|---|---|---|
| Next.js | 16.2.4 | React 框架 |
| React | 19.2.4 | UI 库 |
| TypeScript | 5.3.3 | 类型安全 |
| Tailwind CSS | 3.4.17 | 样式框架 |
| shadcn/ui | - | UI 组件库 |
| React Hook Form | 7.74.0 | 表单处理 |
| Zod | 4.3.6 | 数据验证 |
| Lucide React | 1.11.0 | 图标库 |
后端
| 技术 | 版本 | 用途 |
|---|---|---|
| PostgreSQL | 16.0 | 数据库 |
| Drizzle ORM | 0.45.2 | ORM 框架 |
| Big.js | 7.0.1 | 高精度计算 |
| Drizzle Kit | 0.31.10 | 数据库迁移 |
快速开始
环境要求
- Node.js 20+
- PostgreSQL 数据库
- npm / yarn / pnpm / bun
安装步骤
# 克隆项目
git clone <repository-url>
cd stock-portfolio_byQwen3.6
# 安装依赖
npm install
# 配置环境变量
cp .env.local.example .env.local
# 编辑 .env.local,配置数据库连接
# 数据库初始化
npm run db:generate # 生成迁移文件
npm run db:push # 推送 schema 到数据库
# 启动开发服务器
npm run dev
打开 http://localhost:3000 即可访问。
可用命令
| 命令 | 说明 |
|---|---|
npm run dev |
启动开发服务器 |
npm run build |
构建生产版本 |
npm run start |
启动生产服务器 |
npm run lint |
运行 ESLint 检查 |
npm run db:generate |
生成数据库迁移 |
npm run db:push |
推送数据库 Schema |
npm run db:studio |
打开 Drizzle Studio |
项目结构
├── app/ # Next.js App Router
│ ├── dashboard/ # 仪表盘页面
│ │ ├── page.tsx # 持仓总览
│ │ ├── assets/page.tsx # 资产管理
│ │ ├── transactions/page.tsx# 交易历史
│ │ └── layout.tsx # 仪表盘布局
│ ├── layout.tsx # 根布局
│ ├── page.tsx # 根页面(重定向)
│ └── globals.css # 全局样式
├── src/
│ ├── actions/ # Server Actions
│ │ ├── asset.ts # 资产操作
│ │ ├── transaction.ts # 交易操作
│ │ └── portfolio.ts # 持仓计算
│ ├── components/
│ │ ├── assets/ # 资产组件
│ │ ├── transactions/ # 交易组件
│ │ └── ui/ # UI 基础组件
│ ├── db/ # 数据库层
│ │ ├── index.ts # Drizzle 客户端
│ │ └── schema.ts # 数据库 Schema
│ └── lib/
│ └── formatters.ts # 格式化工具
├── drizzle/ # 数据库迁移
├── public/ # 静态资源
└── package.json
数据库设计
表结构
assets 资产表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | UUID | 主键 |
| symbol | VARCHAR(20) | 资产符号(唯一) |
| type | ENUM | STOCK/CRYPTO/CASH |
| baseCurrency | VARCHAR(10) | 基础货币 |
| created_at | TIMESTAMP | 创建时间 |
transactions 交易表
| 字段 | 类型 | 说明 |
|---|---|---|
| id | UUID | 主键 |
| assetId | UUID | 关联资产 |
| txType | ENUM | BUY/SELL/DIVIDEND/AIRDROP/FEE |
| quantity | NUMERIC(36,18) | 数量(高精度) |
| price | NUMERIC(36,18) | 价格 |
| fee | NUMERIC(36,18) | 手续费 |
| txCurrency | VARCHAR(10) | 交易货币 |
| exchangeRate | NUMERIC(20,8) | 汇率 |
| executedAt | TIMESTAMP | 执行时间 |
| createdAt | TIMESTAMP | 创建时间 |
开发指南
添加新资产
- 进入「资产」页面
- 点击「添加资产」按钮
- 填写资产信息(符号、类型、基础货币)
- 提交保存
记录交易
- 进入「持仓总览」或「交易历史」页面
- 点击「记录交易」按钮
- 选择资产和交易类型
- 填写交易详情(数量、价格、手续费等)
- 提交保存
主题切换
点击页面右上角主题切换按钮,可在浅色/深色模式间切换。
许可证
MIT License