feat(08-05-interaction-pattern-unification): 统一前端交互与反馈模式

这个提交包含在:
2026-08-07 06:50:40 +08:00
父节点 d4e9597b37
当前提交 94f1bad336
共修改 97 个文件,包含 784 行新增和 836 行删除
+5 -20
查看文件
@@ -1,8 +1,7 @@
import { resolveErrorMessage as resolveUserErrorMessage } from "../lib/resolveErrorMessage";
import { useMemo, useState } from "react";
import { Link, useLocation, useNavigate, useSearchParams } from "react-router-dom";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { isApiError } from "../api/types";
import { mapApiErrorMessage } from "../api/errorMessages";
import { fetchMyDelegations } from "../api/delegations";
import { exportReimbursements } from "../api/exports";
import { fetchReimbursementTemplates } from "../api/reimbursementTemplates";
@@ -61,10 +60,7 @@ function formatCurrency(value: number) {
}
function resolveErrorMessage(error: unknown, fallback: string) {
if (isApiError(error)) {
return `${error.code}: ${mapApiErrorMessage(error.code, error.details, error.message)}`;
}
return error instanceof Error ? error.message : fallback;
return resolveUserErrorMessage(error, fallback);
}
function resolveEmptyStateCopy(status: ReimbursementStatus) {
@@ -344,14 +340,9 @@ export function ReimbursementsPage() {
}
/>
{createMutation.error && isApiError(createMutation.error) ? (
{createMutation.error ? (
<p className="rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-600">
{createMutation.error.code}:
{mapApiErrorMessage(
createMutation.error.code,
createMutation.error.details,
createMutation.error.message,
)}
{resolveUserErrorMessage(createMutation.error, "创建报销单失败")}
</p>
) : null}
@@ -500,13 +491,7 @@ export function ReimbursementsPage() {
{listQuery.isError ? (
<p className="rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-600">
{isApiError(listQuery.error)
? `${listQuery.error.code}: ${mapApiErrorMessage(
listQuery.error.code,
listQuery.error.details,
listQuery.error.message,
)}`
: "加载报销列表失败"}
{resolveUserErrorMessage(listQuery.error, "加载报销列表失败")}
</p>
) : null}