Skip to content

Repository files navigation

Money Tracker - 个人记账应用

一款跨平台个人记账应用,支持 Android、iOS、Windows、macOS、Linux 及 Web 多端运行。

技术栈

层级 技术
后端语言 Go 1.25
通信协议 ConnectRPC(兼容 gRPC / HTTP / REST)
ORM GORM
数据库 SQLite
接口定义 Protobuf + protoc-gen-gorm
前端框架 Flutter 3.10+
前端状态管理 flutter_bloc / Cubit
前端路由 go_router
前端网络 Dio
本地存储 Hive CE + Flutter Secure Storage
认证 Casdoor SSO

功能模块

模块 功能
认证 Casdoor 登录 / 登出
资产账户 资金载体管理,支持自定义图标和当前余额,可编辑/删除
分类 支出/收入分类管理(系统预设 + 用户自定义),支持图标选择
标签 自由标签,用于细化分类
记账 新增 / 编辑 / 删除交易记录,支持支出/收入/转账三种类型
流水 交易列表,支持按类型(支出/收入/转账)筛选
统计 月度/年度收支汇总、分类占比、账户分布、标签分布,支持按类型切换
内部转账 账户间转账,自动更新余额
借贷 借入/借出管理,支持标记归还
周期性记账 固定收支自动记账
主题 浅色/深色/跟随系统,支持多种主题颜色
语言 中文/英文切换
设置 分类/标签/周期性记账管理、主题/语言设置、关于、退出登录

项目结构

money-tracker/
├── api/                    # 后端接口实现
│   ├── asset_account.go
│   ├── category.go
│   ├── common.go
│   ├── recurring_task.go
│   ├── tag.go
│   └── transaction.go
├── bootstrap/              # 应用初始化
├── config.example.yaml     # 配置文件示例
├── globals/                # 全局变量
├── internal/               # 内部包(config、db、models 等)
│   ├── db/                 # 数据访问层
│   │   ├── asset_account.go
│   │   ├── category.go
│   │   ├── db.go
│   │   ├── recurring_task.go
│   │   ├── stats_cache.go  # 统计缓存
│   │   ├── tag.go
│   │   └── transaction.go
│   ├── models/
│   └── services/           # 业务逻辑层
│       ├── asset_account.go
│       ├── category.go
│       ├── recurring_task.go
│       ├── tag.go
│       └── transaction.go
├── proto/wsp/native/       # Protobuf 接口定义
│   ├── enum.proto          # 枚举定义
│   ├── transaction_api.proto
│   └── ...
├── server/                 # HTTP 服务器与路由注册
├── utils/                  # 工具函数
├── frontend/               # Flutter 前端项目
│   ├── lib/
│   │   ├── api/            # 网络请求仓库
│   │   ├── blocs/          # 状态管理(Cubit)
│   │   ├── l10n/           # 国际化(中文/英文)
│   │   ├── models/         # 数据模型
│   │   ├── pages/          # 页面
│   │   │   ├── assets/     # 资产页
│   │   │   ├── borrow_lend/ # 借贷页
│   │   │   ├── categories/ # 分类管理页
│   │   │   ├── login/      # 登录页
│   │   │   ├── recurring_tasks/ # 周期性记账页
│   │   │   ├── settings/   # 设置页(含主题、语言、关于)
│   │   │   ├── stats/      # 统计页
│   │   │   ├── tags/       # 标签管理页
│   │   │   ├── transaction_form/ # 交易表单页
│   │   │   └── transactions/ # 交易流水页
│   │   ├── proto/          # 生成的 Protobuf Dart 代码
│   │   ├── router/         # 路由定义
│   │   ├── services/       # 服务层(存储、认证、主题等)
│   │   └── utils/          # 工具函数
│   └── pubspec.yaml
└── main.go                 # 后端入口

快速开始

后端

  1. 复制配置文件并修改:
cp config.example.yaml data/config.yaml
# 编辑 data/config.yaml,填入 Casdoor 配置等
  1. 运行服务:
go run main.go

服务默认监听 127.0.0.1:10980

前端

  1. 进入前端目录并安装依赖:
cd frontend
flutter pub get
  1. 生成图标包(flutter_iconpicker 依赖):
dart run flutter_iconpicker:generate_packs --packs material
  1. 运行应用:
flutter run

构建发布版时需附加 --no-tree-shake-icons 标志,避免字体树摇优化导致图标缺失。

配置说明

配置文件参考 config.example.yaml,主要配置项:

配置 说明
scheme.addr 服务监听地址
scheme.port 服务监听端口
db.type 数据库类型(sqlite3)
db.name 数据库文件名
casdoors.endpoint Casdoor 服务地址
casdoors.client_id Casdoor Client ID
casdoors.client_secret Casdoor Client Secret
casdoors.organization_name Casdoor 组织名
casdoors.application_name Casdoor 应用名

许可证

私有项目,不对外发布。

About

个人记账应用

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages