20260507213409

This commit is contained in:
oneao committed 2026-05-07 21:34:09 +08:00
1 parent 3070eac71b
commit 4c7f516a03
204 files changed
+3623

No files matched your search

+71
View File
@@ -0,0 +1,71 @@
import type { LoginQqParams, LoginResult, LoginWxParams } from "@/types/auth";
import alovaInstance from "./index";
export function loginQqApi(params: LoginQqParams) {
return alovaInstance.Post<ResponseData<LoginResult>>(`/auth/login/qq`, params);
}
export function loginWxApi(params: LoginWxParams) {
return alovaInstance.Post<ResponseData<LoginResult>>(`/auth/login/wechat`, params);
}
export function bindQqApi(params: LoginQqParams) {
return alovaInstance.Post<ResponseData<null>>(`/bind/qq`, params);
}
export function bindWxApi(params: LoginWxParams) {
return alovaInstance.Post<ResponseData<null>>(`/bind/wechat`, params);
}
export function getUniqueIdApi(count = 1) {
return alovaInstance.Post<ResponseData<number[]>>(`/data/getUniqueId`, {
count: count,
});
}
interface LoadDataBySqlParams {
sql: string;
args: any[];
}
export function loadDataBySqlApi(params: LoadDataBySqlParams) {
return alovaInstance.Post<ResponseData<any[]>>(`/data/loadDataBySql`, params);
}
interface LoadDataParams {
view_name: string;
search_condition: string;
order_by: string;
search_columns: string[];
args: any[];
}
export function loadDataApi(params: LoadDataParams) {
return alovaInstance.Post<ResponseData<any[]>>(`/data/loadData`, params);
}
interface SaveDataParams {
table_name: string;
key_field: string;
inserts: any[];
updates: any[];
deletes: any[];
}
export function saveDataApi(params: SaveDataParams[]) {
return alovaInstance.Post<ResponseData<null>>(`/data/saveData`, params);
}
export function s3UploadFileApi(files: any[]) {
const form = new FormData();
files.forEach((file) => {
form.append("files", file as any);
});
return alovaInstance.Post<ResponseData<string[]>>("/s3/upload", form, {
headers: {
"Content-Type": "multipart/form-data",
},
});
}
+81
View File
@@ -0,0 +1,81 @@
import type { Method } from "alova";
import type { AxiosError } from "axios";
import { axiosRequestAdapter } from "@alova/adapter-axios";
import { createAlova } from "alova";
import { toast } from "sonner-native";
import { useUserStore } from "@/store/user";
enum HttpCode {
Success = 1000,
Unauthorized = 1001,
Fail = 500,
BusinessError = 2000,
SystemError = 3000,
}
// 仅保留「无需登录」接口
const WhiteList = ["/auth/login/**"];
function isWhiteListed(url: string) {
return WhiteList.some((pattern) => {
if (pattern.endsWith("/**")) {
const base = pattern.slice(0, -3);
return url.startsWith(base);
}
return url === pattern;
});
}
const alovaInstance = createAlova({
baseURL: process.env.EXPO_PUBLIC_API_URL,
requestAdapter: axiosRequestAdapter(),
timeout: 5000,
cacheFor: null,
responded: {
onSuccess: async (response, _method: Method) => {
const resData = response.data as ResponseData<any>;
const result = {
...resData,
isSuccess: resData.code === HttpCode.Success,
};
if (resData.code === HttpCode.Unauthorized) {
toast.error("登录状态已过期,请重新登录");
useUserStore.getState().setAuthExpired(true);
return result;
} else if (resData.code === HttpCode.BusinessError) {
toast.error(resData.message || "业务异常,请稍后再试");
return result;
} else if (resData.code === HttpCode.SystemError) {
toast.error(resData.message || "系统异常,请稍后再试");
return result;
}
return result;
},
onError: (error: AxiosError) => {
return Promise.reject(error);
},
},
beforeRequest(method) {
// 白名单接口直接放行
if (isWhiteListed(method.url)) return;
const userStore = useUserStore.getState();
// 未登录直接拦截
if (!userStore.isLogged()) {
userStore.setAuthExpired(true);
return Promise.reject(new Error("未登录"));
}
// 注入 JWT
method.config.headers.Token = userStore.userInfo!.token;
},
});
export default alovaInstance;