feat(mall): claim and redeem shop coupons from the storefront

The product page loads a shop's claimable coupons through the shared client and
claims them in place; the buyer coupon list reads owned snapshots with their
claimed/redeemed/expired state. Checkout offers each shop order at most one
owned coupon and submits only the choice; the pay page and order detail render
the server-persisted discount and reduced total, never a client figure.

Coupon fixtures leave the pages; the fixed-data adapter still serves the coupon
domain as the rollback path. The demo seed creates two deterministic templates
and claims them for the demo customer.
This commit is contained in:
2026-09-18 12:12:51 +00:00
parent 23955434c6
commit 0eb94f2ba1
9 changed files with 249 additions and 16 deletions
+8
View File
@@ -83,6 +83,10 @@ export default {
threshold: "Minimum spend",
expiresAt: "Expires",
noCoupons: "No coupons yet.",
couponStatus: "Status",
couponClaimed: "Claimed",
couponRedeemed: "Used",
couponExpired: "Expired",
invoicesTitle: "My invoices",
invoiceNo: "Invoice no.",
invoiceOrderNo: "Order no.",
@@ -176,6 +180,10 @@ export default {
threshold: "使用门槛",
expiresAt: "有效期至",
noCoupons: "暂无优惠券。",
couponStatus: "状态",
couponClaimed: "未使用",
couponRedeemed: "已使用",
couponExpired: "已过期",
invoicesTitle: "我的发票",
invoiceNo: "发票号",
invoiceOrderNo: "订单号",