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) }}
+
+
+
+ handleStatusChange(row, val)"
+ />
+
+
@@ -71,10 +85,12 @@