feat: 完成等级功能页面

This commit is contained in:
陈淳
2024-02-01 15:16:38 +08:00
parent ff19cb68b9
commit 13ae0e33c1
4 changed files with 66 additions and 25 deletions

View File

@@ -1,10 +1,8 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using TencentCloud.Ame.V20190916.Models;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Yi.Framework.Bbs.Application.Contracts.IServices; using Yi.Framework.Bbs.Application.Contracts.IServices;
using Yi.Framework.Bbs.Domain.Managers; using Yi.Framework.Bbs.Domain.Managers;
using Yi.Framework.Rbac.Domain.Shared.Dtos;
namespace Yi.Framework.Bbs.Application.Services namespace Yi.Framework.Bbs.Application.Services
{ {
@@ -16,16 +14,25 @@ namespace Yi.Framework.Bbs.Application.Services
_bbsUserManager = bbsUserManager; _bbsUserManager = bbsUserManager;
} }
[HttpGet("bbs-user/{userName}")] [HttpGet("bbs-user/{userNameOrUserId}")]
public async Task<BbsUserInfoDto> GetUserInfoByUserNameAsync([FromRoute][Required] string userName) public async Task<BbsUserInfoDto> GetUserInfoByUserNameOrUserIdAsync([FromRoute][Required] string userNameOrUserId)
{ {
Guid userId;
var userEntity = await _bbsUserManager._userRepository.GetFirstAsync(x => x.UserName == userName); if (Guid.TryParse(userNameOrUserId, out var userGuidId))
if (userEntity == null)
{ {
throw new Volo.Abp.UserFriendlyException("该用户不存在"); userId = userGuidId;
} }
var output =await _bbsUserManager.GetBbsUserInfoAsync(userEntity.Id); else
{
var userEntity = await _bbsUserManager._userRepository.GetFirstAsync(x => x.UserName == userNameOrUserId);
if (userEntity == null)
{
throw new Volo.Abp.UserFriendlyException("该用户不存在");
}
userId= userEntity.Id;
}
var output =await _bbsUserManager.GetBbsUserInfoAsync(userId);
return output!; return output!;
} }

View File

@@ -36,11 +36,11 @@ namespace Yi.Framework.Bbs.Domain.Managers
var currentNewExperience = userInfo.Experience + moneyNumber * 1; var currentNewExperience = userInfo.Experience + moneyNumber * 1;
//修改钱钱,如果钱钱不足,直接会丢出去 //修改钱钱,如果钱钱不足,直接会丢出去
await _localEventBus.PublishAsync(new MoneyChangeEventArgs { UserId = userId, Number = moneyNumber }); await _localEventBus.PublishAsync(new MoneyChangeEventArgs { UserId = userId, Number = -moneyNumber },false);
//更改最终的经验再变化等级 //更改最终的经验再变化等级
var levelList = _levelCacheItem.OrderBy(x => x.CurrentLevel).ToList(); var levelList = _levelCacheItem.OrderByDescending(x => x.CurrentLevel).ToList();
var currentNewLevel = 0; var currentNewLevel = 1;
foreach (var level in levelList) foreach (var level in levelList)
{ {
if (currentNewExperience >= level.MinExperience) if (currentNewExperience >= level.MinExperience)
@@ -49,9 +49,11 @@ namespace Yi.Framework.Bbs.Domain.Managers
break; break;
} }
} }
userInfo.Level = currentNewLevel;
userInfo.Experience = currentNewExperience; var exUserInfo = await _bbsUserManager._bbsUserInfoRepository.GetAsync(x => x.UserId == userInfo.Id);
await _bbsUserManager._bbsUserInfoRepository.UpdateAsync(userInfo.Adapt<BbsUserExtraInfoEntity>()); exUserInfo.Level = currentNewLevel;
exUserInfo.Experience = currentNewExperience;
await _bbsUserManager._bbsUserInfoRepository.UpdateAsync(exUserInfo);
} }
} }

View File

@@ -7,3 +7,10 @@ export function getList(data) {
params: data, params: data,
}); });
} }
export function upgrade(experience) {
return request({
url: `/level/upgrade?experience=${experience}`,
method: "put"
});
}

View File

@@ -1,24 +1,25 @@
<template> <template>
<div class="container"> <div class="container">
<div class="top"> <div class="top">
<h4>当前等级: 1-小白</h4>
<h4>当前钱钱: 100</h4> <h4>当前等级: {{userInfo.level}}-{{ userInfo.levelName }}</h4>
<h4>当前钱钱: {{userInfo.money}}</h4>
<div class="title"> <div class="title">
<div class="left">当前等级经验:</div> <div class="left">当前等级经验:</div>
<div class="right"> <div class="right">
<el-progress :percentage="50" :stroke-width="15" striped striped-flow /> <el-progress :percentage="(userInfo.experience/nextExperience).toFixed(2)*100" :stroke-width="15" striped striped-flow />
<div>1623/2000</div> <div>{{userInfo.experience}}/{{ nextExperience }}</div>
</div> </div>
</div> </div>
</div> </div>
<div class="bottom"> <div class="bottom">
<el-input-number v-model="num" :min="1" :max="10000" /> <el-input-number v-model="moneyNum" :min="1" :max="10000" />
<el-button type="primary">升级</el-button> <el-button @click="onUpgradeClick" type="primary">升级</el-button>
<span>所需钱钱50</span> <span>所需钱钱{{ moneyNum }}</span>
</div> </div>
@@ -34,24 +35,48 @@
</template> </template>
<script setup> <script setup>
import {getList} from '@/apis/levelApi.js' import {getList,upgrade} from '@/apis/levelApi.js'
import { ref,onMounted, reactive } from 'vue' import {getBbsUserProfile} from '@/apis/userApi.js'
import { ref,onMounted, reactive,computed } from 'vue'
import useAuths from '@/hooks/useAuths.js';
const { isLogin,currentUserInfo } = useAuths();
const userInfo=ref({});
const levelData =ref([]); const levelData =ref([]);
const num=ref(1); const moneyNum=ref(1);
const query=reactive({ const query=reactive({
skipCount:0, skipCount:0,
maxResultCount:20 maxResultCount:20
}) })
const nextExperience=computed(()=>{
return levelData.value?.filter(x=>x.currentLevel==userInfo.value.level+1)[0]?.minExperience
})
const onUpgradeClick=async ()=>{
await upgrade(moneyNum.value);
await loadLevelData();
await loadUserInfoData();
}
onMounted(async () => { onMounted(async () => {
await loadLevelData(); await loadLevelData();
await loadUserInfoData();
}) })
const loadLevelData= async () => { const loadLevelData= async () => {
moneyNum.value=1;
const {data:{items}} = await getList(query); const {data:{items}} = await getList(query);
levelData.value = items; levelData.value = items;
} }
const loadUserInfoData=async()=>{
if(isLogin)
{
const {data}= await getBbsUserProfile(currentUserInfo.value.id);
userInfo.value=data;
}
}
</script> </script>
<style lang="scss" scoped > <style lang="scss" scoped >
.container{ .container{