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 @@
- ثبت نهایی
+
+ ثبت نهایی
+
-
+
ثبت نهایی
@@ -794,6 +801,9 @@ function okConfirm() {
}
async function ok() {
+ if (loading.value) {
+ return
+ }
if (isStoreClosed()) {
message.warning(getStoreClosedMessage())
return
diff --git a/src/views/base/transactions/components/Item.vue b/src/views/base/transactions/components/Item.vue
index 3a1cb99..4702719 100644
--- a/src/views/base/transactions/components/Item.vue
+++ b/src/views/base/transactions/components/Item.vue
@@ -16,7 +16,7 @@
@@ -115,12 +115,12 @@