diff --git a/docker/appstore/.gitignore b/docker/appstore/.gitignore index 035cc0274..09a3cca2a 100644 --- a/docker/appstore/.gitignore +++ b/docker/appstore/.gitignore @@ -2,4 +2,5 @@ apps/* config/* log/* temp/* +ai-kb/* !.gitkeep diff --git a/docker/appstore/ai-kb/.gitkeep b/docker/appstore/ai-kb/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/resources/ai-kb/_meta/feature-map.yaml b/resources/ai-kb/_meta/feature-map.yaml index 77b751b29..e75f8ae72 100644 --- a/resources/ai-kb/_meta/feature-map.yaml +++ b/resources/ai-kb/_meta/feature-map.yaml @@ -273,36 +273,6 @@ features: - report.analysis.concept - report.permission.faq - - id: approve - name: 审批 - scope: end-user - batch: B2 - priority: P0 - chunk_count_est: 20 - owner: ~ - status: drafted - chunks: - - approve.plugin.concept - - approve.install.howto - - approve.template.concept - - approve.template.howto - - approve.node.concept - - approve.form.concept - - approve.delete.howto - - approve.export.howto - - approve.entry.menu-map - - approve.concept - - approve.start.howto - - approve.my-start.howto - - approve.my-todo.howto - - approve.doto.howto - - approve.cc.howto - - approve.detail.howto - - approve.process-inst.concept - - approve.history.concept - - approve.notify.concept - - approve.comment.howto - - id: checkin name: 签到打卡 scope: end-user @@ -316,40 +286,15 @@ features: - checkin.concept - checkin.regular.howto - checkin.wifi.howto - - checkin.face.howto - - checkin.face.concept - checkin.record.howto - checkin.remind.concept - checkin.setting.howto - checkin.rule.concept - checkin.export.howto - checkin.late.faq - - checkin.face-fail.faq - checkin.mac-not-match.faq - checkin.plugin.concept - - id: okr - name: OKR - scope: end-user - batch: B2 - priority: P1 - chunk_count_est: 12 - owner: ~ - status: drafted - chunks: - - okr.entry.menu-map - - okr.concept - - okr.plugin.concept - - okr.objective.concept - - okr.kr.concept - - okr.create.howto - - okr.update-progress.howto - - okr.cycle.concept - - okr.align.howto - - okr.review.howto - - okr.team.concept - - okr.cannot-install.faq - # ===== A5. 应用中心(系统应用 + 管理员应用 + 微应用) (B3) ===== - id: app-system name: 内置系统应用(11 个,含审批/签到/报告/收藏/最近/机器人/创建群/会议/创建项目/添加任务/导出) @@ -415,94 +360,6 @@ features: - micro-app.uninstall.howto - micro-app.entry.menu-map - - id: minder - name: 思维导图(minder 插件) - scope: end-user - batch: B3 - priority: P1 - chunk_count_est: 5 - owner: ~ - status: drafted - chunks: - - minder.collaboration.concept - - minder.concept - - minder.plugin.concept - - minder.create.howto - - minder.entry.menu-map - - - id: drawio - name: 流程图(drawio 插件) - scope: end-user - batch: B3 - priority: P1 - chunk_count_est: 5 - owner: ~ - status: drafted - chunks: - - drawio.concept - - drawio.plugin.concept - - drawio.template.concept - - drawio.create.howto - - drawio.entry.menu-map - - - id: office - name: OnlyOffice 在线文档(office 插件) - scope: end-user - batch: B3 - priority: P1 - chunk_count_est: 5 - owner: ~ - status: drafted - chunks: - - office.collaboration.concept - - office.concept - - office.plugin.concept - - office.create.howto - - office.entry.menu-map - - - id: fileview - name: 文件预览(fileview 插件) - scope: end-user - batch: B3 - priority: P2 - chunk_count_est: 3 - owner: ~ - status: drafted - chunks: - - fileview.concept - - fileview.plugin.concept - - fileview.supported.concept - - - id: memos - name: Memos 笔记(memos 插件) - scope: end-user - batch: B3 - priority: P1 - chunk_count_est: 5 - owner: ~ - status: drafted - chunks: - - memos.concept - - memos.plugin.concept - - memos.tag.concept - - memos.create.howto - - memos.entry.menu-map - - - id: kpi - name: KPI 绩效(kpi 插件) - scope: end-user - batch: B3 - priority: P1 - chunk_count_est: 5 - owner: ~ - status: drafted - chunks: - - kpi.concept - - kpi.plugin.concept - - kpi.scoring.concept - - kpi.create.howto - - kpi.entry.menu-map - # ===== F. 通信通知 (B3) ===== - id: email-notice name: 邮件通知 @@ -806,90 +663,6 @@ features: - appstore.update.howto - appstore.entry.menu-map - # ===== D. AI 助手 (B5) ===== - - id: ai-assistant - name: AI 助手(入口/模型/对话/工具/任务集成) - scope: end-user - batch: B5 - priority: P0 - chunk_count_est: 48 - owner: ~ - status: drafted - chunks: - - ai-assistant.entry.howto - - ai-assistant.auth.concept - - ai-assistant.close.howto - - ai-assistant.create-task.howto - - ai-assistant.disabled.faq - - ai-assistant.element-action.howto - - ai-assistant.embed-entry.concept - - ai-assistant.feedback.howto - - ai-assistant.float-button.concept - - ai-assistant.float-button.howto - - ai-assistant.guide.concept - - ai-assistant.image-upload.howto - - ai-assistant.intelligent-search.howto - - ai-assistant.list-tasks.howto - - ai-assistant.match-elements.concept - - ai-assistant.mcp-down.faq - - ai-assistant.mobile-entry.concept - - ai-assistant.modal.concept - - ai-assistant.model-empty.faq - - ai-assistant.model-switch.howto - - ai-assistant.model.concept - - ai-assistant.multimodal.concept - - ai-assistant.new-chat.howto - - ai-assistant.no-tool-call.faq - - ai-assistant.page-action.concept - - ai-assistant.page-action.howto - - ai-assistant.page-context-tool.concept - - ai-assistant.page-context.concept - - ai-assistant.privacy.concept - - ai-assistant.project-init.howto - - ai-assistant.report-draft.howto - - ai-assistant.search-files.howto - - ai-assistant.search-help-docs.howto - - ai-assistant.search-users.howto - - ai-assistant.send-message.howto - - ai-assistant.session-delete.howto - - ai-assistant.session-list.howto - - ai-assistant.session-save.howto - - ai-assistant.session.concept - - ai-assistant.shortcut.howto - - ai-assistant.start-guide.howto - - ai-assistant.stop.howto - - ai-assistant.streaming.concept - - ai-assistant.subtask-suggest.howto - - ai-assistant.task-mention.howto - - ai-assistant.task-summary.howto - - ai-assistant.tool-call.concept - - ai-assistant.tool-failed.faq - - ai-assistant.tool-permission.faq - - ai-assistant.tools-list.concept - - ai-assistant.tools.concept - - ai-assistant.welcome-prompts.concept - - # ===== G. 搜索 (B5) ===== - - id: search - name: 全局搜索(Manticore) - scope: end-user - batch: B5 - priority: P0 - chunk_count_est: 10 - owner: ~ - status: drafted - chunks: - - search.concept - - search.contact.howto - - search.engine.concept - - search.entry.menu-map - - search.file.howto - - search.intelligent.concept - - search.message.howto - - search.no-result.faq - - search.project.howto - - search.task.howto - # ===== I. 终端 (B5) ===== - id: web-client name: Web 端 diff --git a/resources/ai-kb/_meta/tool-binding.yaml b/resources/ai-kb/_meta/tool-binding.yaml index 9ff6aef5e..fba798362 100644 --- a/resources/ai-kb/_meta/tool-binding.yaml +++ b/resources/ai-kb/_meta/tool-binding.yaml @@ -25,7 +25,7 @@ tools: search_users: description: 按关键词搜索用户,支持按项目/对话范围筛选 - related_features: [user-account, search] + related_features: [user-account] typical_chunk_types: [howto] # ===== 任务 ===== @@ -93,7 +93,7 @@ tools: # ===== 消息 / 对话 ===== search_dialogs: description: 搜索群聊或个人对话 - related_features: [messenger, search] + related_features: [messenger] typical_chunk_types: [howto] send_message: @@ -103,7 +103,7 @@ tools: send_task_ai_message: description: 作为 AI 助手向任务对话发送消息 - related_features: [messenger, task, ai-assistant] + related_features: [messenger, task] typical_chunk_types: [howto] get_message_list: @@ -119,7 +119,7 @@ tools: search_files: description: 搜索文件 - related_features: [file, search] + related_features: [file] typical_chunk_types: [howto] get_file_detail: @@ -145,7 +145,7 @@ tools: generate_report_template: description: 基于任务完成情况自动生成报告模板 - related_features: [report, ai-assistant] + related_features: [report] typical_chunk_types: [howto] create_report: @@ -166,7 +166,7 @@ tools: # ===== 搜索 ===== intelligent_search: description: 统一搜索(任务/项目/文件/联系人/消息),支持语义搜索 - related_features: [search] + related_features: [] typical_chunk_types: [howto, concept] # 注:图片文字提取(OCR / 原 extract_image_text)已下线,改由多模态模型直接理解图片, @@ -182,10 +182,10 @@ tools: # ===== 内置工具(AI 插件 helper/tools.py)===== get_session_image: description: 获取用户上传的会话图片(多模态用) - related_features: [ai-assistant, file] + related_features: [file] typical_chunk_types: [howto] search_help_docs: description: 本知识库自身的检索工具;当用户询问 DooTask 功能用法/概念/操作步骤时调用 - related_features: [ai-assistant] + related_features: [] typical_chunk_types: [howto] diff --git a/resources/ai-kb/zh/concept/ai-assistant/auth.md b/resources/ai-kb/zh/concept/ai-assistant/auth.md deleted file mode 100644 index 778bb9d28..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/auth.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -id: ai-assistant.auth.concept -title: AI 助手鉴权(stream_key) -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 鉴权 - - AI 授权 - - stream_key - - AI token - - AI 流凭证 -related_tools: [] -related_pages: [] -prerequisites: - - 用户已登录 - - 当前用户允许聊天 -negative: - - stream_key 是一次性凭证,发完一条消息就失效 - - 流式接口 /ai/invoke/stream/* 不在主仓库,由 dootask-ai 容器提供 - - 普通用户不需要关心 stream_key,前端自动获取 -last_verified: v1.7.90 ---- - -# AI 助手鉴权(stream_key) - -## 定义 -AI 助手发送提问前必须先调用 `POST api/assistant/auth` 生成一次性 `stream_key`,再用它去开 SSE 流(`/ai/invoke/stream/{stream_key}`),既复用登录态又避免把用户 token 暴露给 ai 容器。 - -## 数据流 -1. 用户点发送 -2. 前端 `POST api/assistant/auth`,参数:`model_type`、`model_name`、`context`(JSON)、`locale`(zh/en,缺省取请求语言,语言包含 zh 视为 zh,否则 en) -3. 后端 `AssistantController::auth` 校验登录 + 聊天权限,写入临时凭证 -4. 返回 `{stream_key: "xxx"}` -5. 前端开 SSE:`ai/invoke/stream/{stream_key}` -6. ai 容器消费凭证、转发上游模型,推回 `append/replace/done` - -## 关键约束 -- **一次性**:一个 stream_key 仅能开一次 SSE 流 -- **绑定用户**:内嵌 `userid`,越权使用被拒 -- **携带 context**:对话历史在 auth 阶段写入;ai 容器不反向查 DooTask 库 -- **插件校验**:`AssistantController` 构造函数先做 `Apps::isInstalledThrow('ai')`;未装直接抛错 - -## 权限校验 -`User::auth()->checkChatInformation()`:未登录 / 被禁止聊天 / 激活异常都会拒绝。 - -## 相关接口 -| 接口 | 用途 | -|---|---| -| `POST api/assistant/auth` | 生成 stream_key | -| `GET api/assistant/models` | 拉可用模型列表 | -| `POST api/assistant/session/list` | 历史会话 | -| `POST api/assistant/session/save` | 保存当前会话 | -| `POST api/assistant/session/delete` | 删除 / 清空 | - -## 不支持 -- 不支持复用 stream_key -- 不支持匿名调用 -- 不支持终端用户直接管理 token - -## 相关 -- [[ai-assistant.privacy.concept]] -- [[ai-assistant.streaming.concept]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/embed-entry.md b/resources/ai-kb/zh/concept/ai-assistant/embed-entry.md deleted file mode 100644 index d6d88a25d..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/embed-entry.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -id: ai-assistant.embed-entry.concept -title: 业务嵌入式 AI 入口 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 嵌入业务 - - 任务里 AI - - 项目 AI 生成 - - 工作报告 AI - - 消息里 AI - - AI 业务入口 -related_tools: [] -related_pages: [task_detail, project_create, report_edit, dialog] -prerequisites: - - 应用市场已安装 ai 插件 - - 管理员已配置至少一个 AI 模型 -negative: - - 嵌入式入口与浮窗对话不共用同一会话池(按 sessionKey 隔离) - - 嵌入入口大多有自定义 system 提示词,输出格式可能强约束(如 JSON) - - 不是所有页面都有 AI 按钮,只有这里列出的业务场景才内嵌 -last_verified: v1.7.90 ---- - -# 业务嵌入式 AI 入口 - -## 定义 -除浮按钮和快捷键外,DooTask 在多个业务表单内嵌入了「上下文相关」的 AI 入口。它们与全局浮窗调的是同一个 AI 助手组件,但通过 `sessionKey` + `onBeforeSend` + `onApply` 等参数定制行为,让 AI 直接产出可应用到表单的结构化内容。 - -## 已知嵌入入口 - -| 入口 | 触发位置 | sessionKey | 典型用途 | -|---|---|---|---| -| 项目创建 | 新建项目弹窗 AI 按钮 | `project-create` | 生成项目名 + 看板列 | -| 任务创建 | 添加任务弹窗 AI 按钮 | `task-add` | 生成任务标题 / 描述 / 子任务 | -| 工作汇报 | 汇报编辑器 AI 工具 | `report-edit` | 基于近期任务生成草稿 | -| 消息输入 | 群 / 私聊输入栏 AI 图标 | `chat-message` | 帮你写消息草稿 | -| 任务讨论 | 任务详情 @AI | — | 机器人方式触发 | - -## 与浮窗的区别 -- **会话池隔离**:不同 `sessionKey` 走不同桶;项目创建会话不会和任务创建混在一起 -- **上下文重建**:嵌入入口通过 `onBeforeSend` 重写 context(不走默认助手 system 提示) -- **应用按钮**:回答下方有「应用此内容」按钮,自动回填原表单 -- **加载提示**:可自定义「正在生成项目结构…」之类提示 - -## 应用此内容 -回答完成后弹出 `Button`: -1. 点击触发 `onApply` 回调 -2. 解析 AI 输出(通常 JSON)并填入原表单 -3. 应用成功后嵌入弹窗自动关闭 - -## 不支持 -- 嵌入会话不出现在浮窗历史下拉里 -- 不能在嵌入入口切回浮窗系统提示词 -- 没有 AI 按钮的页面(日历 / 文件 / 个人设置)不能内嵌唤起 - -## 相关 -- [[ai-assistant.entry.howto]] -- [[ai-assistant.session.concept]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/float-button.md b/resources/ai-kb/zh/concept/ai-assistant/float-button.md deleted file mode 100644 index 017ffdf72..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/float-button.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: ai-assistant.float-button.concept -title: AI 助手浮按钮 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 浮窗按钮 - - AI 浮窗 - - AI 浮窗怎么用 - - 屏幕角落的 AI 球 - - AI 小球 - - 那个小气泡 - - 浮动按钮 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 管理员已在系统设置「AI 模型」中配置至少一个模型 -negative: - - 浮按钮位置只保留水平/垂直两个距离,不存绝对坐标,换屏分辨率不会跑出屏外 - - 收起状态下点击直接打开 AI 助手,不会再触发拖动 - - 拖动 ≥ 5px 或按下 ≥ 200ms 算拖动;小于该阈值才视为点击 -last_verified: v1.7.90 ---- - -# AI 助手浮按钮 - -## 定义 -浮按钮是 DooTask 桌面端 / 移动端常驻在屏幕角落的圆形 AI 入口,44px 直径,点击呼出 AI 助手浮窗或弹窗。它独立挂在 `` 上,与当前路由解耦,**任何登录后页面都能看到**(登录页除外)。 - -## 关键属性 -- **位置存储**:只保存两个距离(距左 / 距右 + 距上 / 距下)和「贴边收起」状态,写入 IndexedDB key `aiAssistant.floatButtonPosition` -- **默认位置**:桌面端右下角(距右 24px、距底 100px);移动端竖屏靠右、距底约 1/4 屏高 -- **可拖动**:桌面端鼠标按住拖动;移动端单指触摸拖动 -- **贴边收起**:靠近左 / 右屏幕边缘 ≤ 12px 时延迟自动收起为竖条(桌面端 1 秒、移动端 5 秒) -- **收起态再点开**:收起状态下点按钮直接打开 AI 助手,不会再拖动 - -## 显示条件 -- 已安装 ai 插件(`microAppsIds` 包含 `ai`) -- 已登录(`userId > 0`) -- 当前不在登录页 -- AI 助手弹窗未打开时 - -## 与浮窗的关系 -浮按钮只是「入口」,点击触发 `openAIAssistantGlobal` 事件。真正的对话窗口由 [[ai-assistant.modal.concept]] 渲染。 - -## 不支持 -- 不支持双击 / 长按弹出菜单(除了移动端长按用于拖动) -- 不支持把浮按钮完全隐藏后再用快捷键恢复——隐藏需在「个人设置」关闭(详见 [[ai-assistant.float-button.howto]]) diff --git a/resources/ai-kb/zh/concept/ai-assistant/guide.md b/resources/ai-kb/zh/concept/ai-assistant/guide.md deleted file mode 100644 index 3809ea28f..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/guide.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -id: ai-assistant.guide.concept -title: 什么是页面深链(带我去) -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 操作引导 - - 带我去 - - 带我操作 - - 页面深链 - - 快捷跳转 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 -negative: - - 深链只负责把你送到对应页面/面板,不会自动帮你点击页面内的具体按钮或开关 - - 需要运行时定位的目标(某条具体任务/对话)不通过深链,由 AI 直接帮你打开 -last_verified: v1.7.90 ---- - -# 什么是页面深链(带我去) - -## 这是什么 -当你问 AI「X 在哪里设置 / 怎么去 X」时,AI 的回答里会把可定位的页面或面板(如「系统设置」「个人设置」「日历」)渲染成**蓝色可点击的链接**。点一下就**直接跳转到那一屏**,省去自己翻菜单。 - -## 怎么用 -- 在 AI 助手浮窗里问操作类/“在哪”类问题 -- 回答正文里出现蓝色链接词,点击即跳转(AI 浮窗会自动收起,避免遮挡) -- 到达目标页后,按回答里的文字说明完成剩下的操作 - -## 边界 -- 深链把你送到**正确的页面/面板**;页面内具体那一行开关/按钮在哪,需要你按说明自己看一眼 -- 不是每个名词都可点:只有命中系统内已登记目的地的词才会变成链接,其余按普通文字显示 -- 打开某条具体任务/对话(需要具体 ID)不走深链,AI 会直接帮你打开 - -## 相关 -- 如何使用:[[ai-assistant.start-guide.howto]] -- AI 操作页面的底层能力:[[ai-assistant.page-action.concept]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/match-elements.md b/resources/ai-kb/zh/concept/ai-assistant/match-elements.md deleted file mode 100644 index afcddfefb..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/match-elements.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: ai-assistant.match-elements.concept -title: AI 怎么找到页面元素 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - match_elements - - AI 找按钮 - - 元素匹配 - - 向量匹配元素 - - AI 怎么知道点哪 - - AI 元素识别 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 -negative: - - 匹配纯依赖元素可见文本/aria-label/title,无文本的图标按钮命中率低 - - 单次匹配上限 50 个候选元素 - - 不持久化匹配结果,每轮交互需重新取上下文 -last_verified: v1.7.90 ---- - -# AI 怎么找到页面元素 - -## 定义 -当 AI 想操作页面元素(点按钮、填表)时,先采集当前页面上下文拿到候选元素列表(每条含 ref / name / role),再通过后端 API `POST api/assistant/match-elements` 把"用户意图描述"和"候选列表"提交给 embedding 服务,返回按余弦相似度排序的命中元素。 - -## 工作流 -1. **采集**:前端按 ARIA 角色扫描,给每个可交互元素分配 ref(e1, e2...)和 name -2. **关键词过滤**:先用 query 做子串匹配 -3. **向量匹配**:关键词没命中时对 query 和元素 name 求 embedding,取相似度 top-K(默认 10,最多 50) -4. **执行**:模型拿匹配元素的 ref,让 AI 助手在你的页面上操作该元素 - -## 元素信息字段 -- `ref`:本轮唯一标识(e1, e2...) -- `name`:可见文本 / aria-label / title -- `role`:ARIA 角色(button / textbox / link 等) -- `selector` + `nth`:兜底选择器 - -## 命中率 -- 有清晰文本的按钮:高 -- 仅 icon 无 aria-label:低,建议加 title -- 隐藏元素:默认不采集 - -## 不支持 -- 元素匹配仅基于元素文本,不靠图像识别 -- 不支持「按位置」找元素("左上角第三个") -- 不能跨 iframe 匹配 - -## 相关 -- 取页面上下文:[[ai-assistant.page-context-tool.concept]] -- 操作元素:[[ai-assistant.element-action.howto]] -- 页面操作机制:[[ai-assistant.page-action.concept]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/mobile-entry.md b/resources/ai-kb/zh/concept/ai-assistant/mobile-entry.md deleted file mode 100644 index 3be3e4a17..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/mobile-entry.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: ai-assistant.mobile-entry.concept -title: 移动端 AI 助手入口 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 手机上怎么用 AI - - 移动端 AI 入口 - - 手机 AI 助手 - - 移动端 AI 浮球 - - 手机 AI 弹窗 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 管理员已配置至少一个 AI 模型 -negative: - - 移动端没有键盘快捷键 - - 浮按钮位置不在桌面 / 移动间同步 - - AI 弹窗在移动端走全屏,不能调整大小 -last_verified: v1.7.90 ---- - -# 移动端 AI 助手入口 - -## 定义 -移动端指通过 iOS / Android App 或手机浏览器访问 DooTask(`isMobile = true`,含竖横屏窄屏)。AI 助手在移动端有两类入口:**浮按钮小球** 和 **业务页面内嵌按钮**。 - -## 浮按钮(主入口) -- 屏幕右侧默认距底约 1/4 屏高悬浮 -- 加载后自动收起为屏幕边缘 48px 高竖条 -- 单指按住可拖动到任何位置;松开后靠近左右边缘会再次自动收起 -- 单击展开 AI 助手;展开后**全屏**弹窗,覆盖整个视口 - -## 全屏对话 -- 移动端 AI 弹窗强制全屏(`is-mobile-fullscreen`) -- 顶部有标题栏 + 关闭按钮 + 历史会话下拉 -- 不能调整大小、不能拖动窗口 - -## 业务嵌入入口 -- 任务详情底部输入区 AI 图标 -- 工作汇报编辑器工具栏「AI 生成」 -- 消息会话群里 @AI -- 创建项目名右侧 AI 按钮 - -## 与桌面端的差异 -| 维度 | 桌面端 | 移动端 | -|---|---|---| -| 弹窗形态 | 浮窗或 modal | 全屏 modal | -| 浮按钮自动收起延迟 | 1 秒 | 5 秒(加载即收起) | -| 快捷键 | Cmd/Ctrl + I | 无 | -| 默认浮按钮位置 | 右下距底 100px | 右侧距底 1/4 屏高 | - -## 不支持 -- 不支持移动端快捷收起 / 展开浮按钮(必须靠拖动) -- 不支持移动端关闭浮按钮本身 -- 不支持移动端浮窗与桌面浮窗位置同步 - -## 相关 -- [[ai-assistant.float-button.concept]] -- [[ai-assistant.modal.concept]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/modal.md b/resources/ai-kb/zh/concept/ai-assistant/modal.md deleted file mode 100644 index 34bcb9de7..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/modal.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -id: ai-assistant.modal.concept -title: AI 助手弹窗形态 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 浮窗 - - AI 弹窗 - - AI 全屏 - - AI 窗口 - - AI 模态框 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 移动端浮窗一律全屏,不能调整大小 - - 桌面端浮窗最小 380×400,最大 800×900 - - 弹窗 z-index 每 5/20 秒自动调高确保覆盖其他模态 -last_verified: v1.7.90 ---- - -# AI 助手弹窗形态 - -## 定义 -AI 助手有两种渲染形态,由打开时的 `displayMode` 决定: -- `chat`:**浮窗**(默认,可拖动 / 调整大小 / 桌面右下角) -- `modal`:**居中模态**(默认 600px 宽,移动端自动全屏) - -## chat 浮窗(桌面端默认) -- 通过 `v-transfer-dom` 挂到 ``,避免被父容器裁切 -- 自带 8 个 resize 控制点(四边 + 四角),可拖拽改大小 -- 标题栏可拖动整窗,双击切换全屏 -- 位置 / 尺寸记忆到 IndexedDB(`aiAssistant.chatPosition` / `aiAssistant.chatSize`) - -## 尺寸约束(chat 浮窗) -| 维度 | 最小 | 最大 | 默认 | -|---|---|---|---| -| 宽度 | 380 | 800 | 460 | -| 高度 | 400 | 900 | 600 | - -## modal 模态(业务嵌入入口默认) -- iView `Modal` 组件渲染,居中遮罩 -- 宽度:新建会话 440,已有对话 600 -- 桌面端遮罩点击**不**关闭(`mask-closable: false`) -- 移动端强制全屏 - -## 移动端 -- 不论 displayMode 是什么都全屏 -- 顶部有标题栏、关闭、历史下拉 -- 关闭按钮 `Icon type="ios-close"` 位于右上 -- 输入区固定在底部 - -## z-index 自适应 -- 初始 `topZIndex = max(modalTransferIndex, 1000) + 1000` -- 弹窗打开期间每 5 秒重新评估(高于新模态) -- 关闭后每 20 秒评估 - -## 不支持 -- 不支持最小化为小球(要小球用浮按钮) -- 不支持多窗口同时打开多个对话 -- 不支持自定义 z-index - -## 相关 -- [[ai-assistant.float-button.concept]] -- [[ai-assistant.close.howto]] -- [[ai-assistant.mobile-entry.concept]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/model.md b/resources/ai-kb/zh/concept/ai-assistant/model.md deleted file mode 100644 index 3b8d7f67c..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/model.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -id: ai-assistant.model.concept -title: AI 助手可用模型 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 模型 - - 可以选哪些 AI - - DooTask AI 模型 - - GPT Claude DeepSeek - - AI 服务商 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 管理员已在系统设置「AI 模型」中配置至少一个模型的 API Key -negative: - - 终端用户不能自己加模型 / 改 API Key,必须由管理员配置 - - 没有「免费内置模型」,DooTask 不自带 API Key - - 模型下拉为空 = 管理员未配 / 未启用任何模型 -last_verified: v1.7.90 ---- - -# AI 助手可用模型 - -## 定义 -AI 助手在浮窗底部下拉框展示的「可选模型」,全部来自管理员在系统设置 →「AI 模型」中配置并启用的服务商。前端通过 `GET api/assistant/models` 拉当前生效配置,按服务商分组渲染。 - -## 支持的服务商分组 -按 `AIBotMap` 顺序展示(每组最多前 5 个模型 + 默认模型): - -| key | 显示名 | -|---|---| -| `openai` | ChatGPT | -| `claude` | Claude | -| `deepseek` | DeepSeek | -| `gemini` | Gemini | -| `grok` | Grok | -| `ollama` | Ollama(本地) | -| `zhipu` | 智谱清言 | -| `qianwen` | 通义千问 | -| `wenxin` | 文心一言 | - -## 模型 ID -前端模型选项内部 id 是 `{type}:{value}`,如 `openai:gpt-4o`。`type` 路由到对应服务商 SDK,`value` 是模型名(透传上游)。 - -## 默认模型 -每个分组带 `defaultModel`(管理员设置)。首次打开按此顺序选定: -1. 用户上次选过的模型(IndexedDB `aiAssistant.model`) -2. 第一个有 `defaultModel` 的分组的默认模型 -3. 第一个分组的第一个模型 -4. 否则空 - -## 模型能力差异 -- **多模态**:仅部分模型支持,如 `gpt-4o`、`claude-3-5-sonnet`、`gemini-1.5-pro` -- **长文本**:默认 context 取最近 10 轮,超出截断;与模型最大 token 无关 - -## 不支持 -- 不支持同一问题同时发多个模型对比 -- 不支持终端用户自定义模型 / 改 API Key / base_url -- 切换模型不会清空历史会话,会用新模型续接 - -## 相关 -- [[ai-assistant.model-switch.howto]] -- [[ai-assistant.model-empty.faq]] -- [[ai-assistant.multimodal.concept]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/multimodal.md b/resources/ai-kb/zh/concept/ai-assistant/multimodal.md deleted file mode 100644 index 0e2d56e5c..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/multimodal.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: ai-assistant.multimodal.concept -title: AI 助手多模态(图片输入) -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 看图 - - 上传图片给 AI - - 视觉模型 - - AI 多模态 - - AI 识图 - - AI 看截图 -related_tools: [] -related_pages: [] -prerequisites: - - 当前模型支持视觉输入(如 gpt-4o / claude-3.5-sonnet / gemini-1.5-pro) -negative: - - 仅图片,不支持视频 / 音频 / 文档 - - 一次最多 5 张图片 - - 图片会被压缩到长边 1568px JPEG,原图不保留 - - 切到不支持视觉的模型后发图会上游报错 -last_verified: v1.7.90 ---- - -# AI 助手多模态(图片输入) - -## 定义 -多模态指 AI 助手允许用户在对话中**同时附带图片**。图片以 base64 拼到 `content` 数组(`{type: 'image_url', image_url: {url: dataUrl}}`),与文本一起发给视觉模型解析。 - -## 三种添加方式 -1. **点击图片按钮**:浮窗底部图片图标,弹系统文件选择器 -2. **拖放**:把图片拖到浮窗,松手上传 -3. **粘贴**:在输入框 Ctrl/Cmd + V 粘贴剪贴板里的图片 - -## 数量与大小约束 -- 单次最多 5 张(`maxImages`),超出 toast「最多上传 5 张图片」 -- 自动压缩:长边 ≤ 1568px、统一转 JPEG -- 原文件不上传,只上传压缩后的 dataUrl - -## 视觉模型要求 -- 必须选视觉模型才能正确解析(`openai:gpt-4o`、`claude:claude-3-5-sonnet`、`gemini:gemini-1.5-pro` 等) -- 非视觉模型(如 `deepseek:deepseek-chat`、`grok:grok-2`)通常忽略图片或上游报错 - -## 持久化 -- 图片随会话一起保存 -- 服务端转存到 `public/uploads/assistant/YYYYMM/{userid}/xxx.jpg` -- 再次打开会话通过 `serverImageMap` 拿回 URL 显示 - -## 不支持 -- 不支持视频 / PDF / 音频;只接受 `image/*` MIME -- 不支持单张超大图保持原始分辨率 -- 不支持拖到收起的浮按钮上(先展开) -- 不支持「不压缩直发」开关 - -## 相关 -- [[ai-assistant.image-upload.howto]] -- [[ai-assistant.model-switch.howto]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/page-action.md b/resources/ai-kb/zh/concept/ai-assistant/page-action.md deleted file mode 100644 index ab3c876bb..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/page-action.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: ai-assistant.page-action.concept -title: AI 操作页面的机制 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 控制页面 - - AI 自动操作 - - AI 怎么帮我操作页面 - - AI 跳转页面 - - 页面自动化 - - AI 点按钮 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 -negative: - - AI 的页面操作仅在浏览器/桌面端会话窗口内生效,无法控制其他用户的页面 - - 一次只能操作当前会话所在的页面,不能开新标签页 - - 关闭浏览器或切到别的标签页时,页面操作会断连失败 - - 跨源(外部站点)微应用 iframe 的内部不可操作,仅同源微应用插件可 -last_verified: v1.7.91 ---- - -# AI 操作页面的机制 - -## 定义 -AI 助手通过高层导航和低层元素操作两类能力操作用户当前页面。主程序常驻 WebSocket(`/ws`)把指令派发给前端,前端的 `action-executor.js` 执行真实 DOM 行为或路由跳转,结果回传给 AI 让对话继续。这类页面操作不是 MCP 工具,由 AI 助手在你的页面上执行。 - -## 两层能力 -- **高层导航**:语义化命名(如 `open_task`、`navigate_to_dashboard`),参数明确(任务 ID),由前端封装好 router 调用;优先用这层,稳定不易错 -- **低层元素操作**:基于元素 ref 的通用动作(click/type/select/focus/scroll/hover),用于没封装好的细节操作 - -## 受支持的高层动作 -- `open_task`、`open_dialog`、`open_project`、`open_file`、`open_folder` -- `navigate_to_dashboard / messenger / calendar / files` -- `close_app`:关闭当前打开的应用窗口(仅在有微应用打开时出现)。属外壳层动作,哪怕 AI 正停在该应用内部、甚至应用跨源读不到内部,也能直接关闭 - -## 受支持的低层元素动作 -- `click`、`type`、`select`、`focus`、`scroll`、`hover` - -## 微应用内部 -当你打开了微应用插件(应用市场安装、反代到主站 `/apps/` 同源路径、以 iframe 呈现)并停在最前时,采集页面上下文与低层元素操作会**默认作用于该微应用内部**,可像操作主界面一样点按钮 / 填表 / 切菜单。多个微应用同时打开时只操作最前面那个;切换或关闭应用后,原先拿到的元素引用会失效,AI 会被提示重新获取。跨源(指向外部站点)的微应用读不到内部,AI 会提示改用数据命令或回到主界面。 - -## 不支持 -- 不能模拟键盘组合键、不能拖拽 -- 不能操作跨源(外部站点)微应用 iframe 的内部 -- 不能跳转外部 URL(goForward 只走应用内路由) -- 不能伪造非用户主动触发的事件(如自动提交表单审批通过) - -## 相关 -- 让 AI 跳页面:[[ai-assistant.page-action.howto]] -- AI 操作元素:[[ai-assistant.element-action.howto]] -- 元素查找接口:[[ai-assistant.match-elements.concept]] -- 取页面上下文:[[ai-assistant.page-context-tool.concept]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/page-context-tool.md b/resources/ai-kb/zh/concept/ai-assistant/page-context-tool.md deleted file mode 100644 index 049712ed8..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/page-context-tool.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: ai-assistant.page-context-tool.concept -title: AI 怎么知道你在哪个页面 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 看页面 - - 页面上下文 - - AI 怎么知道当前页 - - AI 读取页面 - - AI 上下文采集 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 -negative: - - 仅当用户在 AI 浮窗当前会话所在的浏览器/桌面端窗口时才能采集 - - 不能跨标签 / 跨设备同步采集,每个 socket 只对应一个页面 - - 不读取密码框/被遮挡元素/隐藏元素 - - 跨源(外部站点)微应用 iframe 的内部无法采集,会提示改用数据命令 -last_verified: v1.7.90 ---- - -# AI 怎么知道你在哪个页面 - -## 定义 -当你在 AI 浮窗里问"这页有什么操作""帮我点这页的某个按钮"时,AI 助手会向你当前的浏览器/桌面端页面请求页面上下文,包括:当前路由名(如 `manage-project`)、URL、标题、可交互元素清单(带 ref / name / role)、该页可用的高层动作。结果由前端 `page-context-collector.js` 实时收集后回传给 AI。 - -## 返回字段 -- `page_type`:路由名(如 `manage-task`) -- `page_url` / `page_title` -- `elements`:可交互元素(ref / name / role) -- `total_count` / `has_more` / `offset`:分页 -- `available_actions`:该页可用的高层动作(如项目页可 `open_task`) -- `ref_map`:ref → 定位信息 -- `frame`:本次采集所在上下文——`scope`(`main` 主界面 / `app` 微应用)、`app_name`(微应用时的应用名)、`operable`(是否可操作) - -## 调用模式 -- **轻量**:`interactive_only=true` + `max_elements=20` -- **完整**:默认前 100 个(含内容) -- **搜索**:传 `query` 先关键词后向量匹配 -- **采集范围**:默认采集"用户最前面看到的"页面——有同源微应用插件在最前打开时采集其 iframe 内部,否则采集主界面;也可指定只采主界面。跨源微应用读不到内部,会返回 `operable:false` 并提示降级。 - -## 隐式触发 -用户在浮窗里问"这个页面有什么操作"、"帮我点这页的某按钮"、"切到下一项目"时,AI 都会先采集当前页面上下文再决定下一步。 - -## 不支持 -- 不返回每个元素的位置坐标(仅 selector) -- 不会返回 input 框的当前值(不读取用户私有输入) -- 不能在弹窗/抽屉之外拿到全屏快照(仅 DOM 节点) - -## 相关 -- 元素匹配:[[ai-assistant.match-elements.concept]] -- 操作元素:[[ai-assistant.element-action.howto]] -- 页面操作机制:[[ai-assistant.page-action.concept]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/page-context.md b/resources/ai-kb/zh/concept/ai-assistant/page-context.md deleted file mode 100644 index aa505e10b..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/page-context.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -id: ai-assistant.page-context.concept -title: AI 助手页面上下文(弱提示词) -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 知道当前页面 - - 页面感知 - - AI 上下文 - - 弱提示词 - - 当前页面注入 - - AI 现在在哪 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 弱提示词只传「页面类型 / 实体 id / 名称 / 对话类型」四类,不传业务详细数据 - - 详细数据需要 AI 通过 MCP 工具自取 - - 嵌入入口(专用 onBeforeSend)不走弱提示词机制 -last_verified: v1.7.90 ---- - -# AI 助手页面上下文(弱提示词) - -## 定义 -**弱提示词**是 AI 助手浮窗对话时自动注入的极简「我现在在哪」描述,让 AI 知道用户提问发生在哪个项目 / 任务 / 对话页,能正确解析「这个项目 / 这条任务」之类指代。 - -## 注入格式 -渲染为一行 `system` 消息穿插到 context 历史: - -``` -[当前页面] 项目详情页(project_id=123,名称:DooTask) -[页面切换] 任务详情页(task_id=4567,名称:修复 SSE 断流) -``` - -前缀:`[当前页面]` 首次注入,`[页面切换]` 后续在不同页面再提问时。 - -## 注入的字段 -仅四类,绝不带其他业务数据: - -| 字段 | 含义 | -|---|---| -| `type` | 实体类型(task / dialog / project / file / report) | -| `id` | 实体 id | -| `name` | 实体名称 | -| `dialogType` | 群聊 / 私聊,仅 dialog 有 | - -## 为什么穿插历史 -用户可能在不同项目 / 任务页连续提问。只放当前页会让历史里两个「这个项目」失去锚点。穿插能给历史每条用户消息打上「问题发生时所在的页面」,AI 才能正确分辨。 - -## 可识别的页面 -- 任务详情弹窗(最高优先)→ `task:{id}` -- 对话详情弹窗 → `dialog:{id}` -- 仪表盘 → `dashboard` -- 项目列表 / 详情 → `project-list` / `project:{id}` -- 消息列表 / 会话 → `messenger` / `dialog:{id}` -- 日历 → `calendar` -- 文件列表 / 详情 → `file-list` / `file:{id}` -- 工作汇报编辑 / 详情 → `report:{id}` - -## 何时不注入 -- 不可识别路由(登录页、个人设置等) -- 同 `contextKey` 连续提问 -- 嵌入入口(带 `onBeforeSend`) - -## 详细数据怎么拿 -弱提示词只告「在哪」,不告「内容」。AI 需要看任务描述、项目统计时通过 MCP 工具自取(如 `get_task`、`get_project_data`)。 - -## 不支持 -- 不支持把整页内容塞给 AI -- 不支持用户手动关闭弱提示词 -- 不支持自定义注入字段 - -## 相关 -- [[ai-assistant.embed-entry.concept]] -- [[ai-assistant.welcome-prompts.concept]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/privacy.md b/resources/ai-kb/zh/concept/ai-assistant/privacy.md deleted file mode 100644 index 0fef75770..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/privacy.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -id: ai-assistant.privacy.concept -title: AI 助手数据隐私 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 数据安全 - - AI 对话保存在哪 - - AI 会泄露吗 - - AI 上传图片去哪 - - DooTask AI 隐私 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 对话会通过 ai 插件转发给管理员配置的上游 LLM 服务商,受其隐私条款约束 - - 不存在「AI 完全本地化」开关,除非管理员只配 Ollama 本地模型 - - 用户无法自助导出会话(只能在浮窗手动清空历史) -last_verified: v1.7.90 ---- - -# AI 助手数据隐私 - -## 数据存到哪里 - -### 对话内容 -- 数据库表:`ai_assistant_sessions`,按 `userid` 行级隔离 -- 其他普通用户绝对看不到别人会话 -- 仅当前用户、系统管理员可通过后台数据库访问 - -### 图片 -- 路径:`public/uploads/assistant/YYYYMM/{userid}/xxx.jpg` -- 按用户 id 分目录,删除会话时物理删除 - -### 配置 / 模型选择 -- 存 IndexedDB `aiAssistant.model`(仅当前浏览器) -- 浮按钮位置 / 输入历史也存 IndexedDB,不上传 - -## 数据传给谁 - -``` -浏览器 - → DooTask 后端 (POST api/assistant/auth) - → ai 插件容器 (dootask-ai) - → 上游 LLM 服务商 (OpenAI / Claude / DeepSeek 等) -``` - -- 上游服务商由**系统管理员**决定 -- 选 Ollama 本地模型则对话不出 DooTask 部署网络 -- 选公网服务则按服务商隐私条款处理 - -## 发送上去的内容 -- 本次提问的文本 + 图片(多模态时) -- 当前会话最近 10 轮 context -- 当前页面弱提示词(仅页面类型 + 实体 id + 名称,**不含**业务详细数据) -- DooTask 默认 system prompt - -## 不会发送的 -- 用户密码、token、密钥 -- 不在 context 窗口内的历史会话 -- 其他用户对话 -- 私聊 / 群聊具体消息(除非用户主动复制到提问) -- 完整页面业务数据(只发弱提示词) - -## 清理与删除 -- 单条 / 清空当前桶:[[ai-assistant.session-delete.howto]] -- 清浏览器 IndexedDB:清掉模型选择、浮按钮位置、输入历史 -- 上游侧保留多久取决于服务商(如 OpenAI 默认 30 天) - -## 不支持 -- 不支持端到端加密让管理员都看不到 -- 不支持把某条对话标记「不发送」 -- 不支持自助导出全部历史 - -## 相关 -- [[ai-assistant.auth.concept]] -- [[ai-assistant.session.concept]] -- [[ai-assistant.page-context.concept]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/session.md b/resources/ai-kb/zh/concept/ai-assistant/session.md deleted file mode 100644 index 8c8f9f6fd..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/session.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -id: ai-assistant.session.concept -title: AI 助手会话 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 会话 - - AI 历史 - - AI 对话记录 - - AI session - - session_key - - 会话桶 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 单个桶最多 20 条会话,超过自动淘汰最早 - - 嵌入式入口的会话不出现在浮窗历史里 - - 删除会话不可恢复,对应图片也会从 public/uploads 物理删除 -last_verified: v1.7.90 ---- - -# AI 助手会话 - -## 定义 -会话(session)是 AI 助手中一组连续的用户提问 + AI 回答集合,按「场景桶」隔离持久化到 `ai_assistant_sessions` 表,归当前用户所有。 - -## 关键属性 - -| 字段 | 含义 | -|---|---| -| `session_key` | **场景桶**,浮窗用 `global`,嵌入入口用各自 key | -| `session_id` | 唯一 id,格式 `session-{时间戳}-{随机串}` | -| `title` | 自动取首条用户消息前 20 字 | -| `data` | JSON 数组,存所有 user/assistant/system 消息 | -| `images` | JSON 对象 `{imageId: 服务端路径}` | -| `updated_at` | 历史列表按其倒序 | - -## 持久化时机 -- 流式回答完成后立即保存 -- 编辑历史问题、删除消息后保存 -- 普通编辑期间有 2 秒防抖 - -## 桶(session_key)的作用 -不同业务入口走不同桶: -- `global`:浮窗 + 快捷键 + 顶部「+」菜单 -- `project-create`:新建项目 AI 助手 -- `task-add`:新建任务 AI 助手 -- `report-edit`:工作汇报 AI -- `chat-message`:消息输入 AI - -切桶时先保存当前会话再载入目标桶历史列表,避免互相串扰。 - -## 数量限制 -- 每个桶最多保留 20 条(`maxSessionsPerKey`) -- 超过从最旧的开始淘汰 -- 单会话内最多 50 条 message(`maxResponses`) - -## 不支持 -- 不支持跨用户 / 跨桶搜索;只查当前用户当前桶 -- 不支持把某条会话从一个桶导到另一个桶 -- 不支持手动改会话标题 - -## 相关 -- [[ai-assistant.session-list.howto]] -- [[ai-assistant.new-chat.howto]] -- [[ai-assistant.session-delete.howto]] -- [[ai-assistant.embed-entry.concept]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/streaming.md b/resources/ai-kb/zh/concept/ai-assistant/streaming.md deleted file mode 100644 index baac2499a..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/streaming.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -id: ai-assistant.streaming.concept -title: AI 助手流式输出 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 流式回答 - - 边写边出 - - AI 一边打字一边显示 - - SSE 流 - - AI 实时输出 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 不支持 WebSocket 推送,固定走 SSE - - 不支持手动重试单条;流断后该 message 标记 error,需重新发送 - - 同会话并发流会被前一个的发送动作清掉 -last_verified: v1.7.90 ---- - -# AI 助手流式输出 - -## 定义 -AI 助手通过 **SSE(Server-Sent Events)** 接收上游 LLM 的逐 token 输出,每收到一个 chunk 就追加到当前 message 的 `rawOutput`,呈现 ChatGPT 般「边写边出」的效果。 - -## 数据流 -1. `POST api/assistant/auth` → 拿 stream_key -2. `EventSource ai/invoke/stream/{stream_key}` -3. 监听三类事件: - - `append` → 追加(`entry.rawOutput += chunk`) - - `replace` → 整段替换(`entry.rawOutput = chunk`) - - `done` → 流结束(`entry.status = 'completed'`) -4. 断流 / 异常 → `handleStreamFailed` - -## 事件类型 - -| 事件 | 用途 | -|---|---| -| `append` | 普通增量 token(最常见) | -| `replace` | 整段替换(工具结果回填、思考链重写) | -| `done` | 流结束,payload 含 `error` 字段表示上游报错 | - -## 状态机 -每条 AI message 4 个状态: -- `waiting` → 已发出但首个 chunk 未到 -- `streaming` → 正在接收 chunk -- `completed` → `done` 正常收到 -- `error` → 上游错误、连接失败、用户中断 - -## 并发与归属 -- 每个流绑定 `owner = {sessionKey, sessionId, localId}` -- 用户切到其他会话后,原流仍后台跑,结束时写回原会话存储 -- 发新问题前会清掉同会话的所有活跃流,防止两段对话错位 - -## 中断恢复保护 -- 关浮窗 / 页面崩溃后,下次加载会话发现 message 仍是 `streaming/waiting` 则归一为 `error` -- 避免「永远转圈」(`sanitizeResponsesForPersist`) - -## 滚动行为 -- 视图在最底部时新 chunk 自动 `scrollToBottom` -- 用户向上翻历史时(距底 > 20px)不强制下拉 - -## 不支持 -- 不支持 WebSocket -- 不支持 chunk 级别撤销 -- 不支持自动重试断流 - -## 相关 -- [[ai-assistant.stop.howto]] -- [[ai-assistant.modal.concept]] -- [[ai-assistant.session-save.howto]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/tool-call.md b/resources/ai-kb/zh/concept/ai-assistant/tool-call.md deleted file mode 100644 index 63fcce66d..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/tool-call.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: ai-assistant.tool-call.concept -title: 工具调用的流式事件结构 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - tool_call 是什么 - - AI 工具调用的过程 - - 工具调用气泡 - - AI 调用了工具显示什么 - - tool_call 事件 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 单次回复可包含多次工具调用(并行或串行),不限于一次 - - 工具调用结果不计入用户上下文 token,但会消耗会话 token - - 用户不能在前端取消已发出的工具调用,只能整体中断本轮回复 -last_verified: v1.7.90 ---- - -# 工具调用的流式事件结构 - -## 定义 -AI 助手回复以流式 SSE 推送给前端,事件中除了文本增量,还会出现工具调用片段。每次工具调用在浮窗里渲染为一个独立气泡,展示"工具名 + 参数 + 状态",让用户能看到 AI 在背后做什么。 - -## 一次完整工具调用的事件序列 -1. `tool_call_start`:模型决定调工具,前端插入气泡,状态置「执行中」 -2. `tool_call_arguments`(可多次):参数 JSON 增量流式拼接 -3. `tool_call_result`:后端/前端返回结果,状态变「完成」或「失败」 -4. 模型基于结果继续生成 `message` 文本 - -## 气泡可见信息 -- 工具名(如 `list_tasks`) -- 入参 JSON(折叠/展开) -- 出参摘要(成功)或错误码(失败) -- 执行耗时 - -## 与普通文本的关系 -- 工具结果不直接回给用户,而是回灌给模型 -- 模型读结果后再生成下一段自然语言回答("我找到 3 条任务……") -- 用户体感是"AI 一边查一边说" - -## 不支持 -- 工具调用进行中无法手动改参数;要重来需点重试或重新提问 -- 失败的工具调用不会自动二次重试(模型可能换工具或道歉) - -## 相关 -- 工具机制总览:[[ai-assistant.tools.concept]] -- 工具清单:[[ai-assistant.tools-list.concept]] -- 失败处理:[[ai-assistant.tool-failed.faq]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/tools-list.md b/resources/ai-kb/zh/concept/ai-assistant/tools-list.md deleted file mode 100644 index 6b6dad8a5..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/tools-list.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -id: ai-assistant.tools-list.concept -title: AI 助手可用工具清单 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 有哪些工具 - - AI 能调用什么 - - AI 工具列表 - - MCP 工具有哪些 - - AI 都能做什么 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 -negative: - - 工具集合由系统维护,普通用户无法自定义增减 - - 列表项名是后端工具名(snake_case),用户不需要记 - - 不在清单中的能力 AI 无法直接执行(例如改系统设置、装插件) -last_verified: v1.7.90 ---- - -# AI 助手可用工具清单 - -## 用户与组织 -- `get_users_basic`:批量取用户昵称/邮箱/头像 -- `search_users`:按关键词找人,支持按项目/对话筛选 - -## 任务 -- `list_tasks`:列任务(状态/项目/时间筛选) -- `get_task`:取任务完整详情 -- `create_task`、`update_task`、`complete_task`、`delete_task` -- `create_sub_task`:建子任务 -- `get_task_files`:取任务附件 - -## 项目 -- `list_projects`、`get_project`、`create_project`、`update_project` - -## 消息与对话 -- `search_dialogs`:搜对话 -- `send_message`:发消息 -- `send_task_ai_message`:作为 AI 向任务讨论区发消息 -- `get_message_list`:取历史消息 - -## 文件 -- `list_files`、`search_files`、`get_file_detail`、`fetch_file_content` - -## 工作报告 -- `list_received_reports`、`list_my_reports`、`get_report_detail`、`create_report`、`mark_reports_read` -- `generate_report_template`:基于已完成任务生成报告草稿 - -## 搜索 -- `intelligent_search`:跨任务/项目/文件/联系人/消息统一语义搜索 - -## 页面操作(非 MCP 工具) -AI 助手还能在你当前的浏览器/桌面端页面上帮你打开任务/项目/对话、跳功能页、点击/输入/选择/滚动页面元素。这类页面操作不在 MCP 工具清单内,由 AI 助手在你的页面上直接执行。 - -## 图片理解(非 MCP 工具) -把图片交给 AI 助手后,AI 可直接识别图中内容(多模态),无需单独的图片文字提取工具。 - -## 知识库 -- `search_help_docs`:检索本知识库(DooTask 功能说明) -- `get_session_image`:取用户上传到会话的图片 diff --git a/resources/ai-kb/zh/concept/ai-assistant/tools.md b/resources/ai-kb/zh/concept/ai-assistant/tools.md deleted file mode 100644 index 35886f007..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/tools.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -id: ai-assistant.tools.concept -title: AI 助手的工具调用机制 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 工具 - - AI 调工具 - - 怎么让 AI 调工具 - - 让 AI 调用工具 - - MCP 工具 - - AI 怎么操作系统 - - function calling - - AI 能做什么 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 -negative: - - 工具是否可用取决于所选模型是否支持 tool/function calling,部分模型仅能纯文本回答 - - 工具调用结果会展示给用户,不会静默执行 - - 用户没权限的操作(如读不到的任务)即使 AI 调工具也会被后端拒绝 -last_verified: v1.7.90 ---- - -# AI 助手的工具调用机制 - -## 定义 -DooTask AI 助手通过 MCP(Model Context Protocol)协议调用工具,把"问 AI"扩展为"让 AI 帮我做事"。AI 收到用户请求后判断是否需要调工具,例如查任务、发消息、跳页面,由插件 `mcp_server` 把请求路由到对应的后端 API 或前端动作执行器,再把结果回灌给模型,模型基于结果继续回答。 - -## 工具来源 -- **dootask-mcp 内置工具**:29 个,覆盖任务/项目/消息/文件/报告/搜索 -- **AI 助手内置工具**:`search_help_docs`(检索本知识库)、`get_session_image`(取多模态图片) -- **doo 命令行工具**:AI 助手还可经内置的 `doo` 命令行(以你的身份、在你的权限内)直接完成任务/项目/消息/文件/报告/搜索/页面等操作;它是把上述能力统一成一个命令行入口,权限同样由后端校验 -- 工具清单维护在仓库 `resources/ai-kb/_meta/tool-binding.yaml` - -## 数据工具与页面操作 -- **数据工具(MCP)**:直接调后端 API(如 `create_task`、`send_message`),不依赖前端 UI -- **页面操作(非 MCP 工具)**:AI 助手还能在你当前的浏览器/桌面端页面上打开任务/跳页面、点击/输入页面元素;这类能力不在 MCP 工具清单内,由 AI 助手在你的页面上执行 - -## 触发条件 -- AI 模型本身必须支持 tool calling(OpenAI / Claude / DeepSeek / Qwen 等主流模型均支持) -- 管理员在系统设置「AI 模型」中开启该模型 -- `mcp_server` 插件已安装并运行 - -## 相关 -- 工具完整清单:[[ai-assistant.tools-list.concept]] -- 工具调用流式事件结构:[[ai-assistant.tool-call.concept]] -- 工具调用失败处理:[[ai-assistant.tool-failed.faq]] diff --git a/resources/ai-kb/zh/concept/ai-assistant/welcome-prompts.md b/resources/ai-kb/zh/concept/ai-assistant/welcome-prompts.md deleted file mode 100644 index 1234c555b..000000000 --- a/resources/ai-kb/zh/concept/ai-assistant/welcome-prompts.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -id: ai-assistant.welcome-prompts.concept -title: AI 助手欢迎语与快捷提示 -type: concept -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 欢迎页 - - AI 快捷提示 - - AI 推荐问法 - - AI 起手 - - AI 建议 - - AI 提示卡片 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 用户不能自定义快捷提示卡片 - - 卡片在每次场景切换时会重抽,并非固定不变 - - 卡片点击只是把文本填入输入框,不会自动发送 -last_verified: v1.7.90 ---- - -# AI 助手欢迎语与快捷提示 - -## 定义 -打开 AI 助手浮窗、**还没有任何对话**时显示的引导界面,包含 AI 图标 + 「欢迎使用 AI 助手」标题 + 若干个**快捷提示卡片**。卡片内容根据当前页面场景动态切换。 - -## 卡片分类 -按四类设计确保多样性: - -| 类型 | 含义 | 示例 | -|---|---|---| -| `query` | 查询 / 概览 | 「我今天有哪些任务?」 | -| `action` | 推进 / 操作 | 「帮我把这条任务标记完成」 | -| `sync` | 同步 / 协作 | 「给项目组发一条进度更新」 | -| `review` | 复盘 / 总结 | 「总结一下这周的工作」 | - -## 与页面场景联动 -卡片基于以下数据动态生成: -- 当前路由(仪表盘 / 项目 / 任务 / 消息 / 文件 / 日历) -- 当前打开的弹窗(任务 / 对话) -- 当前项目 / 任务 / 对话 id -- 当前语言(中 / 英) - -切换页面时通过 `welcomePromptsKey` watcher 触发,100ms 防抖避免闪屏。 - -## 点击行为 -1. 点击某张卡片 -2. 卡片文本被填入输入框 -3. 输入框自动获焦 -4. **不会**自动发送,需手动按发送或回车 - -## 显示条件 -- AI 助手浮窗已打开 -- `visibleResponses.length === 0`(当前会话无消息) -- `displayMode === 'chat'`(modal 模式由业务方控制) - -## 何时刷新 -- 路由变更 -- 打开 / 关闭任务弹窗 -- 打开 / 关闭对话弹窗 -- 切换项目 - -均走 `welcomePromptsKey` watcher + 100ms 防抖。 - -## 不支持 -- 不支持自定义卡片文案 -- 不支持「关闭欢迎提示卡片」开关 -- 不支持把某条卡片置顶或常驻 - -## 相关 -- [[ai-assistant.modal.concept]] -- [[ai-assistant.page-context.concept]] diff --git a/resources/ai-kb/zh/concept/approve/form.md b/resources/ai-kb/zh/concept/approve/form.md deleted file mode 100644 index a2ccb4ace..000000000 --- a/resources/ai-kb/zh/concept/approve/form.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: approve.form.concept -title: 审批表单字段 -type: concept -feature: approve -scope: admin -locale: zh -aliases: - - 审批表单 - - 表单字段 - - 表单设计 - - 自定义字段 - - 申请单字段 - - 表单组件有哪些 - - 申请类型字段 -related_tools: [] -related_pages: [application] -prerequisites: - - 当前用户是系统管理员 - - 在流程模板编辑器中 -negative: - - 当前版本不支持公式字段(如「时长 = 结束时间 - 开始时间」自动算) - - 不支持联动字段(A 字段值变化时显示/隐藏 B 字段) - - 不支持把表单字段值用作下一节点审批人路由依据(无条件分支) - - 表单字段一旦发布后改动,已提交的旧实例展示按当时快照不回填 -last_verified: v1.7.90 ---- - -# 审批表单字段 - -## 定义 -审批表单是发起人填写的申请单结构,由若干**字段组件**拼成。管理员在流程模板编辑器(iframe 内)拖拽这些组件即可设计表单。表单值随流程实例一起存到插件库的 `var` 字段(JSON),并随状态变化贯穿始终。 - -## 内置字段组件 -- **单行文本**:限长字符串,如「申请人姓名」「合同编号」 -- **多行文本**:长描述,如「请假事由」「报销说明」 -- **数字**:整数 / 小数,如「报销金额」 -- **日期 / 日期时间**:年-月-日 或精确到分钟,常用于开始/结束时间 -- **单选 / 多选 / 下拉**:固定选项集,如「假期类型」可枚举「年假/事假/病假/调休/产假/陪产假/婚假/丧假/哺乳假/产检假/其他」 -- **附件 / 图片**:上传文件,前端控件复用主程序 `ImgUpload`;图片限制宽高与张数(默认上限 3 张、2048×2048) -- **明细 / 子表**:一对多结构,如报销单的多行费用明细 -- **金额 / 时长**:业务语义字段(基于数字字段封装) - -## 必填、提示、默认值 -- 每个字段可配置 `required`(必填)、占位提示、默认值 -- 必填项校验在发起页前端拦截;提交到主程序 `process__start` 再做二次校验 - -## 与流程节点的关系 -- 表单字段是"装数据的",节点是"管流转的",两者解耦 -- 节点拿不到 form 字段做路由决策(不支持条件分支) - -## 数据存储 -- 表单值在主程序前端组成 `var` JSON 后随 `proc_name + department_id` 一起调 `approve/process/start` -- 插件把 `var` 整体存进 proc inst 行;后续审批人查看时反序列化展示 - -## 不支持 -- 不支持字段联动 / 公式 / 条件分支 -- 不支持表单级权限(不能按角色显示不同字段) -- 不支持跨流程模板字段复用 diff --git a/resources/ai-kb/zh/concept/approve/history.md b/resources/ai-kb/zh/concept/approve/history.md deleted file mode 100644 index c35e61548..000000000 --- a/resources/ai-kb/zh/concept/approve/history.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -id: approve.history.concept -title: 审批流程历史 History -type: concept -feature: approve -scope: end-user -locale: zh -aliases: - - 审批历史 - - 审批操作记录 - - 流程留痕 - - 谁审过 - - 流程节点历史 - - ProcInstHistory -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 -negative: - - 历史记录不可手动编辑,只由系统在节点流转时写入 - - 删除审批(process/delById)会连带删除该流程的全部历史 - - 历史不会单独导出,导出走 admin 的 approve/export 数据导出 -last_verified: v1.7.90 ---- - -# 审批流程历史 History - -## 定义 -流程历史(`ApproveProcInstHistory`,表 `approve_proc_inst_history`)是每个流程实例([[approve.process-inst.concept]])在节点流转时留下的快照,记录谁发起、当前节点、最近意见、整体状态,用于已结束审批的留档查询和驱动「已办」「抄送我(已结束)」两类列表。 - -## 关键字段 -- **proc_def_id / proc_def_name**:所属模板 ID 和名称 -- **title**:审批标题 -- **start_user_id / start_user_name**:发起人 -- **department_id / department / company**:发起部门和公司 -- **node_id / candidate / task_id**:当前节点、候选人 userid 串、task ID -- **start_time / end_time / duration**:开始/结束/持续时长 -- **state**:0 待审批 / 1 审批中 / 2 通过 / 3 拒绝 / 4 撤回 -- **is_finished / var**:是否结束 / 表单数据 JSON -- **latest_comment / global_comment**:最近一次意见 / 全文评论汇总 - -## 谁会读取 -- 「已办」:`approve/procHistory/findTask` -- 「抄送我」已结束:`approve/procHistory/findProcNotify` -- 「已发起」已结束:`approve/procHistory/startByMyself` -- 详情页流程图:合并 `node_infos` 与历史渲染 - -## 副作用:用户请假/外出状态 -静态方法 `getUserApprovalStatus(userid)` 按当前时间是否落在某条已通过的「请假/外出」表单时段内,决定用户在系统其他地方的「请假中」标签。1 分钟缓存。 diff --git a/resources/ai-kb/zh/concept/approve/node.md b/resources/ai-kb/zh/concept/approve/node.md deleted file mode 100644 index e0f5ac7e5..000000000 --- a/resources/ai-kb/zh/concept/approve/node.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: approve.node.concept -title: 审批节点类型 -type: concept -feature: approve -scope: admin -locale: zh -aliases: - - 审批节点 - - 单人审批 - - 会签是什么 - - 顺序会签 - - 并行会签 - - 或签 - - 多人审批怎么配 - - 审批人怎么设 -related_tools: [] -related_pages: [application] -prerequisites: - - 当前用户是系统管理员 - - 在流程模板编辑器中 -negative: - - 当前版本不支持条件分支节点(按表单字段值自动路由到不同审批人),节点链只能串行/并行 - - 不支持嵌套子流程节点 - - 不支持回退到任意节点:拒绝直接结束流程,不能让发起人改了再走原路 -last_verified: v1.7.90 ---- - -# 审批节点类型 - -## 定义 -流程模板由若干**节点**串成一条链。一个节点 = 一步审批/抄送。节点决定"这一步由谁参与、用什么方式参与、参与后流程怎么走"。审批人来源支持指定具体用户、按角色/部门负责人动态解析。每条流程发起后会生成对应的"审批任务(task)"分发到各节点候选人手上。 - -## 主要节点类型 -- **发起节点**:流程起点,自动以申请人身份填充;不需要配置审批人 -- **单人审批**:1 个候选人,处理后流程进入下一节点 -- **顺序会签**:多个审批人按顺序处理,前一人通过才轮到下一人;任一人拒绝整单拒绝 -- **并行会签**:多个审批人同时收到任务,**全部**通过才进入下一节点;任一人拒绝整单拒绝 -- **或签**:多个候选人同时收到任务,**任一人**处理即代表全节点完成(典型用于"任一主管审批") -- **抄送节点**:通知性节点,候选人只收到通知(在「抄送我的」Tab 看到),无须操作,流程不等待 - -## 审批人来源 -- 指定具体用户:在编辑器里勾选成员列表 -- 部门负责人:动态解析为发起人当前部门的 `owner_userid`(在 `UserDepartment` 表里维护) -- 角色:按主程序角色匹配 -- 发起人自选:留空让发起人发起时手动指定 - -## 节点完成后的通知 -节点产生新任务后,主程序通过 `approval-alert` 机器人在群聊推送"待你审批"模板消息给候选人;状态变更(通过/拒绝/撤回)也走同一机器人推送。 - -## 与状态的关系 -- 整单状态:审批中(1)/ 通过(2)/ 拒绝(3)/ 撤回(4) -- 当前所在节点 + 候选人由插件维护,主程序通过 `process__getProcessById` 拿到 - -## 不支持 -- 不支持条件分支(不能按表单字段值 IF X 自动路由到分支 A);需要按条件走不同审批人时,把流程拆成多个流程模板(如「请假 3 天以内」「请假 3 天以上」各建一个),由发起人按情况选择 -- 不支持任意节点回退 -- 不支持节点级 SLA 超时自动转交 diff --git a/resources/ai-kb/zh/concept/approve/notify.md b/resources/ai-kb/zh/concept/approve/notify.md deleted file mode 100644 index 944d89515..000000000 --- a/resources/ai-kb/zh/concept/approve/notify.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: approve.notify.concept -title: 审批通知与「审批助手」机器人 -type: concept -feature: approve -scope: end-user -locale: zh -aliases: - - 审批机器人 - - 审批通知 - - 审批助手 - - approval-alert - - 怎么收到审批提醒 - - 审批卡片 -related_tools: [] -related_pages: [application, messenger] -prerequisites: - - 应用市场已安装 approve 插件 - - 当前账号未屏蔽「审批助手」机器人会话 -negative: - - 不支持改成第三方 webhook 推送 - - 不支持邮件 / 短信 / APP 推送渠道(只发应用内聊天) - - 不支持自定义模板文案 - - 机器人不能被「@」也不能直接对话指令 -last_verified: v1.7.90 ---- - -# 审批通知与「审批助手」机器人 - -## 定义 -审批的所有通知都通过系统机器人「审批助手」(userid `approval-alert`)的 1 对 1 私聊推送,消息类型 `template`(卡片)。卡片含标题、关键字段、缩略图(请假类带图片时),底部「查看详情」跳进审批详情。 - -## 何时发卡片 -后端 `approveMsg()` 按 `type` 投递: - -| type | 触发 | 收件人 | 标题样例 | -|---|---|---|---| -| `approve_reviewer` | 到我作审批人节点 | 待审批人 | {发起人} 提交的「{模板}」待你审批 | -| `approve_notifier` | 到我所在 notifier 节点 | 抄送人 | 抄送 {发起人} 提交的「{模板}」记录 | -| `approve_comment_notifier` | 我参与的审批被加全文评论 | 其他相关方 | {评论人} 评论了 {发起人} 的「{模板}」审批 | -| `approve_submitter` | 我发起的被通过/拒绝 | 发起人 | 您发起的「{模板}」已通过 / 被 {审批人} 拒绝 | - -## 卡片更新机制 -审批人同意/拒绝、发起人撤销时不发新卡,而用 `msg_id` 反查原卡片调 `change-{msg_id}` 原地更新(绿-通过/红-拒绝/灰-撤回),避免聊天里堆几十条。 - -## 未读徽标 -`approve_reviewer` 推送时附带 WebSocket 事件 `approve/unread`,「审批」入口和 Tab「待办」名后的数字立即 +1,处理后 -1。数量接口 `approve/process/doto`。 diff --git a/resources/ai-kb/zh/concept/approve/overview.md b/resources/ai-kb/zh/concept/approve/overview.md deleted file mode 100644 index 4f10fad2a..000000000 --- a/resources/ai-kb/zh/concept/approve/overview.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -id: approve.concept -title: 审批中心是什么 -type: concept -feature: approve -scope: end-user -locale: zh -aliases: - - 审批是什么 - - 审批流程是什么 - - approve 插件 - - 什么是流程审批 - - 工作流 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 -negative: - - 审批是独立插件,未安装时整个功能不可用 - - 不支持条件分支(按表单值路由到不同审批人) - - 不支持嵌套子审批 - - 表单不支持公式计算字段 -last_verified: v1.7.90 ---- - -# 审批中心是什么 - -## 定义 -审批中心(approve)是 DooTask 的内置流程审批应用,用于在企业内提交、流转、处理表单类申请。典型场景:请假、出差、报销、用印、采购、合同会签。它是独立插件(独立 docker 服务 + 独立数据库),主程序通过 `ApproveController` 代理调用并把消息回写到聊天会话。 - -## 三个核心对象 -- **流程模板 ProcDef**:管理员预先定义的审批样板,含表单字段、审批人节点、抄送人节点。普通用户只能选用,不能修改 -- **流程实例 ProcInst**:一次具体的审批运行;用户每提交一次就生成一条,详见 [[approve.process-inst.concept]] -- **节点 Node**:模板里的步骤;常见类型 `starter`(发起)、`approver`(审批人)、`notifier`(抄送)、`end`(结束) - -## 三类角色 -- **发起人**:提交审批的人,能撤回未结束的审批、能给已结束的审批补评论 -- **审批人**:在「待办」看到任务,可同意或拒绝 -- **抄送人**:在「抄送我」看到知会,无须操作 - -## 状态机 -流程实例的 `state`:1 审批中、2 已通过、3 已拒绝、4 已撤回。详情页右上角用 Tag 显示,列表也按这个色区分。 - -## 与项目/任务/聊天的关系 -- 审批不属于任何项目,是独立工作流 -- 所有通知通过「审批助手」机器人发到 1 对 1 聊天([[approve.notify.concept]]) diff --git a/resources/ai-kb/zh/concept/approve/plugin.md b/resources/ai-kb/zh/concept/approve/plugin.md deleted file mode 100644 index 1962916e3..000000000 --- a/resources/ai-kb/zh/concept/approve/plugin.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -id: approve.plugin.concept -title: 审批插件架构 -type: concept -feature: approve -scope: end-user -locale: zh -aliases: - - 审批是插件吗 - - approve 插件是什么 - - 审批中心怎么部署的 - - 为什么审批要单独装 - - 审批不在主程序里吗 -related_tools: [] -related_pages: [application] -prerequisites: [] -negative: - - approve 不是主程序内置功能,必须先在应用市场安装插件才能用 - - 审批数据存在独立的 `<前缀>approve_*` 数据表里,不在主程序业务表 - - 卸载插件时若勾选「删除数据」会清空全部审批数据,无法恢复 -last_verified: v1.7.90 ---- - -# 审批插件架构 - -## 定义 -审批(approve)是 DooTask 的独立插件,由 `kuaifan/dooapprove` Docker 镜像提供一套独立的工作流引擎服务。主程序通过反向代理与之通信,所有审批的流程定义、实例、任务、历史都由插件维护,不在主程序业务表里。 - -## 关键属性 -- **独立容器**:插件作为 docker-compose 服务名 `approve` 启动,端口仅在内网暴露 -- **独立数据库表**:复用主库实例但表前缀为 `approve_`(如 `pre_approve_*`),与主程序业务表逻辑隔离 -- **HTTP 反代**:主程序 nginx 把 `/approve/` 转给插件容器;`/approve/api/` 先经 `/approveAuth` 校验主程序 token 再放行 -- **业务桥接**:主程序 `ApproveController` 通过 `http://approve` 调用插件 REST 接口(路径前缀 `/api/v1/workflow/...`),把结果包成 `Base::retSuccess` 返回前端 -- **通知桥接**:审批状态变化通过 `approval-alert` 机器人在 DooTask 群聊中下发模板消息 - -## 与主程序的关系 -- 主程序登录 token = 审批插件身份凭据(通过 `verifyToken` 接口校验) -- 主程序用户/部门/机器人是审批的"人员主数据",审批不复制用户表 -- 用户感知不到容器分离:在 [[app-system.approve.howto]] 描述的「审批中心」页面内完成所有操作 - -## 不支持 -- 主程序无法直接 SQL 查询审批数据,必须经插件 API -- 关闭/卸载插件后无法发起新审批:「应用 - 审批」入口在新发起处会报错(`Apps::isInstalledThrow`) diff --git a/resources/ai-kb/zh/concept/approve/process-inst.md b/resources/ai-kb/zh/concept/approve/process-inst.md deleted file mode 100644 index f6c567ab9..000000000 --- a/resources/ai-kb/zh/concept/approve/process-inst.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: approve.process-inst.concept -title: 流程实例 ProcInst 是什么 -type: concept -feature: approve -scope: end-user -locale: zh -aliases: - - 流程实例 - - 审批单 - - ProcInst - - 审批运行 - - 一次审批 - - 流程 ID -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 -negative: - - 流程实例不可改字段,提交后表单只读 - - 一旦后续节点已被任何审批人处理,发起人不能再撤销 - - 已结束的实例只有发起人或管理员能删([[approve.doto.howto]]) -last_verified: v1.7.90 ---- - -# 流程实例 ProcInst 是什么 - -## 定义 -流程实例(ProcInst)是「一次具体的审批运行」的对象,由发起审批时创建。模板(ProcDef)是图纸,实例是按图纸跑出来的一条具体审批单。每提交一次就生成一个新实例,有唯一数字 ID。后端表 `approve_proc_inst`,主程序通过 `approve/process/findById` 取数据。 - -## 关键属性 -- **id**:实例唯一 ID -- **proc_def_name**:模板名(如「请假申请」) -- **start_user_id / start_user_name**:发起人 ID 和昵称 -- **start_time**:提交时间 -- **state**:1 审批中 / 2 已通过 / 3 已拒绝 / 4 已撤回 -- **is_finished**:是否结束(state ≠ 1 即结束) -- **task_id**:当前 task ID(处理动作要带) -- **candidate**:当前候选审批人 userid 逗号串 -- **node_id / node_infos**:当前节点 ID + 所有节点状态数组,用于渲染流程图 -- **var**:表单字段对象(type / start_time / end_time / description / other 等) -- **global_comments**:全文评论数组([[approve.comment.howto]]) - -## 生命周期 -1. **创建**:`approve/process/start`,state=1 -2. **流转**:每次 `approve/task/complete` 推进节点 -3. **结束**:state 变 2/3/4 -4. **清理**:仅结束态可调 `approve/process/delById` 物理删除 - -## 与历史记录的关系 -每次节点流转写一条 [[approve.history.concept]](`approve_proc_inst_history`),实例被删后历史也消失。 diff --git a/resources/ai-kb/zh/concept/approve/template.md b/resources/ai-kb/zh/concept/approve/template.md deleted file mode 100644 index ecefbb1dc..000000000 --- a/resources/ai-kb/zh/concept/approve/template.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: approve.template.concept -title: 流程模板(流程定义) -type: concept -feature: approve -scope: admin -locale: zh -aliases: - - 流程模板 - - 审批模板 - - 流程定义 - - procdef 是什么 - - 流程名称 - - 审批流程是什么 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 -negative: - - 流程模板只能由系统管理员创建、编辑、删除;普通成员只能基于已发布模板发起申请 - - 删除模板会同时清空该模板下的所有审批数据,不可恢复 - - 模板间不可复制:每个模板都要在编辑器里独立配置节点和表单 -last_verified: v1.7.90 ---- - -# 流程模板(流程定义) - -## 定义 -流程模板(Process Definition,简称 procdef)是审批插件里"审批种类"的元数据,定义了一类审批的全部行为:表单字段、节点顺序、每个节点的审批人/抄送人。普通成员发起的每一单审批(流程实例)都必须基于某个已发布的流程模板。常见模板:请假申请、报销申请、出差申请、用印申请、采购申请。 - -## 关键属性 -- **唯一性**:以 `name` 区分(如「请假申请」),同名模板不允许重复创建 -- **版本**:每次发布累计 `version`;旧版本会被新版本顶替,进行中的审批仍按当时的版本走完 -- **状态**:草稿(编辑中)/ 已发布(前台可选) -- **存储位置**:插件独立数据库 `<前缀>approve_*` 表,不在主程序业务表 -- **生效范围**:全租户共享,不按部门隔离;要按部门分模板请改用不同 `name` - -## 与流程实例的关系 -- 一个模板(procdef)= 一份蓝图 -- 用户每发起一单 = 创建一个流程实例(proc inst),状态独立流转 -- 删除模板:插件会同时清空所有以该模板发起的实例,**不可恢复** - -## 与节点 / 表单的关系 -- 流程模板包含两部分配置:**节点链**(决定走哪几步、由谁审批)见 [[approve.node.concept]]、**表单字段**(决定申请人填什么)见 [[approve.form.concept]] -- 节点和表单在同一个流程编辑器(iframe 内)一起设计、一起发布 - -## 创建入口 -管理员在审批中心顶部「流程设置」按钮 → 「+」新建,详细步骤见 [[approve.template.howto]]。 diff --git a/resources/ai-kb/zh/concept/checkin/face.md b/resources/ai-kb/zh/concept/checkin/face.md deleted file mode 100644 index 2234c887d..000000000 --- a/resources/ai-kb/zh/concept/checkin/face.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -id: checkin.face.concept -title: 人脸签到原理与依赖 -type: concept -feature: checkin -scope: end-user -locale: zh -aliases: - - 人脸识别原理 - - face 插件 - - 人脸签到依赖 - - 刷脸打卡怎么工作的 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 face 插件 -last_verified: v1.7.90 ---- - -# 人脸签到原理与依赖 - -## 定义 -人脸签到是 DooTask 签到的一种方式,依赖独立的 **face 插件**提供人脸识别后端服务(容器名 `face`,内部端口 7788)。主程序只负责存储人脸图片地址 (`UserCheckinFace.faceimg`) 和触发签到记录写入,**所有特征提取、比对都由 face 插件完成**。 - -## 工作流程 -1. 成员在签到设置上传人脸图片 -2. 主程序把图片 base64 后 POST 到 `http://face:7788/user`,参数含 `enrollid`(成员 ID)、`name`(昵称)、`backupnum=50` -3. face 容器把特征存入设备库 -4. 现场人脸识别一体机扫到该成员 → 调主程序 API 写一条 `UserCheckinRecord` - -## 关键依赖 -- **face 插件**:人脸识别引擎容器,未安装会抛 `Apps::isInstalledThrow('face')` 异常 -- **人脸识别一体机硬件**:插件 README 注明「需配合指定硬件设备使用」 -- **管理员开关**:「签到方式」勾选「人脸签到」+「允许修改」开启「允许成员上传人脸图片」 - -## 不支持 -- 主程序自带的浏览器 / WebRTC 摄像头不能直接当人脸打卡器 -- face 插件镜像较大(约 15MB+),首次安装下载较慢 -- 删除成员或卸载插件后,face 容器内的特征不会自动清空,需要管理员手动删除 diff --git a/resources/ai-kb/zh/concept/checkin/plugin.md b/resources/ai-kb/zh/concept/checkin/plugin.md index 8bc289c5d..4a579263d 100644 --- a/resources/ai-kb/zh/concept/checkin/plugin.md +++ b/resources/ai-kb/zh/concept/checkin/plugin.md @@ -32,7 +32,7 @@ last_verified: v1.7.90 - **人脸签到(face)**:**需要安装 face 插件**(应用市场搜「Face check-in」),并配套人脸识别硬件设备 ## 关联应用市场 -- `face` 插件:人脸识别后端服务,未装时人脸上传 / 现场刷脸都会失败,详见 [[checkin.face.concept]] +- `face` 插件:人脸识别后端服务,未装时人脸上传 / 现场刷脸都会失败(人脸签到详细说明随 face 应用知识库提供) - `approve` 插件:影响提醒筛选——已请假 / 外出审批的成员不会收到缺卡提醒 ## 不支持 diff --git a/resources/ai-kb/zh/concept/drawio/overview.md b/resources/ai-kb/zh/concept/drawio/overview.md deleted file mode 100644 index e446d3f9f..000000000 --- a/resources/ai-kb/zh/concept/drawio/overview.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: drawio.concept -title: 流程图(drawio)是什么 -type: concept -feature: drawio -scope: end-user -locale: zh -aliases: - - drawio - - 流程图 - - 画流程图 - - draw.io - - DooTask 流程图 - - UML 图 -related_tools: [] -related_pages: [file] -prerequisites: - - 应用市场已安装 drawio 插件 -negative: - - 流程图编辑能力不是主程序内置,未装 drawio 插件无法新建 `drawio` 类型文件 - - 不支持把 drawio 图形直接嵌入到任务详情/讨论消息中(只能作为文件链接发送) - - 大图(千级节点)渲染会变慢,建议拆图 -last_verified: v1.7.90 ---- - -# 流程图(drawio)是什么 - -## 定义 -流程图是 DooTask 文件系统中的一种文件类型(`type=drawio`),用于绘制流程图、UML、ER 图、网络拓扑、思维导图等通用图形。它由独立的 drawio 插件提供编辑器(基于开源 jgraph/drawio),主程序通过 iframe 嵌入 `drawio/webapp/index.html`,文件内容存到 DooTask 自己的文件库里。 - -## 关键属性 -- **文件类型**:`drawio`(与 `mind` 思维导图、`document` 文本、`word/excel/ppt` 平行) -- **存储位置**:DooTask 文件系统(个人文件 / 项目文件 / 共享) -- **编辑器**:嵌入式 drawio 完整编辑器,含图形库、画布、属性面板 -- **导出**:支持导出 PNG / PDF(依赖插件内置的 export-server,缺它则导出失效) -- **历史版本**:随 DooTask 文件历史一同保存 - -## 支持的图形类型 -- 流程图、泳道图 -- UML 类图、时序图、用例图 -- 网络拓扑、机柜图 -- 实体关系(ER)图 -- 思维导图(更建议用专用的 minder 插件) -- 各类业务建模、原型草图 - -## 与其他文件类型的关系 -- **vs minder 思维导图**:思维导图专注放射结构,节点编辑更轻;drawio 是通用图形,自由度高 -- **vs OnlyOffice Word/Excel**:OnlyOffice 支持多人实时;drawio 单人编辑 -- **vs DooTask 内置 document**:document 是富文本/Markdown,没有矢量图形能力 - -## 相关 -- 插件元信息:[[drawio.plugin.concept]] -- 创建流程图:[[drawio.create.howto]] -- 入口在哪:[[drawio.entry.menu-map]] -- 内置模板:[[drawio.template.concept]] diff --git a/resources/ai-kb/zh/concept/drawio/plugin.md b/resources/ai-kb/zh/concept/drawio/plugin.md deleted file mode 100644 index cd3b1253d..000000000 --- a/resources/ai-kb/zh/concept/drawio/plugin.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: drawio.plugin.concept -title: drawio 插件元信息 -type: concept -feature: drawio -scope: admin -locale: zh -aliases: - - drawio 插件 - - 流程图插件 - - 安装 drawio - - drawio 插件版本 - - draw.io 集成 -related_tools: [] -related_pages: [application] -prerequisites: [] -negative: - - 主程序不内置流程图编辑器,未装插件时新建文件菜单不会显示「图表」 - - 插件体积大约 700MB,下载较慢,需要稳定网络 - - 缺少同包的 export-server 时,PNG/PDF 导出会失败 -last_verified: v1.7.90 ---- - -# drawio 插件元信息 - -## 定义 -流程图能力由 `drawio` 插件提供(应用市场 app id 为 `drawio`,当前主版本 30.0.4,基于开源 jgraph/drawio)。插件包内除了 drawio 前端,还包含一个 export-server(镜像 `kuaifan/export-server`)负责把图形导出为 PNG/PDF。主程序仅以 iframe 加载 `drawio/webapp/index.html`,编辑器交互与文件保存全部跑在前端 + 主程序文件 API。 - -## 关键属性 -- **作者**:社区维护(Community),上游 https://www.drawio.com/ -- **分类**:微应用(不在管理员应用区) -- **包大小**:约 700MB(含 drawio 资源 + export-server 镜像) -- **运行形态**:静态资源 + 一个导出服务容器 -- **关键依赖**:`webapp/index.html` 的 `EXPORT_URL` 指向插件内的 `/drawio/export/`,删 export-server 会导致导出 PNG/PDF 失效 -- **数据存储**:图形内容存到主程序文件表(`type=drawio`),不在插件容器单独存 - -## 安装与启用 -1. 在应用市场(管理员入口)搜索「Drawio」或「流程图」 -2. 点击安装,等待资源下载(约 700MB,请通过「安装日志」查看进度) -3. 安装完成后插件自动启用,文件新建菜单立即出现「图表」选项 - -## 卸载影响 -- 卸载后菜单消失,原有 `drawio` 文件保留在文件库中但无法继续编辑/预览 -- 重新安装后旧文件继续可用 - -## 已知限制 -- 网络不畅时首次加载图形库较慢 -- 离线环境需提前推到内网镜像源 - -## 相关 -- 是什么:[[drawio.concept]] -- 入口在哪:[[drawio.entry.menu-map]] -- 内置模板:[[drawio.template.concept]] diff --git a/resources/ai-kb/zh/concept/drawio/template.md b/resources/ai-kb/zh/concept/drawio/template.md deleted file mode 100644 index 6455099bc..000000000 --- a/resources/ai-kb/zh/concept/drawio/template.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: drawio.template.concept -title: drawio 内置图形与模板 -type: concept -feature: drawio -scope: end-user -locale: zh -aliases: - - drawio 模板 - - drawio 图形库 - - drawio 能画什么 - - 流程图都有哪些类型 - - drawio 支持的图形 -related_tools: [] -related_pages: [file] -prerequisites: - - 应用市场已安装 drawio 插件 -negative: - - DooTask 不提供「业务模板市场」,新建图永远是空白画布 - - 不能直接将 drawio 图形粘贴到 DooTask 任务详情或讨论消息 - - 模板/形状无法跨公司账号共享(每个部署独立) -last_verified: v1.7.90 ---- - -# drawio 内置图形与模板 - -## 定义 -drawio 编辑器自带丰富的图形库(Shape Libraries)和绘图分类,但 DooTask 集成时**不预置业务模板**。每次新建图都从空白画布开始,需要绘图者从图形库手动拖出元素或在 drawio 内的「File → New From Template」选择官方模板。 - -## 主要图形分类 -drawio 左侧图形库可勾选启用以下分类(部分): -- 通用形状(General) -- 流程图(Flowchart) -- 泳道图(Swimlanes) -- UML(类图、时序图、用例图、状态图、活动图) -- 实体关系(ER) -- 网络与基础设施(Cisco / AWS / Azure / GCP / Kubernetes 图标) -- 软件架构(C4 模型) -- 业务流程(BPMN) -- 思维导图(mockup) -- 电气、布线、机柜 -- 安卓/iOS 线框图 - -## 选用方式 -- 编辑器左下角「More Shapes」勾选要启用的图形库 -- 直接从左侧图形库拖元素到画布 -- 通过菜单 `File → New From Template` 选择官方预设模板(流程示例、组织结构等) - -## 与思维导图(minder)对比 -- drawio 也能画思维导图,但灵活但偏「画」 -- 专注思维导图推荐用专门的 [[minder.concept]] 插件,节点操作更顺手 - -## 不支持 -- DooTask 主程序不预置业务模板(如审批流程模板等) -- 模板不能跨部署共享,只能依赖 drawio 上游内置的模板 -- 不能上传自定义图形库到所有用户 - -## 相关 -- 是什么:[[drawio.concept]] -- 创建:[[drawio.create.howto]] diff --git a/resources/ai-kb/zh/concept/fileview/overview.md b/resources/ai-kb/zh/concept/fileview/overview.md deleted file mode 100644 index 3b44d9a8a..000000000 --- a/resources/ai-kb/zh/concept/fileview/overview.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: fileview.concept -title: 文件预览(fileview)是什么 -type: concept -feature: fileview -scope: end-user -locale: zh -aliases: - - fileview - - 文件预览 - - 在线预览 - - 预览 PDF - - 预览 Word - - kkfileview - - 在线看文件 -related_tools: [] -related_pages: [file] -prerequisites: - - 应用市场已安装 fileview 插件 -negative: - - fileview 只提供「只读预览」,不能在线编辑(编辑要装 OnlyOffice,见 [[office.concept]]) - - 主程序本身能直接预览图片(jpg/png/gif 等)和文本/代码,这些不需要 fileview - - 视频/音频在线播放走主程序自带能力,也不属于 fileview 范畴 -last_verified: v1.7.90 ---- - -# 文件预览(fileview)是什么 - -## 定义 -fileview 是 DooTask 的**通用文件在线预览**能力,基于开源 kkfileview 引擎,由独立插件提供。所有不能被主程序直接渲染的文件类型(PDF、Word 系、Excel 系、PPT 系、Visio、CAD 等)在点击文件名时会跳转到 fileview 的预览页(路径 `fileview/onlinePreview?url=`),返回浏览器内可滚动、可缩放、可翻页的页面。 - -## 关键属性 -- **只读**:仅查看,不可编辑(编辑能力需 OnlyOffice 插件) -- **入口**:点击文件即可,主程序对超出本地预览范围的文件自动 301 到 fileview 路径 -- **格式覆盖**:远超主程序自带能力,包括 Office 全家桶、PDF、各类压缩包、3D 模型、CAD 等(详见 [[fileview.supported.concept]]) -- **加载机制**:fileview 后端拉取文件 → 转码或解析 → 推送渲染结果到浏览器 -- **依赖**:依赖独立 fileview 容器持续运行 - -## 与其他预览能力的关系 -- **图片**(jpg/jpeg/png/gif/bmp 等):主程序内置直接渲染,不走 fileview -- **代码/文本**(2MB 内、扩展名属于 `codeExt` 列表):主程序内嵌 AceEditor 渲染,不走 fileview -- **Word/Excel/PPT**:装了 OnlyOffice 时走 OnlyOffice 编辑器(可编辑);没装但装了 fileview 则走 fileview 只读预览 -- **思维导图(mind)/ 流程图(drawio)**:DooTask 自己的图形文件,由 minder/drawio 插件渲染,不走 fileview - -## 相关 -- 插件元信息:[[fileview.plugin.concept]] -- 支持的文件类型:[[fileview.supported.concept]] -- 在线编辑 Office 文档:[[office.concept]] diff --git a/resources/ai-kb/zh/concept/fileview/plugin.md b/resources/ai-kb/zh/concept/fileview/plugin.md deleted file mode 100644 index d9bb4b068..000000000 --- a/resources/ai-kb/zh/concept/fileview/plugin.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: fileview.plugin.concept -title: fileview 插件元信息 -type: concept -feature: fileview -scope: admin -locale: zh -aliases: - - fileview 插件 - - kkfileview 插件 - - 安装文件预览 - - 文件预览插件版本 - - 预览插件多大 -related_tools: [] -related_pages: [application] -prerequisites: [] -negative: - - 未安装 fileview 插件时,PDF/Office 等文件点击后会报错或下载,无法在线预览 - - 主程序不内置 kkfileview,本插件是唯一来源 - - 不能离线安装到不联网的环境(需访问应用市场镜像源) -last_verified: v1.7.90 ---- - -# fileview 插件元信息 - -## 定义 -文件在线预览由 `fileview` 插件提供(应用市场 app id 为 `fileview`,当前主版本 4.4.0,基于开源 kkfileview 引擎)。主程序在用户点击文件时判断扩展名,若属于 fileview 范畴则 301 跳转到 `fileview/onlinePreview?url=`,由 fileview 容器渲染。 - -## 关键属性 -- **作者**:社区维护(Community),上游 https://kkview.cn/ -- **分类**:微应用(不在管理员应用区,但行为更像「基础设施」——不直接出现在「应用中心」用户菜单,由文件页自动触发) -- **包大小**:约 630MB(含 LibreOffice + 各类转码工具) -- **运行形态**:独立 Docker 容器,对接主程序 nginx 上的 `/fileview/` 反代 -- **渲染方式**:服务器侧用 LibreOffice 把 docx/pptx 转 PDF 再推到浏览器;纯 PDF 直接 PDF.js 渲染;图片格式化预览 -- **跨设备**:桌面端、移动端均能预览 - -## 安装与启用 -1. 在应用市场(管理员入口)搜索「FileView」或「文件预览」 -2. 点击安装,等待镜像下载(约 630MB,按「安装日志」判断进度) -3. 安装完成后插件自动启用,所有未被主程序原生预览覆盖的文件点击后会自动用 fileview 渲染 - -## 卸载影响 -- 卸载后点击 PDF/Office 等文件会失败(路径仍指向 fileview 但容器不存在) -- 重装后自动恢复 - -## 与 OnlyOffice 共存 -- 同时装了 office 和 fileview:Word/Excel/PPT 优先走 OnlyOffice 编辑器(可编辑) -- 只装 fileview:Word/Excel/PPT 只能用 fileview 只读预览 -- 只装 office:fileview 才能预览的格式(如 PDF、Visio、CAD 等)无法在线预览 - -## 相关 -- 是什么:[[fileview.concept]] -- 支持的文件类型:[[fileview.supported.concept]] diff --git a/resources/ai-kb/zh/concept/fileview/supported.md b/resources/ai-kb/zh/concept/fileview/supported.md deleted file mode 100644 index 4a5c50dbc..000000000 --- a/resources/ai-kb/zh/concept/fileview/supported.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -id: fileview.supported.concept -title: fileview 支持的文件类型 -type: concept -feature: fileview -scope: end-user -locale: zh -aliases: - - fileview 支持什么格式 - - 哪些文件能在线预览 - - DooTask 预览的格式 - - 能不能预览 PDF - - 能不能预览 CAD - - 预览支持的扩展名 -related_tools: [] -related_pages: [file] -prerequisites: - - 应用市场已安装 fileview 插件 -negative: - - 加密/密码保护的 Office 文档预览失败(fileview 解不开) - - 超大文件(>100MB)预览很慢甚至超时 - - 不能在预览页里编辑/批注 -last_verified: v1.7.90 ---- - -# fileview 支持的文件类型 - -## 定义 -fileview 插件基于开源 kkfileview 引擎,可在线预览 30+ 种文件格式。主程序对扩展名做粗分流:图片、代码文本、视频音频走主程序自带能力;其余几乎全部交给 fileview。 - -## 主要支持的格式分类 -- **PDF**:pdf -- **Word 系**:doc, docx, dot, dotx, odt, ott, rtf -- **Excel 系**:xls, xlsx, xlsm, xlt, xltx, ods, ots, csv, tsv -- **PowerPoint 系**:ppt, pptx, pps, ppsx, pot, potx, odp, otp -- **WPS 系**:wps, et, dps(与 Office 同一套转码路径) -- **OpenDocument 全系**:odt/ods/odp/ott/ots/otp 等 -- **流程图 / 矢量**:vsd, vsdx(Visio),drawio 文件由 drawio 插件直接打开不走 fileview -- **CAD**:dwg -- **3D**:obj, stl -- **电子书**:epub, mobi -- **压缩包**:zip, rar, 7z, tar, gz(展开目录树预览) -- **邮件/日历**:eml, ics -- **代码(大文件兜底)**:当代码文本 > 2MB 主程序不再内嵌渲染,可由 fileview 兜底 - -## 主程序不走 fileview 的格式 -- 图片:jpg, jpeg, webp, png, gif, bmp(主程序内置渲染) -- 视频/音频:mp3, wav, mp4, flv 等(内置播放器) -- 代码/文本 ≤ 2MB(内嵌 AceEditor) -- 思维导图(mind)→ minder 插件 -- 流程图(drawio)→ drawio 插件 -- Word/Excel/PPT 若装了 OnlyOffice → 走 OnlyOffice 编辑器(可编辑) - -## 不支持 -- 加密 / 密码保护的 Office 文档无法预览 -- 不保证体积过大(数百 MB 起)的文件能正常预览(可能超时或加载缓慢) -- 不能在预览页里编辑(fileview 只读) - -## 相关 -- 插件元信息:[[fileview.plugin.concept]] -- 是什么:[[fileview.concept]] diff --git a/resources/ai-kb/zh/concept/kpi/overview.md b/resources/ai-kb/zh/concept/kpi/overview.md deleted file mode 100644 index cec43b913..000000000 --- a/resources/ai-kb/zh/concept/kpi/overview.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: kpi.concept -title: KPI 绩效考核是什么 -type: concept -feature: kpi -scope: end-user -locale: zh -aliases: - - KPI - - 绩效 - - 绩效考核 - - 绩效管理 - - 员工评估 - - Key Performance Indicator -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 kpi 插件 -negative: - - KPI 不是 OKR,与 OKR 在 DooTask 中是两个独立插件 - - KPI 不是主程序内置功能,未装插件时不可用 - - KPI 用户角色与 DooTask 系统角色不完全等价(详见正文) -last_verified: v1.7.90 ---- - -# KPI 绩效考核是什么 - -## 定义 -KPI(Key Performance Indicator,关键绩效指标)在 DooTask 中由独立插件 `community_kuaifan_kpi` 提供,是面向企业和组织的现代化绩效考核管理系统。它支持创建考核任务、按模板录入指标评分、邀请同事评分、HR 审核与异议处理,让多角色协作完成员工绩效评估。 - -## 在 DooTask 中的形态 -- 通过应用市场安装的社区插件(基于 Next.js + Go) -- 与 DooTask 用户体系打通:用户信息、部门信息自动同步 -- 与 DooTask 主程序作为应用插件集成,菜单挂在「应用」下 - -## 用户角色 -KPI 内部有自己独立的三级角色(与 DooTask 系统角色不完全等价): - -- **employee(普通员工)**:查看 / 填写自己的考核、提交异议、参与邀请评分 -- **manager(部门主管)**:员工的全部能力 + 评估下属、导出数据 -- **hr(HR 管理员)**:完整系统权限,管理部门 / 员工 / 模板 / 规则 / 异议 - -## 关键能力 -- **考核管理**:创建、填写、管理绩效考核 -- **邀请评分**:多角度 360 度评价(详见 [[kpi.create.howto]]) -- **异议处理**:员工可申诉,HR 审核调整得分 -- **统计分析**:数据图表与报表,支持 Excel 导出 -- **KPI 模板**:HR 维护通用模板供考核复用 - -## KPI 与 OKR 的区别 -- **KPI**:直接考核指标,与绩效 / 薪酬绑定,偏重「不能丢分」 -- **OKR**:目标管理工具,鼓励挑战性目标,与考核解耦 - -## 不支持 -- 不直接对接 DooTask 任务完成情况自动算绩效 -- 不支持脱离 DooTask 单独登录使用 - -## 相关 -- 插件元信息:[[kpi.plugin.concept]] -- 入口在哪:[[kpi.entry.menu-map]] -- 创建考核:[[kpi.create.howto]] -- 评分机制:[[kpi.scoring.concept]] diff --git a/resources/ai-kb/zh/concept/kpi/plugin.md b/resources/ai-kb/zh/concept/kpi/plugin.md deleted file mode 100644 index bdf7bd0fe..000000000 --- a/resources/ai-kb/zh/concept/kpi/plugin.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: kpi.plugin.concept -title: KPI 插件元信息 -type: concept -feature: kpi -scope: end-user -locale: zh -aliases: - - KPI 插件 - - kpi 怎么装 - - 绩效插件 - - 绩效考核插件 - - community_kuaifan_kpi -related_tools: [] -related_pages: [application] -prerequisites: [] -negative: - - KPI 不是主程序内置功能,未装插件时入口不会出现 - - 插件升级不通过 git pull,需要在应用市场更新 - - 主程序版本必须高于 1.4.67,否则插件无法安装 -last_verified: v1.7.90 ---- - -# KPI 插件元信息 - -## 定义 -KPI 绩效考核在 DooTask 中由社区插件提供,应用市场 app id 为 `community_kuaifan_kpi`(当前版本 0.1.9),feature 短名 `kpi`。主程序不内置任何 KPI 代码,所有绩效逻辑都跑在独立 Docker 容器中,作为应用插件挂载到 DooTask 界面。 - -## 关键属性 -- **作者**:DooTask 官方 -- **要求**:主程序版本 > 1.4.67(依赖新 API 能力) -- **运行形态**:单个 Docker 容器(镜像 `dootask/kpi:`) -- **数据存储**:独立 SQLite 数据库,本地卷 `kpi_data` 挂载到 `/web/db`,不入主库 -- **菜单注入**:安装后在「应用中心」注册「绩效考核」入口 -- **重启策略**:`unless-stopped`,主机重启容器自动恢复 - -## 用户生命周期钩子 -插件订阅了 DooTask 的用户事件,自动维护 KPI 内部用户: - -- `user_onboard`:DooTask 创建用户时,自动在 KPI 内建号 - - 部门不存在则自动创建该部门 - - DooTask 管理员自动设为 HR 角色 - - 部门负责人自动设为 manager 角色 - - 其余设为 employee 角色 -- `user_offboard`:DooTask 删除用户时,KPI 同步清理 - -## 信息同步规则 -用户登录 KPI 时: - -- 自动更新姓名、职位 -- **角色保持不变**(不会因为 DooTask 角色变化而重新分配 KPI 角色) - -## 不支持 -- 不能离线安装到不联网的环境(需访问应用市场镜像源) -- 不能在主程序 < 1.4.67 的环境上安装 - -## 相关 -- 是什么:[[kpi.concept]] -- 入口在哪:[[kpi.entry.menu-map]] -- 评分机制:[[kpi.scoring.concept]] diff --git a/resources/ai-kb/zh/concept/kpi/scoring.md b/resources/ai-kb/zh/concept/kpi/scoring.md deleted file mode 100644 index 085db839c..000000000 --- a/resources/ai-kb/zh/concept/kpi/scoring.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -id: kpi.scoring.concept -title: KPI 评分机制与权重 -type: concept -feature: kpi -scope: end-user -locale: zh -aliases: - - KPI 怎么算分 - - 绩效权重 - - 自评权重 - - 上级评分 - - 邀请评分权重 - - 绩效规则 - - 最终得分怎么来的 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 kpi 插件 -negative: - - 仅 HR 管理员可以配置绩效规则 - - 权重百分比合计必须为 100%,否则保存不通过 - - 关闭绩效规则开关后,系统回退到默认评分方式 - - 配置修改后立即生效,仅影响后续新发起的考核 -last_verified: v1.7.90 ---- - -# KPI 评分机制与权重 - -## 定义 -KPI 插件的「绩效规则」用于配置不同评分来源在最终得分中的权重比例。系统会根据规则把自评、上级评分、邀请评分按比例加权,自动算出员工的最终绩效得分。 - -## 评分来源 -一次考核可能涉及最多三种评分来源: - -- **自评**:员工对照模板给自己打分 -- **上级评分**:直属主管打分 -- **邀请评分**:HR 邀请的第三方人员打分(可选环节,仅在 HR 发起邀请后生效) - -## 配置场景 -绩效规则按是否有邀请评分分为两套权重配置: - -- **无邀请评分场景** - - 自评权重 + 上级评分权重 = 100% -- **有邀请评分场景** - - 自评权重 + 邀请评分权重 + 上级评分权重 = 100% - -## 配置流程 -1. HR 进入 KPI 的「绩效规则」配置页 -2. 打开绩效规则开关,规则生效 -3. 按公司制度分别设置两种场景下各来源的权重百分比 -4. 保存后立即生效,影响后续新发起的考核 -5. 若关闭开关,系统使用默认评分方式 - -## HR 审核环节 -- 主管评估、邀请评分完成后,HR 在「审核」环节查看汇总结果 -- 系统按绩效规则自动算出最终得分,HR 可手动调整 -- 员工在「待确认」状态查看最终分;有异议可申诉,HR 审核后再调分 - -## 异议处理对得分的影响 -- 员工提交异议后考核状态变为「异议处理中」 -- HR 可填写处理原因并调整最终得分 -- 处理后员工需重新确认;如仍有异议可再次提交(每轮异议都需 HR 重新处理) - -## 不支持 -- 不支持非 HR 角色配置绩效规则 -- 不支持单条考核临时改权重(只能改全局规则) -- 不支持权重为负值或合计不等于 100% - -## 相关 -- KPI 是什么:[[kpi.concept]] -- 创建考核:[[kpi.create.howto]] -- 入口在哪:[[kpi.entry.menu-map]] diff --git a/resources/ai-kb/zh/concept/memos/overview.md b/resources/ai-kb/zh/concept/memos/overview.md deleted file mode 100644 index aa861cdad..000000000 --- a/resources/ai-kb/zh/concept/memos/overview.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: memos.concept -title: Memos 是什么 -type: concept -feature: memos -scope: end-user -locale: zh -aliases: - - Memos - - 速记 - - 笔记应用 - - 个人笔记 - - 想法记录 - - 碎片笔记 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 memos 插件 -negative: - - Memos 不是主程序内置功能,未装插件时不可用 - - Memos 默认走 SQLite 本地存储,不接 DooTask 主库 - - 不支持游客 / 未登录访问 -last_verified: v1.7.90 ---- - -# Memos 是什么 - -## 定义 -Memos(笔记 / 速记)是一款隐私优先、轻量级的开源笔记服务(开源项目 [usememos.com](https://www.usememos.com)),在 DooTask 中以独立插件形式集成,主要用来快速记录想法、待办、链接、代码片段等碎片化内容。每条记录就是一条「memo」,时间倒序排列在时间线上。 - -## 在 DooTask 中的形态 -- 通过应用市场安装的社区插件,与主程序同源、共用 TLS -- 走主程序 nginx 子路径 `/apps/memos/` 反向代理,用户无需额外登录 -- 数据自托管,使用 SQLite,存放于应用目录 `data/memos` - -## 关键特性 -- **轻量速记**:以时间线方式记录碎片想法,类似 Twitter/微博风格 -- **隐私优先**:数据完全自托管,不上传第三方 -- **单点登录**:DooTask 登录态自动同步,免输密码 -- **标签 / 分类**:支持 `#标签` 语法分类整理(详见 [[memos.tag.concept]]) - -## 适用场景 -- 工作日志、灵感速记 -- 临时收藏链接 / 代码片段 -- 个人学习笔记 / 读书摘录 -- 团队不强协作场景下的轻量笔记 - -## 不支持 -- 不替代正式文档(如需协作文档请用项目内文档) -- Memos 不直接与任务 / 项目数据互通 - -## 相关 -- 插件元信息:[[memos.plugin.concept]] -- 入口在哪:[[memos.entry.menu-map]] -- 怎么写一条:[[memos.create.howto]] diff --git a/resources/ai-kb/zh/concept/memos/plugin.md b/resources/ai-kb/zh/concept/memos/plugin.md deleted file mode 100644 index 6b9ba9ad7..000000000 --- a/resources/ai-kb/zh/concept/memos/plugin.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -id: memos.plugin.concept -title: Memos 插件元信息 -type: concept -feature: memos -scope: end-user -locale: zh -aliases: - - Memos 插件 - - memos 怎么装 - - memos 应用市场 - - 笔记插件 - - community_kuaifan_memos -related_tools: [] -related_pages: [application] -prerequisites: [] -negative: - - Memos 不是主程序内置功能,未装插件时入口不会出现 - - 插件升级不通过 git pull,需要在应用市场更新 - - 插件不能离线安装到不联网的环境 -last_verified: v1.7.90 ---- - -# Memos 插件元信息 - -## 定义 -Memos 在 DooTask 中由社区插件提供,应用市场 app id 为 `community_kuaifan_memos`(当前版本 0.29.0),feature 短名 `memos`。主程序不内置任何 Memos 代码,所有笔记逻辑都跑在独立容器中,通过 nginx 反向代理 `/apps/memos/` 子路径挂载到 DooTask 界面。 - -## 关键属性 -- **作者**:DooTask 官方(基于开源项目 usememos/memos) -- **运行形态**:两个 Docker 容器 - - `memos-server`:自构建 Memos 镜像(`dootask/memos-server:0.29.0`),前端打补丁支持子路径 - - `memos-proxy`:鉴权代理(`dootask/memos:`),校验 DooTask 用户令牌、自动建号 / 免密登录 -- **数据存储**:SQLite,本地卷 `memos-data` 挂载到 `/var/opt/memos`,不入主库 -- **菜单注入**:安装后在「应用中心」注册「Memos 笔记」入口 -- **会话有效期**:访问令牌过期后通过 `memos_refresh` cookie 自动续期,最长 30 天 - -## 安装配置项 -- **管理员**:在安装界面选择若干 DooTask 用户作为 Memos 管理员,其余用户以普通成员身份登录 -- **内部密钥**:用于派生账号密码与签名会话,安装后请勿修改 - -## 单点登录机制 -- 用户打开插件时,代理自动在 Memos 内建号、用确定性密码登录 -- 屏蔽 Memos 原生的直接登录与自助注册接口(防止绕过 DooTask 鉴权) - -## 不支持 -- 不能用 Memos 原生账号密码登录(仅支持 DooTask SSO) -- 不能选择不安装 `memos-proxy`(鉴权必经路径) - -## 相关 -- 是什么:[[memos.concept]] -- 入口在哪:[[memos.entry.menu-map]] diff --git a/resources/ai-kb/zh/concept/memos/tag.md b/resources/ai-kb/zh/concept/memos/tag.md deleted file mode 100644 index cebb4678e..000000000 --- a/resources/ai-kb/zh/concept/memos/tag.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: memos.tag.concept -title: Memos 标签与分类 -type: concept -feature: memos -scope: end-user -locale: zh -aliases: - - Memos 标签 - - memos 怎么分类 - - 笔记标签 - - 笔记分类 - - 标签筛选 - - "#标签" -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 memos 插件 -negative: - - 标签是每个用户私有的(不与其他 DooTask 用户共用) - - 标签不与 DooTask 主程序的任务标签互通 -last_verified: v1.7.90 ---- - -# Memos 标签与分类 - -## 定义 -Memos 没有独立的「分类」字段,靠 `#标签` 语法在 memo 正文中内联标记。任何写在 `#xxx` 形式的词都会被识别为标签,自动聚合到侧边栏的标签列表,便于后续筛选检索。 - -## 关键属性 -- **写法**:在内容里直接写 `#项目A` `#读书笔记`,可一条 memo 多个标签 -- **嵌套**:支持斜杠分层,例如 `#工作/会议纪要`,侧栏会折叠展示 -- **私有**:每个 Memos 账号的标签彼此隔离(每个 DooTask 用户在 Memos 内是独立账号) -- **聚合方式**:Memos 自动扫描所有 memo 正文,无需手动维护「标签库」 - -## 使用方式 -- **添加**:写 memo 时在内容里直接打 `#标签名`,保存即生效 -- **筛选**:点击侧栏中对应标签,时间线只显示带该标签的 memo -- **删除**:把所有 memo 里这个 `#标签` 的字符删掉,标签自动消失(无独立删除按钮) - -## 与可见性的关系 -- 标签本身只是文本标记,不影响 memo 的可见性(私有 / 工作区 / 公开) -- 想限定某类笔记只自己可见,应改对应 memo 的可见性,而不是靠标签 - -## 适用场景 -- 按项目 / 主题 / 周期分组浏览 -- 给读书摘录 / 灵感速记打主题 -- 搭配搜索定位历史笔记 - -## 不支持 -- 不能改某个标签的名字(要重命名只能逐条编辑替换原文) -- 不能给标签设颜色或图标 -- 不能从 DooTask 主程序任务的标签自动同步过来 - -## 相关 -- Memos 是什么:[[memos.concept]] -- 写一条 memo:[[memos.create.howto]] diff --git a/resources/ai-kb/zh/concept/micro-app/list.md b/resources/ai-kb/zh/concept/micro-app/list.md index 723da3f7c..a39b99640 100644 --- a/resources/ai-kb/zh/concept/micro-app/list.md +++ b/resources/ai-kb/zh/concept/micro-app/list.md @@ -27,14 +27,14 @@ last_verified: v1.7.90 DooTask 应用市场提供一组官方与社区维护的微应用。下面列的是较常见的几类,实际能在应用中心看到的微应用取决于本实例已安装了哪些,参考服务器 `docker/appstore/apps/` 目录即可知。 ## 常见微应用 -- **OKR**(id `okr`)— 目标 + 关键结果管理,参考 [[okr.concept]] -- **审批中心**(id `approve`)— 流程审批,参考 [[approve.concept]] +- **OKR**(id `okr`)— 目标 + 关键结果管理 +- **审批中心**(id `approve`)— 流程审批 - **思维导图 Minder**(id `minder`)— 文件类型 `.km` - **流程图 Drawio**(id `drawio`)— 文件类型 `.drawio` - **OnlyOffice**(id `office`)— Word / Excel / PPT 在线编辑 - **文件预览 fileview**(id `fileview`)— PDF / 图片 / 文档预览渲染 - **人脸识别签到**(id `face`)— 配合签到使用 -- **AI 助手**(id `ai`)— 见 [[ai-assistant.entry.howto]] +- **AI 助手**(id `ai`)— 浮窗式智能助手 - **Memos 笔记**(社区 `community_kuaifan_memos`)— 个人记事本 - **KPI**(社区 `community_kuaifan_kpi`)— 绩效考核 - **Manticore 搜索**(id `manticore`)— 全文搜索引擎 diff --git a/resources/ai-kb/zh/concept/minder/collaboration.md b/resources/ai-kb/zh/concept/minder/collaboration.md deleted file mode 100644 index c49016dd4..000000000 --- a/resources/ai-kb/zh/concept/minder/collaboration.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -id: minder.collaboration.concept -title: 思维导图是否支持多人协作编辑 -type: concept -feature: minder -scope: end-user -locale: zh -aliases: - - 思维导图协作 - - 思维导图多人编辑 - - 脑图共享编辑 - - 思维导图能不能一起改 - - minder 实时同步 -related_tools: [] -related_pages: [file] -prerequisites: - - 应用市场已安装 minder 插件 -negative: - - 同一张 mind 文件同一时间不支持多人实时同步编辑,与 OnlyOffice 不同 - - 多人同时打开并保存可能导致后保存方覆盖前保存方 - - 不支持节点级别的细粒度评论或讨论 -last_verified: v1.7.90 ---- - -# 思维导图是否支持多人协作编辑 - -## 定义 -DooTask 思维导图(minder 插件)以**单人编辑 + 多人查看**模式运作。文件内容存到 DooTask 文件系统,所有有权限的成员都能打开看到当前最新版本,但同一时间多人编辑保存会出现「后写覆盖前写」。 - -## 关键属性 -- **多人可见**:所有对文件有读权限的成员都能打开预览 -- **保存机制**:编辑器内修改后由前端发起保存请求,整张图作为一个 JSON 文件覆盖式保存 -- **没有实时同步**:与 OnlyOffice([[office.collaboration.concept]])不同,思维导图不通过 WebSocket 推送其他人的实时改动 -- **冲突表现**:A、B 同时打开编辑,A 先保存,B 后保存——最终内容只剩 B 的版本,A 的改动丢失 -- **历史版本**:可借助 DooTask 文件版本历史回滚到之前的快照 - -## 推荐协作模式 -- 同一时间由一人改,其他人通过群聊/讨论沟通后再轮换编辑 -- 大型导图按子分支拆成多张文件,分人维护 -- 改完后通过文件「发送」/「链接」/「共享」分享给团队 -- 误覆盖可在文件详情 →「历史版本」中恢复 - -## 与其他场景对比 -- **drawio 流程图**:同样是单人编辑,多人同时编辑也会出现覆盖 -- **OnlyOffice Word/Excel/PPT**:自带多人实时协作,多端同时编辑会合并 -- **DooTask 在线文档(document)**:基于富文本编辑器,亦不支持多人实时 - -## 相关 -- 是什么:[[minder.concept]] -- OnlyOffice 协作能力对比:[[office.collaboration.concept]] diff --git a/resources/ai-kb/zh/concept/minder/overview.md b/resources/ai-kb/zh/concept/minder/overview.md deleted file mode 100644 index 261942c8b..000000000 --- a/resources/ai-kb/zh/concept/minder/overview.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -id: minder.concept -title: 思维导图(minder)是什么 -type: concept -feature: minder -scope: end-user -locale: zh -aliases: - - 思维导图 - - 脑图 - - mind map - - minder 是什么 - - DooTask 思维导图 -related_tools: [] -related_pages: [file] -prerequisites: - - 应用市场已安装 minder 插件 -negative: - - 思维导图功能不是主程序内置,未安装 minder 插件无法新建 `mind` 类型文件 - - 不能在思维导图节点上直接附加 DooTask 任务/评论(节点只是图形元素) - - 节点数量过多(数千节点)可能影响渲染性能 -last_verified: v1.7.90 ---- - -# 思维导图(minder)是什么 - -## 定义 -思维导图是 DooTask 文件系统中的一种文件类型(`type=mind`),用于以放射状结构表达想法、计划、知识结构。它由独立的 minder 插件提供编辑器,主程序通过 iframe 嵌入插件页面,文件内容存到 DooTask 自己的文件库里。 - -## 关键属性 -- **文件类型**:`mind`(区别于 `document` 文本、`drawio` 图表、`word/excel/ppt`) -- **存储位置**:与其他文件一样存在 DooTask 文件系统(个人文件 / 项目文件 / 共享) -- **编辑器**:嵌入的 KityMinder 风格编辑器,支持多种结构(默认、组织结构、文件树、右展开、鱼骨图、天盘)和多套主题 -- **操作支持**:拖拽、缩放、节点折叠/展开、键盘快捷键、导出图片 -- **历史版本**:随 DooTask 文件历史一同保存 - -## 与其他文件类型的关系 -- **vs drawio**:drawio 适合流程图/UML/网络拓扑等任意图形;思维导图专注放射状层级结构,节点编辑更轻 -- **vs 文档(document)**:文档是富文本/Markdown;思维导图是图形化结构 - -## 相关 -- 插件元信息:[[minder.plugin.concept]] -- 创建一张思维导图:[[minder.create.howto]] -- 入口在哪:[[minder.entry.menu-map]] -- 是否支持协作编辑:[[minder.collaboration.concept]] diff --git a/resources/ai-kb/zh/concept/minder/plugin.md b/resources/ai-kb/zh/concept/minder/plugin.md deleted file mode 100644 index 581a73d1a..000000000 --- a/resources/ai-kb/zh/concept/minder/plugin.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: minder.plugin.concept -title: minder 插件元信息 -type: concept -feature: minder -scope: admin -locale: zh -aliases: - - minder 插件 - - 思维导图插件 - - 思维导图怎么安装 - - 安装 minder - - minder 插件版本 -related_tools: [] -related_pages: [application] -prerequisites: [] -negative: - - 主程序不内置思维导图编辑器,未装插件时新建文件菜单不会显示「思维导图」 - - 插件升级不通过 git pull,需要在应用市场更新 - - 不能离线安装到不联网的环境(需访问应用市场镜像源) -last_verified: v1.7.90 ---- - -# minder 插件元信息 - -## 定义 -思维导图能力由独立插件 `minder` 提供(应用市场 app id 为 `minder`,当前主版本 0.1.3)。主程序通过 iframe 内嵌插件提供的编辑器页面,文件内容仍保存在 DooTask 主库;卸载插件后已有 `mind` 文件无法继续编辑/预览,但文件本身不会被删除。 - -## 关键属性 -- **作者**:DooTask 官方 -- **分类**:微应用(在「应用中心」中列出,作为微应用菜单项;不在管理员应用区) -- **包大小**:约 20MB(安装较慢,请通过应用市场的「安装日志」查看进度) -- **运行形态**:随主程序部署的静态资源 + iframe 嵌入,无独立后端进程 -- **数据存储**:思维导图内容存到 DooTask 主程序文件表(`type=mind`),不在插件容器单独存 -- **触发场景**:用户在文件页「新建 → 思维导图」时由主程序加载插件 iframe - -## 安装与启用 -1. 在应用市场(管理员入口)搜索「Minder」或「思维导图」 -2. 点击安装,等待资源加载(约 20MB) -3. 安装完成后插件自动启用,文件新建菜单立即出现「思维导图」选项 - -## 卸载影响 -- 卸载后菜单消失,原有 `mind` 文件保留在文件库中但无法打开 -- 重新安装后旧文件继续可用 - -## 相关 -- 是什么:[[minder.concept]] -- 入口在哪:[[minder.entry.menu-map]] diff --git a/resources/ai-kb/zh/concept/office/collaboration.md b/resources/ai-kb/zh/concept/office/collaboration.md deleted file mode 100644 index 88f3ee1ab..000000000 --- a/resources/ai-kb/zh/concept/office/collaboration.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: office.collaboration.concept -title: OnlyOffice 多人协作编辑 -type: concept -feature: office -scope: end-user -locale: zh -aliases: - - office 协作 - - Word 一起编辑 - - 多人同时编辑文档 - - 在线协作 Excel - - 协同编辑 PPT - - OnlyOffice 协作 -related_tools: [] -related_pages: [file] -prerequisites: - - 应用市场已安装 office(OnlyOffice)插件 - - 协作各方对该文件均有「编辑」权限 -negative: - - 与 minder([[minder.collaboration.concept]])和 drawio 不同,OnlyOffice 才提供真正的多人实时编辑 - - 同一文件大规模并发(数十人)依赖 Document Server 资源,组织内建议 ≤ 10 人同时改 - - 离线编辑不支持,没有「断网继续编辑、上线合并」的模式 -last_verified: v1.7.90 ---- - -# OnlyOffice 多人协作编辑 - -## 定义 -DooTask 在线 Word/Excel/PPT(office 插件)原生支持**多人实时协作编辑**。多人同时打开同一文件时,OnlyOffice Document Server 通过 WebSocket 推送他人光标和实时改动,最终内容由 Document Server 合并后回写到 DooTask 文件库,不存在「后保存覆盖前保存」的问题。 - -## 关键属性 -- **会话识别**:主程序用 `documentKey` 标识同一份文档的协作会话,所有人加入同一 key 即进入同一编辑会话 -- **实时光标**:能看到其他人当前在哪个段落/单元格,配色按用户区分 -- **冲突处理**:编辑级别合并(不是文件级覆盖),单元格/字符级冲突由 OnlyOffice 自动协商 -- **保存触发**:所有人都离开编辑器后由 Document Server 把最终版本写回 DooTask 文件表 -- **历史版本**:随 DooTask 文件版本保留,可回溯 - -## 编辑模式 -OnlyOffice 提供两种协作模式: -- **快速模式**:所有改动实时显示给所有人(默认) -- **严格模式**:自己的改动暂存,需手动点「保存」才同步给他人——适合需要审稿的场景,在 OnlyOffice 编辑器内切换 - -## 权限组合 -- A、B 同为编辑权限:均可实时改 -- A 编辑、B 只读:B 仅看,无法输入 -- A 关闭、B 仍开着:B 单人继续,A 再打开时进入同一会话 - -## 与其他文件类型的对比 -- **vs DooTask 内置 document**:document 是富文本/Markdown 编辑器,**不支持**多人实时 -- **vs minder 思维导图**:思维导图是单人编辑,多人同时保存会覆盖 -- **vs drawio 流程图**:同样是单人编辑,多人同时保存会覆盖 - -## 相关 -- 是什么:[[office.concept]] -- 插件元信息:[[office.plugin.concept]] diff --git a/resources/ai-kb/zh/concept/office/overview.md b/resources/ai-kb/zh/concept/office/overview.md deleted file mode 100644 index cb29aea39..000000000 --- a/resources/ai-kb/zh/concept/office/overview.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: office.concept -title: 在线文档(OnlyOffice)是什么 -type: concept -feature: office -scope: end-user -locale: zh -aliases: - - 在线文档 - - 在线 Word - - 在线 Excel - - 在线 PPT - - OnlyOffice - - office 编辑 - - 怎么在线编辑 -related_tools: [] -related_pages: [file] -prerequisites: - - 应用市场已安装 office(OnlyOffice)插件 -negative: - - 在线编辑能力不是主程序内置,未装 OnlyOffice 插件时打开 Word/Excel/PPT 只能调 fileview 预览(详见 [[fileview.concept]]),不能编辑 - - 单文档大小过大(数十 MB 起)打开很慢,建议拆分 - - 不支持把 docx 直接转成 DooTask 自带的 `document` 文件类型 -last_verified: v1.7.90 ---- - -# 在线文档(OnlyOffice)是什么 - -## 定义 -DooTask 通过 OnlyOffice 插件提供 Word/Excel/PowerPoint 文件的**在线编辑与多人实时协作**。文件存在 DooTask 文件系统(文件类型分别为 `word`/`excel`/`ppt`),编辑器以 iframe 形式嵌入 OnlyOffice Document Server 提供的页面,多人同时打开同一文件时能看到他人光标和实时改动。 - -## 关键属性 -- **文件类型**:`word`(doc/docx/dot/dotx/odt/ott/rtf)、`excel`(xls/xlsx/xlsm/xlt/xltx/ods/ots/csv/tsv)、`ppt`(ppt/pptx/pps/ppsx/pot/potx/odp/otp) -- **存储位置**:DooTask 文件系统(个人文件 / 项目文件 / 共享) -- **编辑能力**:直接在浏览器编辑文档,与桌面端 Office 体验接近 -- **实时协作**:多人同时打开会自动建立协作会话,详见 [[office.collaboration.concept]] -- **历史版本**:随 DooTask 文件历史一同保存 - -## 与其他文件类型的关系 -- **vs document(Markdown/富文本)**:DooTask 自带的 `document` 文件是轻量富文本,无法编辑真正的 docx 二进制 -- **vs fileview 预览**:fileview 提供只读的多格式文件预览(包括 office 文件),不能编辑 -- **vs minder / drawio**:那些是图形文件,无法用 OnlyOffice 打开 - -## 相关 -- 插件元信息:[[office.plugin.concept]] -- 创建在线文档:[[office.create.howto]] -- 多人协作能力:[[office.collaboration.concept]] -- 入口在哪:[[office.entry.menu-map]] diff --git a/resources/ai-kb/zh/concept/office/plugin.md b/resources/ai-kb/zh/concept/office/plugin.md deleted file mode 100644 index cfcaf18b7..000000000 --- a/resources/ai-kb/zh/concept/office/plugin.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: office.plugin.concept -title: OnlyOffice 插件元信息 -type: concept -feature: office -scope: admin -locale: zh -aliases: - - OnlyOffice 插件 - - office 插件 - - 安装 OnlyOffice - - 安装在线文档 - - onlyoffice 版本 -related_tools: [] -related_pages: [application] -prerequisites: [] -negative: - - 主程序不内置 docx/xlsx/pptx 在线编辑,未装插件时双击 Word/Excel/PPT 只能调 fileview 预览 - - 插件体积约 1.3GB,下载较慢,需要稳定网络与充足磁盘 - - 不能离线安装到不联网的环境(需访问应用市场镜像源) -last_verified: v1.7.90 ---- - -# OnlyOffice 插件元信息 - -## 定义 -在线 Word/Excel/PPT 编辑由 `office` 插件提供(应用市场 app id 为 `office`,包名 OnlyOffice,当前主版本 9.4.0)。插件包含 OnlyOffice Document Server 完整容器;主程序通过 iframe 嵌入 Document Server 的编辑器页面,借助 OnlyOffice 内置 WebSocket 实现多人实时协作。 - -## 关键属性 -- **作者**:社区维护(Community),上游 https://www.onlyoffice.com/ -- **分类**:微应用(不在管理员应用区) -- **包大小**:约 1.3GB(含 Document Server,下载慢,按「安装日志」判断进度) -- **运行形态**:独立 Docker 容器(OnlyOffice Document Server) -- **数据存储**:编辑结果由 OnlyOffice 回写到 DooTask 文件表,文件本体存到主程序的文件系统,不在 Document Server 长期持久化 -- **协议**:内部通过 JWT 令牌与 OnlyOffice 通信,主程序签发 documentKey 标识文件版本 - -## 安装与启用 -1. 在应用市场(管理员入口)搜索「OnlyOffice」或「在线文档」 -2. 点击安装,等待镜像下载(约 1.3GB,请通过「安装日志」查看进度) -3. 安装完成后插件自动启用,文件新建菜单立即出现「Word / Excel / PPT」选项 -4. 上传/打开已有 docx/xlsx/pptx 文件即可在线编辑 - -## 卸载影响 -- 卸载后文件库中的 Word/Excel/PPT 文件保留,但无法在线编辑,回退到 fileview 预览(若未装 fileview 则无法预览) -- 重装后所有文件自动恢复在线编辑能力 - -## 已知限制 -- 部署在公网时建议为 Document Server 配置 HTTPS,否则浏览器可能拦截 WebSocket -- 同一文件大量并发协作(数十人)需要更强的 Document Server 资源 - -## 相关 -- 是什么:[[office.concept]] -- 多人协作机制:[[office.collaboration.concept]] -- 入口在哪:[[office.entry.menu-map]] diff --git a/resources/ai-kb/zh/concept/okr/cycle.md b/resources/ai-kb/zh/concept/okr/cycle.md deleted file mode 100644 index 979476a17..000000000 --- a/resources/ai-kb/zh/concept/okr/cycle.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: okr.cycle.concept -title: OKR 周期 -type: concept -feature: okr -scope: end-user -locale: zh -aliases: - - OKR 周期 - - 季度 OKR - - Q1 Q2 Q3 Q4 - - OKR 时间段 - - OKR 多久一轮 - - 年度 OKR -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 okr 插件 -negative: - - OKR 周期非全平台统一,由公司 / 团队按内部约定决定 - - 周期内频繁改 O 会降低聚焦度,不建议中途大改 -last_verified: v1.7.90 ---- - -# OKR 周期 - -## 定义 -OKR 周期是一组 OKR 的有效时间盒。每个周期内设定一批 O 与 KR,周期末统一评审打分,下一周期重新设定。常见的周期长度有季度(Q1/Q2/Q3/Q4)和年度,部分团队也会用半年或月度。 - -## 常见周期模式 -- **季度 OKR**:每 3 个月一轮,最主流,节奏适中 -- **年度 OKR**:通常承载战略级目标,跨度大、调整少 -- **半年 / 双月**:折中节奏,按业务变化速度选 -- **公司 / 团队 / 个人多层周期**:上层周期可以更长,下层周期更短 - -## 周期内三个阶段 -1. **设定期**:周期开始前 1-2 周写 O 和 KR,与上下级对齐 -2. **执行期**:周期内推进,按节奏更新进度(参见 [[okr.update-progress.howto]]) -3. **评审期**:周期末打分复盘(参见 [[okr.review.howto]]) - -## 在 DooTask OKR 插件中的体现 -- 创建 OKR 时需指定所属周期 -- 「我的 OKR」、「OKR 结果」按周期筛选展示 -- 历史周期数据保留,可回看复盘 - -## 周期切换注意 -- 周期未结束前不要急着开新周期 OKR -- 评审完成后再开下一周期,避免新旧周期混淆 -- 跨周期延续的目标可在新周期重新写一遍,不要简单复制 - -## 不支持 -- 周期粒度由团队约定,OKR 插件不强制规定季度还是年度 -- 周期内频繁改 O 内容会影响聚焦,不推荐 - -## 相关 -- OKR 总览:[[okr.concept]] -- 评审打分:[[okr.review.howto]] diff --git a/resources/ai-kb/zh/concept/okr/kr.md b/resources/ai-kb/zh/concept/okr/kr.md deleted file mode 100644 index 68d776e27..000000000 --- a/resources/ai-kb/zh/concept/okr/kr.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: okr.kr.concept -title: Key Result(KR,关键结果)是什么 -type: concept -feature: okr -scope: end-user -locale: zh -aliases: - - KR - - Key Result - - 关键结果 - - OKR 的 KR - - 怎么写 KR - - KR 怎么量化 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 okr 插件 -negative: - - KR 必须可量化(数字 / 完成度 / 状态),不能写成模糊描述 - - 单个 O 的 KR 数量建议 2-5 个,不宜过多 -last_verified: v1.7.90 ---- - -# Key Result(KR,关键结果)是什么 - -## 定义 -Key Result(缩写 KR)是 OKR 方法论中衡量 Objective 是否达成的「关键结果」。KR 必须可量化(带数字 / 完成度 / 是否完成的二值状态),周期内可以更新进度,周期末给出 0-100% 的最终得分。 - -## 关键属性 -- **可量化**:必须能用数字、百分比、完成状态来衡量 -- **结果导向**:描述达成的结果,而不是过程动作 -- **可追踪**:周期内可以定期更新当前进度 -- **挑战性**:好的 KR 让人觉得「拼一拼能到 70%」,而不是稳拿 100% - -## 好 KR 的写法 -- 量化模板:动词 + 指标 + 当前值→目标值 + 时限 -- 例:「将新用户首日留存率从 35% 提升到 50%」 -- 例:「完成 3 场行业大会的 keynote 分享」 -- 例:「上线 v2.0 并通过验收」 - -## 反例 -- 「提升满意度」——没数字,无法判断是否达成 -- 「努力做好客户支持」——描述态度而非结果 -- 「写 50 篇日报」——是过程指标,不是结果 - -## 进度与打分 -- 周期内:把 KR 的当前实际值更新进系统,得到 0-100% 进度 -- 周期末:根据最终值给 KR 打分(参见 [[okr.review.howto]]) -- 一个 O 的总分常按 KR 加权平均得出 - -## 与 O 的关系 -- KR 是 O 的衡量手段;没有 O 的 KR 是孤立指标 -- 一个 O 的所有 KR 全部达成 ≈ O 达成;多数达成可视为部分达成 - -## 相关 -- O 的概念:[[okr.objective.concept]] -- 更新进度:[[okr.update-progress.howto]] -- 周期评审:[[okr.review.howto]] diff --git a/resources/ai-kb/zh/concept/okr/objective.md b/resources/ai-kb/zh/concept/okr/objective.md deleted file mode 100644 index 9298a7c05..000000000 --- a/resources/ai-kb/zh/concept/okr/objective.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: okr.objective.concept -title: Objective(O,目标)是什么 -type: concept -feature: okr -scope: end-user -locale: zh -aliases: - - O 是什么 - - Objective - - 目标 - - OKR 的 O - - 怎么写 O - - 目标怎么定 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 okr 插件 -negative: - - O 本身不携带数字指标,量化交给 KR - - 一个 O 不建议拆出超过 5 个 KR,否则失焦 -last_verified: v1.7.90 ---- - -# Objective(O,目标)是什么 - -## 定义 -Objective(缩写 O)是 OKR 方法论中的「目标」,一句话回答「我们这个周期想达成什么」。O 是定性的、激励性的方向描述,本身不带具体数字,量化由 KR 承担。 - -## 关键属性 -- **定性**:用语言描述方向,不直接写百分比 / 数量 -- **聚焦**:单个用户或团队每周期通常只设 3-5 个 O -- **激励性**:鼓励挑战性目标,能让团队达到 60-70% 就算成功 -- **可记忆**:一句话能讲清楚,不堆砌定语 - -## 好 O 的特征 -- 短:一句话讲完 -- 有方向感:表达「往哪里走」 -- 与战略对齐:能回答「为什么做这件事」 -- 时间盒匹配周期:在一个周期(季度 / 年度)内能产出结果 - -## 反例 -- 「提升用户满意度 20%」——这是 KR,不是 O(O 不带数字) -- 「做完所有任务」——太空,没有方向 -- 「研发一个新功能」——粒度太细,更像任务 - -## 与 KR 的关系 -- 一个 O 配 2-5 个 KR(详见 [[okr.kr.concept]]) -- O 描述目的,KR 描述衡量;分别承担定性与定量 -- 没有 KR 的 O 是空话;没有 O 的 KR 是孤立指标 - -## 与团队结构的关系 -- 个人 O、团队 O、公司 O 可以分层对齐 -- 上下级对齐方式见 [[okr.align.howto]] - -## 相关 -- 怎么创建:[[okr.create.howto]] -- 周期:[[okr.cycle.concept]] diff --git a/resources/ai-kb/zh/concept/okr/overview.md b/resources/ai-kb/zh/concept/okr/overview.md deleted file mode 100644 index 7171445f9..000000000 --- a/resources/ai-kb/zh/concept/okr/overview.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: okr.concept -title: OKR 是什么 -type: concept -feature: okr -scope: end-user -locale: zh -aliases: - - OKR - - OKR 是什么 - - 目标管理 - - Objectives and Key Results - - 目标与关键结果 - - OKR 怎么用 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 okr 插件 -negative: - - OKR 不是 KPI,不直接与绩效或薪酬挂钩 - - DooTask 主程序不内置 OKR,必须装 okr 插件才能用 -last_verified: v1.7.90 ---- - -# OKR 是什么 - -## 定义 -OKR(Objectives and Key Results,目标与关键结果)是一种目标管理方法,将「想做成什么」(Objective,O)和「怎么衡量做成了」(Key Result,KR)分开。一个 O 拆成 2-5 个可量化的 KR,周期内逐项更新进度,周期末统一打分复盘。 - -## 在 DooTask 中的形态 -OKR 在 DooTask 中以独立插件形式提供(appstore 应用 id:`okr`),不是主程序内置功能。插件提供: - -- 目标设定与分解(O + KR) -- 关键成果跟踪(KR 进度) -- 进度实时更新 -- 团队协作与反馈 -- 数据可视化展示(管理员可看 OKR 结果分析) - -## 关键概念 -- **O(Objective)**:定性的目标,回答「想达成什么」,详见 [[okr.objective.concept]] -- **KR(Key Result)**:可量化的关键结果,回答「如何衡量达成」,详见 [[okr.kr.concept]] -- **周期(Cycle)**:OKR 通常按季度或年度运行,详见 [[okr.cycle.concept]] -- **对齐(Alignment)**:个人 / 团队 OKR 关联到上级 OKR,详见 [[okr.align.howto]] - -## OKR 与 KPI 的区别 -- **KPI**:直接考核指标,与绩效 / 薪酬绑定,偏重「不能丢分」 -- **OKR**:目标管理工具,鼓励挑战性目标(70% 完成度即合格),与考核解耦 - -## 适用场景 -- 团队希望聚焦少数关键目标 -- 跨部门需要对齐战略方向 -- 季度 / 年度滚动复盘 - -## 相关 -- 入口在哪:[[okr.entry.menu-map]] -- 怎么创建:[[okr.create.howto]] diff --git a/resources/ai-kb/zh/concept/okr/plugin.md b/resources/ai-kb/zh/concept/okr/plugin.md deleted file mode 100644 index 0db522dfc..000000000 --- a/resources/ai-kb/zh/concept/okr/plugin.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -id: okr.plugin.concept -title: OKR 插件元信息 -type: concept -feature: okr -scope: end-user -locale: zh -aliases: - - OKR 插件 - - OKR 是不是要装 - - okr 应用 - - OKR 装多大 - - OKR 怎么安装 -related_tools: [] -related_pages: [application] -prerequisites: [] -negative: - - OKR 不是主程序内置功能,未装插件时不可用 - - 插件升级不通过 git pull,需要在应用市场更新 -last_verified: v1.7.90 ---- - -# OKR 插件元信息 - -## 定义 -OKR 在 DooTask 中由独立插件 `okr` 提供(应用市场 app id 为 `okr`,当前主版本 0.5.8)。主程序不内置 OKR 任何代码,所有目标管理逻辑都跑在独立容器里,通过 nginx 反向代理 `/apps/okr/` 路径挂载到 DooTask 界面。 - -## 关键属性 -- **作者**:DooTask 官方 -- **包大小**:约 15MB(安装较慢,请通过安装日志查看进度) -- **运行形态**:独立 Docker 容器(镜像 `kuaifan/doookr`),通过环境变量复用主程序的数据库 -- **菜单注入**:安装后自动在「应用中心」注册两个入口(OKR 管理 + OKR 结果) -- **数据存储**:与主程序共享同一个 MySQL/MariaDB 实例(独立表前缀由插件管理) -- **要求**:主程序版本 > 1.1.66 - -## 安装与启用 -1. 应用市场搜索「OKR」或「目标管理」 -2. 点击安装,等待镜像拉取与容器启动 -3. 安装完成后插件自动启用,菜单立即出现,无需重启主程序 -4. 默认配置适配大多数场景,可在插件设置中按需调整 - -## 升级与卸载 -- 升级:应用市场看到新版本时点击「更新」 -- 卸载:应用市场对应插件 →「卸载」;卸载后菜单消失,业务数据保留在数据库中 - -## 不支持 -- 不能离线安装到不联网的环境(需访问应用市场镜像源) -- 不能选择安装到非 Docker 部署的 DooTask(插件依赖容器化) - -## 相关 -- 看不到 / 装不上:[[okr.cannot-install.faq]] -- 入口在哪:[[okr.entry.menu-map]] diff --git a/resources/ai-kb/zh/concept/okr/team.md b/resources/ai-kb/zh/concept/okr/team.md deleted file mode 100644 index e5fd2b5cc..000000000 --- a/resources/ai-kb/zh/concept/okr/team.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: okr.team.concept -title: 团队 OKR 与个人 OKR -type: concept -feature: okr -scope: end-user -locale: zh -aliases: - - 团队 OKR - - 个人 OKR - - 部门 OKR - - 公司 OKR - - OKR 层级 - - OKR 分层 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 okr 插件 -negative: - - 团队 OKR 不是个人 OKR 的简单加和 - - 个人 OKR 不必把团队 KR 完全分担,可基于职责选择关联 -last_verified: v1.7.90 ---- - -# 团队 OKR 与个人 OKR - -## 定义 -OKR 按主体层级可分为公司 OKR、团队(部门)OKR、个人 OKR。各层级各有 O 和 KR,通过「对齐」建立因果关联,形成自上而下的目标树。 - -## 三个层级的差异 -- **公司 OKR**:跨部门的战略级方向,周期通常更长(年度),数量少(3-5 个 O) -- **团队 OKR**:部门 / 小组负责的目标,承接公司 O,周期常用季度 -- **个人 OKR**:成员自己的工作目标,承接所在团队 OKR,颗粒度最细 - -## 谁负责 -- **公司 OKR**:CEO / 高管层 -- **团队 OKR**:团队 leader 牵头,团队共同认领 -- **个人 OKR**:成员本人;直属上级辅助审阅 - -## 对齐路径 -- 个人 OKR → 团队 OKR → 公司 OKR,形成可追溯链路 -- 同一团队的多个个人 OKR 可分别承接团队不同 KR -- 详细操作见 [[okr.align.howto]] - -## 团队 OKR 的特征 -- 团队 KR 数量通常 3-5 个 -- 团队 KR 由若干成员合力完成,但应明确「主负责人」 -- 团队 KR 进度通常由 leader 汇总更新 - -## 个人 OKR 的特征 -- 个人 O 不必覆盖所有日常工作,只挑这个周期最重要的方向 -- 个人 KR 与所在岗位职责高度相关 -- 数量通常 2-4 个 O - -## 不支持 -- 团队 OKR 不会自动汇总所有个人 OKR 的进度 -- 一个个人不属于两个团队时,需自行决定主对齐方向 - -## 相关 -- 对齐:[[okr.align.howto]] -- OKR 概念:[[okr.concept]] -- 周期:[[okr.cycle.concept]] diff --git a/resources/ai-kb/zh/concept/search/engine.md b/resources/ai-kb/zh/concept/search/engine.md deleted file mode 100644 index 25a80c820..000000000 --- a/resources/ai-kb/zh/concept/search/engine.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: search.engine.concept -title: 搜索引擎(Manticore 与 MySQL 回退) -type: concept -feature: search -scope: admin -locale: zh -aliases: - - 搜索引擎 - - Manticore - - 搜索插件 - - 搜索很慢 - - 为什么搜不到文件内容 - - 语义搜索 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 未安装 search 插件时无法搜索文件正文,只能按文件名模糊匹配 - - 未安装 search 插件时不支持语义 / 向量 / 混合搜索,只能精确关键词 - - 向量搜索还需要 ai 插件提供 Embedding,仅装 search 没装 ai 也走不了语义 -last_verified: v1.7.90 ---- - -# 搜索引擎(Manticore 与 MySQL 回退) - -## 定义 -DooTask 全局搜索底层有两套实现,按 `Apps::isInstalled('search')` 自动切换:装了应用市场的 search 插件就走 Manticore,没装就退回 MySQL `LIKE` 模糊查询。 - -## Manticore 搜索引擎 -Manticore Search 是独立的开源搜索引擎,作为可选插件部署在 DooTask 的 appstore 里。能力包括: -- **全文搜索**(text):倒排索引 + ICU 中文分词 -- **向量搜索**(vector):1536 维 KNN(HNSW 算法),需配合 AI 插件生成 Embedding -- **混合搜索**(hybrid,默认):同时打全文和向量分,取加权综合排名 -- **文件正文搜索**:可搜 Word / Excel / PPT / PDF / TXT / 代码文件等内部文本 - -接口参数 `search_type` 取值 `text` / `vector` / `hybrid`,默认 `hybrid`,**只在装了 Manticore 时生效**。 - -## MySQL 回退 -未装 search 插件时调 `searchByKeyword`,用 MySQL `LIKE %keyword%` 匹配。能力受限: -- 只匹配字面关键词,不理解同义词或语义 -- 不能搜文件正文(PDF / Office 内部文本搜不到) -- 大数据量下性能不如 Manticore -- 不支持 relevance 排序,按时间倒序 - -## 部署形态 -插件镜像独立维护(appstore 应用:search),技术规格: -- 向量维度:1536,兼容 OpenAI text-embedding-3-small -- 中文分词:ICU Chinese -- 推荐至少 2GB 可用内存 - -## 何时升级到 Manticore -- 需要搜索文件内容(不仅是文件名) -- 用自然语言查文件(如「财务分析文档」→「Q3 收入报表」) -- 团队消息 / 任务量大,MySQL `LIKE` 已经慢 diff --git a/resources/ai-kb/zh/concept/search/intelligent.md b/resources/ai-kb/zh/concept/search/intelligent.md deleted file mode 100644 index 3d4b00355..000000000 --- a/resources/ai-kb/zh/concept/search/intelligent.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: search.intelligent.concept -title: 智能搜索(AI 语义搜索) -type: concept -feature: search -scope: end-user -locale: zh -aliases: - - 智能搜索 - - AI 搜索 - - 语义搜索 - - 自然语言搜索 - - intelligent_search - - 向量搜索 -related_tools: [intelligent_search] -related_pages: [] -prerequisites: - - 应用商店(应用市场)已安装 search 插件(Manticore Search) - - 应用商店已安装 ai 插件(语义 / 向量搜索需用其生成 Embedding) -negative: - - 未安装 search 插件(Manticore)时回退普通 MySQL 关键词搜索,无语义能力 - - 仅装 search 没装 ai 时,向量 / 语义 / 混合搜索无法生效,只能跑全文 text - - 索引建立有延迟,刚上传 / 新建的内容可能短时间内搜不到 - - 智能搜索按权限过滤,搜不到的对象通常是无权访问 -last_verified: v1.7.90 ---- - -# 智能搜索(AI 语义搜索) - -## 定义 -智能搜索是 DooTask 基于 **Manticore Search 插件**(search 插件)的统一检索能力,支持关键词(text)/ 语义向量(vector)/ 混合(hybrid)三种搜索类型,一次可跨任务 / 项目 / 文件内容 / 联系人 / 消息 5 类对象;AI 助手通过 MCP 工具 `intelligent_search` 调用同一套底座。 - -## 底层原理 -- 走 SearchController 统一接口,优先使用 Manticore Search(需安装 search 插件) -- **未安装 search 插件时回退到普通 MySQL 关键词搜索**,仍可按字面匹配搜索,但没有语义 / 向量能力 -- 默认 `search_type = hybrid`(混合搜索):同时打全文倒排分和 KNN 向量分 -- 向量分由 ai 插件提供 Embedding(1536 维,兼容 OpenAI text-embedding-3-small) -- 中文用 ICU 分词,能处理常见同义词与近义表达 - -## 与关键词搜索的区别 -- **关键词搜索**:只命中字面匹配,「Q3 收入报表」搜「财务分析」会落空 -- **智能搜索**:理解意图,「财务分析」能命中「Q3 收入报表」「年度成本表」等语义相关文件 -- 智能搜索仍保留关键词命中能力,相关度由混合算法加权 - -## 关键属性 -- **入口**:装齐 search + ai 后,全局搜索框会出现「AI 搜索」按钮,把搜索词转给 AI 助手;AI 助手自动调用 `intelligent_search` 工具 -- **结果排序**:按 `relevance` 综合分降序 -- **权限范围**:与基础 search 接口完全一致,只返回当前用户能看到的对象 -- **延迟**:依赖 Manticore 索引;新增内容入库到可搜的间隔通常为秒级 - -## 与全局搜索的关系 -- 全局搜索 = 用户在搜索框内主动输入关键词的检索能力,详见 [[search.concept]] -- 智能搜索 = AI 助手在对话中代用户调用的同一套底座,搜索类型默认 `hybrid` - -## 不支持 -- 没装 search 插件(Manticore)时回退 MySQL 关键词搜索,关键词 / 语义 / 混合类型参数失效 -- 装了 search 但没装 ai 插件时降级到全文,语义能力失效 -- 不能跨用户搜别人的私聊 / 私有文件 -- 单次每类对象不会返回超过 50 条(最多 50 条) diff --git a/resources/ai-kb/zh/concept/search/overview.md b/resources/ai-kb/zh/concept/search/overview.md deleted file mode 100644 index 9f26bfba4..000000000 --- a/resources/ai-kb/zh/concept/search/overview.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: search.concept -title: 全局搜索是什么 -type: concept -feature: search -scope: end-user -locale: zh -aliases: - - 全局搜索 - - 搜索是什么 - - 总搜索 - - 怎么搜东西 - - 在哪里搜 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 全局搜索不会跨用户:只能搜到当前账号有权限看到的内容 - - 关键词为空时不会触发搜索,必须输入至少 1 个字符 - - 单次搜索每类对象最多返回 50 条(默认 20 条) -last_verified: v1.7.90 ---- - -# 全局搜索是什么 - -## 定义 -全局搜索是 DooTask 内的统一检索入口,能够一次性跨 5 类对象查找内容:联系人、项目、任务、文件、消息。对应后端 `api/search/*` 5 个接口,统一在 SearchController 实现。 - -## 5 类搜索对象 -- **联系人**(contact):按昵称 / 邮箱 / 个人简介 / 技能标签匹配用户 -- **项目**(project):按项目名 / 项目描述匹配当前用户可访问的项目 -- **任务**(task):按任务名 / 描述 / 子内容匹配用户所在项目内的任务 -- **文件**(file):按文件名匹配,安装 search 插件后还能搜文件正文 -- **消息**(message):按消息文本匹配用户能看到的会话消息 - -## 权限模型 -所有搜索都先做用户身份验证(`User::auth()`),结果只返回当前用户**已经有权限访问**的对象。搜不到不一定是关键词错,也可能是没有权限。 - -## 双引擎设计 -全局搜索有两套底层实现,按是否安装 search 插件自动切换: -- 装了 Manticore 搜索插件:走 Manticore,支持全文 / 向量 / 混合搜索 -- 未装:自动降级到 MySQL `LIKE` 模糊匹配 - -详见 [[search.engine.concept]]。 - -## 入口 -- 桌面端:快捷键 `Ctrl/Cmd + F` 或 `Ctrl/Cmd + /`,详见 [[search.entry.menu-map]] -- 移动端:在仪表盘等页面通过搜索按钮触发 diff --git a/resources/ai-kb/zh/faq/ai-assistant/disabled.md b/resources/ai-kb/zh/faq/ai-assistant/disabled.md deleted file mode 100644 index 09e878b0c..000000000 --- a/resources/ai-kb/zh/faq/ai-assistant/disabled.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -id: ai-assistant.disabled.faq -title: 我看不到 AI 助手入口 -type: faq -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 找不到 AI - - AI 浮按钮没有 - - 没有 AI 助手 - - 我的 DooTask 没 AI - - AI 入口消失 - - 别人有 AI 我没有 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 普通用户无法自助开通 AI,必须由系统管理员开 - - 浮按钮 / 快捷键 / 全局「+」菜单都依赖同一个 ai 插件标识 - - 不同部署的 DooTask 是否带 AI 取决于管理员决定 -last_verified: v1.7.90 ---- - -# 我看不到 AI 助手入口 - -## 问题 -- 屏幕右下角没有 AI 浮按钮 -- 按 Cmd+I / Ctrl+I 没反应 -- 右上角全局「+」菜单里没有「AI 助手」项 -- 同事的 DooTask 有 AI,自己的没有 - -## 常见原因 - -### 1. AI 插件未安装(最常见) -- AI 助手是**微应用 / 系统插件**,需在「应用市场」安装 `ai` 插件 -- 前端通过 `microAppsIds.includes('ai')` 决定是否显示入口;没装则所有 AI 入口都不渲染 - -### 2. 管理员关闭了 AI 模型 -- 即使 ai 插件已装,系统设置 →「AI 模型」未启用任何服务商 -- 浮按钮可能仍显示,但模型下拉为空、无法发送,详见 [[ai-assistant.model-empty.faq]] - -### 3. License 限制 -- 部分 DooTask 部署的 License 不含 AI 模块 -- ai 插件不出现在应用市场可装列表 - -### 4. 老缓存 -- 前端 `microAppsIds` 陈旧;刚装好但旧 tab 没刷新 -- 解决:强制刷新(Ctrl+F5) - -### 5. 路由是登录页 -- 浮按钮明确排除登录页(`routeName !== 'login'`) -- 登录后再看 - -## 解决 -1. **联系系统管理员**:到「应用市场」安装并启用 `ai` 插件 -2. **管理员配 AI 模型**:在系统设置 →「AI 模型」开启至少一个服务商 -3. **强制刷新**:Ctrl+F5 / Cmd+Shift+R 重新拉 `microAppsIds` -4. **重启容器(管理员)**:刚装完插件可能需重启 ai 容器 - -## 如何区分原因 -- 入口**完全不显示**(连浮按钮都没)→ ai 插件未装 -- 入口能看到但下拉空 → 模型未配,详见 [[ai-assistant.model-empty.faq]] - -## 相关 -- [[ai-assistant.entry.howto]] -- [[ai-assistant.model-empty.faq]] -- [[ai-assistant.auth.concept]] diff --git a/resources/ai-kb/zh/faq/ai-assistant/mcp-down.md b/resources/ai-kb/zh/faq/ai-assistant/mcp-down.md deleted file mode 100644 index 660246ad5..000000000 --- a/resources/ai-kb/zh/faq/ai-assistant/mcp-down.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: ai-assistant.mcp-down.faq -title: AI 的 MCP 工具不可用 -type: faq -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - mcp 挂了 - - mcp_server 不可用 - - AI 全部工具不能用 - - AI 都不能操作 - - MCP 连接失败 - - AI 助手只能聊天不能动手 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 普通用户不能自助重启插件,需管理员 - - mcp_server 容器异常时所有 33 个 MCP 工具都不可用(包含页面操作) - - 不影响纯文本对话和知识库检索(search_help_docs 是 AI 容器内置) -last_verified: v1.7.90 ---- - -# AI 的 MCP 工具不可用 - -## 问题 -AI 浮窗能聊天但任何"做事"指令都失败: -- 浮窗顶部不显示工具图标 -- 让 AI 建任务 / 发消息 / 跳页面都没反应 -- 工具气泡显示「连接失败」「mcp_server unavailable」 - -## 原因 -- **mcp_server 插件未安装**:应用市场没装这个系统插件 -- **mcp_server 容器挂了**:宿主资源不足 / 配置错误导致容器退出 -- **WebSocket 不通**:反向代理 / 防火墙拦截了 `wss://.../apps/mcp_server/mcp/operation` 路径 -- **AI 模型配置缺工具能力**:管理员配模型时关了 tool 调用集成 - -## 解决(普通用户) -1. 先确认是不是只你一个人的问题:和同事对比 -2. 报给系统管理员,告知"mcp_server 不可用" -3. 等待恢复期间可改用: - - 手动用前端操作功能 - - 用 AI 做纯文本辅助(写文案 / 总结 / 翻译) - - 知识库检索(`search_help_docs` 不依赖 mcp_server,仍可用) - -## 解决(管理员) -1. 应用市场 → 找到 `mcp_server` → 看运行状态 -2. 没安装 → 安装 -3. 已安装但状态异常 → 重启该插件 -4. 长期失败 → 看插件日志(容器 docker logs)排查 -5. 反向代理:确保 wss 路径未被拦 - -## 相关 -- 工具失败:[[ai-assistant.tool-failed.faq]] -- 没调工具:[[ai-assistant.no-tool-call.faq]] -- 工具机制:[[ai-assistant.tools.concept]] diff --git a/resources/ai-kb/zh/faq/ai-assistant/model-empty.md b/resources/ai-kb/zh/faq/ai-assistant/model-empty.md deleted file mode 100644 index 68d0f8377..000000000 --- a/resources/ai-kb/zh/faq/ai-assistant/model-empty.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: ai-assistant.model-empty.faq -title: AI 助手模型下拉是空的 -type: faq -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 选不了模型 - - 模型下拉为空 - - 暂无可用模型 - - 没有可选 AI - - AI 不能发送 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 普通用户无法自助开通 / 配置模型,必须由系统管理员处理 - - 下拉空多数是后端配置层面的事,不是网络问题 - - DooTask 不自带任何免费内置模型 -last_verified: v1.7.90 ---- - -# AI 助手模型下拉是空的 - -## 问题 -打开 AI 助手浮窗后,**底部「选择模型」下拉框**为空,显示「暂无可用模型」或灰色禁用,按发送也无反应。 - -## 常见原因 - -1. **管理员没启用任何模型** - - 系统设置 → 「AI 模型」中所有服务商开关都关着,或未填 API Key -2. **AI 插件未安装** - - 应用市场没装 ai 插件;如果连入口都没有则属于 [[ai-assistant.disabled.faq]] -3. **API Key 失效** - - 管理员填了 Key 但已过期 / 余额耗尽,后端返回模型列表为空 -4. **接口请求失败** - - `GET api/assistant/models` 出错(鉴权失败、网络抖动),前端弹「获取模型列表失败」并自动关浮窗 -5. **管理员开了模型但没设默认** - - 极少数情况:模型列表为空数组 - -## 解决 - -1. **联系系统管理员**:到「系统设置 → AI 模型」开启至少一个服务商并填可用 API Key -2. **检查 ai 插件**:管理员到「应用市场」确认 ai 插件已装且未禁用 -3. **刷新页面**:关闭 AI 助手浮窗后重新打开,触发新一次 `api/assistant/models` -4. **看后台 ai-bot 日志**:管理员排查 dootask-ai 容器日志,确认上游 API 可达 - -## 与其他「AI 看不到」的区别 -- 下拉**空** = 管理员配置层面问题 -- AI 入口**完全看不到**(浮按钮 / 快捷键无效)= ai 插件未装,详见 [[ai-assistant.disabled.faq]] - -## 相关 -- [[ai-assistant.model.concept]] -- [[ai-assistant.disabled.faq]] diff --git a/resources/ai-kb/zh/faq/ai-assistant/no-tool-call.md b/resources/ai-kb/zh/faq/ai-assistant/no-tool-call.md deleted file mode 100644 index 2ef568d37..000000000 --- a/resources/ai-kb/zh/faq/ai-assistant/no-tool-call.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: ai-assistant.no-tool-call.faq -title: AI 应该调工具但没调 -type: faq -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 不调工具 - - AI 只说不做 - - AI 没操作 - - AI 没建任务 - - AI 干说 - - 让 AI 做事它只回答 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 选了纯文本模型时无论怎么提问都不会调工具 - - 即使支持 tool call 的模型也可能误判为"无需工具",需重提问引导 - - AI 不会暴露完整工具清单,让你逐个点选 -last_verified: v1.7.90 ---- - -# AI 应该调工具但没调 - -## 问题 -明明让 AI 帮忙建任务 / 发消息 / 跳页面,但 AI 只口头回答"好的,我会…"或"建议你…",并没有调用工具实际操作。 - -## 常见原因 -- **模型不支持 function calling**:选了纯文本模型 -- **mcp_server 插件未安装/挂掉**:工具列表为空 -- **意图不明确**:模型判断为闲聊,没决策需要工具 -- **管理员关闭了工具集成** -- **上下文超长**:会话累积过多,模型"忘了"工具能力 - -## 解决 -1. **换模型**:浮窗顶部切到「支持工具」的模型 -2. **明确指令**:换成动词命令"建任务"、"发消息"、"打开" -3. **加资源 ID**:给具体的项目名 / 任务 ID -4. **新开会话**:超长会话可能异常,重开试 -5. **检查 mcp_server**:让管理员看插件运行状态 - -## 例子 -- 不好:"小王任务这事跟一下" → AI 回复"建议您…" -- 好:"给小王在项目 X 新建任务:周五前回归测试" → AI 调 `create_task` - -## 相关 -- 工具机制:[[ai-assistant.tools.concept]] -- 工具列表:[[ai-assistant.tools-list.concept]] -- MCP 不可用:[[ai-assistant.mcp-down.faq]] diff --git a/resources/ai-kb/zh/faq/ai-assistant/tool-failed.md b/resources/ai-kb/zh/faq/ai-assistant/tool-failed.md deleted file mode 100644 index aee81adad..000000000 --- a/resources/ai-kb/zh/faq/ai-assistant/tool-failed.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -id: ai-assistant.tool-failed.faq -title: AI 工具调用失败怎么办 -type: faq -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 调工具报错 - - tool_call failed - - AI 操作失败 - - AI 工具不响应 - - AI 卡在执行中 - - AI 调用超时 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 工具失败不会自动二次重试,需用户重新触发 - - 失败不会回滚已成功的工具(如已建任务再发消息失败,任务保留) - - 隐藏错误细节属正常,敏感字段不会暴露给用户 -last_verified: v1.7.90 ---- - -# AI 工具调用失败怎么办 - -## 问题 -浮窗里 AI 调工具的气泡显示「失败」「执行超时」「无权限」「找不到资源」等,回复也提示"没能完成"。 - -## 常见原因 -- **后端短时不可用**:`mcp_server` 容器重启 / 网络抖动 -- **权限不足**:操作了你没权限访问的资源(如别人的任务、非成员的项目) -- **参数错误**:AI 推断的 ID 不存在(如任务已被删) -- **超时**:单次工具调用默认 30 秒超时,长操作(大列表/复杂搜索)会断 -- **页面不在线**:页面操作(打开任务/跳页面/操作元素)需要前端 socket 在线,关浏览器后立刻让 AI 操作会失败 -- **模型不支持 tool call**:选了纯文本模型,根本不会调 - -## 解决 -1. **重试**:浮窗里点工具气泡上的「重试」按钮,或回复"再试一次" -2. **换措辞**:原句太模糊就给更具体的 ID / 关键词 -3. **检查权限**:项目级问负责人加成员;任务级问任务负责人加可见用户 -4. **换模型**:选标注「支持工具」的模型,浮窗顶部切换 -5. **刷新页面**:页面动作失败时刷新一次后再让 AI 重试 -6. **联系管理员**:连续失败请通知管理员看 `mcp_server` 插件日志 - -## 相关 -- 工具机制:[[ai-assistant.tools.concept]] -- 权限不足:[[ai-assistant.tool-permission.faq]] -- MCP 不可用:[[ai-assistant.mcp-down.faq]] diff --git a/resources/ai-kb/zh/faq/ai-assistant/tool-permission.md b/resources/ai-kb/zh/faq/ai-assistant/tool-permission.md deleted file mode 100644 index 2b088aecc..000000000 --- a/resources/ai-kb/zh/faq/ai-assistant/tool-permission.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: ai-assistant.tool-permission.faq -title: AI 提示没权限操作怎么办 -type: faq -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 没权限 - - AI 提示权限不足 - - AI 不能改这个 - - AI 操作被拒 - - AI 看不到这个任务 - - AI 不能访问 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - AI 不能绕过 DooTask 权限体系,调工具同样走后端鉴权 - - 没有「AI 超级模式」开关,AI 的权限始终等同当前登录用户 - - 普通用户无法自助提权,必须由管理员或负责人调整 -last_verified: v1.7.90 ---- - -# AI 提示没权限操作怎么办 - -## 问题 -AI 工具调用气泡显示「无权限」「您不在可见用户列表」「不是项目成员」等错误,AI 回复说"无法帮您完成"。 - -## 原因 -AI 以你当前登录身份调用所有工具,后端的所有权限校验都生效: - -- **项目级**:非项目成员看不到/不能改项目内任务 -- **任务级**:任务设了可见用户白名单,名单外用户即使是项目成员也看不到 -- **角色级**:改项目设置 / 删列 / 改成员需要项目负责人或管理员 -- **系统级**:装插件 / 改系统设置 / 看导出 / 管理用户需要系统管理员(userIsAdmin) -- **超级管理员**:超管专属功能仅 id=1 的用户可用 - -## 解决 -1. 确认操作类型对应哪一级权限 -2. 联系对应角色补加权限: - - 项目级 → 联系项目负责人加你为成员或改角色 - - 任务级 → 联系任务负责人把你加入可见用户 - - 系统级 → 联系系统管理员 -3. 部分功能依赖插件已安装(如审批要 approve 插件) -4. 让 AI 换种方式(如不能 update_task 可改成 send_message 通知负责人改) - -## 怎么看自己的权限 -- 头像 → 「个人设置」可看部门 / 角色 -- 系统管理员 / 部门负责人身份会显示在右上角下拉菜单顶部 - -## 相关 -- 通用权限不足:[[role-permission.permission-denied.faq]] -- 工具调用失败:[[ai-assistant.tool-failed.faq]] diff --git a/resources/ai-kb/zh/faq/checkin/face-fail.md b/resources/ai-kb/zh/faq/checkin/face-fail.md deleted file mode 100644 index 3e47e7ae4..000000000 --- a/resources/ai-kb/zh/faq/checkin/face-fail.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -id: checkin.face-fail.faq -title: 人脸识别失败怎么办 -type: faq -feature: checkin -scope: end-user -locale: zh -aliases: - - 人脸识别失败 - - 刷脸不成功 - - 人脸录入失败 - - 上传人脸报错 - - 识别不到我的脸 -related_tools: [] -related_pages: [] -prerequisites: [] -last_verified: v1.7.90 ---- - -# 人脸识别失败怎么办 - -## 问题 -上传人脸图片或现场扫脸时报错,比如「设置失败」「上传出错」「未识别到人脸」「该应用未安装」等。 - -## 原因 -- **face 插件没装**:主程序调 face 容器 `http://face:7788/user` 调不通,会先抛 `请先安装 face` 异常 -- **face 容器没起来**:容器异常或镜像没拉成功(约 15MB+,首次安装慢) -- **签到方式没开人脸**:管理员未在「签到设置 → 签到方式」勾选「人脸签到」 -- **未开放上传**:管理员未在「签到设置 → 允许修改」开启「允许成员上传人脸图片」,提交会返回「未开放修改权限」 -- **图片质量差**:模糊 / 侧脸 / 多人 / 太暗 → 后端识别引擎拒绝入库 -- **现场设备问题**:人脸识别一体机离线、网络断、未对接到 face 容器 - -## 解决 -1. 联系管理员确认 face 插件已在应用市场安装 -2. 让管理员去「签到设置」开启「人脸签到」+「允许成员上传人脸图片」 -3. 重新上传一张**正面、光线均匀、单人、500x500 左右**的清晰照片 -4. 现场扫脸失败时换个角度 / 摘掉口罩 / 重启设备 -5. 若一直失败,临时改用 [[checkin.regular.howto]] 手动签到或 [[checkin.wifi.howto]] WiFi 签到 - -## 不支持 -- 主程序自己不做人脸比对,所有错误都从 face 插件返回;卸载 face 后人脸签到能力完全消失 diff --git a/resources/ai-kb/zh/faq/checkin/late.md b/resources/ai-kb/zh/faq/checkin/late.md index 41f6e9c6e..f8b0f7e29 100644 --- a/resources/ai-kb/zh/faq/checkin/late.md +++ b/resources/ai-kb/zh/faq/checkin/late.md @@ -29,7 +29,7 @@ DooTask 签到没打上(漏签 / 迟到),日历上显示当天为空或时 ## 原因 - **签到时间窗口外**:管理员配置了「最早可提前」「最晚可延后」分钟数,超出窗口的打卡会被拒 -- **MAC / 人脸未匹配**:WiFi 签到时 MAC 没绑或不在办公网 → [[checkin.mac-not-match.faq]];人脸识别失败 → [[checkin.face-fail.faq]] +- **MAC / 人脸未匹配**:WiFi 签到时 MAC 没绑或不在办公网 → [[checkin.mac-not-match.faq]];人脸识别失败见人脸识别(face)应用知识库 - **忘记打卡**:完全没操作 - **非工作日**:节假日不会发提醒,但只要打卡了一样会记录 diff --git a/resources/ai-kb/zh/faq/common-faq/ai-no-models.md b/resources/ai-kb/zh/faq/common-faq/ai-no-models.md index 9cb8c7e66..c32395ff2 100644 --- a/resources/ai-kb/zh/faq/common-faq/ai-no-models.md +++ b/resources/ai-kb/zh/faq/common-faq/ai-no-models.md @@ -48,4 +48,4 @@ DooTask 的 AI 能力由独立的 **ai 插件**(`dootask-ai`)提供。下面 - 主程序不能跳过 ai 插件直连模型 - 一次只能选一个默认模型作为系统主模型 -更多 AI 助手能力见 [[ai-assistant.entry.howto]] / [[ai-assistant.tools-list.concept]] +更多 AI 助手能力说明随 ai 插件知识库提供。 diff --git a/resources/ai-kb/zh/faq/common-faq/ai-slow.md b/resources/ai-kb/zh/faq/common-faq/ai-slow.md index 3d56481e8..2687b5904 100644 --- a/resources/ai-kb/zh/faq/common-faq/ai-slow.md +++ b/resources/ai-kb/zh/faq/common-faq/ai-slow.md @@ -50,4 +50,4 @@ AI 回复时延受多重因素影响: - 无内置「响应慢自动降级」机制 - 中断回复只能整体停止本轮,不能保留已生成的文本继续 -[[ai-assistant.entry.howto]] / [[ai-assistant.tool-call.concept]] +更多 AI 助手说明随 ai 插件知识库提供。 diff --git a/resources/ai-kb/zh/faq/common-faq/ai-tool-permission.md b/resources/ai-kb/zh/faq/common-faq/ai-tool-permission.md index 32279b7d0..a731ddee2 100644 --- a/resources/ai-kb/zh/faq/common-faq/ai-tool-permission.md +++ b/resources/ai-kb/zh/faq/common-faq/ai-tool-permission.md @@ -31,7 +31,7 @@ last_verified: v1.7.90 AI 助手的工具调用本质是后端 API 调用,**全部以你的身份发起**。所以: - 你本人没权限做的事,AI 也做不了 -- AI 调 `create_task` 时实际就是用你的会话去走 [[ai-assistant.create-task.howto]] 的 API;你不在项目里就会被拒绝 +- AI 调 `create_task` 时实际就是用你的会话去调对应 API;你不在项目里就会被拒绝 - `update_task` 改任务必须满足任务负责人 / 项目负责人 / 系统管理员条件之一 - 「加成员」必须你本身能加(项目负责人 / 系统管理员) @@ -48,4 +48,4 @@ AI 助手的工具调用本质是后端 API 调用,**全部以你的身份发 - AI 不读不到的会话不会偷偷读取(隐私边界 = 用户的可见范围) - AI 工具失败不会自动二次重试,需要用户重新发问 -[[ai-assistant.tool-call.concept]] 解释了工具调用的事件结构;[[role-permission.permission-denied.faq]] 解释通用权限规则。 +工具调用的事件结构说明随 ai 插件知识库提供;[[role-permission.permission-denied.faq]] 解释通用权限规则。 diff --git a/resources/ai-kb/zh/faq/common-faq/ai-wrong-answer.md b/resources/ai-kb/zh/faq/common-faq/ai-wrong-answer.md index 6a631f526..bd47ac498 100644 --- a/resources/ai-kb/zh/faq/common-faq/ai-wrong-answer.md +++ b/resources/ai-kb/zh/faq/common-faq/ai-wrong-answer.md @@ -47,4 +47,4 @@ AI 助手回答与事实不符,编了不存在的功能 / 菜单 / 快捷键 - AI 不会拒绝回答它不熟的问题(可能编造),需用户保持警惕 - AI 不会自动跨会话学习——「你上次错过的」对新会话无影响 -[[ai-assistant.search-help-docs.howto]] 触发知识库检索;[[ai-assistant.tool-call.concept]] 看真实工具调用判断 AI 是否真做了。 +可触发知识库检索,并查看真实工具调用判断 AI 是否真做了(AI 助手相关说明随 ai 插件知识库提供)。 diff --git a/resources/ai-kb/zh/faq/common-faq/data-import.md b/resources/ai-kb/zh/faq/common-faq/data-import.md index 22c497001..03479755c 100644 --- a/resources/ai-kb/zh/faq/common-faq/data-import.md +++ b/resources/ai-kb/zh/faq/common-faq/data-import.md @@ -55,7 +55,7 @@ last_verified: v1.7.90 **附件**:批量上传到文件目录([[file.upload.howto]])。 -**文档**:复制文本到 office([[office.create.howto]])或 memos([[memos.create.howto]])。 +**文档**:复制文本到 office 或 memos 等文档类应用(具体新建方式见对应应用知识库)。 ## 不支持 - 不支持保留源任务 ID / URL 映射 diff --git a/resources/ai-kb/zh/faq/okr/cannot-install.md b/resources/ai-kb/zh/faq/okr/cannot-install.md deleted file mode 100644 index 3c56afab6..000000000 --- a/resources/ai-kb/zh/faq/okr/cannot-install.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: okr.cannot-install.faq -title: 看不到 OKR / 安装失败怎么办 -type: faq -feature: okr -scope: end-user -locale: zh -aliases: - - OKR 看不到 - - OKR 入口没有 - - OKR 装不上 - - OKR 安装失败 - - OKR 怎么开通 - - OKR 安装很慢 -related_tools: [] -related_pages: [application] -prerequisites: [] -negative: - - 主程序不内置 OKR,未装插件时入口绝对不会出现 - - 普通用户无法自助安装应用市场插件,需要系统管理员操作 -last_verified: v1.7.90 ---- - -# 看不到 OKR / 安装失败怎么办 - -## 问题 -打开 DooTask 后在应用中心看不到「OKR 管理」入口,或在「应用商店」(应用市场)点了「安装」后长时间没有反应、提示失败。 - -## 常见原因 -- OKR 是独立插件(应用商店 app id:`okr`),主程序不内置;未装时入口不出现 -- 普通用户没有应用商店的安装权限,必须系统管理员(`userIsAdmin`)安装 -- 插件镜像约 15MB,首次拉取较慢,看起来像「卡住」实际仍在下载 -- 服务器无法访问应用商店镜像源(网络 / 防火墙 / DNS 问题) -- 主程序版本低于 1.1.66,不满足插件要求 - -## 解决 -1. 确认自己角色:非管理员就联系管理员安装 -2. 管理员打开「应用」→ 管理员分区「应用商店」,搜索「OKR」或「目标管理」 -3. 点击安装后,通过应用商店的安装日志查看实时进度(不要立即重试) -4. 日志卡在拉取镜像:检查服务器到镜像源的网络连通性,确认能拉取 Docker 镜像 -5. 提示版本不兼容:先升级主程序到 > 1.1.66 再安装 -6. 安装完成但入口不出现:刷新浏览器 / 重新登录一次 -7. 安装失败可在应用商店重试,仍失败请保留日志反馈给运维 - -## 相关 -- 插件元信息:[[okr.plugin.concept]] -- OKR 入口:[[okr.entry.menu-map]] -- 通用权限问题:[[role-permission.permission-denied.faq]] diff --git a/resources/ai-kb/zh/faq/search/no-result.md b/resources/ai-kb/zh/faq/search/no-result.md deleted file mode 100644 index b024dab60..000000000 --- a/resources/ai-kb/zh/faq/search/no-result.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: search.no-result.faq -title: 搜不到或结果不全 -type: faq -feature: search -scope: end-user -locale: zh -aliases: - - 搜不到 - - 搜索没结果 - - 搜索结果不全 - - 为什么搜不到 - - 搜不到文件内容 - - 搜不到群消息 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 全局搜索不会显示「不属于你」的对象,即使关键词完全匹配 - - 不会自动跨用户搜索别人的私聊或文件 -last_verified: v1.7.90 ---- - -# 搜不到或结果不全 - -## 问题 -全局搜索输入关键词后没有结果,或者结果数量明显少于实际存在的对象。 - -## 原因 -按出现频率从高到低: -1. **权限范围限制**:所有搜索只返回当前用户能访问的对象(详见各子接口),无权对象不会出现 -2. **对象处于不可见状态**:已归档项目、已归档 / 已删除任务、已禁用用户、机器人账号都会被过滤 -3. **未装 Manticore 插件**:MySQL 回退只匹配字面关键词,且文件正文 / 任务描述里的关键词搜不到(见 [[search.engine.concept]]) -4. **正文未被索引**:装了 Manticore,但文件超过大小阈值(Office > 50MB / 文本 > 5MB / 其他 > 20MB)或类型不支持 -5. **达到单次返回上限**:默认返回 20 条,最多 50 条,匹配项更多时会被截断 -6. **关键词大小写 / 全半角差异**:MySQL 回退对全 / 半角和大小写敏感度有限 - -## 解决 -1. 确认当前账号是否在对应项目 / 对话的成员列表 -2. 在搜索框切换分类标签(任务 / 项目 / 消息 / 联系人 / 文件),看是否被聚合截断了 -3. 如果是搜不到文件正文:联系管理员安装 search 插件([[search.engine.concept]]) -4. 如果是搜归档对象:先到对应模块解归档,再搜 -5. 增加 `take` 参数到 50(接口调用方) -6. 用更准确的关键词或换一种说法 - -## 相关 -- 引擎差异:[[search.engine.concept]] -- 入口与快捷键:[[search.entry.menu-map]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/close.md b/resources/ai-kb/zh/howto/ai-assistant/close.md deleted file mode 100644 index dbf68280e..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/close.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -id: ai-assistant.close.howto -title: 关闭 AI 助手浮窗 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 关闭 AI - - 退出 AI 助手 - - AI 浮窗关掉 - - 关 AI 弹窗 - - 取消 AI 对话 -related_tools: [] -related_pages: [] -prerequisites: - - AI 助手浮窗已打开 -negative: - - 关闭只是隐藏弹窗 + 终止活跃 SSE 流,不会删除当前会话 - - 桌面端关闭后短时间内浮窗不会自动弹回,需再点浮按钮 / 快捷键 - - 移动端没有 Esc 键关闭 -last_verified: v1.7.90 ---- - -# 关闭 AI 助手浮窗 - -## 入口 - -### 桌面端 chat 浮窗 -- 浮窗**右上角「×」**关闭按钮 -- 键盘 `Esc`(仅 chat displayMode 生效) -- chat 浮窗无遮罩,点击外侧不会关闭 - -### 桌面端 modal 模态(业务嵌入入口) -- 弹窗**右上角「×」**或顶部关闭图标 -- 遮罩点击:默认**不**关闭(`mask-closable: false`) -- 键盘 `Esc`:modal 模式当前实现下不响应 - -### 移动端 -- 浮窗**右上角「×」**(`Icon type="ios-close"`) -- 浮窗顶部下拉「关闭」 -- 无键盘快捷键 - -## 关闭时发生了什么 -1. `showModal = false` -2. 触发 `aiAssistantClosed` 事件 -3. **不会**自动清理当前会话(保留在内存 + 已持久化的留在数据库) -4. 活跃的 SSE 流被同会话切换 / 新提问触发的清理逻辑回收 -5. 浮按钮重新显示(关闭时浮按钮被 `!this.$parent?.showModal` 条件隐藏) - -## 关闭后下次打开 -- 当前会话和模型选择都保留 -- 输入框内容**不**保留(关闭即清空) -- 待发送的图片也会清空(`clearPendingImages`) - -## 完全隐藏 AI 助手 -- 关闭浮窗只是临时隐藏,**浮按钮**仍在屏幕边缘 -- 完全去掉浮按钮需管理员卸载 ai 插件或关闭 AI 模型 -- 详见 [[ai-assistant.disabled.faq]] - -## 不支持 -- 不支持「最小化为小球」(关掉就是关掉,再开是新一次打开) -- 不支持「关闭并清空当前会话」一键操作(手动删除:[[ai-assistant.session-delete.howto]]) -- 不支持点击浮窗外区域自动关闭 - -## 相关 -- [[ai-assistant.entry.howto]] -- [[ai-assistant.stop.howto]] -- [[ai-assistant.float-button.concept]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/create-task.md b/resources/ai-kb/zh/howto/ai-assistant/create-task.md deleted file mode 100644 index 3261ddb0b..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/create-task.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: ai-assistant.create-task.howto -title: 让 AI 帮我创建任务 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 建任务 - - AI 加 todo - - AI 新建待办 - - 让 AI 创建一个任务 - - AI 帮我下任务 - - 给小王分个任务 -related_tools: [create_task] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 - - 当前用户在目标项目中是成员或负责人 -negative: - - 不能在不是自己项目的位置建任务(会提示无权限) - - AI 不会未经确认直接建复杂任务,长字段一般会先复述再创建 - - 创建后任务的 ID/URL 会返回,可让 AI 继续打开它 -last_verified: v1.7.90 ---- - -# 让 AI 帮我创建任务 - -## 这是什么 -在 AI 浮窗自然语言描述要建的任务,AI 会调 `create_task` 工具在目标项目下新建一条任务,自动解析负责人、截止时间、优先级、所属列。 - -## 怎么问 -一次性把关键信息说全,AI 解析准确率最高: - -- "在『官网改版』项目建一个任务:周五前完成首页banner切图,分给小王" -- "建个明天 18 点截止的紧急任务:上线前回归测试,我负责" -- "项目X里加一条任务『写 PRD』,无负责人无截止时间" - -## AI 通常会确认 -- 模糊的项目名 → 先调 `list_projects` 让你选 -- 模糊的"小王" → 调 `search_users` 列同名用户让你确认 -- 没说截止时间 → 直接不设置(不会乱猜) -- 没说负责人 → 默认建未分配,可后续追加 - -## 创建后能继续做什么 -- "打开它" → 调页面工具跳详情 -- "再加 3 个子任务:前端、后端、测试" → 调 `create_sub_task` -- "把这条同步到 X 群" → 调 `send_message` - -## 不支持 -- 不能建跨项目任务(任务必须归属一个项目) -- 不能在 AI 这步同时设置自定义字段(需打开任务详情手动改) -- AI 不会主动给任务套已有模板,需明示「按 X 模板创建」 - -## 相关 -- 列任务:[[ai-assistant.list-tasks.howto]] -- 创建项目结构:[[ai-assistant.project-init.howto]] -- 子任务建议:[[ai-assistant.subtask-suggest.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/element-action.md b/resources/ai-kb/zh/howto/ai-assistant/element-action.md deleted file mode 100644 index 7b4e8274e..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/element-action.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -id: ai-assistant.element-action.howto -title: 让 AI 操作页面元素 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 点按钮 - - AI 帮我输入 - - AI 选下拉 - - AI 滚动页面 - - AI 自动填表 - - AI 点击 X -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 - - 当前页面已加载完成 -negative: - - 元素必须可见且未被遮挡才能点击,被滚出视野时需先 scroll - - 不能模拟键盘组合键(如 Cmd+S)、不能拖拽 - - AI 找不到匹配元素时会道歉并要求换种描述,不会盲点 -last_verified: v1.7.90 ---- - -# 让 AI 操作页面元素 - -## 这是什么 -让 AI 助手在你当前页面上直接操作具体元素,包括点击按钮、输入文本、选下拉项、聚焦、滚动、悬停。常用于完成详细表单或触发某个隐藏在多级菜单里的功能。操作由 AI 助手在你的浏览器/桌面端页面上执行。打开了微应用插件(同源)时,这些操作会默认作用于最前那个微应用的内部。 - -## 怎么问 -- "点击『保存』按钮" -- "在标题框输入『官网首页改版』" -- "把优先级下拉选成『高』" -- "滚动到页面底部" -- "悬停在第一个项目卡片上" - -## AI 的执行链路 -1. 先采集当前页面的可交互元素清单 -2. 用 `match_elements` 接口按描述("保存按钮"、"标题输入框")找到目标 ref -3. 在你的页面上触发 click / type / select / focus / scroll / hover - -## 支持的动作 -| 动作 | 说明 | -|---|---| -| click | 触发原生 click 事件 | -| type | 设置 input / textarea / contentEditable 的值并触发 input/change 事件 | -| select | 原生 select 或 iView 下拉,按选项文本匹配 | -| focus | 聚焦元素 | -| scroll | 平滑滚动到屏幕中央 | -| hover | 模拟 mouseenter/mouseover | - -## 不支持的动作 -- 不能模拟键盘按键、不能模拟组合键 -- 不能拖拽元素(drag/drop) -- 不能操作跨源(外部站点)微应用 iframe 的内部元素(同源微应用插件内部可操作) -- 不能等到某个异步加载完成再点(无 wait 机制,需用户重新触发) - -## 找不到元素怎么办 -- 改用更具体的描述("右上角保存按钮"代替"保存") -- 先让 AI 跳到元素所在页(`open_task` 等) -- 元素在折叠面板里,先让 AI 展开 - -## 相关 -- 跳页面 / 打开任务:[[ai-assistant.page-action.howto]] -- match_elements 接口:[[ai-assistant.match-elements.concept]] -- 页面上下文:[[ai-assistant.page-context-tool.concept]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/entry.md b/resources/ai-kb/zh/howto/ai-assistant/entry.md deleted file mode 100644 index f3738c39f..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/entry.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -id: ai-assistant.entry.howto -title: AI 助手怎么打开 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 助手在哪 - - 怎么开 AI - - 打开 AI - - AI 入口 - - AI 浮窗 - - 怎么用 AI -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 管理员已在系统设置「AI 模型」中配置至少一个模型的 API key -negative: - - AI 助手本身不是「应用中心」里的卡片(区别于审批 / 签到等),是系统级特性 - - 未安装 ai 插件时所有 AI 入口都不会显示 - - 桌面端关闭浮窗后短时间内不会自动弹回,可手动唤起 -last_verified: v1.7.90 ---- - -# AI 助手怎么打开 - -## 全局入口(桌面端) - -- **浮窗按钮**:屏幕右下角的圆形 AI 图标,点击展开聊天浮窗(位置可拖动,会贴边收起成竖条) -- **快捷键**:Cmd + I(macOS)/ Ctrl + I(Win/Linux)任意页面都能呼出 -- **顶部「+」菜单**:右上角全局「+」下拉里有「AI 助手」项(需 ai 插件已安装) - -## 移动端入口 - -- **悬浮按钮**:右下角小球,长按拖动到任意位置 -- 第一次打开会自动收起到屏幕边缘,点开后可全屏对话 - -## 业务场景嵌入入口 - -- **项目创建**:新建项目时项目名输入框旁边有 AI 按钮,点击让 AI 帮你生成项目结构 -- **任务详情**:任务讨论区可 @AI 让它分析任务、生成子任务建议 -- **工作报告**:报告编辑器内可让 AI 基于近期任务自动生成报告草稿 -- **消息会话**:群里 @AI 让它回答问题、总结对话、翻译消息 - -## 切换模型 -浮窗顶部下拉框选择模型;可用模型由管理员在系统设置「AI 模型」中开启。如下拉框为空,联系管理员配置。 - -## 关闭/隐藏 -- 桌面端:浮窗右上角「×」关闭,下次点浮按钮重新打开 -- 移动端:浮窗右上角下拉「关闭」 diff --git a/resources/ai-kb/zh/howto/ai-assistant/feedback.md b/resources/ai-kb/zh/howto/ai-assistant/feedback.md deleted file mode 100644 index d43c75668..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/feedback.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: ai-assistant.feedback.howto -title: 给 AI 回答点赞或点踩 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 点赞 - - 点踩 - - AI 回答不好怎么反馈 - - 反馈 AI 回答 - - 有帮助 没帮助 - - 复制 AI 回答 - - 取消反馈 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 -negative: - - 反馈只针对 AI 助手浮窗里的回复,聊天对话里 @AI 机器人的消息暂不支持 - - 点踩不会让 AI 立即重新回答,需要自己追问或重新提问 -last_verified: v1.7.91 ---- - -# 给 AI 回答点赞或点踩 - -## 这是什么 -AI 助手浮窗中,每条 AI 回复完成后下方右侧会出现「复制 / 有帮助 / 没帮助」三个图标按钮(📋/👍/👎)。复制用于把回复内容复制到剪贴板,👍/👎 用于提交反馈,帮助官方改进 AI 回答质量和帮助文档内容。 - -## 怎么操作 -1. 在 AI 助手浮窗中提问,等待回复完成(流式输出结束后按钮才出现) -2. 回复下方右侧点击 📋(复制)可复制该条回复正文到剪贴板(不含推理过程) -3. 点击 👍(有帮助)或 👎(没帮助)提交反馈 -4. 按钮高亮表示已提交;再点另一个按钮可以改票,同一条回复只记最新一次 -5. 再次点击当前已高亮的按钮可取消反馈 - -## 反馈会被怎么用 -- 反馈与该回复引用的帮助文档关联,被频繁点踩的文档会被优先修订 -- 重新打开历史会话时,之前的反馈状态会保留显示 - -## 不支持 -- 不支持填写文字原因,只有 👍/👎 两档 - -## 相关 -- AI 查帮助文档:[[ai-assistant.search-help-docs.howto]] -- 会话保存:[[ai-assistant.session-save.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/float-button.md b/resources/ai-kb/zh/howto/ai-assistant/float-button.md deleted file mode 100644 index 13346fb42..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/float-button.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: ai-assistant.float-button.howto -title: 移动 / 收起 AI 助手浮按钮 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 怎么移动 AI 按钮 - - AI 球怎么挪 - - AI 浮窗按钮位置 - - AI 按钮挡住了 - - 浮按钮跑哪去了 - - 怎么收起 AI 按钮 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 -negative: - - 浮按钮无法完全关闭按钮本身(除非卸载 ai 插件或管理员关闭模型) - - 收起后不会自己消失,仍是屏幕边缘一根 48px 高的竖条 - - 多端位置不同步:桌面 / 移动 / 桌面 Electron 各自独立存储 -last_verified: v1.7.90 ---- - -# 移动 / 收起 AI 助手浮按钮 - -## 移动位置 - -### 桌面端 -1. 鼠标按住 AI 浮按钮 -2. 拖动到任意位置(距屏幕四边至少 12px) -3. 松开鼠标完成移动;松手后位置自动写入 IndexedDB - -### 移动端 -1. 单指按住 AI 浮按钮 -2. 拖动到目标位置 -3. 抬起手指完成 - -## 收起 / 展开 - -- **自动收起**:拖到距屏幕左 / 右边缘 ≤ 12px 时,桌面端 1 秒后自动收起为竖条;移动端首次加载即自动收起到边缘 -- **展开**:点一下收起的竖条,按钮重新弹出并打开 AI 助手浮窗 - -## 怎么判断点击 vs 拖动 -- 移动距离 < 5px **且** 按下时间 < 200ms → 算「点击」,呼出 AI 助手 -- 否则 → 算「拖动」,只移动位置不打开对话窗 - -## 不同分辨率 -位置只存「距某边距离」+ 「靠哪边」,换屏 / 转屏不会跑到屏外。若发现按钮丢失,刷新页面后会回到默认位置(桌面右下、移动右侧中下)。 - -## 不支持 -- 桌面端没有「关闭浮按钮」的用户开关:要彻底关闭需管理员侧关闭 ai 插件 -- 不支持把浮按钮拖到屏幕外(会被边距 12px 强制约束) -- 位置不跨端同步(手机和电脑各自存) - -## 相关 -- 浮按钮的整体行为:[[ai-assistant.float-button.concept]] -- 进 AI 助手的其他方法:[[ai-assistant.entry.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/image-upload.md b/resources/ai-kb/zh/howto/ai-assistant/image-upload.md deleted file mode 100644 index a99aa19e2..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/image-upload.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -id: ai-assistant.image-upload.howto -title: 给 AI 助手发图片 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 上传图片 - - 给 AI 发截图 - - AI 拍照分析 - - 粘贴图片给 AI - - 拖图片给 AI - - AI 看图 -related_tools: [] -related_pages: [] -prerequisites: - - 已选中支持视觉的模型(如 gpt-4o / claude-3.5-sonnet / gemini-1.5-pro) -negative: - - 单次最多 5 张,超出会拒绝 - - 仅支持图片格式(image/*),不支持 PDF / 视频 - - 图片会被前端压缩到长边 1568px JPEG,原图不保留 - - 非视觉模型即使选了也会被上游报错或忽略图片 -last_verified: v1.7.90 ---- - -# 给 AI 助手发图片 - -## 三种上传方式 - -### 1. 点击图片按钮 -1. 打开 AI 助手浮窗 -2. 浮窗底部输入区**左侧**有图片图标 -3. 点击 → 弹系统文件选择器 -4. 选 1-5 张图片 → 确定 - -### 2. 拖放 -1. 把图片从桌面或文件管理器拖到 AI 浮窗 -2. 浮窗内部出现「松开以上传图片」遮罩 -3. 在遮罩内松开鼠标完成上传 - -### 3. 粘贴(Ctrl/Cmd + V) -1. 截图(Mac Cmd+Shift+4、Win Snipping Tool 等) -2. 焦点放在 AI 输入框 -3. 按 Ctrl/Cmd + V,剪贴板的图片直接进入预览区 - -## 数量与压缩规则 -- 最多 5 张并存;超出 toast「最多上传 5 张图片」 -- 自动压缩:长边 ≤ 1568px、统一转 JPEG -- 节省 token:上游按图片像素 / 大小计费 - -## 预览与移除 -- 上传后缩略图出现在输入框上方 -- 点缩略图右上角「×」单张移除 -- 发送后图片自动从「待发送」区清空 - -## 发送行为 -- 文本 + 图片**同时**作为多模态 content 发送 -- 历史会话里图片用占位符 `[image:imageId]` 存到 `data`,实际 base64 入 `images` -- 再次打开历史会话通过 `serverImageMap` 拿 URL 渲染 - -## 不支持 -- 不支持视频 / PDF / 音频 -- 不支持把图片拖到收起的浮按钮上(先展开浮窗) -- 不支持「不压缩直发」开关 - -## 相关 -- [[ai-assistant.multimodal.concept]] -- [[ai-assistant.model-switch.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/intelligent-search.md b/resources/ai-kb/zh/howto/ai-assistant/intelligent-search.md deleted file mode 100644 index f582c2087..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/intelligent-search.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: ai-assistant.intelligent-search.howto -title: 让 AI 做智能搜索 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 智能搜索 - - AI 搜一下 - - 全站搜索 - - 找一下 X - - 不知道在哪 - - 跨模块搜索 -related_tools: [intelligent_search] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 -negative: - - 只搜当前用户有权访问的内容 - - 默认结果上限 20 条,按相关度排序 - - 不返回系统设置 / 插件配置等管理项 -last_verified: v1.7.90 ---- - -# 让 AI 做智能搜索 - -## 这是什么 -当你不确定要找的东西是任务、项目、文件还是人时,让 AI 调 `intelligent_search` 工具做跨类型语义搜索,结果合并任务 / 项目 / 文件 / 联系人 / 消息五大类,按相关度统一排序。 - -## 怎么问 -- "搜一下『官网改版』有关的所有东西" -- "找下『年终报告』,不管是什么类型" -- "凡是提到上线日期的内容" -- "我想找昨天讨论的接口设计,记不清是文件还是消息" - -## 与按类型搜的区别 -- **按类型搜**(如 `search_files` / `list_tasks`):你已经知道是文件 / 任务,能给出精确筛选 -- **智能搜索**:你只有一个关键词,让 AI 跨类型匹配,相关度排序 - -## 结果通常长什么样 -分组返回: - -- 任务(前 N 条) -- 项目(前 N 条) -- 文件(前 N 条) -- 联系人(前 N 条) -- 消息(前 N 条) - -每项含标题、摘要、跳转链接,便于继续操作(打开 / 重新讨论 / 转发)。 - -## 不支持 -- 不能跨工作空间 / 跨租户搜索 -- 不返回敏感字段(密码、邮箱手机号正文不会出现在摘要) -- 不能精确按数值范围筛(如"金额 > 1000"),需用具体业务工具 - -## 相关 -- 知识库检索:[[ai-assistant.search-help-docs.howto]] -- 找文件:[[ai-assistant.search-files.howto]] -- 找任务:[[ai-assistant.list-tasks.howto]] -- 找人:[[ai-assistant.search-users.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/list-tasks.md b/resources/ai-kb/zh/howto/ai-assistant/list-tasks.md deleted file mode 100644 index 91a33705b..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/list-tasks.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -id: ai-assistant.list-tasks.howto -title: 让 AI 列我的任务 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 我今天有什么任务 - - 帮我看下任务 - - 今天的待办 - - 这周要交什么 - - 列一下任务 - - 给我看待办 - - 我有哪些任务 -related_tools: [list_tasks] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 -negative: - - 只能列出当前登录用户有权访问的任务(项目成员或负责人/协作者/可见用户) - - 一次最多返回 100 条,超出请追加筛选条件 - - 不能列别人的私有任务(即便是同部门) -last_verified: v1.7.90 ---- - -# 让 AI 列我的任务 - -## 这是什么 -在 AI 浮窗用自然语言问任务列表,AI 会调 `list_tasks` 工具检索后端,按你说的条件筛选并返回结果摘要。结果通常含任务名、负责人、截止时间、所属项目。 - -## 怎么问 -按你想筛的条件直接说: - -- "我今天到期的任务" -- "本周要交的任务" -- "项目 X 里我负责的进行中任务" -- "已逾期未完成的任务" -- "上个月完成的任务" -- "标记了高优先级且没人负责的任务" - -## AI 通常会问回的信息 -模糊提问时,AI 可能反问以缩小范围: - -- 时间范围(今天/本周/本月/自定义) -- 状态(未开始/进行中/已完成/已逾期) -- 项目限定 -- 负责人是不是你 - -## 后续动作 -列出任务后可以接续操作,无需重复说"在 X 项目": - -- "把第 2 条标完成" → 调 `complete_task` -- "打开第一条" → AI 在你的页面上跳到任务详情 -- "给小王再加一条子任务" → 调 `create_sub_task` - -## 不支持 -- 不支持跨用户查询别人的任务列表 -- 模糊筛选「重要的」「紧急的」不保证命中:依赖任务已设置对应优先级/标签字段 -- 不返回已删除任务(除非显式说"被删的任务") - -## 相关 -- 创建任务:[[ai-assistant.create-task.howto]] -- 子任务建议:[[ai-assistant.subtask-suggest.howto]] -- 打开任务详情:[[ai-assistant.page-action.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/model-switch.md b/resources/ai-kb/zh/howto/ai-assistant/model-switch.md deleted file mode 100644 index 0c27b93ae..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/model-switch.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: ai-assistant.model-switch.howto -title: 切换 AI 助手使用的模型 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 怎么换 AI 模型 - - 切换模型 - - 用 GPT 还是 Claude - - 改用别的 AI - - 模型下拉 -related_tools: [] -related_pages: [] -prerequisites: - - AI 助手浮窗已打开 - - 管理员配置了 ≥ 1 个模型 -negative: - - 切换模型不会重置当前会话历史,会带着已有 context 直接换模型续聊 - - 切模型不会回放之前的回答(不重生成已有的 message) - - 不支持把同一个问题同时发到两个模型做对比 -last_verified: v1.7.90 ---- - -# 切换 AI 助手使用的模型 - -## 入口 -- 打开 AI 助手浮窗(点浮按钮 / Cmd+I / Ctrl+I) -- 浮窗**底部输入区**有一个「模型下拉框」,左侧位置 -- 下拉按服务商分组,如 ChatGPT / Claude / DeepSeek 等 - -## 操作步骤 -1. 在浮窗底部点击模型选择下拉框 -2. 在分组列表中选目标模型(如 `Claude → claude-3.5-sonnet`) -3. 选中后立即生效,下一次发送就用新模型 - -## 选项排序逻辑 -- 服务商按 `openai` → `claude` → `deepseek` → `gemini` → `grok` → `ollama` → `zhipu` → `qianwen` → `wenxin` 固定顺序 -- 每个服务商分组最多显示 5 个候选 + 1 个管理员设置的默认模型(如不在前 5 内会追加) -- 不在 `AIBotMap` 的自定义服务商按字母序排在最后 - -## 自动记忆 -- 切换后的选择会写入 IndexedDB key `aiAssistant.model` -- 下次打开 AI 助手时自动恢复到上次用过的模型 - -## 切换后的会话影响 -- 历史消息(用户问 + AI 回)保留,会作为 context 发给新模型 -- AI 不会重新回答历史问题;只对**下一次新提问**生效 -- 多模态:如果切到不支持图片的模型,未来发图会失败(但已有图片预览仍可看) - -## 不支持 -- 不支持切换后清空历史(要清空需手动新建会话:[[ai-assistant.new-chat.howto]]) -- 不支持「这条回答用模型 A,下一条用模型 B」的单轮指定 -- 不支持下拉为空时自动 fallback(下拉空时直接禁用发送,详见 [[ai-assistant.model-empty.faq]]) - -## 相关 -- 模型概念与服务商列表:[[ai-assistant.model.concept]] -- 下拉为空:[[ai-assistant.model-empty.faq]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/new-chat.md b/resources/ai-kb/zh/howto/ai-assistant/new-chat.md deleted file mode 100644 index ffd59e24f..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/new-chat.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -id: ai-assistant.new-chat.howto -title: 新建一个 AI 助手会话 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 新建 AI 会话 - - 重新开始 AI - - 开一段新对话 - - 清空当前对话 - - 不要带上下文 - - AI 重新聊 -related_tools: [] -related_pages: [] -prerequisites: - - AI 助手浮窗已打开 -negative: - - 新建会话不会删除旧会话,只是把旧会话归档到历史列表 - - 新建会话只清空输出区与上下文,不影响模型选择 / 浮按钮位置 - - 嵌入入口的「新建」按钮不出现在浮窗,由各业务入口控制 -last_verified: v1.7.90 ---- - -# 新建一个 AI 助手会话 - -## 何时需要新建 -- 想换话题,又不希望 AI 受当前会话历史影响 -- 当前会话上下文太长,回答变慢或质量下降 -- 不想让接下来的提问污染历史 - -## 入口 -1. 打开 AI 助手浮窗 -2. 浮窗**右上角操作区**有一个「新建会话」图标 -3. 仅当 `sessionEnabled = true` **且**(当前会话有消息 **或** 历史列表非空)时显示 - -## 行为 -点击「新建会话」按钮: -1. 当前会话**自动保存**到历史列表(标题取首条提问前 20 字) -2. 生成新 `session_id`(格式 `session-{时间戳}-{随机串}`) -3. 清空 `responses`,页面输出区清空 -4. 上下文 context 归零,下一次提问只发当前消息 + 默认 system prompt -5. 当前模型选择保留 - -## 不会影响什么 -- 模型下拉的当前选择 -- 浮按钮位置 / 收起状态 -- 历史会话列表(仅多一条) -- 图片缓存(已发送过的图片仍可被历史引用) - -## 其他「新建」的等价路径 -- **删除当前会话**:不想留底就直接删除当前会话,会自动建一个空会话进入(见 [[ai-assistant.session-delete.howto]]) -- **切到其他历史会话**:会切走当前会话,但当前会话仍保留在历史里 - -## 不支持 -- 不支持「新建会话同时换模型」(先切模型再新建) -- 不支持「新建空会话但保留前一轮上下文」 -- 不支持指定新会话标题(永远自动生成) - -## 相关 -- [[ai-assistant.session.concept]] -- [[ai-assistant.session-list.howto]] -- [[ai-assistant.session-save.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/page-action.md b/resources/ai-kb/zh/howto/ai-assistant/page-action.md deleted file mode 100644 index 98103045f..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/page-action.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -id: ai-assistant.page-action.howto -title: 让 AI 帮我跳页面/打开任务 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 打开任务 - - AI 切换项目 - - AI 跳到仪表盘 - - 让 AI 帮我开 X - - AI 跳转 - - AI 帮我打开 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 - - 浏览器/桌面端会话所在页面已加载 -negative: - - 只在当前浏览器标签内导航,不会新开标签 - - AI 不能打开你没权限访问的资源(会被后端拒绝) - - 若任务被删,AI 跳转后会落到 404 / 提示「任务不存在」 -last_verified: v1.7.91 ---- - -# 让 AI 帮我跳页面/打开任务 - -## 这是什么 -在 AI 浮窗用自然语言让 AI 把当前页跳转到任务详情、对话、项目、文件预览或功能页。AI 助手会在你当前的浏览器/桌面端页面上执行真实路由跳转。 - -## 怎么问 -- "打开任务 1234" -- "切到项目『官网改版』" -- "打开和小王的对话" -- "帮我打开仪表盘" -- "跳到日历" -- "打开文件 ID 5678" -- "关闭这个应用" / "把当前应用关掉"(打开微应用插件后,可让 AI 直接关闭当前应用窗口,无需自己点关闭按钮) - -## 支持的跳转目标 -- 任务详情(open_task / goto_task / navigate_to_task) -- 对话(open_dialog,可附带 msg_id 跳到指定消息) -- 项目主页(open_project) -- 文件预览(open_file)/ 文件夹(open_folder) -- 功能页:仪表盘 / 消息 / 日历 / 文件管理 - -## AI 怎么找到目标 -- 你给 ID 时直接跳 -- 你给名字时 AI 会先调 `list_tasks` / `search_dialogs` / `list_projects` / `search_files` 找候选 -- 同名多选时列候选让你确认 - -## 跳转后还能继续 -跳到目标页后,浮窗保持打开,可继续: - -- "把它标完成" → 调 `complete_task` -- "看下讨论" → 调 `get_message_list` -- "拉到底部" → AI 在你的页面上滚动到底部 - -## 不支持 -- 不能跳到外部网址(如 google.com) -- 不能在新标签打开 -- 不能切换到其他用户的视图 - -## 相关 -- 操作页面元素:[[ai-assistant.element-action.howto]] -- 页面操作机制:[[ai-assistant.page-action.concept]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/project-init.md b/resources/ai-kb/zh/howto/ai-assistant/project-init.md deleted file mode 100644 index 5efc870a1..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/project-init.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: ai-assistant.project-init.howto -title: 让 AI 生成项目结构 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 建项目 - - AI 生成项目模板 - - 项目结构 AI - - AI 帮我搭项目 - - 新项目让 AI 写 - - 创建项目时的 AI 按钮 -related_tools: [create_project, create_task] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 管理员已开启至少一个支持 tool call 的模型 -negative: - - 仅生成项目骨架(列 + 初始任务),不生成成员/权限设置 - - 一次最多生成 5 个列 + 每列 6 条任务,超出请二次追加 - - 不会自动创建已存在同名项目(会提示重命名) -last_verified: v1.7.90 ---- - -# 让 AI 生成项目结构 - -## 这是什么 -在「创建项目」弹窗里,项目名输入框右侧有 AI 按钮(仅 ai 插件已装且模型已配置时显示)。点击后描述项目目标,AI 会调 `create_project` 创建项目,再用 `create_task` 批量写入推荐的列和初始任务。 - -## 入口 -- 桌面端:右上角全局「+」→「创建项目」→ 项目名输入框右侧 AI 图标 -- 桌面端:左侧栏「项目」→「+」→「创建项目」→ 同上 -- 移动端:「+」→「创建项目」→ AI 按钮 - -## 操作步骤 -1. 打开创建项目弹窗,点项目名旁 AI 按钮 -2. 输入项目描述(如"3 个月官网改版,含 UI/前端/后端") -3. AI 生成项目名 + 列结构 + 每列初始任务预览 -4. 点「采用并创建」批量建 - -## AI 输出示例 -- **项目名**:官网改版 2026Q1 -- **列**:待办 / 设计中 / 开发中 / 测试中 / 已完成 -- **任务**:每列 3-6 条按角色分组 - -## 后续动作 -项目创建完成后可继续: - -- "把这些任务都分给小王" → 调 `update_task` 批量改负责人 -- "再加一个『设计评审』列" → 调列管理工具 -- "把项目讨论组拉一下" → AI 暂不能自动建群 - -## 不支持 -- 不能基于其他项目复制(要复制项目请用模板功能) -- AI 不会自动设置任务截止时间,需后续追加 -- 创建后想撤销只能手动删项目(无 undo) - -## 相关 -- 浮窗里建单个任务:[[ai-assistant.create-task.howto]] -- 入口总览:[[ai-assistant.entry.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/report-draft.md b/resources/ai-kb/zh/howto/ai-assistant/report-draft.md deleted file mode 100644 index d44fb8ed9..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/report-draft.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: ai-assistant.report-draft.howto -title: 用 AI 助手整理工作报告 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 写周报 - - AI 生成日报 - - 周报模板 AI - - AI 帮我写报告 - - 工作总结 AI - - AI 整理汇报怎么用 -related_tools: [generate_report_template] -related_pages: [] -prerequisites: - - 应用商店(应用市场)已安装 ai 插件 - - 管理员已配置至少一个可用 AI 模型 -negative: - - AI 做的是「整理润色」,不是从零代写:汇报内容为空时按钮会提示「请先填写汇报内容」 - - 整理结果是草稿,需用户人工审阅、修改、手动提交(不自动发送) - - 数据来源是周期内的任务记录,不读群聊 -last_verified: v1.7.90 ---- - -# 用 AI 助手整理工作报告 - -## 这是什么 -写工作报告(日报 / 周报)时,可以让 AI 助手基于已填写的汇报内容做整理和润色。新建报告时系统已按你周期内的任务(已完成 / 未完成)自动生成内容初稿,AI 在此基础上加工,不会替你从零编造。 - -## 入口 -桌面端:工作报告编辑页(「应用」→「工作报告」→ 写报告)底部,「提交」按钮旁的「**AI 整理汇报**」按钮。 - -## 操作步骤 -1. 进入报告编辑页,选择类型(日报 / 周报),系统自动按任务生成汇报内容初稿 -2. 先补充 / 修改汇报内容(内容为空时点按钮会提示「请先填写汇报内容」) -3. 点「AI 整理汇报」,弹出 AI 助手浮窗,可输入想强调的重点或特殊说明 -4. AI 在已填内容基础上整理、润色、生成总结 -5. 把整理结果应用回编辑器,人工检查后点「提交」 - -## 让结果更贴合需求 -在浮窗里补充说明,例如: - -- "重点写官网改版项目,其他一笔带过" -- "口语化一点 / 更正式一点" -- "用英文写" - -## 不支持 -- 不会自动提交(始终需要人工点提交) -- 不会跨用户整理(只能处理自己的报告) -- 汇报内容为空时不能直接生成,必须先填写内容 - -## 相关 -- 报告编辑页按钮详情:[[report.ai-generate.howto]] -- 总结任务:[[ai-assistant.task-summary.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/search-files.md b/resources/ai-kb/zh/howto/ai-assistant/search-files.md deleted file mode 100644 index a4dc081fb..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/search-files.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: ai-assistant.search-files.howto -title: 让 AI 帮我找文件 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 找文件 - - 帮我找文档 - - AI 查文件 - - 我上传过的 X 文件 - - 找上次那个表 - - 谁分享过 X -related_tools: [search_files] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 -negative: - - 仅搜当前用户可见的文件(自己上传的 + 项目共享的 + 群里共享的) - - 不能搜本地未上传到 DooTask 的文件 - - 文件内容搜索仅对支持解析的格式有效(txt/md/docx/pdf/xlsx 等) -last_verified: v1.7.90 ---- - -# 让 AI 帮我找文件 - -## 这是什么 -在 AI 浮窗描述要找的文件,AI 调 `search_files` 工具按文件名 / 内容关键词 / 创建人 / 时间检索,返回文件名、路径、所有者、修改时间,常带跳转链接。 - -## 怎么问 -- "找一下我上周上传的 PRD 文档" -- "搜叫『2026 年规划』的 Excel" -- "项目 X 里所有 .pdf" -- "小王最近共享给我的文件" -- "包含『接口文档』关键字的文件" - -## 内容搜索 vs 文件名搜索 -- 提问含"文件名"、"叫…"时按文件名匹配 -- 提问含"包含…"、"提到…"、"关于…"时按内容关键词匹配(需后端文件内容索引可用) - -## 找到文件能继续做什么 -- "打开第一个" → AI 在你的页面上跳到文件预览 -- "下载它" → AI 会给下载链接(无法直接触发浏览器下载) -- "把摘要发我" → 调 `fetch_file_content` 取文本,再让模型总结 - -## 不支持 -- 不支持搜历史版本/已删除文件(默认过滤) -- 加密文件(如带密码 PDF)的内容索引可能为空,只能文件名匹配 -- 不能跨用户搜别人不共享给你的文件 - -## 相关 -- 取文件文字内容:`fetch_file_content`(暂未单独 chunk) -- 跨类型语义搜索:[[ai-assistant.intelligent-search.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/search-help-docs.md b/resources/ai-kb/zh/howto/ai-assistant/search-help-docs.md deleted file mode 100644 index 61042fc12..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/search-help-docs.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: ai-assistant.search-help-docs.howto -title: AI 帮我查 DooTask 怎么用 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 怎么用 DooTask - - X 在哪 - - X 怎么操作 - - 帮我查文档 - - DooTask 怎么做 X - - 找帮助 -related_tools: [search_help_docs] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 -negative: - - 知识库只覆盖 DooTask 自身功能,不回答行业知识或通用 IT 问题 - - 中英文知识库分别检索,所选会话语种决定查哪边 - - 没找到资料时 AI 会明示「未在知识库找到」而不是编造 -last_verified: v1.7.90 ---- - -# AI 帮我查 DooTask 怎么用 - -## 这是什么 -当你在 AI 浮窗里问 DooTask 功能怎么用,例如"任务怎么设置可见用户"、"报告模板在哪改",AI 会自动触发 `search_help_docs` 工具,从内置知识库(本仓库)检索相关 chunk,再综合给出步骤。 - -## 怎么触发 -直接用自然语言提问,无需特殊指令: - -- "如何创建项目?" -- "权限不足提示怎么解决?" -- "看板列怎么加?" -- "微应用是什么?" -- "签到怎么补打?" - -## 看 AI 调用了哪些资料 -- 浮窗中会出现 `search_help_docs` 工具气泡,展开可看检索关键词 -- 回答末尾通常会标注"参考自帮助文档"或附上相关功能名 -- 若回答错了,可继续追问"你查到的是哪一篇?",AI 会列出 chunk id - -## 让 AI 查得更准的小技巧 -- 一次只问一个具体功能,别堆三个问题 -- 出错时把错误提示原文贴上,AI 会同时去查 FAQ 类 chunk -- 含产品名加上"DooTask"前缀(如"DooTask 的看板")能避开开放知识 - -## 不支持 -- 不支持「教我怎么编程」「我项目用 React 怎么写」等编程问题 -- 英文知识库覆盖不全:知识库以中文为主,英文环境检索 en 库时覆盖度可能偏低 - -## 相关 -- 入口:[[ai-assistant.entry.howto]] -- 跨任务/项目/文件的语义搜索:[[ai-assistant.intelligent-search.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/search-users.md b/resources/ai-kb/zh/howto/ai-assistant/search-users.md deleted file mode 100644 index 1b5d4d48c..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/search-users.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -id: ai-assistant.search-users.howto -title: 让 AI 帮我找人 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 找人 - - AI 查同事 - - 帮我找小王 - - 找联系人 - - 找用户 - - 谁是 X 部门负责人 -related_tools: [search_users] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 -negative: - - 搜索范围受当前用户可见性限制,不能搜到组织外的人 - - 同名用户会一并列出,需用工号/部门/邮箱再筛 - - 不返回登录密码、手机号等敏感字段 -last_verified: v1.7.90 ---- - -# 让 AI 帮我找人 - -## 这是什么 -在 AI 浮窗问人,AI 调 `search_users` 工具按关键词、项目成员或对话成员筛选,返回昵称、邮箱、部门、头像等基础信息。常用于"加任务负责人 / 拉群"前的确认。 - -## 怎么问 -- "找一下叫小王的同事" -- "运维部有哪些人" -- "项目『官网改版』里都有谁" -- "群『前端组』里的成员" -- "邮箱含 zhang 的同事" - -## 同名怎么办 -AI 会列出全部同名候选,附部门/邮箱 hint,让你回复"第 2 个"或"运维部那个",再继续后续操作。 - -## 找到人之后能做什么 -- "给他发消息:明天 10 点开会" → 调 `send_message` -- "把他加进这个项目任务的负责人" → 调 `update_task` -- "拉个群把他们都加进去" → 仍需人工操作建群(AI 不能自动建群) - -## 限制范围 -默认搜全组织可见用户。可以加范围词收窄: - -- "项目 X 里的" -- "对话 Y 里的" -- "部门 Z 里的" - -## 不支持 -- 不能搜外部联系人(DooTask 没有公网通讯录) -- 不能搜已离职/已禁用账号(默认过滤) -- 不能按"今天在线的人"筛(无该字段) - -## 相关 -- 发消息:[[ai-assistant.send-message.howto]] -- 创建任务时指派人:[[ai-assistant.create-task.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/send-message.md b/resources/ai-kb/zh/howto/ai-assistant/send-message.md deleted file mode 100644 index 70f6da959..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/send-message.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: ai-assistant.send-message.howto -title: 让 AI 帮我发消息 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 发消息 - - AI 发群 - - 帮我发给小王 - - AI 自动发通知 - - 让 AI 发到群里 - - AI 代发 -related_tools: [send_message] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 - - 当前用户与目标对话/用户已存在会话或有权发起 -negative: - - 发送动作以当前登录用户名义执行,对方看到的是你发的(不是「AI 代发」标签) - - AI 不会未经确认直接发,敏感/长内容会先弹消息预览让你确认 - - 不能发送已撤回/未上传完成的图片 -last_verified: v1.7.90 ---- - -# 让 AI 帮我发消息 - -## 这是什么 -在 AI 浮窗描述要发的内容和对象,AI 会先调 `search_dialogs` 或 `search_users` 找到目标对话,再调 `send_message` 把消息发出去。消息以当前登录用户身份发送。 - -## 怎么问 -- "给小王发:会议改到下午 3 点" -- "在『前端组』群里发:今晚 8 点上线,请大家配合" -- "把刚才那个总结发到项目讨论组" - -## AI 会先确认 -- **接收人/群歧义**:同名时列候选让你挑 -- **长消息**:超过 200 字会先在浮窗里贴出预览,等你说「确认发」 -- **跨群广播**:一次发多群通常会拆成多次确认 - -## 发送结果 -发送成功后浮窗会显示消息 ID + 时间戳;如果对方禁言/不在好友列表/对话不存在,会回失败原因。 - -## 后续动作 -- "撤回刚才那条" → 调 `update_message` 或 `delete_message`(依实现) -- "看下回复" → 调 `get_message_list` -- "发完顺便建个任务跟进" → 调 `create_task` - -## 不支持 -- 不能发语音/视频通话邀请 -- 不能定时发送(无 schedule 工具) -- 不能伪装其他用户发送 -- AI 不会自动把"@小王"翻成用户 mention,需要明确说"@用户 ID" - -## 相关 -- 找人:[[ai-assistant.search-users.howto]] -- 任务讨论区 @AI:[[ai-assistant.task-mention.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/session-delete.md b/resources/ai-kb/zh/howto/ai-assistant/session-delete.md deleted file mode 100644 index f1be7c09f..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/session-delete.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: ai-assistant.session-delete.howto -title: 删除 AI 助手历史会话 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 删除 AI 历史 - - 清空 AI 对话 - - 删除 AI 会话 - - AI 历史不要了 - - 删除 AI 聊天记录 -related_tools: [] -related_pages: [] -prerequisites: - - 当前桶有 ≥ 1 条会话 -negative: - - 删除不可恢复,相关图片也会从 public/uploads 物理删除 - - 删除单条无二次确认;清空全部有确认弹窗 - - 删除当前桶不会影响其他桶 -last_verified: v1.7.90 ---- - -# 删除 AI 助手历史会话 - -## 入口 -1. 打开 AI 助手浮窗 -2. 浮窗右上角点「历史」图标展开下拉 - -## 删除单条 -1. 鼠标移到目标会话条目上 -2. 点条目右侧小垃圾桶图标 -3. **立即删除**(无确认): - - 后端调 `POST api/assistant/session/delete`,参数 `{session_key, session_id}` - - 服务端删除会话记录及对应 `public/uploads/assistant/YYYYMM/{userid}/` 图片 - - 如果删的是当前打开的会话,自动新建一个空会话替代 - -## 清空整个桶(全部历史) -1. 历史下拉最底部「清空历史记录」 -2. 弹出确认弹窗 → 「确定」 -3. 执行: - - 调 `POST api/assistant/session/delete`,参数 `{session_key, clear_all: true}` - - 后端清空当前桶所有会话 + 物理删除所有图片 - - 前端清空内存 `imageCache` 和 `serverImageMap` - - 自动新建一个空会话进入 - -## 不影响其他桶 -- 浮窗用 `session_key = global`,清空只删 `global` 桶 -- 嵌入入口(`project-create`、`task-add` 等)的会话**不受影响** - -## 误删可恢复吗? -**不能。** 删除即写库 `DELETE`,物理删除关联图片,**无回收站、无 30 天保留**。要保留的对话请提前复制到笔记。 - -## 不支持 -- 不支持选择多条批量删除(只能单删或清空全部) -- 不支持「软删除 / 30 天回收」 -- 不支持按时间范围筛选删除 - -## 相关 -- [[ai-assistant.session-list.howto]] -- [[ai-assistant.session.concept]] -- [[ai-assistant.new-chat.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/session-list.md b/resources/ai-kb/zh/howto/ai-assistant/session-list.md deleted file mode 100644 index 36719b325..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/session-list.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -id: ai-assistant.session-list.howto -title: 查看 AI 助手历史会话 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 历史会话 - - 我之前问过 AI 什么 - - 找回 AI 对话 - - AI 聊天记录 - - 看 AI 历史 -related_tools: [] -related_pages: [] -prerequisites: - - 当前桶至少有 1 条已保存的会话 -negative: - - 历史只显示当前用户、当前桶的会话 - - 嵌入入口的会话不出现在浮窗历史里 - - 历史按更新时间倒序,最近的在上面 -last_verified: v1.7.90 ---- - -# 查看 AI 助手历史会话 - -## 入口 -1. 打开 AI 助手浮窗 -2. 浮窗**右上角操作区**有「历史」图标 -3. 点击展开下拉,列出当前桶内所有已保存会话 - -仅当桶内有 ≥ 1 条会话时该图标才出现。 - -## 显示内容 -每条会话显示三行: -- 标题:取首条用户消息前 20 字 -- 删除按钮(右上角小垃圾桶) -- 更新时间:今天 / 昨天 / MM-DD HH:mm / YYYY-MM-DD HH:mm - -排序:按更新时间倒序,最近聊的在最上面。 - -## 操作步骤 - -### 切换到某条历史会话 -1. 在历史下拉里点要打开的会话标题 -2. 当前对话内容自动保存 -3. 浮窗输出区切换为该会话的消息流 - -### 删除单条会话 -1. 鼠标移到会话条目上 -2. 点条目右侧小垃圾桶图标 -3. 立即删除(无二次确认);同时清掉服务端会话图片 - -### 清空全部历史 -1. 历史下拉最底部「清空历史记录」 -2. 弹出确认弹窗 → 「确定」 -3. 当前桶所有会话被删,图片缓存一并清空 - -## 数据来源 -通过 `POST api/assistant/session/list` 拉取,按当前用户 + 当前 `session_key` 过滤。返回会话最多 20 条(受 `maxSessionsPerKey` 限制)。 - -## 不支持 -- 不支持按关键词搜索历史 -- 不支持给会话改名(标题永远是首条提问截取) -- 不支持把历史导出 CSV / 文本 - -## 相关 -- [[ai-assistant.session.concept]] -- [[ai-assistant.session-delete.howto]] -- [[ai-assistant.new-chat.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/session-save.md b/resources/ai-kb/zh/howto/ai-assistant/session-save.md deleted file mode 100644 index fad5295e8..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/session-save.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -id: ai-assistant.session-save.howto -title: AI 助手会话自动保存 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 会话保存 - - AI 对话留底 - - AI 会话不保留 - - AI 没保存 - - 手动保存 AI -related_tools: [] -related_pages: [] -prerequisites: - - 会话管理已启用(`sessionEnabled = true`,浮窗自动开启) -negative: - - 没有「立即保存」按钮,全部自动;不会丢失最新一条 - - 嵌入入口未传 sessionKey 时不会启用保存(一次性对话) - - streaming / waiting 状态会被归一为 error 再写库,避免重启卡 loading -last_verified: v1.7.90 ---- - -# AI 助手会话自动保存 - -## 是否需要手动保存 -**不需要。** AI 助手浮窗的会话保存全自动。以下时机触发保存: - -1. **流式回答完成**:AI 最后一个 chunk 到达,标记 `completed` 后立即保存 -2. **流式失败 / 用户中断**:归一未完成态为 `error` 后保存 -3. **手动新建会话 / 切换会话 / 切桶**:先保存当前会话再切换 -4. **常规编辑(删消息、编辑提问)**:2 秒防抖批量写入 - -## 保存到哪 -- 数据库表:`ai_assistant_sessions`,按 `userid` 隔离 -- 接口:`POST api/assistant/session/save` -- 字段:`session_key`、`session_id`、`title`、`data`(JSON 消息流)、`new_images`(新增图片 base64 列表) - -## 标题如何生成 -- 取首条 `role !== 'system'` 的 `prompt` 前 20 字 -- 无任何用户提问时显示「新会话」 -- 标题不可手动改 - -## 图片同步上传 -- 保存时仅传**本次新增**的图片 base64 -- 后端写入 `public/uploads/assistant/YYYYMM/{userid}/xxx.jpg` -- 返回 `image_urls` 映射,前端缓存到 `serverImageMap`,下次打开会话用 URL 显示 - -## 防抖与容错 -- 普通编辑 2 秒防抖 -- 流式结束 / 失败立即写入 -- 写入失败仅 console.warn,下次保存补上 - -## 什么时候不保存 -- 嵌入入口未传 sessionKey → 该入口走「一次性对话」,关闭后不留底 -- 当前会话内一条消息都没有 → 不创建空会话记录 - -## 不支持 -- 不支持云端跨用户 / 跨工作区同步 -- 不支持「保存到本地文件」选项 -- 不支持暂停自动保存 - -## 相关 -- [[ai-assistant.session.concept]] -- [[ai-assistant.session-list.howto]] -- [[ai-assistant.stop.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/shortcut.md b/resources/ai-kb/zh/howto/ai-assistant/shortcut.md deleted file mode 100644 index 401d2b131..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/shortcut.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: ai-assistant.shortcut.howto -title: 用快捷键呼出 AI 助手 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 助手快捷键 - - 怎么用键盘打开 AI - - Cmd I - - Ctrl I - - AI 键盘打开 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 - - 管理员已配置至少一个 AI 模型 -negative: - - 移动端没有键盘快捷键(用浮按钮 / Tabbar 入口替代) - - 不支持自定义快捷键,固定为 Cmd+I / Ctrl+I - - 在输入法候选状态下按 I 不会触发(不和 IME 抢键位) -last_verified: v1.7.90 ---- - -# 用快捷键呼出 AI 助手 - -## 快捷键 - -| 终端 | 快捷键 | 说明 | -|---|---|---| -| macOS(桌面 / Web) | `Cmd + I` | 全局生效,无需点输入框 | -| Windows / Linux(桌面 / Web) | `Ctrl + I` | 全局生效 | -| 移动端 | — | 无键盘快捷键 | - -## 触发条件 -- ai 插件已安装(`microAppsIds.includes('ai')` 为 true) -- 当前在已登录页面(路由非 `login`) -- 按键时**未同时按 Shift 或 Alt**,否则会落入其他组合(如 Cmd+Shift+I 是浏览器开发者工具) - -## 行为 -按下快捷键时,等价于点击右上角全局「+」菜单里的「AI 助手」项,会: -1. 阻止浏览器 / Electron 默认行为(如 Safari 的「显示书签栏」) -2. 触发 `openAIAssistantGlobal` 事件 -3. 弹出 AI 助手弹窗(默认 modal 形态),自动聚焦到输入框 - -## 不响应的场景 -- 当前页面是登录页 → 不触发 -- ai 插件未安装 → 不触发(按键被释放给浏览器) -- 中文 / 日文输入法处于候选字状态 → 不触发 - -## 不支持 -- 无法在「个人设置」改快捷键,键位固定 -- 不支持单独的「关闭 AI 助手」快捷键;按 Esc 仅在浮窗模式下关闭 -- 移动端长按虚拟键盘 I 不能触发(依赖物理键盘事件) - -## 相关 -- 完整入口清单:[[ai-assistant.entry.howto]] -- 弹窗形态:[[ai-assistant.modal.concept]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/start-guide.md b/resources/ai-kb/zh/howto/ai-assistant/start-guide.md deleted file mode 100644 index 04d17a6a4..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/start-guide.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -id: ai-assistant.start-guide.howto -title: 让 AI 带我去对应页面(页面深链) -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 带我去 - - 带我操作 - - 在哪里设置 - - 怎么去 - - 快捷跳转 -related_tools: [] -related_pages: [] -prerequisites: - - 应用市场已安装 ai 插件 -negative: - - 通过聊天对话 @AI 机器人暂不支持页面深链,需在 AI 助手浮窗中使用 -last_verified: v1.7.90 ---- - -# 让 AI 带我去对应页面(页面深链) - -## 怎么做 -1. 打开 AI 助手浮窗(右下角悬浮按钮) -2. 问一个“在哪/怎么去”类问题,例如「在哪里设置端到端加密」「个人资料怎么改」 -3. AI 回答里把可跳转的页面/面板渲染成**蓝色链接**,点击即直达那一屏 - -## 例子 -- 问「在哪里设置端到端加密」→ 回答里「系统设置」是蓝色链接,点它直达系统设置页 -- 问「怎么改个人资料」→ 点「个人设置」直达个人设置 - -## 到达之后 -深链把你送到对应页面/面板,页面内的具体开关/按钮请按回答里的文字说明自己操作一下即可。 - -## 链接没出现 / 不可点怎么办 -- 不是每个名词都会变成链接,只有命中系统已登记目的地的词才可点,其余是普通文字——可换个更明确的问法(如直接问「系统设置在哪」) -- 若回答说“文档未说明”,多为知识库未覆盖该功能,可点踩 👎 反馈 - -## 相关 -- 深链是什么:[[ai-assistant.guide.concept]] -- 回答不好怎么反馈:[[ai-assistant.feedback.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/stop.md b/resources/ai-kb/zh/howto/ai-assistant/stop.md deleted file mode 100644 index 520e99c36..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/stop.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: ai-assistant.stop.howto -title: 中断 AI 助手回答 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 停止 AI 回答 - - 让 AI 停下来 - - 取消 AI 输出 - - AI 一直在打字 - - 终止流式 - - 重发问题 -related_tools: [] -related_pages: [] -prerequisites: - - AI 助手当前有一条流式回答正在输出 -negative: - - 中断后的部分回答保留,但状态变为 error,不会再续传 - - 中断不向上游模型扣费返还(看服务商) - - 不支持「暂停后再继续」,只能停 + 重新提问 -last_verified: v1.7.90 ---- - -# 中断 AI 助手回答 - -## 何时需要中断 -- AI 跑偏,回答方向不对,想立即停下重提问 -- 模型陷入冗长输出 -- 想换个模型重发同一问题 - -## 入口 -当 AI 正在流式输出时,主动中断方式: -1. **新建会话**:右上角「新建会话」会先清掉当前流再开空会话(见 [[ai-assistant.new-chat.howto]]) -2. **关闭浮窗**:关闭浮窗会清理所有活跃 SSE 连接(见 [[ai-assistant.close.howto]]) -3. **发新问题**:发起新提问会自动清掉同会话的残留 SSE 流 - -## 中断时发生了什么 -1. 前端调 SSE 客户端的 `unsunscribe()` 切断连接 -2. 已收到的部分回答(rawOutput)保留在 message -3. 该 message 的 `status` 立即变为 `error`,附「会话中断」错误文案 -4. message 持久化到 session(带 error 状态),刷新不会再卡 loading - -## 流式中断恢复保护 -- 即使页面崩溃 / 刷新,加载会话时如果发现某条 message 仍是 `streaming` 或 `waiting`,会自动归一为 `error` -- 避免「永远转圈」(见 `sanitizeResponsesForPersist`) - -## 重新提问 -中断后想重发同一问题: -1. 鼠标移到刚才被中断的提问气泡 -2. 点编辑图标 → 修改后再发 -3. 或直接在输入框输入新的问题(按 ↑ 可调出最近 50 条历史输入) - -## 不支持 -- 不支持「暂停 → 继续」,只能停 + 重发 -- 不支持只中断单条;同会话所有进行中的流会一起停 -- 不支持中断后撤销(再次发送会生成新一条 message) - -## 相关 -- [[ai-assistant.streaming.concept]] -- [[ai-assistant.close.howto]] -- [[ai-assistant.new-chat.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/subtask-suggest.md b/resources/ai-kb/zh/howto/ai-assistant/subtask-suggest.md deleted file mode 100644 index 94800c34c..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/subtask-suggest.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: ai-assistant.subtask-suggest.howto -title: 让 AI 帮我拆子任务 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 拆任务 - - AI 建议子任务 - - 拆解任务 - - AI 帮我分解 - - 任务太大怎么拆 - - 子任务建议 -related_tools: [create_sub_task] -related_pages: [task_detail] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 - - 当前用户能修改该任务(负责人/协作者/项目管理员) -negative: - - AI 建议不会自动落地,需用户在回复里点「全部创建」或逐条确认 - - 一次最多建议 10 条子任务,复杂任务可分多次 - - AI 拆分依赖任务标题 + 描述,描述过短时建议会很泛 -last_verified: v1.7.90 ---- - -# 让 AI 帮我拆子任务 - -## 这是什么 -在任务讨论区 @AI 让它根据当前任务的标题、描述自动建议一组子任务清单,确认后通过 `create_sub_task` 工具一次性建到当前任务下。 - -## 怎么触发 -- **任务讨论区**:@AI 说"帮我拆 5 个子任务" / "把这个任务分解成执行步骤" -- **浮窗**:先 `open_task` 或带上任务 ID,然后说"按这个任务拆子任务" - -## AI 通常会返回 -1. 一组建议条目(如「需求评审 / 设计稿 / 前端开发 / 后端开发 / 联调测试 / 上线」) -2. 每条带预估负责人角色提示 -3. 末尾问"是否一键创建" - -## 操作步骤 -1. 打开任务详情 → 讨论区 @AI -2. 提示词如"按当前任务拆 5 个子任务,包括负责人建议" -3. AI 列出建议 -4. 回复"全部创建",AI 调 `create_sub_task` 逐条建 -5. 若想改某条 → 回复"第 2 条改成 X",AI 重发建议 -6. 创建完成后讨论区会出现"已新建 N 条子任务"提示 - -## 不支持 -- 子任务仅支持 1 层(AI 不会再为子任务建孙任务,建会被后端拒绝) -- 拆分不会自动设置截止时间,需后续追加"第 1 条截止 X 日" -- AI 不会自动分配人选,需追加"分给前端组成员" - -## 相关 -- 子任务概念:[[task.subtask.concept]] -- 任务讨论区 @AI:[[ai-assistant.task-mention.howto]] -- 创建任务:[[ai-assistant.create-task.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/task-mention.md b/resources/ai-kb/zh/howto/ai-assistant/task-mention.md deleted file mode 100644 index 013cb333a..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/task-mention.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -id: ai-assistant.task-mention.howto -title: 任务讨论区里 @AI -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - 任务里 @AI - - 在任务下 at AI - - AI 分析任务 - - 让 AI 看下这个任务 - - 任务讨论 @ 机器人 - - AI 接进任务 -related_tools: [send_task_ai_message] -related_pages: [task_detail] -prerequisites: - - 应用市场已安装 ai 插件 - - 管理员已开启至少一个支持 tool call 的模型 - - 当前用户可访问该任务 -negative: - - "@AI 后的提问会被全部讨论区成员看到(公开提问)" - - "AI 仅读取本任务的标题、描述、子任务、评论作为上下文,不会跨任务查" - - "群里 @AI 与任务讨论区 @AI 是两条不同链路,结果格式略有差异" -last_verified: v1.7.90 ---- - -# 任务讨论区里 @AI - -## 这是什么 -在任务详情页的「讨论」区输入框 @AI(出现在 @ 下拉列表里)然后提问,AI 会以任务上下文(标题/描述/子任务/讨论历史)为基础回答,结果同步发到讨论区,所有成员可见。 - -## 入口 -- 桌面端:任务详情页 → 右侧/底部「讨论」标签 → @ → 选「AI」 -- 移动端:任务详情页 → 「讨论」→ @ → 选「AI」 - -## 操作步骤 -1. 打开任务详情,切到「讨论」 -2. 在评论输入框输入 `@` 弹出候选 -3. 选「AI 助手」 -4. 输入提问(如"帮我看下这个任务还差什么") -5. 发送,AI 会以消息形式回答到同一条讨论 - -## 适合问的 -- "总结一下这个任务的进展" -- "根据描述帮我拆 5 个子任务" -- "讨论里大家在争什么?给我个概要" -- "下一步建议怎么做" - -## 与浮窗 AI 的区别 -- 浮窗:单人会话,结果只你能看到,可调全部工具 -- 任务 @AI:公开讨论,回答全员可见,主要做总结/分析,少调改写类工具 - -## 不支持 -- 不能 @AI 后让它跨任务汇总(要总结多个任务请用浮窗) -- 不能私聊它(@AI 的所有回复都对讨论区可见) -- 任务设有可见用户白名单时,名单外的人看不到 AI 回复 - -## 相关 -- 子任务建议:[[ai-assistant.subtask-suggest.howto]] -- 任务总结:[[ai-assistant.task-summary.howto]] -- 浮窗入口:[[ai-assistant.entry.howto]] diff --git a/resources/ai-kb/zh/howto/ai-assistant/task-summary.md b/resources/ai-kb/zh/howto/ai-assistant/task-summary.md deleted file mode 100644 index 303dc7ced..000000000 --- a/resources/ai-kb/zh/howto/ai-assistant/task-summary.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: ai-assistant.task-summary.howto -title: 让 AI 总结任务进展 -type: howto -feature: ai-assistant -scope: end-user -locale: zh -aliases: - - AI 总结任务 - - 任务进展总结 - - AI 看下进度 - - 帮我汇总任务 - - 任务状态怎么样 - - AI 复盘任务 -related_tools: [get_task, get_message_list] -related_pages: [task_detail] -prerequisites: - - 应用市场已安装 ai 插件 - - 应用市场已安装 mcp_server 插件 - - 当前用户可访问该任务 -negative: - - 总结仅基于任务详情 + 讨论历史 + 子任务状态,不读外部资料 - - 不会改任务状态,只读后输出文本 - - 历史评论超 100 条时只取最近 100 条 -last_verified: v1.7.90 ---- - -# 让 AI 总结任务进展 - -## 这是什么 -让 AI 读取一个任务的标题、描述、子任务、讨论记录,输出当前进展概要,常用于会议汇报、周报、交接。AI 调 `get_task` + `get_message_list` 两个工具取数据,再综合生成。 - -## 怎么触发 -- **任务讨论区** @AI:"总结一下这个任务到现在的进展" -- **浮窗**:"帮我总结任务 ID 1234 的进展" 或先调 `open_task` 再说"总结这个" -- **批量**:浮窗里说"帮我总结项目 X 下所有进行中的任务" → AI 会先 `list_tasks` 再逐个总结 - -## 总结内容通常包含 -- 任务当前状态(未开始 / 进行中 / 已完成 / 已逾期) -- 子任务完成度(如 3/5) -- 关键讨论结论(最近的决策点) -- 待解决/阻塞项(从评论中提取"需要"/"阻塞"/"等"等关键词) -- 下一步建议(可选) - -## 让总结更准 -- 模糊任务请加 ID 或唯一标题词 -- 想突出某一面("只说阻塞"、"只说进度数字")就在提问中明示 -- 想发到群/写进报告 → 让 AI 直接 `send_message` 或追加"作为周报素材" - -## 不支持 -- 不会自动汇总跨项目(除非显式列出任务 ID) -- 不读取任务附件正文(如 PDF 内容),需先 `fetch_file_content` -- 不能生成图表/甘特图,只输出文字 - -## 相关 -- 任务讨论 @AI:[[ai-assistant.task-mention.howto]] -- 列任务:[[ai-assistant.list-tasks.howto]] -- 生成工作报告:[[ai-assistant.report-draft.howto]] diff --git a/resources/ai-kb/zh/howto/approve/cc.md b/resources/ai-kb/zh/howto/approve/cc.md deleted file mode 100644 index e03fc05b4..000000000 --- a/resources/ai-kb/zh/howto/approve/cc.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -id: approve.cc.howto -title: 抄送审批(抄送我 / 抄送他人) -type: howto -feature: approve -scope: end-user -locale: zh -aliases: - - 抄送我的审批 - - cc 给我的审批 - - 看别人发的审批 - - 怎么抄送给别人 - - 抄送在哪 - - 知会 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 -negative: - - 普通用户不能在发起时手动指定抄送人,由所选模板的 notifier 节点决定 - - 抄送人不能审批(同意/拒绝按钮不可见),只能查看和评论 - - 抄送只在流程「到达 notifier 节点」或「整条流程已通过」时实际发送,被拒绝的流程不抄送 -last_verified: v1.7.90 ---- - -# 抄送审批(抄送我 / 抄送他人) - -## 抄送我(接收方) -**入口**:审批中心 → Tab「抄送我」 - -**列表内容**:流程模板里 notifier 节点候选人包含我的审批,无论审批中还是已结束。卡片含模板名、状态 Tag、发起人头像与昵称、提交时间、关键字段摘要。 - -**筛选**:流程分类(全部审批 / 各模板名)、用户名(按发起人模糊搜)、点「搜索」触发。 - -**详情**:点行进入右侧详情;可见所有节点和审批意见,但底部「同意/拒绝」按钮不显示(不是我的任务)。可点「+ 添加评论」补充意见([[approve.comment.howto]])。 - -**接口**:审批中 `approve/process/findProcNotify`;已结束 `approve/procHistory/findProcNotify`。 - -## 抄送他人(怎么让别人收到抄送) -普通用户**无法**在发起表单里指定抄送人。抄送由所选模板的 `notifier` 节点固化,管理员在「流程设置」配模板时挂同事/部门/角色。普通用户只能选用**已包含 notifier 节点**的模板,抄送人会在两个时机收到机器人卡片: -- **启动即抄送**:notifier 放在 starter 之后 -- **通过才抄送**:notifier 放在末节点;被拒绝则不抄送 - -## 不支持 -- 普通用户在发起时无「添加抄送人」字段 -- 抄送卡片仅知会,不会主动催办 diff --git a/resources/ai-kb/zh/howto/approve/comment.md b/resources/ai-kb/zh/howto/approve/comment.md deleted file mode 100644 index d418de5c2..000000000 --- a/resources/ai-kb/zh/howto/approve/comment.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: approve.comment.howto -title: 给审批添加全文评论 -type: howto -feature: approve -scope: end-user -locale: zh -aliases: - - 审批评论 - - 怎么评论审批 - - 审批留言 - - 添加评论 - - 给审批单加图片 - - 全文评论 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 - - 是该流程的发起人 / 审批人 / 抄送人之一 -negative: - - 评论一经提交不可编辑也不可删除 - - 不支持 @ 提及他人到评论里 - - 不支持回复某条评论形成楼中楼 - - 评论与节点审批意见是两类数据:节点意见跟审批动作绑死,全文评论独立追加 -last_verified: v1.7.90 ---- - -# 给审批添加全文评论 - -## 入口 -- 任意 Tab 进入审批详情 → 底部「+ 添加评论」按钮(任何角色和状态都可见) -- 评论按钮与「同意/拒绝/撤销/删除」并排,处理类按钮按 [[approve.doto.howto]] 条件控制可见 - -## 操作步骤 -1. 点「+ 添加评论」弹出评论窗 -2. **内容**:必填,多行文本 -3. **图片**:可选,最多 3 张(≤ 2048×2048) -4. 点「确认」提交 → 调 `approve/process/addGlobalComment`,列表实时刷新并自动滚到底部新评论 - -## 评论的显示位置 -详情页底部「全文评论」区,按时间顺序展示每条: -- 发表人头像 + 昵称 -- 绝对时间 + 相对时间(如「3 小时前」) -- 文字内容 -- 图片缩略图(点击放大查看) - -## 谁会收到提醒 -- 评论被推送到所有与该流程有关的用户的「审批助手」聊天 -- 推送类型 `approve_comment_notifier`,标题「{评论人} 评论了 {发起人} 的「{模板名}」审批」 -- 不会推给评论者本人 - -## 与节点审批意见的区别 -- **节点审批意见**:审批人点同意/拒绝时填的那行文字,只能写一次,绑定到节点 -- **全文评论**:任何时候、任何相关方都可追加,是独立的对话流,详情页单独一段展示 - -## 不支持 -- 评论不可改、不可删 -- 不支持 @ 别人、不支持回复楼中楼 diff --git a/resources/ai-kb/zh/howto/approve/delete.md b/resources/ai-kb/zh/howto/approve/delete.md deleted file mode 100644 index 46c316f51..000000000 --- a/resources/ai-kb/zh/howto/approve/delete.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: approve.delete.howto -title: 删除审批单 -type: howto -feature: approve -scope: admin -locale: zh -aliases: - - 删除审批 - - 删审批单 - - 怎么删一条审批 - - 审批记录怎么清 - - 历史审批能删吗 - - 误发起怎么撤掉 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 - - 当前用户是该审批的**发起人**或系统管理员 - - 该审批已结束(通过 / 拒绝 / 撤回),未结束不可删 -negative: - - 审批中(state=1)的单据不能删除,需要发起人先「撤回」结束再删 - - 普通处理人 / 抄送对象不能删除,即使是分配给自己的单据 - - 删除是物理删除,无回收站,删了找不回 - - 删除单条审批不会触发主程序通知撤回;机器人已推送的「待办」消息仍保留在群聊 -last_verified: v1.7.90 ---- - -# 删除审批单 - -## 入口 -- 桌面端:审批中心 →「已发起」或「已办」Tab → 点开某条审批进详情 → 详情页底部「删除」按钮 -- 仅当满足"已结束 + 发起人或管理员"两个条件时按钮才出现,否则隐藏 - -## 接口 -前端调 `api/approve/process/delById` → 控制器方法 `process__delById`: -- 必传 `proc_inst_id`(流程实例 ID) -- 自动透传 `is_admin` 标记给插件,决定能否绕过"仅发起人可删"的限制 -- 插件侧再校验"已结束"状态,未结束直接拒绝 - -## 操作步骤 -1. 进入要删除的审批详情页 -2. 确认顶部状态显示 `已通过` / `已拒绝` / `已撤回` 任一终态 -3. 点击底部「删除」按钮 -4. 二次确认弹窗 → 确定 -5. 接口返回成功后该单从所有列表(已发起 / 已办 / 抄送)消失 - -## 想删但删不掉的常见原因 -- **审批中**:先点「撤回」让状态变 `已撤回` 再删(发起人专属) -- **不是我发起**:除非你是系统管理员(`userIsAdmin`),否则不能删别人发起的 -- **接口报错"无权限"**:说明插件认为当前 `userid` 不是发起人且 `is_admin=false` - -## 批量删除 -当前版本无批量删除入口,需要逐条删。如需大批量清理某个流程模板下的全部审批数据,可改用 [[approve.template.howto]] 中"删除模板"操作(会同时清空数据)。 - -## 相关 -- 数据导出(删除前留底):[[approve.export.howto]] diff --git a/resources/ai-kb/zh/howto/approve/detail.md b/resources/ai-kb/zh/howto/approve/detail.md deleted file mode 100644 index f87d8ab5d..000000000 --- a/resources/ai-kb/zh/howto/approve/detail.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: approve.detail.howto -title: 审批详情页与流程图 -type: howto -feature: approve -scope: end-user -locale: zh -aliases: - - 审批详情 - - 看审批流程 - - 审批走到哪了 - - 流程图 - - 审批节点 - - 审批进度 - - 谁审过了 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 - - 自己是发起人 / 审批人 / 抄送人 之一才能进入对应审批的详情 -negative: - - 详情页里不能修改任何表单字段,全部只读 - - 详情不显示其他人的私聊评论,仅显示全局评论 - - 流程图按节点定义渲染,不支持手动调整节点顺序 -last_verified: v1.7.90 ---- - -# 审批详情页与流程图 - -## 入口 -- 任一 Tab(待办/已办/抄送我/已发起)→ 点列表行:宽屏(≥1010 px)右侧分栏;中屏(426-1010)右侧抽屉;窄屏(<426)跳独立路由 `manage-approve-details?id={id}` -- 机器人卡片:在「审批助手」聊天点卡片「查看详情」 - -## 顶部信息 -模板名 + 状态 Tag(青-审批中 / 绿-已通过 / 红-已拒绝/已撤回)、发起人头像和昵称、提交时间。 - -## 表单字段区 -按模板渲染。请假类模板显示:假期类型、开始/结束时间(含周几)、时长(自动算秒/分/小时/天)、事由、图片(≤ 3 张可放大)。 - -## 审批记录(流程图) -Timeline 时间线渲染 `node_infos`,每节点显示类型、操作人头像与昵称、状态、相对/绝对时间。节点类型: -- **提交** starter:绿色,发起人 -- **审批** approver:蓝-审批中 / 绿-已通过 / 红-拒绝或撤回 / 灰-待审批;有意见时显示在引号里 -- **抄送** notifier:完成绿、未到灰,显示「自动抄送 张三、李四 共 2 人」 -- **结束** end:到达后变绿 - -被拒绝/撤回后下游节点自动隐藏。 - -## 全文评论区 -有 `global_comments` 时显示,按时间倒序,每条含头像/昵称/内容/图片/相对时间。详见 [[approve.comment.howto]]。 - -## 操作区 -底部按钮见 [[approve.doto.howto]]。接口:详情 `approve/process/detail`;历史 [[approve.history.concept]]。 diff --git a/resources/ai-kb/zh/howto/approve/doto.md b/resources/ai-kb/zh/howto/approve/doto.md deleted file mode 100644 index 521d403ef..000000000 --- a/resources/ai-kb/zh/howto/approve/doto.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: approve.doto.howto -title: 处理审批(同意/拒绝/撤销/删除) -type: howto -feature: approve -scope: end-user -locale: zh -aliases: - - 怎么同意审批 - - 怎么拒绝审批 - - 审批驳回 - - 撤回自己的审批 - - 撤销申请 - - 删除审批单 - - 怎么处理一条审批 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 -negative: - - 不支持「转交他人」:当前版本无转交按钮和接口 - - 不支持「加签」:不能临时增加额外审批人 - - 不支持批量审批;要逐条进详情处理 - - 拒绝必须填审批意见(同意可不填) - - 一旦后续节点审批人已处理,发起人就不能再撤销 - - 删除仅对已结束(通过/拒绝/撤回)的审批可用,审批中不能删 -last_verified: v1.7.90 ---- - -# 处理审批(同意/拒绝/撤销/删除) - -## 入口 -从「待办」「已办」「抄送我」「已发起」任一 Tab 点列表项 → 右侧详情面板底部「审批操作」区。 - -## 四个动作的按钮可见条件 -- **同意 / 拒绝**:当前流程未结束,且我的用户 ID 在 `candidate` 字段里(即轮到我处理) -- **撤销**:我是发起人,且整条流程未结束,且没有任何审批人已点过同意/拒绝 -- **删除**:状态是已通过/已拒绝/已撤回,且我是发起人或管理员 -- **+ 添加评论**:任意状态、任意角色可见,详见 [[approve.comment.howto]] - -## 同意 -点「同意」→ 弹「请输入审批意见」(可不填)→ 确认。调 `approve/task/complete` `pass=true`。推下一节点审批人 + 抄送人;末节点则推「您发起的「X」已通过」给发起人。 - -## 拒绝 -点「拒绝」→ 弹意见框(**必填**,否则提示「请输入审批意见」)→ 确认。调 `approve/task/complete` `pass=false`。流程立即结束,发起人收到拒绝通知。 - -## 撤销(仅发起人) -点「撤销」→ 二次确认。调 `approve/task/withdraw`,state 置 4「已撤回」。撤回提醒推送给已收到卡片的审批人,原卡片改为「已撤回」。 - -## 删除(已结束 + 发起人/管理员) -点「删除」→ 二次确认「删除后不可恢复」。调 `approve/process/delById`,从所有列表移除,不可恢复。 diff --git a/resources/ai-kb/zh/howto/approve/export.md b/resources/ai-kb/zh/howto/approve/export.md deleted file mode 100644 index e2bec9368..000000000 --- a/resources/ai-kb/zh/howto/approve/export.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: approve.export.howto -title: 导出审批数据 -type: howto -feature: approve -scope: admin -locale: zh -aliases: - - 导出审批 - - 审批数据导出 - - 下载审批 Excel - - 审批报表 - - 请假记录导出 - - 审批怎么导出 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 - - 当前用户是系统管理员(普通成员看不到「导出」按钮) -negative: - - 单次导出**最多 35 天**,超过会报「日期范围限制最大35天」需分段导出 - - 必须选择"流程分类"(即流程模板名),不支持一次导全部模板 - - 导出文件为 zip 包内含一个 xlsx,**不支持** CSV / JSON 直接下载 - - 没有数据时会推送「没有任何数据」提示,不会生成空文件 -last_verified: v1.7.90 ---- - -# 导出审批数据 - -## 入口 -- 桌面端:左侧栏「应用」→「审批中心」→ 右上角「导出审批数据」按钮(仅管理员可见) -- 移动端:审批中心右上角图标条同名按钮(同样仅管理员) - -## 接口 -前端调 `api/approve/export`(POST)→ 控制器方法 `export`: -- 必传 `proc_def_name`(流程模板名)+ `date`(`[start, end]` 两个日期) -- 可选 `state`(0 全部 / 1 审批中 / 2 通过 / 3 拒绝 / 4 撤回)+ `is_finished` -- 服务端用 Swoole 协程异步生成,不阻塞请求;接口立即返回 `success` - -## 操作步骤 -1. 弹窗中选择「流程分类」(下拉,来自已发布的流程模板列表) -2. 选「状态」(默认全部) -3. 选「日期范围」(开始 + 结束,≤ 35 天) -4. 点「确定」→ 立即关闭弹窗 -5. 主程序系统机器人在私聊推送「正在导出审批数据,请稍等...」 -6. 协程异步处理完成后,机器人推送一条带下载链接的 `file_download` 模板消息 - -## 导出列(24 列) -申请编号、标题、申请状态、发起时间、完成时间、发起人工号、发起人 User ID、发起人姓名、发起人部门、发起人部门 ID、部门负责人、历史审批人、历史办理人、审批记录、当前处理人、审批节点、审批人数、审批耗时、假期类型、开始时间、结束时间、时长、请假事由、请假单位。 - -## 文件命名与位置 -- 临时存放:`storage/app/temp/approve/export/<年月>/审批记录_<时间戳>.zip` -- 链接形式:`api/approve/down?key=<加密 key>`(带签名,过期失效) - -## 常见报错 -- `日期选择错误`:日期未选或格式错;用日期选择器选 -- `日期范围限制最大35天`:缩短范围分段导出 -- `没有任何数据`:所选模板 + 状态 + 日期范围内无审批单 -- `系统机器人不存在`:联系超级管理员检查机器人初始化(极少见) - -## 相关 -- 模板列表来源:[[approve.template.concept]] -- 单条记录删除:[[approve.delete.howto]] diff --git a/resources/ai-kb/zh/howto/approve/install.md b/resources/ai-kb/zh/howto/approve/install.md deleted file mode 100644 index c2f945542..000000000 --- a/resources/ai-kb/zh/howto/approve/install.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: approve.install.howto -title: 安装审批插件 -type: howto -feature: approve -scope: admin -locale: zh -aliases: - - 怎么装审批 - - 启用审批中心 - - 审批怎么开 - - 在哪开启审批 - - 安装 approve 插件 - - 审批中心没有怎么办 -related_tools: [] -related_pages: [application] -prerequisites: - - 当前用户是系统管理员(userIsAdmin) - - 服务器能拉取 `kuaifan/dooapprove` Docker 镜像 -negative: - - 普通成员看不到「应用市场」入口,无法自行安装 - - 安装包约 25MB,下载较慢,必须看「安装日志」判断进度,不能凭感觉重试 - - 卸载时勾选「删除数据」会清空全部审批历史,且不可恢复 -last_verified: v1.7.90 ---- - -# 安装审批插件 - -## 入口 -- 桌面端:左侧栏「应用」→ 右上角「应用市场」→ 顶部分类「插件」→ 找到「审批中心」 - -## 操作步骤 -1. 在应用市场卡片上点击「安装」 -2. 弹窗确认参数(默认 `DEMO_DATA: "true"` 会随安装写入一份演示流程模板,正式环境可改 `false`) -3. 点「确定」开始安装,主程序会创建一个 docker-compose 服务并拉起容器 -4. 安装过程中打开「安装日志」面板查看拉镜像进度(约 25MB) -5. 状态变为 `installed` 后,左侧栏「应用」会自动出现「审批中心」入口 - -## 启用后默认行为 -- 自动注册路由 `api/approve/*`,主程序 `ApproveController` 开始可用 -- 自动注册 nginx 反代 `/approve/`,把 iframe 内的流程模板编辑页透传给插件容器 -- 若 `DEMO_DATA: "true"`:随安装写入「请假申请」等演示流程模板,方便上线测试 -- 在主程序数据库里创建 `<前缀>approve_*` 表前缀的工作流表(不与主程序业务表混库) - -## 卸载/重装 -- 应用市场 → 已安装 →「卸载」 -- 弹窗有「同时删除数据」勾选:勾上则连同 `<前缀>approve_*` 表一并 drop;不勾则保留数据下次安装时自动接上 -- 仅升级版本走「更新」按钮,不会触发数据清理 - -## 不支持 -- 没有「试用」/「禁用」中间态:要么 `installed` 要么 `uninstalled` -- 不能同时存在新旧两个版本 - -## 相关 -- 插件架构与数据隔离原理:[[approve.plugin.concept]] -- 入口与四个 Tab 的常规用法:[[app-system.approve.howto]] diff --git a/resources/ai-kb/zh/howto/approve/my-start.md b/resources/ai-kb/zh/howto/approve/my-start.md deleted file mode 100644 index 88ed43f2d..000000000 --- a/resources/ai-kb/zh/howto/approve/my-start.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -id: approve.my-start.howto -title: 查看我发起的审批 -type: howto -feature: approve -scope: end-user -locale: zh -aliases: - - 我发起的审批 - - 我提交的审批 - - 已发起列表 - - 查我的审批 - - 我提的请假到哪了 - - 看我自己的申请 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 -negative: - - 不能在此列表里改字段,提交后表单只读 - - 只能撤回未结束的审批;已通过/拒绝/撤回的只能删除或追加评论 - - 列表只显示自己发起的;要看别人发起的需要去「待办」「已办」或「抄送我」 -last_verified: v1.7.90 ---- - -# 查看我发起的审批 - -## 入口 -- 桌面端 / 移动端:审批中心 → Tab「已发起」 - -## 筛选条件 -列表上方四个控件,任改其一即触发刷新: -- **流程分类**:全部审批 / 各模板名(如「请假申请」「报销申请」) -- **状态**:全部 / 审批中 / 已通过 / 已拒绝 / 已撤回 -- **用户名**:按发起人模糊搜索(自己发的也可以搜,多用于管理员视角,普通用户一般留空) -- 「搜索」按钮触发查询 - -## 列表项显示 -每行卡片显示:模板名、状态 Tag(颜色对应:青-审批中、绿-通过、红-拒绝/撤回)、提交时间、发起人头像与昵称、事由摘要。点击进入右侧详情。 - -## 详情与操作 -- 详情结构与处理面板见 [[approve.detail.howto]] -- 状态为「审批中」且自己是发起人:右下角有「撤销」按钮(前提是后续审批人均未行动) -- 状态为「已通过/已拒绝/已撤回」:可见「删除」按钮(仅发起人或管理员) -- 任何状态均可点「+ 添加评论」追加 [[approve.comment.howto]] - -## 接口 -- 入口列表:`approve/process/startByMyselfAll`(按筛选) -- 旧版仅审批中:`approve/process/startByMyself` diff --git a/resources/ai-kb/zh/howto/approve/my-todo.md b/resources/ai-kb/zh/howto/approve/my-todo.md deleted file mode 100644 index f55df5b13..000000000 --- a/resources/ai-kb/zh/howto/approve/my-todo.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: approve.my-todo.howto -title: 待我审批列表 -type: howto -feature: approve -scope: end-user -locale: zh -aliases: - - 待我审批 - - 待办审批 - - 需要我审批的 - - 我要审批什么 - - 找我审批的列表 - - 有多少待办 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 - - 已被某流程模板的审批人节点包含到候选人列表 -negative: - - 待办只显示当前轮到自己处理的,未到节点的不会出现 - - 已处理的不会留在待办,会转到「已办」 - - 列表无法批量同意/拒绝,需要逐条进详情处理 -last_verified: v1.7.90 ---- - -# 待我审批列表 - -## 入口 -- 桌面端 / 移动端:审批中心 → Tab「待办」 -- Tab 名旁有未读数量徽标(如「待办(5)」),数字来自 `approve/process/doto`,由 WebSocket `approve/unread` 推送实时刷新 - -## 列表内容 -显示当前候选人字段(`candidate`)包含我,且流程未结束的审批: -- 模板名 + 状态 Tag「审批中」 -- 发起人头像与昵称 -- 提交时间 -- 关键字段摘要(如开始/结束时间、事由) - -## 筛选条件 -列表上方: -- **流程分类**:全部审批 / 各模板名 -- **用户名**:按发起人模糊搜 -- 点「搜索」或回车触发刷新 - -## 处理流程 -1. 点列表任一项 → 右侧打开详情面板(窄屏抽屉打开) -2. 详情底部出现「同意」「拒绝」「+ 添加评论」按钮(按钮可见性见 [[approve.doto.howto]]) -3. 处理完该条从列表消失,未读数 -1,下一审批人收到推送 - -## 移动端 -- 屏宽 < 426 px 时点列表会通过事件 `approveDetails` 跳到独立详情路由 -- 屏宽 < 1010 px 时详情以右侧抽屉打开,不分屏 - -## 接口 -- 列表:`approve/process/findTask` -- 数量:`approve/process/doto` diff --git a/resources/ai-kb/zh/howto/approve/start.md b/resources/ai-kb/zh/howto/approve/start.md deleted file mode 100644 index 2789b6a7e..000000000 --- a/resources/ai-kb/zh/howto/approve/start.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: approve.start.howto -title: 发起审批 -type: howto -feature: approve -scope: end-user -locale: zh -aliases: - - 怎么发起审批 - - 提交审批 - - 申请请假 - - 报销怎么提 - - 新建审批单 - - 加申请 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 - - 管理员已配置至少一个审批流程模板 - - 当前账号已分配到部门(无部门时无法选择申请发起部门) -negative: - - 用户不能自定义审批人,审批人由所选模板的节点配置决定 - - 不能新建模板,只能选用管理员已配置的模板 - - 提交后不能改字段;只能撤回或等审批结束([[approve.process-inst.concept]]) - - 不支持定时延后提交、不支持草稿保存 -last_verified: v1.7.90 ---- - -# 发起审批 - -## 入口 -- 桌面端:左侧栏「应用」→「审批」→ 页面右上角「+ 添加申请」按钮(窄屏显示为圆形「+」图标) -- 移动端:底部 Tabbar「应用」→「审批」→ 右上角「+」 - -## 操作步骤 -1. 点击「+ 添加申请」打开弹窗 -2. **选择部门**:当账号属于多个部门时显示,单部门自动选中 -3. **申请类型**:从模板下拉选(如「请假申请」「报销申请」),可选项由管理员预置 -4. **假期类型**(仅请假类模板显示):年假/事假/病假/调休/产假/陪产假/婚假/丧假/哺乳假/产检假/其他 -5. **开始时间 / 结束时间**:日期 + 小时(0-23)+ 分钟(00 或 30) -6. **事由**:必填,多行文本 -7. **图片**:可选,最多 3 张(最大 2048×2048) -8. 点「确认」提交 - -## 提交后的行为 -- 系统按模板自动派任务给第一节点的审批人 -- 「审批助手」机器人向每个审批人推 1 条卡片消息:「{发起人} 提交的「{模板名}」待你审批」 -- 抄送节点上的人也会同时收到知会卡片 -- 自动跳到「已发起」Tab,置顶你这条 -- 调用接口 `approve/process/start` - -## 不支持 -- 申请类型不能由用户临时新建,必须用管理员配好的模板 -- 不能在发起时手动指定审批人,节点由模板决定 -- 不能保存草稿,关弹窗即丢失填写内容 diff --git a/resources/ai-kb/zh/howto/approve/template.md b/resources/ai-kb/zh/howto/approve/template.md deleted file mode 100644 index d54a3365c..000000000 --- a/resources/ai-kb/zh/howto/approve/template.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: approve.template.howto -title: 创建与管理流程模板 -type: howto -feature: approve -scope: admin -locale: zh -aliases: - - 怎么建审批流程 - - 新建审批模板 - - 配置请假流程 - - 添加流程 - - 修改审批流程 - - 流程设置在哪 - - 流程编辑器 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 - - 当前用户是系统管理员(userIsAdmin) -negative: - - 只有管理员能进入流程设置,普通成员看不到「流程设置」按钮 - - 同名流程不允许重复创建,新建时会校验 - - 旧实例不随模板改动回滚:发布新版本只影响新发起的审批,已在跑的按旧版本走完 -last_verified: v1.7.90 ---- - -# 创建与管理流程模板 - -## 入口 -- 桌面端:左侧栏「应用」→「审批中心」→ 右上角「流程设置」按钮 -- 进入设置页后看到所有已建模板卡片 + 一个「+」加号卡片 - -## 新建模板 -1. 点击「+」卡片 → 弹窗输入流程名称(必填,作为「申请类型」给发起人选) -2. 点「确定」打开右侧抽屉式流程编辑器(iframe 内,宽度约 1200px) -3. 在编辑器中拖拽配置审批节点:发起 → 审批人 → 抄送 → 结束,参考 [[approve.node.concept]] -4. 在编辑器中设计表单字段(文本、日期、选择、附件、明细等),参考 [[approve.form.concept]] -5. 点编辑器内「保存并发布」按钮 → 弹窗关闭,提示「发布成功」 -6. 列表中出现新卡片,标记「已发布」,普通成员立即可在「添加申请」处选择 - -## 编辑已有模板 -1. 在卡片列表点击对应模板卡片 → 抽屉打开同一个编辑器,载入当前版本 -2. 修改节点 / 表单字段 -3. 点「保存并发布」→ 版本号 +1 -4. 进行中的旧实例不受影响,按各自当时的版本继续;新发起的走新版本 - -## 删除模板 -1. 卡片右下角小垃圾桶图标 -2. 二次确认「将会清空流程数据,此操作不可恢复」 -3. 确认后调 `approve/procdef/del` 删除模板及所有相关审批数据 - -## 不支持 -- 草稿暂存不可见:编辑器只在点击「保存并发布」时落库,关掉抽屉不点保存内容会丢失 -- 同名流程不允许重复创建 -- 流程编辑器内的能力(如条件分支)受插件版本限制;当前版本不支持表单条件路由,需要按条件分流时应拆成多个流程模板供发起人选择 - -## 相关 -- 模板概念详解:[[approve.template.concept]] -- 节点类型说明:[[approve.node.concept]] diff --git a/resources/ai-kb/zh/howto/checkin/face.md b/resources/ai-kb/zh/howto/checkin/face.md deleted file mode 100644 index 793b619c2..000000000 --- a/resources/ai-kb/zh/howto/checkin/face.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -id: checkin.face.howto -title: 人脸签到怎么用 -type: howto -feature: checkin -scope: end-user -locale: zh -aliases: - - 人脸签到 - - 刷脸签到 - - 怎么录入人脸 - - 上传人脸图片 - - 人脸打卡 -related_tools: [] -related_pages: [user-settings] -prerequisites: - - 应用市场已安装 face 插件 - - 管理员已在「签到设置 → 签到方式」勾选「人脸签到」 - - 管理员已在「签到设置 → 允许修改」开启「允许成员自己上传人脸图片」 -last_verified: v1.7.90 ---- - -# 人脸签到怎么用 - -## 录入人脸(成员侧) -1. 打开「应用」→「签到打卡」抽屉 → 「签到设置」Tab → 切到「人脸签到」 -2. 点击「人脸图片」上传位 → 选择 / 拍摄一张正面照 -3. 建议尺寸 **500x500**,单张限制 1 张,会自动同步给 face 插件后端 -4. 点「提交」保存 - -成功后 face 容器会保存对应人脸特征,后续人脸识别设备扫脸时自动匹配到该成员。 - -## 现场打卡 -1. 走到办公场所的人脸识别一体机前 -2. 设备扫描成功 → 自动调用插件 API 写入一条签到记录 -3. 在「签到打卡」抽屉的时间线立即看到新记录 - -## 替换或删除人脸 -- 替换:重新上传新图片即可覆盖 -- 删除:把图片清空后提交,face 插件后端会同步删除该成员的人脸数据 - -## 不支持 -- 不支持纯软件刷脸(手机自拍打卡),必须有配套人脸识别硬件 -- 单成员只能录入 1 张人脸图(多张请通过设备后台管理) -- face 插件未安装时上传会报错(详见 [[checkin.face-fail.faq]]) diff --git a/resources/ai-kb/zh/howto/drawio/create.md b/resources/ai-kb/zh/howto/drawio/create.md deleted file mode 100644 index 0eb2aa30b..000000000 --- a/resources/ai-kb/zh/howto/drawio/create.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: drawio.create.howto -title: 创建流程图 -type: howto -feature: drawio -scope: end-user -locale: zh -aliases: - - 怎么建流程图 - - 新建 drawio - - 创建图表 - - 加一张流程图 - - drawio 怎么开 -related_tools: [] -related_pages: [file] -prerequisites: - - 应用市场已安装 drawio 插件 - - 当前用户对目标文件夹/项目文件区有「编辑」权限 -negative: - - 不能在任务详情页直接「附件 → 新建流程图」,需先在文件页创建再链接 - - 同一张图同一时间不支持多人并发编辑(后保存方覆盖前保存方) - - 创建后无法把 `drawio` 文件转成 `mind` 或 `word` 文件 -last_verified: v1.7.90 ---- - -# 创建流程图 - -## 入口 -流程图作为「文件」存在,入口都在文件页: - -- 桌面端:左侧栏「文件」→ 选定目标文件夹 → 右上角「新建」按钮 →「图表」 -- 桌面端(右键):文件列表空白处右键 →「新建」→「图表」 -- 移动端:底部 Tabbar「文件」→ 进入目标文件夹 → 右下角「+」→「图表」 -- 项目文件:进入项目 →「文件」标签页 → 新建菜单 →「图表」 - -> 文件新建菜单里命名为「图表」,文件类型字段是 `drawio`,对应文件图标也是 drawio 风格。 - -## 操作步骤 -1. 点击「新建 → 图表」,文件列表多出一个待命名行 -2. 输入文件名(≤ 100 字符),回车保存 -3. 双击或单击文件名进入编辑器 -4. 在 drawio 编辑器中绘图:左侧拖拽图形库,画布上连接、编辑文本 -5. 编辑器内自动保存,关闭即可 - -## 字段默认值 -- 文件名:默认「未命名」 -- 模板:默认空白画布(可在 drawio 内通过菜单插入图形) -- 主题:跟随 DooTask 当前主题(深色/浅色)和语言 - -## 导出 -- 在 drawio 编辑器内:菜单 「File → Export As」选择 PNG/PDF/JPG 等 -- 导出依赖插件内置的 export-server,若安装不全会导出失败 - -## 不支持 -- 不支持直接从云端模板拷贝(每次新建都是空白画布) -- 不能在任务附件区直接「新建图表」,需先在文件页建好再附加 - -## 相关 -- 入口与权限:[[drawio.entry.menu-map]] -- 内置模板:[[drawio.template.concept]] diff --git a/resources/ai-kb/zh/howto/kpi/create.md b/resources/ai-kb/zh/howto/kpi/create.md deleted file mode 100644 index 3e5adc867..000000000 --- a/resources/ai-kb/zh/howto/kpi/create.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -id: kpi.create.howto -title: 创建绩效考核 -type: howto -feature: kpi -scope: end-user -locale: zh -aliases: - - 怎么发起考核 - - 新建考核 - - 创建 KPI - - 录入绩效指标 - - 给员工打分 - - 怎么做 KPI 评估 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 kpi 插件 - - 当前账号在 KPI 中是 HR 或 manager 角色 -negative: - - 普通员工(employee)不能发起考核,只能填写自己的考核 - - 每个考核只能提交一次异议(HR 处理后才能再次提交) - - 仅 HR 可配置绩效规则(权重比例) -last_verified: v1.7.90 ---- - -# 创建绩效考核 - -## 入口 -- 桌面端:左侧栏「应用」→「绩效考核」(对应 URL `apps/kpi`) -- 移动端:底部 Tabbar「应用」→「绩效考核」 -- 在 KPI 首页 / 考核管理页面有新建入口 - -## 角色与权限 -- **HR**:完整流程,可创建考核、选模板、被考核人、邀请评分人、处理异议 -- **manager(部门主管)**:可发起对下属的考核 -- **employee**:只能在收到考核后填写自评,不能发起新考核 - -## 操作步骤 -1. 打开「绩效考核」页面 -2. 在考核管理界面点击新建按钮 -3. 选择 KPI 模板(模板由 HR 在「KPI 模板」中维护) -4. 选择被考核人员(一个或多个) -5. 设置考核周期 / 截止时间 -6. 提交后系统自动通知被考核人进入「自评」环节 - -## 完整考核流程 -1. **创建考核**:HR 或主管发起 -2. **员工自评**:员工填写自我评价并打分 -3. **主管评估**:主管打分并写反馈 -4. **邀请评分**(可选):HR 邀请第三方多角度打分 -5. **HR 审核**:依据绩效规则计算最终分 -6. **员工确认**:员工查看并确认最终得分 -7. **异议处理**(可选):员工在「待确认」时提交异议,HR 处理后调分 - -## 邀请评分(可选) -- HR 在主管评估完成后可发起邀请评分 -- 被邀请人可选择接受 / 拒绝;接受后对各项指标客观打分 -- 评分结果仅 HR 可查看完整详情(保密性) - -## 不支持 -- 已在「待确认」之前的状态不能提交异议 -- 邀请评分的被评估员工本人不参与邀请评分过程 -- 普通员工无法看到他人评分明细 - -## 相关 -- KPI 是什么:[[kpi.concept]] -- 评分机制 / 权重:[[kpi.scoring.concept]] -- 入口在哪:[[kpi.entry.menu-map]] diff --git a/resources/ai-kb/zh/howto/memos/create.md b/resources/ai-kb/zh/howto/memos/create.md deleted file mode 100644 index a103150ec..000000000 --- a/resources/ai-kb/zh/howto/memos/create.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: memos.create.howto -title: 写一条 Memo -type: howto -feature: memos -scope: end-user -locale: zh -aliases: - - 怎么写笔记 - - 新建 memo - - 记一条想法 - - 加一条笔记 - - 我要写个备忘 - - memos 怎么用 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 memos 插件 -negative: - - 不能用 Memos 原生账号登录(账号由 DooTask 自动建立) - - 单条 memo 大小受 Memos 服务自身限制 - - Memos 不与 DooTask 任务 / 项目数据互通,写在这里的内容不会变成任务 -last_verified: v1.7.90 ---- - -# 写一条 Memo - -## 入口 -- 桌面端:左侧栏「应用」→「Memos 笔记」(对应 URL `apps/memos/`) -- 移动端:底部 Tabbar「应用」→「Memos 笔记」 -- 首次打开会自动用当前 DooTask 账号登录 Memos,无需输入密码 - -## 操作步骤 -1. 打开「Memos 笔记」页面 -2. 在顶部输入框直接输入内容(支持 Markdown) -3. 可选:用 `#标签名` 语法添加标签分类(参见 [[memos.tag.concept]]) -4. 可选:调整可见性(私有 / 工作区 / 公开),默认是私有 -5. 点击「保存 / Save」提交,新 memo 立即出现在时间线顶部 - -## 编辑与删除 -- 在时间线上找到要操作的 memo,点击右上角的「···」菜单 -- 可执行编辑内容、修改可见性、置顶、归档、删除等操作 - -## Markdown 与附件 -- 支持标题、加粗、列表、代码块、链接等基础 Markdown -- 支持上传图片 / 文件附件,存储在 SQLite 数据库或本地卷里 -- 不支持任意大附件,建议大文件用 DooTask 主程序的文件模块 - -## 不支持 -- 不能跨 DooTask 用户共用同一个 memo 帐号(每个 DooTask 用户在 Memos 内是独立账号) -- 不能从 DooTask 主程序的任务 / 文档直接「转存到 Memos」 - -## 相关 -- Memos 是什么:[[memos.concept]] -- 入口在哪:[[memos.entry.menu-map]] -- 标签 / 分类:[[memos.tag.concept]] diff --git a/resources/ai-kb/zh/howto/micro-app/install.md b/resources/ai-kb/zh/howto/micro-app/install.md index d943903e7..6656e354a 100644 --- a/resources/ai-kb/zh/howto/micro-app/install.md +++ b/resources/ai-kb/zh/howto/micro-app/install.md @@ -45,7 +45,7 @@ last_verified: v1.7.90 ## 失败排查 - 镜像源不通:检查服务器到镜像源网络 - 端口冲突:检查 `docker/appstore/apps//docker-compose.yml` -- 详细排查模板见 [[okr.cannot-install.faq]] +- 个别插件(如 OKR)有专属的安装失败排查说明,随对应插件知识库提供 ## 不支持 - 普通成员不能安装微应用,「应用商店」对其隐藏 diff --git a/resources/ai-kb/zh/howto/minder/create.md b/resources/ai-kb/zh/howto/minder/create.md deleted file mode 100644 index 3b3708009..000000000 --- a/resources/ai-kb/zh/howto/minder/create.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: minder.create.howto -title: 创建思维导图 -type: howto -feature: minder -scope: end-user -locale: zh -aliases: - - 怎么建思维导图 - - 新建脑图 - - 创建 mind map - - 加一张思维导图 - - 思维导图怎么开 -related_tools: [] -related_pages: [file] -prerequisites: - - 应用市场已安装 minder 插件 - - 当前用户对目标文件夹/项目文件区有「编辑」权限 -negative: - - 不能在任务详情页直接「附件 → 新建思维导图」,需先在文件页创建再链接 - - 同一张图同一时间不支持多人并发编辑(详见 [[minder.collaboration.concept]]) - - 创建后无法把 `mind` 文件转成 `drawio` 或 `word` 文件 -last_verified: v1.7.90 ---- - -# 创建思维导图 - -## 入口 -思维导图作为一种「文件」存在,入口都在文件页: - -- 桌面端:左侧栏「文件」→ 选定目标文件夹 → 右上角「新建」按钮 →「思维导图」 -- 桌面端(右键):文件列表空白处右键 →「新建」→「思维导图」 -- 移动端:底部 Tabbar「文件」→ 进入目标文件夹 → 右下角「+」→「思维导图」 -- 项目文件:进入项目 →「文件」标签页 → 同上步骤 - -## 操作步骤 -1. 在新建菜单点击「思维导图」,文件列表多出一个待命名行 -2. 输入文件名(≤ 100 字符),回车保存 -3. 双击或单击文件名进入编辑器 -4. 编辑:双击节点改名、Tab 加子节点、回车加同级、Del 删节点 -5. 编辑器内自动保存,关闭即可 - -## 字段默认值 -- 文件名:默认「未命名」 -- 模板:默认(中心 + 第一圈分支);可在编辑器内切换「组织结构 / 文件树 / 右展开 / 鱼骨图 / 天盘」 -- 主题:天空蓝;可换「线框 / 鱼骨图 / 脑图经典 / 紧凑经典 / 温柔冷光 / 经典天盘」等 - -## 不支持 -- 不支持直接从模板文件拷贝(每次新建都是空白根节点) -- 不能在任务附件区直接「新建思维导图」,需先在文件页建好再附加 - -## 相关 -- 入口与权限:[[minder.entry.menu-map]] -- 协作能力:[[minder.collaboration.concept]] diff --git a/resources/ai-kb/zh/howto/office/create.md b/resources/ai-kb/zh/howto/office/create.md deleted file mode 100644 index 68568f32a..000000000 --- a/resources/ai-kb/zh/howto/office/create.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: office.create.howto -title: 创建在线文档(Word/Excel/PPT) -type: howto -feature: office -scope: end-user -locale: zh -aliases: - - 怎么建在线 Word - - 新建在线表格 - - 新建在线 PPT - - 创建 docx - - 怎么在 DooTask 写文档 - - 在线 office 怎么开 -related_tools: [] -related_pages: [file] -prerequisites: - - 应用市场已安装 office(OnlyOffice)插件 - - 当前用户对目标文件夹/项目文件区有「编辑」权限 -negative: - - 创建后无法把在线 Word 转成 DooTask 自带的 `document` 文件类型 - - 创建后文件扩展名固定(docx/xlsx/pptx),不能在 DooTask 内改后缀 - - 不能在任务详情页直接「附件 → 新建 Word」,需先在文件页创建再链接 -last_verified: v1.7.90 ---- - -# 创建在线文档(Word/Excel/PPT) - -## 入口 -在线文档作为「文件」存在,入口都在文件页: - -- 桌面端:左侧栏「文件」→ 选定目标文件夹 → 右上角「新建」按钮 →「Word 文档 / Excel 工作表 / PPT 演示文稿」 -- 桌面端(右键):文件列表空白处右键 →「新建」→ 同上三选一 -- 移动端:底部 Tabbar「文件」→ 进入目标文件夹 → 右下角「+」→ 同上三选一 -- 项目文件:进入项目 →「文件」标签页 → 新建菜单 → 同上三选一 - -## 操作步骤 -1. 点击「新建 → Word 文档(或 Excel / PPT)」,文件列表多出一个待命名行 -2. 输入文件名(≤ 100 字符),回车保存——文件扩展名按所选类型自动决定(docx/xlsx/pptx) -3. 双击或单击文件名进入编辑器(iframe 加载 OnlyOffice) -4. 直接在浏览器编辑:体验与桌面 Office 接近,支持公式、批注、修订、格式刷等 -5. 自动保存:OnlyOffice 在内容停止变更后约 10 秒触发保存,关闭也会触发 - -## 上传已有文档 -- 上传扩展名在 `doc/docx/xls/xlsx/ppt/pptx/odt/ods/odp/csv/rtf` 等列表内的文件,双击即可在线编辑(不需要先转格式) - -## 字段默认值 -- 文件名:默认「未命名」(扩展名自动加 .docx / .xlsx / .pptx) -- 模板:空白文档/工作表/演示文稿 - -## 不支持 -- 不能在任务附件区直接「新建 Word」,需先在文件页建好再附加 -- 不能跨类型转换(docx 改不成 xlsx) - -## 相关 -- 入口与权限:[[office.entry.menu-map]] -- 多人协作能力:[[office.collaboration.concept]] diff --git a/resources/ai-kb/zh/howto/okr/align.md b/resources/ai-kb/zh/howto/okr/align.md deleted file mode 100644 index 2d7c67203..000000000 --- a/resources/ai-kb/zh/howto/okr/align.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: okr.align.howto -title: OKR 上下级对齐 -type: howto -feature: okr -scope: end-user -locale: zh -aliases: - - OKR 对齐 - - 对齐上级 OKR - - OKR 拆解 - - 个人 OKR 怎么跟团队 - - OKR 关联 - - OKR 上下游 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 okr 插件 - - 上级 / 团队 OKR 已经创建并可见 -negative: - - 对齐不是抄袭,个人 KR 不应直接复制团队 KR - - 对齐关系不会自动同步进度,需各自单独更新 -last_verified: v1.7.90 ---- - -# OKR 上下级对齐 - -## 入口 -- 桌面端:左侧栏「应用」→「OKR 管理」→ 编辑自己的 OKR → 找到「对齐 / 关联上级」相关设置 -- 移动端:底部 Tabbar「应用」→「OKR 管理」→ 同上路径 - -## 为什么要对齐 -对齐让个人 / 团队 OKR 与公司战略产生明确的因果链:上级的 O 拆成下级的 KR(或下级的某个 O),形成一棵目标树。这样团队成员能看到自己工作对全局的贡献。 - -## 操作步骤 -1. 先了解上级 / 团队的 OKR 内容 -2. 创建或编辑自己的 OKR([[okr.create.howto]]) -3. 在 OKR 表单中关联到一条或多条上级 OKR -4. 在自己的 KR 中明确「支撑了上级哪一项 KR」 -5. 保存后,上下级 OKR 之间会建立可追溯的关联 - -## 对齐的几种方式 -- **垂直对齐**:个人 → 直属上级 → 团队 → 公司,自上而下的目标树 -- **横向对齐**:不同团队就同一战略协同时,互相关联 OKR -- **混合对齐**:一个个人 OKR 可同时关联多条上级 OKR - -## 对齐时的建议 -- 不要把上级 KR 原文照搬到自己的 KR -- 用「我做什么能帮上级达成 KR」的视角拆解 -- 与直属上级沟通后再正式对齐,确保理解一致 - -## 不支持 -- 对齐不会自动复制 KR 内容 -- 上级 OKR 进度更新不会自动推算到下级,需各自单独更新 - -## 相关 -- 团队 vs 个人 OKR:[[okr.team.concept]] -- KR 更新:[[okr.update-progress.howto]] diff --git a/resources/ai-kb/zh/howto/okr/create.md b/resources/ai-kb/zh/howto/okr/create.md deleted file mode 100644 index 8efe89a99..000000000 --- a/resources/ai-kb/zh/howto/okr/create.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -id: okr.create.howto -title: 创建 OKR -type: howto -feature: okr -scope: end-user -locale: zh -aliases: - - 怎么定 OKR - - 写 OKR - - 新建 OKR - - 建一条 OKR - - 加 OKR - - 我要写 OKR -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 okr 插件 - - 已确定本周期的目标方向 -negative: - - O 本身不带数字,量化交给 KR - - 一个 O 建议配 2-5 个 KR,不要超过 5 个 -last_verified: v1.7.90 ---- - -# 创建 OKR - -## 入口 -- 桌面端:左侧栏「应用」→「OKR 管理」(`apps/okr/list`) -- 移动端:底部 Tabbar「应用」→「OKR 管理」 -- 在「我的 OKR」或类似列表页有「+ 新建」入口 - -## 操作步骤 -1. 打开「OKR 管理」页面 -2. 点击新建按钮,进入 OKR 编辑表单 -3. 填写 Objective(O):用一句话写清这个周期想达成什么(不写数字) -4. 添加 Key Result(KR):按「+」逐条添加 2-5 个可量化的关键结果 -5. 选择所属周期(如 Q1/Q2/Q3/Q4 或年度,按团队约定) -6. 可选:对齐到上级 / 团队 OKR(参见 [[okr.align.howto]]) -7. 保存提交 - -## 写作建议 -- O 短小有方向感,例:「让新用户更快上手」 -- KR 必须可量化,带起点和目标值,例:「新用户首日留存率从 35% 提升到 50%」 -- 一次最多 3-5 个 O,避免分散注意力 -- 写完邀请直属上级或团队过审,确保方向对齐 - -## 创建后能做什么 -- 周期内:定期更新 KR 进度([[okr.update-progress.howto]]) -- 周期内:在 OKR 详情接收同事反馈与点评 -- 周期末:参与评审复盘([[okr.review.howto]]) - -## 不支持 -- O 字段不应填数字指标——量化交给 KR -- 已创建的 OKR 不建议中途频繁改 O 内容,需要调整时建议留改动记录或新建版本 - -## 相关 -- O 是什么:[[okr.objective.concept]] -- KR 是什么:[[okr.kr.concept]] -- 周期:[[okr.cycle.concept]] diff --git a/resources/ai-kb/zh/howto/okr/review.md b/resources/ai-kb/zh/howto/okr/review.md deleted file mode 100644 index 4e59222c5..000000000 --- a/resources/ai-kb/zh/howto/okr/review.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: okr.review.howto -title: OKR 周期评审与复盘 -type: howto -feature: okr -scope: end-user -locale: zh -aliases: - - OKR 复盘 - - OKR 评分 - - OKR 总结 - - OKR 周期末做什么 - - OKR 怎么打分 - - OKR review -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 okr 插件 - - 已在进行中的 OKR 接近周期末 -negative: - - OKR 分数不直接等同于绩效,不应与薪酬强绑定 - - 60-70% 的完成度通常算合格,挑战性目标 100% 反而值得反思 -last_verified: v1.7.90 ---- - -# OKR 周期评审与复盘 - -## 入口 -- 桌面端:左侧栏「应用」→「OKR 管理」→ 选中要评审的 OKR -- 管理员视角:左侧栏「应用」→「OKR 结果」(`apps/okr/analysis`),可看全员汇总数据 - -## 评审时机 -- 周期末(季度末 / 年末)的最后 1-2 周 -- 重大里程碑节点(可做中期评审) - -## 操作步骤 -1. 把所有 KR 的最终进度更新到位(参见 [[okr.update-progress.howto]]) -2. 打开 OKR 详情,逐条 KR 给出最终得分(0-100%) -3. 写一段总结,回答: - - 哪些 KR 达成 / 未达成?原因? - - 过程中遇到什么阻碍?怎么解决的? - - 下一周期需要保留 / 调整什么? -4. 邀请直属上级 / 团队成员一起复盘(建议召开 OKR 回顾会议) -5. 沉淀经验后开新周期 OKR - -## 打分参考 -- **0.6-0.7**:挑战性目标的合格线(O 通常视为达成) -- **0.4-0.6**:部分达成,需复盘原因 -- **< 0.4**:未达成,需要分析战略 / 执行问题 -- **1.0**:满分;若所有 KR 都满分,可能目标定得不够挑战 - -## 团队层面 -- 管理员可在「OKR 结果」页面查看团队整体完成度分布与趋势 -- 用于发现共性阻碍、跨团队对齐缺口 - -## 不支持 -- 分数本身不是绩效结论,应结合背景与过程综合判断 -- 复盘不应只走过场打分,关键在于沉淀经验 - -## 相关 -- KR 概念:[[okr.kr.concept]] -- 周期:[[okr.cycle.concept]] -- 团队 OKR:[[okr.team.concept]] diff --git a/resources/ai-kb/zh/howto/okr/update-progress.md b/resources/ai-kb/zh/howto/okr/update-progress.md deleted file mode 100644 index c90e44143..000000000 --- a/resources/ai-kb/zh/howto/okr/update-progress.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: okr.update-progress.howto -title: 更新 KR 进度 -type: howto -feature: okr -scope: end-user -locale: zh -aliases: - - 更新 OKR 进度 - - 改 KR 进度 - - OKR 打分 - - KR 怎么填进度 - - 我的 OKR 怎么推进 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 okr 插件 - - 已创建至少一条 OKR(参见 [[okr.create.howto]]) -negative: - - 只能由 KR 负责人(或团队管理员)更新进度,他人无法替改 - - 不建议每天频繁改动,业界推荐每周一次节奏 -last_verified: v1.7.90 ---- - -# 更新 KR 进度 - -## 入口 -- 桌面端:左侧栏「应用」→「OKR 管理」→ 进入「我的 OKR」→ 选中目标 O → 找到对应 KR -- 移动端:底部 Tabbar「应用」→「OKR 管理」→ 我的 OKR - -## 操作步骤 -1. 打开自己负责的某条 OKR -2. 找到要更新的 KR 行 -3. 编辑当前进度(百分比 0-100% 或更新实际数值,由插件按 KR 类型解析) -4. 可选:写一段进度说明(这周做了什么、遇到什么阻碍) -5. 保存 - -## 更新节奏 -- 推荐每周更新一次,月初 / 月末额外回顾 -- 重大进展 / 阻碍随时更新,让协作者及时看到 -- 周期末必须填最终值,作为评审打分依据(参见 [[okr.review.howto]]) - -## 进度的含义 -- 0%:完全未启动 -- 30-60%:稳步推进中 -- 60-70%:达到挑战性目标的合格线 -- 100%:完成全部目标值 -- > 100%:超额达成(部分团队允许,按团队约定) - -## 不支持 -- 不能由非负责人替改 KR 进度 -- 改动会留下记录,无法静默修改 - -## 相关 -- KR 是什么:[[okr.kr.concept]] -- 周期评审:[[okr.review.howto]] -- 创建 OKR:[[okr.create.howto]] diff --git a/resources/ai-kb/zh/howto/search/contact.md b/resources/ai-kb/zh/howto/search/contact.md deleted file mode 100644 index ef32c86c0..000000000 --- a/resources/ai-kb/zh/howto/search/contact.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: search.contact.howto -title: 搜索联系人 -type: howto -feature: search -scope: end-user -locale: zh -aliases: - - 找人 - - 搜人 - - 搜同事 - - 怎么找联系人 - - 按技能找人 - - 搜邮箱 -related_tools: [search_users] -related_pages: [] -prerequisites: [] -negative: - - 不会返回已禁用账号(`disable_at` 不为空) - - 不会返回机器人账号(`bot=1`) - - 单次最多返回 50 条(默认 20) -last_verified: v1.7.90 ---- - -# 搜索联系人 - -## 入口 -- 全局搜索框([[search.entry.menu-map]])输入关键词,切换到「联系人」分类,或不切分类查看跨类结果 -- 在新建群、邀请项目成员等成员选择器里也会复用联系人搜索 - -## 接口 -- 端点:`GET api/search/contact` -- 参数: - - `key`(必填):搜索关键词,空串直接返回空数组 - - `search_type`(可选):`text` / `vector` / `hybrid`,默认 `hybrid`,仅 Manticore 生效 - - `take`(可选):返回数量,默认 20,上限 50 - -## 匹配字段 -装了 Manticore 时可命中:昵称、邮箱、个人简介、技能标签。MySQL 回退仅按昵称 / 邮箱 / 部门做 `LIKE` 模糊匹配。 - -## 返回字段(每条) -- 用户基础信息:`userid` / `nickname` / `email` / `avatar` / `profession` -- `relevance`:相关度分(Manticore 才有,MySQL 回退恒为 0) -- `introduction_preview`:命中简介片段 -- `search_tags`:命中的技能标签数组(最多 10 个,按认可数排序) - -## 不支持 -- 不会返回已禁用 / 已离职的账号 -- 不会返回机器人账号 -- 不会单次返回超过 50 条结果(最多 50 条) -- 无权访问的用户也搜不到 - -## 相关 -- 引擎差异:[[search.engine.concept]] -- 入口与快捷键:[[search.entry.menu-map]] diff --git a/resources/ai-kb/zh/howto/search/file.md b/resources/ai-kb/zh/howto/search/file.md deleted file mode 100644 index 54bd0a489..000000000 --- a/resources/ai-kb/zh/howto/search/file.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: search.file.howto -title: 搜索文件 -type: howto -feature: search -scope: end-user -locale: zh -aliases: - - 找文件 - - 搜文件 - - 搜文档内容 - - 怎么搜文件内容 - - PDF 搜索 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 未装 search 插件时只能搜文件名,搜不到正文 - - Office 文件超过 50MB / 文本超过 5MB / 其他类型超过 20MB 不索引正文 - - 提取后正文超过 10 万字符会被截断 - - 单次最多返回 50 条(默认 20) -last_verified: v1.7.90 ---- - -# 搜索文件 - -## 入口 -- 全局搜索框([[search.entry.menu-map]])输入关键词,切到「文件」分类 -- 文件管理器(左侧栏「文件」)内的局部搜索复用同一接口 - -## 接口 -- 端点:`GET api/search/file` -- 参数: - - `key`(必填):搜索关键词,空则返回空数组 - - `search_type`(可选):`text` / `vector` / `hybrid`,默认 `hybrid`,仅 Manticore 生效 - - `take`(可选):返回数量,默认 20,上限 50 - -## 匹配字段 -- 装 Manticore:文件名 + 正文(支持 Word / Excel / PPT / PDF / TXT / Markdown / 代码文件等) -- 未装 Manticore:仅文件名 `LIKE` 模糊匹配,先查用户自己的文件,再补充共享给当前用户的文件 - -可索引正文的类型:`document` / `word` / `excel` / `ppt` / `txt` / `md` / `text` / `code`。 - -## 权限范围 -只返回当前用户**自己上传**或**被共享给当前用户**的文件,且按 Manticore 索引的 `allowed_users` 二次过滤。 - -## 返回字段(每条) -- 文件基础信息:`id` / `name` / `type` / `ext` / `size` / `userid` / `pid` 等 -- `relevance`:相关度分(仅 Manticore,MySQL 回退恒为 0) -- `content_preview`:命中正文片段(仅 Manticore) - -## 不支持 -- 未装 search 插件搜不到文件内部文本,搜不到内容 → [[search.engine.concept]] -- 大文件不索引正文(限额见 frontmatter `negative`) -- 不会单次返回超过 50 条结果(最多 50 条) diff --git a/resources/ai-kb/zh/howto/search/message.md b/resources/ai-kb/zh/howto/search/message.md deleted file mode 100644 index ef20d41cf..000000000 --- a/resources/ai-kb/zh/howto/search/message.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: search.message.howto -title: 搜索消息 -type: howto -feature: search -scope: end-user -locale: zh -aliases: - - 搜聊天记录 - - 找消息 - - 搜消息 - - 在群里搜消息 - - 怎么找以前的聊天 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 只能搜到当前用户能访问的会话内消息(私聊 / 自己加入的群) - - 机器人消息不会被搜出(`bot=1` 过滤) - - 指定 `dialog_id` 时会校验当前用户是否在该对话内,无权访问会报错 - - 单次最多返回 50 条(默认 20) -last_verified: v1.7.90 ---- - -# 搜索消息 - -## 入口 -- 全局搜索框([[search.entry.menu-map]])输入关键词,切到「消息」分类 -- 在某个聊天窗口内的「搜索本对话」框,会自动带上 `dialog_id` 只搜该对话 - -## 接口 -- 端点:`GET api/search/message` -- 参数: - - `key`(必填):搜索关键词,空则返回空数组 - - `search_type`(可选):`text` / `vector` / `hybrid`,默认 `hybrid`,仅 Manticore 生效 - - `take`(可选):返回数量,默认 20,上限 50 - - `mode`(可选):`message` / `position` / `dialog`,默认 `message` - - `dialog_id`(可选):筛选指定对话内的消息,非 0 时需有权访问 - -## mode 三种返回格式 -- `message`(默认):返回完整消息,含发送者、消息体、时间、相关度 -- `position`:只返回消息 ID 数组,用于跳转定位 -- `dialog`:按会话聚合,每个会话只返回 1 条命中(带 `search_msg_id` 用于跳定位) - -## 权限范围 -通过 `accessibleByUser($userid)` 限制:只能搜到「当前用户在对话成员列表里的会话」中的消息。指定 `dialog_id` 时额外做 `WebSocketDialog::checkDialog` 校验。 - -## 不支持 -- 搜不到机器人消息 -- 搜不到非成员会话的消息 -- 不会单次返回超过 50 条结果(最多 50 条) -- 文件 / 图片消息只能按文件名命中,无法按图片内容搜索 - -## 相关 -- 引擎差异:[[search.engine.concept]] -- 搜不到怎么办:[[search.no-result.faq]] diff --git a/resources/ai-kb/zh/howto/search/project.md b/resources/ai-kb/zh/howto/search/project.md deleted file mode 100644 index 6efd1faaf..000000000 --- a/resources/ai-kb/zh/howto/search/project.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: search.project.howto -title: 搜索项目 -type: howto -feature: search -scope: end-user -locale: zh -aliases: - - 找项目 - - 搜项目 - - 怎么找项目 - - 项目搜不到 -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - 不会返回已归档项目(`archived_at` 不为空) - - 不会返回当前用户没有加入的项目 - - 单次最多返回 50 条(默认 20) -last_verified: v1.7.90 ---- - -# 搜索项目 - -## 入口 -- 全局搜索框([[search.entry.menu-map]])输入关键词,切到「项目」分类 -- 项目列表 / 项目选择器内的局部搜索复用同一接口 - -## 接口 -- 端点:`GET api/search/project` -- 参数: - - `key`(必填):搜索关键词,空则返回空数组 - - `search_type`(可选):`text` / `vector` / `hybrid`,默认 `hybrid`,仅 Manticore 生效 - - `take`(可选):返回数量,默认 20,上限 50 - -## 匹配字段 -装了 Manticore 时可命中:项目名、项目描述、文本类附加信息。MySQL 回退仅按项目名做 `LIKE` 模糊匹配。 - -## 权限范围 -仅在「当前用户已加入的项目」范围内搜,使用 `Project::authData()` 限定。未加入的项目即使关键词匹配也不会返回。 - -## 返回字段(每条) -- 项目基础信息:`id` / `name` / `desc` / `owner_userid` / `created_at` 等 -- `relevance`:相关度分(仅 Manticore,MySQL 回退恒为 0) -- `desc_preview`:命中描述片段(仅 Manticore) - -## 不支持 -- 已归档项目不返回(解归档后才能搜到,[[search.no-result.faq]]) -- 不在当前用户成员列表的项目不返回 -- 不会单次返回超过 50 条结果(最多 50 条) - -## 相关 -- 引擎差异:[[search.engine.concept]] -- 搜不到怎么办:[[search.no-result.faq]] diff --git a/resources/ai-kb/zh/howto/search/task.md b/resources/ai-kb/zh/howto/search/task.md deleted file mode 100644 index 5cf957285..000000000 --- a/resources/ai-kb/zh/howto/search/task.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: search.task.howto -title: 搜索任务 -type: howto -feature: search -scope: end-user -locale: zh -aliases: - - 找任务 - - 搜任务 - - 找待办 - - 怎么搜到子任务 - - task 搜索 -related_tools: [list_tasks] -related_pages: [] -prerequisites: [] -negative: - - 不会返回已归档任务(`archived_at` 不为空) - - 不会返回已删除任务(`deleted_at` 不为空) - - 不会返回当前用户所在项目以外的任务 - - 单次最多返回 50 条(默认 20) -last_verified: v1.7.90 ---- - -# 搜索任务 - -## 入口 -- 全局搜索框([[search.entry.menu-map]])输入关键词,切到「任务」分类 -- 项目内 / 看板内的局部搜索也复用同一接口 - -## 接口 -- 端点:`GET api/search/task` -- 参数: - - `key`(必填):搜索关键词,空则返回空数组 - - `search_type`(可选):`text` / `vector` / `hybrid`,默认 `hybrid`,仅 Manticore 生效 - - `take`(可选):返回数量,默认 20,上限 50 - -## 匹配字段 -装了 Manticore 时可命中:任务名、任务描述、子任务内容、备注等正文。MySQL 回退仅按任务名做 `LIKE` 模糊匹配,描述里的关键词搜不到。 - -## 权限范围 -仅在「当前用户已加入的项目」内的任务范围搜索,且排除已归档、已删除任务。子任务也会被命中并返回。 - -## 返回字段(每条) -- 任务基础信息:`id` / `name` / `desc` / `start_at` / `end_at` / `complete_at` 等 -- 关联信息:`task_user`(负责人 / 协作者)、`task_tag`(任务标签) -- `relevance`:相关度分(仅 Manticore) -- `desc_preview`:命中描述片段 -- `content_preview`:命中子任务 / 内容片段 - -## 不支持 -- 已归档 / 已删除任务不返回(先恢复才能搜到) -- 跨项目时只能搜当前用户参与的项目 -- 不会单次返回超过 50 条结果(最多 50 条) - -## 相关 -- 引擎差异:[[search.engine.concept]] -- 搜不到怎么办:[[search.no-result.faq]] diff --git a/resources/ai-kb/zh/menu-map/approve/entry.md b/resources/ai-kb/zh/menu-map/approve/entry.md deleted file mode 100644 index d51c9d34f..000000000 --- a/resources/ai-kb/zh/menu-map/approve/entry.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -id: approve.entry.menu-map -title: 审批中心入口在哪 -type: menu-map -feature: approve -scope: end-user -locale: zh -aliases: - - 审批在哪 - - 怎么进审批 - - 审批中心入口 - - 走流程在哪 - - 找不到审批 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 approve 插件 - - 管理员已配置至少一个审批流程模板 -negative: - - 未安装 approve 插件时左侧应用中心看不到「审批」卡片 - - 没有可用流程模板时进入页面会提示「暂无数据」,发起按钮无效 -last_verified: v1.7.90 ---- - -# 审批中心入口在哪 - -## 路径 -- 桌面端:左侧栏「应用」→ 卡片「审批」 -- 移动端:底部 Tabbar「应用」→ 列表「审批」 -- 快捷键:无 - -## 页面结构 -进入后顶部是 4 个 Tab,按用户视角分组: -- **待办**:分配给我、需要我点同意/拒绝的审批,Tab 名后会带未读数量(如「待办(3)」) -- **已办**:我曾经处理过(同意/拒绝/撤销)的审批 -- **抄送我**:流程节点把我设为抄送人的审批 -- **已发起**:我自己提交的审批,含审批中/通过/拒绝/撤回各状态 - -## 权限要求 -- end-user 任何登录用户均可见入口和这 4 个 Tab -- admin 会额外看到「流程设置」按钮(在页面右上角);管理员的流程模板配置不在本 chunk 范围 - -## 相关 -- 简介与一图速览:[[app-system.approve.howto]] -- 是什么:[[approve.concept]] -- 怎么发起:[[approve.start.howto]] diff --git a/resources/ai-kb/zh/menu-map/drawio/entry.md b/resources/ai-kb/zh/menu-map/drawio/entry.md deleted file mode 100644 index 133641cd5..000000000 --- a/resources/ai-kb/zh/menu-map/drawio/entry.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -id: drawio.entry.menu-map -title: 流程图入口在哪 -type: menu-map -feature: drawio -scope: end-user -locale: zh -aliases: - - 流程图在哪 - - 找不到流程图 - - drawio 入口 - - 怎么打开 drawio - - 图表在哪个菜单 -related_tools: [] -related_pages: [file, application] -prerequisites: - - 应用市场已安装 drawio 插件 -negative: - - 流程图不是左侧栏一级菜单,要从「文件」页进入 - - 未安装 drawio 插件时,文件新建菜单不会出现「图表」选项 - - 没有「在线流程图中心」这种独立页面,所有图都散落在各自文件夹中 -last_verified: v1.7.90 ---- - -# 流程图入口在哪 - -## 路径 -流程图作为「文件」存在,没有独立的一级菜单,入口都在文件相关页面: - -- 桌面端:左侧栏「文件」→ 文件列表右上角「新建」→「图表」 -- 桌面端(右键):文件页空白区右键 →「新建」→「图表」 -- 桌面端(项目):进入项目详情 →「文件」标签页 → 新建菜单 →「图表」 -- 移动端:底部 Tabbar「文件」→ 选定目标文件夹 → 右下角「+」按钮 →「图表」 -- 已有 drawio 文件:在文件列表直接双击/单击文件名即可打开 - -> 菜单文案叫「图表」,文件类型字段叫 `drawio`,是同一个东西。 - -## 编辑器布局 -进入后页面被 iframe 全屏占用,drawio 标准三栏: -- 左侧:图形库(流程图、UML、网络、思维导图等多分类可勾选) -- 中部:画布 -- 右侧:选中元素的样式/几何/排版面板 -- 顶部:菜单栏(File/Edit/View/Arrange/Extras/Help) - -## 权限要求 -- 普通成员:在自己有权访问的文件夹/项目内可建可编辑 -- 只读访问者:只能预览,无法编辑(drawio 以 `readOnly=true` 模式打开) - -## 看不到入口怎么办 -1. 确认应用市场已装 drawio 插件(约 700MB,安装较慢,按「安装日志」判断进度) -2. 没有「新建」按钮通常是当前文件夹无写入权限,换文件夹再试 - -## 相关 -- 插件元信息:[[drawio.plugin.concept]] -- 是什么:[[drawio.concept]] diff --git a/resources/ai-kb/zh/menu-map/kpi/entry.md b/resources/ai-kb/zh/menu-map/kpi/entry.md deleted file mode 100644 index 7a56ebfc5..000000000 --- a/resources/ai-kb/zh/menu-map/kpi/entry.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: kpi.entry.menu-map -title: KPI 绩效考核入口 -type: menu-map -feature: kpi -scope: end-user -locale: zh -aliases: - - KPI 在哪 - - 怎么打开绩效 - - 找不到绩效考核 - - 绩效入口 - - 怎么进 KPI -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 kpi 插件 - - 主程序版本 > 1.4.67 -negative: - - 主程序不内置 KPI,未装插件时入口不会出现 - - 主程序版本不够无法安装插件,入口也不会出现 - - 不同角色看到的页面功能不同,但入口是同一个 -last_verified: v1.7.90 ---- - -# KPI 绩效考核入口 - -## 路径 -KPI 由独立插件 `community_kuaifan_kpi` 提供,安装后在应用中心注册一个菜单项: - -- 桌面端:左侧栏「应用」→「绩效考核」(对应 URL `apps/kpi`) -- 移动端:底部 Tabbar「应用」→「绩效考核」 -- URL 上会自动附带 `theme` 参数,用于主题(亮 / 暗)同步 - -## 加载方式 -- 菜单项类型 `url_type: iframe`,在 DooTask 主框架内嵌打开 -- `immersive: true`:进入后会全屏沉浸展示,左侧主导航被收起 -- 同一个入口对所有角色可见,进入后页面根据当前用户的 KPI 角色(employee / manager / hr)展示对应功能 - -## 权限要求 -- 入口本身:所有已登录用户可见 -- 角色映射: - - DooTask 系统管理员 → KPI 内部 hr 角色 - - DooTask 部门负责人 → KPI 内部 manager 角色 - - 其他用户 → KPI 内部 employee 角色 -- 注意:角色只在用户首次进入 KPI 时分配,后续 DooTask 角色变更不会自动同步 - -## 看不到入口怎么办 -1. 确认应用市场已安装 `kpi` 插件 -2. 主程序版本必须 > 1.4.67,否则插件无法安装 -3. 容器首次启动需要拉取镜像,可能等待几分钟 -4. 安装完成后刷新页面或重新登录让菜单生效 - -## 相关 -- 插件元信息:[[kpi.plugin.concept]] -- KPI 是什么:[[kpi.concept]] -- 创建考核:[[kpi.create.howto]] diff --git a/resources/ai-kb/zh/menu-map/memos/entry.md b/resources/ai-kb/zh/menu-map/memos/entry.md deleted file mode 100644 index 006098162..000000000 --- a/resources/ai-kb/zh/menu-map/memos/entry.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -id: memos.entry.menu-map -title: Memos 笔记入口 -type: menu-map -feature: memos -scope: end-user -locale: zh -aliases: - - Memos 在哪 - - 怎么打开 Memos - - 找不到 Memos - - 笔记入口 - - memos 应用入口 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 memos 插件 -negative: - - 主程序不内置 Memos,未装插件时入口不会出现 - - 入口对所有登录用户可见,不要求管理员权限 -last_verified: v1.7.90 ---- - -# Memos 笔记入口 - -## 路径 -Memos 由独立插件 `community_kuaifan_memos` 提供,安装后在应用中心注册一个菜单项: - -- 桌面端:左侧栏「应用」→「Memos 笔记」(对应 URL `apps/memos/`) -- 移动端:底部 Tabbar「应用」→「Memos 笔记」 -- URL 上会自动附带 `token`、`lang`、`theme` 参数,用于单点登录与主题同步 - -## 加载方式 -- 菜单项类型 `url_type: iframe`,在 DooTask 主框架内嵌打开 -- `immersive: true`:进入页面后会全屏沉浸展示 -- 隐藏 DooTask 的浮动胶囊条(与 Memos 自带顶栏重叠),返回主程序请使用 Memos 左侧栏的「关闭应用」按钮 - -## 权限要求 -- 所有已登录的 DooTask 用户可见可用 -- 是否成为 Memos 管理员,由安装时的「管理员」配置决定(其余用户为普通成员) - -## 看不到入口怎么办 -1. 确认应用市场已安装 `memos` 插件 -2. 容器首次启动需要拉取镜像,可能等待几分钟 -3. 刷新页面或重新登录 DooTask 让菜单生效 - -## 相关 -- 插件元信息:[[memos.plugin.concept]] -- Memos 是什么:[[memos.concept]] -- 写一条 memo:[[memos.create.howto]] diff --git a/resources/ai-kb/zh/menu-map/menu-navigation/ai-assistant.md b/resources/ai-kb/zh/menu-map/menu-navigation/ai-assistant.md index 1de7d8da5..09e92d277 100644 --- a/resources/ai-kb/zh/menu-map/menu-navigation/ai-assistant.md +++ b/resources/ai-kb/zh/menu-map/menu-navigation/ai-assistant.md @@ -37,6 +37,5 @@ last_verified: v1.7.90 - 单个会话由当前账号私有,不会跨账号 ## 相关 -- 浮动入口与场景模式:[[ai-assistant.entry.howto]] -- 快速开始:[[ai-assistant.entry.howto]] +- 浮动入口、场景模式与快速开始等详细说明,随 AI 助手(ai)插件一并提供,安装后即可在 AI 助手中检索 - 模型与默认值由管理员配:[[system-setting.ai-model.howto]] diff --git a/resources/ai-kb/zh/menu-map/menu-navigation/apps.md b/resources/ai-kb/zh/menu-map/menu-navigation/apps.md index cad0d69ea..58acf4e9d 100644 --- a/resources/ai-kb/zh/menu-map/menu-navigation/apps.md +++ b/resources/ai-kb/zh/menu-map/menu-navigation/apps.md @@ -42,5 +42,5 @@ last_verified: v1.7.90 ## 相关 - 应用排序:[[menu-navigation.apps-sort.menu-map]] - 微应用入口:[[micro-app.entry.menu-map]] -- 审批中心:[[approve.entry.menu-map]] +- 审批中心:随审批(approve)插件提供,安装后可在 AI 助手中检索 - 在线会议:[[meeting.entry.menu-map]] diff --git a/resources/ai-kb/zh/menu-map/menu-navigation/new-approve.md b/resources/ai-kb/zh/menu-map/menu-navigation/new-approve.md index f71a6ccc4..d02c5f8b5 100644 --- a/resources/ai-kb/zh/menu-map/menu-navigation/new-approve.md +++ b/resources/ai-kb/zh/menu-map/menu-navigation/new-approve.md @@ -36,6 +36,4 @@ last_verified: v1.7.90 - 要看到具体模板,须管理员先在「流程设置」配置 ## 相关 -- 审批中心总览:[[approve.entry.menu-map]] -- 发起步骤:[[approve.start.howto]] -- 概念:[[approve.concept]] +- 审批的中心总览、发起步骤与概念等详细说明,随审批(approve)插件一并提供,安装后即可在 AI 助手中检索 diff --git a/resources/ai-kb/zh/menu-map/menu-navigation/search.md b/resources/ai-kb/zh/menu-map/menu-navigation/search.md index d127abed3..e7ee0951b 100644 --- a/resources/ai-kb/zh/menu-map/menu-navigation/search.md +++ b/resources/ai-kb/zh/menu-map/menu-navigation/search.md @@ -32,12 +32,12 @@ last_verified: v1.7.90 ## 搜索范围 - 任务名 / 项目名 / 文件名 / 联系人 / 历史消息内容 -- 支持语义搜索(详见 [[search.concept]]) +- 支持语义搜索(语义搜索能力由全文搜索 search 插件提供) ## 权限要求 - end-user 可用 - 结果只返回当前账号有权访问的对象 ## 相关 -- 搜索能力总览:[[search.entry.menu-map]] +- 搜索能力总览随全文搜索(search)插件提供,安装后可在 AI 助手中检索 - 高级搜索语法:高级筛选 diff --git a/resources/ai-kb/zh/menu-map/minder/entry.md b/resources/ai-kb/zh/menu-map/minder/entry.md deleted file mode 100644 index b5e86b53f..000000000 --- a/resources/ai-kb/zh/menu-map/minder/entry.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -id: minder.entry.menu-map -title: 思维导图入口在哪 -type: menu-map -feature: minder -scope: end-user -locale: zh -aliases: - - 思维导图在哪 - - 找不到思维导图 - - 脑图入口 - - 怎么打开思维导图 - - 思维导图在哪个菜单 -related_tools: [] -related_pages: [file, application] -prerequisites: - - 应用市场已安装 minder 插件 -negative: - - 思维导图不是左侧栏一级菜单,要从「文件」页进入 - - 未安装 minder 插件时,文件新建菜单不会出现「思维导图」选项 - - 移动端入口与桌面端一致,仅交互略有不同 -last_verified: v1.7.90 ---- - -# 思维导图入口在哪 - -## 路径 -思维导图作为「文件」存在,没有独立的一级菜单,入口都在文件相关页面: - -- 桌面端:左侧栏「文件」→ 文件列表右上角「新建」→「思维导图」 -- 桌面端(右键):文件页空白区右键 →「新建」→「思维导图」 -- 桌面端(项目):进入项目详情 →「文件」标签页 → 新建菜单 →「思维导图」 -- 移动端:底部 Tabbar「文件」→ 选定目标文件夹 → 右下角「+」按钮 →「思维导图」 -- 已有 mind 文件:在文件列表直接双击/单击文件名即可打开 - -## 编辑器布局 -进入后页面被 iframe 全屏占用: -- 左下角浮动工具条:缩放、图形模板、主题切换、折叠层级、居中、移动模式 -- 节点直接双击即可编辑文本 - -## 权限要求 -- 普通成员:在自己有权访问的文件夹/项目内可建可编辑 -- 只读访问者:只能预览,无法编辑 - -## 看不到入口怎么办 -1. 确认应用市场已装 minder 插件(约 20MB,安装较慢) -2. 没有「新建」按钮通常是当前文件夹无写入权限,换文件夹再试 - -## 相关 -- 插件元信息:[[minder.plugin.concept]] -- 是什么:[[minder.concept]] diff --git a/resources/ai-kb/zh/menu-map/office/entry.md b/resources/ai-kb/zh/menu-map/office/entry.md deleted file mode 100644 index 9e4c75d41..000000000 --- a/resources/ai-kb/zh/menu-map/office/entry.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -id: office.entry.menu-map -title: 在线文档入口在哪 -type: menu-map -feature: office -scope: end-user -locale: zh -aliases: - - 在线文档在哪 - - 在线 Word 入口 - - 在哪建在线表格 - - office 在哪 - - 找不到在线 PPT -related_tools: [] -related_pages: [file, application] -prerequisites: - - 应用市场已安装 office(OnlyOffice)插件 -negative: - - 在线文档不是左侧栏一级菜单,要从「文件」页进入 - - 未安装 office 插件时,双击 Word/Excel/PPT 文件不会进入编辑器,只显示静态预览(依赖 fileview 插件) - - 没有「在线文档中心」这种独立页面,所有 office 文档散落在各自文件夹中 -last_verified: v1.7.90 ---- - -# 在线文档入口在哪 - -## 路径 -在线 Word/Excel/PPT 作为「文件」存在,没有独立的一级菜单,入口都在文件相关页面: - -- 桌面端:左侧栏「文件」→ 文件列表右上角「新建」→「Word 文档 / Excel 工作表 / PPT 演示文稿」 -- 桌面端(右键):文件页空白区右键 →「新建」→ 同上三选一 -- 桌面端(项目):进入项目详情 →「文件」标签页 → 新建菜单 → 同上三选一 -- 移动端:底部 Tabbar「文件」→ 选定目标文件夹 → 右下角「+」按钮 → 同上三选一 -- 已有文档:在文件列表直接双击/单击文件名即可打开编辑 - -## 上传后自动可编辑 -扩展名在以下列表内的上传文件,双击即可在线编辑(无需先转格式): -- Word 系:doc, docx, dot, dotx, odt, ott, rtf -- Excel 系:xls, xlsx, xlsm, xlt, xltx, ods, ots, csv, tsv -- PPT 系:ppt, pptx, pps, ppsx, pot, potx, odp, otp - -## 编辑器布局 -进入后页面被 iframe 全屏占用,由 OnlyOffice 提供完整菜单: -- 顶部:标题栏(含协作者头像)+ 菜单栏(文件、首页、插入、布局、引用、协作、视图等) -- 中部:文档编辑区 -- 右侧:批注、聊天、协作状态浮层 - -## 权限要求 -- 普通成员:在自己有权访问的文件夹/项目内可建可编辑 -- 只读访问者:只能预览,无法编辑 - -## 看不到入口怎么办 -1. 确认应用市场已装 office 插件(约 1.3GB,安装较慢) -2. 没有「新建」按钮通常是当前文件夹无写入权限,换文件夹再试 - -## 相关 -- 插件元信息:[[office.plugin.concept]] -- 是什么:[[office.concept]] diff --git a/resources/ai-kb/zh/menu-map/okr/entry.md b/resources/ai-kb/zh/menu-map/okr/entry.md deleted file mode 100644 index d0cb91968..000000000 --- a/resources/ai-kb/zh/menu-map/okr/entry.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: okr.entry.menu-map -title: OKR 入口在哪里 -type: menu-map -feature: okr -scope: end-user -locale: zh -aliases: - - OKR 在哪 - - 怎么打开 OKR - - 找不到 OKR - - OKR 管理入口 - - OKR 结果在哪看 -related_tools: [] -related_pages: [application] -prerequisites: - - 应用市场已安装 okr 插件(约 15MB) -negative: - - 主程序不内置 OKR,未装插件时入口不会出现 - - 「OKR 结果」(OKR Analysis)入口仅系统管理员可见 -last_verified: v1.7.90 ---- - -# OKR 入口在哪里 - -## 路径 -OKR 由独立插件提供,安装后会在应用中心注册两个菜单项: - -- 桌面端:左侧栏「应用」→「OKR 管理」(对应 URL `apps/okr/list`) -- 移动端:底部 Tabbar「应用」→「OKR 管理」 -- 管理员视角:左侧栏「应用」→「管理员应用」→「OKR 结果」(对应 URL `apps/okr/analysis`,仅 admin 可见) - -## 加载方式 -两个入口都是 `url_type: inline`,会在 DooTask 主框架内嵌打开插件页面,不跳转到外部站点。 - -## 权限要求 -- 「OKR 管理」:所有已登录用户可见可用 -- 「OKR 结果」:只有系统管理员(`userIsAdmin`)能看到入口 - -## 看不到入口怎么办 -1. 确认应用市场已安装 okr 插件,参见 [[okr.cannot-install.faq]] -2. 安装较慢(约 15MB),首次安装后等几分钟刷新页面 -3. 「OKR 结果」入口缺失通常是因为当前用户不是系统管理员 - -## 相关 -- 插件元信息:[[okr.plugin.concept]] -- OKR 方法论:[[okr.concept]] diff --git a/resources/ai-kb/zh/menu-map/search/entry.md b/resources/ai-kb/zh/menu-map/search/entry.md deleted file mode 100644 index 5d4a6ef09..000000000 --- a/resources/ai-kb/zh/menu-map/search/entry.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: search.entry.menu-map -title: 全局搜索入口在哪 -type: menu-map -feature: search -scope: end-user -locale: zh -aliases: - - 搜索快捷键 - - 怎么打开搜索 - - 搜索框在哪 - - 搜索入口 - - Ctrl F - - Cmd F -related_tools: [] -related_pages: [] -prerequisites: [] -negative: - - "桌面端无顶部固定搜索栏按钮,主要通过快捷键唤起" - - "`Ctrl/Cmd + Shift + F` 不是全局搜索,会被浏览器或系统拦截" -last_verified: v1.7.90 ---- - -# 全局搜索入口在哪 - -## 路径 -- 桌面端:快捷键 `Ctrl + F` 或 `Cmd + F`(Mac)唤起全局搜索框 -- 桌面端备用快捷键:`Ctrl + /` 或 `Cmd + /` -- 桌面端:左侧栏「仪表盘」页面中的「全局搜索」入口卡片 -- 移动端:底部 Tabbar / 仪表盘内的搜索按钮,点击弹出全屏搜索 - -## 搜索框形态 -- 桌面端:居中弹窗,宽 768px,含输入框、5 个对象分类标签(任务 / 项目 / 消息 / 联系人 / 文件)和结果列表 -- 移动端(窗口宽 < 576px):自动全屏展开 - -## 在搜索框内的操作 -- 输入关键词后自动延时触发搜索(无需回车) -- 点击顶部标签可只看某一类对象的结果;再次点击取消筛选 -- 同时装了 search + ai 插件时,会出现「AI 搜索」按钮,把搜索词转给 AI 助手做语义对话 - -## 权限要求 -- 所有登录用户均可使用,无角色限制 -- 但搜索结果会按用户权限过滤(见各子接口的权限说明,如 [[search.contact.howto]]) - -## 不支持 -- 桌面端没有顶部常驻搜索栏,必须用快捷键或仪表盘入口 -- `Ctrl/Cmd + Shift + F` 已被快捷键路由忽略,不会触发全局搜索