diff --git a/server/HoneyBox/src/HoneyBox.Admin.Business/Models/Goods/PrizeModels.cs b/server/HoneyBox/src/HoneyBox.Admin.Business/Models/Goods/PrizeModels.cs index a14cca6b..5879ed5c 100644 --- a/server/HoneyBox/src/HoneyBox.Admin.Business/Models/Goods/PrizeModels.cs +++ b/server/HoneyBox/src/HoneyBox.Admin.Business/Models/Goods/PrizeModels.cs @@ -199,6 +199,16 @@ public class PrizeDto /// public int? ShangId { get; set; } + /// + /// 奖品等级名称 + /// + public string? ShangTitle { get; set; } + + /// + /// 奖品等级颜色 + /// + public string? ShangColor { get; set; } + /// /// 奖励数量 /// diff --git a/server/HoneyBox/src/HoneyBox.Admin.Business/Models/User/UserModels.cs b/server/HoneyBox/src/HoneyBox.Admin.Business/Models/User/UserModels.cs index 65f82972..06407faa 100644 --- a/server/HoneyBox/src/HoneyBox.Admin.Business/Models/User/UserModels.cs +++ b/server/HoneyBox/src/HoneyBox.Admin.Business/Models/User/UserModels.cs @@ -5,6 +5,11 @@ namespace HoneyBox.Admin.Business.Models.User; /// public class UserListRequest : PagedRequest { + /// + /// 关键字搜索(支持用户ID、手机号、昵称) + /// + public string? Keyword { get; set; } + /// /// 用户ID /// diff --git a/server/HoneyBox/src/HoneyBox.Admin.Business/Services/GoodsService.cs b/server/HoneyBox/src/HoneyBox.Admin.Business/Services/GoodsService.cs index 97e4e350..ac14baab 100644 --- a/server/HoneyBox/src/HoneyBox.Admin.Business/Services/GoodsService.cs +++ b/server/HoneyBox/src/HoneyBox.Admin.Business/Services/GoodsService.cs @@ -284,7 +284,29 @@ public class GoodsService : IGoodsService .ThenBy(gi => gi.Num) .ToListAsync(); - return prizes.Select(MapToPrizeDto).ToList(); + // 获取所有奖品等级ID + var shangIds = prizes + .Where(p => p.ShangId.HasValue) + .Select(p => p.ShangId!.Value) + .Distinct() + .ToList(); + + // 批量查询等级信息 + var prizeLevels = await _dbContext.PrizeLevels + .AsNoTracking() + .Where(pl => shangIds.Contains(pl.Id)) + .ToDictionaryAsync(pl => pl.Id, pl => new PrizeLevelInfo { Title = pl.Title, Color = pl.Color }); + + return prizes.Select(p => MapToPrizeDto(p, prizeLevels)).ToList(); + } + + /// + /// 奖品等级信息 + /// + private class PrizeLevelInfo + { + public string Title { get; set; } = string.Empty; + public string? Color { get; set; } } /// @@ -701,8 +723,17 @@ public class GoodsService : IGoodsService /// /// 映射奖品到DTO /// - private PrizeDto MapToPrizeDto(GoodsItem prize) + private PrizeDto MapToPrizeDto(GoodsItem prize, Dictionary? prizeLevels = null) { + string? shangTitle = null; + string? shangColor = null; + + if (prize.ShangId.HasValue && prizeLevels != null && prizeLevels.TryGetValue(prize.ShangId.Value, out var level)) + { + shangTitle = level.Title; + shangColor = level.Color; + } + return new PrizeDto { Id = prize.Id, @@ -720,6 +751,8 @@ public class GoodsService : IGoodsService GoodsType = prize.GoodsType, Sort = prize.Sort, ShangId = prize.ShangId, + ShangTitle = shangTitle, + ShangColor = shangColor, RewardNum = prize.RewardNum, Rank = prize.Rank, GiveMoney = prize.GiveMoney, diff --git a/server/HoneyBox/src/HoneyBox.Admin.Business/Services/UserBusinessService.cs b/server/HoneyBox/src/HoneyBox.Admin.Business/Services/UserBusinessService.cs index effc4d8c..293edc24 100644 --- a/server/HoneyBox/src/HoneyBox.Admin.Business/Services/UserBusinessService.cs +++ b/server/HoneyBox/src/HoneyBox.Admin.Business/Services/UserBusinessService.cs @@ -1076,6 +1076,26 @@ public class UserBusinessService : IUserBusinessService /// private IQueryable ApplyUserFilters(IQueryable query, UserListRequest request) { + // 关键字搜索(支持用户ID、手机号、昵称) + if (!string.IsNullOrWhiteSpace(request.Keyword)) + { + var keyword = request.Keyword.Trim(); + // 尝试解析为用户ID + if (int.TryParse(keyword, out var keywordUserId)) + { + query = query.Where(u => + u.Id == keywordUserId || + (u.Mobile != null && u.Mobile.Contains(keyword)) || + u.Nickname.Contains(keyword)); + } + else + { + query = query.Where(u => + (u.Mobile != null && u.Mobile.Contains(keyword)) || + u.Nickname.Contains(keyword)); + } + } + if (request.UserId.HasValue) { query = query.Where(u => u.Id == request.UserId.Value); diff --git a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/goods.ts b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/goods.ts index 7ecdab4b..3dad390f 100644 --- a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/goods.ts +++ b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/goods.ts @@ -241,6 +241,8 @@ export interface PrizeItem { goodsType: number sort: number shangId: number | null + shangTitle: string | null + shangColor: string | null rewardNum: number rank: number giveMoney: number diff --git a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/prizelevel.ts b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/prizelevel.ts index d2261ce7..b35b66ba 100644 --- a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/prizelevel.ts +++ b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/prizelevel.ts @@ -126,3 +126,16 @@ export function getPrizeLevelStats(): Promise> { + return request({ + url: `${PRIZE_LEVEL_BASE_URL}/options-by-type`, + method: 'get', + params: { goodsType, isChildPrize } + }) +} diff --git a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/user.ts b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/user.ts index 162f85c6..9ecb639d 100644 --- a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/user.ts +++ b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/api/business/user.ts @@ -4,6 +4,7 @@ import { request, type ApiResponse, type PagedResult } from '@/utils/request' /** 用户列表查询参数 */ export interface UserListQuery { + keyword?: string userId?: number mobile?: string nickname?: string diff --git a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/business/goods/components/DesignatedPrizeDialog.vue b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/business/goods/components/DesignatedPrizeDialog.vue index c36773b8..a7066b41 100644 --- a/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/business/goods/components/DesignatedPrizeDialog.vue +++ b/server/HoneyBox/src/HoneyBox.Admin/admin-web/src/views/business/goods/components/DesignatedPrizeDialog.vue @@ -144,12 +144,34 @@ {{ currentConfig?.goodsItemTitle || '-' }} - - + + + +
+ + + +
+ {{ user.nickname || '未知用户' }} + ID:{{ user.id }} | {{ user.mobile || '未绑定手机' }} +
+
+
+
@@ -182,7 +204,7 @@ +