# 无障碍审计报告 (A11y Audit) > 审计日期:2026-06-17 > 审计范围:`src/shared/` 核心组件与新增无障碍工具 > 合规目标:WCAG 2.1 AA --- ## 一、已审计组件与 ARIA 改进 ### 1. 新增无障碍工具库 | 文件 | 导出 | 用途 | |------|------|------| | `src/shared/lib/a11y.ts` | `useA11yId` | 基于 `React.useId` 生成 SSR 安全的唯一 ID,用于 `aria-describedby`、`aria-labelledby` | | `src/shared/lib/a11y.ts` | `mergeA11yProps` | 合并多组 aria/data 属性,`aria-*`/`data-*` 字符串属性以空格拼接 | | `src/shared/lib/a11y.ts` | `describeInput` | 计算输入框的 `aria-describedby` 与 `aria-invalid` | | `src/shared/lib/a11y.ts` | `loadingAria` | 提供加载状态的 `aria-busy` 与 `aria-live` 属性 | ### 2. 新增 Hook | 文件 | 导出 | 用途 | |------|------|------| | `src/shared/hooks/use-aria-live.ts` | `useAriaLive` | 管理 aria-live 区域,支持 polite/assertive 通知,自动清除过期通知(默认 5s),返回 `{ announce, liveRegion }` | ### 3. 新增 a11y 组件 | 文件 | 组件 | 用途 | |------|------|------| | `src/shared/components/a11y/skip-link.tsx` | `SkipLink` | 跳转链接,视觉隐藏,获得焦点时高对比度显示,默认跳转 `#main-content` | | `src/shared/components/a11y/visually-hidden.tsx` | `VisuallyHidden` | 视觉隐藏但屏幕阅读器可读,用于图标按钮文字描述、表单辅助说明 | | `src/shared/components/a11y/focus-trap.tsx` | `FocusTrap` | 焦点陷阱,捕获 Tab/Shift+Tab 循环,支持初始焦点与焦点恢复 | | `src/shared/components/a11y/aria-status.tsx` | `AriaStatus` | ARIA 状态通知区域,渲染 `aria-live` 区域,支持 polite/assertive | ### 4. 增强的核心 UI 组件 #### `src/shared/components/ui/table.tsx` | 组件 | ARIA 改进 | |------|-----------| | `Table` | 默认 `role="table"`(可覆盖),支持 `aria-rowcount`、`aria-colcount` | | `TableHeader` | 默认 `role="rowgroup"` | | `TableBody` | 默认 `role="rowgroup"` | | `TableFooter` | 默认 `role="rowgroup"` | | `TableRow` | 默认 `role="row"` | | `TableHead` | 默认 `role="columnheader"`,支持 `scope` 属性(`col`/`row`/`colgroup`/`rowgroup`) | | `TableCell` | 默认 `role="cell"` | | `TableCaption` | 已有 `