diff --git a/web/templates/admin_pricing.html b/web/templates/admin_pricing.html
index 90a7cb9..ddbe380 100644
--- a/web/templates/admin_pricing.html
+++ b/web/templates/admin_pricing.html
@@ -1185,16 +1185,41 @@ function processMetaPrices(metaPrices, originalLotName) {
async function recalculateAll() {
try {
- const resp = await fetch('/api/admin/pricing/recalculate-all', {method: 'POST'});
+ const resp = await fetch('/api/admin/pricing/recalculate-all?force=1', {method: 'POST'});
const data = await resp.json();
if (data.task_id) {
showToast('Пересчёт цен запущен в фоне', 'info');
+ await waitForTaskCompletion(data.task_id);
+ if (currentTab === 'component-settings') {
+ loadData();
+ }
}
} catch (e) {
showToast('Ошибка запуска пересчёта', 'error');
}
}
+function sleep(ms) {
+ return new Promise(resolve => setTimeout(resolve, ms));
+}
+
+async function waitForTaskCompletion(taskId) {
+ if (!taskId) return;
+ for (;;) {
+ await sleep(2500);
+ try {
+ const resp = await fetch(`/api/tasks/${taskId}`);
+ if (!resp.ok) return;
+ const task = await resp.json();
+ if (task.status === 'completed' || task.status === 'error') {
+ return;
+ }
+ } catch (_) {
+ return;
+ }
+ }
+}
+
// Close modal on click outside
document.getElementById('price-modal').addEventListener('click', function(e) {
if (e.target === this) {