refactor: rename the theme brand and every identifier from AKSRT to Jio

Full-project rename. `git grep -i aksrt` is now empty apart from the
DBMigrator 3.3.0 changelog note that documents the rename itself.

Code identifiers
- PHP namespace AKSRT\ -> Jio\ (composer PSR-4 + 378 declarations)
- global constants AKSRT_* -> JIO_* (VERSION/DIR/URI, PAY_TYPE_*, CAPTCHA_*)
- procedural functions, hooks, options, meta keys, table names,
  cookies, query vars, ajax actions and nonces: aksrt_ -> jio_
- text domain aksrt -> jio; Theme Name -> Jio
- JS globals: aksrtData/aksrtAdminData/... -> jioData/jioAdminData/...,
  window.AKSRTCaptcha & friends -> window.JioCaptcha, Aksrt* -> Jio*
- Vue components Aks*.vue -> Jio*.vue (15 files renamed + imports)
- CSS classes/data-attrs/custom properties: aksrt- -> jio-
- REST namespace aksrt/v1 -> jio/v1 (incl. payment gateway callbacks)

Storage layer
- DB tables {prefix}aksrt_* -> {prefix}jio_*; SCHEMA_VERSION 3.2.0 -> 3.3.0
  so dbDelta creates the new names on install
- widget id_base aksrt_widget_* -> jio_widget_*
- uninstall.php drop list rebuilt from the actual migrator tables
  (dropped 3 stale entries, added the 17 missing ones)

Removed
- hardcoded https://api.aksrt.com/version.json default update endpoint;
  get_endpoint() now reads the 「更新端点」 setting and do_check() no-ops
  when it is empty

Files renamed: inc/helpers/aksrt-*.php -> jio-*.php (54),
assets/admin/src/components/form/Aks*.vue -> Jio*.vue (15).
Build artifacts regenerated: assets/css/build, assets/js/runtime,
assets/admin/build.

Verified: audit-psr4-paths errors=0, audit-admin-contracts errors=0
(warnings=56, unchanged baseline), 813/813 widget-system tests,
44/44 phpunit, php -l clean across all PHP.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Opus 5 committed 2026-11-01 20:05:04 +08:00
1 parent 5b16bc6e15
commit 35bb96e82f
997 files changed
+28216 -28188

No files matched your search

+114 -114
View File
@@ -1,7 +1,7 @@
/**
* Knowledge-payment order center interactions.
*
* @package AKSRT
* @package Jio
*/
(function () {
"use strict";
@@ -13,7 +13,7 @@
var options = { method: method || "POST" };
if (body !== undefined) options.body = JSON.stringify(body || {});
if (operationKey) options.headers = { "Idempotency-Key": operationKey };
return window.AksrtRequest.request(path, options);
return window.JioRequest.request(path, options);
}
function orderPath(orderNumber, suffix) {
@@ -47,7 +47,7 @@
// 自定义货币名称(后台「积分配置 → 自定义货币名称」)由服务端注入。
function currencyName() {
return (window.aksrtData && window.aksrtData.currencyName) || "积分";
return (window.jioData && window.jioData.currencyName) || "积分";
}
function orderTag(orderNumber) {
@@ -59,7 +59,7 @@
"orders",
orderTag(orderNumber),
];
window.AksrtModalRuntime.invalidate(tags);
window.JioModalRuntime.invalidate(tags);
}
function activeDetail(state, number) {
@@ -68,14 +68,14 @@
&& !state.detailSession.closed
&& state.detailSession.options
&& state.detailSession.options.kind === "orders"
&& window.AksrtModalRuntime.getActive() === state.detailSession.shell;
&& window.JioModalRuntime.getActive() === state.detailSession.shell;
}
function detailSkeleton() {
return '<div class="aksrt-order-detail__skeleton" aria-live="polite" aria-busy="true">' +
'<span class="aksrt-modal-runtime__skeleton-line is-wide"></span>' +
'<span class="aksrt-modal-runtime__skeleton-line"></span>' +
'<span class="aksrt-modal-runtime__skeleton-block"></span>' +
return '<div class="jio-order-detail__skeleton" aria-live="polite" aria-busy="true">' +
'<span class="jio-modal-runtime__skeleton-line is-wide"></span>' +
'<span class="jio-modal-runtime__skeleton-line"></span>' +
'<span class="jio-modal-runtime__skeleton-block"></span>' +
'</div>';
}
@@ -104,10 +104,10 @@
function detailRow(label, value, copyable) {
var text = value == null ? "" : String(value);
var cell = '<span class="aksrt-order-detail__value-text' + (copyable ? " is-mono" : "") + '">' +
var cell = '<span class="jio-order-detail__value-text' + (copyable ? " is-mono" : "") + '">' +
escapeHtml(text || "—") + "</span>";
if (copyable && text !== "") {
cell += '<button class="aksrt-order-detail__copy" type="button" data-aksrt-order-copy="' +
cell += '<button class="jio-order-detail__copy" type="button" data-jio-order-copy="' +
escapeHtml(text) + '" aria-label="复制' + escapeHtml(label) + '" title="复制' + escapeHtml(label) + '">' +
'<i class="fa fas fa-copy" aria-hidden="true"></i></button>';
}
@@ -116,7 +116,7 @@
function colorfulHeader(title, icon) {
return '<div class="modal-colorful-header colorful-bg jb-blue">' +
'<button type="button" class="close" data-aksrt-modal-close aria-label="关闭"><svg class="ic-close" aria-hidden="true"><use xlink:href="#icon-close"></use></svg></button>' +
'<button type="button" class="close" data-jio-modal-close aria-label="关闭"><svg class="ic-close" aria-hidden="true"><use xlink:href="#icon-close"></use></svg></button>' +
'<div class="colorful-make"></div>' +
'<div class="text-center"><div class="em2x"><i class="fa fas ' + escapeHtml(icon) + '" aria-hidden="true"></i></div>' +
'<div class="mt10 em12 padding-w10">' + escapeHtml(title) + '</div></div></div>';
@@ -136,32 +136,32 @@
html += colorfulHeader("订单详情", "fa-receipt");
// 状态横幅:整块配色只由 --hero-accent 驱动,换状态只改一处变量。
html += '<section class="aksrt-order-detail__hero is-' + escapeHtml(status) + '">';
html += '<span class="aksrt-order-detail__hero-icon" aria-hidden="true"><i class="fa fas ' + meta.icon + '"></i></span>';
html += '<div class="aksrt-order-detail__hero-copy">';
html += '<strong class="aksrt-order-detail__status">' + escapeHtml(order.status_label || "") + "</strong>";
html += '<p class="aksrt-order-detail__desc">' + escapeHtml(meta.desc) + "</p>";
html += '<section class="jio-order-detail__hero is-' + escapeHtml(status) + '">';
html += '<span class="jio-order-detail__hero-icon" aria-hidden="true"><i class="fa fas ' + meta.icon + '"></i></span>';
html += '<div class="jio-order-detail__hero-copy">';
html += '<strong class="jio-order-detail__status">' + escapeHtml(order.status_label || "") + "</strong>";
html += '<p class="jio-order-detail__desc">' + escapeHtml(meta.desc) + "</p>";
if (status === "pending" && timeLeft > 0) {
html += '<span class="aksrt-order-detail__countdown" data-aksrt-order-countdown="' + timeLeft + '">剩余支付时间 ' + timeLeft + " 秒</span>";
html += '<span class="jio-order-detail__countdown" data-jio-order-countdown="' + timeLeft + '">剩余支付时间 ' + timeLeft + " 秒</span>";
}
html += "</div>";
html += '<div class="aksrt-order-detail__hero-amount"><strong>' + formatMoney(order) + "</strong>";
html += '<div class="jio-order-detail__hero-amount"><strong>' + formatMoney(order) + "</strong>";
html += "<span>" + escapeHtml(amountCaption(status)) + "</span></div></section>";
html += '<section class="aksrt-order-detail__group">';
html += '<h4 class="aksrt-order-detail__group-title">商品信息</h4>';
html += '<div class="aksrt-order-detail__product">';
html += '<section class="jio-order-detail__group">';
html += '<h4 class="jio-order-detail__group-title">商品信息</h4>';
html += '<div class="jio-order-detail__product">';
html += image
? '<img src="' + escapeHtml(image) + '" class="aksrt-order-detail__thumb" alt="">'
: '<span class="aksrt-order-detail__thumb aksrt-order-detail__thumb--empty" aria-hidden="true"><i class="fa fas fa-book"></i></span>';
html += '<div class="aksrt-order-detail__product-copy">';
html += '<strong class="aksrt-order-detail__product-title">' + escapeHtml(title) + "</strong>";
html += '<span class="aksrt-order-detail__product-meta">' + escapeHtml(order.product_type_label || "") + "</span>";
? '<img src="' + escapeHtml(image) + '" class="jio-order-detail__thumb" alt="">'
: '<span class="jio-order-detail__thumb jio-order-detail__thumb--empty" aria-hidden="true"><i class="fa fas fa-book"></i></span>';
html += '<div class="jio-order-detail__product-copy">';
html += '<strong class="jio-order-detail__product-title">' + escapeHtml(title) + "</strong>";
html += '<span class="jio-order-detail__product-meta">' + escapeHtml(order.product_type_label || "") + "</span>";
html += "</div></div></section>";
html += '<section class="aksrt-order-detail__group">';
html += '<h4 class="aksrt-order-detail__group-title">交易信息</h4>';
html += '<dl class="aksrt-order-detail__list">';
html += '<section class="jio-order-detail__group">';
html += '<h4 class="jio-order-detail__group-title">交易信息</h4>';
html += '<dl class="jio-order-detail__list">';
[
["订单号", order.order_number],
["支付方式", paymentMethodText(order)],
@@ -173,19 +173,19 @@
html += "</dl></section>";
if (reconciliation.state === "refresh_available") {
html += '<div class="aksrt-order-detail__refresh-state" role="status">';
html += '<div class="jio-order-detail__refresh-state" role="status">';
html += '<i class="fa fas fa-info-circle" aria-hidden="true"></i>';
html += "<p>支付状态可能仍在同步,请刷新后查看。</p>";
html += '<button class="btn-outline" type="button" data-aksrt-order-refresh="' + escapeHtml(order.order_number) + '">刷新支付状态</button>';
html += '<button class="btn-outline" type="button" data-jio-order-refresh="' + escapeHtml(order.order_number) + '">刷新支付状态</button>';
html += "</div>";
}
// 底部按钮:but-average modal-buts;「关闭」与「我知道了」
// 同款(but c-blue),平铺观感由 orders.css 的 footer 按钮规则统一呈现。
html += '<footer class="aksrt-order-detail__actions but-average modal-buts">';
html += '<button type="button" class="but c-blue" data-aksrt-modal-close>关闭</button>';
if (allowedActions.can_cancel) html += '<button type="button" class="but" data-aksrt-order-cancel="' + escapeHtml(order.order_number) + '">关闭订单</button>';
if (allowedActions.can_pay) html += '<button type="button" class="but c-blue" data-aksrt-order-pay="' + escapeHtml(order.order_number) + '" data-aksrt-order-method="' + escapeHtml(paymentMethod.value || "") + '">继续支付</button>';
html += '<footer class="jio-order-detail__actions but-average modal-buts">';
html += '<button type="button" class="but c-blue" data-jio-modal-close>关闭</button>';
if (allowedActions.can_cancel) html += '<button type="button" class="but" data-jio-order-cancel="' + escapeHtml(order.order_number) + '">关闭订单</button>';
if (allowedActions.can_pay) html += '<button type="button" class="but c-blue" data-jio-order-pay="' + escapeHtml(order.order_number) + '" data-jio-order-method="' + escapeHtml(paymentMethod.value || "") + '">继续支付</button>';
html += "</footer>";
session.content.innerHTML = html;
@@ -193,13 +193,13 @@
function detailOptions(state, orderNumber, refresh) {
var actionKey = refresh ? "refresh:" + orderNumber : "";
if (actionKey && !state.operationKeys[actionKey]) state.operationKeys[actionKey] = window.AksrtRequest.createIdempotencyKey();
if (actionKey && !state.operationKeys[actionKey]) state.operationKeys[actionKey] = window.JioRequest.createIdempotencyKey();
return {
url: orderPath(orderNumber, refresh ? "/refresh" : ""),
method: refresh ? "POST" : "GET",
headers: actionKey ? { "Idempotency-Key": state.operationKeys[actionKey] } : {},
kind: "orders",
className: "aksrt-order-detail-modal",
className: "jio-order-detail-modal",
responseType: "json",
cache: !refresh,
cacheKey: "orders:detail:" + orderNumber,
@@ -232,14 +232,14 @@
state.detailReplacement = false;
state.detailReplacementSession = null;
state.detailOrderNumber = orderNumber;
window.AksrtModalRuntime.openRemote(detailOptions(state, orderNumber, false));
window.JioModalRuntime.openRemote(detailOptions(state, orderNumber, false));
}
function refreshDetail(state, orderNumber) {
if (!orderNumber || !activeDetail(state, orderNumber)) return;
state.detailReplacement = true;
state.detailReplacementSession = state.detailSession;
var refreshPromise = window.AksrtModalRuntime.openRemote(detailOptions(state, orderNumber, true));
var refreshPromise = window.JioModalRuntime.openRemote(detailOptions(state, orderNumber, true));
refreshPromise.then(function () {
state.detailReplacement = false;
state.detailReplacementSession = null;
@@ -260,34 +260,34 @@
function actionHtml(order) {
var allowedActions = order.allowed_actions || {};
var html = '<button class="btn-outline" type="button" data-aksrt-order-detail="' + escapeHtml(order.order_number) + '">订单详情</button>';
if (allowedActions.can_cancel) html += '<button class="btn-ghost" type="button" data-aksrt-order-cancel="' + escapeHtml(order.order_number) + '">关闭订单</button>';
if (allowedActions.can_pay) html += '<button class="btn-primary" type="button" data-aksrt-order-pay="' + escapeHtml(order.order_number) + '" data-aksrt-order-method="' + escapeHtml((order.payment_method || {}).value || "") + '">继续支付</button>';
var html = '<button class="btn-outline" type="button" data-jio-order-detail="' + escapeHtml(order.order_number) + '">订单详情</button>';
if (allowedActions.can_cancel) html += '<button class="btn-ghost" type="button" data-jio-order-cancel="' + escapeHtml(order.order_number) + '">关闭订单</button>';
if (allowedActions.can_pay) html += '<button class="btn-primary" type="button" data-jio-order-pay="' + escapeHtml(order.order_number) + '" data-jio-order-method="' + escapeHtml((order.payment_method || {}).value || "") + '">继续支付</button>';
return html;
}
function cardHtml(order) {
var image = order.image
? '<img src="' + escapeHtml(order.image) + '" class="aksrt-orders-page__card-img" alt="">'
: '<div class="aksrt-orders-page__card-art" aria-hidden="true"><i class="fa fas fa-book"></i></div>';
? '<img src="' + escapeHtml(order.image) + '" class="jio-orders-page__card-img" alt="">'
: '<div class="jio-orders-page__card-art" aria-hidden="true"><i class="fa fas fa-book"></i></div>';
var countdown = Number(order.time_left || 0) > 0
? '<span class="aksrt-orders-page__countdown" data-aksrt-order-countdown="' + Number(order.time_left) + '"></span>'
? '<span class="jio-orders-page__countdown" data-jio-order-countdown="' + Number(order.time_left) + '"></span>'
: "";
return '<article class="aksrt-orders-page__card" data-aksrt-order-card="' + escapeHtml(order.order_number) + '" data-order-status="' + escapeHtml(order.status_group || "") + '">' +
'<div class="aksrt-orders-page__card-rail"><span>' + escapeHtml(order.product_type_label || "") + '</span><time>' + escapeHtml(order.created_at || "") + '</time><span class="aksrt-orders-page__card-status is-' + escapeHtml(order.status_group || "") + '">' + escapeHtml(order.status_label || "") + "</span></div>" +
'<div class="aksrt-orders-page__card-main">' + image + '<div class="aksrt-orders-page__card-copy"><h3>' + escapeHtml(order.product_name || "订单") + "</h3><p>订单号 " + escapeHtml(order.order_number) + "</p></div><div class=\"aksrt-orders-page__card-value\"><strong>" + formatMoney(order) + "</strong><span>实付</span></div></div>" +
'<footer class="aksrt-orders-page__card-actions">' + countdown + actionHtml(order) + "</footer></article>";
return '<article class="jio-orders-page__card" data-jio-order-card="' + escapeHtml(order.order_number) + '" data-order-status="' + escapeHtml(order.status_group || "") + '">' +
'<div class="jio-orders-page__card-rail"><span>' + escapeHtml(order.product_type_label || "") + '</span><time>' + escapeHtml(order.created_at || "") + '</time><span class="jio-orders-page__card-status is-' + escapeHtml(order.status_group || "") + '">' + escapeHtml(order.status_label || "") + "</span></div>" +
'<div class="jio-orders-page__card-main">' + image + '<div class="jio-orders-page__card-copy"><h3>' + escapeHtml(order.product_name || "订单") + "</h3><p>订单号 " + escapeHtml(order.order_number) + "</p></div><div class=\"jio-orders-page__card-value\"><strong>" + formatMoney(order) + "</strong><span>实付</span></div></div>" +
'<footer class="jio-orders-page__card-actions">' + countdown + actionHtml(order) + "</footer></article>";
}
function renderStats(state, stats) {
var root = state.root.querySelector("[data-aksrt-order-stats]");
var root = state.root.querySelector("[data-jio-order-stats]");
if (!root) return;
root.innerHTML = '<div class="aksrt-orders-page__stat"><span>全部</span><strong>' + Number(stats.total || 0) + "</strong></div>" +
'<div class="aksrt-orders-page__stat"><span>待支付</span><strong class="is-pending">' + Number(stats.pending || 0) + "</strong></div>" +
'<div class="aksrt-orders-page__stat"><span>已支付</span><strong class="is-paid">' + Number(stats.paid || 0) + "</strong></div>" +
'<div class="aksrt-orders-page__stat"><span>已关闭</span><strong>' + Number(stats.closed || 0) + "</strong></div>";
var pendingCount = state.root.querySelector('[data-aksrt-order-filter="status"][data-aksrt-order-filter-value="pending"] .aksrt-orders-page__filter-count');
root.innerHTML = '<div class="jio-orders-page__stat"><span>全部</span><strong>' + Number(stats.total || 0) + "</strong></div>" +
'<div class="jio-orders-page__stat"><span>待支付</span><strong class="is-pending">' + Number(stats.pending || 0) + "</strong></div>" +
'<div class="jio-orders-page__stat"><span>已支付</span><strong class="is-paid">' + Number(stats.paid || 0) + "</strong></div>" +
'<div class="jio-orders-page__stat"><span>已关闭</span><strong>' + Number(stats.closed || 0) + "</strong></div>";
var pendingCount = state.root.querySelector('[data-jio-order-filter="status"][data-jio-order-filter-value="pending"] .jio-orders-page__filter-count');
if (pendingCount) {
pendingCount.textContent = String(Number(stats.pending || 0));
pendingCount.hidden = Number(stats.pending || 0) < 1;
@@ -295,22 +295,22 @@
}
function renderPagination(state, view) {
var existing = state.root.querySelector(".aksrt-orders-page__pagination");
var existing = state.root.querySelector(".jio-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.className = "jio-orders-page__pagination";
root.setAttribute("aria-label", "订单分页");
for (var i = 1; i <= Number(view.total_pages); i++) {
var button = document.createElement("button");
button.type = "button";
button.className = "aksrt-orders-page__page-chip" + (i === Number(view.page) ? " is-active" : "");
button.setAttribute("data-aksrt-order-page", String(i));
button.className = "jio-orders-page__page-chip" + (i === Number(view.page) ? " is-active" : "");
button.setAttribute("data-jio-order-page", String(i));
if (i === Number(view.page)) button.setAttribute("aria-current", "page");
button.textContent = String(i);
root.appendChild(button);
}
var list = state.root.querySelector("[data-aksrt-order-list]");
var list = state.root.querySelector("[data-jio-order-list]");
if (list) list.after(root);
}
@@ -324,9 +324,9 @@
function updateCountdowns(state) {
countdownScopes(state).forEach(function (scope) {
if (!scope || !scope.querySelectorAll) return;
scope.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));
scope.querySelectorAll("[data-jio-order-countdown]").forEach(function (node) {
var value = Math.max(0, Number(node.getAttribute("data-jio-order-countdown") || 0) - 1);
node.setAttribute("data-jio-order-countdown", String(value));
node.textContent = value ? "剩余支付时间 " + value + " 秒" : "订单即将关闭";
});
});
@@ -339,16 +339,16 @@
state.query.orderNumber = String(viewQuery.order_number || "");
state.query.page = Math.max(1, Number(view.page || viewQuery.order_page || 1));
renderStats(state, view.stats || {});
var list = state.root.querySelector("[data-aksrt-order-list]");
var list = state.root.querySelector("[data-jio-order-list]");
if (!list) return;
var items = Array.isArray(view.items) ? view.items : [];
if (!items.length) {
list.innerHTML = '<i class="fa fas fa-file-alt" aria-hidden="true"></i><h3>没有匹配的订单</h3><p>换个条件试试,或清除当前筛选。</p>';
list.classList.remove("aksrt-orders-page__list");
list.classList.add("aksrt-orders-page__empty");
list.classList.remove("jio-orders-page__list");
list.classList.add("jio-orders-page__empty");
} else {
list.classList.remove("aksrt-orders-page__empty");
list.classList.add("aksrt-orders-page__list");
list.classList.remove("jio-orders-page__empty");
list.classList.add("jio-orders-page__list");
list.innerHTML = items.map(cardHtml).join("");
}
renderPagination(state, view);
@@ -357,14 +357,14 @@
}
function syncControls(state) {
state.root.querySelectorAll("[data-aksrt-order-filter]").forEach(function (button) {
var field = button.getAttribute("data-aksrt-order-filter");
state.root.querySelectorAll("[data-jio-order-filter]").forEach(function (button) {
var field = button.getAttribute("data-jio-order-filter");
var expected = field === "status" ? state.query.status : state.query.type;
var active = button.getAttribute("data-aksrt-order-filter-value") === expected;
var active = button.getAttribute("data-jio-order-filter-value") === expected;
button.classList.toggle("is-active", active);
button.setAttribute("aria-pressed", active ? "true" : "false");
});
var input = state.root.querySelector("#aksrt-order-number");
var input = state.root.querySelector("#jio-order-number");
if (input && input.value !== state.query.orderNumber) input.value = state.query.orderNumber;
}
@@ -395,12 +395,12 @@
}
function pollOrder(state, number) {
var coordinator = window.AksrtVipPurchaseCoordinator;
var coordinator = window.JioVipPurchaseCoordinator;
if (!coordinator || typeof coordinator.poll !== "function") return null;
return coordinator.poll(number, {
tags: ["orders"],
onTerminal: function (result) {
if (window.AksrtPayCashier) window.AksrtPayCashier.close();
if (window.JioPayCashier) window.JioPayCashier.close();
notyf(result.success ? "支付成功" : "支付未完成,请重试", result.success ? "success" : "danger");
invalidateOrder(number, null);
if (activeDetail(state, number)) openDetail(state, number);
@@ -412,11 +412,11 @@
}
function startPayment(state, button) {
var number = button.getAttribute("data-aksrt-order-pay") || "";
var method = button.getAttribute("data-aksrt-order-method") || "";
var number = button.getAttribute("data-jio-order-pay") || "";
var method = button.getAttribute("data-jio-order-method") || "";
if (!number || button.disabled) return;
var actionKey = "pay:" + number;
if (!state.operationKeys[actionKey]) state.operationKeys[actionKey] = window.AksrtRequest.createIdempotencyKey();
if (!state.operationKeys[actionKey]) state.operationKeys[actionKey] = window.JioRequest.createIdempotencyKey();
button.disabled = true;
request(orderPath(number, "/pay"), method ? { payment_method: method } : {}, "POST", state.operationKeys[actionKey]).then(function (result) {
delete state.operationKeys[actionKey];
@@ -424,8 +424,8 @@
invalidateOrder(number, data.order);
if (data.mode) {
button.disabled = false;
if (!window.AksrtPayCashier) return;
var handled = window.AksrtPayCashier.handle(data, {
if (!window.JioPayCashier) return;
var handled = window.JioPayCashier.handle(data, {
onClose: function () { if (poll) poll.abort(); }
});
var poll = handled === "qrcode" || handled === "jsapi"
@@ -442,16 +442,16 @@
}
function closeOrder(state, button) {
var number = button.getAttribute("data-aksrt-order-cancel") || "";
var number = button.getAttribute("data-jio-order-cancel") || "";
if (!number || button.disabled) return;
if (button.getAttribute("data-aksrt-confirm") !== "true") {
button.setAttribute("data-aksrt-confirm", "true");
if (button.getAttribute("data-jio-confirm") !== "true") {
button.setAttribute("data-jio-confirm", "true");
button.textContent = "确认关闭";
return;
}
button.disabled = true;
var actionKey = "cancel:" + number;
if (!state.operationKeys[actionKey]) state.operationKeys[actionKey] = window.AksrtRequest.createIdempotencyKey();
if (!state.operationKeys[actionKey]) state.operationKeys[actionKey] = window.JioRequest.createIdempotencyKey();
request(orderPath(number, "/cancel"), {}, "POST", state.operationKeys[actionKey]).then(function (result) {
delete state.operationKeys[actionKey];
var data = result.data || {};
@@ -460,14 +460,14 @@
if (activeDetail(state, number)) openDetail(state, number);
}).catch(function (error) {
button.disabled = false;
button.removeAttribute("data-aksrt-confirm");
button.removeAttribute("data-jio-confirm");
button.textContent = "关闭订单";
notyf(errorMessage(error, "网络错误,请稍后重试"), "danger");
});
}
function copyOrderValue(button) {
var value = button.getAttribute("data-aksrt-order-copy") || "";
var value = button.getAttribute("data-jio-order-copy") || "";
if (!value) return;
var icon = button.querySelector("i");
var settle = function (ok) {
@@ -523,47 +523,47 @@
};
state.onRootClick = function (event) {
var filterToggle = closest(event.target, "[data-aksrt-orders-filter-toggle]");
var filterToggle = closest(event.target, "[data-jio-orders-filter-toggle]");
if (filterToggle && root.contains(filterToggle)) {
var panel = root.querySelector("[data-aksrt-orders-filter-panel]");
var panel = root.querySelector("[data-jio-orders-filter-panel]");
var expanded = filterToggle.getAttribute("aria-expanded") === "true";
filterToggle.setAttribute("aria-expanded", String(!expanded));
if (panel) panel.hidden = expanded;
return;
}
var filter = closest(event.target, "[data-aksrt-order-filter]");
var filter = closest(event.target, "[data-jio-order-filter]");
if (filter && root.contains(filter)) {
event.preventDefault();
var field = filter.getAttribute("data-aksrt-order-filter");
var field = filter.getAttribute("data-jio-order-filter");
var patch = { page: 1 };
patch[field] = filter.getAttribute("data-aksrt-order-filter-value") || "";
patch[field] = filter.getAttribute("data-jio-order-filter-value") || "";
loadView(state, patch);
return;
}
var page = closest(event.target, "[data-aksrt-order-page]");
var page = closest(event.target, "[data-jio-order-page]");
if (page && root.contains(page)) {
event.preventDefault();
loadView(state, { page: Math.max(1, Number(page.getAttribute("data-aksrt-order-page") || 1)) });
loadView(state, { page: Math.max(1, Number(page.getAttribute("data-jio-order-page") || 1)) });
return;
}
var clear = closest(event.target, "[data-aksrt-orders-clear]");
var clear = closest(event.target, "[data-jio-orders-clear]");
if (clear && root.contains(clear)) {
event.preventDefault();
loadView(state, { status: "all", type: "", orderNumber: "", page: 1 });
return;
}
var detail = closest(event.target, "[data-aksrt-order-detail]");
if (detail && root.contains(detail)) { openDetail(state, detail.getAttribute("data-aksrt-order-detail")); return; }
var pay = closest(event.target, "[data-aksrt-order-pay]");
var detail = closest(event.target, "[data-jio-order-detail]");
if (detail && root.contains(detail)) { openDetail(state, detail.getAttribute("data-jio-order-detail")); return; }
var pay = closest(event.target, "[data-jio-order-pay]");
if (pay && root.contains(pay)) { event.preventDefault(); startPayment(state, pay); return; }
var cancel = closest(event.target, "[data-aksrt-order-cancel]");
var cancel = closest(event.target, "[data-jio-order-cancel]");
if (cancel && root.contains(cancel)) { event.preventDefault(); closeOrder(state, cancel); }
};
state.onRootSubmit = function (event) {
var form = closest(event.target, "[data-aksrt-orders-search]");
var form = closest(event.target, "[data-jio-orders-search]");
if (!form || !root.contains(form)) return;
event.preventDefault();
var input = form.querySelector("#aksrt-order-number");
var input = form.querySelector("#jio-order-number");
loadView(state, { orderNumber: input ? String(input.value || "").trim() : "", page: 1 });
};
state.onModalClose = function (event) {
@@ -576,26 +576,26 @@
state.detailReplacementSession = null;
};
state.onDocumentClick = function (event) {
if (!state.detailSession || window.AksrtModalRuntime.getActive() !== state.detailSession.shell) return;
var copy = closest(event.target, "[data-aksrt-order-copy]");
if (!state.detailSession || window.JioModalRuntime.getActive() !== state.detailSession.shell) return;
var copy = closest(event.target, "[data-jio-order-copy]");
if (copy) {
event.preventDefault();
copyOrderValue(copy);
return;
}
var refresh = closest(event.target, "[data-aksrt-order-refresh]");
var refresh = closest(event.target, "[data-jio-order-refresh]");
if (refresh) {
event.preventDefault();
refreshDetail(state, refresh.getAttribute("data-aksrt-order-refresh") || "");
refreshDetail(state, refresh.getAttribute("data-jio-order-refresh") || "");
return;
}
var pay = closest(event.target, "[data-aksrt-order-pay]");
var pay = closest(event.target, "[data-jio-order-pay]");
if (pay && !root.contains(pay)) {
event.preventDefault();
startPayment(state, pay);
return;
}
var cancel = closest(event.target, "[data-aksrt-order-cancel]");
var cancel = closest(event.target, "[data-jio-order-cancel]");
if (cancel && !root.contains(cancel)) {
event.preventDefault();
closeOrder(state, cancel);
@@ -604,7 +604,7 @@
root.addEventListener("click", state.onRootClick);
root.addEventListener("submit", state.onRootSubmit);
document.addEventListener("aksrt:modal:close", state.onModalClose);
document.addEventListener("jio:modal:close", state.onModalClose);
document.addEventListener("click", state.onDocumentClick);
state.countdownTimer = window.setInterval(function () { updateCountdowns(state); }, 1000);
instances.set(root, state);
@@ -614,8 +614,8 @@
function rootsIn(root) {
if (!root) return [];
var roots = [];
if (root.matches && root.matches("[data-aksrt-order-center]")) roots.push(root);
if (root.querySelectorAll) root.querySelectorAll("[data-aksrt-order-center]").forEach(function (item) { roots.push(item); });
if (root.matches && root.matches("[data-jio-order-center]")) roots.push(root);
if (root.querySelectorAll) root.querySelectorAll("[data-jio-order-center]").forEach(function (item) { roots.push(item); });
return roots;
}
@@ -627,10 +627,10 @@
rootsIn(root).forEach(function (item) {
var state = instances.get(item);
if (!state) return;
if (activeDetail(state, state.detailOrderNumber)) window.AksrtModalRuntime.close("replace");
if (activeDetail(state, state.detailOrderNumber)) window.JioModalRuntime.close("replace");
item.removeEventListener("click", state.onRootClick);
item.removeEventListener("submit", state.onRootSubmit);
document.removeEventListener("aksrt:modal:close", state.onModalClose);
document.removeEventListener("jio:modal:close", state.onModalClose);
document.removeEventListener("click", state.onDocumentClick);
window.clearInterval(state.countdownTimer);
instances.delete(item);
@@ -653,12 +653,12 @@
// 任意入口(下单待支付 / 支付 / 关闭 / 刷新状态)使订单缓存失效时,重载已挂载的订单列表。
var refreshTimer = null;
document.addEventListener("aksrt:cache:invalidated", function (event) {
document.addEventListener("jio:cache:invalidated", function (event) {
if (!liveStates.length || !touchesOrders(event.detail && event.detail.tags)) return;
window.clearTimeout(refreshTimer);
refreshTimer = window.setTimeout(function () { liveStates.forEach(refreshView); }, 300);
});
window.AKSRTOrderCenter = { init: init, destroy: destroy, refresh: refresh };
jQuery(document).off("auto_fun.aksrt-order-center").on("auto_fun.aksrt-order-center", function () { init(document); });
window.JioOrderCenter = { init: init, destroy: destroy, refresh: refresh };
jQuery(document).off("auto_fun.jio-order-center").on("auto_fun.jio-order-center", function () { init(document); });
}());