Appearance
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 关闭。图片每次刷新随机抽取。
最近事件:(未预览)|(未切换)
对象数据与字段映射
后端附件对象数组配合 src-key(缩略图)/ preview-src-key(预览大图)/ name-key(名称,渲染为 alt);#item-extra 覆盖层展示名称与操作按钮,其点击不会误开预览。
加载中...
加载中...
加载中...
item-extra 点击不会误开预览(删除按钮直接生效);清空后展示空态占位。
其他用法
limit 聚合占位(+N 点击定位到首张隐藏图)、无效地址的加载失败态、preview=false 纯缩略图模式(配合 click-thumb 自定义行为)、css 变量覆盖尺寸、实例方法 open() 编程式打开。
limit 聚合(limit=4,共 9 张)
加载中...
加载中...
加载中...
加载中...
+5
加载失败态(首项为无效地址)
加载中...
加载中...
纯缩略图模式(preview=false + click-thumb 自定义行为)
加载中...
加载中...
尺寸定制(css 变量覆盖为 72×54)
加载中...
加载中...
加载中...
实例方法 open() 编程式打开
加载中...
加载中...
加载中...
加载中...
加载中...
加载中...
加载中...
加载中...
加载中...
商品相册编辑
加载中...
加载中...
加载中...
加载中...
+2
共 6 张;limit=4 时超出聚合为 +2(点击进入预览定位首张隐藏图);右上角删除由 item-extra 插槽渲染。
故障举证照片
加载中...
故障点全景 · 09:12
加载中...
铭牌特写 · 09:15
加载中...
更换备件后 · 10:02
工单号 WO-20260923-0088 现场举证照片;点击缩略图全屏查看原图
证件双面核验
正面(人像面)
反面(国徽面)
加载中...
加载中...
会话图片附件
加载中...
加载中...
加载中...
加载中...
加载中...
+3
本组共 8 张,limit=5 时展示前 5 张 + 「+3」聚合块;点击 +3 打开预览并定位到第 6 张
Props
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| images | string[] | BizImageViewerItem[] | [] | 图片数据:url 数组直传,或对象数组配合字段映射 |
| src-key | string | '' | 对象数组时缩略图地址字段名('' 直接读 item.src) |
| preview-src-key | string | '' | 预览大图地址字段名('' 与缩略图同源) |
| name-key | string | '' | 名称字段名(渲染为缩略图 alt) |
| preview | boolean | true | 点击缩略图是否打开全屏预览 |
| limit | number | 0 | 最多展示缩略图数量,0 全部;超出聚合为 +N 占位 |
| lazy | boolean | false | 缩略图懒加载(滚动进入视口才加载) |
| show-empty | boolean | true | 空数据是否展示占位 |
| empty-text | string | '暂无图片' | 空数据占位文案 |
| hide-on-click-modal | boolean | false | 全屏预览:点击遮罩关闭 |
| close-on-press-escape | boolean | true | 全屏预览:Esc 关闭 |
| zoom-rate | number | 1.2 | 全屏预览:滚轮缩放速率 |
| teleported | boolean | true | 全屏预览:是否挂载到 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 编程式关闭全屏预览 |
| hasExtra | ComputedRef<boolean> 是否启用 item-extra 覆盖层 |