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
@@ -111,6 +111,7 @@ onMounted(() => {
<td class="prod-col">
<img :src="item.image || '/mock/product-1.svg'" :alt="pick(item.product_name, locale)" />
<span>{{ pick(item.product_name, locale) }}</span>
<span v-if="item.flash_sale_item_id" class="activity-tag">{{ t("marketing.flashTag") }}</span>
</td>
<td><PriceText :amount-minor="item.unit_price_minor" :currency="order.currency" /></td>
<td>{{ item.qty }}</td>
@@ -228,6 +229,13 @@ onMounted(() => {
font-size: 13px;
color: var(--mall-red);
}
.activity-tag {
margin-left: 6px;
padding: 1px 6px;
border: 1px solid var(--mall-red);
color: var(--mall-red);
font-size: 11px;
}
.order-total {
margin: 16px 0 0;
text-align: right;