From 0bcd9ce551bbf473b4b5b079d2df25e9238a04d4 Mon Sep 17 00:00:00 2001 From: adonis Date: Thu, 2 Jul 2026 21:23:55 +0330 Subject: [PATCH] price calulator changed 8 --- src/utils/productDealMethod.ts | 54 +++++++++++++++++++ src/utils/usePrice.ts | 4 +- src/views/base/gold/index.vue | 14 ++++- .../base/transactions/components/Item.vue | 6 +-- .../components/TransactionDetailPanel.vue | 7 +-- 5 files changed, 75 insertions(+), 10 deletions(-) diff --git a/src/utils/productDealMethod.ts b/src/utils/productDealMethod.ts index b700d05..bb4ece3 100644 --- a/src/utils/productDealMethod.ts +++ b/src/utils/productDealMethod.ts @@ -13,6 +13,7 @@ import { usesQuantityTrade, } from '@/utils/productCategories' import { formatInventoryCardValue } from '@/utils/productAssets' +import { formatGoldAmount } from '@/utils/usePrice' /** @deprecated از isMeltedTradeGroup استفاده کنید */ export const BOURSECU_GROUP_ABSHODE = PRODUCT_CATEGORY_ABSHODE @@ -635,6 +636,59 @@ export function resolveTransactionTradeProduct( return item.wallet?.product ?? null } +const MELTED_GOLD_TRANSACTION_DECIMALS = 5 + +/** معامله آبشده / کیف طلای اصلی — نه سکه و محصول تعدادی */ +export function isMeltedGoldTransaction( + item?: (TransactionTradeProductSource & { type?: number | null; title?: string | null }) | null, +): boolean { + if (!item) { + return false + } + + const tradeProduct = resolveTransactionTradeProduct(item) + if (tradeProduct) { + if (usesQuantityTrade(tradeProduct) && !isMeltedTradeGroup(tradeProduct.group_type)) { + return false + } + if (isMeltedTradeGroup(tradeProduct.group_type)) { + return true + } + if (isCountBasedProduct(tradeProduct)) { + return false + } + } + + const title = (item.title ?? '').trim() + const meltedLabel = getMeltedGoldTradeLabel() + if (title.includes(PRODUCT_CATEGORY_ABSHODE) || (meltedLabel && title.includes(meltedLabel))) { + return true + } + + if (item.type !== 1 && item.type !== 2) { + return false + } + + if (isMeltedTradeGroup(item.wallet?.product?.group_type)) { + return true + } + + const tradeTitle = (tradeProduct?.title ?? '').trim() + if (tradeTitle === meltedLabel || tradeTitle.includes(PRODUCT_CATEGORY_ABSHODE)) { + return true + } + + return !item.wallet?.product && !tradeTitle +} + +export function formatTransactionGoldAmount( + item?: (TransactionTradeProductSource & { type?: number | null; title?: string | null }) | null, + amount?: number | null, +): string { + const decimals = isMeltedGoldTransaction(item) ? MELTED_GOLD_TRANSACTION_DECIMALS : 3 + return formatGoldAmount(amount, decimals) +} + /** برچسب قیمت حین معامله — نام و واحد همان محصول معامله‌شده */ export function getTransactionTradePriceLabel(product?: (ProductUnitSource & { title?: string | null }) | null) { if (!product) { diff --git a/src/utils/usePrice.ts b/src/utils/usePrice.ts index 8f08068..3670f25 100644 --- a/src/utils/usePrice.ts +++ b/src/utils/usePrice.ts @@ -143,10 +143,10 @@ export function getTransactionGoldAmount(item: TransactionPriceSource): number { return gold } -export function formatGoldAmount(amount?: number | null): string { +export function formatGoldAmount(amount?: number | null, decimals = 3): string { const num = Number(amount) if (!Number.isFinite(num)) return '0' - return formatGroupedPrice(Number(num.toFixed(3)), false) + return formatGroupedPrice(Number(num.toFixed(decimals)), false) } /** وزن فلز (گرم/کیلو) — بدون گرد کردن به بالا (برخلاف usePriceWithoutType) */ diff --git a/src/views/base/gold/index.vue b/src/views/base/gold/index.vue index f0d45d2..af86fcf 100644 --- a/src/views/base/gold/index.vue +++ b/src/views/base/gold/index.vue @@ -214,7 +214,14 @@ - ثبت نهایی + + ثبت نهایی + - + ثبت نهایی