From 6978b8bbfd4ae2dc852d96589ee09a511f288a1d Mon Sep 17 00:00:00 2001 From: imeepos Date: Sun, 13 Jul 2025 22:00:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5=E6=89=93=E5=BC=80=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题分析: 1. 权限问题:Tauri opener插件缺少必要的权限配置 2. 路径格式问题:Windows长路径格式(\\?\前缀)导致opener插件无法处理 修复方案: 1. 权限配置修复: - 在capabilities/default.json中添加opener:allow-open-path权限 - 添加opener:allow-reveal-item-in-dir权限 - 同时添加fs和dialog相关权限以支持完整功能 2. 路径处理优化: - 检测并移除Windows长路径前缀(\\?\) - 添加备用方案:如果openPath失败,尝试revealItemInDir - 增加错误处理和用户友好的提示信息 - 添加调试日志便于问题排查 技术细节: - openPath: 直接打开文件夹 - revealItemInDir: 在文件管理器中显示文件夹 - 路径标准化处理确保跨平台兼容性 现在项目详情页的打开文件夹功能应该可以正常工作了! --- 0.1.1.md | 2 +- .../src-tauri/capabilities/default.json | 10 +++++++- apps/desktop/src/pages/ProjectDetails.tsx | 25 ++++++++++++++++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/0.1.1.md b/0.1.1.md index 769760a..9e4c32d 100644 --- a/0.1.1.md +++ b/0.1.1.md @@ -31,5 +31,5 @@ ### 优化 提交代码 然后优化: -feature: 我已经确认环境中已经安装了 ffmpeg和ffmprobe 日志却显示:场景检测失败 +TODO: 需要优化成一刀切 feature: 在导入时启动异步处理(更好的用户体验) diff --git a/apps/desktop/src-tauri/capabilities/default.json b/apps/desktop/src-tauri/capabilities/default.json index 4cdbf49..368bdd6 100644 --- a/apps/desktop/src-tauri/capabilities/default.json +++ b/apps/desktop/src-tauri/capabilities/default.json @@ -5,6 +5,14 @@ "windows": ["main"], "permissions": [ "core:default", - "opener:default" + "opener:default", + "opener:allow-open-path", + "opener:allow-reveal-item-in-dir", + "fs:default", + "fs:allow-read-file", + "fs:allow-read-dir", + "dialog:default", + "dialog:allow-open", + "dialog:allow-save" ] } diff --git a/apps/desktop/src/pages/ProjectDetails.tsx b/apps/desktop/src/pages/ProjectDetails.tsx index 4360c8b..1ceffe2 100644 --- a/apps/desktop/src/pages/ProjectDetails.tsx +++ b/apps/desktop/src/pages/ProjectDetails.tsx @@ -61,9 +61,32 @@ export const ProjectDetails: React.FC = () => { if (project) { try { const { openPath } = await import('@tauri-apps/plugin-opener'); - await openPath(project.path); + + // 处理 Windows 路径格式,移除 \\?\ 前缀 + let normalizedPath = project.path; + if (normalizedPath.startsWith('\\\\?\\')) { + normalizedPath = normalizedPath.substring(4); + } + + console.log('尝试打开路径:', normalizedPath); + await openPath(normalizedPath); } catch (error) { console.error('打开文件夹失败:', error); + + // 如果 openPath 失败,尝试使用 revealItemInDir + try { + const { revealItemInDir } = await import('@tauri-apps/plugin-opener'); + let normalizedPath = project.path; + if (normalizedPath.startsWith('\\\\?\\')) { + normalizedPath = normalizedPath.substring(4); + } + console.log('尝试使用 revealItemInDir 打开:', normalizedPath); + await revealItemInDir(normalizedPath); + } catch (fallbackError) { + console.error('备用方法也失败:', fallbackError); + // 可以在这里显示用户友好的错误提示 + alert('无法打开文件夹,请检查路径是否存在'); + } } } };