diff --git a/common/js/share.js b/common/js/share.js new file mode 100644 index 0000000..65924c9 --- /dev/null +++ b/common/js/share.js @@ -0,0 +1,100 @@ +// 文件分享工具函数 +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 + } +}; \ No newline at end of file