feat(coupon): 优惠券中心(领取)+ 我的券 + 下单核销/回退
- 新表 user_coupons(快照面额/门槛/类目/有效期)+ orders.user_coupon_id - 仓储:getCouponsWithClaimed/claimCoupon/getUserCoupons/resolveUserCoupon/consumeUserCoupon/releaseUserCouponByOrder - 接口:POST /api/marketing/coupons/:id/claim(同券仅一次、受总量限制)、GET /api/marketing/my-coupons(自动标记过期)、券中心带 claimed 标识 - 下单:createOrder 支持 userCouponId(校验归属/门槛/类目/有效期,服务端算抵扣,与订单同事务占用) - 回退:买家取消/大神拒单/超时退款/仲裁退款 均把券退回为 UNUSED - 小程序:新增 pages/user/coupons(券中心+我的券)、个人中心入口(可用张数)、下单改为选择"我的券"并传 userCouponId - 回归 94 套件/666 用例全绿;冒烟 9/9(领取/重复领取409/不存在404/下单抵扣100-10=90/取消回退)
这个提交包含在:
@@ -759,13 +759,17 @@ export async function getRechargeTiers() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取可用优惠券列表 (支持品类过滤)
|
||||
* 获取可用优惠券列表 (支持品类过滤;带 userId 时会返回 claimed 标识)
|
||||
*/
|
||||
export async function getMarketingCoupons(category) {
|
||||
try {
|
||||
const query = category ? `?category=${category}` : '';
|
||||
const uid = normalizeUserId();
|
||||
const qs = [];
|
||||
if (category) qs.push(`category=${category}`);
|
||||
if (uid) qs.push(`userId=${uid}`);
|
||||
const query = qs.length ? `?${qs.join('&')}` : '';
|
||||
const res = await http.get(`/marketing/coupons${query}`);
|
||||
if (Array.isArray(res) && res.length > 0) {
|
||||
if (Array.isArray(res)) {
|
||||
return res;
|
||||
}
|
||||
} catch (err) {
|
||||
@@ -774,6 +778,25 @@ export async function getMarketingCoupons(category) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 领取优惠券
|
||||
*/
|
||||
export async function claimCoupon(couponId, userId) {
|
||||
const uid = normalizeUserId(userId);
|
||||
const res = await http.post(`/marketing/coupons/${Number(couponId)}/claim`, { userId: uid });
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* 我的优惠券(status: UNUSED | USED | EXPIRED,缺省返回全部)
|
||||
*/
|
||||
export async function getMyCoupons(userId, status) {
|
||||
const uid = normalizeUserId(userId);
|
||||
const query = status ? `?userId=${uid}&status=${status}` : `?userId=${uid}`;
|
||||
const res = await http.get(`/marketing/my-coupons${query}`);
|
||||
return res || { list: [], usable: 0 };
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户