55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
// @/utils/alova-vant.ts
|
||
import { createBschAlova } from "./alova-core";
|
||
import { Toast, Dialog, showFailToast, showDialog, showLoadingToast, closeToast } from "vant";
|
||
import conf from "@/assets/config/host.config";
|
||
|
||
import { useBschTicketStore } from "@/store/TicketStore";
|
||
import { WappUserHeader } from "@/types/Basics";
|
||
|
||
let toastLoading: ReturnType<typeof Toast.loading> | null = null;
|
||
|
||
/* 主动关闭 loading */
|
||
function closeLoading() {
|
||
if (toastLoading) {
|
||
toastLoading.close();
|
||
toastLoading = null;
|
||
} else {
|
||
closeToast();
|
||
}
|
||
}
|
||
|
||
// const baseUrl = conf.serviceHost + "/api";
|
||
const baseUrl = conf.serviceHost + "/mobiapi";
|
||
/* 创建带 Vant UI 的 Alova 实例 */
|
||
export const alovaInstance = createBschAlova(baseUrl, {
|
||
injectHeaders(method) {
|
||
const store = useBschTicketStore();
|
||
const authoHeaders = store.getAuthoHeaders;
|
||
const userHeaders = store.getTicket;
|
||
|
||
const bschTicket: WappUserHeader = store.getTicket;
|
||
|
||
for (const key in authoHeaders) method.config.headers[key] = authoHeaders[key];
|
||
for (const key in bschTicket) method.config.headers[key] = (bschTicket as any)[key];
|
||
|
||
// method.config.headers.currentRole = encodeURIComponent(
|
||
// JSON.stringify({ roleId: userHeaders.roleId, childId: userHeaders.userId, schId: userHeaders.schoolId }),
|
||
// );
|
||
},
|
||
/* 2. 加载动画 – Vant Toast */
|
||
onLoadingStart() {
|
||
toastLoading = showLoadingToast({
|
||
message: "加载中...",
|
||
forbidClick: true,
|
||
duration: 0,
|
||
});
|
||
},
|
||
onLoadingEnd: closeLoading,
|
||
onBizError(msg) {
|
||
showFailToast(msg);
|
||
},
|
||
onHttpError(msg) {
|
||
showDialog({ title: "网络错误", message: msg });
|
||
},
|
||
});
|