import App from "./App.vue";
import { createApp } from "vue";
import { initStore } from "./store"; // Store
import { initRouter } from "./router"; // Router
import language from "./locales"; // 国际化
import "@styles/core/tailwind.css"; // tailwind
import "@styles/index.scss"; // 样式
import "@utils/sys/console.ts"; // 控制台输出内容
import { initGlobDirectives } from "./directives";
import { setupErrorHandle } from "./utils/sys/error-handle";
import { initElIcons } from "@/plugins/icons";
// 暗黑主题样式
import "element-plus/theme-chalk/dark/css-vars.css";
// 过渡动画
import "animate.css";
// 引入 vue-web-terminal
import { createTerminal } from "vue-web-terminal";
document.addEventListener("touchstart", function () {}, { passive: false });
const app = createApp(App);
/** Element Plus 图标(@element-plus/icons-vue)全局注册,模板中可直接 、 等 */
initElIcons(app);
initStore(app);
initRouter(app);
initGlobDirectives(app);
setupErrorHandle(app);
// 注册终端组件
app.use(createTerminal());
app.use(language);
app.mount("#app");
// 封装设置 title 和 favicon 的函数
import { useConfigStore } from "./store/modules/config.store";
const setTitleAndFavicon = async () => {
try {
const configStore = useConfigStore();
// 强制从服务器获取最新配置
await configStore.getConfig(true);
const webTitle = configStore.configData.sys_web_title?.config_value;
const webFavicon = configStore.configData.sys_web_favicon?.config_value;
if (webTitle) {
document.title = webTitle;
}
if (webFavicon) {
document.querySelectorAll('link[rel="icon"], link[rel="shortcut icon"]').forEach((node) => {
if (node instanceof HTMLLinkElement) {
node.href = webFavicon;
}
});
}
} catch (error) {
console.error("获取配置数据失败:", error);
}
};
// 在应用挂载后执行设置逻辑
setTitleAndFavicon();