- 建立 pnpm workspace + Turborepo 单仓、ESLint 9/Prettier/commitlint/husky 门禁 - NestJS + Fastify API:统一错误体、trace_id、Zod 管道、/health 真实依赖探活、OpenAPI 3.1 契约 - Prisma 基线:outbox_events/idempotency_keys/system_configs 与首版迁移、幂等种子 - shared 契约包:错误码、权限点、ULID、游标分页、命名/时间工具 - ui 包与 Web 壳层:Semi + Remix 图标统一出口、Cloud Blue 视觉、登录/工作台/错误页 - worker 骨架、Playwright 冒烟、Gitea CI、OpenAPI 快照与 oasdiff 回退脚本 - 补充 A0 实施报告与本地开发说明
This commit is contained in:
1 parent
9c3ab9768a
commit
04f49690f4
155 files changed
+18402
-28
No files matched your search
@@ -0,0 +1,59 @@
|
||||
import { IconBack, IconMenu } from '@lingxi/ui/icons';
|
||||
import type { ReactNode } from 'react';
|
||||
import { NavLink } from 'react-router';
|
||||
|
||||
import type { NavModule } from '@/navigation/nav-config';
|
||||
|
||||
export interface SideNavProps {
|
||||
module: NavModule;
|
||||
collapsed: boolean;
|
||||
onToggle: () => void;
|
||||
}
|
||||
|
||||
export function SideNav({ module, collapsed, onToggle }: SideNavProps): ReactNode {
|
||||
return (
|
||||
<aside className="lx-sidebar" aria-label="功能导航">
|
||||
<div className="lx-sidebar__heading">
|
||||
<span className="lx-sidebar__title">{module.label}</span>
|
||||
<button
|
||||
type="button"
|
||||
className="lx-icon-button lx-sidebar__toggle"
|
||||
onClick={onToggle}
|
||||
aria-label={collapsed ? '展开侧边栏' : '收起侧边栏'}
|
||||
title={collapsed ? '展开侧边栏' : '收起侧边栏'}
|
||||
>
|
||||
{collapsed ? <IconMenu size={18} /> : <IconBack size={18} />}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<nav className="lx-sidebar__nav">
|
||||
{module.items.map((item) => {
|
||||
const Icon = item.icon;
|
||||
return (
|
||||
<NavLink
|
||||
key={item.key}
|
||||
to={item.path}
|
||||
end={item.path === '/'}
|
||||
className={({ isActive }) =>
|
||||
isActive ? 'lx-sidebar__item is-active' : 'lx-sidebar__item'
|
||||
}
|
||||
title={collapsed ? item.label : undefined}
|
||||
>
|
||||
<span className="lx-sidebar__item-icon">
|
||||
<Icon size={18} />
|
||||
</span>
|
||||
<span className="lx-sidebar__item-label">{item.label}</span>
|
||||
</NavLink>
|
||||
);
|
||||
})}
|
||||
</nav>
|
||||
|
||||
<div className="lx-sidebar__footer">
|
||||
<span className="lx-sidebar__env" title="当前环境:本地开发">
|
||||
<span className="lx-sidebar__env-dot" aria-hidden="true" />
|
||||
<span className="lx-sidebar__env-text">本地开发</span>
|
||||
</span>
|
||||
</div>
|
||||
</aside>
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user