';
});
}
function currentViewPath() {
var params = new URLSearchParams(window.location.search);
var allowed = ["order_status", "order_type", "order_number", "order_page"];
var query = new URLSearchParams();
allowed.forEach(function (key) { if (params.get(key)) query.set(key, params.get(key)); });
return "/orders/view" + (query.toString() ? "?" + query.toString() : "");
}
function actionHtml(order) {
var actions = order.actions || {};
var html = '';
if (actions.can_cancel) html += '';
if (actions.can_pay) html += '';
if (actions.can_open && order.permalink) html += '' + escapeHtml(order.entitlement_label || '打开已购内容') + '';
return html;
}
function cardHtml(order) {
var image = order.image
? ''
: '
' +
'';
}
function renderStats(stats) {
var root = page.querySelector('[data-aksrt-order-stats]');
if (!root) return;
root.innerHTML = '
全部' + Number(stats.total || 0) + '
' +
'
待支付' + Number(stats.pending || 0) + '
' +
'
已生效' + Number(stats.completed || 0) + '
';
}
function renderPagination(view) {
var existing = page.querySelector('.aksrt-orders-page__pagination');
if (existing) existing.remove();
if (Number(view.total_pages || 1) <= 1) return;
var root = document.createElement('nav');
root.className = 'aksrt-orders-page__pagination';
root.setAttribute('aria-label', '订单分页');
var base = new URL(window.location.href);
for (var i = 1; i <= Number(view.total_pages); i++) {
base.searchParams.set('order_page', String(i));
var link = document.createElement('a');
link.className = 'aksrt-orders-page__page-chip' + (i === Number(view.page) ? ' is-active' : '');
link.href = base.toString();
link.textContent = String(i);
root.appendChild(link);
}
var list = page.querySelector('[data-aksrt-order-list]');
if (list) list.after(root);
}
function renderView(view) {
renderStats(view.stats || {});
var list = page.querySelector('[data-aksrt-order-list]');
if (!list) return;
var items = Array.isArray(view.items) ? view.items : [];
if (!items.length) {
list.innerHTML = '
没有匹配的订单
换个条件试试,或清除当前筛选。
';
list.classList.add('is-empty');
} else {
list.classList.remove('is-empty');
list.innerHTML = items.map(cardHtml).join('');
}
renderPagination(view);
if (detailOrderNumber) {
var detail = items.filter(function (item) { return item.order_number === detailOrderNumber; })[0];
if (detail) renderDetail(detail); else closeDetail();
}
updateCountdowns();
}
function refreshView() {
return request(currentViewPath(), undefined, "GET").then(function (result) {
if (!result.success || !result.data) throw new Error(result.message || "刷新失败");
renderView(result.data);
return result.data;
}).catch(function (error) {
toast(error.message || "订单状态已变更,请刷新后查看");
});
}
function startPayment(button) {
var number = button.getAttribute("data-aksrt-order-pay") || "";
var method = button.getAttribute("data-aksrt-order-method") || "";
if (!number) return;
button.disabled = true;
request(orderPath(number, "/pay"), method ? { payment_method: method } : {}).then(function (result) {
if (!result.success) throw new Error(result.message || "支付失败");
var data = result.data || {};
if (data.redirect && data.payment_url) {
window.location.assign(data.payment_url);
return;
}
toast(data.message || "支付成功");
refreshView();
}).catch(function (error) {
button.disabled = false;
toast(error.message || "网络错误,请稍后重试");
});
}
function closeOrder(button) {
var number = button.getAttribute("data-aksrt-order-cancel") || "";
if (!number) return;
if (button.getAttribute("data-aksrt-confirm") !== "true") {
button.setAttribute("data-aksrt-confirm", "true");
button.textContent = "确认关闭";
return;
}
button.disabled = true;
request(orderPath(number, "/cancel")).then(function (result) {
if (!result.success) throw new Error(result.message || "关闭订单失败");
toast("订单已关闭");
refreshView();
}).catch(function (error) {
button.disabled = false;
button.removeAttribute("data-aksrt-confirm");
button.textContent = "关闭订单";
toast(error.message || "网络错误,请稍后重试");
});
}
function updateCountdowns() {
page.querySelectorAll("[data-aksrt-order-countdown]").forEach(function (node) {
var value = Math.max(0, Number(node.getAttribute("data-aksrt-order-countdown") || 0) - 1);
node.setAttribute("data-aksrt-order-countdown", String(value));
node.textContent = value ? "剩余支付时间 " + value + " 秒" : "订单即将关闭";
});
}
page.addEventListener("click", function (event) {
var filterToggle = event.target.closest("[data-aksrt-orders-filter-toggle]");
if (filterToggle) {
var panel = page.querySelector("[data-aksrt-orders-filter-panel]");
var expanded = filterToggle.getAttribute("aria-expanded") === "true";
filterToggle.setAttribute("aria-expanded", String(!expanded));
if (panel) panel.hidden = expanded;
return;
}
var detail = event.target.closest("[data-aksrt-order-detail]");
if (detail) { openDetail(detail.getAttribute("data-aksrt-order-detail")); return; }
if (event.target.closest("[data-aksrt-order-detail-close]")) { closeDetail(); return; }
var pay = event.target.closest("[data-aksrt-order-pay]");
if (pay) { startPayment(pay); return; }
var cancel = event.target.closest("[data-aksrt-order-cancel]");
if (cancel) closeOrder(cancel);
});
document.addEventListener("keydown", function (event) {
if (event.key === "Escape" && detailModal && !detailModal.hidden) closeDetail();
});
window.setInterval(updateCountdowns, 1000);
}());