<template> <div class="file-view"> <!-- 文件预览 --> <div v-if="!isImage" class="flex items-center"> <doc-icon type="file-filled" style="color: #999; font-size: 20px"/> <a class="ml-2" @click.prevent="onDown">下载</a> </div> <van-image :src="file.url" v-else @click="viewImage"> <template v-slot:loading> <van-loading type="spinner" size="20" /> </template> </van-image> </div> </template> <script> import { showDialog } from 'vant' import { copyToClip } from '@/utils/common.js' export default { props: { file: { type: Object, default: () => ({}) } }, emits: ['view-image'], computed: { isImage() { const array = ['JPG', 'PNG', 'JEPG', 'GIF'] return array.includes(this.file.type) || array.includes(this.file.ext.toLocaleUpperCase()) } }, methods: { onDown() { console.log(this.file) let wx = window.sessionStorage.getItem('embed') if (wx == 'wx') { // 复制链接到浏览器下载 if (copyToClip(this.file.url)) { showDialog({ message: '链接复制成功,请在浏览器中打开下载' }).then(() => {}) } else { console.warn('链接复制失败') } } else { window.open(this.file.url, '_blank') } }, viewImage() { this.$emit('view-image', this.file) } } } </script> <style lang="less" scoped> .file-view { width: 100px; } </style>