feat: 完成等级功能页面
This commit is contained in:
@@ -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!;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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{
|
||||||
|
|||||||
Reference in New Issue
Block a user