91 lines
4.6 KiB
Markdown
91 lines
4.6 KiB
Markdown
---
|
||
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跳过当前用户 |
|
||
|
||
## 待处理
|
||
- [ ] 重新构建部署前后端验证所有修复
|
||
- [ ] 问题1(ElMessage 左下角)需进一步排查 — CSS 引入正确但可能浏览器缓存
|