Files
hzdyjs/docs/变更管理/code-adjust-record-2025-08-02-wuzilong.md
T
2025-08-02 21:06:47 +08:00

2.9 KiB
Raw Blame History

代码调整记录 - 2025-08-02

ImagePreview 组件修复和功能增强

修改文件

  • web/src/components/ImagePreview/index.vue
  • docs/开发文档/ImagePreview组件使用说明.md (新增)

问题描述

  1. 导入错误:Cannot find module '@/utils/propTypes'
  2. computed未定义:Cannot find name 'computed'
  3. 功能需求:需要支持通过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"
/>

技术改进

  1. 性能优化:

    • 内置URL缓存机制
    • 避免重复的API调用
    • 异步加载提升用户体验
  2. 错误处理:

    • 完善的try-catch错误处理
    • 详细的错误日志记录
    • 优雅的降级处理
  3. 用户体验:

    • 加载状态显示
    • 错误状态处理
    • 支持多张图片预览

文档更新

  • 新增 ImagePreview组件使用说明.md 文档
  • 详细说明组件功能、使用方法和注意事项
  • 提供完整的使用示例和技术实现说明

影响范围

  • ✅ 修复了组件的导入错误
  • ✅ 增强了OSS ID支持功能
  • ✅ 提升了用户体验和性能
  • ✅ 完善了错误处理机制
  • ✅ 添加了完整的使用文档

测试建议

  1. 测试普通模式下的图片显示
  2. 测试OSS模式下的URL获取和图片显示
  3. 测试多张图片的预览功能
  4. 测试网络错误情况下的降级处理
  5. 测试缓存机制的有效性