4.9 KiB
4.9 KiB
name, description, metadata
| name | description | metadata | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| session-20260617-1 | 2026-06-17 第1次会话 — 前端日期时间格式统一 + 全局权限控制修复 + DB权限条目补全 |
|
2026-06-17 第1次会话
会话摘要
- 前端日期时间格式统一为
yyyy-MM-dd HH:mm:ss - 全局排查并修复了前端 v-permission 权限控制缺失问题(9个页面少了几十个权限指令)
- 补充了数据库初始化脚本中缺失的权限条目(menu/delete, api/add/edit/delete, dict/add/edit/delete)
- 重写了日期工具函数,用手动解析替代
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 等用户信息 - 做了什么:
TokenAuthFilter.java: 非/zgapi/路径也尝试解析 token(Cookie / Authorization 头),有则设置 tokenInfo,无/过期则放行不阻塞。/zgapi/路径行为不变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/业务系统请求能正确转发并携带用户信息头