yarn add jszip
yarn add file-saver
<template><div class="home"><button @click="attachDownload">批量下载</button><div class="home_wrap"><div class="home_wrap_item" v-for="item in imageList" :key="item.url"><input v-model="item.is_checkbox" type="checkbox" id="c1" name="cc" /><label for="c1"><span></span></label><img :src="item.url" alt="" /></div></div></div>
</template><script>
import JSZip from "jszip";
import FileSaver from "file-saver";
export default {data() {return {imageList: [{url: "https:\/\/pic.rmb.bdstatic.com\/bjh\/7ab6977e3304d6bd72704cc434fe52d3.jpeg",id: "111",is_checkbox:false,},{url: "https:\/\/fc.sinaimg.cn\/large\/419f07d1gy1hg5xdr2f1aj21kw2cmx6s.jpg",id: "222",is_checkbox:false,},{url: "https:\/\/img10.360buyimg.com\/ddimg\/jfs\/t1\/132974\/31\/29586\/3214914\/633016ccEb4f7672a\/b05ac0be612c7519.jpg",id: "333",is_checkbox:false,},{url: "https:\/\/pic.rmb.bdstatic.com\/bjh\/4363032f4ed4400e3b608584fa2664a7.jpeg",id: "444",is_checkbox:false,},],};},methods: {async attachDownload() {const arr = this.imageList.filter(ele=>ele.is_checkbox==true)const zip = new JSZip();const cache = {};const downloadPromises = arr.map(async (item) => {try {if (item.url) {const data = await this.getImgArrayBuffer(item.url);zip.file(item.id + ".png", data, { binary: true });cache[item.id] = data;} else {throw new Error(`图片${item.fileName}地址错误,下载失败`);}} catch (error) {console.error("文件获取失败", error);}});try {await Promise.all(downloadPromises);const content = await zip.generateAsync({ type: "blob" });FileSaver.saveAs(content, "病例编辑图片");} catch (error) {console.error("文件压缩失败", error);}},async getImgArrayBuffer(url) {const response = await fetch(url);if (!response.ok) {throw new Error(`请求失败: ${response.status}`);}return await response.blob();},},
};
</script>
<style lang="scss">
.home {width: 100vw;height: 100vh;&_wrap {display: flex;flex-wrap: wrap;&_item {width: 200px;height: 200px;img {width: 100%;height: 100%;}}}
}
</style>