40 lines
1.2 KiB
Vue
40 lines
1.2 KiB
Vue
<script setup lang="ts">
|
|
// contextMenu:右键节点或空白处弹出菜单;菜单点击通过 contextMenuClick 回传
|
|
import { G3Message, G3Tree, type TreeContextMenuItem, type TreeNodeData } from '@g3soft/ui'
|
|
import { Copy, Pencil, Trash2 } from '@lucide/vue'
|
|
|
|
const treeData: TreeNodeData[] = [
|
|
{ key: 'a', title: '文档 A' },
|
|
{ key: 'b', title: '文档 B' },
|
|
]
|
|
|
|
// 用函数形式:可以按节点动态生成菜单(node 为 null 表示在空白处右键)
|
|
function contextMenu(node: TreeNodeData | null): TreeContextMenuItem[] {
|
|
if (!node) {
|
|
return [{ key: 'create', label: '新建文档' }]
|
|
}
|
|
return [
|
|
{ key: 'rename', label: '重命名', icon: Pencil },
|
|
{ key: 'copy', label: '复制', icon: Copy },
|
|
{ divider: true },
|
|
{ key: 'delete', label: '删除', icon: Trash2, danger: true },
|
|
]
|
|
}
|
|
|
|
function onMenuClick(info: { item: TreeContextMenuItem; node: TreeNodeData | null }) {
|
|
G3Message.info(`${info.node ? info.node.title : '空白处'} → ${info.item.label}`)
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<div style="max-width: 320px">
|
|
<G3Tree
|
|
:tree-data="treeData"
|
|
:context-menu="contextMenu"
|
|
default-expand-all
|
|
block-node
|
|
@context-menu-click="onMenuClick"
|
|
/>
|
|
</div>
|
|
</template>
|