diff --git a/web/src/features/review/review-error.test.ts b/web/src/features/review/review-error.test.ts new file mode 100644 index 00000000..d4e82098 --- /dev/null +++ b/web/src/features/review/review-error.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, it } from 'vitest' +import { resolveReviewActionErrorDescription } from './review-error' + +describe('resolveReviewActionErrorDescription', () => { + it('returns the error message when present', () => { + expect(resolveReviewActionErrorDescription(new Error('审核规则校验失败'))).toBe('审核规则校验失败') + }) + + it('returns undefined for blank or non-error values', () => { + expect(resolveReviewActionErrorDescription(new Error(' '))).toBeUndefined() + expect(resolveReviewActionErrorDescription('审核失败')).toBeUndefined() + }) +}) diff --git a/web/src/features/review/review-error.ts b/web/src/features/review/review-error.ts new file mode 100644 index 00000000..75858052 --- /dev/null +++ b/web/src/features/review/review-error.ts @@ -0,0 +1,8 @@ +export function resolveReviewActionErrorDescription(error: unknown): string | undefined { + if (!(error instanceof Error)) { + return undefined + } + + const message = error.message.trim() + return message || undefined +} diff --git a/web/src/pages/dashboard/review-detail.tsx b/web/src/pages/dashboard/review-detail.tsx index 83441597..911ca246 100644 --- a/web/src/pages/dashboard/review-detail.tsx +++ b/web/src/pages/dashboard/review-detail.tsx @@ -7,6 +7,7 @@ import { Textarea } from '@/shared/ui/textarea' import { Label } from '@/shared/ui/label' import { ConfirmDialog } from '@/shared/components/confirm-dialog' import { toast } from '@/shared/lib/toast' +import { resolveReviewActionErrorDescription } from '@/features/review/review-error' import { useReviewDetail, useApproveReview, useRejectReview } from '@/features/review/use-review-detail' export function ReviewDetailPage() { @@ -36,8 +37,8 @@ export function ReviewDetailPage() { toast.success(t('review.approveSuccess')) navigate({ to: '/dashboard/reviews' }) }, - onError: () => { - toast.error(t('review.approveFailed')) + onError: (error) => { + toast.error(t('review.approveFailed'), resolveReviewActionErrorDescription(error)) }, } ) @@ -55,8 +56,8 @@ export function ReviewDetailPage() { toast.success(t('review.rejectSuccess')) navigate({ to: '/dashboard/reviews' }) }, - onError: () => { - toast.error(t('review.rejectFailed')) + onError: (error) => { + toast.error(t('review.rejectFailed'), resolveReviewActionErrorDescription(error)) }, } )