/** * 待支付订单浮窗无刷新同步(对齐参考主题 pay.js 下单后替换 .float-right-wait-pay)。 * * 订单相关缓存标签失效(下单待支付 / 支付 / 关闭)时,向服务端拉取最新浮窗片段 * 并替换现有节点;无待支付订单时移除浮窗。 * * @package Jio */ (function (window, document) { "use strict"; var SELECTOR = ".float-right-wait-pay"; var timer = null; var seq = 0; function loggedIn() { var config = window.jioData || window.jio || {}; return !!config.isLoggedIn; } function touchesOrders(tags) { if (!Array.isArray(tags) || !tags.length) return true; return tags.some(function (tag) { tag = String(tag || ""); return tag === "orders" || tag.indexOf("order:") === 0; }); } function render(html) { var current = document.querySelector(SELECTOR); if (!html) { if (current) current.remove(); return; } var holder = document.createElement("div"); holder.innerHTML = html; var next = holder.firstElementChild; if (!next) return; if (current) current.replaceWith(next); else document.body.appendChild(next); if (window.jQuery && window.jQuery.fn.countdown) { window.jQuery(next).find("[data-countdown]").countdown(); } } function refresh() { if (!loggedIn() || !window.JioRequest) return; var id = ++seq; window.JioRequest.get("/orders/wait-pay-float").then(function (result) { if (id !== seq) return; var data = result.data || {}; render(String(data.html || "")); }).catch(function () { /* 保留现有浮窗 */ }); } document.addEventListener("jio:cache:invalidated", function (event) { if (!touchesOrders(event.detail && event.detail.tags)) return; window.clearTimeout(timer); timer = window.setTimeout(refresh, 300); }); })(window, document);