完善用户认领功能

Signed-off-by: luorijun <luorijun@outlook.com>
This commit is contained in:
2026-01-06 14:57:55 +08:00
parent 0c5598c927
commit a27e856f07
5 changed files with 242 additions and 108 deletions

View File

@@ -1,5 +1,42 @@
import { useState } from "react"
import {
type Dispatch,
type SetStateAction,
useCallback,
useState,
} from "react"
import { toast } from "sonner"
import type { ApiResponse } from "@/lib/api"
export function useStatus() {
return useState<"load" | "fail" | "done">("load")
}
export function useFetch<TArgs extends unknown[], TResult>(
fetchData: (...args: TArgs) => Promise<ApiResponse<TResult>>,
messages: {
done?: string
fail?: string
},
setStatus?: Dispatch<SetStateAction<"load" | "fail" | "done">>,
) {
return useCallback(
async (...args: TArgs) => {
try {
setStatus?.("load")
const resp = await fetchData(...args)
if (!resp.success) {
throw new Error(resp.message)
}
setStatus?.("done")
toast.success(messages.done || "获取数据成功")
} catch (e) {
setStatus?.("fail")
toast.error(messages.fail || "获取数据失败", {
description: (e as Error).message || "未知错误",
})
}
},
[fetchData, setStatus, messages],
)
}