mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-06-22 09:49:28 +08:00
87 lines
2.1 KiB
Vue
87 lines
2.1 KiB
Vue
<template>
|
|
<div class="m-editor">
|
|
<slot name="nav" class="m-editor-nav-menu"></slot>
|
|
|
|
<magic-code-editor
|
|
v-if="showSrc"
|
|
class="m-editor-content"
|
|
:init-values="root"
|
|
:options="codeOptions"
|
|
@save="saveCode"
|
|
></magic-code-editor>
|
|
|
|
<div class="m-editor-content" v-else>
|
|
<div class="m-editor-framework-left" :style="`width: ${columnWidth?.left}px`">
|
|
<slot name="sidebar"></slot>
|
|
</div>
|
|
|
|
<resizer type="left"></resizer>
|
|
|
|
<template v-if="pageLength > 0">
|
|
<div class="m-editor-framework-center" :style="`width: ${columnWidth?.center}px`">
|
|
<slot name="workspace"></slot>
|
|
</div>
|
|
|
|
<resizer type="right"></resizer>
|
|
|
|
<div class="m-editor-framework-right" :style="`width: ${columnWidth?.right}px`">
|
|
<el-scrollbar>
|
|
<slot name="props-panel"></slot>
|
|
</el-scrollbar>
|
|
</div>
|
|
</template>
|
|
|
|
<slot v-else name="empty">
|
|
<add-page-box></add-page-box>
|
|
</slot>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { computed, defineComponent, inject } from 'vue';
|
|
|
|
import type { MApp } from '@tmagic/schema';
|
|
|
|
import { GetColumnWidth, Services } from '@editor/type';
|
|
|
|
import AddPageBox from './AddPageBox.vue';
|
|
import Resizer from './Resizer.vue';
|
|
|
|
export default defineComponent({
|
|
components: {
|
|
AddPageBox,
|
|
Resizer,
|
|
},
|
|
|
|
props: {
|
|
codeOptions: {
|
|
type: Object,
|
|
default: () => ({}),
|
|
},
|
|
},
|
|
|
|
setup() {
|
|
const { editorService, uiService } = inject<Services>('services') || {};
|
|
|
|
const root = computed(() => editorService?.get<MApp>('root'));
|
|
|
|
return {
|
|
root,
|
|
pageLength: computed(() => editorService?.get<number>('pageLength') || 0),
|
|
showSrc: computed(() => uiService?.get<boolean>('showSrc')),
|
|
columnWidth: computed(() => uiService?.get<GetColumnWidth>('columnWidth')),
|
|
|
|
saveCode(value: string) {
|
|
try {
|
|
// eslint-disable-next-line no-eval
|
|
editorService?.set('root', eval(value));
|
|
} catch (e: any) {
|
|
console.error(e);
|
|
}
|
|
},
|
|
};
|
|
},
|
|
});
|
|
</script>
|