64 lines
1.6 KiB
TypeScript

import { createApp } from "vue";
import { createPinia } from "pinia";
import App from "./App.vue";
import { createProjectRouter } from "./router";
import "./global.less";
import VueGridLayout from "vue-grid-layout"; // 引入layout
import {
renderWithQiankun,
qiankunWindow,
} from "vite-plugin-qiankun/dist/helper";
let app;
function render(props: Object = {}) {
app = createApp(App);
setStyleSheet(props.styles);
const router = createProjectRouter(props.base);
app.use(router);
app.use(VueGridLayout);
app.use(createPinia());
app.mount("#y-code-app");
}
function setStyleSheet(styles: Object = {}) {
const styleEle = document.createElement("style");
styleEle.type = "text/css";
styleEle.innerHTML = `
:root {
--primary-color: ${styles.primaryColor || "#1677ff"};
--primary-light-color: ${styles.primaryLightColor || "#4096ff"};
--table-head-bg-color: ${styles.tableHeadBgColor || "#fafafa"};
--table-head-font-color: ${styles.tableHeadFontColor || "#191919"};
}
`;
document.head.appendChild(styleEle);
}
const __POWERED_BY_QIANKUN__ =
qiankunWindow?.__POWERED_BY_QIANKUN__ ||
window?.proxy?.__POWERED_BY_QIANKUN__;
if (__POWERED_BY_QIANKUN__) {
renderWithQiankun({
bootstrap() {
console.log("bootstrap");
return Promise.resolve();
},
mount(props) {
console.log("mount");
render(props);
return Promise.resolve();
},
unmount() {
console.log("unmount");
if (app) {
app.unmount();
}
return Promise.resolve();
},
update() {},
});
} else {
render();
}