Skip to content

BizImageViewer 图片预览 ​

图片缩略图列表 + 全屏预览:数据归一化(string[] 直传或对象数组字段映射)、缩略图与大图地址分离、limit 聚合占位、空态占位、缩略图覆盖层插槽,全屏预览基于 el-image-viewer(共享单实例 + 点击定位)。

相对参考实现的优化:零 any(归一化数据源完整 TS 类型)、url 列表 computed 缓存(替代模板内逐帧 map)、以渲染索引直接定位(替代 id 查找,O(1) 且无重复 id 风险)、布局改 flex gap、缩略图尺寸经 css 变量可覆盖、颜色统一走 EP 主题变量、空态双布尔互斥逻辑收敛为 show-empty + empty-text。

基础用法 ​

images 传 url 字符串数组,点击缩略图打开全屏预览并定位到点击项;preview / switch / close 事件透传。

加载中...
加载中...
加载中...
点击任一缩略图打开全屏预览;预览内左右箭头 / 滚轮缩放 / Esc 关闭。图片每次刷新随机抽取。
最近事件:(未预览)|(未切换)
全屏预览支持左右切换、滚轮缩放(zoom-rate 可调)、Esc 关闭。

对象数据与字段映射 ​

后端附件对象数组配合 src-key(缩略图)/ preview-src-key(预览大图)/ name-key(名称,渲染为 alt);#item-extra 覆盖层展示名称与操作按钮,其点击不会误开预览。

加载中...
现场照片-01.jpg
加载中...
现场照片-02.jpg
加载中...
现场照片-03.jpg
item-extra 点击不会误开预览(删除按钮直接生效);清空后展示空态占位。
组件库不内置接口与数据转换:业务侧准备数组后按字段名映射即可;清空数组查看空态。

其他用法 ​

limit 聚合占位(+N 点击定位到首张隐藏图)、无效地址的加载失败态、preview=false 纯缩略图模式(配合 click-thumb 自定义行为)、css 变量覆盖尺寸、实例方法 open() 编程式打开。

limit 聚合(limit=4,共 9 张)

加载中...
加载中...
加载中...
加载中...
+5

加载失败态(首项为无效地址)

加载中...
加载中...

纯缩略图模式(preview=false + click-thumb 自定义行为)

加载中...
加载中...

尺寸定制(css 变量覆盖为 72×54)

加载中...
加载中...
加载中...

实例方法 open() 编程式打开

加载中...
加载中...
加载中...
加载中...
加载中...
加载中...
加载中...
加载中...
加载中...
尺寸规格默认 120×90,通过 --biz-image-viewer-thumb-width/height 覆盖。

商品相册编辑 ​

加载中...
加载中...
加载中...
加载中...
+2
共 6 张;limit=4 时超出聚合为 +2(点击进入预览定位首张隐藏图);右上角删除由 item-extra 插槽渲染。
相册编辑场景:对象数组 + 字段映射(src-key 缩略图 / preview-src-key 原图分离)、limit=4 聚合 +N、item-extra 覆盖层渲染删除按钮(点击不误触全屏预览)。

故障举证照片 ​

加载中...
故障点全景 · 09:12
加载中...
铭牌特写 · 09:15
加载中...
更换备件后 · 10:02
工单号 WO-20260923-0088 现场举证照片;点击缩略图全屏查看原图
工单场景:item-extra 覆盖层展示「照片名 + 拍摄时间」徽标,点击缩略图全屏核验。

证件双面核验 ​

正面(人像面)
反面(国徽面)
加载中...
加载中...
KYC 场景:正反面两张 + 懒加载,点击大图人工核验;css 变量放大缩略图。

会话图片附件 ​

加载中...
加载中...
加载中...
加载中...
加载中...
+3
本组共 8 张,limit=5 时展示前 5 张 + 「+3」聚合块;点击 +3 打开预览并定位到第 6 张
IM 场景:8 张图 limit=5 聚合「+3」,点击聚合块打开预览并定位到第 6 张。

Props ​

属性名类型默认值说明
imagesstring[] | BizImageViewerItem[][]图片数据:url 数组直传,或对象数组配合字段映射
src-keystring''对象数组时缩略图地址字段名('' 直接读 item.src)
preview-src-keystring''预览大图地址字段名('' 与缩略图同源)
name-keystring''名称字段名(渲染为缩略图 alt)
previewbooleantrue点击缩略图是否打开全屏预览
limitnumber0最多展示缩略图数量,0 全部;超出聚合为 +N 占位
lazybooleanfalse缩略图懒加载(滚动进入视口才加载)
show-emptybooleantrue空数据是否展示占位
empty-textstring'暂无图片'空数据占位文案
hide-on-click-modalbooleanfalse全屏预览:点击遮罩关闭
close-on-press-escapebooleantrue全屏预览:Esc 关闭
zoom-ratenumber1.2全屏预览:滚轮缩放速率
teleportedbooleantrue全屏预览:是否挂载到 body

BizImageViewerItem:{ src: string; previewSrc?: string; name?: string }。根节点透传 $attrs(class/style 等)。

Events ​

事件名参数说明
click-thumb(index: number, item: BizImageViewerDataItem)点击缩略图(preview=false 时作为自定义行为入口;item 为数据源原始项)
preview(index: number)全屏预览打开
close—全屏预览关闭
switch(index: number)全屏预览切换图片(EP 原生透传)

Slots ​

插槽名说明
placeholder缩略图加载中占位(作用于每张缩略图)
error缩略图加载失败占位(作用于每张缩略图)
empty空数据占位(默认 el-empty)
item-extra缩略图覆盖层,作用域 { item: 归一化项, index: number };点击不会误开预览

Expose ​

属性/方法说明
open(index = 0) => void 编程式打开全屏预览
close() => void 编程式关闭全屏预览
hasExtraComputedRef<boolean> 是否启用 item-extra 覆盖层