price calulator changed 7

This commit is contained in:
2026-07-02 21:13:02 +03:30
parent 536f827e16
commit 874424f853
3 changed files with 37 additions and 61 deletions
+5
View File
@@ -50,6 +50,7 @@ export function useFormat(num: string | number, unit = '') {
type TransactionPriceSource = { type TransactionPriceSource = {
cash?: number | null cash?: number | null
gold?: number | null gold?: number | null
type?: number | null
order?: { order?: {
price?: number | null price?: number | null
total_price?: number | null total_price?: number | null
@@ -118,6 +119,10 @@ export function resolveTransactionStatusLabel(item?: TransactionPriceSource | nu
return 'موفق' return 'موفق'
} }
if (item.order_id && (item.type === 1 || item.type === 2 || item.type === 10)) {
return 'موفق'
}
return '' return ''
} }
@@ -1,4 +1,4 @@
import { computed, inject, onMounted, provide, ref, type ComponentPublicInstance, type InjectionKey } from 'vue' import { computed, inject, onActivated, onMounted, provide, ref, type ComponentPublicInstance, type InjectionKey } from 'vue'
import { useIntersectionObserver } from '@vueuse/core' import { useIntersectionObserver } from '@vueuse/core'
import { useDesktopBreakpoint } from '@/layouts/composables/useAppLayout' import { useDesktopBreakpoint } from '@/layouts/composables/useAppLayout'
import { getProductsCatalog, getProductsCatalogRef } from '@/composables/useProductsCatalog' import { getProductsCatalog, getProductsCatalogRef } from '@/composables/useProductsCatalog'
@@ -181,13 +181,10 @@ export function useTransactionsPageProvider(options?: { boursecu?: boolean }) {
if (isBoursecu) { if (isBoursecu) {
await getProductsCatalog() await getProductsCatalog()
} }
await initTransactionsPageData(isBoursecu)
})
const modeMatches = transactionsBoursecuMode.value === isBoursecu onActivated(async () => {
if (!initialized.value || !modeMatches) {
await initTransactionsPageData(isBoursecu, !modeMatches)
return
}
await reloadTransactionsTable() await reloadTransactionsTable()
}) })
@@ -11,10 +11,8 @@ import {
type BoursecuTransactionTabId, type BoursecuTransactionTabId,
} from '../config/boursecuTabs' } from '../config/boursecuTabs'
/** Shared transactions datasets — mobile/desktop views read this module state only. */ /** Shared transactions page state — refetched on every page visit (no list cache). */
let initPromise: Promise<void> | null = null let activeFetchId = 0
let fetchSeq = 0
const initialized = ref(false)
export const transactionsBoursecuMode = ref(false) export const transactionsBoursecuMode = ref(false)
export const transactionPagination = ref<TableEngineInput>({ filters: [], limit: 7, page: 0 }) export const transactionPagination = ref<TableEngineInput>({ filters: [], limit: 7, page: 0 })
@@ -28,10 +26,6 @@ export const transactionProductFilter = ref<number>()
export const transactionActiveTabId = ref<BoursecuTransactionTabId>('trades') export const transactionActiveTabId = ref<BoursecuTransactionTabId>('trades')
export const transactionTradeSide = ref<BoursecuTradeSide>('buy') export const transactionTradeSide = ref<BoursecuTradeSide>('buy')
export function isTransactionsPageDataInitialized() {
return initialized.value
}
export function getActiveBoursecuTab(): BoursecuTransactionTab { export function getActiveBoursecuTab(): BoursecuTransactionTab {
return ( return (
BOURSECU_TRANSACTION_TABS.find((tab) => tab.id === transactionActiveTabId.value) ?? BOURSECU_TRANSACTION_TABS.find((tab) => tab.id === transactionActiveTabId.value) ??
@@ -66,26 +60,28 @@ export function resetTransactionsPagination() {
} }
} }
async function fetchTransactionsPage(append: boolean) { function resolveTransactionFetcher() {
const seq = ++fetchSeq const activeTab = getActiveBoursecuTab()
return transactionsBoursecuMode.value && activeTab.fetchMode === 'deposit'
? getTransactionTable2
: getTransactionTable
}
async function fetchTransactionsPage(append: boolean): Promise<boolean> {
const fetchId = ++activeFetchId
const isFirstPage = transactionPagination.value.page === 0 && !append const isFirstPage = transactionPagination.value.page === 0 && !append
if (isFirstPage) { if (isFirstPage) {
loading.value = true loading.value = true
loadingMore.value = false
} else { } else {
loadingMore.value = true loadingMore.value = true
} }
try { try {
const activeTab = getActiveBoursecuTab() const output = await resolveTransactionFetcher()(transactionPagination.value)
const fetcher = if (fetchId !== activeFetchId) {
transactionsBoursecuMode.value && activeTab.fetchMode === 'deposit' return false
? getTransactionTable2
: getTransactionTable
const output = await fetcher(transactionPagination.value)
if (seq !== fetchSeq) {
return
} }
transactionTableOutput.value = output transactionTableOutput.value = output
@@ -96,20 +92,23 @@ async function fetchTransactionsPage(append: boolean) {
} else { } else {
transactionItems.value.push(...rows) transactionItems.value.push(...rows)
} }
return true
} catch (error) { } catch (error) {
if (seq === fetchSeq) { if (fetchId === activeFetchId) {
console.error('Error fetching transactions:', error) console.error('Error fetching transactions:', error)
} }
return false
} finally { } finally {
if (seq === fetchSeq) { if (fetchId === activeFetchId) {
loading.value = false loading.value = false
loadingMore.value = false loadingMore.value = false
} }
} }
} }
/** همیشه از سرور — بدون کش لیست */
export async function reloadTransactionsTable() { export async function reloadTransactionsTable() {
fetchSeq += 1
transactionPagination.value.page = 0 transactionPagination.value.page = 0
transactionItems.value = [] transactionItems.value = []
transactionTableOutput.value = null transactionTableOutput.value = null
@@ -134,41 +133,16 @@ export async function loadMoreTransactions() {
await fetchTransactionsPage(true) await fetchTransactionsPage(true)
} }
export async function initTransactionsPageData(boursecu: boolean, force = false) { /** هر بار ورود به صفحه تراکنش‌ها */
if (!force && initialized.value && transactionsBoursecuMode.value === boursecu) { export async function initTransactionsPageData(boursecu: boolean) {
return transactionsBoursecuMode.value = boursecu
} await reloadTransactionsTable()
if (!force && initPromise) {
return initPromise
}
initPromise = (async () => {
try {
if (force) {
resetTransactionsPageData()
}
transactionsBoursecuMode.value = boursecu
transactionPagination.value.page = 0
transactionItems.value = []
resetTransactionsPagination()
await fetchTransactionsPage(false)
initialized.value = true
} catch (error) {
console.error('Transactions page initialization error:', error)
} finally {
initPromise = null
}
})()
return initPromise
} }
export function resetTransactionsPageData() { export function resetTransactionsPageData() {
fetchSeq += 1 activeFetchId += 1
initialized.value = false loading.value = false
initPromise = null loadingMore.value = false
transactionsBoursecuMode.value = false transactionsBoursecuMode.value = false
transactionPagination.value = { filters: [], limit: 7, page: 0 } transactionPagination.value = { filters: [], limit: 7, page: 0 }
transactionItems.value = [] transactionItems.value = []