--- 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 引入正确但可能浏览器缓存