diff --git a/apps/desktop/design-qa.md b/apps/desktop/design-qa.md index cecd8ee..73690a2 100644 --- a/apps/desktop/design-qa.md +++ b/apps/desktop/design-qa.md @@ -6,7 +6,7 @@ - Implementation screenshot: `test-results/app-home.png` - Viewport: 420 × 820 CSS px at device scale factor 1; implementation image is 420 × 820 px. - Source image: 144 × 343 px and only shows the compact icon-navigation language. It does not define the requested all-projects dashboard. -- State: signed-in light theme, “工作台 / 全部项目” selected, one pending task, one completed task, one latest file. +- State: signed-in light theme, “工作台 / 全部项目” selected, one pending task and one latest file. The content header is “全部项目” with its creation action aligned on the right. - Primary interactions tested: default all-projects homepage, task editor modal, explore view, project picker, project-only right navigation, document panel, AI panel, and profile dropdown. Console errors: none. ## Evidence @@ -24,11 +24,11 @@ No actionable P0, P1, or P2 findings. - Spacing and layout rhythm: the all-projects page fills the former rail width after navigation is hidden. At 420 px, the header, tabs, statistics, actions, task lists, and latest files remain within the viewport with no horizontal overflow. - Colors and visual tokens: workbench/explore selection uses the existing blue token, while statistic colors distinguish projects, pending work, files, and plan tasks without overpowering the task list. - Image and icon fidelity: the existing product mark is retained and all controls use the installed Arco icon set; no placeholder or hand-drawn image assets were added. -- Copy and content: “工作台”, “探索”, and “全部项目” make scope explicit; the project-only menu contains 概况、计划、资料、AI、计划任务 and no longer exposes 收集箱. +- Copy and content: “工作台”, “探索”, and “全部项目” make scope explicit; its homepage shows only pending tasks and latest files. The project-only menu contains 概况、计划、资料、AI、计划任务 and no longer exposes 收集箱. ## Comparison history -- Current pass: changed the all-projects scope from a flat merged task list to a dedicated dashboard and hid the right rail for that scope. Re-captured `test-results/app-home.png` and verified the requested dashboard sections and task/edit interactions. +- Current pass: removed the completed-task section and upload action from the all-projects homepage, then removed the content-level “工作台” label and moved 创建项目 beside 全部项目. Re-captured `test-results/app-home.png` and verified that only pending tasks and latest files remain. ## Follow-up polish @@ -38,7 +38,7 @@ No actionable P0, P1, or P2 findings. - [x] Replace the project strip with workbench, explore, and current-project controls. - [x] Make all-projects the default selection. -- [x] Add all-project statistics, pending tasks, project creation, targeted file upload, and latest files. +- [x] Add all-project statistics, pending tasks, project creation, and latest files. - [x] Hide right navigation for all-projects and explore views. - [x] Remove 收集箱 and rename 周期计划 to 计划任务. - [x] Verify key interaction paths and responsive composition. diff --git a/apps/desktop/scripts/visual-check.mjs b/apps/desktop/scripts/visual-check.mjs index fdb7432..7611384 100644 --- a/apps/desktop/scripts/visual-check.mjs +++ b/apps/desktop/scripts/visual-check.mjs @@ -72,7 +72,7 @@ if (home.width !== 420) failures.push(`expected 420px shell, got ${home.width}`) if (home.selectedAll !== '全部项目') failures.push(`default project scope must be 全部项目, got ${home.selectedAll}`) if (home.navCount !== 0) failures.push(`all-projects view must hide the right rail, got ${home.navCount}`) if (home.statCount !== 4) failures.push(`expected four summary cards, got ${home.statCount}`) -if (home.pending !== 1 || home.completed !== 1) failures.push(`task sections incorrect: ${JSON.stringify(home)}`) +if (home.pending !== 1 || home.completed !== 0) failures.push(`all-project task sections incorrect: ${JSON.stringify(home)}`) if (taskModal !== 1) failures.push('task editor did not open') if (exploreProjects !== 1) failures.push(`expected one project in explore, got ${exploreProjects}`) if (documents !== 1) failures.push(`expected one document, got ${documents}`) diff --git a/apps/desktop/src/App.tsx b/apps/desktop/src/App.tsx index a85b048..f5f3944 100644 --- a/apps/desktop/src/App.tsx +++ b/apps/desktop/src/App.tsx @@ -1,5 +1,5 @@ -import { useEffect, useMemo, useRef, useState } from 'react' -import { Alert, Avatar, Button, Dropdown, Empty, Form, Input, Menu, Message, Modal, Select, Spin, Switch, Tag, Typography } from '@arco-design/web-react' +import { useEffect, useMemo, useState } from 'react' +import { Alert, Avatar, Button, Dropdown, Empty, Form, Input, Menu, Modal, Select, Spin, Switch, Tag, Typography } from '@arco-design/web-react' import { IconApps, IconCheckCircle, IconCheckCircleFill, IconClockCircle, IconCompass, IconDown, IconFile, IconFolder, IconLeft, IconList, IconMoon, IconPlus, IconRight, IconRobot, @@ -8,7 +8,6 @@ import { import { ApiError, createProject, fetchProjectWorkspace, fetchProjects, getCurrentUser, listAIExperts, login, setApiBaseUrl, updateCurrentUser, updateTask, - uploadDocument, type ApiSession, type CurrentUser, type Expert, type Project, type Workspace, type WorkspaceTask, } from './api' @@ -114,7 +113,7 @@ export function App() { {error ? setError('')} /> : null} -
{workspaceMode === 'explore' ? { setProjectId(id); setWorkspaceMode('workbench') }} /> : !projectId ? setProjectModalOpen(true)} onUpload={async (project, file) => { await uploadDocument(session, project, file); await loadWorkspaces() }} /> : visibleWorkspaces.length ? : }
+
{workspaceMode === 'explore' ? { setProjectId(id); setWorkspaceMode('workbench') }} /> : !projectId ? setProjectModalOpen(true)} /> : visibleWorkspaces.length ? : }
{projectId && workspaceMode === 'workbench' ?