price calulator changed 7
This commit is contained in:
@@ -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 = []
|
||||||
|
|||||||
Reference in New Issue
Block a user