详情页差异改由「入口上下文」驱动:导航层按当前一侧写 from=co-creation,玩家侧(游戏 Tab/广场/搜索/收藏/我的游戏/默认深链)不看血缘与共创标签、开始共创弱化;登录态只决定能否共创
Project CI / Backend tests (pull_request) Failing after 34s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m48s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m1s
Project CI / Repository checks (pull_request) Failing after 25s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m10s
Project CI / Frontend tests (pull_request) Successful in 2m30s
Project CI / AI game creator shell web tests (pull_request) Failing after 2m32s
Project CI / Native shell tests (pull_request) Successful in 7m24s

This commit is contained in:
2026-10-07 18:06:21 +08:00
parent ffd7510143
commit d9cba5e402
5 changed files with 259 additions and 68 deletions
@@ -29,6 +29,7 @@ import {
hasAppHistoryBackEntry,
pushAppHistoryPath,
replaceAppHistoryPath,
resolveSelectionStageFromPath,
} from '../../routing/activeAppPageRoutes';
import {
connectionsPath,
@@ -44,6 +45,10 @@ import { PlatformActionButton } from '../common/PlatformActionButton';
import { PlatformSubpanel } from '../common/PlatformSubpanel';
import { ClientDownloadEntry } from '../creation-home/ClientDownloadEntry';
import { setCreatorViewer } from '../creator/creatorRelationshipState';
import {
CO_CREATION_DETAIL_SOURCE,
shouldCarryCoCreationSource,
} from '../game-distribution/gameViewerRole';
import { PaymentCheckoutView } from './PaymentCheckoutView';
import {
PlatformActiveMobileWelcomeDialog,
@@ -558,6 +563,27 @@ export function PlatformEntryFlowShellImpl({
// 作者视角要一直带着 owner 作用域:刷新或直接打开该链接时详情页仍读
// `GET /my-games/{gameId}`,否则作者点自己的未公开作品只会拿到公开接口的 404。
if (options?.owner) params.set('owner', '1');
/*
* **入口上下文**(2026-10-07 产品口径更正:游客 = 点开游戏界面的玩家,不是「未登录访客」):
* 从共创侧(共创 Tab / 族谱页 / 对比页)打开详情时带上 `from=co-creation`,
* 详情页据此决定「看不看得到血缘图与共创标签」;其余来源 = 玩家侧(不带标记)。
* 已经在共创侧详情页里继续跳(血缘链 / 主题 / 相关作品)时保留标记,不中途掉回玩家侧。
* 用 URL 而不是内存 stage:刷新、深链、分享链接都稳定。
*/
const currentStage = resolveSelectionStageFromPath(
window.location.pathname,
);
const currentSource = new URLSearchParams(window.location.search).get(
'from',
);
if (
shouldCarryCoCreationSource({
stage: currentStage,
currentSource,
})
) {
params.set('from', CO_CREATION_DETAIL_SOURCE);
}
const path = `/games/detail?${params.toString()}`;
setSelectionStage('game-detail', { path });
},