更新登录页面和帮助教程

This commit is contained in:
Eamon
2026-08-07 16:54:21 +08:00
parent 038e66d0cc
commit 4c9953ab57
22 changed files with 1278 additions and 133 deletions

View File

@@ -1,11 +1,17 @@
import type { ApiResponse } from "@/lib/api"
import { callByDevice, callByUser } from "./base"
// 用户类型
export interface User {
id: number
username: string
// ...
loginCode: string
phone: string
name: string
wx: string
qq: string
taobao: string
email: string
restAmount: number
}
export type LoginMode = "phone_code" | "password"
@@ -15,8 +21,10 @@ export async function login(props: {
password: string
remember: boolean
mode: LoginMode
code?: string
wx?: string
qq?: string
}): Promise<ApiResponse> {
// 使用 callByDevice 去拿 Token (设备级认证)
const result = await callByDevice<{
access_token: string
refresh_token: string
@@ -29,7 +37,6 @@ export async function login(props: {
if (!result.success) return result
// 登录成功,存入 localStorage
const { access_token, refresh_token, expires_in } = result.data
localStorage.setItem("auth_token", access_token)
localStorage.setItem("auth_refresh", refresh_token)
@@ -52,21 +59,17 @@ export async function logout() {
})
}
// 清除前端本地缓存
localStorage.removeItem("auth_token")
localStorage.removeItem("auth_refresh")
localStorage.removeItem("auth_expires_in")
// 强制跳转到登录页
window.location.href = "/login"
window.location.href = "/"
}
// 获取当前用户信息 (校验 Token 是否有效)
export async function getProfile() {
return await callByUser<User>("/api/auth/introspect")
}
// 刷新 Token
export async function refreshAuth(): Promise<{
access_token: string
refresh_token: string
@@ -88,7 +91,6 @@ export async function refreshAuth(): Promise<{
return null
}
// 刷新成功,更新本地缓存
const { access_token, refresh_token, expires_in } = resp.data
localStorage.setItem("auth_token", access_token)
localStorage.setItem("auth_refresh", refresh_token)

15
src/api/verify.ts Normal file
View File

@@ -0,0 +1,15 @@
import type { ApiResponse } from "@/lib/api"
import { callByDevice } from "./base"
export type SMSPurpose = "User_Code" | "FindUser_Code" | "User_Login"
export async function sendSMS(
phone: string,
purpose: SMSPurpose = "User_Code",
): Promise<ApiResponse> {
return await callByDevice("/api/verify/sms", {
phone,
purpose,
key: purpose,
})
}