Files
guilixu-admin/.workbuddy/memory/2026-07-06.md
赵忠林 f0b0280c4f feat(shop): 实现新订单声音和语音提醒功能
- 新增 useOrderNotify 组合式函数,支持每60秒轮询检测新订单
- 采用 Web Audio API 播放叮声,Speech Synthesis API 进行语音播报
- shopOrder 页面添加提醒开关栏,包含开关、提示和测试按钮
- 开关默认关闭,需用户点击启用后启动声音和轮询功能
- 测试按钮仅在提醒开启时可用,用于验证提醒效果
- 完善样式,提升提醒栏的视觉效果和交互体验
- 统一更新相关环境变量,调整项目名称和接口地址
2026-07-06 12:43:04 +08:00

35 lines
1.7 KiB
Markdown
Raw Permalink 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.

# 2026-07-06 工作日志
## 新订单声音/语音提醒功能
### 需求
订单管理页面 `/shop/shopOrder` 实现新订单的语音提醒("您有一条新的订单")和"叮"声提醒。
### 背景
- 订单页面原为纯 HTTP 请求获取数据(用户手动触发),无轮询、无 WebSocket
- 项目中无任何声音/音频系统
### 方案
采用**轮询检测 + Web Audio API 叮声 + Speech Synthesis API 语音播报**,纯前端实现,零依赖。
### 实现
1. 新建 `src/views/shop/shopOrder/useOrderNotify.ts` 组合式函数
- 每 60 秒轮询 `pageShopOrder({ page: 1, limit: 1, type: 0 })` 查询最新订单
- 比较最新 orderId首次查询记录基准值不触发之后检测到新 orderId 则触发提醒
- Web Audio API 生成 880Hz 正弦波"叮"声(含攻击+指数衰减包络)
- Speech Synthesis API 播报"您有一条新的订单"
- 组件卸载时自动清理定时器onBeforeUnmount
2. 修改 `src/views/shop/shopOrder/index.vue`
- 表格上方添加提醒开关栏a-switch + tooltip + 测试按钮)
- 导入 InfoCircleOutlined 图标
- 集成 useOrderNotify 组合式函数
- 添加 .order-notify-bar 样式
### 注意事项
- 开关**默认开启**,进入订单页面即自动开始轮询
- 浏览器策略要求音频播放需用户交互后才能触发,因此注册了 document click/keydown 一次性监听器,用户首次点击或按键时自动解锁音频
- 用户未交互前检测到新订单时,语音和叮声可能静默失败,交互后即恢复正常
- "测试提醒"按钮仅在开关开启后可用,方便用户验证声音效果
- 轮询间隔可修改 useOrderNotify.ts 中的 POLL_INTERVAL 常量