Files
beaver_project/docs/ui-ux/pages/notifications.md
steven_li 2c5205b06e feat: 添加MinIO文件系统支持并优化外部连接器功能
- 添加MinIO用户文件系统配置选项(BEAVER_MINIO_ROOT_USER等)
- 更新外部连接器配置结构,包括BASE_URL和认证令牌设置
- 改进connector provider支持更多类型(official, feishu_bot等)
- 实现Mistral模型推理模式支持reasoning_effort参数
- 增强外部连接器策略配置和运行时配置管理
- 添加connector bridge事件验证和安全保护机制
- 优化任务路由逻辑,区分simple_chat和new_task场景
- 更新初始技能工具提示配置,分离authoring admin功能
2026-06-05 11:46:40 +08:00

136 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 主应用:通知页 UI/UX
## 1. 页面定义
| 项目 | 内容 |
| --- | --- |
| 页面名称 | 通知中心 |
| 通知列表路由 | `/notifications` |
| 通知详情路由 | `/notifications/[scheduledRunId]` |
| 页面实现 | `app-instance/frontend/app/(app)/notifications/page.tsx``app-instance/frontend/app/(app)/notifications/[scheduledRunId]/page.tsx` |
| 关键组件 | `NotificationsPage``NotificationDetailPage``ChatWorkbench``MessageList``Button``Badge` |
| 核心任务 | 查看定时任务生成的通知、进入通知详情、刷新通知、对通知结果提出本次修改或未来规则调整、打开已接入 Task |
| 测试状态 | 已修复并复测通过;本地与 `terminaltest` 生产实例均通过 |
## 2. 信息架构与组件层级
```text
AppShell
└── main.pt-16
├── /notifications
│ ├── Page Header
│ │ ├── h1 Notifications
│ │ ├── 页面说明
│ │ └── 刷新按钮
│ ├── Error Card
│ └── Notification List Panel
│ ├── Loading State
│ ├── Empty State
│ └── Notification Link Row/Card
│ ├── 标题
│ ├── 状态 Badge
│ ├── 摘要
│ ├── 生成时间
│ ├── job 名称
│ └── 桌面端箭头
└── /notifications/[scheduledRunId]
├── Detail Header
│ ├── 返回通知列表
│ ├── 标题
│ ├── 状态 / 已接入 Task Badge
│ ├── 生成时间
│ ├── 刷新按钮
│ └── 查看任务按钮
├── Error Banner
├── ChatWorkbench
│ └── MessageList
│ ├── 用户原始请求
│ └── 通知生成结果
└── Reply Panel
├── 修改这次
├── 以后按这样
├── 已接入提示
└── 回复输入框 + 发送
```
## 3. 布局与响应式规则
### 通知列表
- 外层使用 `max-w-6xl`,移动端内边距为 `16px`,桌面端为 `24px`
- 列表区域是独立白色面板,内部垂直滚动,不产生页面级横向滚动。
- 移动端列表项按单列卡片阅读:标题、摘要、时间和 job 名称上下排列。
- `md` 及以上使用网格列展示摘要、时间、job 名称和箭头,方便桌面端扫描。
- 长标题、长摘要和长 job 名称都使用容器内断行,避免 ID 或连续字符串撑破卡片。
- 刷新按钮高度为 `44px`,满足移动端触控目标要求。
### 通知详情
- 页面整体高度为 `calc(100vh - 4rem)`,位于全局 header 下方。
- 顶部详情 header 使用浅色背景和底部分隔线,承载返回、标题、状态、生成时间和操作按钮。
- 移动端标题允许换行,不再只截断;长 scheduled run id 或长标题不会撑破页面。
- 中间 `ChatWorkbench` 使用剩余高度展示消息流。
- 底部回复区是独立面板,包含两个意图按钮和按需出现的输入框。
- 回复输入框有可见 label不依赖 placeholder 作为唯一说明。
- 返回、刷新、查看任务、意图选择、发送等关键操作均为 `44px` 高度。
## 4. 操作与 UX 逻辑
| 操作 | 触发方式 | 状态变化与反馈 | UX 目的 | 当前结果 |
| --- | --- | --- | --- | --- |
| 刷新通知列表 | 点击列表页 Refresh | 调用 `GET /api/notifications`,列表重新渲染 | 获取最新定时通知 | 正常 |
| 打开通知详情 | 点击通知列表项 | 跳转 `/notifications/[scheduledRunId]` | 查看通知完整上下文和结果 | 正常 |
| 空通知状态 | 列表接口返回空数组 | 显示“暂无通知” | 明确没有可处理内容 | 正常 |
| 列表加载失败 | 列表接口失败 | 显示错误卡片 | 让用户知道是接口异常而不是无数据 | 正常 |
| 返回通知列表 | 详情页点击返回 | 跳转 `/notifications` | 提供明确退出路径 | 正常 |
| 刷新通知详情 | 详情页点击 Refresh | 调用 `GET /api/notifications/[id]` | 重新获取当前通知状态 | 正常 |
| 修改这次 | 点击 `Revise this` | 按钮进入选中态,显示“本次通知的修改说明”输入框 | 只影响本次通知结果 | 正常 |
| 以后按这样 | 点击 `Apply going forward` | 按钮进入选中态,显示“以后这类通知的调整说明”输入框 | 将用户偏好表达为未来规则 | 正常 |
| 发送修改说明 | 输入内容后点击 Send | 调用 `POST /api/chat`,携带 `reply_to_scheduled_run_id``scheduled_reply_intent` | 把通知反馈接回对话/任务处理流程 | 正常 |
| 打开已接入 Task | 已存在 `task_id` 时点击 Open task | 跳转 `/tasks/[taskId]` | 从通知继续跟进任务 | 正常 |
| 通知不存在 | 详情接口失败或无数据 | 显示错误信息和返回通知入口 | 提供异常恢复路径 | 正常 |
## 5. 响应式测试矩阵
测试日期2026-06-04。浏览器Playwright Chromium。环境本地 dev server `http://127.0.0.1:3080` 与生产实例 `terminaltest`API 使用模拟数据,真实浏览器执行点击、输入、跳转和截图。
| 页面 | 视口 | 横向越界 | 小触控目标 | 关键结论 |
| --- | --- | --- | --- | --- |
| 通知列表 | `320×568` | 无 | 0 | 长标题和长 job 名在卡片内换行 |
| 通知列表 | `390×844` | 无 | 0 | 手机竖屏可刷新、进入详情 |
| 通知列表 | `844×390` 横屏 | 无 | 0 | 横屏无页面级横向滚动 |
| 通知列表 | `768×1024` | 无 | 0 | 平板列表布局稳定 |
| 通知列表 | `1365×900` | 无 | 0 | 桌面网格列可扫描 |
| 通知空态 | `390×844` | 无 | 0 | 空态居中显示 |
| 通知错误态 | `390×844` | 无 | 0 | 错误信息在卡片内可读 |
| 通知详情 | `320×568` | 无 | 0 | 顶部标题换行,回复区不遮挡 |
| 通知详情 | `390×844` | 无 | 0 | 消息流和底部回复区分层清楚 |
| 通知详情 | `768×1024` | 无 | 0 | 平板详情布局正常 |
| 通知详情 | `1365×900` | 无 | 0 | 桌面详情布局正常 |
| 通知详情错误态 | `390×844` | 无 | 0 | 返回通知入口可见 |
### 关键量化证据
- 本地通知页 QA 自动化用例 `4 passed`
- 部署到 `terminaltest` 后,同一套通知页 QA 自动化用例 `4 passed`
- 列表实测视口 `320×568``390×844``844×390``768×1024``1365×900` 均无页面级横向越界。
- 详情实测视口 `320×568``390×844``768×1024``1365×900` 均无页面级横向越界。
- 所有实测视口可见小触控目标数为 `0`
- 回复提交实测请求包含 `reply_to_scheduled_run_id``scheduled_reply_intent=revise_once`
## 6. 已修复问题
| 等级 | 问题 | 修复 |
| --- | --- | --- |
| P1 | 通知列表长标题、长 job 名在移动端被右侧裁切或存在撑破风险 | 标题、摘要和 job 名增加容器内断行;列表项保留 `min-w-0` |
| P2 | 列表 Refresh 按钮高度只有 36px低于移动端触控标准 | 调整为 `44px` |
| P2 | 详情页返回、Refresh、Revise、Apply going forward 等操作高度不足 44px | 统一调整为 `44px` |
| P2 | 详情页标题只截断,移动端无法判断完整通知主题 | 改为可换行并控制在容器内 |
| P2 | 详情回复输入框依赖 placeholder 表达含义 | 增加可见 label并根据意图区分本次修改/未来调整 |
| P3 | 意图按钮缺少明确 pressed 状态语义 | 增加 `aria-pressed` |
## 7. 剩余观察项
- 本地 mocked API 场景会出现 WebSocket 握手失败日志,因为测试 token 不对应真实后端 WS该日志不影响通知页 HTTP 交互和布局结论。
- 后续接入真实用户历史通知时,仍需持续观察第三方系统生成的异常长 Markdown、附件和错误文本。