fix(admin): make ticket "view latest" jump reliably

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Fable 5 committed 2026-10-31 12:13:57 +08:00
1 parent d7616b193e
commit a9709377bb
3 files changed
+28 -11

No files matched your search

+26 -9
View File
@@ -126,6 +126,27 @@
active.querySelectorAll('[data-aksrt-ticket-assign]').forEach(function (button) { button.disabled = true; });
}
/** 会话已在底部或无需滚动时隐藏「查看最新记录」,避免点击无反应。 */
function syncLatest() {
var conversation = panel.querySelector('.aksrt-ticket-conversation__scroll');
var button = panel.querySelector('[data-aksrt-ticket-latest]');
if (!conversation || !button) return;
button.hidden = conversation.scrollHeight - conversation.clientHeight - conversation.scrollTop <= 8;
}
/** 会话内滚到底部;手动触发时同时让弹窗正文露出会话底部。 */
function showLatest(manual) {
var conversation = panel.querySelector('.aksrt-ticket-conversation__scroll');
if (!conversation) return;
conversation.scrollTop = conversation.scrollHeight;
if (manual) {
var gap = conversation.getBoundingClientRect().bottom - panel.getBoundingClientRect().bottom;
if (gap > 0) panel.scrollTop += gap;
conversation.focus({ preventScroll: true });
}
syncLatest();
}
function updateUrl(id, page) {
var url = new URL(window.location.href);
if (id) url.searchParams.set('id', String(id));
@@ -180,10 +201,7 @@
if (typeof data.list === 'string') list.innerHTML = data.list;
updateUrl(id, data.page);
setupForms(panel, restore);
if (message === strings.reply) {
var conversation = panel.querySelector('.aksrt-ticket-conversation__scroll');
if (conversation) conversation.scrollTop = conversation.scrollHeight;
}
showLatest(false);
stale = false;
savedDrafts = {};
savedMessage = '';
@@ -260,11 +278,7 @@
syncStatus(statusForm);
statusForm.querySelector('[type="submit"]').focus();
}
if (event.target.closest('[data-aksrt-ticket-latest]')) {
var conversation = panel.querySelector('.aksrt-ticket-conversation__scroll');
conversation.scrollTop = conversation.scrollHeight;
conversation.focus();
}
if (event.target.closest('[data-aksrt-ticket-latest]')) showLatest(true);
});
root.addEventListener('input', function (event) {
@@ -389,6 +403,9 @@
});
});
// scroll 不冒泡,用捕获监听会话容器。
panel.addEventListener('scroll', syncLatest, true);
window.addEventListener('beforeunload', function (event) {
if (!saving && !dirty()) return;
event.preventDefault();