From b46950feebd4d464ad238c05b397d0c54b229158 Mon Sep 17 00:00:00 2001 From: gpu Date: Mon, 2 Feb 2026 16:06:24 +0800 Subject: [PATCH] 32 --- .../Controllers/CouponController.cs | 29 ++++++++++++++++--- .../Services/CouponService.cs | 17 +++++++++++ .../Services/Interfaces/ICouponService.cs | 8 +++++ .../admin-web/src/api/business/coupon.ts | 26 +++++++++++++++++ .../coupon/components/CouponTable.vue | 28 ++++++++++++++++++ .../user/components/GiftCouponDialog.vue | 28 +++++++----------- .../src/HoneyBox.Model/Entities/Coupon.cs | 2 +- 7 files changed, 116 insertions(+), 22 deletions(-) diff --git a/server/HoneyBox/src/HoneyBox.Admin.Business/Controllers/CouponController.cs b/server/HoneyBox/src/HoneyBox.Admin.Business/Controllers/CouponController.cs index 53832dea..e488c38e 100644 --- a/server/HoneyBox/src/HoneyBox.Admin.Business/Controllers/CouponController.cs +++ b/server/HoneyBox/src/HoneyBox.Admin.Business/Controllers/CouponController.cs @@ -23,7 +23,7 @@ public class CouponController : BusinessControllerBase /// /// 获取优惠券模板列表(简化版,用于下拉选择) /// - /// 状态筛选:1-启用 + /// 状态筛选:0-启用(数据库中 status=0 表示启用) /// 优惠券模板列表 [HttpGet("templates")] [BusinessPermission("coupon:list")] @@ -34,13 +34,13 @@ public class CouponController : BusinessControllerBase var request = new CouponListRequest { Page = 1, - PageSize = 100 // 获取所有启用的优惠券 + PageSize = 100 // 获取所有优惠券 }; var result = await _couponService.GetCouponsAsync(request); - // 如果指定了 status,过滤结果 + // 数据库中 status=0 表示启用 var list = status.HasValue ? result.List.Where(c => c.Status == status.Value).ToList() - : result.List; + : result.List.Where(c => c.Status == 0).ToList(); // 默认返回启用的 return Ok(list); } catch (BusinessException ex) @@ -155,6 +155,27 @@ public class CouponController : BusinessControllerBase } } + /// + /// 修改优惠券状态 + /// + /// 优惠券ID + /// 状态:0-启用 其他-禁用 + /// 操作结果 + [HttpPut("{id}/status")] + [BusinessPermission("coupon:edit")] + public async Task UpdateCouponStatus(int id, [FromQuery] int status) + { + try + { + var result = await _couponService.UpdateCouponStatusAsync(id, status); + return result ? Ok("状态更新成功") : Error(BusinessErrorCodes.InternalError, "状态更新失败"); + } + catch (BusinessException ex) + { + return Error(ex.Code, ex.Message); + } + } + /// /// 获取优惠券领取记录列表 /// diff --git a/server/HoneyBox/src/HoneyBox.Admin.Business/Services/CouponService.cs b/server/HoneyBox/src/HoneyBox.Admin.Business/Services/CouponService.cs index 174c26c5..605b7757 100644 --- a/server/HoneyBox/src/HoneyBox.Admin.Business/Services/CouponService.cs +++ b/server/HoneyBox/src/HoneyBox.Admin.Business/Services/CouponService.cs @@ -138,6 +138,23 @@ public class CouponService : ICouponService return result; } + /// + public async Task UpdateCouponStatusAsync(int id, int status) + { + var coupon = await _dbContext.Coupons.FirstOrDefaultAsync(c => c.Id == id); + if (coupon == null) + { + throw new BusinessException(BusinessErrorCodes.NotFound, "优惠券不存在"); + } + + coupon.Status = (byte)status; + var result = await _dbContext.SaveChangesAsync() > 0; + + _logger.LogInformation("更新优惠券状态成功: Id={Id}, Status={Status}", id, status); + + return result; + } + /// public async Task> GetCouponReceivesAsync(CouponReceiveListRequest request) { diff --git a/server/HoneyBox/src/HoneyBox.Admin.Business/Services/Interfaces/ICouponService.cs b/server/HoneyBox/src/HoneyBox.Admin.Business/Services/Interfaces/ICouponService.cs index 5ac95a7f..b8463c77 100644 --- a/server/HoneyBox/src/HoneyBox.Admin.Business/Services/Interfaces/ICouponService.cs +++ b/server/HoneyBox/src/HoneyBox.Admin.Business/Services/Interfaces/ICouponService.cs @@ -44,6 +44,14 @@ public interface ICouponService /// 是否成功 Task DeleteCouponAsync(int id); + /// + /// 修改优惠券状态 + /// + /// 优惠券ID + /// 状态:0-启用 其他-禁用 + /// 是否成功 + Task UpdateCouponStatusAsync(int id, int status); + /// /// 获取优惠券领取记录列表 /// diff --git a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/coupon.ts b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/coupon.ts index 82e9d532..dbafacb4 100644 --- a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/coupon.ts +++ b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/coupon.ts @@ -52,6 +52,18 @@ export const CouponReceiveStatusLabels: Record = { [CouponReceiveStatus.Expired]: '已过期', } +/** 优惠券状态枚举(模板状态) */ +export enum CouponStatus { + Enabled = 0, // 启用 + Disabled = 1 // 禁用 +} + +/** 优惠券状态标签映射 */ +export const CouponStatusLabels: Record = { + [CouponStatus.Enabled]: '启用', + [CouponStatus.Disabled]: '禁用', +} + // ==================== 优惠券相关类型定义 ==================== /** 优惠券列表查询参数 */ @@ -186,6 +198,20 @@ export function deleteCoupon(id: number): Promise> { }) } +/** + * 修改优惠券状态 + * @param id 优惠券ID + * @param status 状态:0-启用 其他-禁用 + * @returns 操作结果 + */ +export function updateCouponStatus(id: number, status: number): Promise> { + return request({ + url: `${COUPON_BASE_URL}/${id}/status`, + method: 'put', + params: { status } + }) +} + // ==================== 优惠券领取记录 API ==================== /** diff --git a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/business/coupon/components/CouponTable.vue b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/business/coupon/components/CouponTable.vue index f7a06d61..3213d79f 100644 --- a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/business/coupon/components/CouponTable.vue +++ b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/business/coupon/components/CouponTable.vue @@ -36,6 +36,20 @@ {{ row.useLimitName || getUseLimitName(row.useLimit) }} + + + +