Files
spark-tracker/README.md
T

86 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 星火纪元 · 儿童个人成长系统(自托管)
给自家孩子用的轻量成长记录 Web 服务:追踪**学科进度**、**读书**、**运动打卡**、**健康**并颁发轻量徽章。
纯本地、离线可用,数据存在你自己的 SQLite 文件里,不依赖任何云、不用 Docker。
## 特性
- 📅 **学期 / 假期双日历**:进度环旁两张点状日历——「学期日历」与「假期日历」,每点代表一天,按颜色区分打卡密度(越深越多 / 蓝=周末 / 灰=未打卡 / 圆环=今天)。起止日期(学期起止、假期起止)都在家长后台「孩子信息」里设定。
- 🎡 **各学科进度一览**:一行小进度环,每屏 3 个学科自动轮播;右侧有半透明「›」箭头可手动切下一屏。
- 📚 **学科进度(单科轮播)**:整年课表(学科 → 单元/章节)逐科展示;每科按任务顺序显示「已完成 3 · 进行中 1 · 待完成 3」,点一下即完成、下一任务自动接上。点「详情」弹窗看全部单元与目标日。
- 📖 **书架墙**:已读完的书以封面墙展示——上排 3 本最近读完、下排 3 本随机回顾;点「详情」弹窗可按书名/作者/分类搜索、分类筛选、排序。无封面时显示彩色书脊,封面完成日期标在右下角。封面支持本地上传(自动标准化为统一 2:3 并生成缩略图)或填图片 URL。
- 💗 **健康综合**:主视图只显示「身高 / 体重」当前值与同龄标准参考(标签置于数字左侧);点右上角「📈 图表详情」弹窗看最近两年的身高(绿)/体重(橙)双线趋势。家长后台可补录任意历史日期的健康数据。
- 🚀 **浮动快捷打卡**:仪表盘右下角常驻竖向按钮(默认跳绳 / 仰卧起坐 / 读书),点一下即记录当天打卡;**类型可在家长后台「浮动打卡项」里新增、改名、删除**,仪表盘即时更新。
- 🏅 **轻量徽章**:由任务完成数、读书、运动等实时派生(如「迈出第一步」「任务小达人」「单科全通关」「学年进度过半」等),随进展自动获得;仪表盘顶部轮播已得徽章,点开可看全部(含未解锁)与获得时间。
- 🎨 **主题**:家长后台「孩子信息」里设定默认主题(浅色 / 暗色 / 糖果 / 海洋),服务端直接应用,刷新即生效。
- 🔒 **双角色**:孩子无 PIN 直进仪表盘;家长后台 `/admin` 用密码管理课表、健康记录与数据(含一键导出 JSON)。
## 运行(不用 Docker
需要 Python 3.10+。
```bash
cd tracker
python -m venv venv
venv\Scripts\activate # Windows
# macOS/Linux: source venv/bin/activate
pip install -r requirements.txt
python app.py
```
启动后打开:
- 仪表盘: http://127.0.0.1:5000/
- 家长后台: http://127.0.0.1:5000/admin (默认账号 `admin` / 密码 `admin123`
首次启动会自动建库并写入一份示例数据,方便直接看效果。
## 配置(环境变量,可选)
| 变量 | 默认 | 说明 |
|---|---|---|
| `ADMIN_USER` | admin | 家长后台用户名 |
| `ADMIN_PASSWORD` | admin123 | 家长后台密码 |
| `PORT` | 5000 | 服务端口 |
| `SECRET_KEY` | change-me... | Flask 会话密钥 |
例:`ADMIN_PASSWORD=你的强密码 PORT=8080 python app.py`
## 家长后台数据管理
- **重置全部数据**:清空所有进度 / 打卡 / 健康记录,但保留学科、单元、书目结构(方便从零开始新一轮记录)。
- **浮动打卡项(可增删改)**:新增 / 改名 / 删除右下角常驻的打卡按钮;删除时会一并清掉该类型的打卡记录。
> 徽章由进度实时派生,重置后会随孩子的新进展自动重新累积,无需手动发徽章。
界面说明:仪表盘无顶部导航栏;时钟居中并显示「距结束还有 XX 天」(按后台设定的学期止计算)。
## 数据与备份
- 数据库文件:`data/tracker.db`(单文件,复制即备份)。
- 上传的本地封面:`static/covers/`(备份时建议连同此目录一起复制)。
- 家长后台「导出全部数据」可下载 `tracker-export.json`
## 目录结构
```
tracker/
├── app.py # Flask 应用 + 数据库 + 纯 SVG 图表逻辑
├── requirements.txt
├── data/tracker.db # 自动生成
├── templates/
│ ├── base.html # 布局 + 主题类挂载
│ ├── dashboard.html # 孩子仪表盘
│ ├── admin.html # 家长后台
│ ├── login.html
│ └── _book_cover.html # 书架封面局部(主墙与详情弹窗共用)
└── static/
├── style.css
└── covers/ # 上传的本地封面
```
## 说明
- 图表用纯 SVG 生成,无任何外部 CDN 依赖,断网也能用。
- 按需求定制:单孩子、无 PIN、Python、不用 Docker、小学阶段、手动录课表、轻量徽章。
- 多孩子、教材章节模板、更多健康指标可在现有数据模型上平滑扩展。