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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user