import VxeUIPluginExportXLSX from "@vxe-ui/plugin-export-xlsx"; import ElementPlus from "element-plus"; import ExcelJS from "exceljs"; import { createPinia } from "pinia"; import piniaPluginPersistedstate from "pinia-plugin-persistedstate"; import { createApp } from "vue"; import VxeUIBase, { VxeUI } from "vxe-pc-ui"; import VxeUITable from "vxe-table"; import App from "./App.vue"; import router from "@/router/index.js"; import permission from "@/utils/permission"; import "element-plus/dist/index.css"; import "@/styles/index.css"; import "vxe-pc-ui/es/style.css"; import "vxe-table/es/style.css"; import SvgIconPlugin from "@/plugins/svg-icon"; import * as ElementPlusIconsVue from "@element-plus/icons-vue"; export const app = createApp(App); const pinia = createPinia(); pinia.use(piniaPluginPersistedstate); VxeUI.use(VxeUIPluginExportXLSX, { ExcelJS, }); VxeUI.setConfig({ table: { scrollX: { enabled: true, }, scrollY: { enabled: true, }, virtualXConfig: { enabled: true, gt: 0, }, virtualYConfig: { enabled: true, gt: 0, }, }, }); for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.component(key, component); } app .use(pinia) .use(router) .use(permission) .use(ElementPlus) .use(VxeUIBase) .use(VxeUITable) .use(SvgIconPlugin); // HMR 防护:避免热更新时重复挂载 // 检查 #app 上是否已有 Vue 实例,避免重复挂载 const container = document.querySelector("#app"); if (container && container.__vue_app__) { container.__vue_app__.unmount(); } app.mount("#app");