diff --git a/Service/Application.Domain.Entity/logdb/db/game_charm_log.cs b/Service/Application.Domain.Entity/logdb/db/game_charm_log.cs new file mode 100644 index 0000000..87a8c58 --- /dev/null +++ b/Service/Application.Domain.Entity/logdb/db/game_charm_log.cs @@ -0,0 +1,69 @@ +using SqlSugar; +using System; + +namespace Application.Domain.Entity +{ + [Tenant("Kg.SeaTime.Log")] + public class game_charm_log + { + /// + /// logId + /// + [SugarColumn(IsPrimaryKey = true, Length = 50)] + public string logId { get; set; } + + /// + /// userId + /// + [SugarColumn(Length = 50, IsNullable = true)] + public string? userId { get; set; } + + /// + /// fromId + /// + [SugarColumn(Length = 50, IsNullable = true)] + public string? fromId { get; set; } + + /// + /// goodsId + /// + [SugarColumn(IsNullable = true)] + public Int32? goodsId { get; set; } + + /// + /// name + /// + [SugarColumn(Length = 50, IsNullable = true)] + public string? name { get; set; } + + /// + /// img + /// + [SugarColumn(Length = 50, IsNullable = true)] + public string? img { get; set; } + + /// + /// count + /// + [SugarColumn(IsNullable = true)] + public int? count { get; set; } + + /// + /// charm + /// + [SugarColumn(IsNullable = true)] + public int? charm { get; set; } + + /// + /// sumCharm + /// + [SugarColumn(IsNullable = true)] + public int? sumCharm { get; set; } + + /// + /// addTime + /// + [SugarColumn(IsNullable = true)] + public DateTime? addTime { get; set; } + } +} \ No newline at end of file diff --git a/Service/Application.Domain.Entity/view/GiftLogView.cs b/Service/Application.Domain.Entity/view/GiftLogView.cs new file mode 100644 index 0000000..b307e73 --- /dev/null +++ b/Service/Application.Domain.Entity/view/GiftLogView.cs @@ -0,0 +1,11 @@ +namespace Application.Domain.Entity; + +public class GiftLogView +{ + public UserModel user { get; set; } + public UserModel from { get; set; } + public string name { get; set; } + public string img { get; set; } + public int count { get; set; } + public DateTime? time { get; set; } +} \ No newline at end of file diff --git a/Service/Application.Domain/Enum/GoodsEnum.cs b/Service/Application.Domain/Enum/GoodsEnum.cs index 789c566..189eb13 100644 --- a/Service/Application.Domain/Enum/GoodsEnum.cs +++ b/Service/Application.Domain/Enum/GoodsEnum.cs @@ -16,11 +16,12 @@ public static class GoodsEnum Pack,//宝箱 ChoicePack,//选择宝箱 Weight,//负重 + Gift,//礼物道具 Exp,//经验 State,//状态物品 Ship,//船只 Practise,//修炼道具 - Durability,//负重道具 + Durability,//耐久道具 AddExp,//扣除经验获得道具 GetExp//使用后获得经验 } diff --git a/Service/Application.Domain/Services/Interface/User/IUnitUserRelationService.cs b/Service/Application.Domain/Services/Interface/User/IUnitUserRelationService.cs index da99832..d9fd51a 100644 --- a/Service/Application.Domain/Services/Interface/User/IUnitUserRelationService.cs +++ b/Service/Application.Domain/Services/Interface/User/IUnitUserRelationService.cs @@ -20,4 +20,14 @@ public interface IUnitUserRelationService Task DeleteUserEnemy(string userId, string eId); #endregion + + #region 魅力相关 + + Task GetUserNewGift(string userId); + Task> GetUserGiftLog(string userId, int page, int limit, RefAsync total); + + Task AddCharm(string userId, string fromId, int goodsId, string name, string img, int charm, + int count); + + #endregion } \ No newline at end of file diff --git a/Service/Application.Domain/Services/Service/Business/RankService.cs b/Service/Application.Domain/Services/Service/Business/RankService.cs index 5228225..d689289 100644 --- a/Service/Application.Domain/Services/Service/Business/RankService.cs +++ b/Service/Application.Domain/Services/Service/Business/RankService.cs @@ -168,6 +168,10 @@ public class RankService(ISqlSugarClient DbClient, IRedisCache redis) : IRankSer { temp.sign = item.renown.ToString(); } + else if(type==11) + { + temp.sign = item.charm.ToString(); + } temp.par = ""; result.Add(temp); } diff --git a/Service/Application.Domain/Services/Service/User/UnitUserRelationService.cs b/Service/Application.Domain/Services/Service/User/UnitUserRelationService.cs index 8f55546..68b9da3 100644 --- a/Service/Application.Domain/Services/Service/User/UnitUserRelationService.cs +++ b/Service/Application.Domain/Services/Service/User/UnitUserRelationService.cs @@ -38,10 +38,10 @@ public class UnitUserRelationService(ISqlSugarClient DbClient, IRedisCache redis public async Task CheckIsFriend(string userId, string toId) { - string frId = StringAssist.GetSortKey(userId, toId); - var db = DbClient.AsTenant().GetConnectionWithAttr(); - return await db.Queryable().Where(it => it.frId == frId).AnyAsync(); + var data = await GetUserFriendInfo(userId, toId); + return data != null; } + public async Task AddFriend(string userId, string toId) { @@ -62,6 +62,21 @@ public class UnitUserRelationService(ISqlSugarClient DbClient, IRedisCache redis return await db.Deleteable().Where(it => it.frId == frId).ExecuteCommandAsync() > 0; } + private async Task GetUserFriendInfo(string userId, string toId) + { + string frId = StringAssist.GetSortKey(userId, toId); + var db = DbClient.AsTenant().GetConnectionWithAttr(); + return await db.Queryable().Where(it => it.frId == frId).SingleAsync(); + } + + private async Task UpdateFriendNear(string frId, int op, int count) + { + int opCount = op == 1 ? count : 0 - count; + var db = DbClient.AsTenant().GetConnectionWithAttr(); + return await db.Updateable().SetColumns(it => it.near == it.near + opCount) + .Where(it => it.frId == frId).ExecuteCommandAsync() > 0; + } + #endregion #region 仇人 @@ -120,4 +135,91 @@ public class UnitUserRelationService(ISqlSugarClient DbClient, IRedisCache redis } #endregion + + #region 赠送礼物 + + public async Task GetUserNewGift(string userId) + { + string key = string.Format(UserCache.BaseCacheKey, "UserNewGift"); + if (await redis.HExistsHashAsync(key, userId)) + { + return await redis.GetHashAsync(key, userId); + } + + var db = DbClient.AsTenant().GetConnectionWithAttr(); + var data = await db.Queryable().Where(it => it.userId == userId) + .OrderByDescending(it => it.addTime).FirstAsync(); + if (data == null) + { + data = new game_charm_log(); + } + + await redis.AddHashAsync(key, userId, data); + return data; + } + + public async Task> GetUserGiftLog(string userId, int page, int limit, RefAsync total) + { + var db = DbClient.AsTenant().GetConnectionWithAttr(); + var data = await db.Queryable().Where(it => it.userId == userId) + .OrderByDescending(it => it.addTime).ToPageListAsync(page, limit, total); + List result = new List(); + foreach (var item in data) + { + GiftLogView temp = new GiftLogView() + { + user = await UserModelTool.GetUserView(item.userId), + from = await UserModelTool.GetUserView(item.fromId), + name = item.name, + img = item.img, + count = (int)item.count, + time = item.addTime + }; + result.Add(temp); + } + + return result; + } + + public async Task AddCharm(string userId, string fromId, int goodsId, string name, string img, int charm, + int count) + { + int sumCharm = count * charm; + var accService = App.GetService(); + bool result = await accService.UpdateUserData(userId, 1, nameof(AccEnum.AccType.charm), sumCharm, "赠送礼物获得"); + if (result) + { + game_charm_log log = new game_charm_log() + { + logId = StringAssist.NewGuid, + userId = userId, + fromId = fromId, + goodsId = goodsId, + name = name, + img = img, + count = count, + charm = charm, + sumCharm = sumCharm, + addTime = DateTime.Now + }; + var db = DbClient.AsTenant().GetConnectionWithAttr(); + if (await db.Insertable(log).ExecuteCommandAsync() > 0) + { + string key = string.Format(UserCache.BaseCacheKey, "UserNewGift"); + await redis.AddHashAsync(key, userId,log); + + //判断关系是否为好友 + var frInfo = await GetUserFriendInfo(userId, fromId); + if (frInfo != null) + { + //添加亲密度 + await UpdateFriendNear(frInfo.frId, 1, sumCharm); + } + } + + } + return result; + } + + #endregion } \ No newline at end of file diff --git a/Service/Application.Domain/Tool/Base/GameBus.cs b/Service/Application.Domain/Tool/Base/GameBus.cs index 80264ac..f24f49d 100644 --- a/Service/Application.Domain/Tool/Base/GameBus.cs +++ b/Service/Application.Domain/Tool/Base/GameBus.cs @@ -69,6 +69,11 @@ public static class GameBus var mapService = App.GetService(); isok = await mapService.AddUserCityMap(userId, Convert.ToInt32(parameter)); } + else if (goodsType.Equals(nameof(GameEnum.PropCode.skill))) + { + var skillService = App.GetService(); + isok = await skillService.UpdateUserSkill(userId, Convert.ToInt32(parameter)); + } return isok; } diff --git a/Service/Application.Domain/Tool/Base/UbbTool.cs b/Service/Application.Domain/Tool/Base/UbbTool.cs index 9bf7d20..bfe565d 100644 --- a/Service/Application.Domain/Tool/Base/UbbTool.cs +++ b/Service/Application.Domain/Tool/Base/UbbTool.cs @@ -6,4 +6,22 @@ public class UbbTool { return $"{name}"; } + private static string _GiftUbb = "{1}"; + public static string GiftUbb(string id, string name) + { + return string.Format(_GiftUbb, id, name); + } + public static string GiveGiftStr(int count) + { + string result = string.Empty; + result += GiftUbb("images/gift/x.png", "×"); + char[] num = count.ToString().ToCharArray(); + + foreach (char s in num) + { + result += GiftUbb(string.Format("images/gift/num_{0}.png", s.ToString()), s.ToString()); + } + + return result; + } } \ No newline at end of file diff --git a/Service/Application.Web/Controllers/User/GiveController.cs b/Service/Application.Web/Controllers/User/GiveController.cs new file mode 100644 index 0000000..a5383b3 --- /dev/null +++ b/Service/Application.Web/Controllers/User/GiveController.cs @@ -0,0 +1,162 @@ +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; + +namespace Application.Web.Controllers.User; + +/// +/// 赠送接口 +/// +[ApiExplorerSettings(GroupName = "User")] +[Route("User/[controller]/[action]")] +[ApiController] +[Authorize] +public class GiveController : ControllerBase +{ + private readonly IGameGoodsService _goodsService; + private readonly IGameEquService _equService; + private readonly IUnitUserWeight _weightService; + private readonly IUnitUserRelationService _relationService; + private readonly IUnitUserService _userService; + private readonly IGameChatService _chatService; + private readonly IMessageService _messageService; + + public GiveController(IGameGoodsService goodsService, IGameEquService equService, IUnitUserWeight weightService, + IUnitUserRelationService relationService, IUnitUserService userService, IGameChatService chatService, + IMessageService messageService) + { + _goodsService = goodsService; + _equService = equService; + _weightService = weightService; + _relationService = relationService; + _userService = userService; + _chatService = chatService; + _messageService = messageService; + } + + /// + /// 获取赠送礼物物品 + /// + /// + /// + [HttpGet] + public async Task GetUserGiftGoods(string no) + { + var fromInfo = await _userService.GetUserInfoByUserNo(no); + if (fromInfo == null) + { + return PoAction.Message("玩家不存在!"); + } + + string userId = StateHelper.userId; + int areaId = StateHelper.areaId; + if (areaId != fromInfo.areaId) + { + return PoAction.Message("玩家不存在!"); + } + + var data = await _goodsService.GetUserGoodsData(userId, nameof(GoodsEnum.Code.Gift)); + return PoAction.Ok(new + { + userNo = fromInfo.userNo, + nick = fromInfo.nick, + data = data + }); + } + + /// + /// 赠送礼物 + /// + /// + /// + /// + /// + [HttpGet] + public async Task ToGift(string no, int goodsId, int count) + { + var fromInfo = await _userService.GetUserInfoByUserNo(no); + if (fromInfo == null) + { + return PoAction.Message("玩家不存在!"); + } + + string userId = StateHelper.userId; + int areaId = StateHelper.areaId; + if (areaId != fromInfo.areaId) + { + return PoAction.Message("玩家不存在!"); + } + + count = count < 1 ? 1 : count; + var goodsInfo = await _goodsService.GetUserGoodsInfo(userId, goodsId); + if (goodsInfo.code != nameof(GoodsEnum.Code.Gift)) + { + return PoAction.Message("该道具无法赠送!"); + } + + if (goodsInfo.count < count) + { + return PoAction.Message("您礼物数量不足!"); + } + + if (await _goodsService.UpdateUserGoods(userId, 0, goodsId, count, "赠送礼物")) + { + var goods = await _goodsService.GetGoodsInfo(goodsId); + dynamic giftConfig = JsonConvert.DeserializeObject(goods.content); + int charm = Convert.ToInt32(giftConfig.charm); + int isBroad = Convert.ToInt32(giftConfig.isBroad); + int broadCount = Convert.ToInt32(giftConfig.broadCount); + string gifUbb = UbbTool.GiftUbb(goods.img, goods.goodsName); + + if (await _relationService.AddCharm(fromInfo.userId, userId, goodsId, goods.goodsName, goods.img, charm, + count)) + { + var myInfo = await _userService.GetUserInfoByUserId(userId); + string noticeMsg = $"[{UbbTool.HomeUbb(myInfo.userNo, myInfo.nick)}]赠送您{gifUbb}×{count}!"; + await _chatService.SendChat(fromInfo.userId, nameof(GameChatEnum.Code.Notice), noticeMsg); + + if (isBroad == 1 && count >= broadCount) + { + //发送系统广布 + string tip = + $"赠送给[{UbbTool.HomeUbb(fromInfo.userNo, fromInfo.nick)}] {gifUbb} {UbbTool.GiveGiftStr(count)}"; + await _messageService.SendBroadcast(userId, nameof(MessageEnum.BroadcastCode.Gift), tip); + } + + return PoAction.Ok(true); + } + else + { + return PoAction.Message("赠送失败,请稍后尝试!"); + } + } + else + { + return PoAction.Message("赠送失败,请稍后尝试!"); + } + } + + /// + /// 获取礼物记录 + /// + /// + /// + /// + [HttpGet] + public async Task GetGiftLog(string? no, int page) + { + string userId = StateHelper.userId; + if (!string.IsNullOrEmpty(no)) + { + var noInfo = await _userService.GetUserInfoByUserNo(no); + if (noInfo != null) + { + userId = noInfo.userId; + } + } + + RefAsync total = 0; + var data = await _relationService.GetUserGiftLog(userId, page, 10, total); + return PoAction.Ok(new { data, total = total.Value }); + } + +} \ No newline at end of file diff --git a/Service/Application.Web/Controllers/User/UserController.cs b/Service/Application.Web/Controllers/User/UserController.cs index 1549a07..d73b62f 100644 --- a/Service/Application.Web/Controllers/User/UserController.cs +++ b/Service/Application.Web/Controllers/User/UserController.cs @@ -55,11 +55,18 @@ public class UserController : ControllerBase var vigourInfo = await _attrService.GetUserVigourInfo(userId); var accInfo = await _accService.GetUserAccInfo(userId); var userDataInfo = await _accService.GetUserDataInfo(userId); - object acc = new { accInfo.gold, accInfo.cowry, userDataInfo.teach, userDataInfo.renown,userDataInfo.enemy }; + object acc = new { accInfo.gold, accInfo.cowry, userDataInfo.teach, userDataInfo.renown, userDataInfo.enemy }; var buff = await _attrService.GetUserStateData(userId, "ALL"); var stock = await _attrService.GetUserStock(userId); - object result = new { user, attr = attrInfo, exp, vigourInfo.vitality, acc, buff, stock }; + string gift = string.Empty; + var giftData = await _relationService.GetUserNewGift(userId); + if (!string.IsNullOrEmpty(giftData.logId)) + { + gift = $"收到{giftData.name}"; + } + + object result = new { user, attr = attrInfo, exp, vigourInfo.vitality, acc, buff, stock,gift }; return PoAction.Ok(result); } @@ -176,7 +183,7 @@ public class UserController : ControllerBase object user = new { userInfo.userNo, userInfo.nick, userInfo.sex, userInfo.sign }; var attrInfo = await _attrService.GetUserAttrModel(userInfo.userId); //基础属性 var accInfo = await _accService.GetUserDataInfo(userInfo.userId); - object acc = new { accInfo.teach,accInfo.enemy }; + object acc = new { accInfo.teach, accInfo.enemy }; var online = await _mapService.GetUserOnMap(userInfo.userId); int isOnline = online.upTime > @@ -192,11 +199,17 @@ public class UserController : ControllerBase var equ = await _equService.GetUserOnEqu(userInfo.userId); var suit = await _equService.GetUserEquSuit(userInfo.userId); + string gift = string.Empty; + var giftData = await _relationService.GetUserNewGift(userInfo.userId); + if (!string.IsNullOrEmpty(giftData.logId)) + { + gift = $"收到{giftData.name}"; + } var isPk = await UserStateTool.CheckPkState(userId, userInfo.userId, isEnemy, isAtArea); object result = new { - user, attr = new { attrInfo.lev }, acc, isOnline, onMapName, isFriend, isEnemy, team, equ, suit,isPk + user, attr = new { attrInfo.lev }, acc, isOnline, onMapName, isFriend, isEnemy, team, equ, suit, gift, isPk }; return PoAction.Ok(result); } diff --git a/Web/public/images/gift/num_0.png b/Web/public/images/gift/num_0.png new file mode 100644 index 0000000..77fb7df Binary files /dev/null and b/Web/public/images/gift/num_0.png differ diff --git a/Web/public/images/gift/num_1.png b/Web/public/images/gift/num_1.png new file mode 100644 index 0000000..5676f9c Binary files /dev/null and b/Web/public/images/gift/num_1.png differ diff --git a/Web/public/images/gift/num_2.png b/Web/public/images/gift/num_2.png new file mode 100644 index 0000000..cc134a9 Binary files /dev/null and b/Web/public/images/gift/num_2.png differ diff --git a/Web/public/images/gift/num_3.png b/Web/public/images/gift/num_3.png new file mode 100644 index 0000000..fa5bf24 Binary files /dev/null and b/Web/public/images/gift/num_3.png differ diff --git a/Web/public/images/gift/num_4.png b/Web/public/images/gift/num_4.png new file mode 100644 index 0000000..d63f6b0 Binary files /dev/null and b/Web/public/images/gift/num_4.png differ diff --git a/Web/public/images/gift/num_5.png b/Web/public/images/gift/num_5.png new file mode 100644 index 0000000..2dfaab2 Binary files /dev/null and b/Web/public/images/gift/num_5.png differ diff --git a/Web/public/images/gift/num_6.png b/Web/public/images/gift/num_6.png new file mode 100644 index 0000000..88695f7 Binary files /dev/null and b/Web/public/images/gift/num_6.png differ diff --git a/Web/public/images/gift/num_7.png b/Web/public/images/gift/num_7.png new file mode 100644 index 0000000..7526bf8 Binary files /dev/null and b/Web/public/images/gift/num_7.png differ diff --git a/Web/public/images/gift/num_8.png b/Web/public/images/gift/num_8.png new file mode 100644 index 0000000..32717e0 Binary files /dev/null and b/Web/public/images/gift/num_8.png differ diff --git a/Web/public/images/gift/num_9.png b/Web/public/images/gift/num_9.png new file mode 100644 index 0000000..573bc9e Binary files /dev/null and b/Web/public/images/gift/num_9.png differ diff --git a/Web/public/images/gift/x.png b/Web/public/images/gift/x.png new file mode 100644 index 0000000..99909e7 Binary files /dev/null and b/Web/public/images/gift/x.png differ diff --git a/Web/src/config/BaseConfig.ts b/Web/src/config/BaseConfig.ts index a0b3de6..300e453 100644 --- a/Web/src/config/BaseConfig.ts +++ b/Web/src/config/BaseConfig.ts @@ -2,8 +2,8 @@ 统一配置中心 */ export class BaseConfig { - // public static BaseUrl: string = 'https://localhost:7198' - // public static BaseMediaUrl: string = 'https://localhost:7198/' - public static BaseUrl:string="http://kx.iyba.cn:5291"; - public static BaseMediaUrl:string="http://kx.iyba.cn:5291"; + public static BaseUrl: string = 'https://localhost:7198' + public static BaseMediaUrl: string = 'https://localhost:7198/' + // public static BaseUrl:string="http://v3.pccsh.com"; + // public static BaseMediaUrl:string="http://v3.pccsh.com"; } diff --git a/Web/src/pages/user/gift/give.vue b/Web/src/pages/user/gift/give.vue index 41a40c8..1f76ba6 100644 --- a/Web/src/pages/user/gift/give.vue +++ b/Web/src/pages/user/gift/give.vue @@ -1 +1,82 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/Web/src/pages/user/gift/index.vue b/Web/src/pages/user/gift/index.vue index c93c264..42e54dc 100644 --- a/Web/src/pages/user/gift/index.vue +++ b/Web/src/pages/user/gift/index.vue @@ -1,3 +1,54 @@ \ No newline at end of file +
+ 礼物记录 +
+
+
+ {{ PageExtend.GetPageIndex(currentPage, 10, index + 1) }}. + 收到[]赠送 + ×{{item.count}} +
+ 暂无. +
+
+ +
+ + + \ No newline at end of file diff --git a/Web/src/pages/user/index.vue b/Web/src/pages/user/index.vue index 406d6bb..6107d31 100644 --- a/Web/src/pages/user/index.vue +++ b/Web/src/pages/user/index.vue @@ -6,7 +6,8 @@ 性别:{{ userData.sex }}
特权:
徽章:显示
- 社交:未收到礼物
+ 社交: + {{ gift == '' ? "未收到礼物" : gift }}
婚姻:单身
个性签名:{{ userData.sign }}修改
宠物:暂无
@@ -74,6 +75,7 @@ const attrData = ref({}); const accData = ref({}); const buff = ref>([]); const stock = ref>([]); +const gift = ref(''); onMounted(async () => { try { @@ -96,6 +98,7 @@ const BindData = async (): Promise => { accData.value = result.data.acc; buff.value = result.data.buff; stock.value = result.data.stock; + gift.value = result.data.gift; console.log(result); } else { diff --git a/Web/src/pages/user/user.vue b/Web/src/pages/user/user.vue index b14d151..0a305e4 100644 --- a/Web/src/pages/user/user.vue +++ b/Web/src/pages/user/user.vue @@ -3,7 +3,7 @@ 私聊. 送礼物. 逗一下
拜师. 交易. 送道具
+ href="/user/bag/give">送道具
{{ isFriend ? "删除好友" : "加好友" }} .加仇人 @@ -15,7 +15,9 @@ 昵称:{{ userData.nick }}
特权:
徽章:
- 社交: 暂无
+ 社交: + {{ gift }} +
婚姻:
结拜:暂无
宠物:暂无
@@ -117,6 +119,7 @@ const isFriend = ref(false); const isEnemy = ref(false); const isPk = ref(false); const team = ref({}); +const gift = ref(''); /**装备定义 */ const equ = ref>([]); const suit = ref>([]); @@ -154,6 +157,7 @@ const BindData = async (): Promise => { isFriend.value = result.data.isFriend; isEnemy.value = result.data.isEnemy; team.value = result.data.team; + gift.value = result.data.gift; isPk.value = result.data.isPk; equ.value = result.data.equ; suit.value = result.data.suit; diff --git a/Web/src/services/user/GiveService.ts b/Web/src/services/user/GiveService.ts new file mode 100644 index 0000000..1cf057d --- /dev/null +++ b/Web/src/services/user/GiveService.ts @@ -0,0 +1,25 @@ +export class GiveService { + /** + * 获取赠送礼物物品 + * GET /User/Give/GetUserGiftGoods + */ + static async GetUserGiftGoods(no: string) { + return await ApiService.Request("get", "/User/Give/GetUserGiftGoods", { no }); + } + + /** + * 赠送礼物 + * GET /User/Give/ToGift + */ + static async ToGift(no: string, goodsId: number, count: number) { + return await ApiService.Request("get", "/User/Give/ToGift", { no, goodsId, count }); + } + + /** + * 获取礼物记录 + * GET /User/Give/GetGiftLog + */ + static async GetGiftLog(no: string, page: number) { + return await ApiService.Request("get", "/User/Give/GetGiftLog", { no, page }); + } +} \ No newline at end of file