拼豆店单机本地管理系统 — 倒计时看板 + 后台算账,零配置开箱即用。
版本:v1.0.0 技术栈:Python 3.8+ / Flask / SQLite / HTML + CSS + JavaScript 运行平台:Windows(支持打包为单文件 EXE)
- 12 张单人桌 U 型排列:左翼 4 张、底部 4 张、右翼 4 张,顶部为采光窗
- 老板操作台:U 型底部正中央,金色边框深色背景,实时显示今日营业额 + 时钟
- 开桌倒计时:点击空桌 → 选择「1小时卡(¥30)」或「2小时卡(¥50)」→ 实时倒计时
- 加钟功能:计时中点击桌子 → 加钟 30 分钟 / +¥15,自动累加订单金额
- 动态加桌:底部「➕ 增加桌子」按钮,新桌自动追加到布局
- 超时自动结账:倒计时归零自动释放桌子,订单计入营业额
- 今日营业额、当月总营业额、固定支出(房租 ¥3000/月)、额外支出、当月净赚
- 额外支出记账:名称 + 金额,自动归类到当月
- 本月支出明细列表
- ⚡ 极速测试按钮:一键插入一单已完成的 1 小时订单(¥30),即时验证数据变化
- 首次启动自动注入过去 90 天模拟数据:每天 5~15 笔随机订单(含加钟)
- 随机生成「购买豆子/胶水/模板」等额外支出记录
- 固定种子保证数据可复现
双击 一键启动.bat,脚本会自动检查 Python、安装依赖并启动服务,启动后自动打开浏览器。
# 1. 安装依赖
pip install -r requirements.txt
# 2. 启动
python app.py
# 3. 浏览器访问
# http://127.0.0.1:5001自定义端口:
python app.py --port 8080开启调试模式(代码热重载):
python app.py --debug双击 一键打包.bat,脚本自动安装 PyInstaller 并打包。
打包完成后,可执行文件位于:
dist\BeanTimeU.exe
- 单文件分发,目标机器无需安装 Python
- 首次运行在 exe 同目录生成
beantimeu.db数据库 - 双击即启动,自动打开浏览器
手动打包命令:
pyinstaller --onefile --name BeanTimeU ^
--add-data "templates;templates" ^
--add-data "static;static" ^
--collect-all flask --console app.pyBeanTimeU/
├── app.py # Flask 后端 + SQLite 初始化 + 模拟数据注入
├── requirements.txt # Python 依赖
├── 一键启动.bat # Windows 一键启动脚本
├── 一键打包.bat # Windows 一键打包 EXE 脚本
├── README.md # 项目说明文档
├── templates/
│ └── index.html # 单页前端(前台看板 + 后台算账)
├── static/
│ └── style.css # 马卡龙色系样式
└── beantimeu.db # 运行后自动生成(SQLite 数据库)
| 表名 | 说明 | 关键字段 |
|---|---|---|
desks |
桌子 | id, desk_name, status(idle/running), current_order_id |
orders |
订单 | id, desk_id, start_time, end_time, total_price, status |
time_cards |
时间卡 | 1小时卡(60min,¥30)、2小时卡(120min,¥50) |
add_ons |
加钟记录 | order_id, extra_minutes(30), extra_price(15), created_at |
expenses |
支出 | type(固定/额外), description, amount, occurred_date |
system_config |
系统配置 | key, value(每月固定支出 ¥3000) |
所有时间字段使用整数时间戳,避免时区问题。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | / |
主页面 |
| GET | /api/time_cards |
获取时间卡列表 |
| GET | /api/desks |
获取所有桌子(含当前订单) |
| POST | /api/desk/add |
增加桌子 |
| POST | /api/order/start |
开桌(desk_id + card_id) |
| POST | /api/order/add_time |
加钟(order_id,+30min/+¥15) |
| POST | /api/order/end |
提前结束订单 |
| GET | /api/stats |
获取营业额/支出/净赚统计 |
| GET | /api/expenses |
获取本月支出明细 |
| POST | /api/expense/add |
添加额外支出 |
| POST | /api/test/quick |
极速测试(插入1小时已完成订单) |
| 项目 | 价格 |
|---|---|
| 1小时卡 | ¥30 |
| 2小时卡 | ¥50 |
| 加钟(每30分钟) | ¥15 |
| 每月固定支出(房租) | ¥3000 |
净赚公式:当月净赚 = 当月总营业额 - 固定支出 - 额外支出总和
- 马卡龙色系:淡粉
#FFF0F3、淡蓝#E3F2FD、淡黄#FFF9C4、淡绿#E8F5E9 - 桌子状态:绿色 = 空闲,红色 = 计时中(带闪烁指示灯 + 剩余时间)
- 老板操作台:深棕背景 + 金色边框 + 皇冠标识
- 卡片式布局:圆角 16px,柔和阴影,悬停上浮效果
- 初始版本发布
- U型 12 桌倒计时看板
- 开桌 / 加钟 / 动态加桌 / 超时自动结账
- 后台算账系统(营业额、支出、净赚)
- 极速测试按钮
- 过去 90 天模拟数据自动注入
- 支持一键启动脚本和一键打包 EXE
Q:端口 5001 被占用怎么办?
A:用 python app.py --port 其他端口 指定,或修改 app.py 中的 DEFAULT_PORT。
Q:如何重置模拟数据?
A:删除 beantimeu.db 文件,重新启动会自动重新注入数据。
Q:打包后的 EXE 运行很慢?
A:单文件模式首次启动需要解压资源,属于正常现象;如需更快启动可改用 --onedir 目录模式。
Q:数据存在哪里?
A:直接运行时在项目根目录的 beantimeu.db;打包后在 EXE 所在目录。
MIT License — 仅供学习和内部使用。