hookehuyr

fix(material): 修复文件打开错误处理和用户反馈引导

- 修复 showModal cancelText 参数为 undefined 导致的错误
- 优化 PDF 文档打开失败的提示文案和交互
- 新增"去反馈"按钮跳转到意见反馈页面
- 启用 PDF 文档的复制链接功能

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
......@@ -4,6 +4,26 @@
> 格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
---
## [2026-02-11] - 修复文件打开错误处理和优化用户反馈
### 修复
- **showModal 参数错误修复**
- 修复 `useFileOperation.js``showModal``cancelText` 参数为 `undefined` 导致的错误
- 修改逻辑:只在 `showCopyButton``true` 时才添加 `cancelText``showCancel` 参数
- 避免微信小程序报错 "parameter.cancelText should be String instead of Undefined"
- **PDF 文档打开失败提示优化**
- 将提示文案从"文件可能已损坏,请联系管理员"改为引导用户自主解决问题
- 新增文案:"您可以复制链接在其他应用中打开,或前往'意见反馈'告诉我们"
- 启用 PDF 文档的复制链接功能(与 Office 文档保持一致)
- **统一错误处理交互**
- 所有文件打开失败场景统一显示"去反馈"取消按钮
- 点击"去反馈"跳转到意见反馈页面 `/pages/feedback/index`
- 点击"复制链接"复制文件下载链接到剪贴板
---
## [2026-02-11] - 修复计划书提交逻辑和成功验证
### 修复
......
......@@ -109,7 +109,8 @@ export function useFileOperation() {
showCopyButton = true
} else if (['pdf'].includes(fileExt)) {
message = 'PDF 文件打开失败'
suggestion = '\n\n文件可能已损坏,请联系管理员'
suggestion = '\n\n您可以复制链接在其他应用中打开,或前往"意见反馈"告诉我们'
showCopyButton = !!item.downloadUrl
} else {
message = `暂不支持预览 ${fileExt.toUpperCase()} 格式文件`
suggestion = '\n\n请在电脑或其他应用中打开'
......@@ -120,42 +121,48 @@ export function useFileOperation() {
const modalParams = {
title: '提示',
content: message + suggestion,
confirmText: showCopyButton ? '复制链接' : '我知道了'
}
// 只在有下载链接时才显示取消按钮
if (showCopyButton) {
modalParams.cancelText = '关闭'
modalParams.showCancel = true
confirmText: showCopyButton ? '复制链接' : '我知道了',
cancelText: '去反馈',
showCancel: true
}
showModal({
...modalParams,
success: (modalRes) => {
console.log('[文件操作] 用户选择:', modalRes.confirm ? '复制链接' : '关闭')
if (modalRes.confirm && showCopyButton && item.downloadUrl) {
// 复制下载链接到剪贴板
console.log('[文件操作] 开始复制链接:', item.downloadUrl)
Taro.setClipboardData({
data: item.downloadUrl,
success: () => {
console.log('[文件操作] ✅ 链接复制成功')
showToast({
title: '链接已复制',
icon: 'success',
duration: 2000
})
},
fail: (clipboardErr) => {
console.log('[文件操作] ❌ 链接复制失败:', clipboardErr)
showToast({
title: '复制失败',
icon: 'none',
duration: 2000
})
}
console.log('[文件操作] 用户选择:', modalRes.confirm ? '复制链接' : '去反馈')
if (modalRes.confirm) {
// 点击主按钮:复制链接(如果有 downloadUrl)
if (showCopyButton && item.downloadUrl) {
// 复制下载链接到剪贴板
console.log('[文件操作] 开始复制链接:', item.downloadUrl)
Taro.setClipboardData({
data: item.downloadUrl,
success: () => {
console.log('[文件操作] ✅ 链接复制成功')
showToast({
title: '链接已复制',
icon: 'success',
duration: 2000
})
},
fail: (clipboardErr) => {
console.log('[文件操作] ❌ 链接复制失败:', clipboardErr)
showToast({
title: '复制失败',
icon: 'none',
duration: 2000
})
}
})
}
// 如果没有 downloadUrl,点击"我知道了"不做任何事
} else {
// 点击取消按钮:跳转到意见反馈页面
console.log('[文件操作] 跳转到意见反馈页面')
Taro.navigateTo({
url: '/pages/feedback/index'
})
}
}
......