Files
mokeegateway/memory/session-20260613-4.md
2026-07-15 16:13:27 +08:00

138 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: session-20260613-4
description: 2026-06-13 第4次会话 — Widget实施 + 大量Bug修复 + 接入文档完善
metadata:
type: session
date: 2026-06-13
sessionNumber: 4
startTime: 2026-06-13
endTime: 2026-06-13
---
# 2026-06-13 第4次会话 — 完整记录
## 会话摘要
实施了用户头像下拉 Widget修复了 10+ 个 Bug菜单权限、数据过滤、API转发、错误提示、SQL修复等完善了接入文档。
## 一、UserChip Widget 实施
### 新建文件6个
| 文件 | 说明 |
|------|------|
| `src/widgets/user-chip/cookie.ts` | Cookie Token 读写 |
| `src/widgets/user-chip/api.ts` | API 调用层fetch/原生) |
| `src/widgets/user-chip/UserChip.vue` | 核心组件BEM 命名空间) |
| `src/widgets/user-chip/main.ts` | 自动扫描 #mokee-user-chip 挂载 |
| `vite.widget.config.ts` | 独立 IIFE 构建(→ dist-widget/ |
| `public/demo-widget.html` | 接入演示 |
### 修改文件
| 文件 | 改动 |
|------|------|
| `package.json` | +build:widget + build:prod 合并 |
| `IntegrationDoc.vue` | §3.6 Widget 一键接入 + widgetConfigTable |
### 关键设计
- loginUrl/selectUrl 从脚本自身 URL 推断(不用 window.location.origin
- 登录页: https://web.gw.zgitm.com/login
- 切换系统: https://web.gw.zgitm.com/select
- API 网关: https://gw.server.zgitm.com
## 二、重要 Bug 修复
### 2.1 AdminLayout 菜单动态化硬编码→API 加载)
- **原因**: 硬编码 HTML所有用户看到全部菜单
- **修复**: 改为 `fetchMenuRouter('gateway')` 动态加载,按角色过滤
- **问题**: API 返回字段和前端预期不一致 → MenuRouterVO 缺少字段
- **修复**: buildMenuTree 补填 id/menuName/menuType/icon/permission/sortOrder/status
### 2.2 ApiPermissionFilter 过于严格
- **问题**: 业务系统选系统后调 /zgapi/v1/auth/menu/router 被 403
- **修复**: `/zgapi/v1/auth/*``/zgapi/v1/admin/*` 全部放行,不查 sys_api 白名单
### 2.3 网关不转发非 /zgapi/ 路径
- **问题**: 业务系统请求 /api/rules 带 X-System-Code网关返回 200 空响应
- **修复**: 非 /zgapi/ 路径有 X-System-Code 头 → 转发到业务后端
### 2.4 RestTemplate 吞业务后端错误
- **问题**: RestTemplate 默认对 4xx/5xx 抛异常,网关 catch 后返回 502 吞掉真实错误
- **修复**: 设置自定义 ResponseErrorHandlerhasError() 永远返回 false
### 2.5 assignRoles 角色覆盖
- **问题**: tokenInfo.setRoles(当前系统角色) 覆盖掉其他系统角色 → super_admin 丢失 → 403
- **修复**: 改为从 DB 重新查询用户全部角色再写入 Redis
### 2.6 选择系统页不应该隐藏 gateway
- **初始修复(错误)**: AuthServiceImpl 过滤 gateway导致用户无法进入管理后台
- **正确的修复**: 还原 AuthServiceImpl选择系统页显示 gateway 卡片(入口),数据层面由 UserContextInterceptor 过滤 gateway 数据
### 2.7 非 super_admin 看到 gateway 数据
- **问题**: adminnginxserver 绑定 gateway+nginxServer数据权限范围包含 gateway
- **修复**: UserContextInterceptor 加 isGatewaySystem() 过滤,排除 gateway 系统 ID
### 2.8 MenuServiceImpl 无权限校验
- **问题**: getMenuTree/add/update/delete 都不检查 UserContextHolder
- **修复**: 新增 checkSystemScope(),所有方法校验 systemId 是否在绑定范围内
### 2.9 两个首页菜单
- **问题**: 过滤逻辑只查顶级节点,子节点中的首页漏网
- **修复**: 递归 removeDashboard() 函数,过滤所有层级
### 2.10 ElMessage 弹窗位置错误
- **问题**: CSS 导入路径不对el-message.css 未加载 → 消息显示在底部
- **修复**: main.ts 显式 import 'element-plus/theme-chalk/el-message.css'global.css 去冲突 !important
### 2.11 登录错误双重弹窗
- **修复**: LoginView.vue catch 块去掉重复的 ElMessage.error
### 2.12 SystemServiceImpl 排除 gateway
- **修复**: 非 super_admin 时 wrapper.ne(SysSystem::getSystemCode, "gateway")
### 2.13 接入文档 SQL 修复
- 所有 INSERT 加 id 列 + REPLACE(UUID(),'-','')
- 用户创建 SQL 加步骤 4绑定自己系统+ 步骤 5分配自己系统 admin 角色)
- 菜单初始化 SQL 改用 MySQL 变量显式持有 UUID
### 2.14 RestTemplate 吞业务后端错误
- **问题**: RestTemplate 默认对 4xx/5xx 抛异常,网关 catch 返回 502 吞掉真实错误
- **修复**: RestTemplateConfig 设置自定义 ResponseErrorHandlerhasError() 永远返回 false
### 2.15 FileServiceImpl 无数据权限
- **问题**: 文件对象储存页能看到 gateway 系统的文件
- **修复**: FileServiceImpl.page() 加 UserContextHolder 检查
### 2.16 用户列表排除 super_admin 账号
- **问题**: 非 super_admin 用户能看到 admin 等超管账号
- **修复**: UserServiceImpl.page() 加 NOT IN (拥有 super_admin 角色的用户ID)
## 三、接入文档完善
| 文件 | 说明 |
|------|------|
| `IntegrationDoc.vue` §5 | 重写 API 章节7 个接口 + 速查表 + 完整请求/响应 JSON |
| `docs/integration-guide.md` | 新建独立的完整 Markdown 接入文档 |
## 四、所有修改文件清单
**后端修改**:
- gateway-auth: AuthServiceImpl.java (systemList过滤 + buildMenuTree补字段)
- gateway-admin: UserContextInterceptor.java (排除gateway), MenuServiceImpl.java (权限校验), SystemServiceImpl.java (排除gateway), UserServiceImpl.java (assignRoles修复 + resetPassword新增)
- gateway-gateway: ApiPermissionFilter.java (放行auth/admin), GatewayController.java (转发非zgapi路径), RestTemplateConfig.java (不吞错误)
**前端修改**:
- AdminLayout.vue (动态菜单 + 递归过滤首页)
- LoginView.vue (去掉重复ElMessage)
- UserForm.vue (super_admin重置密码)
- IntegrationDoc.vue (§3.6 Widget + §5 API完善 + SQL修复)
- main.ts (ElMessage CSS显式引入)
- global.css (ElMessage样式修复)
- package.json (build:widget脚本)
**新建文件**:
- 6个Widget文件 + 1个文档
## 待处理
- [ ] 部署到 web.gw.zgitm.comNginx /widgets/ location
- [ ] 给 gateway-app-admin/gateway-app-user 角色分配菜单
- [ ] 生产环境验证