fix: 精油编辑统一保存到 DB + 导出 Excel 增加功效列
Some checks failed
Test / unit-test (push) Successful in 7s
Test / build-check (push) Successful in 4s
PR Preview / teardown-preview (pull_request) Has been skipped
Test / e2e-test (push) Failing after 1m12s
PR Preview / test (pull_request) Successful in 7s
PR Preview / deploy-preview (pull_request) Successful in 19s

- 新增 oil_cards 表,持久化知识卡片(功效/用法/方法/注意/emoji)
- POST /api/oils 扩展接受 card_* 字段,在同一事务里 upsert oil_cards
- GET /api/oil-cards 返回全部卡片
- 前端 getOilCard 优先查 DB,再 fallback 静态表
- saveEditOil 统一走 saveOil,不再分两套保存
- 精油价目 Excel 导出增加「功效」列
- 首次部署自动从静态 OIL_CARDS 播种到 oil_cards 表

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-16 10:56:30 +00:00
parent 8f004a02cd
commit c04bb53ddd
5 changed files with 147 additions and 18 deletions

View File

@@ -1,5 +1,6 @@
// Oil knowledge cards - usage guides for common essential oils
// Ported from original vanilla JS implementation
import { useOilsStore } from '../stores/oils'
export const OIL_CARDS = {
'野橘': { emoji: '🍊', en: 'Wild Orange', effects: '安抚镇静、驱散负能量、紧张情绪和压力\n抗氧化、消炎、抗病毒、增强免疫\n提振食欲刺激胆汁分泌促进消化\n促进循环', usage: '日常香薰,提振情绪、舒压,营造愉悦氛围\n饮水加入 1至2 滴,护肝抗病毒\n泡澡时滴 3至4 滴,消除疲劳,放松身心\n扫地、拖地时加入 3至5 滴,清新空气\n涂抹腹部促进消化\n涂抹肝区帮助肝脏排毒\n口腔溃疡时加入水中漱口', method: '🔹香薰 🔸内用 🔺涂抹', caution: '轻微光敏,白天涂抹注意防晒' },
@@ -33,6 +34,17 @@ export const OIL_CARD_ALIAS = {
}
export function getOilCard(name) {
// Check DB-persisted cards first (via store)
try {
const store = useOilsStore()
if (store.oilCards[name]) return store.oilCards[name]
// Check alias in store too
const aliased = OIL_CARD_ALIAS[name]
if (aliased && store.oilCards[aliased]) return store.oilCards[aliased]
} catch {
// Store may not be initialized yet, fall through to static data
}
// Fall back to static OIL_CARDS
if (OIL_CARDS[name]) return OIL_CARDS[name]
if (OIL_CARD_ALIAS[name] && OIL_CARDS[OIL_CARD_ALIAS[name]]) return OIL_CARDS[OIL_CARD_ALIAS[name]]
const base = name.replace(/呵护$/, '')