add plan activity config (#6139)

* activity points

* modal

* ui

* fix

* pref: zod schema

* perf: ad api with zod

* perf: plan year switch

* perf: plan

* i18n

* fix: hook

* fix: activity checker

* fix: i18n

* fix clear token

* fix

* back

* can close modal in pay

* ad token

* rename

* fix

* total points

* eng i18n

---------

Co-authored-by: archer <545436317@qq.com>
This commit is contained in:
heheer
2025-12-24 18:22:25 +08:00
committed by GitHub
parent e53242e8bc
commit 4fbe27f2df
52 changed files with 1541 additions and 284 deletions
@@ -0,0 +1,6 @@
import { AdminInformPath } from './inform';
import type { OpenAPIPath } from '../../../type';
export const AdminUserPath: OpenAPIPath = {
...AdminInformPath
};
@@ -0,0 +1,57 @@
import { z } from 'zod';
import { InformLevelEnum } from '../../../../../support/user/inform/constants';
// Send system inform
export const SendSystemInformBodySchema = z.object({
title: z.string().meta({ description: '通知标题' }),
content: z.string().meta({ description: '通知内容' }),
level: z.enum(InformLevelEnum).meta({ description: '通知等级' })
});
export type SendSystemInformBodyType = z.infer<typeof SendSystemInformBodySchema>;
// Update system modal
export const UpdateSystemModalBodySchema = z.object({
content: z.string().meta({ description: '系统弹窗内容' })
});
export type UpdateSystemModalBodyType = z.infer<typeof UpdateSystemModalBodySchema>;
// Update operational ad
export const UpdateOperationalAdBodySchema = z.object({
operationalAdImage: z.string().meta({ description: '活动图片URL' }),
operationalAdLink: z.string().meta({ description: '活动链接' })
});
export type UpdateOperationalAdBodyType = z.infer<typeof UpdateOperationalAdBodySchema>;
// Update activity ad
export const UpdateActivityAdBodySchema = z.object({
activityAdImage: z.string().meta({ description: '底部广告图片URL' }),
activityAdLink: z.string().meta({ description: '底部广告链接' })
});
export type UpdateActivityAdBodyType = z.infer<typeof UpdateActivityAdBodySchema>;
// Response schemas
export const SystemMsgModalResponseSchema = z
.object({
id: z.string().meta({ description: '弹窗ID' }),
content: z.string().meta({ description: '弹窗内容' })
})
.optional();
export type SystemMsgModalValueType = z.infer<typeof SystemMsgModalResponseSchema>;
export const OperationalAdResponseSchema = z
.object({
id: z.string().meta({ description: '广告ID' }),
operationalAdImage: z.string().meta({ description: '广告图片URL' }),
operationalAdLink: z.string().meta({ description: '广告链接' })
})
.optional();
export type OperationalAdResponseType = z.infer<typeof OperationalAdResponseSchema>;
export const ActivityAdResponseSchema = z
.object({
id: z.string().meta({ description: '广告ID' }),
activityAdImage: z.string().meta({ description: '广告图片URL' }),
activityAdLink: z.string().meta({ description: '广告链接' })
})
.optional();
export type ActivityAdResponseType = z.infer<typeof ActivityAdResponseSchema>;
@@ -0,0 +1,161 @@
import type { OpenAPIPath } from '../../../../type';
import {
SendSystemInformBodySchema,
UpdateSystemModalBodySchema,
UpdateOperationalAdBodySchema,
UpdateActivityAdBodySchema,
SystemMsgModalResponseSchema,
OperationalAdResponseSchema,
ActivityAdResponseSchema
} from './api';
import { TagsMap } from '../../../../tag';
export const AdminInformPath: OpenAPIPath = {
'/admin/support/user/inform/sendSystemInform': {
post: {
summary: '发送系统通知给所有用户',
description: '向所有用户发送系统通知消息',
tags: [TagsMap.adminInform],
requestBody: {
content: {
'application/json': {
schema: SendSystemInformBodySchema
}
}
},
responses: {
200: {
description: '成功发送系统通知',
content: {
'application/json': {
schema: {}
}
}
}
}
}
},
'/support/user/inform/getSystemMsgModal': {
get: {
summary: '获取系统弹窗内容',
description: '获取系统消息弹窗的内容',
tags: [TagsMap.adminInform],
responses: {
200: {
description: '成功获取系统弹窗内容',
content: {
'application/json': {
schema: SystemMsgModalResponseSchema
}
}
}
}
}
},
'/admin/support/user/inform/updateSystemModal': {
post: {
summary: '更新系统弹窗内容',
description: '更新系统消息弹窗的内容',
tags: [TagsMap.adminInform],
requestBody: {
content: {
'application/json': {
schema: UpdateSystemModalBodySchema
}
}
},
responses: {
200: {
description: '成功更新系统弹窗',
content: {
'application/json': {
schema: {}
}
}
}
}
}
},
'/support/user/inform/getOperationalAd': {
get: {
summary: '获取运营广告',
description: '获取运营广告的图片和链接',
tags: [TagsMap.adminInform],
responses: {
200: {
description: '成功获取运营广告',
content: {
'application/json': {
schema: OperationalAdResponseSchema
}
}
}
}
}
},
'/admin/support/user/inform/updateOperationalAd': {
post: {
summary: '更新运营广告',
description: '更新运营广告的图片和链接',
tags: [TagsMap.adminInform],
requestBody: {
content: {
'application/json': {
schema: UpdateOperationalAdBodySchema
}
}
},
responses: {
200: {
description: '成功更新运营广告',
content: {
'application/json': {
schema: {}
}
}
}
}
}
},
'/support/user/inform/getActivityAd': {
get: {
summary: '获取活动广告',
description: '获取活动广告的图片和链接',
tags: [TagsMap.adminInform],
responses: {
200: {
description: '成功获取活动广告',
content: {
'application/json': {
schema: ActivityAdResponseSchema
}
}
}
}
}
},
'/admin/support/user/inform/updateActivityAd': {
post: {
summary: '更新活动广告',
description: '更新活动广告的图片和链接',
tags: [TagsMap.adminInform],
requestBody: {
content: {
'application/json': {
schema: UpdateActivityAdBodySchema
}
}
},
responses: {
200: {
description: '成功更新活动广告',
content: {
'application/json': {
schema: {}
}
}
}
}
}
}
};