import { createApp } from "vue"; import { createPinia } from "pinia"; import router from "@/router"; import Root from "@/Root.vue"; import { useCurrentStoreStore } from "@/store/currentStoreStore"; import { configureUserStore, useUserStore } from "timi-web-api/store"; import Network from "timi-web-api/utils/Network"; import { VCan, VRole } from "timi-web-api/utils/directives/Access"; import type { ApiResponse } from "timi-web-api"; import { Message } from "@/utils/message"; import { initializeTwaBridge } from "@/utils/twaBridge"; import { VEntranceTransition } from "timi-tdesign-mobile"; import timiWebStyle from "../../timi-web/src/assets/style/timi-web.less?inline"; import tdesignCustomStyle from "../../timi-tdesign-mobile/src/assets/style/tdesign-custom.less?inline"; import "vue-virtual-scroller/dist/vue-virtual-scroller.css"; import "tdesign-mobile-vue/es/style/index.css"; import "timi-web/style.css"; import "timi-tdesign-mobile/style.css"; import "@/assets/styles/tdesign-custom.css"; import "@/assets/styles/global.less"; export const pinia = createPinia(); const apiBaseURL = import.meta.env.VITE_API_BASE_URL as string | undefined; const libraryOverrideStyleId = "library-override-style"; initializeTwaBridge(); function mountLibraryOverrideStyle(): void { const oldStyle = document.getElementById(libraryOverrideStyleId); oldStyle?.remove(); const style = document.createElement("style"); style.id = libraryOverrideStyleId; style.textContent = `${timiWebStyle}\n${tdesignCustomStyle}`; document.head.append(style); } if (apiBaseURL) { Network.axios.defaults.baseURL = apiBaseURL; } configureUserStore({ storageKey: "gao-customer-h5:user" }); Network.setGlobalRequestInterceptor((config: any) => { const userStore = useUserStore(pinia); if (apiBaseURL && !config.baseURL) { config.baseURL = apiBaseURL; } config.headers.set({ "Accept-Language": "zh-CN" }); if (userStore.token) { config.headers.set({ "Token": userStore.token }); } return config; }); async function bootstrap(): Promise { const app = createApp(Root); app.use(pinia); app.directive("can", VCan); app.directive("role", VRole); app.directive("entrance-transition", VEntranceTransition); const userStore = useUserStore(pinia); const currentStoreStore = useCurrentStoreStore(pinia); const loginUser = await userStore.loginByStorage(); if (loginUser) { await currentStoreStore.loadAfterLogin(); } Network.setGlobalErrorCallback((resp: ApiResponse) => { Message.error(resp.message); }); app.use(router); await router.isReady(); await import("tdesign-mobile-vue"); await import("../../timi-web/src/index"); await import("timi-tdesign-mobile"); mountLibraryOverrideStyle(); app.mount("#root"); } async function start(): Promise { try { await bootstrap(); } catch (error) { console.error(error); Message.error("应用启动失败"); } } void start();