增加活动页面
Change-Id: I63cf84e250d16b2af401f335562fcadd3be13170
diff --git a/react-ui/src/pages/Activity/data.d.ts b/react-ui/src/pages/Activity/data.d.ts
new file mode 100644
index 0000000..d66d25f
--- /dev/null
+++ b/react-ui/src/pages/Activity/data.d.ts
@@ -0,0 +1,101 @@
+// data.d.ts - 活动系统类型定义文件
+
+// 活动类型枚举
+export type ActivityType = 'UPLOAD' | 'DOWNLOAD';
+
+// 活动状态
+export type ActivityStatus = 0 | 1; // 0=已结束,1=进行中
+
+// 活动信息 - 适配后端返回的字段
+export interface SysActivity {
+ createBy?: string | null;
+ createTime?: string | null;
+ updateBy?: string | null;
+ updateTime?: string | null;
+ remark?: string | null;
+ activityId: number;
+ activityName: string;
+ rewardBonus: number;
+ conditionValue: string; // 上传:如"10GB",下载:torrent_id
+ startTime: string; // ISO 8601 格式:2025-06-01T00:00:00.000+08:00
+ endTime: string; // ISO 8601 格式:2025-06-30T23:59:59.000+08:00
+ status: ActivityStatus;
+ activityType: ActivityType;
+}
+
+// 活动记录
+export interface SysActivityRecord {
+ recordId: number;
+ activityId: number;
+ userId: number;
+ rewardBonus: number;
+ completeTime: string;
+}
+
+// 排行榜条目
+export interface LeaderboardEntry {
+ userId: number;
+ userName: string;
+ score: number;
+}
+
+// 后端实际返回的活动列表响应格式
+export interface GetActivityListResponse {
+ total: number;
+ rows: SysActivity[];
+ code: number;
+ msg: string;
+}
+
+// 获取排行榜响应 - 假设也遵循相同格式
+export interface GetLeaderboardResponse {
+ total: number;
+ rows: LeaderboardEntry[];
+ code: number;
+ msg: string;
+}
+
+// 参与活动响应
+export interface ParticipateActivityResponse {
+ code: number;
+ msg: string;
+ data?: any;
+}
+
+// 活动列表查询参数
+export interface ActivityListParams {
+ pageNum?: number;
+ pageSize?: number;
+ activityName?: string;
+ activityType?: ActivityType;
+ status?: ActivityStatus;
+}
+
+// 排行榜查询参数
+export interface LeaderboardParams {
+ pageNum?: number;
+ pageSize?: number;
+}
+
+// 前端组件使用的标准化数据格式(保持原有格式以减少组件改动)
+export interface StandardizedActivityListResponse {
+ code: number;
+ msg: string;
+ data: {
+ list: SysActivity[];
+ total: number;
+ pageSize: number;
+ current: number;
+ };
+}
+
+export interface StandardizedLeaderboardResponse {
+ code: number;
+ msg: string;
+ data: {
+ list: LeaderboardEntry[];
+ total: number;
+ pageSize: number;
+ current: number;
+ };
+}
\ No newline at end of file