mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-22 13:05:18 +00:00
- 前端表格列添加溢出提示工具 - 后端登录IP归属地查询与设置统一处理 - 分页服务明确仅用于非SQL数据源场景 - 代码生成器添加字段筛选和帮助面板 - 修复菜单高亮和布局切换问题 - 更新文档中的BUG状态和解决方案 - 优化AI聊天界面样式和交互 - 添加数据库分页支持到多个模块 - 代码生成器表单校验和流程优化 - 修复PostgreSQL日期类型问题
140 lines
11 KiB
Markdown
140 lines
11 KiB
Markdown
# 缺陷与需求梳理 / 解决顺序排期
|
||
|
||
> 来源:产品与用户反馈整理(持续更新)
|
||
> 说明:**BUG** 为缺陷或错误行为;**需求** 为功能增强或非缺陷类诉求。排期优先:**安全 → 阻断使用类缺陷 → 性能 → 大型能力**。
|
||
|
||
---
|
||
|
||
## 一、BUG(缺陷 / 错误行为)
|
||
|
||
|
||
| 编号 | 简述 | 说明 | 状态 |
|
||
| ------ | ---------------------------------------- | ----------------------------- | -- |
|
||
| **1** | 角色授权:动子权限后丢父菜单,入口消失;分配后左侧能显示,点进页面后左侧导航没了 | 保存时补全祖先菜单 id;授权树节点用 `value ?? id` 建父链(`PermissonDrawer`) | **已验证解决** |
|
||
| **2** | 左侧 / 顶部 / 混合三种布局下:兄弟目录同时高亮、或父级不亮、混合布局展开被收起等 | **`MenuItem.menuItemIndex`**:目录(有可见子节点)的 `el-menu` **index** 仅用菜单树 `path.resolve` 结果,禁止对目录用 `router.resolve(name)`(易解析成父级短路径如 `/task`,触发兄弟分支误亮);**叶子** `index` 用 `router.resolve(name).path`,与 `route.path`、`default-active` 同源。**`BasicMenu`**:`default-active` = `meta.activeMenu` 或规范化 `route.path`;去掉 `el-menu` 按 `route.path` 的 **`:key`**(避免每次跳转整表重建);`watch` 仅在 **`nextTick` 内一次** `updateActiveIndex`。**`MixLayout`**:`BasicMenu` 使用 **`:key="mixSideMenuKey"`**,仅切换顶级模块时重建侧栏。父级标题高亮依赖 **Element Plus** `el-sub-menu.is-active`。另:目录 **redirect** 必填见前后端校验(数据规范)。 | **已验证解决** |
|
||
| **7** | 混合布局下点「AI 智能助手」会跳到应用管理 | 顶栏当前模块与路由前缀误匹配(如 `/app` 与 `/application`);已用最长前缀匹配修复 | **已验证解决** |
|
||
| **8** | 历史对话内容不全(仅首条)等 | **附件**:**非缺陷**,系当前**模型/后端能力不支持附件**,非前端逻辑错误;对话输入已关闭实际上传并提示「附件功能开发中」。若后续接入支持多模态/文件的模型,再按**需求**迭代。历史会话展示不全等问题另计 | — |
|
||
| **14** | 建普通用户分配权限:未全选二级时一级消失,二级变一级 | 与 **#1** 同类;随 **#1** 一并修复与验证 | **已验证解决** |
|
||
| **15** | 先查库再分页,应改为数据库分页 | 列表接口已改为 `CRUDBase.page`(OFFSET/LIMIT + COUNT);**仍用内存分页**:在线用户(Redis)、资源目录(本地文件)、代码生成「数据库表」列表(Inspector 全量)、AI 会话(Agno) | **已验证解决** |
|
||
| **21** | 代码生成不识别表主键,强制 `id` | 代码生成 BUG | — |
|
||
| **24** | 登录慢,因查 IP 等,希望优化 | ``LOGIN_RESOLVE_IP_LOCATION`` 关闭时,操作日志路由曾仍调外网解析 IP;已改为 ``IpLocalUtil.resolve_location_for_log`` 与发 token 逻辑一致 | **已验证解决** |
|
||
| **27** | 新增用户密码明文传输 | **安全漏洞**,需 HTTPS + 传输层防护或密码策略 | — |
|
||
| **28** | PG 下 date 类型新增报错 | PostgreSQL `DATE` 与 ORM/校验对齐后新增正常;**已验证解决**(仍建议 PG 环境做回归) | **已验证解决** |
|
||
|
||
|
||
---
|
||
|
||
## 二、需求(功能 / 增强 / 非缺陷)
|
||
|
||
|
||
| 编号 | 简述 |
|
||
| ------- | ------------------------------------ |
|
||
| **3** | 企业微信、飞书等移动端快捷登录 |
|
||
| **4** | 同步企业微信、蓝凌等 OA 组织架构(部门、人员) |
|
||
| **5** | 按岗位授权(非角色),与 OA/企微组织同步 |
|
||
| **6** | 菜单很多时载入/修改很慢 |
|
||
| **9** | 数据权限按菜单/模块细分(如公告全量、用户本部门及以下) |
|
||
| **10** | 前端中英文大量未翻译 |
|
||
| **11** | 上传封装 OSS、S3、FTP/FTPS 等 |
|
||
| **12** | 适配 Python 3.13;升级 asyncmy、pandas 等版本 |
|
||
| **13** | 多租户 |
|
||
| **16** | AI:知识库 + Skills 管理 |
|
||
| **17** | 钉钉登录与消息推送 |
|
||
| **18** | 工作流编排 + 应用上传,类似 Dify |
|
||
| **19** | BPM 在线表单、树表、主子表 |
|
||
| **20** | 菜单升级:导出个人菜单、清空、升级系统菜单再导入 |
|
||
| **22** | WebSocket + 类 MQTT,通知/工作项与前端处理接口 |
|
||
| **23** | 简单博客 Demo(前端免鉴权读数据 + 规范示例) |
|
||
| **25** | 免登录能力加总开关 |
|
||
| **26a** | 有 `order` 字段时统一按 `order` 排序 |
|
||
| **26b** | 布局:分系统式,点目录弹出子系统菜单 |
|
||
|
||
|
||
> 原反馈中有两条均标为「26」,此处拆为 **26a(排序)**、**26b(布局)**。
|
||
|
||
---
|
||
|
||
## 三、合并与依赖说明
|
||
|
||
- **#1 + #14**:同一类「权限勾选 ↔ 菜单树」问题;**已验证解决**(前端树 `value`/父链与保存补祖先),后续大改菜单数据结构时可做回归。
|
||
- **#7**:与布局/路由强相关;**已验证解决**(混合顶栏最长前缀匹配)。**#2** 已验证解决,三种布局菜单可一起做回归。
|
||
- **#15**:列表接口已切数据库分页;无法在 SQL 层分页的数据源仍用 `PaginationService`(见 BUG 表说明)。
|
||
- **#9、#5、#4**:组织/岗位/数据权限有产品依赖,宜在方案定稿后再开发。
|
||
- **#8 附件**:不作为缺陷跟进;与模型能力对齐后再立项。
|
||
|
||
---
|
||
|
||
## 四、建议解决顺序(排期)
|
||
|
||
### 第一阶段(优先:安全 + 阻断使用 + 明确 BUG)
|
||
|
||
1. **#27 密码明文传输** — 安全最高优先级(HTTPS、前端摘要/后端策略、接口审计)。
|
||
2. ~~**#1 + #14 权限与菜单树**~~ — **已验证解决**(回显、保存补祖先、`menuTreeNodeId`)。
|
||
3. ~~**#7 混合布局 + AI 助手跳转错误**~~ — **已验证解决**(`MixTopMenu` 最长前缀匹配顶栏路径)。
|
||
4. **#21 代码生成主键** — 影响生成代码正确性,改动面相对可控。
|
||
5. ~~**#28 PG date**~~ — **已验证解决**(PG 环境可做回归用例)。
|
||
|
||
### 第二阶段(体验与性能)
|
||
|
||
1. ~~**#24 登录慢(IP 等)**~~ — **已验证解决**(操作日志与登录共用可配置 IP 归属地;默认不查外网)。
|
||
2. ~~**#15 数据库分页**~~ — **已验证解决**(见 BUG 表;例外场景保留内存分页)。
|
||
3. **#6 菜单多卡顿** — 前端虚拟列表/懒加载 + 接口按需加载 + 后端必要索引。
|
||
4. ~~**#2 三种布局下菜单高亮与混合侧栏展开**~~ — **已验证解决**(见 BUG 表 **#2** 说明)。
|
||
5. **#8 AI 历史会话** — 附件已澄清为非缺陷(模型不支持);仅「历史不全」等若仍存在则独立排 AI 子迭代。
|
||
|
||
### 第三阶段(规范与国际化)
|
||
|
||
1. **#26a 统一 order 排序** — 约定 + 扫描替换高风险点。
|
||
2. **#10 中英文** — 可持续迭代,可先列文案清单再分批补全。
|
||
|
||
### 第四阶段(架构与集成类,需立项/分期)
|
||
|
||
1. **#11 存储抽象(OSS/S3/FTP…)**
|
||
2. **#12 Python 3.13 + 依赖升级** — 全量测试后再上生产。
|
||
3. **#22 WebSocket 通知机制**
|
||
4. **#25 免登录开关**
|
||
5. **#3、#4、#17** 企微/飞书/钉钉/OA 同步(常分多期:登录 → 组织 → 消息)
|
||
|
||
### 第五阶段(大功能,单独路线图)
|
||
|
||
1. **#13 多租户**
|
||
2. **#9 菜单级数据权限**(与 #5、#4 联动)
|
||
3. **#16 AI 知识库/Skills**
|
||
4. **#18 工作流 + 应用编排**
|
||
5. **#19 BPM 表单**
|
||
6. **#20 菜单导入导出升级**
|
||
7. **#23 博客 Demo**
|
||
8. **#26b 分系统布局模式**
|
||
|
||
---
|
||
|
||
## 五、执行建议
|
||
|
||
- 建议建立 **Issue / 里程碑**:P0(约 1~2 周)→ P1 → P2…,每条拆 **验收标准**。
|
||
- **#2** 已闭环;**#1/#14/#7** 菜单相关变更仍可打包回归,避免菜单逻辑反复。
|
||
- **#15** 已完成;若新增列表接口,优先 `CRUDBase.page`,非 SQL 数据源再考虑 `PaginationService`。
|
||
|
||
---
|
||
|
||
## 变更记录
|
||
|
||
|
||
| 日期 | 说明 |
|
||
| ---------- | ------------- |
|
||
| 2026-03-29 | 初版:缺陷与需求梳理及排期 |
|
||
| 2026-03-29 | **#21** 代码生成:`pk_column_name` 贯通 Vue/TS/Schema/Service/CRUD 模板;**#1/#14** 角色权限保存补全祖先菜单;**#7** 混合顶栏最长前缀匹配;**#24** 登录 IP 归属地可配置关闭(`LOGIN_RESOLVE_IP_LOCATION`) |
|
||
| 2026-03-29 | **#2** 曾尝试改 `MenuItem` 子项 `base-path`,与现有「父级 basePath 已含本段」的拼接规则冲突,导致同级全高亮;已回退为 `resolvePath(child.path)`,原「兄弟误高亮」问题仍待用 `isActiveChild` 路径边界等方式单独修 |
|
||
| 2026-03-29 | **#1/#14** 角色菜单授权:`formatTree` 后节点仅有 `value` 无 `id`,`expandMenuIdsWithAncestors` 误用 `n.id` 导致父链未补齐;改为 `menuTreeNodeId`(`value ?? id`)并修正「父子联动」检测逻辑 |
|
||
| 2026-03-29 | **#7** 混合布局下「AI 智能助手」误跳应用管理:**已验证解决**,BUG 表与排期已标注 |
|
||
| 2026-03-29 | **#1 / #14** 角色授权(回显、保存、菜单树):**已验证解决**,BUG 表与排期已标注 |
|
||
| 2026-03-29 | 混合布局顶栏:点击目录重定向后菜单项 `:focus` 残留似悬浮背景 — `MixTopMenu` 在选中与 `router.push` 后 `blur`;**已验证解决** |
|
||
| 2026-03-29 | **#2** 左侧导航:`BasicMenu`/`MenuItem` 路径拼接实验(含 `normalizedLayoutBase` 等)引发回归,**已回退**至仓库原有 `resolveFullPath` + `resolvePath(child.path)` 实现 |
|
||
| 2026-03-29 | **#2** 再修:确认根因为「根项 basePath 重复拼段」;仅传布局基准 `normalizedLayoutBase`(空→`/`)+ 子级 `:base-path="resolvePath(item.path)"`,`resolvePath` 规范化并与 `activeMenuPath` 对齐 |
|
||
| 2026-03-29 | **#2** 三种布局菜单:**已验证解决**。最终方案:`MenuItem` 目录/叶子分流 index;`BasicMenu` 去 `route.path` 的 `el-menu` key、同步激活仅 `nextTick` 一次;`MixLayout` 侧栏 `mixSideMenuKey`;移除独立 `menu-path.ts`。目录 **redirect** 前后端必填保留。BUG 表、排期第二阶段与合并说明已同步 |
|
||
| 2026-03-29 | **#8 AI 附件**:**非缺陷**(当前模型不支持附件);前端 `ChatInput` 关闭上传并提示「附件功能开发中」。BUG 表 **#8**、排期第二阶段与合并说明已同步 |
|
||
| 2026-03-29 | **#15 数据库分页**:系统模块、应用、代码生成业务表、工作流/节点/调度日志等列表改为 `CRUDBase.page`;`PaginationService` 仅保留于 Redis/文件/Inspector/Agno 等无法 SQL 分页场景;`request.PaginationService` 文档已注明适用范围 |
|
||
| 2026-03-29 | **#28 PG date 类型新增**:**已验证解决**;BUG 表与第一阶段排期已同步 |
|
||
| 2026-03-29 | **#24 登录慢(IP)**:``OperationLogRoute`` 写日志时尊重 ``LOGIN_RESOLVE_IP_LOCATION``,新增 ``IpLocalUtil.resolve_location_for_log`` 与 ``create_token`` 共用;BUG 表与第二阶段排期已同步 |
|
||
|
||
|