// component/filegrid/index.js Component({ options: { addGlobalClass: true, }, /** * 组件的属性列表 */ properties: { files: { type: Array, value: [], observer(newVal) { this.formatFiles(newVal); }, }, gridHeight: { type: String, value: '29vw', }, gridWidth: { type: String, value: '29vw', }, }, /** * 组件的初始数据 */ data: { currentFiles: [], }, /** * 组件的方法列表 */ methods: { formatFiles(value) { const currentFiles = value.map(f => { // 根据文件类型选择不同样式 let extensionClass = ''; switch (f.ext) { case 'xls': case 'xlsx': case 'csv': extensionClass = 'file_xlsx'; break; case 'doc': case 'docx': extensionClass = 'file_word'; break; case 'pdf': extensionClass = 'file_pdf'; break; case 'ppt': case 'pptx': extensionClass = 'file_ppt'; break; default: break; } return { ...f, styleClass: extensionClass }; }); this.setData({ currentFiles }); }, //图片放大预览 previewImage(e) { const { index } = e.currentTarget.dataset; const f = this.data.currentFiles[index]; const previewImageUrls = this.data.currentFiles .filter(f => f.type == 'image') .map(f => f.url); const i = previewImageUrls.indexOf(f.url); this.setData({ previewImageUrls, previewCurrent: i, showPreview: true, }); }, // 查看文件 previewFile(e) { const { index } = e.currentTarget.dataset; const file = this.data.currentFiles[index]; if (file.url.indexOf('http') != -1) { wx.showLoading({ title: '下载文件中', mask: true, }); wx.downloadFile({ url: file.url, success: res => { wx.hideLoading(); if (res.statusCode === 200) { const filePath = res.tempFilePath; wx.openDocument({ filePath: filePath }); } else { wx.showToast({ title: '文件下载失败', icon: 'error', }); } }, fail(err) { wx.showToast({ title: '文件下载失败', icon: 'error', }); }, }); } else { wx.openDocument({ filePath: file.url }); } }, }, });