feat: 后台抽奖活动管理(Stage 1)

- 服务层:12 个 /v1/admin/lottery 接口封装与 API 类型定义
- 活动列表:状态筛选、上架/暂停(带确认)、编辑、管理、发次数
- 奖品管理:3×3 九宫格可视化编辑、概率预览、保底奖警告、佣金元↔分转换、无限库存
- 规则设置:chance_sources 动态编辑,eligibility 简单/高级(JSON)双模式,本地 rulecaps 校验(深度≤8/节点≤64/≤8KB),Stage 1 未接线警示
- 手动发次数:自动生成幂等 source_ref
- 路由 /dashboard/lottery、Commerce 菜单项、en-US/zh-CN 双语文案
- 对接文档见 vpn/aaaa.txt(Stage 1)
This commit is contained in:
2026-07-09 13:35:35 -07:00
parent dfe1bafd1c
commit ab327f5118
18 changed files with 3315 additions and 0 deletions
+26
View File
@@ -47,6 +47,9 @@ const DashboardOrderIndexLazyRouteImport =
const DashboardMarketingIndexLazyRouteImport = createFileRoute(
'/dashboard/marketing/',
)()
const DashboardLotteryIndexLazyRouteImport = createFileRoute(
'/dashboard/lottery/',
)()
const DashboardInviteManagementIndexLazyRouteImport = createFileRoute(
'/dashboard/invite-management/',
)()
@@ -226,6 +229,14 @@ const DashboardMarketingIndexLazyRoute =
} as any).lazy(() =>
import('./routes/dashboard/marketing/index.lazy').then((d) => d.Route),
)
const DashboardLotteryIndexLazyRoute =
DashboardLotteryIndexLazyRouteImport.update({
id: '/lottery/',
path: '/lottery/',
getParentRoute: () => DashboardRouteLazyRoute,
} as any).lazy(() =>
import('./routes/dashboard/lottery/index.lazy').then((d) => d.Route),
)
const DashboardInviteManagementIndexLazyRoute =
DashboardInviteManagementIndexLazyRouteImport.update({
id: '/invite-management/',
@@ -411,6 +422,7 @@ export interface FileRoutesByFullPath {
'/dashboard/family': typeof DashboardFamilyIndexLazyRoute
'/dashboard/group': typeof DashboardGroupIndexLazyRoute
'/dashboard/invite-management': typeof DashboardInviteManagementIndexLazyRoute
'/dashboard/lottery': typeof DashboardLotteryIndexLazyRoute
'/dashboard/marketing': typeof DashboardMarketingIndexLazyRoute
'/dashboard/order': typeof DashboardOrderIndexLazyRoute
'/dashboard/payment': typeof DashboardPaymentIndexLazyRoute
@@ -448,6 +460,7 @@ export interface FileRoutesByTo {
'/dashboard/family': typeof DashboardFamilyIndexLazyRoute
'/dashboard/group': typeof DashboardGroupIndexLazyRoute
'/dashboard/invite-management': typeof DashboardInviteManagementIndexLazyRoute
'/dashboard/lottery': typeof DashboardLotteryIndexLazyRoute
'/dashboard/marketing': typeof DashboardMarketingIndexLazyRoute
'/dashboard/order': typeof DashboardOrderIndexLazyRoute
'/dashboard/payment': typeof DashboardPaymentIndexLazyRoute
@@ -488,6 +501,7 @@ export interface FileRoutesById {
'/dashboard/family/': typeof DashboardFamilyIndexLazyRoute
'/dashboard/group/': typeof DashboardGroupIndexLazyRoute
'/dashboard/invite-management/': typeof DashboardInviteManagementIndexLazyRoute
'/dashboard/lottery/': typeof DashboardLotteryIndexLazyRoute
'/dashboard/marketing/': typeof DashboardMarketingIndexLazyRoute
'/dashboard/order/': typeof DashboardOrderIndexLazyRoute
'/dashboard/payment/': typeof DashboardPaymentIndexLazyRoute
@@ -529,6 +543,7 @@ export interface FileRouteTypes {
| '/dashboard/family'
| '/dashboard/group'
| '/dashboard/invite-management'
| '/dashboard/lottery'
| '/dashboard/marketing'
| '/dashboard/order'
| '/dashboard/payment'
@@ -566,6 +581,7 @@ export interface FileRouteTypes {
| '/dashboard/family'
| '/dashboard/group'
| '/dashboard/invite-management'
| '/dashboard/lottery'
| '/dashboard/marketing'
| '/dashboard/order'
| '/dashboard/payment'
@@ -605,6 +621,7 @@ export interface FileRouteTypes {
| '/dashboard/family/'
| '/dashboard/group/'
| '/dashboard/invite-management/'
| '/dashboard/lottery/'
| '/dashboard/marketing/'
| '/dashboard/order/'
| '/dashboard/payment/'
@@ -744,6 +761,13 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof DashboardMarketingIndexLazyRouteImport
parentRoute: typeof DashboardRouteLazyRoute
}
'/dashboard/lottery/': {
id: '/dashboard/lottery/'
path: '/lottery'
fullPath: '/dashboard/lottery'
preLoaderRoute: typeof DashboardLotteryIndexLazyRouteImport
parentRoute: typeof DashboardRouteLazyRoute
}
'/dashboard/invite-management/': {
id: '/dashboard/invite-management/'
path: '/invite-management'
@@ -926,6 +950,7 @@ interface DashboardRouteLazyRouteChildren {
DashboardFamilyIndexLazyRoute: typeof DashboardFamilyIndexLazyRoute
DashboardGroupIndexLazyRoute: typeof DashboardGroupIndexLazyRoute
DashboardInviteManagementIndexLazyRoute: typeof DashboardInviteManagementIndexLazyRoute
DashboardLotteryIndexLazyRoute: typeof DashboardLotteryIndexLazyRoute
DashboardMarketingIndexLazyRoute: typeof DashboardMarketingIndexLazyRoute
DashboardOrderIndexLazyRoute: typeof DashboardOrderIndexLazyRoute
DashboardPaymentIndexLazyRoute: typeof DashboardPaymentIndexLazyRoute
@@ -964,6 +989,7 @@ const DashboardRouteLazyRouteChildren: DashboardRouteLazyRouteChildren = {
DashboardGroupIndexLazyRoute: DashboardGroupIndexLazyRoute,
DashboardInviteManagementIndexLazyRoute:
DashboardInviteManagementIndexLazyRoute,
DashboardLotteryIndexLazyRoute: DashboardLotteryIndexLazyRoute,
DashboardMarketingIndexLazyRoute: DashboardMarketingIndexLazyRoute,
DashboardOrderIndexLazyRoute: DashboardOrderIndexLazyRoute,
DashboardPaymentIndexLazyRoute: DashboardPaymentIndexLazyRoute,