@@ -39,18 +33,90 @@ withDefaults(
diff --git a/apps/user-app/src/components/home/ShowcaseCard.vue b/apps/user-app/src/components/home/ShowcaseCard.vue
index 861c535..0b023b9 100644
--- a/apps/user-app/src/components/home/ShowcaseCard.vue
+++ b/apps/user-app/src/components/home/ShowcaseCard.vue
@@ -8,7 +8,15 @@
order time, not stored on the product — printing one here would be invented.
-->
-
+
@@ -305,7 +306,7 @@ import type { ProductSummary, ProductVariantSummary } from '../../api/client'
import { useFavoritesStore } from '../../stores/favoritesStore'
import { useCartStore, type CartItem } from '../../stores/cartStore'
import { isUserLoggedIn } from '../../utils/checkAccess'
-import loginDialogImage from '../../assets/img/empty/dialogEmpty1.svg'
+import loginDialogImage from '../../assets/img/empty/dialogLogin.svg'
// `initial`: the card's own ProductSummary when opened from a list (see
// ProductMorph.vue) — lets the page render whole on its first frame.
@@ -362,9 +363,8 @@ const isPreOrder = computed(() => productAdapter.value.isPreOrder.value)
const is_exist = computed(() => productAdapter.value.is_exist.value)
// ── Variant chips ───────────────────────────────────────────────
-// Two rows' worth is shown up front; the rest sit behind "نمایش همه" so a
-// product with 10+ weights does not push the description off the screen.
-const VARIANT_PREVIEW_COUNT = 6
+// Compact pills; extras behind a short toggle so weight lists don't dominate.
+const VARIANT_PREVIEW_COUNT = 8
const showAllVariants = ref(false)
const visibleVariants = computed(() =>
showAllVariants.value ? variants.value : variants.value.slice(0, VARIANT_PREVIEW_COUNT),
@@ -372,18 +372,15 @@ const visibleVariants = computed(() =>
const isOrderable = (v: ProductVariantSummary) => isVariantOrderable(v)
-/**
- * The chip picture: the variant's own image when the admin picked one, else the
- * product's main photo so chips never render as empty boxes. Variants sharing
- * one image (same design, several weights) intentionally show the same picture.
- */
-const variantImage = (v: ProductVariantSummary) =>
- v.image?.url ?? productDetail.productRef.value?.images?.[0]?.url ?? ''
-
const stockChipLabel = (v: ProductVariantSummary) => {
if ((v.qty ?? 0) > 0) return 'موجود'
return v.isPreOrder ? 'پیشسفارش' : 'ناموجود'
}
+/** One short glyph/word so the chip stays one line. */
+const stockChipShort = (v: ProductVariantSummary) => {
+ if ((v.qty ?? 0) > 0) return 'موجود'
+ return v.isPreOrder ? 'پیش' : '—'
+}
const stockChipClass = (v: ProductVariantSummary) => {
if ((v.qty ?? 0) > 0) return 'is-in'
return v.isPreOrder ? 'is-pre' : 'is-none'
@@ -511,14 +508,22 @@ onBeforeUnmount(() => {
diff --git a/apps/user-app/src/views/user/LoginView.vue b/apps/user-app/src/views/user/LoginView.vue
index c0a86ce..f21162e 100644
--- a/apps/user-app/src/views/user/LoginView.vue
+++ b/apps/user-app/src/views/user/LoginView.vue
@@ -22,19 +22,34 @@
-
-
-
-
+
+
ورود به {{ brand.name }}
- {{ body.step === 1 ? 'شماره موبایل خود را وارد کنید' : 'رمز یکبارمصرف را وارد کنید' }}
+ {{ body.step === 1 ? 'با شماره موبایل وارد شوید؛ کد یکبارمصرف پیامک میشود.' : 'کد ۴ رقمی پیامکشده را وارد کنید.' }}
+
+
+
+ ۱
+ شماره
+
+
+
+ ۲
+ کد تأیید
+
+
-
+
+
+ {{ formModel.username }}
+
+
+
- امکان دریافت مجدد رمز در {{ counterZeroShow(timer) }} ثانیه دیگر
+ ارسال مجدد تا {{ counterZeroShow(timer) }} ثانیه