2026-03-08 15:46:19 +08:00
|
|
|
|
using System.ComponentModel.DataAnnotations;
|
|
|
|
|
|
using YD_Event.Core.Enum;
|
|
|
|
|
|
using YD_Event.Application.Project.Dtos;
|
|
|
|
|
|
|
|
|
|
|
|
namespace YD_Event.Application.Event.Dtos;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 阶段1:基本信息输入
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class SaveBasicInfoInput
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事ID (如果已存在则更新,否则新增)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public long? EventId { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事名称
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "赛事名称不能为空")]
|
|
|
|
|
|
[MaxLength(128, ErrorMessage = "赛事名称限制128字符")]
|
|
|
|
|
|
public string EventName { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 封面
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "封面不能为空")]
|
|
|
|
|
|
public string CoverImage { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事视频
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? EventVideo { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事类型
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "赛事类型不能为空")]
|
|
|
|
|
|
public EventFormat EventType { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名方式
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "报名方式不能为空")]
|
|
|
|
|
|
public RegistrationType RegistrationType { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 积分规则ID
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "积分规则不能为空")]
|
|
|
|
|
|
public long PointsRuleId { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名开始时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "报名起止时间不能为空")]
|
|
|
|
|
|
public DateTime RegistrationStartTime { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名结束时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "报名起止时间不能为空")]
|
|
|
|
|
|
public DateTime RegistrationEndTime { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否上传素材
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public bool IsNeedMaterial { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 素材备注
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? MaterialRemark { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 素材上传开始时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public DateTime? MaterialUploadStartTime { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 素材上传结束时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public DateTime? MaterialUploadEndTime { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 比赛开始时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "比赛起止时间不能为空")]
|
|
|
|
|
|
public DateTime MatchStartTime { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 比赛结束时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "比赛起止时间不能为空")]
|
|
|
|
|
|
public DateTime MatchEndTime { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 省份ID
|
|
|
|
|
|
/// </summary>
|
2026-04-10 14:29:41 +08:00
|
|
|
|
public long ProvinceId { get; set; }
|
2026-03-08 15:46:19 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 城市ID
|
|
|
|
|
|
/// </summary>
|
2026-04-10 14:29:41 +08:00
|
|
|
|
public long CityId { get; set; }
|
2026-03-08 15:46:19 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 区县ID
|
|
|
|
|
|
/// </summary>
|
2026-04-10 14:29:41 +08:00
|
|
|
|
public long DistrictId { get; set; }
|
2026-03-08 15:46:19 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 详细地址
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? DetailAddress { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事简介
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? EventIntroduction { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 自定义字段配置(JSON数组对象 [{key:"",value:""},...])
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public string? CustomConfigJson { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 阶段2:参与单位输入
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class SaveUnitsInput
|
|
|
|
|
|
{
|
|
|
|
|
|
[Required(ErrorMessage = "赛事ID不能为空")]
|
|
|
|
|
|
public long EventId { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 参与单位列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<EventUnitDto> Units { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 阶段3:项目与限报配置输入
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class SaveProjectsInput
|
|
|
|
|
|
{
|
|
|
|
|
|
[Required(ErrorMessage = "赛事ID不能为空")]
|
|
|
|
|
|
public long EventId { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 项目列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<EventProjectInput> Projects { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 报名限制
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public EventRegistrationLimitInput? RegistrationLimit { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 阶段4:费用与账户配置输入
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class SaveFeeConfigInput
|
|
|
|
|
|
{
|
|
|
|
|
|
[Required(ErrorMessage = "赛事ID不能为空")]
|
|
|
|
|
|
public long EventId { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 费用配置
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public EventFeeConfigInput FeeConfig { get; set; }
|
2026-03-18 16:25:49 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 项目单价列表(当收费模式为“单价(项目)”时填写)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<ProjectFeeInput>? ProjectFees { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 项目费用输入
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class ProjectFeeInput
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 项目ID
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "项目ID不能为空")]
|
|
|
|
|
|
public long ProjectId { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 项目单价
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[Required(ErrorMessage = "项目单价不能为空")]
|
|
|
|
|
|
[Range(0.01, (double)decimal.MaxValue, ErrorMessage = "项目单价必须大于0")]
|
|
|
|
|
|
public decimal Fee { get; set; }
|
2026-03-08 15:46:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事进度输出
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class EventProgressOutput
|
|
|
|
|
|
{
|
2026-03-18 13:47:34 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 赛事ID
|
|
|
|
|
|
/// </summary>
|
2026-03-08 15:46:19 +08:00
|
|
|
|
public long EventId { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 流程状态
|
|
|
|
|
|
/// </summary>
|
2026-03-08 15:46:19 +08:00
|
|
|
|
public ProcessStatus ProcessStatus { get; set; }
|
2026-03-18 13:47:34 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 已完成阶段列表
|
|
|
|
|
|
/// </summary>
|
2026-03-08 15:46:19 +08:00
|
|
|
|
public List<string> CompletedStages { get; set; }
|
|
|
|
|
|
}
|