2491479c2c20072a0ebd67282c9cf26289ff889f
- Vitest unit tests: smart paste parsing (37), cost calculations (21),
oil translation (16), dialog system (12), with production data fixtures
- Cypress E2E tests: API CRUD (27), auth flow (8), recipe detail (10),
search (12), oil reference (4), favorites (6), inventory (6),
recipe management (10), diary (11), bug tracker (8), user management (13),
cost parity (6), data integrity (8), responsive (9), performance (6),
navigation (8), admin flow (5)
- Test coverage doc with prioritized gap analysis
- Found backend bug: POST /api/bug-reports/{id}/comment deletes the bug
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
doTERRA 精油配方计算器
精油配方成本计算、配方管理、配方卡片导出工具。
功能
- 配方查询 - 搜索配方,按名称/精油/标签筛选,分类浏览
- 配方编辑 - 可视化编辑精油成分、滴数,自动计算成本
- 容量换算 - 支持单次/5ml/10ml/30ml 容量,自动稀释比例换算
- 智能粘贴 - 粘贴文本自动识别精油名称和滴数(支持模糊匹配、同音字纠错)
- 配方卡片 - 生成精美配方卡片图片,支持中英双语,品牌水印
- 个人配方 - 保存私人配方,记录使用日记
- 精油库存 - 标记已有精油,自动推荐可做配方
- 收藏系统 - 收藏喜欢的配方,快速访问
- 商业核算 - 项目成本利润分析(企业用户专属)
- Excel 导出 - 批量导出配方到 Excel 表格
- 多角色权限 - 查看者 / 编辑者 / 高级编辑者 / 管理员
- Bug 追踪 - 内置问题反馈和追踪系统
技术栈
前端
- Vue 3 (Composition API +
<script setup>) - Vite 构建工具
- Pinia 状态管理
- Vue Router 路由
- html2canvas 配方卡片图片生成
- ExcelJS Excel 导出
后端
- FastAPI (Python)
- SQLite 数据库
- Uvicorn ASGI 服务器
部署
- Docker 多阶段构建
- Kubernetes (k3s)
- Traefik 反向代理 + 自动 TLS
快速开始
前端开发
cd frontend
npm install
npm run dev
开发服务器启动在 http://localhost:5173,自动代理 /api 请求到后端。
后端开发
pip install -r backend/requirements.txt
uvicorn backend.main:app --reload --port 8000
Docker 构建
docker build -t oil-calculator .
docker run -p 8000:8000 -v oil-data:/data oil-calculator
访问 http://localhost:8000。
项目结构
frontend/src/
router/ # 路由配置
stores/ # Pinia stores (auth, oils, recipes, diary, ui)
composables/ # useApi, useDialog, useSmartPaste, useOilTranslation
components/ # 共享组件 (RecipeCard, TagPicker, LoginModal...)
views/ # 页面 (RecipeSearch, RecipeManager, Inventory...)
assets/ # 全局样式
backend/
main.py # FastAPI 应用 + 所有 API 端点
database.py # SQLite 数据库初始化和迁移
部署
详见 doc/deploy.md。
Description
Languages
Vue
45.4%
JavaScript
22.2%
HTML
16%
Python
13%
CSS
2.3%
Other
1.1%