Files
riwa-ionic/src/main.ts

121 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { IonicVue } from "@ionic/vue";
import { createPinia } from "pinia";
import VConsole from "vconsole";
import { useRegisterSW } from "virtual:pwa-register/vue";
import { createApp } from "vue";
import uiComponents from "@/ui";
import App from "./App.vue";
import { authClient } from "./auth";
import { i18n } from "./locales";
import { router } from "./router";
/* Core CSS required for Ionic components to work properly */
import "@ionic/vue/css/core.css";
/* Basic CSS for apps built with Ionic */
import "@ionic/vue/css/normalize.css";
import "@ionic/vue/css/structure.css";
import "@ionic/vue/css/typography.css";
/* Optional CSS utils that can be commented out */
import "@ionic/vue/css/padding.css";
import "@ionic/vue/css/float-elements.css";
import "@ionic/vue/css/text-alignment.css";
import "@ionic/vue/css/text-transformation.css";
import "@ionic/vue/css/flex-utils.css";
/**
* Ionic Dark Mode
* -----------------------------------------------------
* For more info, please see:
* https://ionicframework.com/docs/theming/dark-mode
*/
import "@ionic/vue/css/display.css";
// import "@ionic/vue/css/palettes/dark.system.css";
// import "@ionic/vue/css/palettes/dark.always.css";
import "@ionic/vue/css/palettes/dark.class.css";
/* Theme variables */
import "./theme/index.css";
import "./theme/variables.css";
import "./theme/ionic.css";
useTheme();
// 注册 PWA Service Worker使用 Vue 3 Composition API
const { offlineReady, needRefresh, updateServiceWorker } = useRegisterSW({
onRegistered(registration) {
console.log("[PWA] Service Worker registered:", registration);
},
onRegisterError(error) {
console.error("[PWA] Service Worker registration failed:", error);
},
immediate: true,
});
// 监听 PWA 状态
watch(offlineReady, (ready) => {
if (ready) {
console.log("[PWA] App ready to work offline.");
}
});
watch(needRefresh, (refresh) => {
if (refresh) {
console.log("[PWA] New content available, please refresh.");
}
});
if (import.meta.env.DEV) {
const vConsole = new VConsole();
globalThis.vConsole = vConsole;
console.log("VConsole is enabled in development mode.");
}
function initTradingView() {
const { VITE_TRADINGVIEW_LIBRARY_URL } = useEnv();
const promise1 = new Promise((resolve) => {
const script = document.createElement("script");
script.type = "text/javascript";
script.src = `${VITE_TRADINGVIEW_LIBRARY_URL}/charting_library/charting_library.standalone.js`;
script.async = true;
document.body.appendChild(script);
script.onload = () => resolve(true);
});
const promise2 = new Promise((resolve) => {
const script = document.createElement("script");
script.type = "text/javascript";
script.src = `${VITE_TRADINGVIEW_LIBRARY_URL}/datafeeds/udf/bundle.js`;
script.async = true;
document.body.appendChild(script);
script.onload = () => resolve(true);
});
return Promise.all([promise1, promise2]);
}
initTradingView().then(() => {
authClient.getSession().then((session) => {
const pinia = createPinia();
const userStore = useUserStore(pinia);
userStore.setToken(session.data?.session.token || "");
const app = createApp(App)
.use(IonicVue, {
backButtonText: "返回",
mode: "ios",
statusTap: true,
swipeBackEnabled: true,
// rippleEffect: true,
// animated: false,
})
.use(uiComponents)
.use(pinia)
.use(router)
.use(i18n);
router.isReady().then(() => {
app.mount("#app");
});
});
});