Fix product performance grouped JSON build
This commit is contained in:
@@ -1706,6 +1706,12 @@ const activeSalesBreakdownPagination = computed({
|
||||
}
|
||||
})
|
||||
|
||||
const activeBackendGroupedSortSignature = computed(() => {
|
||||
if (!backendGroupedSupportedTab(activeTab.value)) return ''
|
||||
const state = tablePagination[activeTab.value] || {}
|
||||
return `${activeTab.value}|${state.sortBy || ''}|${state.descending !== false ? 1 : 0}`
|
||||
})
|
||||
|
||||
function normalizeTablePagination (value) {
|
||||
return {
|
||||
page: Number(value?.page || 1),
|
||||
@@ -3014,6 +3020,7 @@ function groupedBucketSortValue (sourceRows, sortBy) {
|
||||
|
||||
function sortProductGroupedTableRows (tableRows, sortBy, descending) {
|
||||
const source = Array.isArray(tableRows) ? tableRows : []
|
||||
if (backendGroupedSupportedTab(activeTab.value)) return source
|
||||
if (!sortBy || !source.some(row => row?.__group)) {
|
||||
return sortFlatTableRows(source, sortBy, descending)
|
||||
}
|
||||
@@ -4619,14 +4626,17 @@ async function loadBackendGroupedRows (options = {}) {
|
||||
backendGroupedLoading.value = true
|
||||
const filtersKey = JSON.stringify(filterState.filters)
|
||||
const expandThroughLevel = selectedExpandThroughLevel.value
|
||||
const requestKey = `${tabKey}|${expandThroughLevel}|${selectedDetailMainGroup.value || ''}|${filtersKey}`
|
||||
const sortState = tableSortState(tabKey)
|
||||
const requestKey = `${tabKey}|${expandThroughLevel}|${selectedDetailMainGroup.value || ''}|${filtersKey}|${sortState.sortBy}|${sortState.descending ? 1 : 0}`
|
||||
const params = {
|
||||
mode: tabKey,
|
||||
groupLevels: activeGroupLevels.value.map(level => level.key),
|
||||
expandedKeys: activeExpandedGroupKeys(),
|
||||
expandThroughLevel,
|
||||
limit: tabKey === 'products' || tabKey === 'product_detail' || tabKey === 'idle' ? productKpiFetchLimit : 50000,
|
||||
filters: filterState.filters
|
||||
filters: filterState.filters,
|
||||
sortBy: sortState.sortBy,
|
||||
descending: sortState.descending
|
||||
}
|
||||
if (tabKey === 'product_detail') {
|
||||
params.urunAnaGrubu = selectedDetailMainGroup.value
|
||||
@@ -4635,7 +4645,8 @@ async function loadBackendGroupedRows (options = {}) {
|
||||
const startedAt = performance.now()
|
||||
const rows = await performanceStore.fetchGroupedRows(params, { force: options.force === true })
|
||||
const currentFilterState = backendGroupedFilterState(activeTab.value)
|
||||
const currentKey = `${activeTab.value}|${selectedExpandThroughLevel.value}|${selectedDetailMainGroup.value || ''}|${JSON.stringify(currentFilterState.filters)}`
|
||||
const currentSortState = tableSortState(activeTab.value)
|
||||
const currentKey = `${activeTab.value}|${selectedExpandThroughLevel.value}|${selectedDetailMainGroup.value || ''}|${JSON.stringify(currentFilterState.filters)}|${currentSortState.sortBy}|${currentSortState.descending ? 1 : 0}`
|
||||
if (requestKey !== currentKey) return
|
||||
const normalizedRows = Array.isArray(rows) ? rows.map(row => normalizeGroupedDisplayRow(tabKey, row)) : []
|
||||
backendGroupedRows.value = {
|
||||
@@ -4657,17 +4668,7 @@ async function loadBackendGroupedRows (options = {}) {
|
||||
function normalizeGroupedDisplayRow (tabKey, row) {
|
||||
const nextRow = { ...row }
|
||||
normalizeGroupedProductHierarchyValues(nextRow)
|
||||
if (tabKey === 'order_product_customers' || tabKey === 'order_market_details') {
|
||||
return withOrderPeriodScores(nextRow)
|
||||
}
|
||||
const next = withPeriodScores(withGeneralMargins(withProductMargins(nextRow)))
|
||||
if (tabKey !== 'products' && tabKey !== 'product_detail' && tabKey !== 'idle') {
|
||||
next.customer_score_90d = Number(next.customer_score_90d || customerSalesPeriodScore(periodMetricSource(next, '90d')))
|
||||
next.customer_score_180d = Number(next.customer_score_180d || customerSalesPeriodScore(periodMetricSource(next, '180d')))
|
||||
next.customer_score_365d = Number(next.customer_score_365d || customerSalesPeriodScore(periodMetricSource(next, '365d')))
|
||||
next.customer_score_total = Number(next.customer_score_total || customerSalesPeriodScore(periodMetricSource(next, 'total')))
|
||||
}
|
||||
return next
|
||||
return nextRow
|
||||
}
|
||||
|
||||
function normalizeGroupedProductHierarchyValues (row) {
|
||||
@@ -5048,6 +5049,11 @@ watch(activeTab, () => {
|
||||
setupTopScrollbarSync()
|
||||
})
|
||||
|
||||
watch(activeBackendGroupedSortSignature, () => {
|
||||
if (!backendGroupedSupportedTab(activeTab.value) || loading.value) return
|
||||
scheduleLoadBackendGroupedRows()
|
||||
})
|
||||
|
||||
watch(activeDisplayedTableRows, () => {
|
||||
setupTopScrollbarSync()
|
||||
}, { flush: 'post' })
|
||||
|
||||
@@ -90,6 +90,8 @@ export const useProductPerformanceStore = defineStore('product-performance-store
|
||||
expandedKeys: normalizedList(params.expandedKeys, true),
|
||||
expandThroughLevel: Number(params.expandThroughLevel ?? params.expand_through_level ?? -1),
|
||||
filters: normalizedFilterMap(params.filters),
|
||||
sortBy: String(params.sortBy || params.sort_by || ''),
|
||||
descending: params.descending !== false,
|
||||
limit: Number(params.limit || 0)
|
||||
})
|
||||
},
|
||||
@@ -134,13 +136,17 @@ export const useProductPerformanceStore = defineStore('product-performance-store
|
||||
expanded_keys: Array.isArray(params.expandedKeys) ? params.expandedKeys : String(params.expandedKeys || '').split(',').filter(Boolean),
|
||||
expand_through_level: Number(params.expandThroughLevel ?? params.expand_through_level ?? -1),
|
||||
filters: normalizedFilterMap(params.filters),
|
||||
sort_by: String(params.sortBy || params.sort_by || ''),
|
||||
descending: params.descending !== false,
|
||||
limit: params.limit
|
||||
}, {
|
||||
params: {
|
||||
mode: params.mode,
|
||||
limit: params.limit,
|
||||
urun_ana_grubu: params.urunAnaGrubu || params.urun_ana_grubu || '',
|
||||
expand_through_level: Number(params.expandThroughLevel ?? params.expand_through_level ?? -1)
|
||||
expand_through_level: Number(params.expandThroughLevel ?? params.expand_through_level ?? -1),
|
||||
sort_by: String(params.sortBy || params.sort_by || ''),
|
||||
descending: params.descending !== false
|
||||
},
|
||||
timeout: 90000
|
||||
}).then(resp => {
|
||||
@@ -154,10 +160,11 @@ export const useProductPerformanceStore = defineStore('product-performance-store
|
||||
})
|
||||
return rows
|
||||
}).catch(err => {
|
||||
console.warn(`${logPrefix} request failed`, {
|
||||
const message = err?.response?.data || err?.message || String(err || '')
|
||||
console.warn(`${logPrefix} request failed: ${message}`, {
|
||||
mode: params.mode,
|
||||
elapsedSec: Number(((performance.now() - startedAt) / 1000).toFixed(2)),
|
||||
message: err?.response?.data || err?.message || err
|
||||
message
|
||||
})
|
||||
throw err
|
||||
}).finally(() => {
|
||||
|
||||
Reference in New Issue
Block a user