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 0000000..b4df0dd Binary files /dev/null and b/src/assets/img/boursecu-home-icon.png differ diff --git a/src/assets/img/boursecu-settings-icon.png b/src/assets/img/boursecu-settings-icon.png new file mode 100644 index 0000000..373536f Binary files /dev/null and b/src/assets/img/boursecu-settings-icon.png differ diff --git a/src/assets/img/boursemes-login.png b/src/assets/img/boursemes-login.png index d19c776..3fc17a6 100644 Binary files a/src/assets/img/boursemes-login.png and b/src/assets/img/boursemes-login.png differ 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 @@