调整页面
This commit is contained in:
parent
faca50a972
commit
988241c2c4
|
|
@ -10,7 +10,7 @@ using User = MiAssessment.Admin.Business.Entities.User;
|
|||
namespace MiAssessment.Admin.Business.Services;
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD>û<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>
|
||||
/// 用户业务服务实现
|
||||
/// </summary>
|
||||
public class UserBusinessService : IUserBusinessService
|
||||
{
|
||||
|
|
@ -18,29 +18,29 @@ public class UserBusinessService : IUserBusinessService
|
|||
private readonly ILogger<UserBusinessService> _logger;
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD>û<EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD>
|
||||
/// 用户等级名称映射
|
||||
/// </summary>
|
||||
private static readonly Dictionary<int, string> UserLevelNames = new()
|
||||
{
|
||||
{ 1, "<EFBFBD><EFBFBD>ͨ<EFBFBD>û<EFBFBD>" },
|
||||
{ 2, "<EFBFBD>ϻ<EFBFBD><EFBFBD><EFBFBD>" },
|
||||
{ 3, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϻ<EFBFBD><EFBFBD><EFBFBD>" }
|
||||
{ 1, "普通用户" },
|
||||
{ 2, "合伙人" },
|
||||
{ 3, "渠道合伙人" }
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// ״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD>
|
||||
/// 状态名称映射
|
||||
/// </summary>
|
||||
private static readonly Dictionary<int, string> StatusNames = new()
|
||||
{
|
||||
{ 0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" },
|
||||
{ 1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" }
|
||||
{ 0, "禁用" },
|
||||
{ 1, "正常" }
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD>캯<EFBFBD><EFBFBD>
|
||||
/// 构造函数
|
||||
/// </summary>
|
||||
/// <param name="dbContext"><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
||||
/// <param name="logger"><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD></param>
|
||||
/// <param name="dbContext">数据库上下文</param>
|
||||
/// <param name="logger">日志记录器</param>
|
||||
public UserBusinessService(
|
||||
AdminBusinessDbContext dbContext,
|
||||
ILogger<UserBusinessService> logger)
|
||||
|
|
@ -49,45 +49,60 @@ public class UserBusinessService : IUserBusinessService
|
|||
_logger = logger;
|
||||
}
|
||||
|
||||
#region <EFBFBD>û<EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飨<EFBFBD>½ӿ<EFBFBD> - Requirements 9.1-9.7<EFBFBD><EFBFBD>
|
||||
#region 用户列表与详情(新接口 - Requirements 9.1-9.7)
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<PagedResult<UserDto>> GetUserListAsync(UserQueryRequest request)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
||||
// 构建查询,过滤软删除记录
|
||||
var query = _dbContext.Users
|
||||
.AsNoTracking()
|
||||
.Where(u => !u.IsDeleted);
|
||||
|
||||
// Ӧ<EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 应用过滤条件
|
||||
query = ApplyUserQueryFilters(query, request);
|
||||
|
||||
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 获取总数
|
||||
var total = await query.CountAsync();
|
||||
|
||||
// <EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>併<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
var items = await query
|
||||
// 分页查询,先查数据库,再在内存中映射名称
|
||||
var users = await query
|
||||
.OrderByDescending(u => u.CreateTime)
|
||||
.Skip(request.Skip)
|
||||
.Take(request.PageSize)
|
||||
.Select(u => new UserDto
|
||||
.Select(u => new
|
||||
{
|
||||
Id = u.Id,
|
||||
Uid = u.Uid,
|
||||
Phone = u.Phone,
|
||||
Nickname = u.Nickname,
|
||||
Avatar = u.Avatar,
|
||||
UserLevel = u.UserLevel,
|
||||
UserLevelName = GetUserLevelName(u.UserLevel),
|
||||
Balance = u.Balance,
|
||||
TotalIncome = u.TotalIncome,
|
||||
Status = u.Status,
|
||||
StatusName = GetStatusName(u.Status),
|
||||
CreateTime = u.CreateTime,
|
||||
LastLoginTime = u.LastLoginTime
|
||||
u.Id,
|
||||
u.Uid,
|
||||
u.Phone,
|
||||
u.Nickname,
|
||||
u.Avatar,
|
||||
u.UserLevel,
|
||||
u.Balance,
|
||||
u.TotalIncome,
|
||||
u.Status,
|
||||
u.CreateTime,
|
||||
u.LastLoginTime
|
||||
})
|
||||
.ToListAsync();
|
||||
|
||||
var items = users.Select(u => new UserDto
|
||||
{
|
||||
Id = u.Id,
|
||||
Uid = u.Uid,
|
||||
Phone = u.Phone,
|
||||
Nickname = u.Nickname,
|
||||
Avatar = u.Avatar,
|
||||
UserLevel = u.UserLevel,
|
||||
UserLevelName = GetUserLevelName(u.UserLevel),
|
||||
Balance = u.Balance,
|
||||
TotalIncome = u.TotalIncome,
|
||||
Status = u.Status,
|
||||
StatusName = GetStatusName(u.Status),
|
||||
CreateTime = u.CreateTime,
|
||||
LastLoginTime = u.LastLoginTime
|
||||
}).ToList();
|
||||
|
||||
return PagedResult<UserDto>.Create(items, total, request.Page, request.PageSize);
|
||||
}
|
||||
|
||||
|
|
@ -104,7 +119,7 @@ public class UserBusinessService : IUserBusinessService
|
|||
return null;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD>ȡ<EFBFBD>ϼ<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// 获取上级用户信息
|
||||
string? parentUserNickname = null;
|
||||
string? parentUserUid = null;
|
||||
if (user.ParentUserId.HasValue)
|
||||
|
|
@ -122,17 +137,17 @@ public class UserBusinessService : IUserBusinessService
|
|||
}
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 获取订单数量
|
||||
var orderCount = await _dbContext.Orders
|
||||
.AsNoTracking()
|
||||
.CountAsync(o => o.UserId == id && !o.IsDeleted);
|
||||
|
||||
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 获取测评数量(已支付及以上状态的测评订单)
|
||||
var assessmentCount = await _dbContext.Orders
|
||||
.AsNoTracking()
|
||||
.CountAsync(o => o.UserId == id && o.OrderType == 1 && o.Status >= 2 && !o.IsDeleted);
|
||||
|
||||
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 获取邀请人数
|
||||
var inviteCount = await _dbContext.Users
|
||||
.AsNoTracking()
|
||||
.CountAsync(u => u.ParentUserId == id && !u.IsDeleted);
|
||||
|
|
@ -171,7 +186,7 @@ public class UserBusinessService : IUserBusinessService
|
|||
|
||||
if (user == null)
|
||||
{
|
||||
throw new BusinessException(ErrorCodes.UserNotFound, "<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
throw new BusinessException(ErrorCodes.UserNotFound, "用户不存在");
|
||||
}
|
||||
|
||||
user.Status = status;
|
||||
|
|
@ -179,7 +194,7 @@ public class UserBusinessService : IUserBusinessService
|
|||
|
||||
await _dbContext.SaveChangesAsync();
|
||||
|
||||
_logger.LogInformation("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>״̬<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>ID: {UserId}, ״̬: {Status}", id, status);
|
||||
_logger.LogInformation("更新用户状态成功,ID: {UserId}, 状态: {Status}", id, status);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -193,7 +208,7 @@ public class UserBusinessService : IUserBusinessService
|
|||
|
||||
if (user == null)
|
||||
{
|
||||
throw new BusinessException(ErrorCodes.UserNotFound, "<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
throw new BusinessException(ErrorCodes.UserNotFound, "用户不存在");
|
||||
}
|
||||
|
||||
user.UserLevel = userLevel;
|
||||
|
|
@ -201,7 +216,7 @@ public class UserBusinessService : IUserBusinessService
|
|||
|
||||
await _dbContext.SaveChangesAsync();
|
||||
|
||||
_logger.LogInformation("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>ID: {UserId}, <20>ȼ<EFBFBD>: {UserLevel}", id, userLevel);
|
||||
_logger.LogInformation("更新用户等级成功,ID: {UserId}, 等级: {UserLevel}", id, userLevel);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -209,35 +224,50 @@ public class UserBusinessService : IUserBusinessService
|
|||
/// <inheritdoc />
|
||||
public async Task<List<UserDto>> ExportUsersAsync(UserQueryRequest request)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
||||
// 构建查询,过滤软删除记录
|
||||
var query = _dbContext.Users
|
||||
.AsNoTracking()
|
||||
.Where(u => !u.IsDeleted);
|
||||
|
||||
// Ӧ<EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 应用过滤条件
|
||||
query = ApplyUserQueryFilters(query, request);
|
||||
|
||||
// <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
|
||||
var items = await query
|
||||
// 查询所有匹配用户,先查数据库,再在内存中映射名称
|
||||
var users = await query
|
||||
.OrderByDescending(u => u.CreateTime)
|
||||
.Select(u => new UserDto
|
||||
.Select(u => new
|
||||
{
|
||||
Id = u.Id,
|
||||
Uid = u.Uid,
|
||||
Phone = u.Phone,
|
||||
Nickname = u.Nickname,
|
||||
Avatar = u.Avatar,
|
||||
UserLevel = u.UserLevel,
|
||||
UserLevelName = GetUserLevelName(u.UserLevel),
|
||||
Balance = u.Balance,
|
||||
TotalIncome = u.TotalIncome,
|
||||
Status = u.Status,
|
||||
StatusName = GetStatusName(u.Status),
|
||||
CreateTime = u.CreateTime,
|
||||
LastLoginTime = u.LastLoginTime
|
||||
u.Id,
|
||||
u.Uid,
|
||||
u.Phone,
|
||||
u.Nickname,
|
||||
u.Avatar,
|
||||
u.UserLevel,
|
||||
u.Balance,
|
||||
u.TotalIncome,
|
||||
u.Status,
|
||||
u.CreateTime,
|
||||
u.LastLoginTime
|
||||
})
|
||||
.ToListAsync();
|
||||
|
||||
var items = users.Select(u => new UserDto
|
||||
{
|
||||
Id = u.Id,
|
||||
Uid = u.Uid,
|
||||
Phone = u.Phone,
|
||||
Nickname = u.Nickname,
|
||||
Avatar = u.Avatar,
|
||||
UserLevel = u.UserLevel,
|
||||
UserLevelName = GetUserLevelName(u.UserLevel),
|
||||
Balance = u.Balance,
|
||||
TotalIncome = u.TotalIncome,
|
||||
Status = u.Status,
|
||||
StatusName = GetStatusName(u.Status),
|
||||
CreateTime = u.CreateTime,
|
||||
LastLoginTime = u.LastLoginTime
|
||||
}).ToList();
|
||||
|
||||
_logger.LogInformation("导出用户列表成功,数量: {Count}", items.Count);
|
||||
|
||||
return items;
|
||||
|
|
@ -287,7 +317,7 @@ public class UserBusinessService : IUserBusinessService
|
|||
|
||||
#endregion
|
||||
|
||||
#region <EFBFBD>ɽӿڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
||||
#region 旧接口(保留)
|
||||
|
||||
/// <inheritdoc />
|
||||
public Task<PagedResult<UserListResponse>> GetUserListAsync(UserListRequest request)
|
||||
|
|
@ -299,88 +329,88 @@ public class UserBusinessService : IUserBusinessService
|
|||
/// <inheritdoc />
|
||||
public Task<bool> SetUserStatusAsync(long userId, int status)
|
||||
{
|
||||
// <EFBFBD>ɽӿ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> false
|
||||
// 旧接口暂时返回 false
|
||||
return Task.FromResult(false);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public Task<bool> SetTestAccountAsync(long userId, int isTest)
|
||||
{
|
||||
// <EFBFBD>ɽӿ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> false
|
||||
// 旧接口暂时返回 false
|
||||
return Task.FromResult(false);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public Task<bool> ClearMobileAsync(long userId)
|
||||
{
|
||||
// <EFBFBD>ɽӿ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> false
|
||||
// 旧接口暂时返回 false
|
||||
return Task.FromResult(false);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public Task<bool> ClearWeChatAsync(long userId)
|
||||
{
|
||||
// <EFBFBD>ɽӿ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> false
|
||||
// 旧接口暂时返回 false
|
||||
return Task.FromResult(false);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public Task<PagedResult<IpLogItem>> GetUserIpLogsAsync(long userId, int page, int pageSize)
|
||||
{
|
||||
// <EFBFBD>ɽӿ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ؿս<EFBFBD><EFBFBD>
|
||||
// 旧接口暂时返回空结果
|
||||
return Task.FromResult(PagedResult<IpLogItem>.Empty(page, pageSize));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public Task<bool> BindMobileAsync(long userId, string mobile)
|
||||
{
|
||||
// <EFBFBD>ɽӿ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> false
|
||||
// 旧接口暂时返回 false
|
||||
return Task.FromResult(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ˽<EFBFBD>з<EFBFBD><EFBFBD><EFBFBD>
|
||||
#region 私有方法
|
||||
|
||||
/// <summary>
|
||||
/// Ӧ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// 应用用户查询过滤条件
|
||||
/// </summary>
|
||||
/// <param name="query"><EFBFBD><EFBFBD>ѯ</param>
|
||||
/// <param name="request"><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
||||
/// <returns><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD>IJ<EFBFBD>ѯ</returns>
|
||||
/// <param name="query">查询</param>
|
||||
/// <param name="request">请求</param>
|
||||
/// <returns>过滤后的查询</returns>
|
||||
private IQueryable<User> ApplyUserQueryFilters(IQueryable<User> query, UserQueryRequest request)
|
||||
{
|
||||
// <EFBFBD><EFBFBD>UID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 按UID筛选
|
||||
if (!string.IsNullOrWhiteSpace(request.Uid))
|
||||
{
|
||||
query = query.Where(u => u.Uid == request.Uid);
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 按手机号筛选
|
||||
if (!string.IsNullOrWhiteSpace(request.Phone))
|
||||
{
|
||||
query = query.Where(u => u.Phone != null && u.Phone.Contains(request.Phone));
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 按昵称筛选
|
||||
if (!string.IsNullOrWhiteSpace(request.Nickname))
|
||||
{
|
||||
query = query.Where(u => u.Nickname != null && u.Nickname.Contains(request.Nickname));
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>ȼ<EFBFBD>ɸѡ
|
||||
// 按用户等级筛选
|
||||
if (request.UserLevel.HasValue)
|
||||
{
|
||||
query = query.Where(u => u.UserLevel == request.UserLevel.Value);
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD>״̬ɸѡ
|
||||
// 按状态筛选
|
||||
if (request.Status.HasValue)
|
||||
{
|
||||
query = query.Where(u => u.Status == request.Status.Value);
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䷶Χɸѡ
|
||||
// 按创建时间范围筛选
|
||||
if (request.CreateTimeStart.HasValue)
|
||||
{
|
||||
query = query.Where(u => u.CreateTime >= request.CreateTimeStart.Value);
|
||||
|
|
@ -395,23 +425,23 @@ public class UserBusinessService : IUserBusinessService
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD><EFBFBD>ȡ<EFBFBD>û<EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// 获取用户等级名称
|
||||
/// </summary>
|
||||
/// <param name="userLevel"><EFBFBD>û<EFBFBD><EFBFBD>ȼ<EFBFBD></param>
|
||||
/// <returns><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
|
||||
/// <param name="userLevel">用户等级</param>
|
||||
/// <returns>等级名称</returns>
|
||||
private static string GetUserLevelName(int userLevel)
|
||||
{
|
||||
return UserLevelNames.TryGetValue(userLevel, out var name) ? name : "δ֪";
|
||||
return UserLevelNames.TryGetValue(userLevel, out var name) ? name : "未知";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <EFBFBD><EFBFBD>ȡ״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// 获取状态名称
|
||||
/// </summary>
|
||||
/// <param name="status">״ֵ̬</param>
|
||||
/// <returns>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
|
||||
/// <param name="status">状态值</param>
|
||||
/// <returns>状态名称</returns>
|
||||
private static string GetStatusName(int status)
|
||||
{
|
||||
return StatusNames.TryGetValue(status, out var name) ? name : "δ֪";
|
||||
return StatusNames.TryGetValue(status, out var name) ? name : "未知";
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
|||
|
|
@ -201,6 +201,9 @@ const RICH_TEXT_CONFIG_KEYS = ['user_agreement', 'privacy_policy', 'about_us_con
|
|||
// 图片配置键列表
|
||||
const IMAGE_CONFIG_KEYS = ['service_qrcode']
|
||||
|
||||
// 隐藏的配置键列表(暂未实际使用的配置项)
|
||||
const HIDDEN_CONFIG_KEYS = ['service_phone', 'service_wechat', 'about_us_content', 'assessment_price']
|
||||
|
||||
// ============ State ============
|
||||
|
||||
const state = reactive<ConfigPageState>({
|
||||
|
|
@ -326,8 +329,13 @@ async function loadConfigList() {
|
|||
try {
|
||||
const res = await getConfigList()
|
||||
if (res.code === 0) {
|
||||
state.configGroups = res.data || []
|
||||
state.activeGroups = state.configGroups.map(group => group.configType)
|
||||
// 过滤隐藏的配置项,移除空分组
|
||||
const groups = (res.data || []).map((group: ConfigGroup) => ({
|
||||
...group,
|
||||
items: group.items.filter((item: ConfigItem) => !HIDDEN_CONFIG_KEYS.includes(item.configKey))
|
||||
})).filter((group: ConfigGroup) => group.items.length > 0)
|
||||
state.configGroups = groups
|
||||
state.activeGroups = groups.map((group: ConfigGroup) => group.configType)
|
||||
} else {
|
||||
throw new Error(res.message || '获取配置列表失败')
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,7 +96,11 @@
|
|||
<el-table-column prop="uid" label="UID" width="120" show-overflow-tooltip />
|
||||
|
||||
<!-- 手机号 -->
|
||||
<el-table-column prop="phone" label="手机号" width="130" show-overflow-tooltip />
|
||||
<el-table-column prop="phone" label="手机号" width="130" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
{{ row.phone || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- 昵称 -->
|
||||
<el-table-column prop="nickname" label="昵称" min-width="120" show-overflow-tooltip />
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
}
|
||||
},
|
||||
"SiteSettings": {
|
||||
"ApiBaseUrl": "https://api.nxt.shhmkjgs.cn"
|
||||
"ApiBaseUrl": "http://localhost:5238"
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"Serilog": {
|
||||
|
|
|
|||
|
|
@ -98,19 +98,26 @@ else
|
|||
var meta = chart.getDatasetMeta(0);
|
||||
var dataset = chart.data.datasets[0];
|
||||
var total = dataset.data.reduce(function(a, b) { return a + b; }, 0);
|
||||
ctx.font = 'bold 12px "Microsoft YaHei", sans-serif';
|
||||
ctx.font = 'bold 10px "Microsoft YaHei", sans-serif';
|
||||
ctx.textBaseline = 'middle';
|
||||
meta.data.forEach(function(arc, i) {
|
||||
var pct = (dataset.data[i] / total * 100).toFixed(2) + '%';
|
||||
var name = chart.data.labels[i];
|
||||
var angle = (arc.startAngle + arc.endAngle) / 2;
|
||||
var r = (arc.outerRadius + arc.innerRadius) / 2;
|
||||
var x = arc.x + Math.cos(angle) * (arc.outerRadius + 30);
|
||||
var y = arc.y + Math.sin(angle) * (arc.outerRadius + 30);
|
||||
var labelR = arc.outerRadius + 18;
|
||||
var x = arc.x + Math.cos(angle) * labelR;
|
||||
var y = arc.y + Math.sin(angle) * labelR;
|
||||
// 根据角度调整文字对齐,避免左右超出
|
||||
if (Math.cos(angle) < -0.1) {
|
||||
ctx.textAlign = 'right';
|
||||
} else if (Math.cos(angle) > 0.1) {
|
||||
ctx.textAlign = 'left';
|
||||
} else {
|
||||
ctx.textAlign = 'center';
|
||||
}
|
||||
ctx.fillStyle = dataset.backgroundColor[i];
|
||||
ctx.textAlign = 'center';
|
||||
ctx.fillText(name, x, y - 8);
|
||||
ctx.fillText(pct, x, y + 8);
|
||||
ctx.fillText(name, x, y - 7);
|
||||
ctx.fillText(pct, x, y + 7);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -133,7 +140,7 @@ else
|
|||
plugins: {
|
||||
legend: { display: false }
|
||||
},
|
||||
layout: { padding: 40 }
|
||||
layout: { padding: { top: 44, bottom: 44, left: 50, right: 50 } }
|
||||
},
|
||||
plugins: [donutLabelPlugin]
|
||||
});
|
||||
|
|
|
|||
|
|
@ -17,11 +17,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 底部:机构信息 -->
|
||||
<div class="disc-footer">
|
||||
<span class="disc-footer-left">天赋全能测评-本部</span>
|
||||
<span class="disc-footer-right">公众号【天赋测评研究所】</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@section Styles {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ else
|
|||
<div class="si-page">
|
||||
<!-- 顶部标签 -->
|
||||
<div class="si-top-badge">
|
||||
<span class="si-badge-text">@Model.LevelName@(MiAssessment.Api.Pages.Report.StrongerIntelligenceModel.GetStarChinese(Model.StarLevel))星</span>
|
||||
<span class="si-badge-text">@Model.LevelName@(MiAssessment.Api.Pages.Report.StrongerIntelligenceModel.GetStarChinese(Model.StarLevel))智能</span>
|
||||
</div>
|
||||
|
||||
<!-- 名称标签(左)+ 星级(右)同一行 -->
|
||||
|
|
@ -26,14 +26,7 @@ else
|
|||
<span>@Model.LevelName—@Model.IntelligenceName</span>
|
||||
</div>
|
||||
<div class="si-stars">
|
||||
@for (var i = 0; i < Model.StarLevel; i++)
|
||||
{
|
||||
<span class="si-star">★</span>
|
||||
}
|
||||
@for (var i = Model.StarLevel; i < 5; i++)
|
||||
{
|
||||
<span class="si-star si-star-empty">★</span>
|
||||
}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -85,11 +85,11 @@ public class StrongerIntelligenceModel : ReportPageModelBase
|
|||
/// </summary>
|
||||
public static string GetStarChinese(int starLevel) => starLevel switch
|
||||
{
|
||||
5 => "五",
|
||||
4 => "四",
|
||||
3 => "三",
|
||||
2 => "二",
|
||||
1 => "一",
|
||||
// 5 => "五",
|
||||
// 4 => "四",
|
||||
// 3 => "三",
|
||||
// 2 => "二",
|
||||
// 1 => "一",
|
||||
_ => ""
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
}
|
||||
|
||||
.bt-panel-donut {
|
||||
flex: 0.9;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.bt-chart-title {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user