feat(mall): live flash-sale page and activity price snapshots

The flash-sale page loads active sessions and their items through the shared
client with live sale price, remaining activity stock, sell-through, and a
countdown, and adds the SKU to the existing cart so checkout resolves the
authoritative price. Payment and order detail tag and render the snapshotted
activity unit price.

The flash-sale fixtures leave the page; the fixed-data adapter still serves the
domain as the rollback path.
This commit is contained in:
2026-09-18 12:53:26 +00:00
parent 393e7f7209
commit 2125ae437f
10 changed files with 283 additions and 60 deletions
+8
View File
@@ -99,6 +99,7 @@ onMounted(() => void loadOrders());
<div class="item-info">
<strong>{{ pick(item.product_name, locale) }}</strong>
<span class="muted">{{ item.sku_code }}</span>
<span v-if="item.flash_sale_item_id" class="activity-tag">{{ t("marketing.flashTag") }}</span>
</div>
<PriceText :amount-minor="item.unit_price_minor" :currency="order.currency" />
<span class="qty">× {{ item.qty }}</span>
@@ -233,6 +234,13 @@ onMounted(() => void loadOrders());
.discount-value {
color: var(--mall-red);
}
.activity-tag {
align-self: flex-start;
padding: 1px 6px;
border: 1px solid var(--mall-red);
color: var(--mall-red);
font-size: 11px;
}
.payment-panel {
margin-top: 16px;
padding: 0 18px 16px;