Карточка: удерживать скролл боковых блоков при автообновлении; DEPO: «Снять с очереди»
Скролл: автообновление карточки (bjReloadKeepScroll) раньше сохраняло только прокрутку окна, а боковой «Путь заявки» (.claim-tl — position:fixed, свой overflow) и другие прокручиваемые блоки (.settings-nav, .doc-toc) отбрасывало наверх. Теперь сохраняется и восстанавливается и их scrollTop (JSON в sessionStorage, восстановление на rAF/timeout/load). DEPO: на «Обмен с DEPO» рядом с «Вернуть в очередь» добавлена «Снять с очереди» — помечает застрявшие записи STATE=SKIPPED (QHl04-06, depoDismissFailures), обработчик их больше не берёт и они уходят из списка ошибок. Для устаревших/ненужных записей (напр. старые тестовые). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -38,7 +38,11 @@
|
||||
<td style="white-space:nowrap">{{if not .At.IsZero}}{{wall .At}}{{end}}</td><td style="color:var(--err);font-size:12px">{{.Comment}}</td>
|
||||
</tr>{{end}}</tbody>
|
||||
</table></div>
|
||||
<form method="post" action="/admin/fancy-queue/requeue" style="margin-top:12px"><button type="submit" class="btn btn-ok" onclick="return confirm('Вернуть записи с ошибкой в очередь обработчика DEPO?')">↻ Вернуть в очередь</button></form>
|
||||
<div style="display:flex;gap:10px;flex-wrap:wrap;margin-top:12px">
|
||||
<form method="post" action="/admin/fancy-queue/requeue" style="margin:0"><button type="submit" class="btn btn-ok" onclick="return confirm('Вернуть записи с ошибкой в очередь обработчика DEPO? Он попробует обработать их заново.')">↻ Вернуть в очередь</button></form>
|
||||
<form method="post" action="/admin/fancy-queue/dismiss" style="margin:0"><button type="submit" class="btn" onclick="return confirm('Снять эти записи с очереди? Обработчик больше не будет их брать, и они исчезнут из списка ошибок. Применяйте для устаревших/ненужных записей.')">✕ Снять с очереди</button></form>
|
||||
</div>
|
||||
<p class="muted" style="margin:8px 0 0;font-size:12px">«Вернуть в очередь» — повторить обработку после устранения причины. «Снять с очереди» — пометить записи как снятые (SKIPPED) и убрать из ошибок, если переобрабатывать их не нужно (например, старые тестовые).</p>
|
||||
{{end}}
|
||||
</div>{{end}}
|
||||
|
||||
|
||||
@@ -841,18 +841,33 @@ button.dq-link, .dq-link { background:none !important; border:0 !important; padd
|
||||
document.addEventListener('change', function(e){ if (e.target.closest('main form')) dirty = true; }, true);
|
||||
try { var u = new URL(location.href); if (u.searchParams.has('flash')) { u.searchParams.delete('flash'); history.replaceState(null, '', u.pathname + u.search + u.hash); } } catch(e){}
|
||||
// Автообновление карточки перерисовывает страницу через перезагрузку. Сохраняем позицию
|
||||
// прокрутки, чтобы при чтении заявку не отбрасывало наверх (автообновление остаётся).
|
||||
// прокрутки окна И внутренних блоков со своим скроллом (боковой «Путь заявки» .claim-tl,
|
||||
// навигация настроек и т.п.), чтобы при чтении ничего не отбрасывало наверх.
|
||||
var scrollKey = 'bj-scroll:' + location.pathname;
|
||||
function bjReloadKeepScroll(){ try { sessionStorage.setItem(scrollKey, String(window.scrollY||window.pageYOffset||0)); } catch(e){} location.reload(); }
|
||||
var keepScrollSel = ['.claim-tl', '.settings-nav', '.doc-toc']; // блоки с собственным скроллом
|
||||
function bjReloadKeepScroll(){
|
||||
try {
|
||||
var st = { w: window.scrollY || window.pageYOffset || 0, el: {} };
|
||||
keepScrollSel.forEach(function(sel){ var e = document.querySelector(sel); if (e && e.scrollTop) st.el[sel] = e.scrollTop; });
|
||||
sessionStorage.setItem(scrollKey, JSON.stringify(st));
|
||||
} catch(e){}
|
||||
location.reload();
|
||||
}
|
||||
try {
|
||||
var sy = sessionStorage.getItem(scrollKey);
|
||||
if (sy !== null) {
|
||||
var raw = sessionStorage.getItem(scrollKey);
|
||||
if (raw !== null) {
|
||||
sessionStorage.removeItem(scrollKey);
|
||||
var syY = parseInt(sy, 10) || 0;
|
||||
var st = JSON.parse(raw); if (!st || typeof st !== 'object') st = {};
|
||||
var wy = st.w || 0, els = st.el || {};
|
||||
if ('scrollRestoration' in history) { try { history.scrollRestoration = 'manual'; } catch(e){} }
|
||||
window.scrollTo(0, syY);
|
||||
setTimeout(function(){ window.scrollTo(0, syY); }, 0);
|
||||
window.addEventListener('load', function(){ window.scrollTo(0, syY); });
|
||||
var restore = function(){
|
||||
window.scrollTo(0, wy);
|
||||
Object.keys(els).forEach(function(sel){ var e = document.querySelector(sel); if (e) e.scrollTop = els[sel]; });
|
||||
};
|
||||
restore();
|
||||
if (window.requestAnimationFrame) requestAnimationFrame(restore);
|
||||
setTimeout(restore, 0);
|
||||
window.addEventListener('load', restore);
|
||||
}
|
||||
} catch(e){}
|
||||
function hhmmss(){ var d = new Date(); return ('0'+d.getHours()).slice(-2)+':'+('0'+d.getMinutes()).slice(-2)+':'+('0'+d.getSeconds()).slice(-2); }
|
||||
|
||||
Reference in New Issue
Block a user