xStore.flashSales
Chương trình giảm giá theo khung giờ và sản phẩm thuộc chương trình.
Phương thức
| Phương thức | Cú pháp | Mô tả | Từ phiên bản |
|---|---|---|---|
list |
xStore.flashSales.list({ limit }): Promise<CursorPaginatedResponse<FlashSale>> |
Chương trình ĐANG chạy, so theo đồng hồ máy chủ. Rỗng = không có khung giờ nào đang mở. | 2.1 |
get |
xStore.flashSales.get(saleId): Promise<FlashSale> |
Chi tiết một chương trình, kèm starts_at / ends_at. | 2.1 |
products |
xStore.flashSales.products(saleId, { limit }): Promise<CursorPaginatedResponse<FlashSaleProduct>> |
Sản phẩm trong chương trình. Mỗi dòng là THẺ SẢN PHẨM đầy đủ cộng thêm deal_price, ends_at, remaining. | 2.1 |
Ví dụ đầy đủ
<script>
// Danh sách chỉ trả về chương trình ĐANG chạy theo đồng hồ máy chủ.
// Rỗng nghĩa là không có khung giờ nào đang mở, KHÔNG phải chưa cấu hình.
async function renderFlash() {
const ct = await xStore.flashSales.list({ limit: 5 });
if (ct.items.length === 0) return;
const dot = ct.items[0];
const sp = await xStore.flashSales.products(dot.id, { limit: 12 });
// Mỗi dòng là một THẺ SẢN PHẨM đầy đủ, có thêm deal_price / remaining.
document.getElementById('flash').innerHTML = sp.items.map((p) => `
<a class="product-card" href="${p.url ?? '#'}">
<img src="${p.cover_image_url ?? ''}" alt="${p.title}" loading="lazy">
<span>${p.title}</span>
<span>${xStore.utils.formatCurrency(p.deal_price ?? p.price ?? 0)}</span>
<small>Còn ${p.remaining ?? 0} suất</small>
</a>
`).join('');
}
renderFlash();
</script>
Thư viện gọi tới /api/... trên chính tên miền cửa hàng, nên không cần khai báo địa chỉ máy chủ ở bất kỳ đâu.
Xem thêm Sự kiện để giao diện tự cập nhật sau mỗi thao tác.