初始化

This commit is contained in:
zg
2026-07-15 16:13:27 +08:00
parent 6d6f559793
commit c4023c1623
276 changed files with 42622 additions and 0 deletions

View File

@@ -0,0 +1,137 @@
---
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 角色分配菜单
- [ ] 生产环境验证