2.9 KiB
2.9 KiB
代码调整记录 - 2025-08-02
ImagePreview 组件修复和功能增强
修改文件
web/src/components/ImagePreview/index.vuedocs/开发文档/ImagePreview组件使用说明.md(新增)
问题描述
- 导入错误:
Cannot find module '@/utils/propTypes' - computed未定义:
Cannot find name 'computed' - 功能需求:需要支持通过ossid调用接口获取真实URL进行图片展示
解决方案
1. 修复导入问题
- 移除对
@/utils/propTypes的依赖 - 直接使用Vue 3的
defineProps语法 - 添加必要的Vue 3导入:
computed,ref,watch
2. 增强功能支持
- 新增
isOssId属性:支持OSS ID模式 - URL缓存机制:使用Map缓存已获取的URL,避免重复请求
- 异步加载:通过watch监听src变化,异步获取真实URL
- 加载状态:添加
v-loading指令显示加载状态 - 错误处理:完善的错误处理和日志记录
3. 核心功能实现
// 通过ossid获取真实URL
const getUrlByOssId = async (ossId: string): Promise<string> => {
// 检查缓存
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;
}
};
4. 使用方式
普通模式(直接使用URL):
<ImagePreview
src="https://example.com/image1.jpg,https://example.com/image2.jpg"
:width="200"
:height="150"
/>
OSS模式(通过ossid获取URL):
<ImagePreview
src="123,456,789"
:width="200"
:height="150"
:is-oss-id="true"
/>
技术改进
-
性能优化:
- 内置URL缓存机制
- 避免重复的API调用
- 异步加载提升用户体验
-
错误处理:
- 完善的try-catch错误处理
- 详细的错误日志记录
- 优雅的降级处理
-
用户体验:
- 加载状态显示
- 错误状态处理
- 支持多张图片预览
文档更新
- 新增
ImagePreview组件使用说明.md文档 - 详细说明组件功能、使用方法和注意事项
- 提供完整的使用示例和技术实现说明
影响范围
- ✅ 修复了组件的导入错误
- ✅ 增强了OSS ID支持功能
- ✅ 提升了用户体验和性能
- ✅ 完善了错误处理机制
- ✅ 添加了完整的使用文档
测试建议
- 测试普通模式下的图片显示
- 测试OSS模式下的URL获取和图片显示
- 测试多张图片的预览功能
- 测试网络错误情况下的降级处理
- 测试缓存机制的有效性