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

91 lines
4.6 KiB
Markdown
Raw 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-5
description: 2026-06-13 第5次会话 — 前端5问题 + 系统下拉框过滤 + Token失效 + ECharts修复 + Token日志复制
metadata:
type: session
date: 2026-06-13
sessionNumber: 5
startTime: 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-show`div 始终在 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 引入正确但可能浏览器缓存