From eeb9b0aa88dd3db324aa3db200c3b46f7077e645 Mon Sep 17 00:00:00 2001 From: Hera Zhao Date: Mon, 13 Apr 2026 16:10:36 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=80=9A=E7=94=A8=E5=8D=95=E4=BD=8D?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=20=E2=80=94=20drop/ml/g/capsule=EF=BC=8C?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=E7=A1=AC=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit unit字段支持4种值,所有显示自动适配: - drop: 精油(滴/drop) - ml: 液体产品(ml) - g: 膏霜产品(g) - capsule: 胶囊(颗/capsule) 新增产品选单位即可,无需改代码。 Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/src/stores/oils.js | 34 +++++++++++++++++------- frontend/src/views/OilReference.vue | 41 ++++++++++++++++------------- 2 files changed, 48 insertions(+), 27 deletions(-) diff --git a/frontend/src/stores/oils.js b/frontend/src/stores/oils.js index c141771..234573f 100644 --- a/frontend/src/stores/oils.js +++ b/frontend/src/stores/oils.js @@ -94,25 +94,39 @@ export const useOilsStore = defineStore('oils', () => { delete oilsMeta.value[name] } - function isMlUnit(name) { + const UNIT_LABELS = { + drop: { zh: '滴', en: 'drop', enPlural: 'drops' }, + ml: { zh: 'ml', en: 'ml', enPlural: 'ml' }, + g: { zh: 'g', en: 'g', enPlural: 'g' }, + capsule: { zh: '颗', en: 'capsule', enPlural: 'capsules' }, + } + + function getUnit(name) { const meta = oilsMeta.value[name] - return meta && meta.unit === 'ml' + return (meta && meta.unit) || 'drop' + } + + function isDropUnit(name) { + return getUnit(name) === 'drop' + } + + function isMlUnit(name) { + return getUnit(name) === 'ml' } function isPortionUnit(name) { - return isMlUnit(name) + return !isDropUnit(name) } function unitLabel(name, lang = 'zh') { - if (isMlUnit(name)) return 'ml' - if (name === '植物空胶囊') return lang === 'en' ? 'capsule' : '颗' - return lang === 'en' ? 'drop' : '滴' + const u = UNIT_LABELS[getUnit(name)] || UNIT_LABELS.drop + return lang === 'en' ? u.en : u.zh } function unitLabelPlural(name, count, lang = 'zh') { - if (isMlUnit(name)) return 'ml' - if (name === '植物空胶囊') return lang === 'en' ? (count === 1 ? 'capsule' : 'capsules') : '颗' - return lang === 'en' ? (count === 1 ? 'drop' : 'drops') : '滴' + const u = UNIT_LABELS[getUnit(name)] || UNIT_LABELS.drop + if (lang === 'en') return count === 1 ? u.en : u.enPlural + return u.zh } return { @@ -127,6 +141,8 @@ export const useOilsStore = defineStore('oils', () => { loadOils, saveOil, deleteOil, + getUnit, + isDropUnit, isMlUnit, isPortionUnit, unitLabel, diff --git a/frontend/src/views/OilReference.vue b/frontend/src/views/OilReference.vue index f676e3a..4123a5f 100644 --- a/frontend/src/views/OilReference.vue +++ b/frontend/src/views/OilReference.vue @@ -227,7 +227,7 @@
-