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

4.9 KiB
Raw Permalink Blame History

name, description, metadata
name description metadata
session-20260617-1 2026-06-17 第1次会话 — 前端日期时间格式统一 + 全局权限控制修复 + DB权限条目补全
type date sessionNumber startTime
session 2026-06-17 1 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/statsTokenAuthFilter 直接放行不解析 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.sqlINSERT IGNORE 安全幂等)
  • 验证日期时间显示格式在各个浏览器中一致
  • 部署网关后验证:非 /zgapi/ 业务系统请求能正确转发并携带用户信息头