From 15170636bf9682b82862ca47853c0b9fcf1ff68e Mon Sep 17 00:00:00 2001 From: huyan Date: Fri, 14 Aug 2026 00:06:40 +0800 Subject: [PATCH 01/12] feat(projects): add visual project gallery The project center needs a calmer asset-first browsing surface. Render the create entrance, project previews, and empty pixel canvases while resolving real character preview images. Existing project creation, deletion, pagination, and navigation behavior stays intact. --- frontend/src/pages/projects/index.tsx | 244 ++++++++++++++++++-------- 1 file changed, 174 insertions(+), 70 deletions(-) diff --git a/frontend/src/pages/projects/index.tsx b/frontend/src/pages/projects/index.tsx index d549893a..84660947 100644 --- a/frontend/src/pages/projects/index.tsx +++ b/frontend/src/pages/projects/index.tsx @@ -1,9 +1,10 @@ import { useEffect, useState, type CSSProperties } from 'react' import { Link } from 'react-router' -import { CHARACTER_PERSPECTIVE, DIRECTIONAL_MOVEMENT, projectApis, type Project } from '@/entities' +import assetLibraryArtwork from '@/assets/workspace/asset-library.png' +import { characterApis, projectApis, type Character, type Project } from '@/entities' import type { Paged } from '@/shared/pagination' -import { PageContainer, Pagination } from '@/shared/ui' +import { Pagination } from '@/shared/ui' const PROJECT_PAGE_SIZE = 12 @@ -11,6 +12,7 @@ const PROJECT_PAGE_SIZE = 12 export function ProjectsPage() { const [pageNumber, setPageNumber] = useState(1) const [projectsPage, setProjectsPage] = useState | null>(null) + const [projectPreviews, setProjectPreviews] = useState>({}) const [deleteTarget, setDeleteTarget] = useState(null) const [deleting, setDeleting] = useState(false) const [error, setError] = useState(null) @@ -32,6 +34,35 @@ export function ProjectsPage() { } }, [pageNumber]) + useEffect(() => { + let active = true + if (!projectsPage) + return () => { + active = false + } + + setProjectPreviews( + Object.fromEntries(projectsPage.items.map((project) => [project.id, project.sampleImageUrl])), + ) + const projectsWithoutPreview = projectsPage.items.filter((project) => !project.sampleImageUrl) + void Promise.all( + projectsWithoutPreview.map(async (project) => { + try { + const page = await characterApis.listByProject(project.id, { page: 1, pageSize: 1 }) + return [project.id, previewFromCharacter(page.items[0])] as const + } catch { + return [project.id, null] as const + } + }), + ).then((entries) => { + if (active) setProjectPreviews((current) => ({ ...current, ...Object.fromEntries(entries) })) + }) + + return () => { + active = false + } + }, [projectsPage]) + async function deleteProject(project: Project) { setDeleting(true) setError(null) @@ -59,30 +90,18 @@ export function ProjectsPage() { } return ( - +
-
-
-

- 项目中心 -

-

- 项目隔离角色资产与生成规格;先选项目,再管理其资产。 -

-
- +

- + 新建项目 - + 项目中心 +

+

+ 项目隔离角色资产与生成规格;先选项目,再管理其资产。 +

{error ? ( @@ -94,23 +113,17 @@ export function ProjectsPage() {

) : projectsPage === null ? (

正在读取项目…

- ) : projectsPage.total === 0 ? ( -
-

还没有项目

-

- 从右上角新建一个项目,之后它会显示在这里。 -

-
) : ( -
- {projectsPage.items.map((project, index) => ( - setDeleteTarget(project)} +
+ + {projectsPage.items.length > 0 ? ( + - ))} + ) : null}
)} {projectsPage ? ( @@ -131,16 +144,106 @@ export function ProjectsPage() { onConfirm={() => deleteProject(deleteTarget)} /> ) : null} - +
+ ) +} + +function previewFromCharacter(character: Character | undefined): string | null { + if (!character) return null + for (const outfit of character.outfits) { + if (outfit.previewUrl) return outfit.previewUrl + } + if (character.referenceImageUrl) return character.referenceImageUrl + for (const outfit of character.outfits) { + for (const action of outfit.actions) { + const frame = action.frames.find((item) => item.imageUrl) + if (frame) return frame.imageUrl + } + } + return null +} + +function ProjectCreateCard() { + return ( + +
+

+ 新建一个项目 +

+

+ 建立角色资产与生成规格的独立生产空间。 +

+ + 开始建立 + +
+
+ +
+ + ) +} + +function ProjectGallery({ + projects, + total, + previews, + onDelete, +}: { + projects: Project[] + total: number + previews: Record + onDelete: (project: Project) => void +}) { + return ( +
+
+ +
+
+ {projects.map((project, index) => ( + onDelete(project)} + /> + ))} +
+
) } -function ProjectCard({ +function ProjectGalleryTile({ project, + previewUrl, motionOrder, onDelete, }: { project: Project + previewUrl: string | null motionOrder: number onDelete: () => void }) { @@ -151,48 +254,49 @@ function ProjectCard({ return (
-
-

- {project.name} -

-

更新于 {updatedAt}

-
-
-
视角 / 朝向
-
- {CHARACTER_PERSPECTIVE[project.perspective]} ·{' '} - {DIRECTIONAL_MOVEMENT[project.directionalMovement]} -
-
-
-
精灵尺寸
-
- {project.spriteSize.width} × {project.spriteSize.height} -
-
-
-
画风约束
-
- {project.gameStyle ?? '尚未设定'} -
+
+ {previewUrl ? ( + {`${project.name}的项目预览`} + ) : ( +
+ -
+ )} +
+
+

{project.name}

+ {updatedAt}
From 2e2af1c998f7b96259235ddda8b0c2e88f06d106 Mon Sep 17 00:00:00 2001 From: huyan Date: Fri, 14 Aug 2026 00:06:51 +0800 Subject: [PATCH 02/12] test(projects): cover gallery preview behavior The redesigned gallery must keep its real API and navigation boundaries explicit. Cover character preview requests, empty canvases, creation links, deletion, and pagination. The tests now assert user-visible behavior instead of styling internals. --- frontend/src/pages/projects/index.test.tsx | 50 +++++++++++++++++++--- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/frontend/src/pages/projects/index.test.tsx b/frontend/src/pages/projects/index.test.tsx index 1f9036be..2acfa810 100644 --- a/frontend/src/pages/projects/index.test.tsx +++ b/frontend/src/pages/projects/index.test.tsx @@ -22,8 +22,8 @@ function installBackend() { describe('ProjectsPage', () => { it('renders backend Projects as the first browsing level', async () => { - installBackend() - const { container } = render( + const backend = installBackend() + render( @@ -32,13 +32,51 @@ describe('ProjectsPage', () => { ) expect(await screen.findByRole('heading', { name: '项目中心' })).toBeTruthy() + const createLink = await screen.findByRole('link', { name: '新建项目' }) + const artwork = createLink.querySelector('img') + expect(artwork).toBeTruthy() + if (!artwork) throw new Error('新建项目入口缺少资产装饰图') + expect(artwork.getAttribute('src')).toContain('asset-library.png') + expect(artwork.getAttribute('aria-hidden')).toBe('true') + expect(screen.queryByText('新的资产空间')).toBeNull() + expect(screen.queryByText('按最近更新排列')).toBeNull() + expect(screen.getAllByRole('link', { name: '新建项目' })).toHaveLength(1) + expect(createLink.getAttribute('href')).toBe('/projects/new') expect(await screen.findAllByRole('link', { name: /打开项目/ })).toHaveLength(2) - expect(screen.getByRole('link', { name: '打开项目 点灯人 · MVP' }).getAttribute('href')).toBe( - '/projects/42/assets', + const previewProject = screen.getByRole('link', { name: '打开项目 点灯人 · MVP' }) + expect(previewProject.getAttribute('href')).toBe('/projects/42/assets') + expect(screen.getByRole('heading', { name: '最近项目 · 02' })).toBeTruthy() + expect(previewProject.querySelector('img')?.getAttribute('src')).toBe( + 'https://cdn.windup.test/messenger-outfit.png', ) - expect(screen.getByText('低饱和像素绘本')).toBeTruthy() - expect(container.querySelectorAll('[data-project-card]')).toHaveLength(2) + const emptyProject = screen.getByRole('link', { name: '打开项目 空白海岸' }) + expect(emptyProject.querySelector('img')).toBeNull() + expect(emptyProject.textContent).toContain('等待第一份角色资产') + expect(previewProject.textContent).toContain('08/04') + expect(screen.queryByText('项目名称')).toBeNull() + expect(screen.queryByText('视角 / 朝向')).toBeNull() expect(screen.queryByRole('link', { name: /查看角色/ })).toBeNull() + expect( + backend.requests.every((request) => + ['/projects', '/characters'].includes(new URL(request.url).pathname), + ), + ).toBe(true) + expect( + backend.requests.filter((request) => new URL(request.url).pathname === '/projects'), + ).toHaveLength(1) + const previewRequests = backend.requests.filter( + (request) => new URL(request.url).pathname === '/characters', + ) + expect(previewRequests).toHaveLength(2) + expect( + previewRequests.map((request) => new URL(request.url).searchParams.get('project_id')), + ).toEqual(['42', '99']) + expect( + previewRequests.every((request) => { + const query = new URL(request.url).searchParams + return query.get('page') === '1' && query.get('page_size') === '1' + }), + ).toBe(true) }) it('sends creation to the project create page and deletes through the Project API', async () => { From a9203a567b82243a687d9d81067396b3794ffc21 Mon Sep 17 00:00:00 2001 From: huyan Date: Fri, 14 Aug 2026 00:07:02 +0800 Subject: [PATCH 03/12] feat(workspace): add opening tagline The workspace heading needs the same concise context used across the product surfaces. Add the approved tagline directly beneath the existing page title. No workspace navigation or data-loading behavior changes. --- frontend/src/pages/workspace/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/pages/workspace/index.tsx b/frontend/src/pages/workspace/index.tsx index 659728d2..607b389c 100644 --- a/frontend/src/pages/workspace/index.tsx +++ b/frontend/src/pages/workspace/index.tsx @@ -352,6 +352,7 @@ export function WorkspacePage() {

工作台

+

从这里开始,去任何地方

From 1c28b5d9bd2f868a1ccc071ff6d0ff5f86acd13a Mon Sep 17 00:00:00 2001 From: huyan Date: Fri, 14 Aug 2026 00:07:12 +0800 Subject: [PATCH 04/12] test(workspace): cover opening tagline The approved workspace context line should remain part of the rendered heading area. Assert the tagline alongside the existing navigation behavior. The focused coverage protects the copy without expanding workspace scope. --- frontend/src/pages/workspace/index.test.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/pages/workspace/index.test.tsx b/frontend/src/pages/workspace/index.test.tsx index b62cffef..d98541f6 100644 --- a/frontend/src/pages/workspace/index.test.tsx +++ b/frontend/src/pages/workspace/index.test.tsx @@ -233,6 +233,7 @@ describe('WorkspacePage', () => { renderWorkspace() expect(screen.getByRole('heading', { name: '工作台' })).toBeTruthy() + expect(screen.getByText('从这里开始,去任何地方')).toBeTruthy() expect(screen.getByRole('link', { name: '进入快速开始' }).getAttribute('href')).toBe( '/quick-start', ) From 7f3119c8676426ba48b978ff2cc40eb3f98f62f7 Mon Sep 17 00:00:00 2001 From: huyan Date: Fri, 14 Aug 2026 17:26:49 +0800 Subject: [PATCH 05/12] test(projects): cover preview fallbacks Codecov exposed untested project preview fallback branches. Exercise reference images, first frames, and isolated request failures. Keep gallery previews resilient without changing production behavior. --- frontend/src/pages/projects/index.test.tsx | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/frontend/src/pages/projects/index.test.tsx b/frontend/src/pages/projects/index.test.tsx index 2acfa810..d4462259 100644 --- a/frontend/src/pages/projects/index.test.tsx +++ b/frontend/src/pages/projects/index.test.tsx @@ -4,11 +4,13 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { MemoryRouter } from 'react-router' import { AppRoutes } from '@/app' +import { characterApis } from '@/entities' import { AuthenticatedAuthSession } from '@/test/auth-session' import { createProjectAssetsBackend } from '@/test/project-assets-backend' afterEach(() => { cleanup() + vi.restoreAllMocks() vi.unstubAllEnvs() vi.unstubAllGlobals() }) @@ -108,6 +110,52 @@ describe('ProjectsPage', () => { ).toBe(true) }) + it('falls back through character preview sources without blocking the gallery', async () => { + const backend = createProjectAssetsBackend({ projectCount: 3 }) + vi.stubEnv('VITE_API_BASE_URL', 'https://api.windup.test') + vi.stubGlobal('fetch', backend.fetch) + const character = await characterApis.get('51') + vi.spyOn(characterApis, 'listByProject').mockImplementation(async (projectId) => { + if (Number(projectId) === 1002) throw new Error('preview unavailable') + return { + items: [ + { + ...character, + referenceImageUrl: Number(projectId) === 42 ? character.referenceImageUrl : null, + outfits: character.outfits.map((outfit) => ({ ...outfit, previewUrl: null })), + }, + ], + total: 1, + page: 1, + pageSize: 1, + } + }) + render( + + + + + , + ) + + expect(await screen.findAllByRole('link', { name: /打开项目/ })).toHaveLength(3) + await waitFor(() => { + expect( + screen + .getByRole('link', { name: '打开项目 点灯人 · MVP' }) + .querySelector('img') + ?.getAttribute('src'), + ).toBe('https://cdn.windup.test/messenger-reference.png') + expect( + screen + .getByRole('link', { name: '打开项目 空白海岸' }) + .querySelector('img') + ?.getAttribute('src'), + ).toBe('https://cdn.windup.test/idle-01.png') + expect(screen.getByText('等待第一份角色资产')).toBeTruthy() + }) + }) + it('navigates every backend Project page instead of truncating after the first page', async () => { const backend = createProjectAssetsBackend({ projectCount: 13 }) vi.stubEnv('VITE_API_BASE_URL', 'https://api.windup.test') From 94c90f3813bb525960fbb445aa3f11584583124f Mon Sep 17 00:00:00 2001 From: huyan Date: Fri, 14 Aug 2026 13:34:56 +0800 Subject: [PATCH 06/12] refactor(ui): share editorial entry card Project and Playtest entries need the same visual behavior without duplicated styling. Extract the editorial entry card with asset-specific artwork and reuse it for project creation. Both entry points now share sizing, color, tilt, and hover behavior. --- frontend/src/pages/projects/index.tsx | 41 +++---------- .../src/shared/ui/editorial-entry-card.tsx | 58 +++++++++++++++++++ frontend/src/shared/ui/index.ts | 2 + 3 files changed, 68 insertions(+), 33 deletions(-) create mode 100644 frontend/src/shared/ui/editorial-entry-card.tsx diff --git a/frontend/src/pages/projects/index.tsx b/frontend/src/pages/projects/index.tsx index 84660947..d5e5caba 100644 --- a/frontend/src/pages/projects/index.tsx +++ b/frontend/src/pages/projects/index.tsx @@ -1,10 +1,9 @@ import { useEffect, useState, type CSSProperties } from 'react' import { Link } from 'react-router' -import assetLibraryArtwork from '@/assets/workspace/asset-library.png' import { characterApis, projectApis, type Character, type Project } from '@/entities' import type { Paged } from '@/shared/pagination' -import { Pagination } from '@/shared/ui' +import { EditorialEntryCard, Pagination } from '@/shared/ui' const PROJECT_PAGE_SIZE = 12 @@ -165,38 +164,14 @@ function previewFromCharacter(character: Character | undefined): string | null { function ProjectCreateCard() { return ( - -
-

- 新建一个项目 -

-

- 建立角色资产与生成规格的独立生产空间。 -

- - 开始建立 - -
-
- -
- + ariaLabel="新建项目" + artwork="asset-library" + title="新建一个项目" + description="建立角色资产与生成规格的独立生产空间。" + action="开始建立" + /> ) } diff --git a/frontend/src/shared/ui/editorial-entry-card.tsx b/frontend/src/shared/ui/editorial-entry-card.tsx new file mode 100644 index 00000000..e9a93776 --- /dev/null +++ b/frontend/src/shared/ui/editorial-entry-card.tsx @@ -0,0 +1,58 @@ +import type { ReactNode } from 'react' +import { Link } from 'react-router' + +import assetLibraryArtwork from '@/assets/workspace/asset-library.png' +import playtestArtwork from '@/assets/workspace/playtest.png' + +export type EditorialEntryArtwork = 'asset-library' | 'playtest' + +export interface EditorialEntryCardProps { + action: ReactNode + ariaLabel: string + artwork: EditorialEntryArtwork + description: ReactNode + title: ReactNode + to: string +} + +/** 产品内容页共用的横向入口卡;右侧像素物件只负责提示入口语义。 */ +export function EditorialEntryCard({ + action, + ariaLabel, + artwork, + description, + title, + to, +}: EditorialEntryCardProps) { + const artworkUrl = artwork === 'asset-library' ? assetLibraryArtwork : playtestArtwork + + return ( + +
+

+ {title} +

+

{description}

+ + {action} + +
+
+ +
+ + ) +} diff --git a/frontend/src/shared/ui/index.ts b/frontend/src/shared/ui/index.ts index 8aeaf703..b1b7dfbb 100644 --- a/frontend/src/shared/ui/index.ts +++ b/frontend/src/shared/ui/index.ts @@ -1,3 +1,5 @@ +export { EditorialEntryCard } from './editorial-entry-card' +export type { EditorialEntryArtwork, EditorialEntryCardProps } from './editorial-entry-card' export { PageContainer } from './page-container' export type { PageContainerProps } from './page-container' export { Pagination } from './pagination' From 7d5af64fa54e1ad2bd567e6c8551801fe554939a Mon Sep 17 00:00:00 2001 From: huyan Date: Fri, 14 Aug 2026 13:35:07 +0800 Subject: [PATCH 07/12] test(projects): cover shared entry card The project creation entry must keep its established artwork and accessible link contract. Assert that the rendered link comes from the shared editorial entry component. The test protects the project entry while Playtest reuses the same component. --- frontend/src/pages/projects/index.test.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/pages/projects/index.test.tsx b/frontend/src/pages/projects/index.test.tsx index d4462259..fab992cb 100644 --- a/frontend/src/pages/projects/index.test.tsx +++ b/frontend/src/pages/projects/index.test.tsx @@ -35,6 +35,7 @@ describe('ProjectsPage', () => { expect(await screen.findByRole('heading', { name: '项目中心' })).toBeTruthy() const createLink = await screen.findByRole('link', { name: '新建项目' }) + expect(createLink.getAttribute('data-ui')).toBe('editorial-entry-card') const artwork = createLink.querySelector('img') expect(artwork).toBeTruthy() if (!artwork) throw new Error('新建项目入口缺少资产装饰图') From fab06338054d16d1c8febda86d1fb4dbd4cbdbc4 Mon Sep 17 00:00:00 2001 From: huyan Date: Fri, 14 Aug 2026 13:35:17 +0800 Subject: [PATCH 08/12] feat(playtest): redesign asset gallery The global Playtest entry should surface real outfits before decorative scene content. Replace the hero with a filterable cross-project gallery and reuse the shared empty-state entry card. Cards now expose project context, playable actions, frame totals, and disabled states. --- frontend/src/pages/playtest/entry.tsx | 218 +++++++++++++++----------- 1 file changed, 125 insertions(+), 93 deletions(-) diff --git a/frontend/src/pages/playtest/entry.tsx b/frontend/src/pages/playtest/entry.tsx index 0805acbd..386c5b8f 100644 --- a/frontend/src/pages/playtest/entry.tsx +++ b/frontend/src/pages/playtest/entry.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react' +import { useEffect, useMemo, useState } from 'react' import { Link } from 'react-router' import { @@ -10,9 +10,7 @@ import { type Project, } from '@/entities' import type { Paged } from '@/shared/pagination' -import { PageContainer } from '@/shared/ui' - -import { PlaytestPixelStage } from './pixel-stage' +import { EditorialEntryCard, PageContainer } from '@/shared/ui' interface ProjectCharacters { project: Project @@ -48,6 +46,7 @@ function characterName(character: Character) { */ export function PlaytestEntryPage() { const [state, setState] = useState(initialState) + const [selectedProjectId, setSelectedProjectId] = useState(null) useEffect(() => { let active = true @@ -78,39 +77,38 @@ export function PlaytestEntryPage() { } }, []) - const outfitCount = - state.groups?.reduce( - (total, group) => - total + group.characters.reduce((sum, character) => sum + character.outfits.length, 0), - 0, - ) ?? 0 + const outfits = useMemo( + () => + state.groups?.flatMap(({ project, characters }) => + characters.flatMap((character) => + character.outfits.map((outfit) => ({ project, character, outfit })), + ), + ) ?? [], + [state.groups], + ) + const visibleOutfits = selectedProjectId + ? outfits.filter(({ project }) => project.id === selectedProjectId) + : outfits + const outfitCount = outfits.length return (
-
-
-

- Character field test +

+
+

+ 预览台 +

+

+ 从已有造型进入操控测试,检查动作衔接、移动反馈和实际播放效果。

-
-

- 选择可预览资产 -

-

- 选择一套已有造型,检查动作衔接、移动反馈和实际播放效果。 -

-
-
- - {state.groups !== null ? `${outfitCount} 套造型已接入` : '正在接入资产'} -
- - +

+ {state.groups !== null ? `${outfitCount} 套造型已接入` : '正在接入资产'} +

{state.error ? ( @@ -120,43 +118,59 @@ export function PlaytestEntryPage() { ) : outfitCount === 0 ? ( ) : ( -
- {state.groups.map((group) => { - const charactersWithOutfits = group.characters.filter( - (character) => character.outfits.length > 0, - ) - if (charactersWithOutfits.length === 0) return null +
+
+ + {state.groups.map(({ project }) => ( + + ))} +
- return ( -
-
-

- {group.project.name} -

- - 查看项目资产 - -
-
- {charactersWithOutfits.flatMap((character) => - character.outfits.map((outfit) => ( - - )), - )} -
-
- ) - })} + {visibleOutfits.length === 0 ? ( +
+

这个项目还没有可预览造型

+

可以先去项目资产确认角色和造型。

+
+ ) : ( +
+ {visibleOutfits.map(({ project, character, outfit }) => ( + + ))} +
+ )}
)}
@@ -164,12 +178,22 @@ export function PlaytestEntryPage() { ) } -function OutfitCard({ character, outfit }: { character: Character; outfit: Outfit }) { +function OutfitCard({ + project, + character, + outfit, +}: { + project: Project + character: Character + outfit: Outfit +}) { const { frameCount, playable } = getOutfitPlayback(outfit) const name = characterName(character) + const playableActions = outfit.actions.filter((action) => action.frames.length > 0) + const actionSummary = playableActions.map((action) => action.name).join(' · ') const content = (
-
-

{name}

+
+

{project.name}

-

- {outfit.name} -

+
+

+ {name} +

+

{outfit.name}

+
-

- {playable ? `${outfit.actions.length} 个动作 · ${frameCount} 帧` : '尚无可播放帧'} -

+
+ {playable ? ( + <> +

{actionSummary}

+

+ {playableActions.length} 个动作 · {frameCount} 帧 +

+ + ) : ( +

尚无可播放帧

+ )} +
) @@ -226,7 +262,7 @@ function OutfitCard({ character, outfit }: { character: Character; outfit: Outfi {content} @@ -235,23 +271,19 @@ function OutfitCard({ character, outfit }: { character: Character; outfit: Outfi function EmptyState() { return ( -
-

- 还没有可预览的角色 -

-

- 完成角色与动作制作后,可以在这里检查移动和动画效果。 -

-
- - 开始创作 - +
+ +
查看项目资产 From 2de21331bf51697afda66c7a0539858623c8c247 Mon Sep 17 00:00:00 2001 From: huyan Date: Fri, 14 Aug 2026 13:35:28 +0800 Subject: [PATCH 09/12] test(playtest): cover redesigned asset gallery The entry must preserve routing, filtering, pagination, empty states, and truthful playback metadata. Cover the gallery states and add a zero-frame action fixture that must stay out of playable summaries. The regression protects both the frozen layout and the workbench playback contract. --- frontend/src/pages/playtest/entry.test.tsx | 26 +++++++++++++++++---- frontend/src/test/project-assets-backend.ts | 9 +++++++ 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/frontend/src/pages/playtest/entry.test.tsx b/frontend/src/pages/playtest/entry.test.tsx index 07e99c78..424f8381 100644 --- a/frontend/src/pages/playtest/entry.test.tsx +++ b/frontend/src/pages/playtest/entry.test.tsx @@ -1,5 +1,5 @@ // @vitest-environment jsdom -import { cleanup, render, screen } from '@testing-library/react' +import { cleanup, fireEvent, render, screen } from '@testing-library/react' import { MemoryRouter } from 'react-router' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' @@ -39,20 +39,38 @@ describe('PlaytestEntryPage', () => { it('links playable outfits to their concrete Playtest route', async () => { renderEntry() - expect(await screen.findByRole('heading', { name: '选择可预览资产' })).toBeTruthy() - expect(screen.getByTestId('playtest-pixel-stage').getAttribute('aria-hidden')).toBe('true') + expect(await screen.findByRole('heading', { name: '预览台' })).toBeTruthy() + expect(screen.queryByTestId('playtest-pixel-stage')).toBeNull() expect( (await screen.findByRole('link', { name: '预览 轻装信使 · 常态造型' })).getAttribute('href'), ).toBe('/playtest/51/outfit-default') + expect(screen.getAllByText('点灯人 · MVP').length).toBeGreaterThan(0) + expect(screen.getByText('呼吸待机 · 行走')).toBeTruthy() expect(screen.getByText('2 个动作 · 5 帧')).toBeTruthy() expect(screen.getByText('尚无可播放帧')).toBeTruthy() }) + it('filters the global outfit gallery by project without starting a second picker flow', async () => { + renderEntry() + + expect(await screen.findByRole('button', { name: '筛选项目 空白海岸' })).toBeTruthy() + fireEvent.click(screen.getByRole('button', { name: '筛选项目 空白海岸' })) + + expect(screen.queryByRole('link', { name: '预览 轻装信使 · 常态造型' })).toBeNull() + expect(screen.getByText('这个项目还没有可预览造型')).toBeTruthy() + expect(screen.getByRole('button', { name: '筛选全部项目' }).getAttribute('aria-pressed')).toBe( + 'false', + ) + }) + it('directs an empty account back to character creation', async () => { renderEntry(0) expect(await screen.findByText('还没有可预览的角色')).toBeTruthy() - expect(screen.getByRole('link', { name: '开始创作' }).getAttribute('href')).toBe('/quick-start') + const createLink = screen.getByRole('link', { name: '开始创作' }) + expect(createLink.getAttribute('href')).toBe('/quick-start') + expect(createLink.getAttribute('data-ui')).toBe('editorial-entry-card') + expect(createLink.querySelector('img')?.getAttribute('src')).toContain('playtest.png') expect(screen.getByRole('link', { name: '查看项目资产' }).getAttribute('href')).toBe( '/projects', ) diff --git a/frontend/src/test/project-assets-backend.ts b/frontend/src/test/project-assets-backend.ts index b16ccc9e..fcb903bb 100644 --- a/frontend/src/test/project-assets-backend.ts +++ b/frontend/src/test/project-assets-backend.ts @@ -104,6 +104,15 @@ const characterDtos = [ }, ], }, + { + id: 'attack-draft', + type: 'attack', + name: '未完成攻击', + loop: false, + fps: 10, + frame_count: 0, + frames: [], + }, ], }, ], From 8b4e3a3398bd20a701b7df279ba893c60b37b212 Mon Sep 17 00:00:00 2001 From: huyan Date: Fri, 14 Aug 2026 13:35:42 +0800 Subject: [PATCH 10/12] docs(playtest): add entry screenshots Reviewers need stable visual evidence for the frozen Playtest entry design. Add desktop and narrow-screen captures of the populated global outfit gallery. The images document the responsive states used for Issue 304 acceptance. --- .../assets/playtest/playtest-entry-desktop.png | Bin 0 -> 74529 bytes .../assets/playtest/playtest-entry-mobile.png | Bin 0 -> 86788 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .github/assets/playtest/playtest-entry-desktop.png create mode 100644 .github/assets/playtest/playtest-entry-mobile.png diff --git a/.github/assets/playtest/playtest-entry-desktop.png b/.github/assets/playtest/playtest-entry-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..766a2e62e8ff3c37bf6d612ff5545c085531920c GIT binary patch literal 74529 zcmeFYcT`i&+BY0UQ4y6EM2dw_Ls39LK=fAW)j&dM0i=^qG;|QVNJ7y72^}@G6cPy4 z&{TR?O6VXWy@Mc%s9(_Yoco;TSpSvZ?o3Lo|!#!wclJbdtZ}Z1HZ-rJVttk zdVoE90DwL0KfteHz%>BpzWtp0_i=LW=R9zL^B@-w7uTUfTmnaraq}D(5E42rASfs- zCV5I&1SBdbcv}86NJ?53EPLXV!Z`(*bCNQ$GP{H9IdI?r*Fi3RE-roY|_IQEDG_VVuG;NA199w5pVa_?Rawxs{O_U_xm!ItzOyA{d<*u$}xgM*Ws zPn|?4Gk39_9HeL}gx}3cdTJ2<(R+CY0m7!_29lQtO zde?MpT}~oHJ-o%B!G%RF;N!X{XsGGCl|0na6I|8s_@0mJT;-TrQNZYm(hVn-(uCZV zkpE~R^qHkqe?m!{j(rvs&ABWv4t z3&%*?qp*7u`;QX9<`kP#W7iM$@P-&`&TjUY(`xZ-eu7F)hvnJBHSV&RmY3%Y+Lc13 zge^j-$caKe!`*(Z20zoPC%xU@S`4vSgbeNK7=5Df#P6HOxZOb?yf~7zZN}DU_kqH~ z{kxUzKD(W*YhN7sE%0w8<(=Q2_^sOSl5_1FkKd|^?CKRQ#2#|jBDHO7mDXJTp>E3W zy4V=v9ti?l$jR>FXh~lir{g4iC$@hj##s@_NMK}d~J zNy(IvdDPV_mik&5dLI5{4w-$$f9~#a`v3no|1TTCL@uKXb8&inb&K)eh9>7>VH-fckMLy34pEvSylXn z+1VD4qDTiC3f2ilK@=%eR~?n(lf{GA+HPyWTp*S=dV3dR(=$o96OPKQvs?6-@KkJm zYzQT+ylNtA1IN1l4yb!R$;y}?*AYk<0*756AqAMI`P%l}*jW8Ia7rpG%hmH) z8F)}R%O@wlqbWGcX4LR7^@M03xZdW32)+YFqli-^yT?6A<{$31KA-F*S!Z0nUDJ9u zz7*PJ@#Y)lB(A=`GCf<=TvkK(5gLgBuMK_md;x*--|W;vZWyeV>VZZD6l%P9<8+Hg zg=fIxOkpa@&60|yolkO#G%c3*69gH|Yh_o7&D%mHmg(qsMcyl}bTf|tjR{sI(B zi%-3HL75ViHH=5*=M!y&QqshdRJyl`nzNaSW^URaWM$?=(^elwu0KrlA5RRpkPYjd zoyw4YoNqvTt&WfQV#*u*@-F98+=*Dz*t*AM#N51tIOj}3B^B*JbMXZ?T`LO8rztta zh)|3>d3;vmN~EPctx-0^gi-zrP@lpNmVWJ8jlG5M#b+M5D4}m2nKfx2e8ec^!&@Ya zm-*8fl$56Vs6Y1?U`&ARcwny(r#i$O4xb=Z?$h-xgAW34C)(vXXDrBm$`qP&n|v+x zP5LCiosG#X_y!Rc8O$isi*>B;wF8fyjhMbQABHVB+WS@Imc7;Uqm&l`>vj9>hOi5o zU;0~2`2!y;3>0OkBwj54@uck{2tcl#LOc8EU4ahTC54HPR&Ky95)$zCFKTZKqKg|) z^YctrCqOURcfyd=1Z5hX zQd!dTp5O7Rb;r~FS^4DX#Gm|y-`0#a@`%KETfLeh<9gaU&X!qFZQ1{7{8qlBfH`32 zdBb3|vqHU9h4m>dWVXHrc22Of-?5fZGme@|JHhyLtHZJ77vN~J6>sFkg~z^PQIP!7 z>%EZVXJpxp;hH!5qafD zR~x;J8ohxczaJ}PXdT{nwYGjy9!PJL_hv-zq1QIHXUPb!$KO__I2g+?tSbkCr?kub-*EdkfPOiJS~gXK}Vdq^V6@^zbP4w z)btw~xSed5Z8GrqYKDe!0i{Q{YbCD#l zCOiuQPqU0k!zW89XZsbnyX~mCq{nq{gC oS#4P&|5Zwy_xMZoY9HnRK;#-d|xD( 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 literal 0 HcmV?d00001 diff --git a/.github/assets/playtest/playtest-entry-mobile.png b/.github/assets/playtest/playtest-entry-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..be0f7c97e102382342db0755fa6a9db18b9690c0 GIT binary patch literal 86788 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

A892Q14& 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±jzZzOS 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 Qi~mzzoV%D*^<(Pa01gm$G5`Po literal 0 HcmV?d00001 From 4d590cafb62d7ff8bc5b2599d0e8ed78edb5124b Mon Sep 17 00:00:00 2001 From: huyan Date: Fri, 14 Aug 2026 16:40:10 +0800 Subject: [PATCH 11/12] fix(workspace): count only playable actions Zero-frame actions are visible metadata but cannot enter Playtest. Count only actions with real frames in the Workspace outfit summary. Keep the displayed action total aligned with the playable frame contract. --- frontend/src/pages/workspace/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/pages/workspace/index.tsx b/frontend/src/pages/workspace/index.tsx index 607b389c..25781cc0 100644 --- a/frontend/src/pages/workspace/index.tsx +++ b/frontend/src/pages/workspace/index.tsx @@ -827,7 +827,7 @@ function OutfitSelection({ {playback.playable - ? `${outfit.actions.length} 个动作 · ${playback.frameCount} 帧` + ? `${outfit.actions.filter((action) => action.frames.length > 0).length} 个动作 · ${playback.frameCount} 帧` : '尚无可播放帧'} From 0ae5a3b3e300bc442303f48b876a1b1b874fba9c Mon Sep 17 00:00:00 2001 From: huyan Date: Fri, 14 Aug 2026 17:28:29 +0800 Subject: [PATCH 12/12] test(assets): include draft actions The shared asset fixture now includes one zero-frame draft action. Expect character detail and asset library views to render all three actions. Align both tests with the existing asset display behavior. --- frontend/src/pages/asset-library/index.test.tsx | 2 +- frontend/src/pages/character-detail/index.test.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages/asset-library/index.test.tsx b/frontend/src/pages/asset-library/index.test.tsx index 58cb1bde..489a8140 100644 --- a/frontend/src/pages/asset-library/index.test.tsx +++ b/frontend/src/pages/asset-library/index.test.tsx @@ -40,7 +40,7 @@ describe('AssetLibraryPage', () => { expect(preview.getAttribute('decoding')).toBe('async') expect(preview.getAttribute('fetchpriority')).toBe('high') expect(screen.getAllByText('1 套造型')).toHaveLength(1) - expect(screen.getByText('2 个动作')).toBeTruthy() + expect(screen.getByText('3 个动作')).toBeTruthy() expect(screen.queryByRole('searchbox')).toBeNull() expect(screen.queryByRole('button', { name: '导出全部角色资产' })).toBeNull() }) diff --git a/frontend/src/pages/character-detail/index.test.tsx b/frontend/src/pages/character-detail/index.test.tsx index 63e0b3c5..c114c12f 100644 --- a/frontend/src/pages/character-detail/index.test.tsx +++ b/frontend/src/pages/character-detail/index.test.tsx @@ -32,7 +32,7 @@ describe('CharacterDetailPage', () => { expect(await screen.findByRole('heading', { name: '轻装信使' })).toBeTruthy() expect(screen.getByRole('combobox', { name: '选择造型' })).toBeTruthy() - expect(screen.getAllByRole('article', { name: /动作/ })).toHaveLength(2) + expect(screen.getAllByRole('article', { name: /动作/ })).toHaveLength(3) expect(screen.getByRole('img', { name: '呼吸待机帧预览' }).getAttribute('src')).toBe( 'https://cdn.windup.test/idle-01.png', )