mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-11-25 19:42:31 +08:00
68 lines
1.5 KiB
Vue
68 lines
1.5 KiB
Vue
<template>
|
|
<component :is="containerComponent" class="magic-ui-page" :data-tmagic-id="config.id" :config="config"></component>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { defineComponent, type PropType } from 'vue-demi';
|
|
|
|
import { asyncLoadCss, asyncLoadJs, type MPage } from '@tmagic/core';
|
|
import { useApp, useComponent } from '@tmagic/vue-runtime-help';
|
|
|
|
const createCss = (config: MPage) => {
|
|
if (config.cssFile) {
|
|
asyncLoadCss(config.cssFile);
|
|
}
|
|
|
|
if (Array.isArray(config.cssFiles)) {
|
|
config.cssFiles.map((file) => asyncLoadCss(file.url));
|
|
}
|
|
|
|
if (config.css) {
|
|
const style = window.document.createElement('style');
|
|
style.innerHTML = config.css;
|
|
window.document.head.appendChild(style);
|
|
}
|
|
};
|
|
|
|
const createJs = (config: MPage) => {
|
|
if (Array.isArray(config.jsFiles)) {
|
|
config.jsFiles.map((file) => asyncLoadJs(file.url));
|
|
}
|
|
};
|
|
|
|
export default defineComponent({
|
|
props: {
|
|
config: {
|
|
type: Object as PropType<MPage>,
|
|
required: true,
|
|
},
|
|
model: {
|
|
type: Object,
|
|
default: () => ({}),
|
|
},
|
|
},
|
|
|
|
setup(props) {
|
|
const refresh = () => {
|
|
window.location.reload();
|
|
};
|
|
|
|
const { app } = useApp({
|
|
config: props.config,
|
|
methods: { refresh },
|
|
});
|
|
|
|
if (app?.jsEngine === 'browser') {
|
|
createCss(props.config);
|
|
createJs(props.config);
|
|
}
|
|
|
|
const containerComponent = useComponent({ componentType: 'container', app });
|
|
|
|
return {
|
|
containerComponent,
|
|
};
|
|
},
|
|
});
|
|
</script>
|