From f2d83c53df48b13ab7897d74c0e4a93cbb006574 Mon Sep 17 00:00:00 2001 From: "s.esmaeili" Date: Mon, 14 Sep 2026 23:05:29 +0330 Subject: [PATCH] user-app: redesigned home screen and product detail Design language introduced here and reused across both screens: - LESS colour tokens (@ink/@inkSoft/@inkMuted/@inkFaint, @wine/@wineSoft, @canvas/@canvasSoft, @hairline/@hairlineSoft) added to themeConfig/colors.json and injected globally via vite's modifyVars, so scoped diff --git a/apps/user-app/src/components/home/CategoryRail.vue b/apps/user-app/src/components/home/CategoryRail.vue new file mode 100644 index 0000000..ea4252b --- /dev/null +++ b/apps/user-app/src/components/home/CategoryRail.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/apps/user-app/src/components/home/RateStrip.vue b/apps/user-app/src/components/home/RateStrip.vue new file mode 100644 index 0000000..939ce2c --- /dev/null +++ b/apps/user-app/src/components/home/RateStrip.vue @@ -0,0 +1,107 @@ + + + + + + diff --git a/apps/user-app/src/components/home/SectionHead.vue b/apps/user-app/src/components/home/SectionHead.vue new file mode 100644 index 0000000..d68150e --- /dev/null +++ b/apps/user-app/src/components/home/SectionHead.vue @@ -0,0 +1,59 @@ + + + + + + diff --git a/apps/user-app/src/components/home/ShowcaseCard.vue b/apps/user-app/src/components/home/ShowcaseCard.vue new file mode 100644 index 0000000..bd7257e --- /dev/null +++ b/apps/user-app/src/components/home/ShowcaseCard.vue @@ -0,0 +1,150 @@ + + + + + + diff --git a/apps/user-app/src/components/home/ShowcaseSlider.vue b/apps/user-app/src/components/home/ShowcaseSlider.vue new file mode 100644 index 0000000..2ca7eb6 --- /dev/null +++ b/apps/user-app/src/components/home/ShowcaseSlider.vue @@ -0,0 +1,201 @@ + + + + + + diff --git a/apps/user-app/src/components/product/SingleProduct.vue b/apps/user-app/src/components/product/SingleProduct.vue index 7b92274..1d1aee0 100644 --- a/apps/user-app/src/components/product/SingleProduct.vue +++ b/apps/user-app/src/components/product/SingleProduct.vue @@ -1,156 +1,220 @@ + + diff --git a/apps/user-app/src/composables/useProduct.ts b/apps/user-app/src/composables/useProduct.ts index 9691efe..0abe7d1 100644 --- a/apps/user-app/src/composables/useProduct.ts +++ b/apps/user-app/src/composables/useProduct.ts @@ -36,7 +36,13 @@ export function useProduct(productItem: ProductSummary, initialVariant?: Product const min_gram = computed(() => selectedVariant.value ? parseFloat(selectedVariant.value.rashWeightGrams) : 0) const wage = computed(() => (selectedVariant.value ? parseFloat(selectedVariant.value.defaultWagePercent) : null)) const hasDiscountWage = ref(null) // no promotions backend yet — see file header - const is_exist = ref(true) // no stock field on ProductVariant yet + // REAL stock: ProductVariant.qty / isPreOrder exist and are returned by + // GET /catalog/products. A variant is orderable when it has stock, or when + // it is flagged pre-order — the same rule the admin cart uses. + const qty = computed(() => selectedVariant.value?.qty ?? 0) + const isPreOrder = computed(() => selectedVariant.value?.isPreOrder ?? false) + const is_exist = computed(() => qty.value > 0 || isPreOrder.value) + const productCode = computed(() => product.value.productCode ?? null) const has_warranty = ref(false) // no warranty field on ProductVariant yet return { @@ -44,11 +50,14 @@ export function useProduct(productItem: ProductSummary, initialVariant?: Product image, id, title, + productCode, variants, selectedVariant, min_gram, wage, hasDiscountWage, + qty, + isPreOrder, is_exist, has_warranty, } diff --git a/apps/user-app/src/views/HomeView.vue b/apps/user-app/src/views/HomeView.vue index aae2c2a..b449984 100644 --- a/apps/user-app/src/views/HomeView.vue +++ b/apps/user-app/src/views/HomeView.vue @@ -1,126 +1,381 @@ + + diff --git a/apps/user-app/themeConfig/colors.json b/apps/user-app/themeConfig/colors.json index af56960..49344f5 100644 --- a/apps/user-app/themeConfig/colors.json +++ b/apps/user-app/themeConfig/colors.json @@ -22,5 +22,17 @@ "gray-400": "#9ca3af", "gray-500": "#6b7280", "green": "#16a34a", - "red": "#dc2626" + "red": "#dc2626", + "ink": "#14161A", + "inkSoft": "#22262E", + "inkMuted": "#5B616E", + "inkFaint": "#8A909C", + "wine": "#7A1B33", + "wineDeep": "#5E1427", + "wineSoft": "#A33C55", + "wineWash": "#FBF2F4", + "canvas": "#FFFFFF", + "canvasSoft": "#FAFAFA", + "hairline": "#ECEDEF", + "hairlineSoft": "#F4F5F6" }