mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-09-21 22:39:58 +08:00
94 lines
2.5 KiB
Vue
94 lines
2.5 KiB
Vue
<template>
|
|
<div v-if="node" class="magic-editor-content-menu">
|
|
<div
|
|
v-if="node.items"
|
|
class="magic-editor-content-menu-item"
|
|
@mouseenter="setSubVisitable(true)"
|
|
@mouseleave="setSubVisitable(false)"
|
|
>
|
|
新增
|
|
</div>
|
|
<div v-if="node.type !== 'app'" class="magic-editor-content-menu-item" @click="() => copy(node)">复制</div>
|
|
<div
|
|
v-if="node.type !== 'app' && node.type !== 'page'"
|
|
class="magic-editor-content-menu-item"
|
|
@click="() => remove()"
|
|
>
|
|
删除
|
|
</div>
|
|
<div class="subMenu" v-show="subVisible" @mouseenter="setSubVisitable(true)" @mouseleave="setSubVisitable(false)">
|
|
<el-scrollbar>
|
|
<template v-if="node.type === 'tabs'">
|
|
<div
|
|
class="magic-editor-content-menu-item"
|
|
@click="
|
|
() =>
|
|
append({
|
|
type: 'tab-pane',
|
|
})
|
|
"
|
|
>
|
|
标签
|
|
</div>
|
|
</template>
|
|
<template v-else-if="node.items">
|
|
<div v-for="list in componentGroupList" :key="list.title">
|
|
<template v-for="item in list.items">
|
|
<div class="magic-editor-content-menu-item" v-if="item" :key="item.type" @click="() => append(item)">
|
|
{{ item.text }}
|
|
</div>
|
|
</template>
|
|
<div class="separation"></div>
|
|
</div>
|
|
</template>
|
|
</el-scrollbar>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { computed, defineComponent, inject, ref } from 'vue';
|
|
|
|
import type { MNode } from '@tmagic/schema';
|
|
|
|
import type { AddMNode, Services } from '@editor/type';
|
|
|
|
export default defineComponent({
|
|
name: 'magic-editor-content-menu',
|
|
|
|
setup() {
|
|
const services = inject<Services>('services');
|
|
const subVisible = ref(false);
|
|
const node = computed(() => services?.editorService.get('node'));
|
|
|
|
return {
|
|
subVisible,
|
|
|
|
node,
|
|
|
|
componentGroupList: computed(() => services?.componentListService.getList()),
|
|
|
|
append(config: AddMNode) {
|
|
services?.editorService.add({
|
|
name: config.text,
|
|
type: config.type,
|
|
...(config.data || {}),
|
|
});
|
|
},
|
|
|
|
remove() {
|
|
node.value && services?.editorService.remove(node.value);
|
|
},
|
|
|
|
copy(node?: MNode) {
|
|
node && services?.editorService.copy(node);
|
|
},
|
|
|
|
setSubVisitable(v: boolean) {
|
|
subVisible.value = v;
|
|
},
|
|
};
|
|
},
|
|
});
|
|
</script>
|