初始化
This commit is contained in:
79
memory/session-20260617-1.md
Normal file
79
memory/session-20260617-1.md
Normal file
@@ -0,0 +1,79 @@
|
||||
---
|
||||
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-permission,super_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/` 路径也尝试解析 token(Cookie / 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/` 业务系统请求能正确转发并携带用户信息头
|
||||
Reference in New Issue
Block a user