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

80 lines
4.9 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-20260617-1
description: 2026-06-17 第1次会话 — 前端日期时间格式统一 + 全局权限控制修复 + DB权限条目补全
metadata:
type: session
date: 2026-06-17
sessionNumber: 1
startTime: 2026-06-17
---
# 2026-06-17 第1次会话
## 会话摘要
1. 前端日期时间格式统一为 `yyyy-MM-dd HH:mm:ss`
2. 全局排查并修复了前端 v-permission 权限控制缺失问题9个页面少了几十个权限指令
3. 补充了数据库初始化脚本中缺失的权限条目menu/delete, api/add/edit/delete, dict/add/edit/delete
4. 重写了日期工具函数,用手动解析替代 `new Date()` 避免跨浏览器兼容问题
## 关键操作
### 一、创建/重写日期格式化工具
- **做了什么**: 创建 `src/utils/date.ts`,导出 `formatDateTime()``formatDate()`
- **原因**: 统一格式 + 解决 `new Date("yyyy-MM-dd HH:mm:ss")` 在 Firefox/Safari 中返回 Invalid Date 的浏览器兼容问题
- **结果**: 使用手动正则解析替代 `new Date()` 解析字符串,兼容 ISO 8601、时间戳、后端标准格式
- **涉及文件**: `src/utils/date.ts`(新建)
### 二、替换所有日期格式化调用
- **做了什么**: 将7个Vue文件中所有 `toLocaleString('zh-CN')` 替换为 `formatDateTime()`,并为之前裸字符串显示日期的页面添加格式化
- **涉及文件**: PersonalView, FileList, UserList, OperationLogList, LoginLogList, EmailList, OpenTokenLogList
### 三、全局修复 v-permission 权限控制
- **问题根因**: 之前 90% 的操作按钮没有 `v-permission` 指令,导致即使用户没有勾选编辑/删除权限按钮,按钮仍然显示并可操作
- **做了什么**: 为所有列表页的操作按钮添加了完整的 `v-permission` 指令
**前端修改9个文件:**
| 文件 | 新增按钮 | 编辑按钮 | 删除按钮 | 其他 |
|------|:--:|:--:|:--:|------|
| SystemList.vue | ✅已有 | ✅新增 | ✅新增 | |
| UserList.vue | ✅新增 | ✅新增 | ✅新增 | |
| RoleList.vue | ✅新增 | ✅新增 | ✅新增 | 分配菜单 ✅新增 |
| MenuList.vue | ✅新增 | ✅新增 | ✅新增 | 新增子级 ✅新增 |
| DictList.vue | ✅新增 | ✅新增 | ✅新增 | 新增类型 ✅新增 |
| ApiList.vue | ✅新增 | ✅新增 | ✅新增 | |
| FileList.vue | N/A | N/A | ✅新增 | 上传 ✅新增 |
| EmailList.vue | ✅已有 | N/A | ✅新增 | |
| SystemConfig.vue | N/A | N/A | N/A | 保存 ✅新增 |
### 四、补充数据库权限条目
- **做了什么**: 在 DB 初始化脚本中新增以下权限按钮(之前 DB 中没有这些记录,即使前端加了 v-permissionsuper_admin 也会因权限列表不含该字符串而看不到按钮)
- **新增权限**: `system:menu:delete`, `system:api:add/edit/delete`, `system:dict:add/edit/delete`
- **涉及文件**: `sql/qa_data.sql`, `sql/init_qa.py`, `sql/prod_add_permissions.sql`, `sql/prod_fix_data.sql`
### 权限字符串对照表
| 模块 | 列表权限 | 新增 | 编辑 | 删除 | 其他 |
|------|---------|------|------|------|------|
| 系统管理 | system:system:list | system:system:add | system:system:edit | system:system:delete | |
| 用户管理 | system:user:list | system:user:add | system:user:edit | system:user:delete | |
| 角色管理 | system:role:list | system:role:add | system:role:edit | system:role:delete | system:role:assignMenu |
| 菜单管理 | system:menu:list | system:menu:add | system:menu:edit | system:menu:delete | |
| 接口管理 | system:api:list | system:api:add | system:api:edit | system:api:delete | |
| 数据字典 | system:dict:list | system:dict:add | system:dict:edit | system:dict:delete | |
| 文件管理 | system:file:list | system:file:upload | | system:file:delete | |
| 邮件管理 | system:email:list | system:email:send | | system:email:delete | |
| 系统配置 | | system:config:save | | | |
### 五、网关转发注入用户信息头
- **问题根因**: 非 `/zgapi/` 路径的请求(如 `/dashboard/stats`TokenAuthFilter 直接放行不解析 token → HeaderInjectFilter 拿不到 tokenInfo → 转发到业务系统后端时请求头中没有 X-User-Id/Name 等用户信息
- **做了什么**:
1. `TokenAuthFilter.java`: 非 `/zgapi/` 路径也尝试解析 tokenCookie / Authorization 头),有则设置 tokenInfo无/过期则放行不阻塞。`/zgapi/` 路径行为不变
2. `HeaderInjectFilter.java`: 系统信息头X-System-Id/Code/Name原始请求已有则保留原始值避免用 tokenInfo.currentSystemCode 覆盖业务系统前端设的 `x-system-code`
- **涉及文件**: `TokenAuthFilter.java`, `HeaderInjectFilter.java`
## 待处理
- [ ] 部署后验证:用非 super_admin 角色登录,确认未授权的按钮不显示
- [ ] 在生产数据库执行 `prod_add_permissions.sql`INSERT IGNORE 安全幂等)
- [ ] 验证日期时间显示格式在各个浏览器中一致
- [ ] 部署网关后验证:非 `/zgapi/` 业务系统请求能正确转发并携带用户信息头