feat(web): add responsive workbench navigation

This commit is contained in:
2026-07-21 13:28:58 +08:00
parent 3d24d78bca
commit 02d4b4c54e
7 changed files with 272 additions and 35 deletions

View File

@@ -9,6 +9,8 @@ export function ProjectRail({
activeProject,
projects,
activeView,
open,
onClose,
onSelectWorkspace,
onSelectWorkspaceExplore,
onSelectProject,
@@ -17,27 +19,34 @@ export function ProjectRail({
activeProject: Project
projects: Project[]
activeView: WorkbenchView
open: boolean
onClose: () => void
onSelectWorkspace: () => void
onSelectWorkspaceExplore: () => void
onSelectProject: (project: Project) => void
onCreateProject: () => void
}) {
const selectAndClose = (action: () => void) => {
action()
onClose()
}
return (
<Sider className="project-rail" width={96}>
<button className="rail-brand" aria-label="森林AI 工作台" title="森林AI 工作台" onClick={onSelectWorkspace}>
<Sider className={open ? 'project-rail open' : 'project-rail'} width={96}>
<button className="rail-brand" aria-label="森林AI 工作台" title="森林AI 工作台" onClick={() => selectAndClose(onSelectWorkspace)}>
<img className="brand-icon" src="/senlinai-icon.svg" alt="" />
</button>
<Button
className={activeView === 'workspace' ? 'dashboard-button active' : 'dashboard-button'}
icon={<IconDashboard />}
onClick={onSelectWorkspace}
onClick={() => selectAndClose(onSelectWorkspace)}
aria-label="工作台"
title="工作台"
/>
<Button
className={activeView === 'workspace-explore' ? 'dashboard-button active' : 'dashboard-button'}
icon={<IconCompass />}
onClick={onSelectWorkspaceExplore}
onClick={() => selectAndClose(onSelectWorkspaceExplore)}
aria-label="探索"
title="探索"
/>
@@ -46,7 +55,7 @@ export function ProjectRail({
<Badge key={project.id} count={project.badge} dot={false} className={project.urgent ? 'project-badge urgent' : 'project-badge'}>
<button
className={activeView === 'project' && activeProject.id === project.id ? 'project-button active' : 'project-button'}
onClick={() => onSelectProject(project)}
onClick={() => selectAndClose(() => onSelectProject(project))}
style={{ '--project-color': project.color } as CSSProperties}
title={project.name}
>
@@ -55,7 +64,7 @@ export function ProjectRail({
</Badge>
))}
</Space>
<Button className="create-project" aria-label="新建项目" icon={<IconPlus />} title="新建项目" onClick={onCreateProject} />
<Button className="create-project" aria-label="新建项目" icon={<IconPlus />} title="新建项目" onClick={() => selectAndClose(onCreateProject)} />
</Sider>
)
}