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

6.1 KiB
Raw Permalink Blame History

name, description, metadata
name description metadata
session-20260613-4 2026-06-13 第4次会话 — Widget实施 + 大量Bug修复 + 接入文档完善
type date sessionNumber startTime endTime
session 2026-06-13 4 2026-06-13 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

关键设计

二、重要 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 角色分配菜单
  • 生产环境验证