diff --git a/web/templates/lot.html b/web/templates/lot.html
index de3fb65..56a9bae 100644
--- a/web/templates/lot.html
+++ b/web/templates/lot.html
@@ -537,16 +537,41 @@ async function deleteStockMapping(partnumber) {
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 === 'components') {
+ 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;
+ }
+ }
+}
+
// LOT Creation Functions
function openCreateLotModal() {
document.getElementById('create-lot-modal').classList.remove('hidden');
@@ -668,4 +693,4 @@ if (document.getElementById('price-modal')) {
{{end}}
-{{template "base" .}}
\ No newline at end of file
+{{template "base" .}}