-
+
+
+
+
![]()
+
+
+
+
+ {{ product?.name }}
+
+
+ {{ productVariant?.weightValue }}
+ {{ getWeightLocalizedUnit('G') }}
+
+
+
+
+ {{ getLocalizedPrice(productVariant?.gross) }} ₽
+
+
+
+
+
+
+ В корзине!
+
+
+
+
+
+
+
+ Описание
+
+
+ {{ product.description }}
+
+
+
+
+
+ На 100 грамм
+
+
+
+
+ {{ per100gEnergy }}
+
+
ккал
+
+
+
+ {{ per100gProtein }} г
+
+
белки
+
+
+
+ {{ per100gFat }} г
+
+
жиры
+
+
+
+ {{ per100gCarbohydrate }} г
+
+
углеводы
+
+
+
+
@@ -13,6 +91,30 @@
const route = useRoute()
const slug = route.params.productSlug
-const { addProduct } = await useCheckout()
+const { icons } = useAppConfig()
+const { addProduct, checkout } = await useCheckout()
const { data: product } = await useFetch(`/api/product/slug/${slug}`)
+const productVariant = computed(() => product.value?.variants[0])
+
+const inCart = computed(() => {
+ const line = checkout.value?.lines?.find((l) => l.variant.id === productVariant.value?.id)
+ return line
+})
+
+const breadcrumbs = [
+ { title: 'Главная', href: '/' },
+ {
+ title: product.value?.category?.name ?? '',
+ href: `/catalog/${product.value?.category?.slug}`,
+ },
+ { title: product.value?.name ?? '', href: '#' },
+]
+
+const productImageUrl = '/burger-1.jpg'
+
+const per100gEnergy = 612
+const per100gProtein = 21.9
+const per100gCarbohydrate = 45.8
+const per100gFat = 29.6
+const isNutritionShown = true
diff --git a/apps/food/app/pages/catalog/[categorySlug]/index.vue b/apps/food/app/pages/catalog/[categorySlug]/index.vue
index 351b6d74..8b086601 100644
--- a/apps/food/app/pages/catalog/[categorySlug]/index.vue
+++ b/apps/food/app/pages/catalog/[categorySlug]/index.vue
@@ -1,8 +1,34 @@
- {{ slug }}
+
+
+
+ {{ category?.name }}
+
+ Здесь представлены все товары из этой категории
+
+
diff --git a/apps/food/server/api/category/slug/[slug].get.ts b/apps/food/server/api/category/slug/[slug].get.ts
new file mode 100644
index 00000000..b6eeb7c8
--- /dev/null
+++ b/apps/food/server/api/category/slug/[slug].get.ts
@@ -0,0 +1,35 @@
+export default defineEventHandler(async (event) => {
+ const { channelId } = useRuntimeConfig()
+ const slug = getRouterParam(event, 'slug')
+
+ const activeMenu = await prisma.menu.findFirst({
+ where: { channelId },
+ include: {
+ categories: {
+ where: { slug },
+ include: {
+ products: {
+ include: {
+ variants: true,
+ },
+ },
+ },
+ },
+ },
+ })
+ if (!activeMenu) {
+ throw createError({
+ statusCode: 404,
+ statusMessage: 'No menu',
+ })
+ }
+
+ if (!activeMenu.categories[0]) {
+ throw createError({
+ statusCode: 404,
+ statusMessage: 'Not found',
+ })
+ }
+
+ return activeMenu.categories[0]
+})
diff --git a/apps/food/server/api/product/slug/[slug].get.ts b/apps/food/server/api/product/slug/[slug].get.ts
index 7b3f89b9..7a58c63a 100644
--- a/apps/food/server/api/product/slug/[slug].get.ts
+++ b/apps/food/server/api/product/slug/[slug].get.ts
@@ -6,6 +6,7 @@ export default defineEventHandler(async (event) => {
where: { slug, channelId },
include: {
variants: true,
+ category: true,
},
})
})