feat: 上线财富排行榜

This commit is contained in:
橙子
2024-08-10 17:44:42 +08:00
parent 24b011ef93
commit 74988a80bf
4 changed files with 33 additions and 32 deletions

View File

@@ -34,13 +34,13 @@ namespace Yi.Framework.Bbs.Application.Services.Analyses
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet("analyse/bbs-user/register")] [HttpGet("analyse/bbs-user/register")]
public async Task<List<RegisterAnalyseDto>> GetRegisterAsync([FromQuery] PagedResultRequestDto input) public async Task<List<RegisterAnalyseDto>> GetRegisterAsync()
{ {
using (DataFilter.DisablePermissionHandler()) using (DataFilter.DisablePermissionHandler())
{ {
var users = await _bbsUserManager._userRepository._DbQueryable var users = await _bbsUserManager._userRepository._DbQueryable
.Where(u=>u.CreationTime>=DateTime.Now.AddMonths(-3)) .Where(u => u.CreationTime >= DateTime.Now.AddMonths(-3))
.LeftJoin<BbsUserExtraInfoEntity>((u, info) => u.Id == info.UserId) .LeftJoin<BbsUserExtraInfoEntity>((u, info) => u.Id == info.UserId)
.Select((u, info) => new BbsUserGetListOutputDto() .Select((u, info) => new BbsUserGetListOutputDto()
{ {
@@ -52,7 +52,6 @@ namespace Yi.Framework.Bbs.Application.Services.Analyses
Experience = info.Experience, Experience = info.Experience,
CreationTime = u.CreationTime CreationTime = u.CreationTime
}) })
.ToListAsync(); .ToListAsync();
var minCreateUser = users.MinBy(x => x.CreationTime); var minCreateUser = users.MinBy(x => x.CreationTime);
@@ -84,11 +83,15 @@ namespace Yi.Framework.Bbs.Application.Services.Analyses
/// 财富排行榜 /// 财富排行榜
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet("analyse/bbs-user/money-top")] [HttpGet("analyse/bbs-user/money-top/{userId?}")]
public async Task<PagedResultDto<MoneyTopUserDto>> GetMoneyTopAsync([FromQuery] PagedResultRequestDto input) public async Task<PagedResultDto<MoneyTopUserDto>> GetMoneyTopAsync([FromQuery] PagedResultRequestDto input,
[FromRoute] Guid? userId)
{ {
using (DataFilter.DisablePermissionHandler()) using (DataFilter.DisablePermissionHandler())
{ {
var pageIndex = input.SkipCount;
RefAsync<int> total = 0; RefAsync<int> total = 0;
var output = await _bbsUserManager._userRepository._DbQueryable var output = await _bbsUserManager._userRepository._DbQueryable
.LeftJoin<BbsUserExtraInfoEntity>((u, info) => u.Id == info.UserId) .LeftJoin<BbsUserExtraInfoEntity>((u, info) => u.Id == info.UserId)
@@ -102,10 +105,10 @@ namespace Yi.Framework.Bbs.Application.Services.Analyses
Icon = u.Icon, Icon = u.Icon,
Level = info.Level, Level = info.Level,
UserLimit = info.UserLimit, UserLimit = info.UserLimit,
Order = SqlFunc.RowNumber(u.Id) Order = SqlFunc.RowNumber(SqlFunc.Desc(info.Money))
} }
) )
.ToPageListAsync(input.SkipCount, input.MaxResultCount, total); .ToPageListAsync(pageIndex, input.MaxResultCount, total);
output.ForEach(x => { x.LevelName = _bbsUserManager._levelCacheDic[x.Level].Name; }); output.ForEach(x => { x.LevelName = _bbsUserManager._levelCacheDic[x.Level].Name; });
return new PagedResultDto<MoneyTopUserDto> return new PagedResultDto<MoneyTopUserDto>

View File

@@ -12,13 +12,12 @@
<div class="nick" :class="{ mt_1: props.time != 'undefined' }"> <div class="nick" :class="{ mt_1: props.time != 'undefined' }">
<div class="text">{{ userInfo.nick }}</div> <div class="text">{{ userInfo.nick }}</div>
<div class="level"> <div class="level">
<el-tag round effect="light" type="success" v-if="userInfo.level" <el-tag round effect="light" type="success" v-if="userInfo.level">{{ userInfo.level
>{{ userInfo.level }}-{{userInfo.levelName}} 等级</el-tag }}-{{ userInfo.levelName }} 等级</el-tag>
>
</div> </div>
<div class="status" v-if="userInfo.userLimit"> <div class="status" v-if="userInfo.userLimit">
<UserLimitTag :userLimit="userInfo.userLimit"/> <UserLimitTag :userLimit="userInfo.userLimit" />
</div> </div>
</div> </div>
@@ -32,13 +31,7 @@
<el-tag class="ml-2" type="warning">V8</el-tag> <el-tag class="ml-2" type="warning">V8</el-tag>
<el-tag class="ml-2" type="danger">核心</el-tag> <el-tag class="ml-2" type="danger">核心</el-tag>
</div> </div>
<el-button <el-button v-if="props.showWatching" type="primary" size="small" icon="Plus">关注</el-button>
v-if="props.showWatching"
type="primary"
size="small"
icon="Plus"
>关注</el-button
>
</div> </div>
</div> </div>
</template> </template>
@@ -71,7 +64,7 @@ const userInfo = reactive({
id: "", id: "",
level: "", level: "",
userLimit: "", userLimit: "",
userName:"" userName: ""
}); });
const iconUrl = ref("/acquiesce.png"); const iconUrl = ref("/acquiesce.png");
const iconUrlHandler = (icon) => { const iconUrlHandler = (icon) => {
@@ -109,11 +102,11 @@ const Init = () => {
userInfo.nick = props.userInfo.nick; userInfo.nick = props.userInfo.nick;
userInfo.role = props.userInfo.role; userInfo.role = props.userInfo.role;
userInfo.id = props.userInfo.id; userInfo.id = props.userInfo.id;
userInfo.money=props.userInfo.money; userInfo.money = props.userInfo.money;
userInfo.level = props.userInfo.level; userInfo.level = props.userInfo.level;
userInfo.userLimit = props.userInfo.userLimit; userInfo.userLimit = props.userInfo.userLimit;
userInfo.userName= props.userInfo.userName; userInfo.userName = props.userInfo.userName;
userInfo.levelName= props.userInfo.levelName; userInfo.levelName = props.userInfo.levelName;
iconUrl.value = iconUrlHandler(userInfo.icon); iconUrl.value = iconUrlHandler(userInfo.icon);
} }
@@ -154,6 +147,7 @@ const Init = () => {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.avatar-left, .avatar-left,
@@ -161,15 +155,18 @@ const Init = () => {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
.content { .content {
margin-left: 10px; margin-left: 10px;
} }
.nick { .nick {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
font-weight: bold; font-weight: bold;
> div {
>div {
margin-right: 10px; margin-right: 10px;
} }
} }
@@ -179,6 +176,7 @@ const Init = () => {
display: flex; display: flex;
flex: 2; flex: 2;
} }
.el-avatar { .el-avatar {
margin-right: 1rem; margin-right: 1rem;
--el-avatar-bg-color: none; --el-avatar-bg-color: none;

View File

@@ -26,14 +26,14 @@
</el-menu-item> </el-menu-item>
<el-menu-item index="5" :route="{ path: '/activity/bank' }"> <el-menu-item index="5" :route="{ path: '/activity/bank' }">
<el-icon> <el-icon>
<Money /> <CreditCard />
</el-icon> <span>银行</span> </el-icon> <span>银行</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="6" :route="{ path: '/activity/x' }"> <el-menu-item index="6" :route="{ path: '/activity/money' }">
<el-icon> <el-icon>
<Sunrise /> <Money />
</el-icon> </el-icon>
<span>娱乐城(暂未开放)</span> <span>排行榜</span>
</el-menu-item> </el-menu-item>
</el-menu> </el-menu>

View File

@@ -103,10 +103,10 @@
<el-dialog v-model="accessLogDialogVisible" title="全站历史统计" width="1200px" center> <el-dialog v-model="accessLogDialogVisible" title="全站历史统计" width="1200px" center>
<el-tabs v-model="accessLogTab"> <el-tabs v-model="accessLogTab">
<el-tab-pane label="访问统计" name="AccessLogChart" style="display: flex;justify-content: center;"> <el-tab-pane label="访问统计近3月" name="AccessLogChart" style="display: flex;justify-content: center;">
<AccessLogChart :option="accessLogOptins" style="height: 600px;width: 1200px;" /> <AccessLogChart :option="accessLogOptins" style="height: 600px;width: 1200px;" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="注册统计" name="RegisterChart" style="display: flex;justify-content: center;"> <el-tab-pane label="注册统计近3月" name="RegisterChart" style="display: flex;justify-content: center;">
<AccessLogChart :option="registerLogOptins" style="height: 600px;width: 1200px;" /> <AccessLogChart :option="registerLogOptins" style="height: 600px;width: 1200px;" />
</el-tab-pane> </el-tab-pane>
@@ -241,10 +241,10 @@ const activeList = [
{ name: "签到", path: "/activity/sign", icon: "Present" }, { name: "签到", path: "/activity/sign", icon: "Present" },
{ name: "等级", path: "/activity/level", icon: "Ticket" }, { name: "等级", path: "/activity/level", icon: "Ticket" },
{ name: "大转盘", path: "/activity/lucky", icon: "Sunny" }, { name: "大转盘", path: "/activity/lucky", icon: "Sunny" },
{ name: "银行", path: "/activity/bank", icon: "Money" }, { name: "银行", path: "/activity/bank", icon: "CreditCard" },
{ name: "任务", path: "/activity/sign", icon: "Memo" }, { name: "任务", path: "/activity/sign", icon: "Memo" },
{ name: "娱乐城", path: "/activity/sign", icon: "Sunrise" }, { name: "排行榜", path: "/activity/money", icon: "Money" },
{ name: "开始", path: "/start", icon: "Position" }, { name: "开始", path: "/start", icon: "Position" },
{ name: "聊天室", path: "/chat", icon: "ChatRound" }, { name: "聊天室", path: "/chat", icon: "ChatRound" },
]; ];