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

4.6 KiB
Raw Permalink Blame History

name, description, metadata
name description metadata
session-20260613-5 2026-06-13 第5次会话 — 前端5问题 + 系统下拉框过滤 + Token失效 + ECharts修复 + Token日志复制
type date sessionNumber startTime
session 2026-06-13 5 2026-06-13

2026-06-13 第5次会话 — 完整记录

会话摘要

修复了前端 5 个问题 + 系统下拉框 gateway 过滤 + 角色菜单保存后 token 失效 + ECharts 图表空指针 + Token 日志列点击复制。


1. ElMessage 错误提示显示在左下角(非弹窗)

  • 尝试: 改为全量 element-plus/dist/index.css → 与 unplugin-vue-components 按需加载冲突导致首页空白
  • 回退: 保持 3 个独立 CSS 引入el-message.css/message-box.css/notification.css
  • 文件: mokee-gateway-web/src/main.ts

2. 登录后显示两个首页

  • 修复: 删除 AdminLayout 侧边栏硬编码"首页"菜单项 + 删除 removeDashboard() 函数
  • 菜单完全由 API 动态提供,需确保 DB 中"首页"菜单已分配角色
  • 文件: mokee-gateway-web/src/views/admin/AdminLayout.vue

3. 去掉首页服务器状态卡片

  • 删除 server-panel 块(微服务状态 + JVM 信息)及关联 CSS
  • 布局简化:统计卡片 + 登录趋势图表全宽
  • 文件: mokee-gateway-web/src/views/admin/Dashboard.vue

4. 近30天登录趋势图表 — 两次修复

4a. 执行顺序 bug

  • chartLoading=false 原在 finally 块renderChart() 在 try 块 → chartRef 未挂载
  • 修复: chartLoading=false 移到 nextTick 前

4b. ECharts init(null) 崩溃

  • 根因: v-if/v-else 导致 ref div 按需创建/销毁nextTick 后 chartRef.value 仍为 null
  • 修复: 改为 v-showdiv 始终在 DOM 中。renderChart 增加动态 import 前后双重 null 检查
  • 文件: mokee-gateway-web/src/views/admin/Dashboard.vue

5. 用户编辑页添加头像上传

  • v-if="isSelf" — 仅 authStore.userInfo.userId === editId 时显示
  • 复用 PersonalView 上传逻辑: 获取Token → 上传 → 保存baseUrl
  • loadData 时自动刷新文件服务 Token避免 401
  • 文件: mokee-gateway-web/src/views/admin/user/UserForm.vue

6. Token日志菜单后端不返回

  • 根因: 初始化脚本是破坏性的DELETE+重建Token日志菜单从未被加入
  • 修复: 3 个脚本补充 Token日志菜单 INSERT
  • 文件: init_gateway_system.py, sql/init_qa.py, sql/qa_data.sql

7. 系统下拉框过滤 gateway非 super_admin

  • 需求: admin 页面系统下拉框不显示"网关管理平台"
  • 初次方案: listByUserId() SQL 加 AND system_code != 'gateway' → 用户指出会误伤 super_admin
  • 最终方案: 过滤移到 SystemController.listAll()Stream 加 .filter(s -> isSuperAdmin || !"gateway".equals(s.getSystemCode()))
  • 编译错误修复: isSuperAdmin 需声明 final
  • 文件: mokee-gateway-admin/.../controller/SystemController.java

8. 编辑角色菜单保存后 token 失效跳登录

  • 根因: RoleServiceImpl.invalidateSessionsForRole() 删除所有拥有该角色的用户的 Redis 会话,包括操作者自己
  • 修复: 加 .filter(uid -> !uid.equals(currentUserId)) 跳过当前操作用户
  • 文件: mokee-gateway-admin/.../service/impl/RoleServiceImpl.java

9. Token日志列点击复制

  • 显示: tokenSuffix() 只显示 ... 后缀部分(如 ...dQwNJ9HG0E
  • 点击: navigator.clipboard.writeText() 复制完整 tokenPreview
  • 注意: 完整 JWT token 不存库,只有 tokenPreview前20+...+后10字符
  • 文件: mokee-gateway-web/src/views/admin/log/OpenTokenLogList.vue

涉及文件清单

文件 改动
mokee-gateway-web/src/main.ts CSS 引入(保持 3 个独立引入)
mokee-gateway-web/src/views/admin/AdminLayout.vue 去硬编码首页 + removeDashboard
mokee-gateway-web/src/views/admin/Dashboard.vue 去服务器卡片 + 图表v-show + 双重null检查
mokee-gateway-web/src/views/admin/user/UserForm.vue 新增头像上传(仅编辑自己)
mokee-gateway-web/src/views/admin/log/OpenTokenLogList.vue Token列点击复制 + 后缀展示
init_gateway_system.py 新增 Token日志菜单
sql/init_qa.py 新增 Token日志菜单
sql/qa_data.sql 新增 Token日志菜单
mokee-gateway-admin/.../controller/SystemController.java 非super_admin过滤gateway
mokee-gateway-admin/.../service/impl/RoleServiceImpl.java invalidateSessions跳过当前用户

待处理

  • 重新构建部署前后端验证所有修复
  • 问题1ElMessage 左下角)需进一步排查 — CSS 引入正确但可能浏览器缓存