feat(08-05-interaction-pattern-unification): 统一前端交互与反馈模式
这个提交包含在:
@@ -1,6 +1,6 @@
|
||||
import { resolveErrorMessage as resolveUserErrorMessage } from "../lib/resolveErrorMessage";
|
||||
import { useMemo, useState } from "react";
|
||||
import { useMutation, useQuery } from "@tanstack/react-query";
|
||||
import { mapApiErrorMessage } from "../api/errorMessages";
|
||||
import { exportDashboardReimbursements } from "../api/exports";
|
||||
import {
|
||||
fetchDashboardApprovalEfficiency,
|
||||
@@ -10,7 +10,6 @@ import {
|
||||
type DashboardQuery,
|
||||
} from "../api/dashboard";
|
||||
import { fetchDepartments } from "../api/departments";
|
||||
import { isApiError } from "../api/types";
|
||||
import { toast } from "sonner";
|
||||
import { useAuth } from "../auth/AuthContext";
|
||||
import { hasPermission } from "../auth/permissions";
|
||||
@@ -36,15 +35,7 @@ function toCurrency(value: string | number | null | undefined) {
|
||||
}
|
||||
|
||||
function resolveErrorMessage(error: unknown) {
|
||||
if (isApiError(error)) {
|
||||
return `${error.code}: ${mapApiErrorMessage(error.code, error.details, error.message)}`;
|
||||
}
|
||||
|
||||
if (error instanceof Error) {
|
||||
return error.message;
|
||||
}
|
||||
|
||||
return "加载失败,请稍后重试。";
|
||||
return resolveUserErrorMessage(error, "加载失败,请稍后重试。");
|
||||
}
|
||||
|
||||
export function DashboardPage() {
|
||||
@@ -107,7 +98,7 @@ export function DashboardPage() {
|
||||
toast.success("导出完成");
|
||||
},
|
||||
onError: (err) => {
|
||||
toast.error(err instanceof Error ? err.message : "导出失败");
|
||||
toast.error(resolveUserErrorMessage(err, "导出失败"));
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户