bujinyuan
d6fb7ce291
feat(meeting): Task 13 完成 meeting_invite 通知卡片对接
## 后端
- MeetingService.InviteUsers 的 PushPayload.Extra 补齐设计 §10.1 要求字段:
inviter_id / inviter_name / inviter_avatar / expired_at(Unix 秒,
与 Redis TTL MeetingInviteTokenTTL=600s 对齐)
## 前端
- constants/notify.js:supportsInlineAction 扩展支持 meeting_invite;
新增 NOTIFY_INLINE_ACTION_LABEL 映射(meeting_invite → 立即加入/稍后)
+ NOTIFY_INLINE_ACTION_DEFAULT 兜底
- components/notify/NotifyItem.vue:
* 按 type 动态渲染按钮文案(actionLabel 计算属性)
* isExpired 计算属性:meeting_invite 比对 extra.expired_at * 1000
* 过期态合并为单个 disabled 的"邀请已过期"按钮
* 新增 .notify-btn--expired 灰显样式
- pages/notify/index.vue:
* handleAccept / handleReject / _navigateByNotify 增加 meeting_invite 分支
* 新增 _navigateToMeetingInvite 辅助:跳 /pages/meeting/preview?mode=join&code=xxx
* 过期时 toast "邀请已过期"不跳转,"稍后"仅 markRead 不发接口
## 文档
- docs/plans/2026-04-21-phase2e-2-implementation.plan.md:Task 13 标 ✅ + 详细产出
- docs/progress/CURRENT_STATUS.md:新增 Task 13 专节(关键技术点 / 验证记录 / 下一步)
- .cursor/rules/project-context.mdc:2e-2 进度刷 Task 0-13 ✅
## 验证
后端 curl 双角色端到端(testuser1 创会 → 邀请 testuser2 → 拉通知列表):
- type=meeting_invite,extra 8 字段齐全
- expired_at = invited_at + 600,与 Redis TTL 对齐
Made-with: Cursor
2026-04-22 17:26:31 +08:00
..
2026-04-22 15:16:17 +08:00
2026-04-21 18:21:04 +08:00
2026-04-21 16:04:57 +08:00
2026-04-22 17:26:31 +08:00
2026-04-21 18:21:04 +08:00
2026-04-21 18:21:04 +08:00
2026-04-21 16:39:59 +08:00