WooCommerce/Public/js/main.js
feibisi b271ca35fe feat: WooCommerce 1.2.0 — WC REST v3, email customer lookup, HPOS links
- Prefer wc/v3 with v2 fallback; Basic Auth for consumer keys
- Resolve customer by email then list orders
- Fix sidebar template order admin link ({link})
- Sidebar Webhook HTML endpoint with shared secret
- Settings: wc_sidebar_secret
2026-07-12 10:19:21 +08:00

129 lines
3.3 KiB
JavaScript

function loadWooCommerceOrders(customer_email, domain, locale) {
$(document).ready(function () {
var email_address_id = String(customer_email || '').replace(/[^A-Za-z0-9\-]/g, '');
var cacheKey = 'wc_customer_v2_' + email_address_id;
var order_data = getWithExpiry(cacheKey);
var $order_list = $('.woocommerce-order-list');
var $order_list_reload = $('.woocommerce-order-list-reload');
var $not_found = '<li class="not-found">' + ($order_list.data('not-found') || 'Orders not found') + '</li>';
var $orders_box = $('.woocommerce-orders');
if (!order_data) {
get_orders();
} else {
display_orders(order_data);
}
$order_list_reload.off('click.wc').on('click.wc', function (e) {
e.preventDefault();
$orders_box.addClass('loading');
localStorage.removeItem(cacheKey);
get_orders();
return false;
});
function get_orders() {
fsAjax(
{
action: 'wc_check_orders',
customer_email: customer_email,
},
laroute.route('woocommerce.ajax'),
function (response) {
if (!response || response.status !== 'success') {
$orders_box.removeClass('loading');
$order_list.html(
'<li class="not-found">' +
(response && response.msg ? response.msg : 'Load failed') +
'</li>'
);
return;
}
// Cache 30 min
setWithExpiry(cacheKey, response.data, 30 * 60);
display_orders(response.data);
},
true
);
}
function display_orders(order_data) {
$order_list.html('');
$orders_box.removeClass('loading');
if (!Array.isArray(order_data) || order_data.length < 1) {
$order_list.append($not_found);
return;
}
order_data.forEach(function (order) {
var template = $('#wc-order-item-template').html();
var currency = order.currency || 'CNY';
var total;
try {
total = new Intl.NumberFormat(locale || 'zh-CN', {
style: 'currency',
currency: currency,
}).format(order.total);
} catch (e) {
total = order.total + ' ' + currency;
}
var edit_link =
order.admin_url ||
domain + 'wp-admin/admin.php?page=wc-orders&action=edit&id=' + order.id;
var datetime = '';
try {
var date = new Date(order.date_created);
if (!isNaN(date.getTime())) {
datetime = Intl.DateTimeFormat(locale || 'zh-CN').format(date);
} else {
datetime = String(order.date_created || '').slice(0, 10);
}
} catch (e2) {
datetime = String(order.date_created || '').slice(0, 10);
}
var data = {
number: order.number || order.id,
total: total,
date: datetime,
status: order.status || '',
link: edit_link,
payment: order.payment_method_title || '',
};
Object.keys(data).forEach(function (key) {
template = template.split('{' + key + '}').join(data[key]);
});
$order_list.append(template);
});
}
function setWithExpiry(key, value, ttl) {
var now = new Date();
localStorage.setItem(
key,
JSON.stringify({
value: value,
expiry: now.getTime() + ttl * 1000,
})
);
}
function getWithExpiry(key) {
var itemStr = localStorage.getItem(key);
if (!itemStr) return null;
try {
var item = JSON.parse(itemStr);
if (new Date().getTime() > item.expiry) {
localStorage.removeItem(key);
return null;
}
return item.value;
} catch (e) {
return null;
}
}
});
}