From 246e66604991ff599d5d860b5512b4999b3b8be0 Mon Sep 17 00:00:00 2001 From: adonis Date: Sat, 13 Jun 2026 17:37:05 +0330 Subject: [PATCH] price changes --- components.d.ts | 1 - src/api/categories.ts | 10 ++++++++++ src/utils/categoryTabs.ts | 7 +++++++ src/utils/productCategories.ts | 3 +++ src/views/base/products/index.vue | 25 ++++++++++++------------- 5 files changed, 32 insertions(+), 14 deletions(-) create mode 100644 src/api/categories.ts create mode 100644 src/utils/categoryTabs.ts diff --git a/components.d.ts b/components.d.ts index d71d442..2da2181 100644 --- a/components.d.ts +++ b/components.d.ts @@ -8,7 +8,6 @@ export {} declare module 'vue' { export interface GlobalComponents { AButton: typeof import('ant-design-vue/es')['Button'] - AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider'] ADivider: typeof import('ant-design-vue/es')['Divider'] AForm: typeof import('ant-design-vue/es')['Form'] AFormItem: typeof import('ant-design-vue/es')['FormItem'] diff --git a/src/api/categories.ts b/src/api/categories.ts new file mode 100644 index 0000000..9c1008a --- /dev/null +++ b/src/api/categories.ts @@ -0,0 +1,10 @@ +import useAxios from '@/utils/useAxios' + +export interface StoreCategory { + id: number + name: string + sort_order?: number +} + +export const getStoreCategories = async (): Promise => + await useAxios.get('/customer/categories') diff --git a/src/utils/categoryTabs.ts b/src/utils/categoryTabs.ts new file mode 100644 index 0000000..1e6ad1d --- /dev/null +++ b/src/utils/categoryTabs.ts @@ -0,0 +1,7 @@ +import { getStoreCategories } from '@/api/categories' + +/** تب‌های فیلتر محصول — فقط از API دسته‌بندی (هماهنگ با پنل ادمین) */ +export async function loadProductCategoryTabNames(): Promise { + const categories = await getStoreCategories() + return categories.map((item) => item.name) +} diff --git a/src/utils/productCategories.ts b/src/utils/productCategories.ts index 432c972..ee0350f 100644 --- a/src/utils/productCategories.ts +++ b/src/utils/productCategories.ts @@ -7,6 +7,9 @@ export const UNIFIED_PRODUCT_CATEGORIES = [ 'گوی', 'سکه', 'سکه پارسیان', + 'شمش', + 'شمش ونوس', + 'شمش برنا', 'مس', 'نقره', ] as const diff --git a/src/views/base/products/index.vue b/src/views/base/products/index.vue index 11b14ca..2ff0e1b 100644 --- a/src/views/base/products/index.vue +++ b/src/views/base/products/index.vue @@ -102,6 +102,7 @@ import { isProductPriceInactive } from '@/utils/productPrice' import { isMetalCommodityGroup, isMeltedTradeGroup } from '@/utils/productCategories' import { isBoursecuDealProductGroup } from '@/utils/productDealMethod' import { loadServiceFeeFromSettings } from '@/utils/serviceFee' +import { loadProductCategoryTabNames } from '@/utils/categoryTabs' import { getLastPrices, startLastPricePolling, stopLastPricePolling } from '@/utils/price' const activekey = ref('طلا' ||'آبشده') @@ -158,9 +159,18 @@ function changeTab() { const firstItems = ref() const items = ref() -const typeItems = ref([]) +const typeItems = ref([]) let productListInterval: ReturnType | undefined +async function loadCategoryTabs() { + try { + typeItems.value = await loadProductCategoryTabNames() + } catch (e) { + console.log(e) + typeItems.value = [] + } +} + /** * رفرش بی‌صدای لیست محصولات (هر ۱۰ ثانیه تا وقتی در این صفحه‌ایم). * آپدیت درجا انجام می‌شود تا لیست re-render کامل نشود و نپرد؛ @@ -173,12 +183,6 @@ async function refreshProducts() { return } - fresh.forEach((val) => { - if (!typeItems.value.includes(val.group_type)) { - typeItems.value.push(val.group_type) - } - }) - const freshById = new Map(fresh.map((p) => [p.id, p])) const current = firstItems.value @@ -220,12 +224,7 @@ onMounted(async () => { openTime.value = items.value[0].auto_open_at } - items.value?.forEach((val, index) => { - if (!typeItems.value.includes(val.group_type)){ - typeItems.value.push(val.group_type) - } - // typeItems.value[index] = val.group_type - }) + await loadCategoryTabs() firstItems.value = items.value await loadServiceFeeFromSettings() productListInterval = setInterval(refreshProducts, 10000)