# ImagePreview 组件使用说明
## 概述
ImagePreview 是一个图片预览组件,支持两种模式:
1. **普通模式**:直接使用URL字符串
2. **OSS模式**:通过ossid调用接口获取真实URL
## 功能特性
- ✅ 支持单张和多张图片预览
- ✅ 支持OSS ID模式,自动获取真实URL
- ✅ 内置缓存机制,避免重复请求
- ✅ 加载状态显示
- ✅ 错误状态处理
- ✅ 响应式尺寸设置
- ✅ 图片预览功能
## 组件属性
| 属性名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| src | String | '' | 图片源,可以是URL或OSS ID |
| width | Number/String | '' | 图片宽度 |
| height | Number/String | '' | 图片高度 |
| isOssId | Boolean | false | 是否为OSS ID模式 |
## 使用示例
### 1. 普通模式(直接使用URL)
```vue
```
### 2. OSS模式(通过ossid获取URL)
```vue
```
### 3. 单张图片
```vue
```
### 4. 顶部个人头像(自动识别OSS ID)
```vue
```
> ✅ 用于首页 `Navbar` 头像区域时,`avatarIsOssId` 会自动识别当前值是否为 OSS ID,从而在带 Token 的 `/resource/oss/download/{ossId}` 接口与传统 URL 之间无缝切换,保证头像始终通过认证通道加载。
## 技术实现
### 核心功能
1. **OSS ID解析**:支持逗号分隔的多个OSS ID
2. **URL缓存**:使用Map缓存已获取的URL,避免重复请求
3. **异步加载**:通过watch监听src变化,异步获取真实URL
4. **错误处理**:完善的错误处理和日志记录
### API调用
组件内部使用 `listByIds` API获取OSS文件信息:
```typescript
// 通过ossid获取真实URL
const getUrlByOssId = async (ossId: string): Promise => {
// 检查缓存
if (urlCache.value.has(ossId)) {
return urlCache.value.get(ossId)!;
}
try {
loading.value = true;
const response = await listByIds(ossId);
const ossList: OssVO[] = response.data;
if (ossList && ossList.length > 0) {
const url = ossList[0].url;
// 缓存结果
urlCache.value.set(ossId, url);
return url;
}
return '';
} catch (error) {
console.error('获取OSS URL失败:', error);
return '';
} finally {
loading.value = false;
}
};
```
### 缓存机制
```typescript
const urlCache = ref