From ba7b7b8497eeeeeee4caff31b1ac32d0cc0bd338 Mon Sep 17 00:00:00 2001
From: zlwu <704541015@qq.com>
Date: Fri, 28 Nov 2025 21:46:23 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dromara/system/domain/vo/SysUserVo.java | 9 +-
docs/开发文档/API/用户认证登录API.md | 20 +-
docs/开发文档/ImagePreview组件使用说明.md | 31 +++
docs/开发文档/移动端开发规范总结.md | 7 +
mobile/src/pages/index/index.vue | 224 +++++++++++++++++-
web/src/api/system/user/types.ts | 1 +
web/src/layout/components/Navbar.vue | 15 +-
web/src/store/modules/user.ts | 8 +-
.../views/system/user/profile/userAvatar.vue | 85 ++++---
9 files changed, 343 insertions(+), 57 deletions(-)
diff --git a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java
index 97f81ef1..2d2f2dc5 100644
--- a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java
+++ b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java
@@ -75,11 +75,16 @@ public class SysUserVo implements Serializable {
private String sex;
/**
- * 头像地址
+ * 头像 OSS ID
*/
- @Translation(type = TransConstant.OSS_ID_TO_URL)
private Long avatar;
+ /**
+ * 头像访问地址
+ */
+ @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "avatar")
+ private String avatarUrl;
+
/**
* 密码
*/
diff --git a/docs/开发文档/API/用户认证登录API.md b/docs/开发文档/API/用户认证登录API.md
index 9147c439..ac6f51fb 100644
--- a/docs/开发文档/API/用户认证登录API.md
+++ b/docs/开发文档/API/用户认证登录API.md
@@ -395,7 +395,8 @@ loginWithEncryption()
"email": "admin@example.com",
"phonenumber": "13800138000",
"sex": "1",
- "avatar": "/profile/avatar/default.jpg",
+ "avatar": "1938120323613728770",
+ "avatarUrl": "http://example.com/ruoyi/2025/08/31/xxxx.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&...",
"status": "0",
"loginIp": "127.0.0.1",
"loginDate": "2025-01-26 10:30:00",
@@ -409,6 +410,13 @@ loginWithEncryption()
}
```
+**字段说明补充**:
+
+- `avatar`:始终返回 `sys_user.avatar` 中存储的 OSS ID(字符串),用于鉴权下载接口 `/resource/oss/download/{ossId}`。
+- `avatarUrl`:系统通过 `TransConstant.OSS_ID_TO_URL` 规则实时翻译得到的可直接访问地址(MinIO 预签名 URL),供无需链路改造的场景快速显示;有效期受 OSS 策略控制。
+
+前端如需在带 Token 的受保护组件(如 `ImagePreview`)中展示,请优先使用 `avatar` 并通过统一的认证下载逻辑获取图片,避免直接暴露临时 URL。
+
**超级管理员权限说明**:
admin 用户具有系统最高权限`*:*:*`,可以访问所有功能模块和执行所有操作。
@@ -663,7 +671,9 @@ methods: {
---
**📝 维护**: 用户认证登录 API 文档
-**🔄 更新**: 2025-01-03
+**🔄 更新记录**:
+- 2025-11-28:`/system/user/getInfo` 增加 `avatarUrl` 字段,并明确 `avatar` 返回 OSS ID
+- 2025-01-03:文档初始化
**📁 文件**: 用户认证登录 API.md
## 获取具有指定权限的用户列表
@@ -693,7 +703,8 @@ methods: {
deptId: string; // 部门ID
deptName: string; // 部门名称
};
- avatar: string; // 头像URL
+ avatar: string; // 头像OSS ID
+ avatarUrl?: string; // 头像访问URL(可选,预签名)
}[];
total: number; // 总记录数
}
@@ -713,7 +724,8 @@ methods: {
"deptId": "1",
"deptName": "后勤部"
},
- "avatar": "http://example.com/avatar.jpg"
+ "avatar": "1938120323613728770",
+ "avatarUrl": "http://example.com/avatar.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&..."
}
],
"total": 1
diff --git a/docs/开发文档/ImagePreview组件使用说明.md b/docs/开发文档/ImagePreview组件使用说明.md
index dc31f3a5..70439eca 100644
--- a/docs/开发文档/ImagePreview组件使用说明.md
+++ b/docs/开发文档/ImagePreview组件使用说明.md
@@ -65,6 +65,36 @@ ImagePreview 是一个图片预览组件,支持两种模式:
```
+### 4. 顶部个人头像(自动识别OSS ID)
+
+```vue
+
+
+
+
+
+```
+
+> ✅ 用于首页 `Navbar` 头像区域时,`avatarIsOssId` 会自动识别当前值是否为 OSS ID,从而在带 Token 的 `/resource/oss/download/{ossId}` 接口与传统 URL 之间无缝切换,保证头像始终通过认证通道加载。
+
## 技术实现
### 核心功能
@@ -126,6 +156,7 @@ const urlCache = ref