mirror of
https://github.com/kuaifan/dootask.git
synced 2026-08-10 23:08:34 +00:00
feat(ai-assistant): 支持设置悬浮按钮显示
This commit is contained in:
parent
867a305c7a
commit
5e87eb459e
@ -3,11 +3,11 @@
|
||||
> **本文件由脚本自动生成,请勿手改。**
|
||||
>
|
||||
> - 生成命令: `node scripts/gen-events-map.mjs`
|
||||
> - 扫描范围: `resources/assets/js` 下所有 `.js` / `.vue` 文件(共 267 个)
|
||||
> - 扫描范围: `resources/assets/js` 下所有 `.js` / `.vue` 文件(共 272 个)
|
||||
> - 事件总线: `resources/assets/js/store/events.js`(mitt 实例)
|
||||
> - 仅匹配裸 `emitter.emit/on/off(` 调用;`xxx.emitter.emit(`(如 Quill 内部 emitter)不属于本总线,已排除
|
||||
|
||||
共 **29** 个静态可解析事件,**121** 处 `emitter.emit/on/off` 调用。
|
||||
共 **30** 个静态可解析事件,**124** 处 `emitter.emit/on/off` 调用。
|
||||
|
||||
## 事件清单
|
||||
|
||||
@ -15,14 +15,14 @@
|
||||
|
||||
- **emit(10)**
|
||||
- `resources/assets/js/App.vue:420`
|
||||
- `resources/assets/js/pages/manage.vue:1192`
|
||||
- `resources/assets/js/pages/manage.vue:1199`
|
||||
- `resources/assets/js/pages/manage/application.vue:1181`
|
||||
- `resources/assets/js/pages/manage/application.vue:1187`
|
||||
- `resources/assets/js/pages/manage.vue:1206`
|
||||
- `resources/assets/js/pages/manage.vue:1213`
|
||||
- `resources/assets/js/pages/manage/application.vue:1195`
|
||||
- `resources/assets/js/pages/manage/application.vue:1201`
|
||||
- `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:2012`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2020`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2040`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2048`
|
||||
- `resources/assets/js/pages/manage/messenger.vue:1219`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage/components/MeetingManager/index.vue:187`
|
||||
@ -32,36 +32,45 @@
|
||||
### `addTask`
|
||||
|
||||
- **emit(3)**
|
||||
- `resources/assets/js/pages/manage/calendar.vue:255`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:3508`
|
||||
- `resources/assets/js/pages/manage/calendar.vue:247`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:3536`
|
||||
- `resources/assets/js/pages/manage/components/ProjectPanel.vue:1357`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage.vue:592`
|
||||
- `resources/assets/js/pages/manage.vue:595`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/pages/manage.vue:610`
|
||||
- `resources/assets/js/pages/manage.vue:613`
|
||||
|
||||
### `aiAssistantClosed`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/components/AIAssistant/index.vue:442`
|
||||
- `resources/assets/js/components/AIAssistant/index.vue:447`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:154`
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:159`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:162`
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:168`
|
||||
|
||||
### `aiAssistantFloatButtonVisibilityChanged`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/pages/manage/setting/assistant.vue:59`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:161`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:170`
|
||||
|
||||
### `aiOperationRequest`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/store/actions.js:4752`
|
||||
- `resources/assets/js/store/actions.js:4890`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:155`
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:160`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:163`
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:169`
|
||||
|
||||
### `clickAgainDialog`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/components/Mobile/Tabbar.vue:182`
|
||||
- `resources/assets/js/components/Mobile/Tabbar.vue:189`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage/messenger.vue:344`
|
||||
- **off(1)**
|
||||
@ -70,30 +79,30 @@
|
||||
### `createGroup`
|
||||
|
||||
- **emit(3)**
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2866`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2894`
|
||||
- `resources/assets/js/pages/manage/components/UserDetail.vue:288`
|
||||
- `resources/assets/js/pages/manage/messenger.vue:1224`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage.vue:593`
|
||||
- `resources/assets/js/pages/manage.vue:596`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/pages/manage.vue:611`
|
||||
- `resources/assets/js/pages/manage.vue:614`
|
||||
|
||||
### `dialogMsgPush`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/store/actions.js:4823`
|
||||
- `resources/assets/js/store/actions.js:4961`
|
||||
- **on(2)**
|
||||
- `resources/assets/js/components/Mobile/Tabbar.vue:49`
|
||||
- `resources/assets/js/pages/manage.vue:594`
|
||||
- `resources/assets/js/components/Mobile/Tabbar.vue:50`
|
||||
- `resources/assets/js/pages/manage.vue:597`
|
||||
- **off(2)**
|
||||
- `resources/assets/js/components/Mobile/Tabbar.vue:53`
|
||||
- `resources/assets/js/pages/manage.vue:612`
|
||||
- `resources/assets/js/components/Mobile/Tabbar.vue:54`
|
||||
- `resources/assets/js/pages/manage.vue:615`
|
||||
|
||||
### `handleMoveTop`
|
||||
|
||||
- **emit(2)**
|
||||
- `resources/assets/js/store/actions.js:2698`
|
||||
- `resources/assets/js/store/actions.js:3691`
|
||||
- `resources/assets/js/store/actions.js:2810`
|
||||
- `resources/assets/js/store/actions.js:3803`
|
||||
- **on(2)**
|
||||
- `resources/assets/js/pages/manage/components/DialogModal.vue:41`
|
||||
- `resources/assets/js/pages/manage/components/TaskModal.vue:49`
|
||||
@ -106,56 +115,56 @@
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/components/AIAssistant/action-executor.js:234`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/MicroApps/index.vue:145`
|
||||
- `resources/assets/js/components/MicroApps/index.vue:203`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/components/MicroApps/index.vue:151`
|
||||
- `resources/assets/js/components/MicroApps/index.vue:209`
|
||||
|
||||
### `observeMicroApp:open`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/store/actions.js:5321`
|
||||
- `resources/assets/js/store/actions.js:5468`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/MicroApps/index.vue:144`
|
||||
- `resources/assets/js/components/MicroApps/index.vue:202`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/components/MicroApps/index.vue:150`
|
||||
- `resources/assets/js/components/MicroApps/index.vue:208`
|
||||
|
||||
### `observeMicroApp:updatedOrUninstalled`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/store/mutations.js:429`
|
||||
- `resources/assets/js/store/mutations.js:452`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/MicroApps/index.vue:146`
|
||||
- `resources/assets/js/components/MicroApps/index.vue:204`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/components/MicroApps/index.vue:152`
|
||||
- `resources/assets/js/components/MicroApps/index.vue:210`
|
||||
|
||||
### `openAIAssistant`
|
||||
|
||||
- **emit(7)**
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:476`
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:508`
|
||||
- `resources/assets/js/components/SearchBox.vue:582`
|
||||
- `resources/assets/js/pages/manage.vue:1223`
|
||||
- `resources/assets/js/pages/manage.vue:1237`
|
||||
- `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:710`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/AIAssistant/index.vue:382`
|
||||
- `resources/assets/js/components/AIAssistant/index.vue:387`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/components/AIAssistant/index.vue:389`
|
||||
- `resources/assets/js/components/AIAssistant/index.vue:394`
|
||||
|
||||
### `openAIAssistantGlobal`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/pages/manage.vue:1211`
|
||||
- `resources/assets/js/pages/manage.vue:1225`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:153`
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:158`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:161`
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:167`
|
||||
|
||||
### `openDownloadClient`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/pages/manage.vue:1092`
|
||||
- `resources/assets/js/pages/manage.vue:1106`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/RightBottom.vue:73`
|
||||
- **off(1)**
|
||||
@ -164,25 +173,25 @@
|
||||
### `openFavorite`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/pages/manage/application.vue:1054`
|
||||
- `resources/assets/js/pages/manage/application.vue:1068`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage.vue:596`
|
||||
- `resources/assets/js/pages/manage.vue:599`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/pages/manage.vue:614`
|
||||
- `resources/assets/js/pages/manage.vue:617`
|
||||
|
||||
### `openManageExport`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/pages/manage/application.vue:1101`
|
||||
- `resources/assets/js/pages/manage/application.vue:1115`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage.vue:598`
|
||||
- `resources/assets/js/pages/manage.vue:601`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/pages/manage.vue:616`
|
||||
- `resources/assets/js/pages/manage.vue:619`
|
||||
|
||||
### `openMobileNotification`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/pages/manage.vue:1597`
|
||||
- `resources/assets/js/pages/manage.vue:1611`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/Mobile/Notification.vue:38`
|
||||
- **off(1)**
|
||||
@ -200,25 +209,25 @@
|
||||
### `openRecent`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/pages/manage/application.vue:1057`
|
||||
- `resources/assets/js/pages/manage/application.vue:1071`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage.vue:597`
|
||||
- `resources/assets/js/pages/manage.vue:600`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/pages/manage.vue:615`
|
||||
- `resources/assets/js/pages/manage.vue:618`
|
||||
|
||||
### `openReport`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/pages/manage/application.vue:1051`
|
||||
- `resources/assets/js/pages/manage/application.vue:1065`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage.vue:595`
|
||||
- `resources/assets/js/pages/manage.vue:598`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/pages/manage.vue:613`
|
||||
- `resources/assets/js/pages/manage.vue:616`
|
||||
|
||||
### `openSearch`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/pages/manage/dashboard.vue:256`
|
||||
- `resources/assets/js/pages/manage/dashboard.vue:784`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/SearchBox.vue:128`
|
||||
- **off(1)**
|
||||
@ -228,8 +237,8 @@
|
||||
|
||||
- **emit(4)**
|
||||
- `resources/assets/js/components/UserAvatar/index.vue:184`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2935`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:4485`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2963`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:4546`
|
||||
- `resources/assets/js/pages/manage/messenger.vue:1229`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage/components/UserDetail.vue:166`
|
||||
@ -242,33 +251,33 @@
|
||||
- `resources/assets/js/pages/manage/components/ProjectPanel.vue:1775`
|
||||
- `resources/assets/js/pages/manage/components/TaskRow.vue:280`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage/components/TaskDetail.vue:738`
|
||||
- `resources/assets/js/pages/manage/components/TaskDetail.vue:744`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/pages/manage/components/TaskDetail.vue:745`
|
||||
- `resources/assets/js/pages/manage/components/TaskDetail.vue:751`
|
||||
|
||||
### `streamMsgData`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/store/actions.js:4440`
|
||||
- `resources/assets/js/store/actions.js:4578`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:943`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:944`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:953`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:954`
|
||||
|
||||
### `taskRelationUpdate`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/store/actions.js:4963`
|
||||
- `resources/assets/js/store/actions.js:5101`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage/components/TaskDetail.vue:739`
|
||||
- `resources/assets/js/pages/manage/components/TaskDetail.vue:745`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/pages/manage/components/TaskDetail.vue:746`
|
||||
- `resources/assets/js/pages/manage/components/TaskDetail.vue:752`
|
||||
|
||||
### `updateNotification`
|
||||
|
||||
- **emit(2)**
|
||||
- `resources/assets/js/pages/manage.vue:1089`
|
||||
- `resources/assets/js/pages/manage/setting/index.vue:191`
|
||||
- `resources/assets/js/pages/manage.vue:1103`
|
||||
- `resources/assets/js/pages/manage/setting/index.vue:206`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/RightBottom.vue:65`
|
||||
- **off(1)**
|
||||
@ -286,9 +295,9 @@
|
||||
### `userActive`
|
||||
|
||||
- **emit(3)**
|
||||
- `resources/assets/js/store/actions.js:841`
|
||||
- `resources/assets/js/store/actions.js:923`
|
||||
- `resources/assets/js/store/actions.js:4740`
|
||||
- `resources/assets/js/store/actions.js:857`
|
||||
- `resources/assets/js/store/actions.js:939`
|
||||
- `resources/assets/js/store/actions.js:4878`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/UserAvatar/index.vue:43`
|
||||
- **off(1)**
|
||||
@ -297,23 +306,23 @@
|
||||
### `websocketMsg`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/store/actions.js:4757`
|
||||
- `resources/assets/js/store/actions.js:4895`
|
||||
- **on(2)**
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:942`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:943`
|
||||
- `resources/assets/js/pages/manage/components/FileContent.vue:202`
|
||||
- **off(2)**
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:954`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:955`
|
||||
- `resources/assets/js/pages/manage/components/FileContent.vue:225`
|
||||
|
||||
## 动态事件名(无法静态解析)
|
||||
|
||||
以下调用的第一参数不是字符串字面量,无法静态解析事件名:
|
||||
|
||||
- `resources/assets/js/components/MicroApps/index.vue:375` — `emitter.emit(actionName...)`
|
||||
- `resources/assets/js/components/MicroApps/index.vue:448` — `emitter.emit(actionName...)`
|
||||
|
||||
## 统计
|
||||
|
||||
- 事件总数(静态可解析): **29**
|
||||
- 事件总数(静态可解析): **30**
|
||||
- 只 emit 无 on(疑似死事件): **0**
|
||||
- 只 on 无 emit(无人发射): **0**
|
||||
- 动态事件名调用: **1**
|
||||
|
||||
@ -2656,3 +2656,5 @@ LDAP 用户禁止修改邮箱
|
||||
[weekday].四
|
||||
[weekday].五
|
||||
[weekday].六
|
||||
AI 助手设置
|
||||
显示悬浮按钮
|
||||
|
||||
@ -38326,5 +38326,29 @@
|
||||
"fr": "Aucune donnée de service à afficher",
|
||||
"id": "Tidak ada data departemen yang dapat dilihat",
|
||||
"ru": "Нет данных отдела для просмотра"
|
||||
},
|
||||
{
|
||||
"key": "AI 助手设置",
|
||||
"zh": "",
|
||||
"zh-CHT": "AI 助手設定",
|
||||
"en": "AI Assistant Settings",
|
||||
"ko": "AI 어시스턴트 설정",
|
||||
"ja": "AIアシスタント設定",
|
||||
"de": "KI-Assistent-Einstellungen",
|
||||
"fr": "Paramètres de l’assistant IA",
|
||||
"id": "Pengaturan Asisten AI",
|
||||
"ru": "Настройки ИИ-помощника"
|
||||
},
|
||||
{
|
||||
"key": "显示悬浮按钮",
|
||||
"zh": "",
|
||||
"zh-CHT": "顯示懸浮按鈕",
|
||||
"en": "Show floating button",
|
||||
"ko": "플로팅 버튼 표시",
|
||||
"ja": "フローティングボタンを表示",
|
||||
"de": "Schwebende Schaltfläche anzeigen",
|
||||
"fr": "Afficher le bouton flottant",
|
||||
"id": "Tampilkan tombol mengambang",
|
||||
"ru": "Показывать плавающую кнопку"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
2
public/language/web/de.js
vendored
2
public/language/web/de.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/en.js
vendored
2
public/language/web/en.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/fr.js
vendored
2
public/language/web/fr.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/id.js
vendored
2
public/language/web/id.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/ja.js
vendored
2
public/language/web/ja.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/key.js
vendored
2
public/language/web/key.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/ko.js
vendored
2
public/language/web/ko.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/ru.js
vendored
2
public/language/web/ru.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/zh-CHT.js
vendored
2
public/language/web/zh-CHT.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/zh.js
vendored
2
public/language/web/zh.js
vendored
File diff suppressed because one or more lines are too long
@ -479,13 +479,14 @@ features:
|
||||
scope: end-user
|
||||
batch: B4
|
||||
priority: P0
|
||||
chunk_count_est: 12
|
||||
chunk_count_est: 13
|
||||
owner: ~
|
||||
status: drafted
|
||||
chunks:
|
||||
- user-settings.privacy.concept
|
||||
- user-settings.shortcut.concept
|
||||
- user-settings.app-sort.howto
|
||||
- user-settings.ai-assistant-float.howto
|
||||
- user-settings.checkin.howto
|
||||
- user-settings.email.howto
|
||||
- user-settings.language.howto
|
||||
|
||||
45
resources/ai-kb/zh/howto/user-settings/ai-assistant-float.md
Normal file
45
resources/ai-kb/zh/howto/user-settings/ai-assistant-float.md
Normal file
@ -0,0 +1,45 @@
|
||||
---
|
||||
id: user-settings.ai-assistant-float.howto
|
||||
title: 显示或隐藏 AI 助手悬浮按钮
|
||||
type: howto
|
||||
feature: user-settings
|
||||
scope: end-user
|
||||
locale: zh
|
||||
aliases:
|
||||
- 怎么关闭 AI 浮球
|
||||
- 隐藏 AI 助手按钮
|
||||
- 恢复 AI 助手浮球
|
||||
- AI 悬浮按钮设置
|
||||
related_tools: []
|
||||
related_pages: [setting]
|
||||
prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
negative:
|
||||
- 隐藏悬浮按钮不会禁用 AI 助手或卸载 ai 插件
|
||||
- 未安装 ai 插件时不显示「AI 助手设置」菜单
|
||||
last_verified: v1.8.89
|
||||
---
|
||||
|
||||
# 显示或隐藏 AI 助手悬浮按钮
|
||||
|
||||
## 入口
|
||||
|
||||
- 桌面端 Web / Electron:右上角头像 →「设置」→「AI 助手设置」
|
||||
- 移动端:底部 Tabbar「我的」→「设置」→「AI 助手设置」
|
||||
- 只有系统已安装 ai 插件时,设置菜单才会出现。
|
||||
|
||||
## 操作步骤
|
||||
|
||||
1. 进入「AI 助手设置」。
|
||||
2. 打开或关闭「显示悬浮按钮」开关。
|
||||
3. 点击「提交」保存并应用;点击「重置」可恢复进入页面时的值。
|
||||
4. 关闭后如需恢复,返回同一页面重新打开开关并提交。
|
||||
|
||||
## 影响范围
|
||||
|
||||
该设置按当前账号保存在当前设备。关闭后只隐藏页面侧边的 AI 助手浮球,不影响右上角「+ → AI 助手」、Cmd/Ctrl + I 快捷键,也不影响项目、任务和汇报等页面中的 AI 功能。清除客户端缓存后,该开关会恢复为默认开启。
|
||||
|
||||
## 相关
|
||||
|
||||
- AI 助手的其他入口:[[menu-navigation.ai-assistant.menu-map]]
|
||||
- 个人设置入口:[[user-settings.entry.menu-map]]
|
||||
@ -17,10 +17,11 @@ prerequisites:
|
||||
- 应用市场已安装 ai 插件
|
||||
- 管理员已在「系统设置 → AI 设置」配置至少一个模型
|
||||
negative:
|
||||
- 未安装 ai 插件时右上「+」菜单不出现「AI 助手」一项,浮动按钮也不渲染
|
||||
- 未安装 ai 插件时右上「+」菜单不出现「AI 助手」一项,悬浮按钮也不渲染
|
||||
- 用户可在「设置 → AI 助手设置」关闭悬浮按钮,关闭后其他入口仍可使用
|
||||
- 没有左侧栏一级菜单,AI 助手是浮窗形态
|
||||
- 移动端首次加载会自动收起浮按钮
|
||||
last_verified: v1.7.90
|
||||
last_verified: v1.8.89
|
||||
---
|
||||
|
||||
# AI 助手入口在哪
|
||||
@ -32,6 +33,8 @@ last_verified: v1.7.90
|
||||
- 移动端:屏幕侧边浮动按钮(默认贴边收起,触摸唤起)
|
||||
- 桌面快捷键:Cmd/Ctrl + I
|
||||
|
||||
悬浮按钮可在「设置 → AI 助手设置」中显示或隐藏,详见 [[user-settings.ai-assistant-float.howto]]。
|
||||
|
||||
## 权限要求
|
||||
- 任何登录用户可用
|
||||
- 单个会话由当前账号私有,不会跨账号
|
||||
|
||||
@ -18,7 +18,7 @@ prerequisites: []
|
||||
negative:
|
||||
- 个人设置没有移动端 Tabbar 一级入口,需先进「我的」再进设置
|
||||
- 未登录用户没有「个人设置」入口
|
||||
last_verified: v1.7.90
|
||||
last_verified: v1.8.89
|
||||
---
|
||||
|
||||
# 个人设置入口
|
||||
@ -40,6 +40,7 @@ last_verified: v1.7.90
|
||||
- 语言设置 → [[user-settings.language.howto]]
|
||||
- 主题设置 → [[user-settings.theme.howto]]
|
||||
- 键盘设置(仅 Electron / 移动端)→ [[user-settings.shortcut.concept]]
|
||||
- AI 助手设置(仅安装 ai 插件后显示)→ [[user-settings.ai-assistant-float.howto]]
|
||||
- 系统设置 / License Key(仅系统管理员可见)
|
||||
- 更新日志 / 版本 / 登录设备 / 清除缓存 / 退出登录
|
||||
|
||||
|
||||
17
resources/assets/js/components/AIAssistant/float-button-preference.js
vendored
Normal file
17
resources/assets/js/components/AIAssistant/float-button-preference.js
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
function cacheKey(userId) {
|
||||
return `aiAssistant.floatButtonVisible.${userId}`;
|
||||
}
|
||||
|
||||
export function loadFloatButtonVisible(userId) {
|
||||
if (userId <= 0) {
|
||||
return Promise.resolve(true);
|
||||
}
|
||||
return $A.IDBBoolean(cacheKey(userId), true).catch(() => true);
|
||||
}
|
||||
|
||||
export function saveFloatButtonVisible(userId, visible) {
|
||||
if (userId <= 0) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
return $A.IDBSet(cacheKey(userId), visible);
|
||||
}
|
||||
@ -27,6 +27,7 @@
|
||||
import {mapState} from "vuex";
|
||||
import emitter from "../../store/events";
|
||||
import {createOperationModule} from "./operation-module";
|
||||
import {loadFloatButtonVisible} from "./float-button-preference";
|
||||
|
||||
export default {
|
||||
name: 'AIAssistantFloatButton',
|
||||
@ -43,6 +44,8 @@ export default {
|
||||
},
|
||||
dragging: false,
|
||||
positionLoaded: false,
|
||||
visibilityLoaded: false,
|
||||
floatButtonVisible: true,
|
||||
cacheKey: 'aiAssistant.floatButtonPosition',
|
||||
btnSize: 44,
|
||||
collapsedHeight: 48, // 收起时的高度
|
||||
@ -68,6 +71,8 @@ export default {
|
||||
return this.aiInstalled &&
|
||||
this.userId > 0 &&
|
||||
this.positionLoaded &&
|
||||
this.visibilityLoaded &&
|
||||
this.floatButtonVisible &&
|
||||
this.routeName !== 'login' &&
|
||||
!this.$parent?.showModal;
|
||||
},
|
||||
@ -153,6 +158,7 @@ export default {
|
||||
emitter.on('openAIAssistantGlobal', this.onClick);
|
||||
emitter.on('aiAssistantClosed', this.onAssistantClosed);
|
||||
emitter.on('aiOperationRequest', this.onOperationRequest);
|
||||
emitter.on('aiAssistantFloatButtonVisibilityChanged', this.onVisibilityChanged);
|
||||
this.initOperationModule();
|
||||
},
|
||||
|
||||
@ -161,6 +167,7 @@ export default {
|
||||
emitter.off('openAIAssistantGlobal', this.onClick);
|
||||
emitter.off('aiAssistantClosed', this.onAssistantClosed);
|
||||
emitter.off('aiOperationRequest', this.onOperationRequest);
|
||||
emitter.off('aiAssistantFloatButtonVisibilityChanged', this.onVisibilityChanged);
|
||||
document.removeEventListener('mousemove', this.onMouseMove);
|
||||
document.removeEventListener('mouseup', this.onMouseUp);
|
||||
document.removeEventListener('contextmenu', this.onContextMenu);
|
||||
@ -171,7 +178,32 @@ export default {
|
||||
this.destroyOperationModule();
|
||||
},
|
||||
|
||||
watch: {
|
||||
userId: {
|
||||
handler(userId) {
|
||||
this.loadVisibility(userId);
|
||||
},
|
||||
immediate: true,
|
||||
},
|
||||
},
|
||||
|
||||
methods: {
|
||||
async loadVisibility(userId) {
|
||||
this.visibilityLoaded = false;
|
||||
const visible = await loadFloatButtonVisible(userId);
|
||||
if (this.userId === userId) {
|
||||
this.floatButtonVisible = visible;
|
||||
this.visibilityLoaded = userId > 0;
|
||||
}
|
||||
},
|
||||
|
||||
onVisibilityChanged({userId, visible}) {
|
||||
if (this.userId === userId) {
|
||||
this.floatButtonVisible = visible;
|
||||
this.visibilityLoaded = true;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 加载保存的位置
|
||||
*/
|
||||
|
||||
76
resources/assets/js/pages/manage/setting/assistant.vue
Normal file
76
resources/assets/js/pages/manage/setting/assistant.vue
Normal file
@ -0,0 +1,76 @@
|
||||
<template>
|
||||
<div class="setting-item submit">
|
||||
<Form ref="formData" :model="formData" v-bind="formOptions" @submit.native.prevent>
|
||||
<FormItem :label="$L('显示悬浮按钮')">
|
||||
<iSwitch
|
||||
v-model="formData.floatButtonVisible"
|
||||
:disabled="loading"/>
|
||||
</FormItem>
|
||||
</Form>
|
||||
<div class="setting-footer">
|
||||
<Button :loading="loadIng > 0" :disabled="loading" type="primary" @click="submitForm">{{$L('提交')}}</Button>
|
||||
<Button :loading="loadIng > 0" :disabled="loading" @click="resetForm">{{$L('重置')}}</Button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapState} from "vuex";
|
||||
import emitter from "../../../store/events";
|
||||
import {
|
||||
loadFloatButtonVisible,
|
||||
saveFloatButtonVisible,
|
||||
} from "../../../components/AIAssistant/float-button-preference";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
loadIng: 0,
|
||||
loading: true,
|
||||
formData: {
|
||||
floatButtonVisible: true,
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapState(['userId', 'formOptions']),
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.loadPreference();
|
||||
},
|
||||
|
||||
methods: {
|
||||
async loadPreference() {
|
||||
try {
|
||||
this.$set(this.formData, 'floatButtonVisible', await loadFloatButtonVisible(this.userId));
|
||||
this.formData_bak = $A.cloneJSON(this.formData);
|
||||
} finally {
|
||||
this.loading = false;
|
||||
}
|
||||
},
|
||||
|
||||
async submitForm() {
|
||||
const visible = this.formData.floatButtonVisible;
|
||||
this.loadIng++;
|
||||
try {
|
||||
await saveFloatButtonVisible(this.userId, visible);
|
||||
emitter.emit('aiAssistantFloatButtonVisibilityChanged', {
|
||||
userId: this.userId,
|
||||
visible,
|
||||
});
|
||||
$A.messageSuccess('保存成功');
|
||||
} catch (error) {
|
||||
$A.modalError(error.message);
|
||||
} finally {
|
||||
this.loadIng--;
|
||||
}
|
||||
},
|
||||
|
||||
resetForm() {
|
||||
this.formData = $A.cloneJSON(this.formData_bak);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@ -72,7 +72,11 @@ export default {
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapState(['userInfo', 'userIsAdmin', 'clientNewVersion', 'systemConfig']),
|
||||
...mapState(['userInfo', 'userIsAdmin', 'clientNewVersion', 'systemConfig', 'microAppsIds']),
|
||||
|
||||
aiInstalled() {
|
||||
return this.microAppsIds?.includes('ai');
|
||||
},
|
||||
|
||||
showContent() {
|
||||
return this.$route.path.match(/^\/manage\/setting\/\w+$/)
|
||||
@ -91,6 +95,10 @@ export default {
|
||||
menu.push({path: 'keyboard', name: '键盘设置'})
|
||||
}
|
||||
|
||||
if (this.aiInstalled) {
|
||||
menu.push({path: 'assistant', name: 'AI 助手设置'})
|
||||
}
|
||||
|
||||
if ($A.isDooServer() && this.$isEEUIApp) {
|
||||
menu.push(...[
|
||||
{path: 'privacy', name: '隐私政策', divided: true},
|
||||
@ -139,10 +147,17 @@ export default {
|
||||
handler(name) {
|
||||
if (name === 'manage-setting' && this.windowLandscape) {
|
||||
this.goForward({name: 'manage-setting-personal'}, true);
|
||||
} else if (name === 'manage-setting-assistant' && !this.aiInstalled) {
|
||||
this.goForward({name: 'manage-setting-personal'}, true);
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
microAppsIds() {
|
||||
if (this.routeName === 'manage-setting-assistant' && !this.aiInstalled) {
|
||||
this.goForward({name: 'manage-setting-personal'}, true);
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
5
resources/assets/js/routes.js
vendored
5
resources/assets/js/routes.js
vendored
@ -64,6 +64,11 @@ export default [
|
||||
path: 'keyboard',
|
||||
component: () => import('./pages/manage/setting/keyboard.vue'),
|
||||
},
|
||||
{
|
||||
name: 'manage-setting-assistant',
|
||||
path: 'assistant',
|
||||
component: () => import('./pages/manage/setting/assistant.vue'),
|
||||
},
|
||||
{
|
||||
name: 'manage-setting-license',
|
||||
path: 'license',
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user