5.8 KiB
5.8 KiB
name, description, metadata
| name | description | metadata | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| session-20260613-2 | 2026-06-13 第2次会话 — UI移动端优化、登录跳转修复、操作人乱码修复、操作详情弹窗重设计、文件对象存储从DB迁移到磁盘、系统配置页、开放文件API |
|
2026-06-13 第2次会话
会话摘要
完成前两轮累积的全部需求:UI移动端适配、登录页跳转优化、操作人乱码BUG修复(Header URL编解码)、操作日志查看弹窗重新设计、文件存储从MySQL BLOB迁移到本地磁盘、系统配置管理页、文件对象储存列表重设计、开放API文件上传/下载接口、open-api-doc.md文档更新。
关键操作
一、前端UI优化
登录页 (LoginView.vue):
- 登录成功后按钮持续转圈(loading不关闭),显示"正在跳转..."
navigating标志防重复跳转- 支持二次点击(已登录成功卡住时重新触发跳转)
- 8秒超时自动提示"网络较慢"
操作日志 (OperationLogList.vue):
- 查看弹窗完全重设计:el-descriptions 展示操作人/时间/接口/方法/成功/耗时
- 深色代码块 + 折叠面板展示传入/返回报文
- 一键复制按钮
移动端全局适配 (global.css):
- 操作列按钮 480px 以上保留文字,480px 以下只显示图标
- 搜索卡片 inline 表单移动端垂直排列
- 分页移动端隐藏 sizes 和 jumper
- 弹窗移动端 95vw
列表页移动端适配: SystemList/UserList/RoleList/DictList/LoginLogList 全部更新
二、操作人乱码BUG修复
根因: HeaderInjectFilter 将中文 realName(如"张三")注入 HTTP 头 X-User-Name。HTTP 头只支持 ASCII,跨服务转发时中文字符损坏。
修复:
HeaderInjectFilter.java:X-User-Name值写入前URLEncoder.encode(realName, UTF_8)OperationLogAspect.java: 读取后URLDecoder.decode(value, UTF_8)还原- 新增
decodeHeader()辅助方法
三、文件对象存储(DB BLOB → 本地磁盘)
核心原则: 文件二进制数据一律存磁盘,sys_file 表只存元信息。
数据库变更:
- 新建
sys_config表(系统配置键值对) sys_file加storage_file_name、upload_user_name字段- 保留
file_data列用于存量 BLOB 向后兼容
后端新增:
SysConfig.java实体 +SysConfigMapper+ConfigService(含 ConcurrentHashMap 缓存) +ConfigControllerFileServiceImpl.upload()改为写磁盘:{basePath}/{yyyy-MM}/{uuid}.{ext}FileController.view()优先读磁盘,兜底读 BLOB(存量兼容)FileController.download()新增下载端点(Content-Disposition: attachment)uploadUserName逻辑:管理后台上传→用户姓名,API上传→系统名称
开放 API(OpenApiController):
POST /zgapi/v1/open/file/upload— form 字段传 token,上传成功消费GET /zgapi/v1/open/file/{id}/download?token=xxx— query 参数传 token,下载成功消费- 新增
validateOpenTokenFromValue(String)支持非 Header 传 token
网关 (TokenAuthFilter):
authenticateOpenApi()无 Bearer Header 时从request.getParameter("token")兜底
前端:
SystemConfig.vue— 系统配置页(存储磁盘路径输入框 + 保存)FileList.vue— 完全重写:卡片网格、缩略图点击预览、储存文件名、上传者、下载/复制链接/删除- 菜单"文件管理"→"文件对象储存"
- 新增"系统配置"菜单(Setting 图标)
菜单 SQL:
add_file_storage.sql: sys_config DDL + sys_file ALTER + 菜单改名+新增add_file_menu.sql: 菜单名更新
四、文档更新
docs/open-api-doc.md 新增:
- §4 上传文件(multipart/form-data 示例、响应字段说明)
- §5 下载文件(query param token 示例)
- Java 调用示例增加文件上传
- 附录重新编号为 §7
修改文件清单
| 文件 | 操作 |
|---|---|
LoginView.vue |
修改 |
OperationLogList.vue |
修改 |
global.css |
修改 |
SystemList.vue |
修改 |
UserList.vue |
修改 |
RoleList.vue |
修改 |
DictList.vue |
修改 |
LoginLogList.vue |
修改 |
HeaderInjectFilter.java |
修改(URL编码) |
OperationLogAspect.java |
修改(URL解码) |
SysConfig.java |
新增 |
SysConfigMapper.java |
新增 |
ConfigService.java |
新增 |
ConfigServiceImpl.java |
新增 |
ConfigController.java |
新增 |
SysFile.java |
修改(+2字段) |
FileService.java |
修改(接口更新) |
FileServiceImpl.java |
重写(磁盘存储) |
FileController.java |
重写(+download,view改磁盘优先) |
OpenApiController.java |
修改(+2文件端点) |
TokenAuthFilter.java |
修改(query param token) |
SystemConfig.vue |
新增 |
FileList.vue |
重写 |
router/index.ts |
修改 |
AdminLayout.vue |
修改 |
open-api-doc.md |
修改 |
add_file_storage.sql |
新增 |
add_file_menu.sql |
修改 |
重要信息
- 文件存储路径: 默认
/data/mokee/gw/file,可在系统配置页修改 - 磁盘文件结构:
{basePath}/{yyyy-MM}/{uuid}.{ext} - 存量 BLOB 文件仍可正常读取(view/download 兜底逻辑)
- 开放 API Token 消费规则: 上传/下载成功后消费,失败不消费
- Token 在 download 通过 query 参数传递(浏览器
<a>标签无法设 Header)
待处理
- 执行
add_file_storage.sql到 QA/PROD 数据库 - 服务器上创建存储目录
/data/mokee/gw/file并设置写权限 - 执行 QA/PROD 菜单更新(文件管理→文件对象储存 + 系统配置菜单)
- 构建部署:
mvn clean package+npm run build:prod - 原有迁移建议:现有文件数据过大时,可编写迁移脚本将
file_dataBLOB 导出到磁盘