feat(抽奖): 开放人工奖(crypto/physical/manual_other) + 领奖工单管理 + REST 对齐

- prize-form: 解禁 crypto/physical/manual_other 并加各自 config;权重改为中奖概率(%),
  合计校验;vpn_duration 加"无订阅时新建订阅套餐"
- prize-grid: 概率合计=100% 校验告警;卡片渲染真实 config(时长/金额)
- claims-panel(新): 领奖工单列表 + 审核通过/驳回/标记发放
- activity-detail: 新增"领奖工单"Tab
- service: 奖品改/删 id 走 /prizes/:id(对齐后端 REST);新增 claims 5 个接口 + 类型
- i18n: 补齐 zh-CN/en-US lottery 文案

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-16 20:29:47 -07:00
parent ea4f6799e9
commit dd837cac7c
8 changed files with 1224 additions and 73 deletions
@@ -9,7 +9,8 @@
"createSuccess": "创建成功",
"detail": {
"prizesTab": "奖品",
"rulesTab": "规则"
"rulesTab": "规则",
"claimsTab": "领奖工单"
},
"edit": "编辑",
"editActivity": "编辑活动",
@@ -58,10 +59,21 @@
"amountYuan": "佣金金额(元)",
"cancel": "取消",
"centerSlotHint": "通常为抽奖按钮",
"claimTtlHint": "用户提交领奖信息的时限,缺省 168 小时(7 天)。",
"claimTtlHours": "领奖窗口(小时)",
"claimTtlInvalid": "领奖窗口(小时)必须为正整数",
"confirm": "确认",
"confirmDelete": "删除",
"createSuccess": "奖品创建成功",
"createTitle": "添加奖品",
"cryptoAmount": "金额",
"cryptoAmountPlaceholder": "例如:0.01",
"cryptoAmountRequired": "请输入金额",
"cryptoCurrency": "币种",
"cryptoCurrencyRequired": "请输入币种",
"cryptoNetworks": "网络",
"cryptoNetworksHint": "逗号分隔,用户领奖时从中选择一个网络。",
"cryptoNetworksRequired": "至少填写一个网络(逗号分隔)",
"daysSuffix": "天",
"delete": "删除",
"deleteDescription": "该奖品将从九宫格中移除,此操作不可撤销。",
@@ -70,13 +82,16 @@
"durationDays": "时长(天)",
"durationDaysPlaceholder": "例如:1",
"durationDaysRequired": "时长天数必须为正整数",
"durationSummary": "{{days}} 天",
"editTitle": "编辑奖品",
"fallbackBadge": "保底",
"fallbackIgnoresWeight": "保底奖品不参与权重计算",
"fallbackIgnoresWeight": "保底奖品不参与概率(永不被随机抽中)",
"hoursSuffix": "小时",
"iconUrl": "图标 URL",
"iconUrlInvalid": "请输入有效的 URL",
"isFallback": "保底奖品",
"isFallbackHint": "限量奖品抽完后发放该奖品",
"manualPrizeHint": "人工奖:用户先提交领奖信息,运营在「领奖工单」页审核并标记发放/发货。",
"name": "奖品名称",
"namePlaceholder": "例如:1 天时长卡",
"nameRequired": "请输入奖品名称",
@@ -85,11 +100,18 @@
"noRandomPrizes": "暂无参与随机抽取的奖品",
"noneHint": "无需额外配置。建议开启保底,限量奖品抽完后用户将始终抽中该奖品。",
"probabilityPreview": "概率预览",
"probabilityTotal": "合计",
"selectType": "选择类型",
"skuName": "物品名称(可选)",
"skuNamePlaceholder": "例如:限量 T 恤",
"slotLabel": "格子",
"soldOutBadge": "已抽完",
"stage2Hint": "Stage 2 开放",
"stockShort": "库存",
"subscribePlan": "无订阅时新建套餐",
"subscribePlanHint": "当用户无活跃订阅时,按该套餐新建订阅并发放时长;留空则跳过发放。",
"subscribePlanPlaceholder": "不选:用户无活跃订阅时跳过发放",
"totalNot100Hint": "当前可抽奖品概率合计 {{total}}%。请调整各奖品的中奖概率,使其精确等于 100%。",
"totalNot100Title": "概率合计必须为 100%",
"totalStock": "总库存",
"totalStockPlaceholder": "例如:100",
"totalStockRequired": "总库存必须为正整数",
@@ -104,11 +126,12 @@
"typeVpnDuration": "免费时长",
"unlimitedStock": "无限库存",
"updateSuccess": "奖品更新成功",
"weight": "权重",
"weightHint": "权重为 0 时仅展示不参与随机抽取",
"weightInteger": "权重必须为整数",
"weightMin": "权重不能小于 0",
"weightShort": "权重",
"weight": "中奖概率(%",
"weightHint": "九宫格内的中奖概率。所有参与随机的奖品合计须为 100%。0 = 展示不参与随机",
"weightInteger": "概率必须为整数",
"weightMax": "概率不能超过 100",
"weightMin": "概率不能小于 0",
"weightShort": "概率",
"yuanSuffix": "元"
},
"publish": "上架",
@@ -177,5 +200,50 @@
"statusAll": "全部",
"statusLabel": "状态",
"title": "标题",
"updateSuccess": "更新成功"
"updateSuccess": "更新成功",
"claim": {
"approve": "通过",
"approveDescription": "通过后工单进入待发放/发货阶段。",
"approveSuccess": "工单已通过",
"approveTitle": "确认通过该工单?",
"cancel": "取消",
"claimData": "领奖信息",
"confirm": "确认",
"confirmMarkPaid": "确认",
"confirmReject": "确认驳回",
"createdAt": "中奖时间",
"deliveryRef": "物流单号",
"deliveryRefPlaceholder": "快递单号",
"deliveryRefRequired": "实物奖品必须填写物流单号",
"expiresAt": "过期时间",
"filterStatus": "状态",
"filterType": "类型",
"filterUserId": "用户 ID",
"fulfillment": "交易/物流单号",
"markPaid": "标记发放",
"markPaidDescription": "加密货币需填交易哈希;实物需填物流单号;人工其他至少填一项。",
"markPaidSuccess": "已标记发放",
"markPaidTitle": "标记为已发放",
"oneRefRequired": "至少填写一项",
"prize": "奖品",
"reason": "驳回原因",
"reasonPlaceholder": "填写驳回原因,用户端会看到",
"reasonRequired": "请填写驳回原因",
"reasonTooLong": "驳回原因不能超过 512 字",
"reject": "驳回",
"rejectDescription": "驳回原因会展示给用户,用户可重新提交。",
"rejectSuccess": "工单已驳回",
"rejectTitle": "驳回工单",
"status": "状态",
"statusExpired": "已过期",
"statusPaid": "已发放",
"statusPaying": "待发放/发货",
"statusPending": "待用户填写",
"statusRejected": "已驳回",
"statusReviewing": "待审核",
"tableTitle": "领奖工单",
"txHash": "交易哈希",
"txHashRequired": "加密货币奖品必须填写交易哈希",
"user": "用户"
}
}