From ac28eda09ff42a13efb2cf68e37c3cd4de611d2e Mon Sep 17 00:00:00 2001 From: adonis Date: Tue, 23 Jun 2026 16:02:41 +0330 Subject: [PATCH] =?UTF-8?q?fix=20=D8=B0=D8=B4=D8=B2=D9=86=D9=84=D9=82?= =?UTF-8?q?=D8=AE=D8=B9=D8=AF=DB=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 4 + src/App.vue | 13 +- src/app/bootstrap.ts | 4 +- src/assets/css/boursecu-theme.less | 13 ++ src/assets/img/boursecu-home-icon.png | Bin 0 -> 2297 bytes src/assets/img/boursecu-settings-icon.png | Bin 0 -> 3685 bytes src/assets/img/boursemes-login.png | Bin 15544 -> 28534 bytes src/composables/useProductsCatalog.ts | 2 + src/layouts/config/navigation.ts | 16 +- src/layouts/mobile/MobileBottomNav.vue | 16 +- src/utils/config.ts | 27 +++ src/utils/productAssets.ts | 4 - src/utils/productCategories.ts | 21 ++- src/utils/productDealMethod.ts | 51 +++++- src/utils/storeHours.ts | 81 ++++++-- src/views/base/fund/components/Item.vue | 2 +- .../home/components/BoursecuAssetsSummary.vue | 44 +++-- .../base/home/components/CurrentPrice.vue | 173 +++++++++++++++--- src/views/base/home/components/PriceChart.vue | 20 +- src/views/base/home/components/PriceStats.vue | 4 +- .../base/home/composables/usePriceChart.ts | 109 +++++++---- .../desktop/components/DesktopHomeAlerts.vue | 4 +- .../desktop/components/DesktopLivePrice.vue | 145 ++++++++++++--- .../desktop/components/DesktopPriceRange.vue | 4 +- .../layouts/sections/MarketClosedSection.vue | 3 +- .../base/products/components/DealProduct.vue | 11 +- .../base/products/components/ProductItem.vue | 7 +- .../transactions/DefaultTransactionsPage.vue | 4 +- .../components/TransactionDetailPanel.vue | 9 +- 29 files changed, 624 insertions(+), 167 deletions(-) create mode 100644 src/assets/img/boursecu-home-icon.png create mode 100644 src/assets/img/boursecu-settings-icon.png diff --git a/index.html b/index.html index d3ce1ab..6da9af7 100644 --- a/index.html +++ b/index.html @@ -276,6 +276,10 @@ var tenantSecondary = normalizeHex(user.secondary_color) var tenantBackground = normalizeHex(user.background_color) + if (user.name === 'boursecu') { + tenantColor = '#2178b5' + } + /** * مهم: * background_color بک‌گراند اپ است. diff --git a/src/App.vue b/src/App.vue index 1ff1598..111f49e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -99,7 +99,7 @@ import {LoadingOutlined} from '@ant-design/icons-vue' import img_bottomGradiant from '@/views/login/assets/img/gr_bottom_white.svg' import BasicButton from '@/components/BasicPacks/BasicButton.vue' import {useConfigStore} from "@/store/configStore"; -import {getProjectFontFamily, getProjectSplashBackground, getProjectSplashLogo, getProjectBrandRed, hasCustomLoginLogoLayout, isBoursecuProject, resetAppSurfaceBackground} from "@/utils/config"; +import {getProjectFontFamily, getProjectSplashBackground, getProjectSplashLogo, getProjectBrandRed, getProjectPrimaryColor, hasCustomLoginLogoLayout, isBoursecuProject, resetAppSurfaceBackground} from "@/utils/config"; import {ConfigProvider as AConfigProvider} from 'ant-design-vue' import BasicIcon from "@/components/BasicPacks/BasicIcon.vue"; import { useApplyDesktopLayoutClass, useDesktopBreakpoint } from '@/layouts/composables/useAppLayout' @@ -211,16 +211,17 @@ function handleSupportPointerUp(event: PointerEvent) { } const antTheme = computed(() => { - if (!config.config?.color) return null + const primaryColor = getProjectPrimaryColor() + if (!primaryColor) return null const brandRed = getProjectBrandRed() return { token: { - colorPrimary: config.config.color, - colorLink: config.config.color, - colorLinkActive: config.config.color, - colorLinkHover: config.config.color, + colorPrimary: primaryColor, + colorLink: primaryColor, + colorLinkActive: primaryColor, + colorLinkHover: primaryColor, fontFamily: getProjectFontFamily(), ...(brandRed ? { colorError: brandRed, diff --git a/src/app/bootstrap.ts b/src/app/bootstrap.ts index ce88a69..ad4bf81 100644 --- a/src/app/bootstrap.ts +++ b/src/app/bootstrap.ts @@ -5,7 +5,7 @@ import { startPwaManifest } from '@/modules/pwa/manifest' import { createVueApp } from '@/app/createApp' import { setupRouterGuards } from '@/app/setupRouter' import router from '@/router' -import { applyProjectTheme } from '@/utils/config' +import { applyProjectTheme, isBoursecuProject } from '@/utils/config' import { useSettingsStore } from '@/store/settingsStore' import { useUserStore } from '@/store/userStore' import { getToken } from '@/utils' @@ -71,7 +71,7 @@ function applyTenantThemeVars() { const secondaryColor = window.__APP_CONFIG__?.user?.secondary_color const backgroundColor = window.__APP_CONFIG__?.user?.background_color - if (color) { + if (color && !isBoursecuProject()) { document.documentElement.style.setProperty('--App-primary-color', color) } diff --git a/src/assets/css/boursecu-theme.less b/src/assets/css/boursecu-theme.less index b98c440..d8fa4b8 100644 --- a/src/assets/css/boursecu-theme.less +++ b/src/assets/css/boursecu-theme.less @@ -1,4 +1,17 @@ html.project-boursecu { + .ant-btn-primary, + .ant-btn-primary:not(:disabled):hover, + .ant-btn-primary:not(:disabled):active { + background-color: var(--App-primary-color) !important; + border-color: var(--App-primary-color) !important; + } + + .ant-radio-group-solid .ant-radio-button-wrapper-checked, + .ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover { + border-color: var(--App-primary-color) !important; + background-color: var(--App-primary-color) !important; + } + .ant-input-group-addon { background-color: @secondary-color !important; color: @App-primary-color !important; diff --git a/src/assets/img/boursecu-home-icon.png b/src/assets/img/boursecu-home-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b4df0dd1b9f86bcbc41bc5726218b6c4db9c37ce GIT binary patch literal 2297 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 YD7dWgl<-^+qTT>Z4J{0+V91#N0n5z&tpET3 literal 0 HcmV?d00001 diff --git a/src/assets/img/boursemes-login.png b/src/assets/img/boursemes-login.png index d19c776a11e18736802851c8ed53e9350090ed7b..3fc17a6182cdff53989bbb8dcf8efcb95ef43dc0 100644 GIT binary patch literal 28534 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

(D0W}>wy#nJjPWo#=&_O!J9*A;`lRFrOz^= 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 literal 15544 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 KB`U?f2K*P3cJHMC diff --git a/src/composables/useProductsCatalog.ts b/src/composables/useProductsCatalog.ts index eff8aa1..b2c2e29 100644 --- a/src/composables/useProductsCatalog.ts +++ b/src/composables/useProductsCatalog.ts @@ -1,6 +1,7 @@ import { ref } from 'vue' import { getProducts } from '@/api/products' import type { Product } from '@/models/products' +import { syncProductTradingHoursFromProducts } from '@/utils/storeHours' /** Shared product catalog — dedupes getProducts() across wallet assets and chart offset. */ const catalogProducts = ref([]) @@ -22,6 +23,7 @@ export function getProductsCatalog(force = false): Promise { catalogPromise = getProducts() .then((products) => { catalogProducts.value = products ?? [] + syncProductTradingHoursFromProducts(catalogProducts.value) return catalogProducts.value }) .finally(() => { diff --git a/src/layouts/config/navigation.ts b/src/layouts/config/navigation.ts index 301655d..07b17d6 100644 --- a/src/layouts/config/navigation.ts +++ b/src/layouts/config/navigation.ts @@ -20,7 +20,13 @@ const BOURSECU_PRIMARY_NAV: AppNavItem[] = [ icon: 'vuesax-linear:receipt-item', iconSrc: getBoursecuTransactionsIcon(), }, - { id: 'home', routeName: 'home', label: 'صفحه اصلی', icon: 'vuesax-linear:home' }, + { + id: 'home', + routeName: 'home', + label: 'صفحه اصلی', + icon: 'vuesax-linear:home', + iconSrc: getBoursecuActionIconSrc('home'), + }, { id: 'wallet', routeName: 'wallet', @@ -28,7 +34,13 @@ const BOURSECU_PRIMARY_NAV: AppNavItem[] = [ icon: 'vuesax-linear:wallet-1', iconSrc: getBoursecuActionIconSrc('wallet'), }, - { id: 'user', routeName: 'user', label: 'تنظیمات', icon: 'vuesax-linear:setting-2' }, + { + id: 'user', + routeName: 'user', + label: 'تنظیمات', + icon: 'vuesax-linear:setting-2', + iconSrc: getBoursecuActionIconSrc('settings'), + }, ] const DEFAULT_PRIMARY_NAV: AppNavItem[] = [ diff --git a/src/layouts/mobile/MobileBottomNav.vue b/src/layouts/mobile/MobileBottomNav.vue index 3770033..d67cc94 100644 --- a/src/layouts/mobile/MobileBottomNav.vue +++ b/src/layouts/mobile/MobileBottomNav.vue @@ -52,7 +52,11 @@ @click="$emit('navigate', 'home')" >

صفحه اصلی
@@ -101,7 +105,13 @@ @click="$emit('navigate', userNavItem.routeName)" >
- + +
{{ userNavItem.label }}
@@ -137,6 +147,8 @@ const userNavItem = computed(() => const boursecuBuySellIcon = getBoursecuActionIconSrc('buySell') ?? '' const boursecuTransactionsIcon = getBoursecuActionIconSrc('transactions') ?? '' const boursecuWalletIcon = getBoursecuActionIconSrc('wallet') ?? '' +const boursecuHomeIcon = getBoursecuActionIconSrc('home') ?? '' +const boursecuSettingsIcon = getBoursecuActionIconSrc('settings') ?? '' const whiteNavLogoProjects = ['goldenramin'] const isWhiteNavLogo = computed(() => whiteNavLogoProjects.includes(projectName)) diff --git a/src/utils/config.ts b/src/utils/config.ts index eab7d0e..83dd66a 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -7,6 +7,8 @@ import boursecuConvertIcon from '@/assets/img/boursecu-convert-icon.png' import boursecuWalletIcon from '@/assets/img/boursecu-wallet-icon.png' import boursecuBuySellIcon from '@/assets/img/boursecu-buy-sell-icon.png' import boursecuAssetsIcon from '@/assets/img/boursecu-assets-icon.png' +import boursecuHomeIcon from '@/assets/img/boursecu-home-icon.png' +import boursecuSettingsIcon from '@/assets/img/boursecu-settings-icon.png' import bazretalaLoginLogo from '@/assets/img/bazretala-login-logo.png' import bazretalaNavLogo from '@/assets/img/bazretala-nav-logo.png' import bazretalaFundBg from '@/assets/img/bazretala-fund-bg.png' @@ -53,6 +55,14 @@ export function getBoursecuAssetsIcon() { return boursecuAssetsIcon } +export function getBoursecuHomeIcon() { + return boursecuHomeIcon +} + +export function getBoursecuSettingsIcon() { + return boursecuSettingsIcon +} + export function getBoursecuActionIconSrc(actionId: string): string | undefined { const icons: Record = { buySell: boursecuBuySellIcon, @@ -61,6 +71,8 @@ export function getBoursecuActionIconSrc(actionId: string): string | undefined { transactions: boursecuTransactionsIcon, physicalReceive: boursecuPhysicalReceiveIcon, convert: boursecuConvertIcon, + home: boursecuHomeIcon, + settings: boursecuSettingsIcon, } return icons[actionId] @@ -71,12 +83,26 @@ export function hasCustomLoginLogoLayout() { } export const BOURSECU_BRAND_RED = '#bc3c3b' +export const BOURSECU_BRAND_BLUE = '#2178b5' export const BOURSECU_BRAND_NAV = '#133050' +export const BOURSECU_COPPER_BG = '#b87333' +export const BOURSECU_COPPER_BG_LIGHT = '#fdf0e6' +export const BOURSECU_COPPER_BG_GRADIENT = 'linear-gradient(135deg, #c98a4a 0%, #a86528 100%)' export function getProjectBrandRed() { return isBoursecuProject() ? BOURSECU_BRAND_RED : null } +/** رنگ اصلی دکمه‌ها و چارت — boursecu ثابت آبی، بقیه از تنظیمات tenant */ +export function getProjectPrimaryColor() { + if (isBoursecuProject()) { + return BOURSECU_BRAND_BLUE + } + + const color = getConfigApp('color') + return color != null ? String(color) : undefined +} + export function resolveProjectColor(color?: string | null) { if (!color || !isBoursecuProject()) { return color @@ -240,6 +266,7 @@ export function applyProjectTheme() { } document.documentElement.classList.add('project-boursecu') + document.documentElement.style.setProperty('--App-primary-color', BOURSECU_BRAND_BLUE) document.documentElement.style.setProperty('--App-brand-nav', BOURSECU_BRAND_NAV) document.documentElement.style.setProperty('--App-brand-red', BOURSECU_BRAND_RED) document.documentElement.style.setProperty('--App-brand-red-50', '#f8ecec') diff --git a/src/utils/productAssets.ts b/src/utils/productAssets.ts index 26e566b..d3c9f5a 100644 --- a/src/utils/productAssets.ts +++ b/src/utils/productAssets.ts @@ -394,10 +394,6 @@ export function formatMetalAssetsInfoText(metal: WalletMetalTotal): string { return `${metal.label}: مجموع کیف محصولات (${metal.product_weight} ${unit}) + موجودی کیف اصلی (${metal.melted_weight} ${unit})` } -function formatRialNumber(value: number): string { - return usePriceWithoutType(value) -} - /** متن توضیح مودال دارایی ریالی */ export function formatRialAssetsInfoText(cashWallet: number, metalRialValue: number): string { const total = cashWallet + metalRialValue diff --git a/src/utils/productCategories.ts b/src/utils/productCategories.ts index b09c11f..61bdbf7 100644 --- a/src/utils/productCategories.ts +++ b/src/utils/productCategories.ts @@ -86,7 +86,24 @@ export function isMeltedProductUsingAppPrice(product?: { group_type?: string | null reading_method?: string | null direct_price?: number | null + trade_by_quantity?: boolean | number | null + price?: number | null } | null) { - return isMeltedTradeGroup(product?.group_type) - && resolveMeltedPriceSource(product) === 'app' + if (!product || resolveMeltedPriceSource(product) !== 'app') { + return false + } + + if (isMeltedTradeGroup(product.group_type)) { + return true + } + + if (!usesQuantityTrade(product)) { + return false + } + + if (Number(product.direct_price) === 1) { + return false + } + + return Number(product.price ?? 0) <= 0 } diff --git a/src/utils/productDealMethod.ts b/src/utils/productDealMethod.ts index 6bbf7ea..e852a7f 100644 --- a/src/utils/productDealMethod.ts +++ b/src/utils/productDealMethod.ts @@ -42,6 +42,19 @@ export function isKatodMesGroup(groupType?: string | null) { return normalizeProductGroupType(groupType) === BOURSECU_GROUP_KATOD } +export function isShamshMesGroup(groupType?: string | null, title?: string | null) { + if (!isBoursecuProject()) { + return false + } + + const group = normalizeProductGroupType(groupType) + if (group === 'شمش') { + return true + } + + return (title ?? '').includes('شمش') +} + export function isGoldOnlyDealGroup(groupType?: string | null) { return isMeltedTradeGroup(groupType) } @@ -51,6 +64,7 @@ export interface ProductUnitSource { direct_price?: number | null group_type?: string | null amount?: number | null + trade_by_quantity?: boolean | number | null } export function isWeightBasedProductUnit(unit?: string | null) { @@ -111,8 +125,17 @@ export function formatProductWeightAmount(amount?: number | null, product?: Prod return `${value} ${weightUnit}` } +/** فقط محصول تعدادی (مثل سکه): «هر عدد X گرم» — معامله مقداری با trade_by_quantity نیست */ +export function shouldShowPerUnitWeightHint(product?: ProductUnitSource | null) { + if (!product || !hasProductUnitWeight(product) || usesQuantityTrade(product)) { + return false + } + + return isCountBasedProduct(product) +} + export function getProductUnitWeightLabel(product?: ProductUnitSource | null) { - if (!hasProductUnitWeight(product)) { + if (!shouldShowPerUnitWeightHint(product)) { return null } @@ -152,12 +175,16 @@ export function formatProductInventoryBalance(product?: (ProductUnitSource & { w return `${quantityPart} · هر عدد ${unitWeight}` } -/** محصول تعدادی: موجودی wallet.gold = تعداد قلم، نه وزن */ +/** محصول تعدادی: موجودی wallet.gold = تعداد قلم، نه وزن — معامله مقداری با trade_by_quantity نیست */ export function isCountBasedProduct(product?: ProductUnitSource | null) { if (!product) { return false } + if (usesQuantityTrade(product)) { + return false + } + if (isWeightBasedProductUnit(product.unit)) { return false } @@ -567,3 +594,23 @@ export function getMetalTypeTradeLabel() { export function getTradePriceUnitLabel() { return useSettingsStore().metalTypeLabel } + +/** برچسب قیمت حین معامله — معامله مقداری: نام و واحد همان محصول */ +export function getTransactionTradePriceLabel(product?: (ProductUnitSource & { title?: string | null }) | null) { + if (product && usesQuantityTrade(product)) { + const unit = getProductQuantityUnit(product) + const title = (product.title ?? '').trim() + return title ? `قیمت هر ${unit} ${title}` : `قیمت هر ${unit}` + } + + return `قیمت هر ${getWeightUnit()} ${getTradePriceUnitLabel()}` +} + +/** وزن کل زیر مقدار مبادله‌شده — فقط محصول تعدادی (نه trade_by_quantity) */ +export function shouldShowTransactionTotalWeightLine(product?: ProductUnitSource | null) { + if (!product || usesQuantityTrade(product) || !hasProductUnitWeight(product)) { + return false + } + + return isCountBasedProduct(product) +} diff --git a/src/utils/storeHours.ts b/src/utils/storeHours.ts index 7173084..5b74c8f 100644 --- a/src/utils/storeHours.ts +++ b/src/utils/storeHours.ts @@ -1,3 +1,4 @@ +import { ref } from 'vue' import { useSettingsStore } from '@/store/settingsStore' import { lastPrice } from '@/utils/price' @@ -13,7 +14,13 @@ export interface EffectiveTradingHours { enforced: boolean } -let productTradingHours: { start: string; end: string } | null = null +const productTradingHours = ref<{ start: string; end: string } | null>(null) +const productTradingHoursVersion = ref(0) + +function normalizeTradingTimeSetting(value: unknown, fallback: string): string { + const raw = String(value ?? '').trim() + return raw || fallback +} function parseTimeToSeconds(time: string): number { const parts = time.trim().split(':').map(Number) @@ -22,20 +29,56 @@ function parseTimeToSeconds(time: string): number { } export function formatTradingTimeDisplay(time: string): string { - const parts = time.trim().split(':') + const normalized = normalizeTradingTimeSetting(time, '') + if (!normalized) { + return '' + } + + const parts = normalized.split(':') if (parts.length >= 3) { return `${parts[0]}:${parts[1]}:${parts[2]}` } if (parts.length >= 2) { return `${parts[0]}:${parts[1]}:00` } - return time + return normalized +} + +function hasProductTradingWindow(start?: string | null, end?: string | null): boolean { + const open = formatTradingTimeDisplay(normalizeTradingTimeSetting(start, '00:00:00')) + const close = formatTradingTimeDisplay(normalizeTradingTimeSetting(end, '00:00:00')) + if (!open || !close) { + return false + } + + return open !== close } export function setProductTradingHours(start?: string | null, end?: string | null) { - if (start && end) { - productTradingHours = { start, end } + if (!hasProductTradingWindow(start, end)) { + productTradingHours.value = null + productTradingHoursVersion.value += 1 + return } + + productTradingHours.value = { + start: normalizeTradingTimeSetting(start, '00:00'), + end: normalizeTradingTimeSetting(end, '23:59'), + } + productTradingHoursVersion.value += 1 +} + +export function syncProductTradingHoursFromProducts( + products: Array<{ auto_open_at?: string | null; auto_close_at?: string | null }>, +) { + for (const product of products) { + if (hasProductTradingWindow(product.auto_open_at, product.auto_close_at)) { + setProductTradingHours(product.auto_open_at, product.auto_close_at) + return + } + } + + setProductTradingHours(null, null) } export function getStoreTradingHours(): StoreTradingHours { @@ -47,13 +90,14 @@ export function getStoreTradingHours(): StoreTradingHours { String(closeRaw ?? 'false').trim().toLowerCase() === 'true' return { - start: String(settings.getSettingByKey('startDay') ?? '00:00'), - end: String(settings.getSettingByKey('endDay') ?? '23:59'), + start: normalizeTradingTimeSetting(settings.getSettingByKey('startDay'), '00:00'), + end: normalizeTradingTimeSetting(settings.getSettingByKey('endDay'), '23:59'), closePriceEnabled, } } export function getEffectiveTradingHours(): EffectiveTradingHours { + void productTradingHoursVersion.value const settings = getStoreTradingHours() if (settings.closePriceEnabled) { return { @@ -63,10 +107,10 @@ export function getEffectiveTradingHours(): EffectiveTradingHours { } } - if (productTradingHours?.start && productTradingHours?.end) { + if (productTradingHours.value?.start && productTradingHours.value?.end) { return { - start: productTradingHours.start, - end: productTradingHours.end, + start: productTradingHours.value.start, + end: productTradingHours.value.end, enforced: true, } } @@ -92,10 +136,18 @@ export function isStoreClosedBySchedule(now = new Date()): boolean { } export function isStoreClosed(): boolean { - if (lastPrice.value?.closed === true) { - return true + void productTradingHoursVersion.value + const { closePriceEnabled } = getStoreTradingHours() + + if (closePriceEnabled) { + if (lastPrice.value?.closed === true) { + return true + } + + return isStoreClosedBySchedule() } + // وقتی close_price خاموش است، صفر بودن قیمت مرجع به معنی بسته بودن فروشگاه نیست. return isStoreClosedBySchedule() } @@ -103,5 +155,10 @@ export function getStoreClosedMessage(): string { const { start, end } = getEffectiveTradingHours() const open = formatTradingTimeDisplay(start) const close = formatTradingTimeDisplay(end) + + if (!open || !close) { + return 'فروشگاه در حال حاضر بسته است.' + } + return `فروشگاه در حال حاضر بسته است. ساعت کاری از ${open} تا ${close} می‌باشد.` } diff --git a/src/views/base/fund/components/Item.vue b/src/views/base/fund/components/Item.vue index 9e690f7..6a0804f 100644 --- a/src/views/base/fund/components/Item.vue +++ b/src/views/base/fund/components/Item.vue @@ -11,7 +11,7 @@
{{ item.quantity ?? '-' }}
{{ item.unit }} -
+
هر عدد {{ item.unit_weight }}
diff --git a/src/views/base/home/components/BoursecuAssetsSummary.vue b/src/views/base/home/components/BoursecuAssetsSummary.vue index aa1eeed..926c622 100644 --- a/src/views/base/home/components/BoursecuAssetsSummary.vue +++ b/src/views/base/home/components/BoursecuAssetsSummary.vue @@ -17,23 +17,23 @@ > + +
-
- {{ line.label }} - {{ line.value }} -
+ {{ line.label }} + {{ line.value }}
@@ -86,6 +86,7 @@ onClickOutside(rootRef, () => { } .boursecu-assets__row { + position: relative; display: flex; align-items: center; justify-content: center; @@ -122,9 +123,12 @@ onClickOutside(rootRef, () => { .boursecu-assets__popup { position: absolute; top: calc(100% + 8px); - right: 0; + left: 50%; + right: auto; + transform: translateX(-50%); z-index: 40; - min-width: min(18rem, 78vw); + width: min(18rem, calc(100vw - 2rem)); + max-width: calc(100vw - 2rem); padding: 10px 12px; border-radius: 10px; background: #fff; @@ -177,9 +181,11 @@ onClickOutside(rootRef, () => { } .boursecu-assets__popup { - right: auto; left: 0; - min-width: 20rem; + right: auto; + transform: none; + width: min(20rem, calc(100% - 1rem)); + max-width: 20rem; } } diff --git a/src/views/base/home/components/CurrentPrice.vue b/src/views/base/home/components/CurrentPrice.vue index 1c6d5f1..a05947d 100644 --- a/src/views/base/home/components/CurrentPrice.vue +++ b/src/views/base/home/components/CurrentPrice.vue @@ -1,29 +1,47 @@ @@ -31,29 +49,128 @@ import { computed } from 'vue' import Icon from '@/components/BasicPacks/BasicIcon.vue' import { useConfigStore } from '@/store/configStore' +import { useUserStore } from '@/store/userStore' +import { isBoursecuProject } from '@/utils/config' import { getTradeBuyPrice, lastPrice, percentPriceChanged, price } from '@/utils/price' +import { getStoreClosedMessage, isStoreClosed } from '@/utils/storeHours' import Vue3Odometer from 'vue3-odometer' import 'odometer/themes/odometer-theme-default.css' import { formatSignedPercentChange } from '@/utils/usePrice' const config = useConfigStore() +const userStore = useUserStore() +const isBoursecu = isBoursecuProject() + +const priceLabel = computed(() => + isBoursecu ? 'قیمت لحظه‌ای کاتد مس' : `قیمت خرید از ${config.config.name_fa}` +) + +const showStoreClosed = computed(() => { + if (isBoursecu) { + return isStoreClosed() + } + return lastPrice?.value?.goldir === 0 && getTradeBuyPrice(lastPrice.value) === 0 +}) + +const storeClosedHint = computed(() => { + const custom = userStore.getValueByKey('closed_message') + if (typeof custom === 'string' && custom.trim()) { + return custom.replace(/<[^>]*>/g, '').trim() + } + return getStoreClosedMessage() +}) + +const containerClass = computed(() => { + if (!isBoursecu) { + return 'border-gray-200 border-1' + } + if (showStoreClosed.value) { + return 'boursecu-price-box boursecu-price-box--closed' + } + return 'boursecu-price-box boursecu-price-box--open' +}) const percentChange = computed(() => { if (!getTradeBuyPrice(lastPrice.value)) return 0 return percentPriceChanged() }) -const isMarketClosed = computed(() => { - return lastPrice?.value?.goldir === 0 && getTradeBuyPrice(lastPrice.value) === 0 -}) - const displayGoldVal = computed(() => { - if (isMarketClosed.value) return 0 + if (showStoreClosed.value) return 0 return getTradeBuyPrice(lastPrice.value) }) + +void price diff --git a/src/views/base/home/desktop/components/DesktopPriceRange.vue b/src/views/base/home/desktop/components/DesktopPriceRange.vue index 1f80fb1..a2a73cb 100644 --- a/src/views/base/home/desktop/components/DesktopPriceRange.vue +++ b/src/views/base/home/desktop/components/DesktopPriceRange.vue @@ -5,7 +5,7 @@ import { usePriceWithoutType } from '@/utils/usePrice' import { getHomeLayoutId } from '../../layouts/registry' import { resolveMetalDayRangePrices, usePriceChart } from '../../composables/usePriceChart' -const { selectedChartMetal, maftolChartRatio } = usePriceChart() +const { selectedChartMetal, selectedMetalChartRatio } = usePriceChart() const isBoursecuLayout = computed(() => getHomeLayoutId() === 'boursecu') const rangePrices = computed(() => @@ -13,7 +13,7 @@ const rangePrices = computed(() => price: price.value, metal: selectedChartMetal.value, isBoursecuLayout: isBoursecuLayout.value, - maftolRatio: maftolChartRatio.value, + metalRatio: selectedMetalChartRatio.value, }) ) diff --git a/src/views/base/home/layouts/sections/MarketClosedSection.vue b/src/views/base/home/layouts/sections/MarketClosedSection.vue index 6372e2c..cd485b6 100644 --- a/src/views/base/home/layouts/sections/MarketClosedSection.vue +++ b/src/views/base/home/layouts/sections/MarketClosedSection.vue @@ -1,5 +1,6 @@