修导航高亮:从共创侧进的详情/族谱/对比也高亮「共创」(复用入口来源标记,判定收敛在一处)
Project CI / Backend tests (pull_request) Failing after 22s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m17s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m30s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m27s
Project CI / Repository checks (pull_request) Failing after 26s
Project CI / Frontend tests (pull_request) Successful in 3m13s
Project CI / AI game creator shell web tests (pull_request) Failing after 3m32s
Project CI / Native shell tests (pull_request) Successful in 8m50s

This commit is contained in:
2026-10-07 19:45:55 +08:00
parent efe6138ede
commit 8458113c94
2 changed files with 98 additions and 10 deletions
@@ -47,6 +47,8 @@ import { ClientDownloadEntry } from '../creation-home/ClientDownloadEntry';
import { setCreatorViewer } from '../creator/creatorRelationshipState';
import {
CO_CREATION_DETAIL_SOURCE,
isCoCreator,
resolveGameViewerContext,
shouldCarryCoCreationSource,
} from '../game-distribution/gameViewerRole';
import { PaymentCheckoutView } from './PaymentCheckoutView';
@@ -830,10 +832,6 @@ export function PlatformEntryFlowShellImpl({
selectionStage === 'game-mine' ||
selectionStage === 'game-lineage' ||
selectionStage === 'game-publish';
/** 侧边栏 / 底部导航的「共创」高亮(顶层入口,2026-10-07 从游戏页子页签升上来)。 */
const isCoCreationStage = selectionStage === 'game-co-creation';
/** 游戏区但不在共创页时,「游戏」这个导航项才是激活态——进共创时高亮共创、不再高亮游戏。 */
const isGamesNavActive = isGamesStage && !isCoCreationStage;
/**
* 游玩页自己撑满剩余高度,面板不能再滚动,否则移动端会出现整页可滚的
* 半屏播放器;其余舞台继续沿用面板滚动。
@@ -842,8 +840,32 @@ export function PlatformEntryFlowShellImpl({
const gameSearchParams = new URLSearchParams(
typeof window === 'undefined' ? '' : window.location.search,
);
/**
* 本屏的**入口来源标记**:详情页上是「从哪一侧点进来」(`from=co-creation`),
* 族谱页上含义不同(`from=<gameId>` = 高亮哪个作品)——所以只认 `co-creation` 这一个值
* (复用 `resolveGameViewerContext` 的白名单,不自己判字符串)。
*/
const gameEntrySource = gameSearchParams.get('from');
/**
* 本屏是否属于「**共创侧**」上下文 —— **导航高亮(侧边栏 / 底部 dock)的唯一判据**。
*
* 用户报的 bug:共创页 → 点卡 → 详情后,侧边栏仍高亮「游戏」。根因是这里原先只看 `stage`,
* 而详情页的 stage 属于游戏区(`game-detail`),**来源被丢掉**。修法是复用详情页那套
* 已落地的来源判定(不新造参数、不新造标记):
* ① URL 的来源标记就是 `co-creation`(详情页,以及从它继续跳过去的页面);
* ② 或当前就在「共创侧才进得来的阶段」(共创页 / 族谱 / 对比,见 `shouldCarryCoCreationSource`)。
*/
const isCoCreationContext =
isGamesStage &&
(isCoCreator(resolveGameViewerContext(gameEntrySource)) ||
shouldCarryCoCreationSource({
stage: selectionStage,
currentSource: gameEntrySource,
}));
/** 游戏区、且**不在共创侧上下文**时,「游戏」这个导航项才是激活态(两者互斥、不双亮)。 */
const isGamesNavActive = isGamesStage && !isCoCreationContext;
const gameId = gameSearchParams.get('id');
const lineageHighlightGameId = gameSearchParams.get('from');
const lineageHighlightGameId = gameEntrySource;
const compareLeftGameId = gameSearchParams.get('left');
const compareRightGameId = gameSearchParams.get('right');
const creatorConnectionTab = gameSearchParams.get('tab');
@@ -912,12 +934,13 @@ export function PlatformEntryFlowShellImpl({
/>
{/*
「共创」:**顶层入口**(2026-10-07 用户口径:不该是游戏页里的子页签)。
指向 `scope="forkable"` 的那个列表页(`/games/co-creation`),
与「游戏」平级;在共创页时高亮的是这一项,不再是「游戏」。
指向 `scope="forkable"` 的那个列表页(`/games/co-creation`),与「游戏」平级。
高亮读 `isCoCreationContext`:共创页本身、以及**从共创侧点进去的详情/族谱/对比**
都算共创侧(用户报的「共创 → 详情后仍高亮游戏」就是这里原先只看 stage 造成的)。
*/}
<ActiveRailButton
active={isCoCreationStage}
emphasized={isCoCreationStage}
active={isCoCreationContext}
emphasized={isCoCreationContext}
icon={Sparkles}
iconSrc="/creation-home/nav-discover.png"
label="共创"
@@ -1206,7 +1229,7 @@ export function PlatformEntryFlowShellImpl({
<MobileProfileDock
active={isProfileStage}
gameActive={isGamesNavActive}
coCreationActive={isCoCreationStage}
coCreationActive={isCoCreationContext}
creatorActive={isCreatorStage}
onOpenCreator={() => openCreator()}
onOpenProfile={openProfile}