diff --git a/ui/src/pages/ProductPricing.vue b/ui/src/pages/ProductPricing.vue index 5eee50a..33d4d57 100644 --- a/ui/src/pages/ProductPricing.vue +++ b/ui/src/pages/ProductPricing.vue @@ -2474,17 +2474,18 @@ async function reloadData ({ page = 1, useCache = true } = {}) { duration_ms: Date.now() - startedAt, message: String(err?.message || err || 'reload failed') }) + } finally { + console.info('[product-pricing][ui] reload:done', { + duration_ms: Date.now() - startedAt, + row_count: Array.isArray(store.rows) ? store.rows.length : 0, + has_error: Boolean(store.error) + }) + await bindHorizontalScrollSync() + // Let the table render before we re-enable actions (prevents double-submits while the UI is still updating). + await nextTick() + await new Promise((resolve) => setTimeout(resolve, 0)) + isReloading.value = false } - console.info('[product-pricing][ui] reload:done', { - duration_ms: Date.now() - startedAt, - row_count: Array.isArray(store.rows) ? store.rows.length : 0, - has_error: Boolean(store.error) - }) - await bindHorizontalScrollSync() - // Let the table render before we re-enable actions (prevents double-submits while the UI is still updating). - await nextTick() - await new Promise((resolve) => setTimeout(resolve, 0)) - isReloading.value = false } // Full "fetch all pages" is intentionally avoided; keep server-side paging for performance. diff --git a/ui/src/pages/WholesaleCampaigns.vue b/ui/src/pages/WholesaleCampaigns.vue index 20a27a4..c45ed19 100644 --- a/ui/src/pages/WholesaleCampaigns.vue +++ b/ui/src/pages/WholesaleCampaigns.vue @@ -2645,16 +2645,17 @@ async function reloadData ({ page = 1, useCache = true } = {}) { duration_ms: Date.now() - startedAt, message: String(err?.message || err || 'reload failed') }) + } finally { + console.info('[product-pricing][ui] reload:done', { + duration_ms: Date.now() - startedAt, + row_count: Array.isArray(store.rows) ? store.rows.length : 0, + has_error: Boolean(store.error) + }) + await bindHorizontalScrollSync() + await nextTick() + await new Promise((resolve) => setTimeout(resolve, 0)) + isReloading.value = false } - console.info('[product-pricing][ui] reload:done', { - duration_ms: Date.now() - startedAt, - row_count: Array.isArray(store.rows) ? store.rows.length : 0, - has_error: Boolean(store.error) - }) - await bindHorizontalScrollSync() - await nextTick() - await new Promise((resolve) => setTimeout(resolve, 0)) - isReloading.value = false } // Full "fetch all pages" is intentionally avoided; keep server-side paging for performance.