Files
gao-customer-h5/src/main.ts
T
2026-09-22 16:24:29 +08:00

102 lines
2.9 KiB
TypeScript

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<void> {
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<any>) => {
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<void> {
try {
await bootstrap();
} catch (error) {
console.error(error);
Message.error("应用启动失败");
}
}
void start();