From 00264a721e80e0c4458a539626856a01d274f34e Mon Sep 17 00:00:00 2001 From: hailin Date: Thu, 8 Jan 2026 21:38:00 -0800 Subject: [PATCH] =?UTF-8?q?fix(admin-web):=20=E4=BC=98=E5=8C=96=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E9=A1=B5=E9=9D=A2=E9=94=99=E8=AF=AF=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=EF=BC=8C=E6=98=BE=E7=A4=BA=E5=90=8E=E7=AB=AF=E7=9C=9F=E5=AE=9E?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:创建授权失败时只显示"Request failed with status code 400" 用户无法了解失败的真实原因(如用户未种树、授权冲突等) 修复: - handleCreate和handleRevoke的catch块优先从err.response.data.message提取后端错误 - 后端已有完善的错误提示如"用户尚未认种任何树,无法授权" - 前端现在能正确显示这些提示帮助管理员了解真实情况 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../app/(dashboard)/authorization/page.tsx | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/frontend/admin-web/src/app/(dashboard)/authorization/page.tsx b/frontend/admin-web/src/app/(dashboard)/authorization/page.tsx index d9de8d41..5069c3e0 100644 --- a/frontend/admin-web/src/app/(dashboard)/authorization/page.tsx +++ b/frontend/admin-web/src/app/(dashboard)/authorization/page.tsx @@ -146,9 +146,16 @@ export default function AuthorizationPage() { region: '', skipAssessment: false, }); - } catch (err) { + } catch (err: unknown) { console.error('创建授权失败:', err); - const errorMessage = err instanceof Error ? err.message : '创建授权失败'; + // 优先从后端响应中获取错误信息 + let errorMessage = '创建授权失败'; + if (err && typeof err === 'object' && 'response' in err) { + const axiosError = err as { response?: { data?: { message?: string } } }; + errorMessage = axiosError.response?.data?.message || errorMessage; + } else if (err instanceof Error) { + errorMessage = err.message; + } toast.error(errorMessage); } }; @@ -166,9 +173,16 @@ export default function AuthorizationPage() { setShowRevokeModal(false); setRevokeTarget(null); setRevokeReason(''); - } catch (err) { + } catch (err: unknown) { console.error('撤销授权失败:', err); - toast.error('撤销授权失败'); + let errorMessage = '撤销授权失败'; + if (err && typeof err === 'object' && 'response' in err) { + const axiosError = err as { response?: { data?: { message?: string } } }; + errorMessage = axiosError.response?.data?.message || errorMessage; + } else if (err instanceof Error) { + errorMessage = err.message; + } + toast.error(errorMessage); } };