// 文件分享工具函数 export default { /** * 生成文件预览链接 * @param {Object} file - 文件对象,包含 name 和 url 属性 * @returns {string} - 生成的文件预览链接 */ generateFilePreviewUrl(file) { // 推断文件类型 let fileType = ''; if (file.name) { const ext = file.name.split('.').pop().toLowerCase(); if (['pdf'].includes(ext)) { fileType = 'pdf'; } else if (['doc', 'docx'].includes(ext)) { fileType = 'word'; } else if (['mp4', 'avi', 'mov', 'wmv', 'flv', 'mkv'].includes(ext)) { fileType = 'video'; } } // 构建文件预览链接 const previewUrl = `/pages_tool/file-preview/file-preview?fileName=${encodeURIComponent(file.name)}&fileUrl=${encodeURIComponent(file.url || '')}&fileType=${encodeURIComponent(fileType)}`; return previewUrl; }, /** * 分享文件 * @param {Object} file - 文件对象,包含 name 和 url 属性 * @param {string} title - 分享标题,默认使用文件名 * @param {string} desc - 分享描述,默认使用固定文案 */ shareFile(file, title = file.name, desc = '查看企业文件:' + file.name) { // 生成文件预览链接 const filePreviewUrl = this.generateFilePreviewUrl(file); // #ifdef H5 // H5 平台分享 if (navigator.share) { // 使用 Web Share API navigator.share({ title: title, text: desc, url: filePreviewUrl }).catch(err => { console.error('分享失败:', err); uni.showToast({ title: '分享失败', icon: 'none' }); }); } else { // 不支持 Web Share API 的浏览器 uni.setClipboardData({ data: filePreviewUrl, success: () => { uni.showToast({ title: '链接已复制,请粘贴分享', icon: 'success' }); }, fail: () => { uni.showToast({ title: '复制失败', icon: 'none' }); } }); } // #endif // #ifdef MP-WEIXIN // 微信小程序分享 uni.showActionSheet({ itemList: ['发送给朋友', '分享到朋友圈'], success: (res) => { if (res.tapIndex === 0) { // 发送给朋友 uni.shareAppMessage({ title: title, path: filePreviewUrl, success: () => { uni.showToast({ title: '分享成功', icon: 'success' }); }, fail: () => { uni.showToast({ title: '分享失败', icon: 'none' }); } }); } else if (res.tapIndex === 1) { // 分享到朋友圈 uni.shareTimeline({ title: desc, path: filePreviewUrl, success: () => { uni.showToast({ title: '分享成功', icon: 'success' }); }, fail: () => { uni.showToast({ title: '分享失败', icon: 'none' }); } }); } }, fail: () => { // 用户取消分享 } }); // #endif } };