From 825fe47367e519ae471749114f10e2338f1b45d8 Mon Sep 17 00:00:00 2001 From: zhx Date: Fri, 5 Jun 2026 19:53:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=81=AB=E7=AE=AD=E9=87=8D=E6=96=B0=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/admin-openapi.json | 14 +-- src/app/navigation/menu.js | 2 +- src/app/permissions.ts | 6 +- src/app/router/routeConfig.ts | 4 +- .../{room-treasure => room-rocket}/api.ts | 109 ++++++++-------- .../components/RoomRocketConfigEditor.jsx} | 116 +++++++++--------- .../components/RoomRocketConfigSummary.jsx} | 10 +- .../hooks/useRoomRocketPage.js} | 78 ++++++------ .../pages/RoomRocketPage.jsx} | 22 ++-- .../permissions.js | 6 +- .../room-rocket.module.css} | 20 +-- src/features/room-rocket/routes.js | 12 ++ .../{room-treasure => room-rocket}/schema.ts | 56 ++++----- src/features/room-treasure/routes.js | 12 -- src/shared/api/generated/endpoints.ts | 24 ++-- src/shared/api/generated/schema.d.ts | 10 +- 16 files changed, 250 insertions(+), 251 deletions(-) rename src/features/{room-treasure => room-rocket}/api.ts (60%) rename src/features/{room-treasure/components/RoomTreasureConfigEditor.jsx => room-rocket/components/RoomRocketConfigEditor.jsx} (84%) rename src/features/{room-treasure/components/RoomTreasureConfigSummary.jsx => room-rocket/components/RoomRocketConfigSummary.jsx} (89%) rename src/features/{room-treasure/hooks/useRoomTreasurePage.js => room-rocket/hooks/useRoomRocketPage.js} (70%) rename src/features/{room-treasure/pages/RoomTreasurePage.jsx => room-rocket/pages/RoomRocketPage.jsx} (87%) rename src/features/{room-treasure => room-rocket}/permissions.js (50%) rename src/features/{room-treasure/room-treasure.module.css => room-rocket/room-rocket.module.css} (96%) create mode 100644 src/features/room-rocket/routes.js rename src/features/{room-treasure => room-rocket}/schema.ts (70%) delete mode 100644 src/features/room-treasure/routes.js diff --git a/contracts/admin-openapi.json b/contracts/admin-openapi.json index c7d1970..48452d4 100644 --- a/contracts/admin-openapi.json +++ b/contracts/admin-openapi.json @@ -326,26 +326,26 @@ "x-permissions": ["registration-reward:update"] } }, - "/admin/activity/room-treasure/config": { + "/admin/activity/room-rocket/config": { "get": { - "operationId": "getRoomTreasureConfig", + "operationId": "getRoomRocketConfig", "responses": { "200": { "$ref": "#/components/responses/EmptyResponse" } }, - "x-permission": "room-treasure:view", - "x-permissions": ["room-treasure:view"] + "x-permission": "room-rocket:view", + "x-permissions": ["room-rocket:view"] }, "put": { - "operationId": "updateRoomTreasureConfig", + "operationId": "updateRoomRocketConfig", "responses": { "200": { "$ref": "#/components/responses/EmptyResponse" } }, - "x-permission": "room-treasure:update", - "x-permissions": ["room-treasure:update"] + "x-permission": "room-rocket:update", + "x-permissions": ["room-rocket:update"] } }, "/admin/activity/seven-day-checkin/claims": { diff --git a/src/app/navigation/menu.js b/src/app/navigation/menu.js index 8104840..9c3ab4a 100644 --- a/src/app/navigation/menu.js +++ b/src/app/navigation/menu.js @@ -163,7 +163,7 @@ export const fallbackNavigation = [ routeNavItem("registration-reward", { icon: CardGiftcardOutlined }), routeNavItem("first-recharge-reward", { icon: CardGiftcardOutlined }), routeNavItem("seven-day-checkin", { icon: EventAvailableOutlined }), - routeNavItem("room-treasure", { icon: RedeemOutlined }), + routeNavItem("room-rocket", { icon: RedeemOutlined }), routeNavItem("user-leaderboard", { icon: LeaderboardOutlined }), routeNavItem("red-packet", { icon: RedeemOutlined }), routeNavItem("vip-config", { icon: WorkspacePremiumOutlined }), diff --git a/src/app/permissions.ts b/src/app/permissions.ts index 729a060..9e8c4d5 100644 --- a/src/app/permissions.ts +++ b/src/app/permissions.ts @@ -127,8 +127,8 @@ export const PERMISSIONS = { sevenDayCheckInUpdate: "seven-day-checkin:update", luckyGiftView: "lucky-gift:view", luckyGiftUpdate: "lucky-gift:update", - roomTreasureView: "room-treasure:view", - roomTreasureUpdate: "room-treasure:update", + roomRocketView: "room-rocket:view", + roomRocketUpdate: "room-rocket:update", userLeaderboardView: "user-leaderboard:view", redPacketView: "red-packet:view", redPacketUpdate: "red-packet:update", @@ -186,7 +186,7 @@ export const MENU_CODES = { firstRechargeReward: "first-recharge-reward", achievementConfig: "achievement-config", sevenDayCheckIn: "seven-day-checkin", - roomTreasure: "room-treasure", + roomRocket: "room-rocket", userLeaderboard: "user-leaderboard", redPacket: "red-packet", vipConfig: "vip-config", diff --git a/src/app/router/routeConfig.ts b/src/app/router/routeConfig.ts index ff55d10..b854df5 100644 --- a/src/app/router/routeConfig.ts +++ b/src/app/router/routeConfig.ts @@ -20,7 +20,7 @@ import { regionBlockRoutes } from "@/features/region-blocks/routes.js"; import { resourceRoutes } from "@/features/resources/routes.js"; import { rolesRoutes } from "@/features/roles/routes.js"; import { roomRoutes } from "@/features/rooms/routes.js"; -import { roomTreasureRoutes } from "@/features/room-treasure/routes.js"; +import { roomRocketRoutes } from "@/features/room-rocket/routes.js"; import { sevenDayCheckInRoutes } from "@/features/seven-day-checkin/routes.js"; import { userLeaderboardRoutes } from "@/features/user-leaderboard/routes.js"; import { usersRoutes } from "@/features/users/routes.js"; @@ -42,7 +42,7 @@ export const adminRoutes: AdminRoute[] = [ ...registrationRewardRoutes, ...firstRechargeRewardRoutes, ...sevenDayCheckInRoutes, - ...roomTreasureRoutes, + ...roomRocketRoutes, ...userLeaderboardRoutes, ...redPacketRoutes, ...vipConfigRoutes, diff --git a/src/features/room-treasure/api.ts b/src/features/room-rocket/api.ts similarity index 60% rename from src/features/room-treasure/api.ts rename to src/features/room-rocket/api.ts index 2348798..b3e973c 100644 --- a/src/features/room-treasure/api.ts +++ b/src/features/room-rocket/api.ts @@ -1,7 +1,7 @@ import { API_ENDPOINTS, API_OPERATIONS, apiEndpointPath } from "@/shared/api/generated/endpoints"; import { apiRequest } from "@/shared/api/request"; -export interface RoomTreasureRewardItemDto { +export interface RoomRocketRewardItemDto { rewardItemId: string; resourceGroupId: number; weight: number; @@ -9,60 +9,60 @@ export interface RoomTreasureRewardItemDto { iconUrl?: string; } -export interface RoomTreasureLevelDto { +export interface RoomRocketLevelDto { level: number; - energyThreshold: number; + fuelThreshold: number; coverUrl?: string; animationUrl?: string; - openingAnimationUrl?: string; - openedImageUrl?: string; - inRoomRewards: RoomTreasureRewardItemDto[]; - top1Rewards: RoomTreasureRewardItemDto[]; - igniterRewards: RoomTreasureRewardItemDto[]; + launchAnimationUrl?: string; + launchedImageUrl?: string; + inRoomRewards: RoomRocketRewardItemDto[]; + top1Rewards: RoomRocketRewardItemDto[]; + igniterRewards: RoomRocketRewardItemDto[]; } -export interface GiftEnergyRuleDto { +export interface GiftFuelRuleDto { ruleId: string; giftId?: string; giftTypeCode?: string; multiplierPpm: number; - fixedEnergy: number; + fixedFuel: number; excluded: boolean; } -export interface RoomTreasureConfigDto { +export interface RoomRocketConfigDto { appCode?: string; enabled: boolean; configVersion: number; - energySource: string; - openDelayMs: number; + fuelSource: string; + launchDelayMs: number; broadcastEnabled: boolean; broadcastScope: string; broadcastDelayMs: number; rewardStackPolicy: string; - levels: RoomTreasureLevelDto[]; - giftEnergyRules: GiftEnergyRuleDto[]; + levels: RoomRocketLevelDto[]; + giftFuelRules: GiftFuelRuleDto[]; updatedByAdminId?: number; createdAtMs?: number; updatedAtMs?: number; } -export type RoomTreasureConfigPayload = Pick< - RoomTreasureConfigDto, +export type RoomRocketConfigPayload = Pick< + RoomRocketConfigDto, | "broadcastDelayMs" | "broadcastEnabled" | "broadcastScope" | "enabled" - | "energySource" - | "giftEnergyRules" + | "fuelSource" + | "giftFuelRules" | "levels" - | "openDelayMs" + | "launchDelayMs" | "rewardStackPolicy" >; -type RawReward = RoomTreasureRewardItemDto & Record; +type RawReward = RoomRocketRewardItemDto & Record; type RawLevel = Omit< - RoomTreasureLevelDto, + RoomRocketLevelDto, "igniterRewards" | "inRoomRewards" | "top1Rewards" > & { igniterRewards?: RawReward[]; @@ -72,96 +72,95 @@ type RawLevel = Omit< top1Rewards?: RawReward[]; top1_rewards?: RawReward[]; } & Record; -type RawGiftEnergyRule = GiftEnergyRuleDto & Record; -type RawConfig = Omit & { - giftEnergyRules?: RawGiftEnergyRule[]; - gift_energy_rules?: RawGiftEnergyRule[]; +type RawGiftFuelRule = GiftFuelRuleDto & Record; +type RawConfig = Omit & { + giftFuelRules?: RawGiftFuelRule[]; levels?: RawLevel[]; } & Record; -export function getRoomTreasureConfig(): Promise { - const endpoint = API_ENDPOINTS.getRoomTreasureConfig; - return apiRequest(apiEndpointPath(API_OPERATIONS.getRoomTreasureConfig), { +export function getRoomRocketConfig(): Promise { + const endpoint = API_ENDPOINTS.getRoomRocketConfig; + return apiRequest(apiEndpointPath(API_OPERATIONS.getRoomRocketConfig), { method: endpoint.method, }).then(normalizeConfig); } -export function updateRoomTreasureConfig(payload: RoomTreasureConfigPayload): Promise { - const endpoint = API_ENDPOINTS.updateRoomTreasureConfig; - return apiRequest(apiEndpointPath(API_OPERATIONS.updateRoomTreasureConfig), { +export function updateRoomRocketConfig(payload: RoomRocketConfigPayload): Promise { + const endpoint = API_ENDPOINTS.updateRoomRocketConfig; + return apiRequest(apiEndpointPath(API_OPERATIONS.updateRoomRocketConfig), { body: payload, method: endpoint.method, }).then(normalizeConfig); } -function normalizeConfig(item: RawConfig): RoomTreasureConfigDto { +function normalizeConfig(item: RawConfig): RoomRocketConfigDto { return { appCode: stringValue(item.appCode ?? item.app_code), enabled: Boolean(item.enabled), configVersion: numberValue(item.configVersion ?? item.config_version), - energySource: normalizeEnergySource(item.energySource ?? item.energy_source), - openDelayMs: numberValue(item.openDelayMs ?? item.open_delay_ms), + fuelSource: normalizeFuelSource(item.fuelSource), + launchDelayMs: numberValue(item.launchDelayMs ?? item.launch_delay_ms), broadcastEnabled: Boolean(item.broadcastEnabled ?? item.broadcast_enabled), broadcastScope: stringValue(item.broadcastScope ?? item.broadcast_scope) || "region", broadcastDelayMs: numberValue(item.broadcastDelayMs ?? item.broadcast_delay_ms), rewardStackPolicy: stringValue(item.rewardStackPolicy ?? item.reward_stack_policy) || "allow_stack", levels: normalizeLevels(item.levels), - giftEnergyRules: normalizeGiftEnergyRules(item.giftEnergyRules ?? item.gift_energy_rules), + giftFuelRules: normalizeGiftFuelRules(item.giftFuelRules), updatedByAdminId: numberValue(item.updatedByAdminId ?? item.updated_by_admin_id), createdAtMs: numberValue(item.createdAtMs ?? item.created_at_ms), updatedAtMs: numberValue(item.updatedAtMs ?? item.updated_at_ms), }; } -function normalizeEnergySource(value: unknown) { +function normalizeFuelSource(value: unknown) { const source = stringValue(value); - if (!source || source === "gift_point_added") { + if (!source) { return "heat_value"; } return source; } -function normalizeLevels(levels?: RawLevel[]): RoomTreasureLevelDto[] { - const byLevel = new Map(); +function normalizeLevels(levels?: RawLevel[]): RoomRocketLevelDto[] { + const byLevel = new Map(); for (const level of levels || []) { const levelNo = numberValue(level.level); - if (levelNo < 1 || levelNo > 7) { + if (levelNo < 1 || levelNo > 5) { continue; } byLevel.set(levelNo, { level: levelNo, - energyThreshold: numberValue(level.energyThreshold ?? level.energy_threshold), + fuelThreshold: numberValue(level.fuelThreshold), coverUrl: stringValue(level.coverUrl ?? level.cover_url), animationUrl: stringValue(level.animationUrl ?? level.animation_url), - openingAnimationUrl: stringValue(level.openingAnimationUrl ?? level.opening_animation_url), - openedImageUrl: stringValue(level.openedImageUrl ?? level.opened_image_url), + launchAnimationUrl: stringValue(level.launchAnimationUrl ?? level.launch_animation_url), + launchedImageUrl: stringValue(level.launchedImageUrl ?? level.launched_image_url), inRoomRewards: normalizeRewards(level.inRoomRewards ?? level.in_room_rewards), top1Rewards: normalizeRewards(level.top1Rewards ?? level.top1_rewards), igniterRewards: normalizeRewards(level.igniterRewards ?? level.igniter_rewards), }); } - return Array.from({ length: 7 }, (_, index) => { + return Array.from({ length: 5 }, (_, index) => { const level = index + 1; return byLevel.get(level) || defaultLevel(level); }); } -function defaultLevel(level: number): RoomTreasureLevelDto { - const thresholds = [1000, 3000, 6000, 10000, 15000, 21000, 28000]; +function defaultLevel(level: number): RoomRocketLevelDto { + const thresholds = [1000, 3000, 6000, 10000, 15000]; return { level, - energyThreshold: thresholds[level - 1] || 0, + fuelThreshold: thresholds[level - 1] || 0, coverUrl: "", animationUrl: "", - openingAnimationUrl: "", - openedImageUrl: "", + launchAnimationUrl: "", + launchedImageUrl: "", inRoomRewards: [], top1Rewards: [], igniterRewards: [], }; } -function normalizeRewards(rewards?: RawReward[]): RoomTreasureRewardItemDto[] { +function normalizeRewards(rewards?: RawReward[]): RoomRocketRewardItemDto[] { return (rewards || []) .map((reward, index) => ({ rewardItemId: stringValue(reward.rewardItemId ?? reward.reward_item_id) || `reward_${index + 1}`, @@ -173,17 +172,17 @@ function normalizeRewards(rewards?: RawReward[]): RoomTreasureRewardItemDto[] { .filter((reward) => reward.resourceGroupId > 0 || reward.weight > 0 || reward.displayName || reward.iconUrl); } -function normalizeGiftEnergyRules(rules?: RawGiftEnergyRule[]): GiftEnergyRuleDto[] { +function normalizeGiftFuelRules(rules?: RawGiftFuelRule[]): GiftFuelRuleDto[] { return (rules || []) .map((rule, index) => ({ - ruleId: stringValue(rule.ruleId ?? rule.rule_id) || `gift_energy_rule_${index + 1}`, + ruleId: stringValue(rule.ruleId ?? rule.rule_id) || `gift_fuel_rule_${index + 1}`, giftId: stringValue(rule.giftId ?? rule.gift_id), giftTypeCode: stringValue(rule.giftTypeCode ?? rule.gift_type_code), multiplierPpm: numberValue(rule.multiplierPpm ?? rule.multiplier_ppm), - fixedEnergy: numberValue(rule.fixedEnergy ?? rule.fixed_energy), + fixedFuel: numberValue(rule.fixedFuel), excluded: Boolean(rule.excluded), })) - .filter((rule) => rule.giftId || rule.giftTypeCode || rule.multiplierPpm > 0 || rule.fixedEnergy > 0 || rule.excluded); + .filter((rule) => rule.giftId || rule.giftTypeCode || rule.multiplierPpm > 0 || rule.fixedFuel > 0 || rule.excluded); } function stringValue(value: unknown) { diff --git a/src/features/room-treasure/components/RoomTreasureConfigEditor.jsx b/src/features/room-rocket/components/RoomRocketConfigEditor.jsx similarity index 84% rename from src/features/room-treasure/components/RoomTreasureConfigEditor.jsx rename to src/features/room-rocket/components/RoomRocketConfigEditor.jsx index 0661c92..0126618 100644 --- a/src/features/room-treasure/components/RoomTreasureConfigEditor.jsx +++ b/src/features/room-rocket/components/RoomRocketConfigEditor.jsx @@ -13,9 +13,9 @@ import { Button } from "@/shared/ui/Button.jsx"; import { IconButton } from "@/shared/ui/IconButton.jsx"; import { ResourceGroupSelectField } from "@/shared/ui/ResourceGroupSelectDrawer.jsx"; import { UploadField } from "@/shared/ui/UploadField.jsx"; -import styles from "@/features/room-treasure/room-treasure.module.css"; +import styles from "@/features/room-rocket/room-rocket.module.css"; -const energySourceOptions = [ +const fuelSourceOptions = [ ["heat_value", "礼物贡献"], ]; @@ -36,7 +36,7 @@ const rewardTabs = [ ["igniterRewards", "点火人"], ]; -export function RoomTreasureConfigEditor({ +export function RoomRocketConfigEditor({ abilities, configLoading, configSaving, @@ -64,8 +64,8 @@ export function RoomTreasureConfigEditor({ 返回
- 房间宝箱配置 - 编辑 7 级宝箱物料、奖励池和礼物能量规则 + 房间火箭配置 + 编辑 5 级火箭物料、奖励池和礼物燃料规则
@@ -85,30 +85,30 @@ export function RoomTreasureConfigEditor({ updateRoot(setForm, "enabled", event.target.checked)} /> updateRoot(setForm, "broadcastEnabled", event.target.checked)} /> updateRoot(setForm, "energySource", value)} + label="燃料来源" + options={fuelSourceOptions} + value={form.fuelSource} + onChange={(value) => updateRoot(setForm, "fuelSource", value)} /> updateRoot(setForm, "openDelayMs", event.target.value)} + value={form.launchDelayMs} + onChange={(event) => updateRoot(setForm, "launchDelayMs", event.target.value)} /> setEditorTab(value)}> - + {editorTab === "levels" ? (
@@ -161,17 +161,17 @@ export function RoomTreasureConfigEditor({
L{level.level} - 当前等级送礼溢出不进入下一级,倒计时期间送礼不累计能量 + 当前等级溢出燃料作废,点火后下一等级立即开始
- updateLevel(setForm, activeLevelIndex, { energyThreshold: event.target.value }) + updateLevel(setForm, activeLevelIndex, { fuelThreshold: event.target.value }) } />
@@ -186,7 +186,7 @@ export function RoomTreasureConfigEditor({ updateLevel(setForm, activeLevelIndex, { animationUrl: value })} @@ -194,19 +194,19 @@ export function RoomTreasureConfigEditor({ - updateLevel(setForm, activeLevelIndex, { openingAnimationUrl: value }) + updateLevel(setForm, activeLevelIndex, { launchAnimationUrl: value }) } /> updateLevel(setForm, activeLevelIndex, { openedImageUrl: value })} + label="发射后图" + value={level.launchedImageUrl} + onChange={(value) => updateLevel(setForm, activeLevelIndex, { launchedImageUrl: value })} />
@@ -242,7 +242,7 @@ export function RoomTreasureConfigEditor({ ) : null}
) : ( - + )}
@@ -254,15 +254,15 @@ function LevelNavItem({ active, level, onClick }) { const materialCount = [ level.coverUrl, level.animationUrl, - level.openingAnimationUrl, - level.openedImageUrl, + level.launchAnimationUrl, + level.launchedImageUrl, ].filter(Boolean).length; const rewardCount = rewardTabs.filter(([key]) => (level[key] || []).length > 0).length; return ( ); @@ -334,38 +334,38 @@ function RewardTable({ disabled, levelIndex, poolKey, resourceGroups, rewards, s ); } -function EnergyRuleEditor({ disabled, form, setForm }) { +function FuelRuleEditor({ disabled, form, setForm }) { return ( -
-
- 未命中特殊规则的礼物按基础能量来源计算 -
- {form.giftEnergyRules.length ? ( -
-
+ {form.giftFuelRules.length ? ( +
+
礼物 ID 礼物类型 倍率 ppm - 固定能量 + 固定燃料 排除
- {form.giftEnergyRules.map((rule, index) => ( -
+ {form.giftFuelRules.map((rule, index) => ( +
updateEnergyRule(setForm, index, { giftId: event.target.value })} + onChange={(event) => updateFuelRule(setForm, index, { giftId: event.target.value })} /> updateEnergyRule(setForm, index, { giftTypeCode: event.target.value })} + onChange={(event) => updateFuelRule(setForm, index, { giftTypeCode: event.target.value })} /> updateEnergyRule(setForm, index, { multiplierPpm: event.target.value })} + onChange={(event) => updateFuelRule(setForm, index, { multiplierPpm: event.target.value })} /> updateEnergyRule(setForm, index, { fixedEnergy: event.target.value })} + value={rule.fixedFuel} + onChange={(event) => updateFuelRule(setForm, index, { fixedFuel: event.target.value })} /> updateEnergyRule(setForm, index, { excluded: event.target.checked })} + onChange={(event) => updateFuelRule(setForm, index, { excluded: event.target.checked })} /> @@ -396,7 +396,7 @@ function EnergyRuleEditor({ disabled, form, setForm }) { label="删除规则" tone="danger" type="button" - onClick={() => removeEnergyRule(setForm, index)} + onClick={() => removeFuelRule(setForm, index)} > @@ -501,36 +501,36 @@ function removeReward(setForm, levelIndex, poolKey, rewardIndex) { })); } -function addEnergyRule(setForm) { +function addFuelRule(setForm) { setForm((current) => ({ ...current, - giftEnergyRules: [ - ...current.giftEnergyRules, + giftFuelRules: [ + ...current.giftFuelRules, { excluded: false, - fixedEnergy: "0", + fixedFuel: "0", giftId: "", giftTypeCode: "", multiplierPpm: "1000000", - ruleId: `gift_energy_rule_${Date.now()}`, + ruleId: `gift_fuel_rule_${Date.now()}`, }, ], })); } -function updateEnergyRule(setForm, index, patch) { +function updateFuelRule(setForm, index, patch) { setForm((current) => ({ ...current, - giftEnergyRules: current.giftEnergyRules.map((rule, itemIndex) => + giftFuelRules: current.giftFuelRules.map((rule, itemIndex) => itemIndex === index ? { ...rule, ...patch } : rule, ), })); } -function removeEnergyRule(setForm, index) { +function removeFuelRule(setForm, index) { setForm((current) => ({ ...current, - giftEnergyRules: current.giftEnergyRules.filter((_, itemIndex) => itemIndex !== index), + giftFuelRules: current.giftFuelRules.filter((_, itemIndex) => itemIndex !== index), })); } diff --git a/src/features/room-treasure/components/RoomTreasureConfigSummary.jsx b/src/features/room-rocket/components/RoomRocketConfigSummary.jsx similarity index 89% rename from src/features/room-treasure/components/RoomTreasureConfigSummary.jsx rename to src/features/room-rocket/components/RoomRocketConfigSummary.jsx index 83afeee..1bc4dad 100644 --- a/src/features/room-treasure/components/RoomTreasureConfigSummary.jsx +++ b/src/features/room-rocket/components/RoomRocketConfigSummary.jsx @@ -3,7 +3,7 @@ import RefreshOutlined from "@mui/icons-material/RefreshOutlined"; import { Button } from "@/shared/ui/Button.jsx"; import { AdminActionIconButton } from "@/shared/ui/AdminListLayout.jsx"; import { formatMillis } from "@/shared/utils/time.js"; -import styles from "@/features/room-treasure/room-treasure.module.css"; +import styles from "@/features/room-rocket/room-rocket.module.css"; const broadcastScopeLabels = { global: "全局广播", @@ -16,18 +16,18 @@ const rewardStackPolicyLabels = { priority_only: "优先级单份", }; -export function RoomTreasureConfigSummary({ canUpdate, config, configLoading, onEdit, onRefresh }) { +export function RoomRocketConfigSummary({ canUpdate, config, configLoading, onEdit, onRefresh }) { return (
- 房间宝箱配置 + 房间火箭配置
{config?.configVersion || "-"} - {formatSeconds(config?.openDelayMs)} + {formatSeconds(config?.launchDelayMs)} {config?.broadcastEnabled ? broadcastScopeLabels[config.broadcastScope] || config.broadcastScope : "关闭"} @@ -93,7 +93,7 @@ function LevelPreview({ config, loading }) { {(config?.levels || []).map((level) => ( L{level.level} - {formatNumber(level.energyThreshold)} + {formatNumber(level.fuelThreshold)} ))}
diff --git a/src/features/room-treasure/hooks/useRoomTreasurePage.js b/src/features/room-rocket/hooks/useRoomRocketPage.js similarity index 70% rename from src/features/room-treasure/hooks/useRoomTreasurePage.js rename to src/features/room-rocket/hooks/useRoomRocketPage.js index 454475e..a4e9a54 100644 --- a/src/features/room-treasure/hooks/useRoomTreasurePage.js +++ b/src/features/room-rocket/hooks/useRoomRocketPage.js @@ -2,20 +2,20 @@ import { useCallback, useEffect, useState } from "react"; import { parseForm } from "@/shared/forms/validation"; import { useToast } from "@/shared/ui/ToastProvider.jsx"; import { listResourceGroups } from "@/features/resources/api"; -import { getRoomTreasureConfig, updateRoomTreasureConfig } from "@/features/room-treasure/api"; -import { useRoomTreasureAbilities } from "@/features/room-treasure/permissions.js"; -import { roomTreasureConfigFormSchema } from "@/features/room-treasure/schema"; +import { getRoomRocketConfig, updateRoomRocketConfig } from "@/features/room-rocket/api"; +import { useRoomRocketAbilities } from "@/features/room-rocket/permissions.js"; +import { roomRocketConfigFormSchema } from "@/features/room-rocket/schema"; -const defaultThresholds = [1000, 3000, 6000, 10000, 15000, 21000, 28000]; +const defaultThresholds = [1000, 3000, 6000, 10000, 15000]; -export function useRoomTreasurePage() { - const abilities = useRoomTreasureAbilities(); +export function useRoomRocketPage() { + const abilities = useRoomRocketAbilities(); const { showToast } = useToast(); const [config, setConfig] = useState(null); const [configError, setConfigError] = useState(""); const [configLoading, setConfigLoading] = useState(false); const [configSaving, setConfigSaving] = useState(false); - const [form, setForm] = useState(emptyRoomTreasureForm()); + const [form, setForm] = useState(emptyRoomRocketForm()); const [resourceGroups, setResourceGroups] = useState([]); const reloadConfig = useCallback(async () => { @@ -23,14 +23,14 @@ export function useRoomTreasurePage() { setConfigError(""); try { const [nextConfig, groups] = await Promise.all([ - getRoomTreasureConfig(), + getRoomRocketConfig(), listResourceGroups({ page: 1, page_size: 100, status: "active" }), ]); setConfig(nextConfig); setForm(formFromConfig(nextConfig)); setResourceGroups(groups.items || []); } catch (err) { - const message = err.message || "加载房间宝箱配置失败"; + const message = err.message || "加载房间火箭配置失败"; setConfigError(message); showToast(message, "error"); } finally { @@ -43,7 +43,7 @@ export function useRoomTreasurePage() { }, [reloadConfig]); const resetForm = useCallback(() => { - setForm(config ? formFromConfig(config) : emptyRoomTreasureForm()); + setForm(config ? formFromConfig(config) : emptyRoomRocketForm()); }, [config]); const submitConfig = async (event, onSaved) => { @@ -53,14 +53,14 @@ export function useRoomTreasurePage() { } setConfigSaving(true); try { - const parsed = parseForm(roomTreasureConfigFormSchema, form); - const saved = await updateRoomTreasureConfig(payloadFromForm(parsed)); + const parsed = parseForm(roomRocketConfigFormSchema, form); + const saved = await updateRoomRocketConfig(payloadFromForm(parsed)); setConfig(saved); setForm(formFromConfig(saved)); - showToast("房间宝箱配置已保存", "success"); + showToast("房间火箭配置已保存", "success"); onSaved?.(saved); } catch (err) { - showToast(err.message || "保存房间宝箱配置失败", "error"); + showToast(err.message || "保存房间火箭配置失败", "error"); } finally { setConfigSaving(false); } @@ -81,61 +81,61 @@ export function useRoomTreasurePage() { }; } -export function emptyRoomTreasureForm() { +export function emptyRoomRocketForm() { return { broadcastDelayMs: "0", broadcastEnabled: true, broadcastScope: "region", enabled: false, - energySource: "heat_value", - giftEnergyRules: [], - levels: Array.from({ length: 7 }, (_, index) => ({ + fuelSource: "heat_value", + giftFuelRules: [], + levels: Array.from({ length: 5 }, (_, index) => ({ animationUrl: "", coverUrl: "", - energyThreshold: String(defaultThresholds[index]), + fuelThreshold: String(defaultThresholds[index]), igniterRewards: [], inRoomRewards: [], level: index + 1, - openedImageUrl: "", - openingAnimationUrl: "", + launchedImageUrl: "", + launchAnimationUrl: "", top1Rewards: [], })), - openDelayMs: "30000", + launchDelayMs: "30000", rewardStackPolicy: "allow_stack", }; } function formFromConfig(config) { - const fallback = emptyRoomTreasureForm(); + const fallback = emptyRoomRocketForm(); return { broadcastDelayMs: String(config?.broadcastDelayMs ?? fallback.broadcastDelayMs), broadcastEnabled: Boolean(config?.broadcastEnabled), broadcastScope: config?.broadcastScope || fallback.broadcastScope, enabled: Boolean(config?.enabled), - energySource: config?.energySource || fallback.energySource, - giftEnergyRules: (config?.giftEnergyRules || []).map((rule, index) => ({ + fuelSource: config?.fuelSource || fallback.fuelSource, + giftFuelRules: (config?.giftFuelRules || []).map((rule, index) => ({ excluded: Boolean(rule.excluded), - fixedEnergy: String(rule.fixedEnergy || 0), + fixedFuel: String(rule.fixedFuel || 0), giftId: rule.giftId || "", giftTypeCode: rule.giftTypeCode || "", multiplierPpm: String(rule.multiplierPpm || 0), - ruleId: rule.ruleId || `gift_energy_rule_${index + 1}`, + ruleId: rule.ruleId || `gift_fuel_rule_${index + 1}`, })), levels: fallback.levels.map((fallbackLevel) => { const level = config?.levels?.find((item) => Number(item.level) === fallbackLevel.level) || fallbackLevel; return { animationUrl: level.animationUrl || "", coverUrl: level.coverUrl || "", - energyThreshold: String(level.energyThreshold || fallbackLevel.energyThreshold), + fuelThreshold: String(level.fuelThreshold || fallbackLevel.fuelThreshold), igniterRewards: rewardsToForm(level.igniterRewards), inRoomRewards: rewardsToForm(level.inRoomRewards), level: fallbackLevel.level, - openedImageUrl: level.openedImageUrl || "", - openingAnimationUrl: level.openingAnimationUrl || "", + launchedImageUrl: level.launchedImageUrl || "", + launchAnimationUrl: level.launchAnimationUrl || "", top1Rewards: rewardsToForm(level.top1Rewards), }; }), - openDelayMs: String(config?.openDelayMs ?? fallback.openDelayMs), + launchDelayMs: String(config?.launchDelayMs ?? fallback.launchDelayMs), rewardStackPolicy: config?.rewardStackPolicy || fallback.rewardStackPolicy, }; } @@ -156,29 +156,29 @@ function payloadFromForm(form) { broadcastEnabled: Boolean(form.broadcastEnabled), broadcastScope: form.broadcastScope, enabled: Boolean(form.enabled), - energySource: form.energySource, - giftEnergyRules: form.giftEnergyRules.map((rule, index) => ({ + fuelSource: form.fuelSource, + giftFuelRules: form.giftFuelRules.map((rule, index) => ({ excluded: Boolean(rule.excluded), - fixedEnergy: Number(rule.fixedEnergy || 0), + fixedFuel: Number(rule.fixedFuel || 0), giftId: String(rule.giftId || "").trim(), giftTypeCode: String(rule.giftTypeCode || "").trim(), multiplierPpm: Number(rule.multiplierPpm || 0), - ruleId: String(rule.ruleId || "").trim() || `gift_energy_rule_${index + 1}`, + ruleId: String(rule.ruleId || "").trim() || `gift_fuel_rule_${index + 1}`, })), levels: form.levels .map((level) => ({ animationUrl: String(level.animationUrl || "").trim(), coverUrl: String(level.coverUrl || "").trim(), - energyThreshold: Number(level.energyThreshold || 0), + fuelThreshold: Number(level.fuelThreshold || 0), igniterRewards: rewardsFromForm(level.igniterRewards, level.level, "igniter"), inRoomRewards: rewardsFromForm(level.inRoomRewards, level.level, "in_room"), level: Number(level.level), - openedImageUrl: String(level.openedImageUrl || "").trim(), - openingAnimationUrl: String(level.openingAnimationUrl || "").trim(), + launchedImageUrl: String(level.launchedImageUrl || "").trim(), + launchAnimationUrl: String(level.launchAnimationUrl || "").trim(), top1Rewards: rewardsFromForm(level.top1Rewards, level.level, "top1"), })) .sort((left, right) => left.level - right.level), - openDelayMs: Number(form.openDelayMs || 0), + launchDelayMs: Number(form.launchDelayMs || 0), rewardStackPolicy: form.rewardStackPolicy, }; } diff --git a/src/features/room-treasure/pages/RoomTreasurePage.jsx b/src/features/room-rocket/pages/RoomRocketPage.jsx similarity index 87% rename from src/features/room-treasure/pages/RoomTreasurePage.jsx rename to src/features/room-rocket/pages/RoomRocketPage.jsx index 27ae6e8..04e024d 100644 --- a/src/features/room-treasure/pages/RoomTreasurePage.jsx +++ b/src/features/room-rocket/pages/RoomRocketPage.jsx @@ -2,10 +2,10 @@ import { useSearchParams } from "react-router-dom"; import { DataState } from "@/shared/ui/DataState.jsx"; import { DataTable } from "@/shared/ui/DataTable.jsx"; import { AdminListBody, AdminListPage } from "@/shared/ui/AdminListLayout.jsx"; -import { RoomTreasureConfigEditor } from "@/features/room-treasure/components/RoomTreasureConfigEditor.jsx"; -import { RoomTreasureConfigSummary } from "@/features/room-treasure/components/RoomTreasureConfigSummary.jsx"; -import { useRoomTreasurePage } from "@/features/room-treasure/hooks/useRoomTreasurePage.js"; -import styles from "@/features/room-treasure/room-treasure.module.css"; +import { RoomRocketConfigEditor } from "@/features/room-rocket/components/RoomRocketConfigEditor.jsx"; +import { RoomRocketConfigSummary } from "@/features/room-rocket/components/RoomRocketConfigSummary.jsx"; +import { useRoomRocketPage } from "@/features/room-rocket/hooks/useRoomRocketPage.js"; +import styles from "@/features/room-rocket/room-rocket.module.css"; const columns = [ { @@ -15,7 +15,7 @@ const columns = [ render: (level) => (
L{level.level} - 阈值 {formatNumber(level.energyThreshold)} + 阈值 {formatNumber(level.fuelThreshold)}
), }, @@ -49,8 +49,8 @@ const columns = [ }, ]; -export function RoomTreasurePage() { - const page = useRoomTreasurePage(); +export function RoomRocketPage() { + const page = useRoomRocketPage(); const [searchParams, setSearchParams] = useSearchParams(); const editing = searchParams.get("mode") === "edit"; @@ -68,7 +68,7 @@ export function RoomTreasurePage() { return ( - - diff --git a/src/features/room-treasure/permissions.js b/src/features/room-rocket/permissions.js similarity index 50% rename from src/features/room-treasure/permissions.js rename to src/features/room-rocket/permissions.js index 7862e2d..a146836 100644 --- a/src/features/room-treasure/permissions.js +++ b/src/features/room-rocket/permissions.js @@ -1,11 +1,11 @@ import { useAuth } from "@/app/auth/AuthProvider.jsx"; import { PERMISSIONS } from "@/app/permissions"; -export function useRoomTreasureAbilities() { +export function useRoomRocketAbilities() { const { can } = useAuth(); return { - canUpdate: can(PERMISSIONS.roomTreasureUpdate), - canView: can(PERMISSIONS.roomTreasureView), + canUpdate: can(PERMISSIONS.roomRocketUpdate), + canView: can(PERMISSIONS.roomRocketView), }; } diff --git a/src/features/room-treasure/room-treasure.module.css b/src/features/room-rocket/room-rocket.module.css similarity index 96% rename from src/features/room-treasure/room-treasure.module.css rename to src/features/room-rocket/room-rocket.module.css index 489880a..40d4567 100644 --- a/src/features/room-treasure/room-treasure.module.css +++ b/src/features/room-rocket/room-rocket.module.css @@ -246,7 +246,7 @@ } .rewardPanelHead, -.energyRuleToolbar { +.fuelRuleToolbar { display: flex; min-width: 0; align-items: center; @@ -255,8 +255,8 @@ } .rewardTable, -.energyRuleEditor, -.energyRuleTable { +.fuelRuleEditor, +.fuelRuleTable { display: grid; min-width: 0; gap: 10px; @@ -272,7 +272,7 @@ } .rewardTableHead, -.energyRuleTableHead { +.fuelRuleTableHead { align-items: center; color: var(--text-secondary); font-size: 12px; @@ -280,13 +280,13 @@ } .rewardTableRow, -.energyRuleTableRow { +.fuelRuleTableRow { padding: 12px 0; border-top: 1px solid var(--border); } -.energyRuleTableHead, -.energyRuleTableRow { +.fuelRuleTableHead, +.fuelRuleTableRow { display: grid; min-width: 0; grid-template-columns: minmax(140px, 1fr) minmax(140px, 1fr) 130px 130px 120px var(--control-height); @@ -384,7 +384,7 @@ .editorTitleGroup, .editorActions, .rewardPanelHead, - .energyRuleToolbar { + .fuelRuleToolbar { align-items: stretch; flex-direction: column; } @@ -403,8 +403,8 @@ .materialGrid, .rewardTableHead, .rewardTableRow, - .energyRuleTableHead, - .energyRuleTableRow { + .fuelRuleTableHead, + .fuelRuleTableRow { grid-template-columns: 1fr; } diff --git a/src/features/room-rocket/routes.js b/src/features/room-rocket/routes.js new file mode 100644 index 0000000..038616f --- /dev/null +++ b/src/features/room-rocket/routes.js @@ -0,0 +1,12 @@ +import { MENU_CODES, PERMISSIONS } from "@/app/permissions"; + +export const roomRocketRoutes = [ + { + label: "房间火箭", + loader: () => import("./pages/RoomRocketPage.jsx").then((module) => module.RoomRocketPage), + menuCode: MENU_CODES.roomRocket, + pageKey: "room-rocket", + path: "/activities/room-rocket", + permission: PERMISSIONS.roomRocketView, + }, +]; diff --git a/src/features/room-treasure/schema.ts b/src/features/room-rocket/schema.ts similarity index 70% rename from src/features/room-treasure/schema.ts rename to src/features/room-rocket/schema.ts index 693501d..be4cc08 100644 --- a/src/features/room-treasure/schema.ts +++ b/src/features/room-rocket/schema.ts @@ -13,39 +13,39 @@ const rewardSchema = z.object({ const levelSchema = z.object({ animationUrl: z.string().optional(), coverUrl: z.string().optional(), - energyThreshold: numberInput, + fuelThreshold: numberInput, igniterRewards: z.array(rewardSchema), inRoomRewards: z.array(rewardSchema), - level: z.number().int().min(1).max(7), - openedImageUrl: z.string().optional(), - openingAnimationUrl: z.string().optional(), + level: z.number().int().min(1).max(5), + launchedImageUrl: z.string().optional(), + launchAnimationUrl: z.string().optional(), top1Rewards: z.array(rewardSchema), }); -const giftEnergyRuleSchema = z.object({ +const giftFuelRuleSchema = z.object({ excluded: z.boolean(), - fixedEnergy: numberInput, + fixedFuel: numberInput, giftId: z.string().optional(), giftTypeCode: z.string().optional(), multiplierPpm: numberInput, ruleId: z.string().optional(), }); -export const roomTreasureConfigFormSchema = z +export const roomRocketConfigFormSchema = z .object({ broadcastDelayMs: numberInput, broadcastEnabled: z.boolean(), broadcastScope: z.enum(["none", "region", "global"]), enabled: z.boolean(), - energySource: z.literal("heat_value"), - giftEnergyRules: z.array(giftEnergyRuleSchema), - levels: z.array(levelSchema).length(7, "必须配置 7 级宝箱"), - openDelayMs: numberInput, + fuelSource: z.literal("heat_value"), + giftFuelRules: z.array(giftFuelRuleSchema), + levels: z.array(levelSchema).length(5, "必须配置 5 级火箭"), + launchDelayMs: numberInput, rewardStackPolicy: z.enum(["allow_stack", "priority_only"]), }) .superRefine((value, context) => { - if (!validNonNegativeInteger(value.openDelayMs)) { - context.addIssue({ code: "custom", message: "开箱倒计时必须大于等于 0", path: ["openDelayMs"] }); + if (!validNonNegativeInteger(value.launchDelayMs)) { + context.addIssue({ code: "custom", message: "发射倒计时必须大于等于 0", path: ["launchDelayMs"] }); } if (!validNonNegativeInteger(value.broadcastDelayMs)) { context.addIssue({ code: "custom", message: "广播延迟必须大于等于 0", path: ["broadcastDelayMs"] }); @@ -54,14 +54,14 @@ export const roomTreasureConfigFormSchema = z const seen = new Set(); for (const level of value.levels) { if (seen.has(level.level)) { - context.addIssue({ code: "custom", message: "宝箱等级不能重复", path: ["levels"] }); + context.addIssue({ code: "custom", message: "火箭等级不能重复", path: ["levels"] }); } seen.add(level.level); - if (!positiveInteger(level.energyThreshold)) { + if (!positiveInteger(level.fuelThreshold)) { context.addIssue({ code: "custom", - message: `第 ${level.level} 级能量阈值必须大于 0`, - path: ["levels", level.level - 1, "energyThreshold"], + message: `第 ${level.level} 级燃料阈值必须大于 0`, + path: ["levels", level.level - 1, "fuelThreshold"], }); } validateRewards(context, level.level, "inRoomRewards", level.inRoomRewards); @@ -69,36 +69,36 @@ export const roomTreasureConfigFormSchema = z validateRewards(context, level.level, "igniterRewards", level.igniterRewards); } - value.giftEnergyRules.forEach((rule, index) => { + value.giftFuelRules.forEach((rule, index) => { const giftId = String(rule.giftId || "").trim(); const giftTypeCode = String(rule.giftTypeCode || "").trim(); const multiplierPpm = Number(rule.multiplierPpm || 0); - const fixedEnergy = Number(rule.fixedEnergy || 0); + const fixedFuel = Number(rule.fixedFuel || 0); if (!giftId && !giftTypeCode) { context.addIssue({ code: "custom", - message: "礼物能量规则必须填写礼物 ID 或礼物类型", - path: ["giftEnergyRules", index, "giftId"], + message: "礼物燃料规则必须填写礼物 ID 或礼物类型", + path: ["giftFuelRules", index, "giftId"], }); } - if (!Number.isInteger(multiplierPpm) || multiplierPpm < 0 || !Number.isInteger(fixedEnergy) || fixedEnergy < 0) { + if (!Number.isInteger(multiplierPpm) || multiplierPpm < 0 || !Number.isInteger(fixedFuel) || fixedFuel < 0) { context.addIssue({ code: "custom", - message: "礼物能量规则数值必须大于等于 0", - path: ["giftEnergyRules", index, "multiplierPpm"], + message: "礼物燃料规则数值必须大于等于 0", + path: ["giftFuelRules", index, "multiplierPpm"], }); } - if (!rule.excluded && multiplierPpm === 0 && fixedEnergy === 0) { + if (!rule.excluded && multiplierPpm === 0 && fixedFuel === 0) { context.addIssue({ code: "custom", - message: "非排除规则必须配置倍率或固定能量", - path: ["giftEnergyRules", index, "multiplierPpm"], + message: "非排除规则必须配置倍率或固定燃料", + path: ["giftFuelRules", index, "multiplierPpm"], }); } }); }); -export type RoomTreasureConfigForm = z.infer; +export type RoomRocketConfigForm = z.infer; function validateRewards(context: z.RefinementCtx, level: number, key: string, rewards: z.infer[]) { rewards.forEach((reward, index) => { diff --git a/src/features/room-treasure/routes.js b/src/features/room-treasure/routes.js deleted file mode 100644 index 7ae393e..0000000 --- a/src/features/room-treasure/routes.js +++ /dev/null @@ -1,12 +0,0 @@ -import { MENU_CODES, PERMISSIONS } from "@/app/permissions"; - -export const roomTreasureRoutes = [ - { - label: "房间宝箱", - loader: () => import("./pages/RoomTreasurePage.jsx").then((module) => module.RoomTreasurePage), - menuCode: MENU_CODES.roomTreasure, - pageKey: "room-treasure", - path: "/activities/room-treasure", - permission: PERMISSIONS.roomTreasureView, - }, -]; diff --git a/src/shared/api/generated/endpoints.ts b/src/shared/api/generated/endpoints.ts index 6525429..9dd34c5 100644 --- a/src/shared/api/generated/endpoints.ts +++ b/src/shared/api/generated/endpoints.ts @@ -98,7 +98,7 @@ export const API_OPERATIONS = { getResourceGroup: "getResourceGroup", getRoleDataScopes: "getRoleDataScopes", getRoomConfig: "getRoomConfig", - getRoomTreasureConfig: "getRoomTreasureConfig", + getRoomRocketConfig: "getRoomRocketConfig", getSevenDayCheckInConfig: "getSevenDayCheckInConfig", getUser: "getUser", grantResource: "grantResource", @@ -204,7 +204,7 @@ export const API_OPERATIONS = { updateRole: "updateRole", updateRoom: "updateRoom", updateRoomConfig: "updateRoomConfig", - updateRoomTreasureConfig: "updateRoomTreasureConfig", + updateRoomRocketConfig: "updateRoomRocketConfig", updateSevenDayCheckInConfig: "updateSevenDayCheckInConfig", updateTaskDefinition: "updateTaskDefinition", updateTeamSalaryPolicy: "updateTeamSalaryPolicy", @@ -815,12 +815,12 @@ export const API_ENDPOINTS: Record = { permission: "room-config:view", permissions: ["room-config:view"] }, - getRoomTreasureConfig: { + getRoomRocketConfig: { method: "GET", - operationId: API_OPERATIONS.getRoomTreasureConfig, - path: "/v1/admin/activity/room-treasure/config", - permission: "room-treasure:view", - permissions: ["room-treasure:view"] + operationId: API_OPERATIONS.getRoomRocketConfig, + path: "/v1/admin/activity/room-rocket/config", + permission: "room-rocket:view", + permissions: ["room-rocket:view"] }, getSevenDayCheckInConfig: { method: "GET", @@ -1543,12 +1543,12 @@ export const API_ENDPOINTS: Record = { permission: "room-config:update", permissions: ["room-config:update"] }, - updateRoomTreasureConfig: { + updateRoomRocketConfig: { method: "PUT", - operationId: API_OPERATIONS.updateRoomTreasureConfig, - path: "/v1/admin/activity/room-treasure/config", - permission: "room-treasure:update", - permissions: ["room-treasure:update"] + operationId: API_OPERATIONS.updateRoomRocketConfig, + path: "/v1/admin/activity/room-rocket/config", + permission: "room-rocket:update", + permissions: ["room-rocket:update"] }, updateSevenDayCheckInConfig: { method: "PUT", diff --git a/src/shared/api/generated/schema.d.ts b/src/shared/api/generated/schema.d.ts index 60b148d..555e78b 100644 --- a/src/shared/api/generated/schema.d.ts +++ b/src/shared/api/generated/schema.d.ts @@ -292,15 +292,15 @@ export interface paths { patch?: never; trace?: never; }; - "/admin/activity/room-treasure/config": { + "/admin/activity/room-rocket/config": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; - get: operations["getRoomTreasureConfig"]; - put: operations["updateRoomTreasureConfig"]; + get: operations["getRoomRocketConfig"]; + put: operations["updateRoomRocketConfig"]; post?: never; delete?: never; options?: never; @@ -3038,7 +3038,7 @@ export interface operations { 200: components["responses"]["EmptyResponse"]; }; }; - getRoomTreasureConfig: { + getRoomRocketConfig: { parameters: { query?: never; header?: never; @@ -3050,7 +3050,7 @@ export interface operations { 200: components["responses"]["EmptyResponse"]; }; }; - updateRoomTreasureConfig: { + updateRoomRocketConfig: { parameters: { query?: never; header?: never;