READMESource: master@5bc90faf
dsh-dafeiyu-notice
大肥鱼你做完了就叫我
DSH Web 的完成提醒插件:会话完成后大肥鱼出现,点击直接切回对应会话;支持 FIFO 排队、点击回应动画、等待回答/确认卡片与钉钉提示音。
目录
功能
任务完成大肥鱼
任意 DSH 会话从“运行中”变为“空闲”,并且不是空白会话、没有待回答/待确认请求时,右下角会出现大肥鱼:
- 待机动画循环播放,气泡显示“任务完成啦!”和会话标题。
- 多个会话先后完成时排成 FIFO 队列,大肥鱼只出现一个,气泡显示“还有 N 个”。
- 同一会话重复完成只更新队列里的标题,不会重复占位。
- 用户主动停止生成(点击“停止生成”或连按两次 Esc)不会触发完成提醒。
点击切换会话与点击回应动画
点击大肥鱼(或聚焦后按 Enter / 空格):
- 立即打开 队首 会话,并把它从队列中移除。
- 播放一段随机“点击回应”动画,动画会跟着新页面继续播放。
- 队列还有会话时,动画结束后回到待机,等下一次点击;队列清空时,动画结束后淡出收起。
点击回应动画共 5 段,随机选择,并避免与上一次连续重复:
| id | 名称 |
|---|---|
wave |
元气挥手 |
happy |
开心跃动 |
shy |
害羞惊讶 |
tickle |
挠痒咯咯笑 |
angry |
傲娇生气 |
气泡右上角的 × 可以随时清空整个队列并收起大肥鱼。
等待回答 / 等待确认卡片
出现新的问答或审批请求时,右下角弹出提示卡片:
- 卡片会自动消失,停留时长 8 秒。
- 最多同时显示 4 张,超出时挤掉最早的。
- 点击卡片或按 Enter 打开对应会话;点
×只关闭当前卡片。 - 同一类提示 1.5 秒内只弹一次,避免连续事件刷屏。
- 容器带
role="status"与aria-live="polite",方便读屏软件播报。
提示音
- 任务完成使用内嵌的钉钉提示音;等待回答/确认使用另一段三音提示,便于区分。
- 浏览器自动播放策略要求页面先获得一次用户手势(点击或按键),之后才能稳定发声。
- MP3 被策略拦截时会自动退回 WebAudio 合成音,视觉提示不受影响。
- 大肥鱼已经显示时,新完成的会话只入队,不重复响铃。
其它
- 拖动与位置记忆:大肥鱼可以拖到任意位置,位置保存在
localStorage,刷新页面后恢复;窗口尺寸变化时会自动收回视口内。 - 主题适配:颜色使用宿主的
--dsw-alias-*主题令牌,浅色/深色主题都可融入。 - 中英文文案:跟随宿主语言,提供
zh/en两套字典。 - 键盘与读屏:大肥鱼是有
role="button"的焦点元素,支持 Enter / 空格;读屏软件合成的 click 也能触发切换。
安装
前置条件
- 可运行的 DSH Web 环境。
- Node.js 与 pnpm。
构建
cd /absolute/path/to/notify-plugin
pnpm install
pnpm build
构建会生成 lib/client.js。更完整的构建说明见 开发文档。
挂到 DSH profile
cd ~/.dsh/profiles/web
pnpm add link:/absolute/path/to/notify-plugin
把包名加入该 profile 的 dsh.profile.bundles(保留原有条目,在末尾追加):
{
"dependencies": {
"@local/dsh-plugin-task-notify": "link:/absolute/path/to/notify-plugin"
},
"dsh": {
"profile": {
"bundles": [
"@local/dsh-plugin-task-notify"
]
}
}
}
插件包内的 cordis.patch.yml 会自动把 task-notify 条目插入 profile。重启 DSH Web 服务并刷新页面即可。
使用
| 操作 | 效果 |
|---|---|
| 点击大肥鱼 | 打开队首会话,播放一段随机点击回应动画 |
点击气泡 × |
清空完成队列并收起大肥鱼 |
| 拖动大肥鱼 | 移动位置,松手后保存 |
| 聚焦大肥鱼后按 Enter / 空格 | 等同于点击 |
| 点击等待回答/确认卡片 | 打开对应会话 |
点击卡片 × |
只关闭这张卡片 |
完成会话的消费顺序就是入队顺序:
会话 A 完成 ─┐
会话 B 完成 ─┼─▶ 队列 [A, B, C] ──点击──▶ 打开 A,队列 [B, C]
会话 C 完成 ─┘ ──点击──▶ 打开 B,队列 [C]
──点击──▶ 打开 C,队列 []
队列清空后,最后一段点击回应动画播完会先淡回待机,再淡出收起;如果淡出期间又有会话完成,大肥鱼会继续保留。
设置
在 设置 → 通用 → 任务完成提醒 中可以调整:
| 设置 | 默认 | 说明 |
|---|---|---|
| 提醒 | 开启 | 总开关;关闭后不再产生新的大肥鱼和卡片 |
| 声音 | 开启 | 控制完成提示音与等待提示音;打开时会试听一次 |
设置保存在 localStorage:
| 键 | 内容 |
|---|---|
dsh.taskNotify.settings.v1 |
{"enabled": true, "sound": true} |
dsh.taskNotify.spritePos.v1 |
{"left": number, "top": number},单位:像素 |
需要重置时,在浏览器控制台删除对应键并刷新页面即可。
开发文档
构建、测试、实现细节、素材生成和目录结构见 docs/DEVELOPMENT.md。
常见问题
完成任务后没有大肥鱼
按顺序检查:
- 设置页的“提醒”总开关是否开启。
- 会话是否真的从运行中变为空闲,而不是被手动停止。
- 会话是否仍是空白会话,或仍有待回答/待确认请求。
- 修改代码后是否重新执行过
pnpm build,并刷新了页面。 - 浏览器控制台是否有插件加载错误。
没有声音
- 先点击页面任意位置或按一次键,满足浏览器的手势要求。
- 检查设置页的“声音”开关。
- 检查系统/标签页是否静音。
- 若 MP3 被策略拦截,插件会尝试 WebAudio 合成音;两者都不可用时只保留视觉提示。
点击大肥鱼没有切换会话
- 确认当前 DSH 版本提供
uiWorkspace服务。 - 确认队列里的会话仍然存在;已删除或归档的会话可能无法打开。
- 如果刚点完最后一个会话,大肥鱼会在动画结束后收起,这是预期行为。
刷新后队列消失
完成队列只保存在内存中,刷新页面会清空;这是为了避免恢复出已经过期的提醒。位置和设置会保留。
大肥鱼跑到屏幕外
拖动回来即可;如果坐标异常,删除 localStorage 里的 dsh.taskNotify.spritePos.v1 后刷新。
素材与许可
- 点击回应动画素材来自 PC2005-cloud/dsh-pet,由本仓库脚本离线转成雪碧图;使用或再分发请遵循原仓库的许可。
- 钉钉提示音来自
assets/dingtalk.mp3,仅用于本插件提示。 - 本仓库目前未附带独立
LICENSE文件;如需对外分发,请先补充许可证并确认上述素材的授权范围。
No comments yet. Be the first to write one.