最后效果
展示效果(样式 用样式穿透自己可调)
点击预览效果
这里css得做个样式穿透 因为ant自带一个删除功能
将垃圾桶图标取消显示
.img{
/deep/.ant-upload-list-item{
//宽高设置
margin:0;
padding: 0;
width: 40px;
height: 40px;
}
/deep/.ant-upload-list-picture-card-container{
//宽高设置
width: 40px;
height: 40px;
margin:0;
padding: 0;
}
//ant样式穿透,将不需要显示的样式禁用
/deep/.anticon-delete{
display: none;
}
}
html结构
数据来源是item.img是因为我的代码两层v-for不用在意
<!-- 显示图片处 -->
<div v-for='(items,indexs) in item.img' :key='indexs'>
<a-upload class='img'
list-type="picture-card"
@preview="handlePreview"
:file-list=items>
</a-upload>
</div>
<!-- 预览图片 -->
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
<img alt="example" style="width: 100%" :src="previewImage" />
</a-modal>
数据和方法
data(){
return{
previewVisible: false,
previewImage: '',
}
}
methods:{
handleCancel() {
this.previewVisible = false;
},
async handlePreview(file) {
if (!file.url && !file.preview) {
let getBase64 = function(file) {
console.log('测试')
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
}
file.preview = await getBase64(file.originFileObj);
}
this.previewImage = file.url || file.preview;
this.previewVisible = true;
}
}
数据处理
下面url:items就是图片的地址 (可以是链接 也可是base64)
其他参数在本功能中暂时用不到
this.listData.forEach(item=>{
// 如果不创建这个img数组 下面的push会检测不到img这个值 会报错
item.img = []
if(item.attachments){
// 先将base64提取出来
let base64 = item.attachments.split('],[')
// 再将其转换为 ant能够展示的格式
base64.forEach((items,indexs)=>{
item.img.push([{
uid: indexs,
name: 'indexs',
status: 'done',
url: items,
}])
})
}
})