# P6→NS1/RNS1 缺失项 #18：无障碍适配

## 简要结论
- 状态：❌ 未解决
- 风险等级：🟡 低
- 项目自有页面（task-list、task-detail 及自定义组件）中无任何 `aria-label`、`aria-role` 等无障碍属性。仅 TDesign 组件库内部自带了部分无障碍支持。

## 详细审查

### 审查范围
- `apps/miniprogram/miniprogram/pages/task-list/task-list.wxml`
- `apps/miniprogram/miniprogram/pages/task-detail/task-detail.wxml`
- `apps/miniprogram/miniprogram/components/clue-card/clue-card.wxml`
- `apps/miniprogram/miniprogram/components/` 下所有自定义组件
- `apps/miniprogram/miniprogram/miniprogram_npm/tdesign-miniprogram/`（对比参考）

### 发现
1. 全局 grep `aria-label|aria-role|aria-hidden|role=` 在项目自有 wxml 文件中结果为零
2. 仅 TDesign 组件库（`miniprogram_npm/tdesign-miniprogram/`）内部使用了无障碍属性：
   - `swiper-nav.wxml`：`aria-role="button" aria-label="上一张/下一张"`
   - `tabs.wxml`：`aria-role="tablist"`
   - `upload.wxml`：`aria-role="presentation"` + 动态 `aria-label`
3. task-list.wxml 中的交互元素缺少无障碍标注：
   - 任务卡片无 `aria-role="button"` 或 `aria-label`
   - 重试按钮无 `aria-role="button"`
   - 上下文菜单项无 `aria-label`
4. task-detail.wxml 中同样缺失：
   - 底部操作栏按钮无 `aria-label`
   - 手机号查看/复制按钮无 `aria-label`
   - 话术复制按钮无 `aria-label`

### 证据
task-list.wxml 中任务卡片（无无障碍属性）：
```xml
<view class="task-card ..."
  hover-class="task-card--hover" hover-stay-time="100"
  data-id="{{item.id}}" data-tasktype="{{item.taskType}}"
  bindtap="onTaskTap" bindlongpress="onTaskLongPress">
```

task-detail.wxml 中底部操作栏（无无障碍属性）：
```xml
<view class="btn-ask" bindtap="onAskAssistant" hover-class="btn-ask--hover">
  <t-icon name="chat" size="36rpx" color="#ffffff" />
  <text class="btn-text">问问助手</text>
</view>
```

对比 TDesign 组件（有无障碍属性）：
```xml
<view ... aria-role="button" aria-label="上一张"/>
```

### 建议
1. 为所有可交互元素添加 `aria-role` 和 `aria-label`：
   - 任务卡片：`aria-role="button" aria-label="{{item.customerName}} {{item.taskTypeLabel}}"`
   - 操作按钮：`aria-role="button" aria-label="问问助手"` / `aria-label="添加备注"`
   - 上下文菜单项：`aria-role="menuitem" aria-label="置顶"`
2. 为非交互的装饰性元素添加 `aria-hidden="true"`（如 banner 背景图、调试面板）
3. 确保焦点顺序合理：banner → 任务列表 → 底部操作栏
4. 建议创建一个无障碍适配 checklist，在后续页面开发中统一执行
5. 优先级较低，可作为 P13 前端打磨的后续迭代
