From f149154a563a50569a19ded1efc94c50076eda71 Mon Sep 17 00:00:00 2001 From: Hera Zhao Date: Sun, 12 Apr 2026 10:19:05 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B7=B2=E4=B8=8B=E6=9E=B6=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E9=9A=90=E8=97=8F=E9=85=8D=E6=96=B9=EF=BC=8C=E6=90=9C?= =?UTF-8?q?=E7=B4=A2/=E5=88=97=E8=A1=A8/=E6=94=B6=E8=97=8F=E5=9D=87?= =?UTF-8?q?=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/src/stores/recipes.js | 2 +- frontend/src/views/RecipeSearch.vue | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/src/stores/recipes.js b/frontend/src/stores/recipes.js index 76729fe..42ed836 100644 --- a/frontend/src/stores/recipes.js +++ b/frontend/src/stores/recipes.js @@ -2,7 +2,7 @@ import { defineStore } from 'pinia' import { ref } from 'vue' import { api } from '../composables/useApi' -export const EDITOR_ONLY_TAGS = ['已审核'] +export const EDITOR_ONLY_TAGS = ['已审核', '已下架'] export const useRecipesStore = defineStore('recipes', () => { const recipes = ref([]) diff --git a/frontend/src/views/RecipeSearch.vue b/frontend/src/views/RecipeSearch.vue index 768979f..d5df405 100644 --- a/frontend/src/views/RecipeSearch.vue +++ b/frontend/src/views/RecipeSearch.vue @@ -250,7 +250,7 @@ function slideCat(dir) { // Public recipes (all recipes in the public library) const filteredRecipes = computed(() => { - let list = recipeStore.recipes + let list = recipeStore.recipes.filter(r => !r.tags || !r.tags.includes('已下架')) if (selectedCategory.value) { list = list.filter(r => r.tags && r.tags.includes(selectedCategory.value)) } @@ -318,6 +318,7 @@ const exactResults = computed(() => { const q = searchQuery.value.trim().toLowerCase() const isEn = /^[a-zA-Z\s]+$/.test(q) return recipeStore.recipes.filter(r => { + if (r.tags && r.tags.includes('已下架')) return false const nameMatch = r.name.toLowerCase().includes(q) const enNameMatch = isEn && (r.en_name || '').toLowerCase().includes(q) const oilEnMatch = isEn && r.ingredients.some(ing => (oilEn(ing.oil) || '').toLowerCase().includes(q)) @@ -336,6 +337,7 @@ const similarResults = computed(() => { const terms = expandQuery(q).filter(t => t.length >= 2 || t === q) return recipeStore.recipes.filter(r => { + if (r.tags && r.tags.includes('已下架')) return false if (exactIds.has(r._id)) return false const name = r.name // Match by expanded synonyms (name only, not ingredients) @@ -375,7 +377,7 @@ const myDiaryRecipes = computed(() => { const favoritesPreview = computed(() => { if (!auth.isLoggedIn) return [] - let list = recipeStore.recipes.filter(r => recipeStore.isFavorite(r)) + let list = recipeStore.recipes.filter(r => recipeStore.isFavorite(r) && !(r.tags && r.tags.includes('已下架'))) if (searchQuery.value.trim()) { const q = searchQuery.value.trim().toLowerCase() list = list.filter(r => {