feat: 增加礼品卡选择功能及相关逻辑

- 在 api/trade.js 中新增 selectGiftCard 函数以支持礼品卡选择
- 更新多个组件以集成礼品卡功能,包括购物车和订单页面
- 优化商品页面和订单详情展示,支持礼品卡抵扣信息
- 调整相关逻辑以确保礼品卡与其他促销活动的兼容性
This commit is contained in:
田香琪
2026-08-02 13:49:02 +08:00
parent a6ba2b3dbe
commit 94e846af6c
10 changed files with 246 additions and 62 deletions

View File

@@ -4,15 +4,16 @@
*
* 卡密商品(电子卡券 E_COUPON类型与订单工具。
*
* 与 VIRTUAL_GOODS / VIRTUAL 核销商品区分E_COUPON 走 BUY_NOW、支付后 COMPLETED + cardKeys
* 不支持加购、促销与买家售后。需求见 lilishop/docs/requirements/card-key-goods-v4.md
* 与 VIRTUAL_GOODS / VIRTUAL 核销商品区分E_COUPON 走 BUY_NOW/PINTUAN/POINTS/KANJIA
* 支付后 COMPLETED + cardKeys禁加购、免地址M-02 支持全量促销;不支持买家售后。
* 需求见 lilishop/docs/requirements/card-key-goods-v4.md
*/
export const E_COUPON_GOODS_TYPE = 'E_COUPON'
export const E_COUPON_ORDER_TYPE = 'E_COUPON'
export const VIRTUAL_GOODS_TYPE = 'VIRTUAL_GOODS'
export const VIRTUAL_ORDER_TYPE = 'VIRTUAL'
/** 单次购买数量上限O-09 默认min(poolStock, 999) */
/** 单次购买数量上限O-09 默认min(quantity, 999) */
export const E_COUPON_MAX_BUY_NUM = 999
export function isECoupon(goodsType) {
@@ -40,13 +41,9 @@ export function isNonPhysicalOrder(orderType) {
return isECouponOrder(orderType) || isVirtualOrder(orderType)
}
/** 可售库存E_COUPON 以卡池 poolStock 为准quantity 仅为镜像回退 */
/** 可售库存E_COUPON 读 SKU quantity由卡池 syncSkuStock 同步) */
export function getECouponStock(sku) {
if (!sku) return 0
const pool = sku.poolStock
if (pool !== undefined && pool !== null) {
return Number(pool) || 0
}
return Number(sku.quantity) || 0
}
@@ -57,7 +54,7 @@ export function getECouponMaxBuyNum(sku) {
}
/**
* 结算页识别当前交易是否含 E_COUPON SKU。
* 结算页识别当前交易是否含 E_COUPON SKU(用于免地址/免配送,不用于促销屏蔽)
* 须从 goodsSku.goodsType 判断,不能依赖 cartTypeEnum=VIRTUALE_COUPON 仍是 BUY_NOW
*/
export function hasECouponInCheckout(orderMessage) {