首页页面

This commit is contained in:
Eamon
2026-07-30 13:55:28 +08:00
parent 0361853732
commit 0d5e28c785
48 changed files with 2141 additions and 294 deletions

51
src/lib/api.ts Normal file
View File

@@ -0,0 +1,51 @@
// 定义后端服务URL和OAuth2配置
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL
if (!API_BASE_URL) throw new Error("VITE_API_BASE_URL is not set")
const CLIENT_ID = import.meta.env.VITE_CLIENT_ID
if (!CLIENT_ID) throw new Error("VITE_CLIENT_ID is not set")
const CLIENT_SECRET = import.meta.env.VITE_CLIENT_SECRET
if (!CLIENT_SECRET) throw new Error("VITE_CLIENT_SECRET is not set")
// 统一的API响应类型
type ApiResponse<T = undefined> =
| {
success: false
status: number
message: string
}
| {
success: true
data: T
}
type PageRecord<T = unknown> = {
total: number
page: number
size: number
list: T[]
}
// 工具类型:用于提取请求参数和返回数据
type ExtraReq<T extends (...args: never) => unknown> = T extends (
...args: infer P
) => unknown
? P[0]
: never
type ExtraResp<T extends (...args: never) => unknown> =
Awaited<ReturnType<T>> extends ApiResponse<infer D> ? D : never
// 预定义错误
const UnauthorizedError = new Error("未授权访问")
export {
API_BASE_URL,
type ApiResponse,
CLIENT_ID,
CLIENT_SECRET,
type ExtraReq,
type ExtraResp,
type PageRecord,
UnauthorizedError,
}

13
src/lib/cap/index.ts Normal file
View File

@@ -0,0 +1,13 @@
import { callPublic } from "@/api/base"
// 获取验证码
// 假设你的后端接口为 /api/captcha/get,返回 { token: 'abc', base64: 'data:image/png...' }
export async function getCaptcha() {
return await callPublic<{ token: string; base64: string }>("/api/captcha/get")
}
// 校验验证码
// 假设后端接口为 /api/captcha/verify,返回 { success: true/false }
export async function verifyCaptcha(token: string, answer: string) {
return await callPublic<boolean>("/api/captcha/verify", { token, answer })
}