Skip to content
/ subm Public

一个现代化的订阅管理系统,帮助用户轻松管理和追踪各种订阅服务的费用和续费情况。

Notifications You must be signed in to change notification settings

vbskycn/subm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

订阅管理系统 (Subscription Management System)

Version License Node.js React TypeScript

一个现代化的订阅管理系统,帮助用户轻松管理和追踪各种订阅服务的费用和续费情况。

项目暂时没有开源,使用完全免费(但是有大量订阅的用户需要许可密钥才可)

🔗 快速链接

📸 界面预览

仪表板 - 智能费用概览

image-20250806145242038 智能仪表板展示月度/年度支出统计、即将到期的订阅提醒和分类费用分析

订阅管理 - 完整服务管理

image-20250801221449028 完整的订阅生命周期管理,支持添加、编辑、状态管理和批量导入

支付历史 - 详细记录追踪

image-20250801221518300 完整的支付历史记录,支持搜索,以及订单的增删改查

月度费用 - 趋势分析

image-20250801221542040 月度支出订单,直观展示支出详情

费用报告 - 深度数据分析

image-20250801221604667 强大的费用分析功能,包含趋势图表、分类统计和多维度数据展示

深色主题 - 现代化界面

image-20250731154252540 支持深色主题

🌟 项目特色

  • 智能订阅管理 - 全面的订阅生命周期管理,支持自动/手动续费,智能到期提醒
  • 多币种支持 - 支持8种主要货币(USD, EUR, GBP, CAD, AUD, JPY, CNY, TRY),实时汇率自动更新
  • 费用分析报告 - 强大的数据分析和可视化图表功能,支持趋势分析和分类统计
  • 响应式设计 - 完美适配桌面和移动端,提供一致的用户体验
  • 本地优先 - 基于SQLite的本地数据存储,保护用户隐私,无需云端依赖
  • Docker部署 - 一键部署,开箱即用,支持容器化部署
  • 🌍 国际化支持 - 完整的中英文双语支持,支持语言切换,提供本地化用户体验
  • 数据导入导出 - 支持CSV和JSON格式的数据导入导出,便于数据迁移和备份
  • 智能费用分析 - 支持月度、季度、年度费用分析,自动计算日均支出和支付次数
  • 实时汇率更新 - 集成天行数据API,支持自动汇率更新和货币转换
  • 🔐 许可证系统 - 集成完整的许可证验证系统,支持免费版、专业版、荣誉终生版
  • 智能限制管理 - 基于许可证类型的智能功能限制和订阅数量管理

📊 功能特性

核心功能

  • 订阅管理 - 添加、编辑、删除订阅服务,支持批量操作
  • 智能仪表板 - 支出概览和即将到期提醒,实时数据更新
  • 分类统计 - 按类别、支付方式统计费用,支持自定义分类
  • 搜索筛选 - 多维度搜索和状态筛选,快速定位订阅
  • 自定义配置 - 自定义分类和支付方式,灵活配置

高级功能

  • 自动续费处理 - 智能检测到期订阅并自动更新,支持定时任务
  • 多币种支持 - 8种主要货币实时转换,集成天行数据API自动更新汇率
  • 汇率自动更新 - 每日自动更新汇率数据,确保汇率准确性
  • 费用报告仪表板 - 全面的费用分析和可视化,支持多种图表类型
  • 支付历史追踪 - 完整的支付记录和历史分析,支持搜索和筛选
  • 数据导入导出 - CSV、JSON格式数据导入导出,支持数据迁移
  • 主题切换 - 支持浅色/深色/系统主题,个性化界面
  • 国际化界面 - 完整的中英文双语支持,支持语言切换
  • 定时任务 - 自动续费处理、汇率更新、数据统计等定时任务
  • 许可证验证 - 完整的许可证验证系统,支持远程验证和本地缓存
  • 智能限制管理 - 基于许可证类型的订阅数量限制和功能访问控制
  • 宽限期机制 - 服务器不可用时的智能降级和宽限期处理

技术特性

  • RESTful API - 完整的API接口,支持前端和后端分离
  • 数据库迁移 - 支持数据库结构升级和迁移
  • 错误处理 - 完善的错误处理和日志记录
  • 健康检查 - 内置健康检查端点,支持容器化部署
  • API认证 - 基于API Key的安全认证机制

🛠 技术栈

前端

  • 框架: React 18 + TypeScript
  • 构建工具: Vite 6.3.1
  • 样式: Tailwind CSS + shadcn/ui
  • 状态管理: Zustand 4.5.0
  • 路由: React Router DOM 6.22.1
  • 图表: Recharts 2.15.3
  • UI组件: Radix UI
  • 表单: React Hook Form 7.56.1
  • 主题: next-themes 0.4.6
  • 工具库:
    • date-fns 3.6.0 (日期处理)
    • axios 1.10.0 (HTTP客户端)
    • uuid 9.0.1 (唯一标识符)

后端

  • 运行时: Node.js 20+
  • 框架: Express 5.1.0
  • 数据库: SQLite + better-sqlite3 12.1.1
  • 定时任务: node-cron 3.0.3
  • API认证: API Key
  • CORS: cors 2.8.5
  • HTTP客户端: axios 1.6.0

部署

  • 容器化: Docker + Docker Compose
  • 进程管理: dumb-init
  • 健康检查: 内置健康检查端点
  • 多阶段构建: 前端构建 + 后端部署

系统架构

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   前端 (React)   │    │   后端 (Node.js) │    │   数据库 (SQLite) │
│                 │    │                 │    │                 │
│ - TypeScript    │◄──►│ - Express 5     │◄──►│ - better-sqlite3 │
│ - Vite          │    │ - RESTful API   │    │ - 本地存储       │
│ - Tailwind CSS  │    │ - 中间件        │    │ - 事务支持       │
│ - Zustand       │    │ - 定时任务      │    │ - 外键约束       │
└─────────────────┘    └─────────────────┘    └─────────────────┘

项目结构

Subscription-Management/
├── src/                    # 前端源码
│   ├── components/        # React组件
│   │   ├── ui/           # 基础UI组件
│   │   ├── subscription/ # 订阅相关组件
│   │   ├── dashboard/    # 仪表板组件
│   │   ├── charts/       # 图表组件
│   │   └── layouts/      # 布局组件
│   ├── pages/            # 页面组件
│   ├── store/            # 状态管理
│   ├── services/         # API服务
│   ├── utils/            # 工具函数
│   ├── types/            # TypeScript类型
│   └── locales/          # 国际化文件
├── server/               # 后端源码
│   ├── controllers/      # 控制器层
│   ├── services/         # 服务层
│   ├── routes/           # 路由层
│   ├── middleware/       # 中间件
│   ├── db/              # 数据库相关
│   ├── config/          # 配置文件
│   └── utils/           # 工具函数
├── docs/                # 文档目录
└── docker-compose.yml   # Docker配置

核心服务

  • 订阅管理服务 - 处理订阅的CRUD操作和生命周期管理
  • 汇率服务 - 管理多币种汇率转换和自动更新
  • 分析服务 - 提供费用分析和统计功能
  • 定时任务服务 - 处理自动续费和汇率更新
  • 支付历史服务 - 管理支付记录和历史追踪

🚀 快速开始

系统要求

  • Docker: 20.10.0 或更高版本(推荐)
  • Node.js: 20+ 版本(本地开发)
  • 内存: 至少 512MB
  • 存储: 至少 100MB 可用空间
  • 网络: 需要互联网连接(用于汇率更新和许可证验证)

部署方式

方式一:Docker run 部署(推荐)

数据目录准备

# 创建数据目录并设置权限
mkdir -p ${PWD}/subscription-manager/data
chown -R 1001:1001 ${PWD}/subscription-manager/data
chmod 755 ${PWD}/subscription-manager/data

停止并删除老的容器

# 停止并删除老的容器
docker stop subscription-manager
docker rm subscription-manager

部署应用

# 部署
docker run -d \
  --name subscription-manager \
  --restart unless-stopped \
  --user 0 \
  -p 3001:3001 \
  -v ${PWD}/subscription-manager/data:/app/data \
  -e API_KEY="your_secret_api_key_here" \
  -e TIANAPI_KEY="your_tianapi_key_here" \
  -e PORT="3001" \
  -e BASE_CURRENCY="CNY" \
  -e NODE_ENV="production" \
  -e VITE_API_URL="/api" \
  -e DATABASE_PATH="/app/data/database.sqlite" \
  zhoujie218/subscription-manager:latest

访问应用

首次使用

  1. 设置API密钥

    • 配置API密钥 API_KEY,就是你的管理订阅的密码
    • 配置货币汇率API TIANAPI_KEY(可选,用于自动汇率更新)
  2. 配置基础货币

    • 在设置页面选择基础货币
    • 默认支持 CNY, USD, EUR, GBP, CAD, AUD, JPY, TRY
  3. 添加订阅

    • 点击"添加订阅"按钮
    • 填写订阅信息(名称、金额、币种、计费周期等)
    • 选择分类和支付方式
  4. 导入数据(可选)

    • 支持CSV和JSON格式数据导入
    • 在设置页面使用导入功能

许可证系统配置

版本类型

  • 免费版 - 限制7个订阅,基础功能
  • 专业版 - 无限制订阅,1年有效期
  • 荣誉终生版 - 无限制订阅,永久有效

激活许可证

  1. 访问设置页面
  2. 点击"许可证管理"
  3. 输入许可证密钥
  4. 点击"验证许可证"

数据备份

导出数据

# 通过Web界面导出
# 设置 -> 数据管理 -> 导出数据

# 或直接备份数据库文件
cp server/database.sqlite backup.sqlite

导入数据

# 通过Web界面导入
# 设置 -> 数据管理 -> 导入数据

# 或直接恢复数据库文件
cp backup.sqlite server/database.sqlite

数据文件位置

  • Docker 部署:数据库位于 DATABASE_PATH 环境变量指定的路径(默认:/app/data/database.sqlite

🔧 配置说明

环境变量

配置以下变量(可选):

# API安全密钥 (必需)
API_KEY=your_secret_api_key_here

# 服务端口 (可选,默认3001)
PORT=3001

# 基础货币 (可选,默认CNY)
BASE_CURRENCY=CNY

# 天行数据API密钥 (可选,用于汇率更新)
TIANAPI_KEY=your_tianapi_key_here

# 数据库路径 (Docker部署时使用)
DATABASE_PATH=/app/data/database.sqlite

# 环境模式 (可选,默认production)
NODE_ENV=production

# 时区设置 (可选,默认Asia/Shanghai)
TZ=Asia/Shanghai

环境变量说明

变量名 必需 默认值 说明
API_KEY API认证密钥,用于保护API接口
PORT 3001 服务监听端口
BASE_CURRENCY CNY 系统基础货币,用于汇率转换
TIANAPI_KEY 天行数据API密钥,用于自动更新汇率
DATABASE_PATH /app/data/database.sqlite 数据库文件路径
NODE_ENV production 运行环境模式
TZ Asia/Shanghai 系统时区设置

部署配置

Nginx 配置示例

server {
    listen 80;
    server_name your-domain.com;
    
    location / {
        proxy_pass http://localhost:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

📚 文档导航

📖 用户文档

基本操作

添加订阅

  1. 点击"添加订阅"按钮
  2. 填写订阅信息(名称、金额、计费周期等)
  3. 选择分类和支付方式
  4. 点击"保存"

管理订阅

  • 编辑:点击订阅卡片上的编辑按钮
  • 删除:点击订阅卡片上的删除按钮
  • 状态管理:可以设置订阅为活跃、试用或已取消

查看报告

  • 仪表板:查看总体费用概览
  • 费用报告:查看详细的费用分析图表
  • 支付历史:查看所有支付记录

数据管理

  • 导入数据:支持CSV和JSON格式数据导入
  • 导出数据:支持CSV和JSON格式数据导出
  • 备份数据:定期备份数据库文件

API文档

系统提供完整的RESTful API接口,支持以下功能:

  • 订阅管理 - 订阅的增删改查操作
  • 支付历史 - 支付记录的管理和查询
  • 费用分析 - 费用统计和分析接口
  • 汇率管理 - 汇率查询和更新接口
  • 设置管理 - 系统配置和用户设置
  • 许可证验证 - 许可证验证和管理接口

认证方式

系统使用API Key进行认证,需要在请求头中包含:

Authorization: Bearer your_api_key_here

响应格式

所有API响应都遵循统一的JSON格式:

{
  "success": true,
  "data": {},
  "message": "操作成功",
  "timestamp": "2024-12-19T10:30:00Z"
}

核心API接口

健康检查

GET /api/health

订阅管理

GET    /api/subscriptions              # 获取订阅列表
GET    /api/subscriptions/:id          # 获取单个订阅
POST   /api/protected/subscriptions    # 创建订阅
PUT    /api/protected/subscriptions/:id # 更新订阅
DELETE /api/protected/subscriptions/:id # 删除订阅
POST   /api/protected/subscriptions/bulk # 批量导入

支付历史

GET    /api/payment-history            # 获取支付历史
POST   /api/protected/payment-history  # 创建支付记录
PUT    /api/protected/payment-history/:id # 更新支付记录
DELETE /api/protected/payment-history/:id # 删除支付记录

费用分析

GET /api/analytics/expenses            # 获取费用统计
GET /api/analytics/upcoming-renewals   # 获取即将到期的订阅
GET /api/analytics/recently-paid       # 获取最近支付的订阅

设置管理

GET /api/settings                      # 获取设置
PUT /api/protected/settings            # 更新设置

汇率管理

GET  /api/exchange-rates               # 获取汇率列表
PUT  /api/protected/exchange-rates     # 更新汇率
POST /api/protected/exchange-rates/update # 手动更新汇率

分类和支付方式

GET    /api/categories                 # 获取分类列表
POST   /api/protected/categories       # 创建分类
PUT    /api/protected/categories/:value # 更新分类
DELETE /api/protected/categories/:value # 删除分类

GET    /api/payment-methods            # 获取支付方式列表
POST   /api/protected/payment-methods  # 创建支付方式
PUT    /api/protected/payment-methods/:value # 更新支付方式
DELETE /api/protected/payment-methods/:value # 删除支付方式

错误代码

错误代码 描述 HTTP状态码
INVALID_API_KEY API密钥无效 401
MISSING_API_KEY 缺少API密钥 401
SUBSCRIPTION_NOT_FOUND 订阅不存在 404
CATEGORY_NOT_FOUND 分类不存在 404
PAYMENT_METHOD_NOT_FOUND 支付方式不存在 404
INVALID_BILLING_CYCLE 无效的计费周期 400
INVALID_STATUS 无效的状态 400
INVALID_CURRENCY 无效的货币 400
DUPLICATE_CATEGORY 分类已存在 409
DUPLICATE_PAYMENT_METHOD 支付方式已存在 409
FOREIGN_KEY_CONSTRAINT 外键约束违反 400
VALIDATION_ERROR 数据验证错误 400
INTERNAL_ERROR 内部服务器错误 500

数据库设计

系统使用SQLite数据库,主要包含以下表结构:

  • subscriptions - 订阅信息表
  • payment_history - 支付历史表
  • categories - 分类表
  • payment_methods - 支付方式表
  • exchange_rates - 汇率表
  • settings - 系统设置表
  • monthly_category_summary - 月度分类汇总表

🔍 故障排除

常见问题

1. 服务无法启动

# 检查端口是否被占用
lsof -i :3001

# 检查日志
docker logs subscription-manager

2. 数据库错误

# 重新初始化数据库
cd server
npm run db:reset

3. 许可证验证失败

  • 检查网络连接
  • 确认许可证密钥正确
  • 查看许可证服务器状态

4. 汇率更新失败

  • 检查 TIANAPI_KEY 是否正确
  • 确认网络连接正常
  • 查看服务器日志

日志查看

Docker 日志

# 查看容器日志
docker logs subscription-manager

# 实时查看日志
docker logs -f subscription-manager

🤝 贡献指南

问题反馈

如果您发现任何问题或有改进建议,请:

  1. 查看 Issues 是否已有相关讨论

  2. 创建新的 Issue,详细描述问题或建议

  3. 如果是 Bug,请提供复现步骤和环境信息

  4. 如果是功能请求,请说明使用场景和预期效果

📝 更新日志

v1.1.22 (2025-08-01)

  • 新增: 完整的国际化支持,中英文双语界面
  • 新增: 智能费用分析功能,支持月度、季度、年度分析
  • 新增: 实时汇率更新功能,集成天行数据API
  • 🐛 修复: 费用报告页面数据显示问题
  • 🐛 修复: 季度和年度卡片排序问题
  • 🐛 修复: 月度费用显示最新4个月的问题
  • 🔧 优化: 数据库查询性能优化
  • 🔧 优化: 前端组件渲染性能优化

v1.1.21 (2025-07-31)

  • 新增: 支付历史管理功能
  • 新增: 费用报告和趋势分析
  • 🐛 修复: 数据库迁移问题
  • 🔧 优化: 用户界面体验改进

v1.1.20 (2025-07-30)

  • 新增: 订阅导入导出功能
  • 新增: 多币种支持
  • 🐛 修复: 自动续费处理问题
  • 🔧 优化: API接口性能优化

👥 贡献者

感谢所有为这个项目做出贡献的开发者!

主要贡献者

  • @vbskycn - 项目后续创建者和主要维护者

贡献者列表


⭐ 如果这个项目对您有帮助,请给我们一个星标!

About

一个现代化的订阅管理系统,帮助用户轻松管理和追踪各种订阅服务的费用和续费情况。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published