using System.ComponentModel.DataAnnotations; namespace Store.Users.Contracts.Dtos; /// 账户资料;null 保留原值,空字符串清空文本。长度与范围由服务检查。 public class UserEditRequest { public string? NickName { get; set; } public string? Mobile { get; set; } public string? CompanyName { get; set; } public string? Notes { get; set; } public string? CardId { get; set; } public byte? GroupId { get; set; } /// 仅管理员可设置;子账号不能成为管理员。 public short? SaLevel { get; set; } public string? Authority { get; set; } public string? ForbiddenPage { get; set; } public string? OemId { get; set; } public int? ShopPointsPerMonth { get; set; } public decimal? PostagePerOrder { get; set; } public decimal? RefundPostagePerOrder { get; set; } public decimal? GiftOemAmountPerOrder { get; set; } public decimal? SyncLogisticsPerOrder { get; set; } } /// 修改账户资料;账户 ID 与资料字段统一通过 JSON 请求体提交。 public sealed class UserUpdateRequest : UserEditRequest { public int Id { get; set; } } /// 创建主账号或当前主账号的直属子账号。 public sealed class UserCreateRequest : UserEditRequest { [Required(ErrorMessage = "用户名不能为空")] public string UserName { get; set; } = ""; [Required(ErrorMessage = "密码不能为空")] public string Password { get; set; } = ""; } /// 修改本人密码,必须校验旧密码。 public sealed class ChangePasswordRequest { [Required(ErrorMessage = "原密码不能为空")] public string OldPassword { get; set; } = ""; [Required(ErrorMessage = "新密码不能为空")] public string NewPassword { get; set; } = ""; } /// 分页参数;页码、分页大小和过滤值由服务检查。 public class UserSearchRequest { public int Page { get; set; } = 1; public int PageSize { get; set; } = 50; public string? Keyword { get; set; } public byte? GroupId { get; set; } } public sealed record UserPage(long Total, IReadOnlyList Items); /// 流水查询支持时间范围、操作类型、店铺及订单过滤。 public sealed class UserRecordSearchRequest : UserSearchRequest { /// 目标账户;省略时查询本人。 public string? UserName { get; set; } public DateTime? StartTime { get; set; } public DateTime? EndTime { get; set; } public string? Operation { get; set; } public string? ShopId { get; set; } public int? PaymentType { get; set; } public string? OrderId { get; set; } }