// @/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 | 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 }); }, });