fix(modal): close rollout and async lifecycle gaps

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-05 02:31:41 +08:00
co-authored by Claude Fable 5
parent 5375ad6429
commit aa865e24e1
8 changed files with 86 additions and 31 deletions
+37 -2
View File
@@ -13,6 +13,9 @@
var detailOrderNumber = "";
var detailAutoRefreshStarted = false;
var detailSession = null;
var detailReplacement = false;
var detailReplacementSession = null;
function toast(message, type) {
window.AksrtToast(message, type || "info");
@@ -48,7 +51,12 @@
}
function activeDetail(number) {
return detailOrderNumber === number && !!window.AksrtModalRuntime.getActive();
return detailOrderNumber === number
&& !!detailSession
&& !detailSession.closed
&& detailSession.options
&& detailSession.options.kind === "orders"
&& window.AksrtModalRuntime.getActive() === detailSession.shell;
}
function orderTag(orderNumber) {
@@ -115,8 +123,12 @@
cacheKey: "orders:detail:" + orderNumber,
cacheTags: ["orders", orderTag(orderNumber)],
skeleton: detailSkeleton(),
onState: function (_, session) {
if (orderNumber === detailOrderNumber) detailSession = session;
},
renderData: function (data, session) {
if (orderNumber !== detailOrderNumber) return false;
detailSession = session;
if (!data || typeof data !== "object") {
session.content.innerHTML = '<p class="c-red">订单不存在</p>';
return;
@@ -137,6 +149,9 @@
function openDetail(orderNumber) {
if (!orderNumber) return;
detailSession = null;
detailReplacement = false;
detailReplacementSession = null;
detailOrderNumber = orderNumber;
detailAutoRefreshStarted = false;
window.AksrtModalRuntime.openRemote(detailOptions(orderNumber, false));
@@ -144,7 +159,16 @@
function refreshDetail(orderNumber) {
if (!orderNumber || !activeDetail(orderNumber)) return;
window.AksrtModalRuntime.openRemote(detailOptions(orderNumber, true));
detailReplacement = true;
detailReplacementSession = detailSession;
var refreshPromise = window.AksrtModalRuntime.openRemote(detailOptions(orderNumber, true));
refreshPromise.then(function () {
detailReplacement = false;
detailReplacementSession = null;
}, function () {
detailReplacement = false;
detailReplacementSession = null;
});
}
function currentViewPath() {
@@ -301,6 +325,17 @@
if (cancel) { event.preventDefault(); closeOrder(cancel); }
});
document.addEventListener("aksrt:modal:close", function (event) {
var detail = event && event.detail ? event.detail : {};
if (!detailSession || detail.session !== detailSession) return;
if (detail.reason === "replace" && detailReplacement && detail.session === detailReplacementSession) return;
detailSession = null;
detailOrderNumber = "";
detailAutoRefreshStarted = false;
detailReplacement = false;
detailReplacementSession = null;
});
document.addEventListener("click", function (event) {
var refresh = event.target.closest("[data-aksrt-order-refresh]");
if (refresh) {