7bcb1d1a5b
fix: 植物空胶囊全局显示"颗"(capsule),配方卡片/编辑器/价目统一
...
PR Preview / teardown-preview (pull_request) Has been skipped
Test / unit-test (push) Successful in 6s
Test / build-check (push) Successful in 4s
PR Preview / test (pull_request) Successful in 5s
PR Preview / deploy-preview (pull_request) Successful in 12s
Test / e2e-test (push) Successful in 51s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 15:31:00 +00:00
b28b1c7f62
fix: 导出isMlUnit函数,修复精油价目页点击报错
...
PR Preview / teardown-preview (pull_request) Has been skipped
Test / unit-test (push) Successful in 5s
Test / build-check (push) Successful in 4s
PR Preview / test (pull_request) Successful in 5s
PR Preview / deploy-preview (pull_request) Successful in 13s
Test / e2e-test (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 15:07:41 +00:00
a3bf13c58d
feat: 护肤品用ml单位,精油用滴,通过unit字段区分
...
PR Preview / teardown-preview (pull_request) Has been skipped
Test / unit-test (push) Successful in 6s
Test / build-check (push) Successful in 4s
PR Preview / test (pull_request) Successful in 5s
PR Preview / deploy-preview (pull_request) Successful in 12s
Test / e2e-test (push) Successful in 53s
- 后端: oils表新增unit列(drop/ml),API返回unit字段
- 前端: 根据unit='ml'显示ml单位,精油显示滴/drop
- 护肤品drop_count改为实际ml容量,成本按用量比例计算
如玫瑰护手霜100ml ¥135,配方用30ml → 成本¥40.5
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 14:48:11 +00:00
67d268bc92
feat: 非精油产品(drop_count=1)显示"份"而非"滴"
...
Test / unit-test (push) Successful in 5s
PR Preview / teardown-preview (pull_request) Has been skipped
Test / build-check (push) Successful in 4s
Test / e2e-test (push) Successful in 54s
PR Preview / test (pull_request) Successful in 5s
PR Preview / deploy-preview (pull_request) Successful in 13s
oils store新增 unitLabel/unitLabelPlural,根据 dropCount 判断:
- 精油(dropCount>1): 滴/drop
- 护肤品等(dropCount=1): 份/portion
影响: 配方卡片、个人配方、库存匹配、去重提示
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 14:25:41 +00:00
e04d572f27
fix: 下架后卡片变灰+按钮变灰,isActive存为boolean
...
PR Preview / teardown-preview (pull_request) Has been skipped
Test / unit-test (push) Successful in 5s
Test / build-check (push) Successful in 4s
PR Preview / test (pull_request) Successful in 4s
PR Preview / deploy-preview (pull_request) Successful in 12s
Test / e2e-test (push) Failing after 1m42s
根因: oils store 存 isActive = oil.is_active ?? true
oil.is_active=0 时 0??true=0,但检查用 ===false,0!==false
修复: isActive = oil.is_active !== 0 (true/false boolean)
UI:
- 下架后弹窗不关闭,按钮变灰显示"✓ 已下架 · 点击重新上架"
- 卡片立即变灰(oil-chip--inactive class生效)
- 重新上架后恢复正常
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 16:50:26 +00:00
31b46d59b6
feat: 配方卡片容量切换、预览/保存流程优化、精油搜索自动补全、精油英文名编辑
...
PR Preview / teardown-preview (pull_request) Has been skipped
Test / unit-test (push) Successful in 4s
Test / build-check (push) Successful in 4s
PR Preview / test (pull_request) Successful in 5s
PR Preview / deploy-preview (pull_request) Successful in 13s
Test / e2e-test (push) Failing after 1m20s
1. 配方卡片视图加回容量切换按钮(单次/2.5ml/5ml…),
非单次容量的滴数通过 Math.round 取整显示
2. 编辑器「预览」按钮改为展示当前未保存数据;
预览后点关闭询问是否保存;
直接点「保存」后留在配方卡片视图(不再关闭弹层)
3. 添加精油改为搜索输入框 + 下拉自动补全,
支持中文名和英文名筛选
4. 精油价目:添加/编辑表单加入英文名字段;
编辑/删除按钮改为悬停(桌面)或点击(移动端)才显示;
后端及数据库同步支持 oils.en_name
2026-04-08 20:03:14 +00:00
dee4b1649a
fix: 卡片预览加入容量切换,非单次滴数四舍五入
...
PR Preview / teardown-preview (pull_request) Has been skipped
Test / unit-test (push) Successful in 5s
Test / build-check (push) Successful in 3s
PR Preview / test (pull_request) Successful in 4s
PR Preview / deploy-preview (pull_request) Successful in 12s
Test / e2e-test (push) Has been cancelled
- VOLUME_DROPS 新增「单次」(null,不缩放)
- 新增 scaleIngredients() 按比例缩放成分
- 卡片预览区加入容量切换按钮,切换后实时更新滴数与成本
- priceInfo 与 coconutDrops 均基于缩放后数据
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-07 22:27:21 +00:00
d88e202bb3
Fix critical bugs: oil prices ¥0.00, ingredient field mapping
...
- oils store: change Map to plain object for Vue reactivity
- recipes store: map `oil_name` from API (was only mapping `oil`/`name`)
- OilReference: fix .get() calls to bracket access
- Add price-display.cy.js regression test (3 tests)
- Add visual-check.cy.js for screenshot verification
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-06 20:35:01 +00:00
ee8ec23dc7
Refactor frontend to Vue 3 + Vite + Pinia + Cypress E2E
...
- Replace single-file 8441-line HTML with Vue 3 SPA
- Pinia stores: auth, oils, recipes, diary, ui
- Composables: useApi, useDialog, useSmartPaste, useOilTranslation
- 6 shared components: RecipeCard, RecipeDetailOverlay, TagPicker, etc.
- 9 page views: RecipeSearch, RecipeManager, Inventory, OilReference, etc.
- 14 Cypress E2E test specs (113 tests), all passing
- Multi-stage Dockerfile (Node build + Python runtime)
- Demo video generation scripts (TTS + subtitles + screen recording)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-06 18:35:00 +00:00