dootask/docs/events-map.md
kuaifan 383664aef7 chore(quality): 引入 phpstan/ESLint/CI 门禁、Claude hooks 与代码检索地图
- phpstan(larastan ^3.10, level 1 + baseline 封存 86 个存量错误),composer stan / stan-baseline
- ESLint 9 flat config(vue2-essential,存量违规降 warn,error 基线为 0),npm run lint
- CI:.github/workflows/tests.yml(static-checks + phpunit,phpunit 用 kuaifan/php 镜像跑,FFI doo.so 不在仓库)
- Claude Code hooks:编辑 app/ 下 PHP 后自动单文件 phpstan,失败回灌
- 检索地图:routes/api-map.md(doc:api-map 生成,325 接口)、docs/events-map.md(events:map)、types/dootask-globals.d.ts($A 207 方法)、npm run check:lang(存量缺失 93 条,CI 暂非阻塞)
- CLAUDE.md:版本号更正 Laravel 13/PHP 8.4,新增质量门禁、检索地图、架构增量规则章节

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 01:21:22 +00:00

324 lines
10 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.

# 前端事件总线注册表
> **本文件由脚本自动生成,请勿手改。**
>
> - 生成命令: `node scripts/gen-events-map.mjs`
> - 扫描范围: `resources/assets/js` 下所有 `.js` / `.vue` 文件(共 268 个)
> - 事件总线: `resources/assets/js/store/events.js`mitt 实例)
> - 仅匹配裸 `emitter.emit/on/off(` 调用;`xxx.emitter.emit(`(如 Quill 内部 emitter不属于本总线已排除
**29** 个静态可解析事件,**125** 处 `emitter.emit/on/off` 调用。
## 事件清单
### `addMeeting`
- **emit10**
- `resources/assets/js/App.vue:420`
- `resources/assets/js/pages/manage.vue:1236`
- `resources/assets/js/pages/manage.vue:1243`
- `resources/assets/js/pages/manage/application.vue:1188`
- `resources/assets/js/pages/manage/application.vue:1194`
- `resources/assets/js/pages/manage/components/ChatInput/index.vue:1882`
- `resources/assets/js/pages/manage/components/DialogView/index.vue:621`
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2017`
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2025`
- `resources/assets/js/pages/manage/messenger.vue:1219`
- **on1**
- `resources/assets/js/pages/manage/components/MeetingManager/index.vue:187`
- **off1**
- `resources/assets/js/pages/manage/components/MeetingManager/index.vue:191`
### `addTask`
- **emit3**
- `resources/assets/js/pages/manage/calendar.vue:255`
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:3513`
- `resources/assets/js/pages/manage/components/ProjectPanel.vue:1357`
- **on1**
- `resources/assets/js/pages/manage.vue:621`
- **off1**
- `resources/assets/js/pages/manage.vue:641`
### `aiAssistantClosed`
- **emit1**
- `resources/assets/js/components/AIAssistant/index.vue:420`
- **on1**
- `resources/assets/js/components/AIAssistant/float-button.vue:154`
- **off1**
- `resources/assets/js/components/AIAssistant/float-button.vue:162`
### `aiOperationRequest`
- **emit1**
- `resources/assets/js/store/actions.js:4781`
- **on1**
- `resources/assets/js/components/AIAssistant/float-button.vue:155`
- **off1**
- `resources/assets/js/components/AIAssistant/float-button.vue:163`
### `approveDetails`
- **emit2**
- `resources/assets/js/pages/manage/approve/index.vue:497`
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:3826`
- **on1**
- `resources/assets/js/pages/manage.vue:624`
- **off1**
- `resources/assets/js/pages/manage.vue:644`
### `clickAgainDialog`
- **emit1**
- `resources/assets/js/components/Mobile/Tabbar.vue:182`
- **on1**
- `resources/assets/js/pages/manage/messenger.vue:344`
- **off1**
- `resources/assets/js/pages/manage/messenger.vue:348`
### `createGroup`
- **emit3**
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2871`
- `resources/assets/js/pages/manage/components/UserDetail.vue:288`
- `resources/assets/js/pages/manage/messenger.vue:1224`
- **on1**
- `resources/assets/js/pages/manage.vue:622`
- **off1**
- `resources/assets/js/pages/manage.vue:642`
### `dialogMsgPush`
- **emit1**
- `resources/assets/js/store/actions.js:4852`
- **on2**
- `resources/assets/js/components/Mobile/Tabbar.vue:49`
- `resources/assets/js/pages/manage.vue:623`
- **off2**
- `resources/assets/js/components/Mobile/Tabbar.vue:53`
- `resources/assets/js/pages/manage.vue:643`
### `handleMoveTop`
- **emit2**
- `resources/assets/js/store/actions.js:2727`
- `resources/assets/js/store/actions.js:3720`
- **on2**
- `resources/assets/js/pages/manage/components/DialogModal.vue:41`
- `resources/assets/js/pages/manage/components/TaskModal.vue:49`
- **off2**
- `resources/assets/js/pages/manage/components/DialogModal.vue:45`
- `resources/assets/js/pages/manage/components/TaskModal.vue:53`
### `observeMicroApp:open`
- **emit1**
- `resources/assets/js/store/actions.js:5361`
- **on1**
- `resources/assets/js/components/MicroApps/index.vue:144`
- **off1**
- `resources/assets/js/components/MicroApps/index.vue:149`
### `observeMicroApp:updatedOrUninstalled`
- **emit1**
- `resources/assets/js/store/mutations.js:429`
- **on1**
- `resources/assets/js/components/MicroApps/index.vue:145`
- **off1**
- `resources/assets/js/components/MicroApps/index.vue:150`
### `openAIAssistant`
- **emit7**
- `resources/assets/js/components/AIAssistant/float-button.vue:476`
- `resources/assets/js/components/SearchBox.vue:582`
- `resources/assets/js/pages/manage.vue:1267`
- `resources/assets/js/pages/manage/components/ChatInput/index.vue:1925`
- `resources/assets/js/pages/manage/components/ReportDetail.vue:176`
- `resources/assets/js/pages/manage/components/ReportEdit.vue:267`
- `resources/assets/js/pages/manage/components/TaskAdd.vue:703`
- **on1**
- `resources/assets/js/components/AIAssistant/index.vue:361`
- **off1**
- `resources/assets/js/components/AIAssistant/index.vue:368`
### `openAIAssistantGlobal`
- **emit1**
- `resources/assets/js/pages/manage.vue:1255`
- **on1**
- `resources/assets/js/components/AIAssistant/float-button.vue:153`
- **off1**
- `resources/assets/js/components/AIAssistant/float-button.vue:161`
### `openDownloadClient`
- **emit1**
- `resources/assets/js/pages/manage.vue:1128`
- **on1**
- `resources/assets/js/components/RightBottom.vue:73`
- **off1**
- `resources/assets/js/components/RightBottom.vue:78`
### `openFavorite`
- **emit1**
- `resources/assets/js/pages/manage/application.vue:1061`
- **on1**
- `resources/assets/js/pages/manage.vue:626`
- **off1**
- `resources/assets/js/pages/manage.vue:646`
### `openManageExport`
- **emit1**
- `resources/assets/js/pages/manage/application.vue:1108`
- **on1**
- `resources/assets/js/pages/manage.vue:628`
- **off1**
- `resources/assets/js/pages/manage.vue:648`
### `openMobileNotification`
- **emit1**
- `resources/assets/js/pages/manage.vue:1641`
- **on1**
- `resources/assets/js/components/Mobile/Notification.vue:38`
- **off1**
- `resources/assets/js/components/Mobile/Notification.vue:42`
### `openProjectInvite`
- **emit1**
- `resources/assets/js/App.vue:432`
- **on1**
- `resources/assets/js/pages/manage/components/ProjectInvite.vue:83`
- **off1**
- `resources/assets/js/pages/manage/components/ProjectInvite.vue:87`
### `openRecent`
- **emit1**
- `resources/assets/js/pages/manage/application.vue:1064`
- **on1**
- `resources/assets/js/pages/manage.vue:627`
- **off1**
- `resources/assets/js/pages/manage.vue:647`
### `openReport`
- **emit1**
- `resources/assets/js/pages/manage/application.vue:1058`
- **on1**
- `resources/assets/js/pages/manage.vue:625`
- **off1**
- `resources/assets/js/pages/manage.vue:645`
### `openSearch`
- **emit1**
- `resources/assets/js/pages/manage/dashboard.vue:256`
- **on1**
- `resources/assets/js/components/SearchBox.vue:128`
- **off1**
- `resources/assets/js/components/SearchBox.vue:132`
### `openUser`
- **emit5**
- `resources/assets/js/components/UserAvatar/index.vue:184`
- `resources/assets/js/pages/manage/approve/details.vue:546`
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2940`
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:4494`
- `resources/assets/js/pages/manage/messenger.vue:1229`
- **on1**
- `resources/assets/js/pages/manage/components/UserDetail.vue:166`
- **off1**
- `resources/assets/js/pages/manage/components/UserDetail.vue:170`
### `receiveTask`
- **emit2**
- `resources/assets/js/pages/manage/components/ProjectPanel.vue:1768`
- `resources/assets/js/pages/manage/components/TaskRow.vue:280`
- **on1**
- `resources/assets/js/pages/manage/components/TaskDetail.vue:738`
- **off1**
- `resources/assets/js/pages/manage/components/TaskDetail.vue:745`
### `streamMsgData`
- **emit1**
- `resources/assets/js/store/actions.js:4469`
- **on1**
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:946`
- **off1**
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:956`
### `taskRelationUpdate`
- **emit1**
- `resources/assets/js/store/actions.js:4992`
- **on1**
- `resources/assets/js/pages/manage/components/TaskDetail.vue:739`
- **off1**
- `resources/assets/js/pages/manage/components/TaskDetail.vue:746`
### `updateNotification`
- **emit2**
- `resources/assets/js/pages/manage.vue:1125`
- `resources/assets/js/pages/manage/setting/index.vue:191`
- **on1**
- `resources/assets/js/components/RightBottom.vue:65`
- **off1**
- `resources/assets/js/components/RightBottom.vue:77`
### `useSSOLogin`
- **emit1**
- `resources/assets/js/components/RightBottom.vue:231`
- **on1**
- `resources/assets/js/pages/login.vue:217`
- **off1**
- `resources/assets/js/pages/login.vue:222`
### `userActive`
- **emit3**
- `resources/assets/js/store/actions.js:870`
- `resources/assets/js/store/actions.js:952`
- `resources/assets/js/store/actions.js:4769`
- **on1**
- `resources/assets/js/components/UserAvatar/index.vue:43`
- **off1**
- `resources/assets/js/components/UserAvatar/index.vue:47`
### `websocketMsg`
- **emit1**
- `resources/assets/js/store/actions.js:4786`
- **on3**
- `resources/assets/js/pages/manage/approve/index.vue:380`
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:945`
- `resources/assets/js/pages/manage/components/FileContent.vue:202`
- **off3**
- `resources/assets/js/pages/manage/approve/index.vue:383`
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:957`
- `resources/assets/js/pages/manage/components/FileContent.vue:225`
## 动态事件名(无法静态解析)
以下调用的第一参数不是字符串字面量,无法静态解析事件名:
- `resources/assets/js/components/MicroApps/index.vue:365``emitter.emit(actionName...)`
## 统计
- 事件总数(静态可解析): **29**
- 只 emit 无 on疑似死事件: **0**
- 只 on 无 emit无人发射: **0**
- 动态事件名调用: **1**