Skip to content

图片预览

@erp/biz 提供的图片预览功能,支持单张和多张图片预览、复制、下载等操作。

核心功能

  • createImagePreviewPop - 创建图片预览弹窗
  • copyImageByUrl - 复制图片到剪贴板
  • downloadImageByUrl - 下载图片到本地
  • 支持图片组预览、键盘切换、缩放等交互

引入方式

typescript
import { createImagePreviewPop } from '@erp/biz'

createImagePreviewPop

创建图片预览弹窗,支持单张和多张图片预览。

基础用法

typescript
import { createImagePreviewPop } from '@erp/biz'

// 预览单张图片
createImagePreviewPop('https://example.com/image.jpg')

// 预览多张图片
createImagePreviewPop([
  'https://example.com/image1.jpg',
  'https://example.com/image2.jpg',
  'https://example.com/image3.jpg'
])

指定初始图片

typescript
// 从第二张图片开始预览(索引从0开始)
createImagePreviewPop(imageList, 1)

// 或使用对象参数
createImagePreviewPop(imageList, {
  current: 2
})

参数说明

typescript
function createImagePreviewPop(
  srcList: string | string[],
  params?: number | ImagePreviewParams
): Promise<void>

interface ImagePreviewParams {
  /** 初始显示的图片索引 */
  current?: number
  
  /** 自定义复制处理函数 */
  copy?: (url: string) => void
  
  /** 自定义下载处理函数 */
  download?: (url: string) => void
  
  /** 预览URL格式化函数 */
  previewUrlFormatter?: (url: string) => string
}

内置操作

预览弹窗内置以下操作按钮:

  • 复制图片到剪贴板
  • 下载图片到本地

自定义操作

typescript
createImagePreviewPop(imageList, {
  current: 0,
  // 自定义复制逻辑
  copy: (url) => {
    navigator.clipboard.writeText(url)
    Message.success('链接已复制')
  },
  // 自定义下载逻辑
  download: (url) => {
    window.open(url, '_blank')
  }
})

URL 格式化

typescript
// 预览时使用原图,列表显示缩略图
createImagePreviewPop(thumbnailList, {
  previewUrlFormatter: (url) => {
    // 移除缩略图参数,获取原图
    return url.replace(/\?.*$/, '')
  }
})

使用示例

在表格中预览图片

vue
<template>
  <img 
    :src="compressImg(row.image, 80)" 
    @click="handlePreview(row.image)"
  />
</template>

<script setup>
import { createImagePreviewPop, compressImg } from '@erp/biz'

const handlePreview = (url) => {
  createImagePreviewPop(url)
}
</script>

预览商品图片列表

typescript
const productImages = [
  'https://oss.example.com/product/main.jpg',
  'https://oss.example.com/product/detail1.jpg',
  'https://oss.example.com/product/detail2.jpg'
]

// 点击某张图片时,从该图片开始预览
const handleImageClick = (index: number) => {
  createImagePreviewPop(productImages, index)
}

相关函数

copyImageByUrl

复制图片到剪贴板。

typescript
import { copyImageByUrl } from '@erp/biz'

await copyImageByUrl('https://example.com/image.jpg')
// 成功后显示 "图片已复制到剪贴板"

downloadImageByUrl

下载图片到本地。

typescript
import { downloadImageByUrl } from '@erp/biz'

// 使用原文件名
downloadImageByUrl('https://example.com/photo.jpg')

// 指定文件名
downloadImageByUrl('https://example.com/photo.jpg', '我的照片.jpg')

基于 MIT 许可发布