From 3f2ba87706626dc3062e678c429ab1edd496b9de Mon Sep 17 00:00:00 2001 From: weifegn <1982392655@qq.com> Date: Thu, 21 Nov 2024 16:28:20 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=8A=A5=E9=94=99=E5=BC=82=E5=B8=B8=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/index.ts | 1 + src/views/FileTree/components/FileTree.vue | 39 ++++++++++------------ 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/utils/index.ts b/src/utils/index.ts index 1eb264b..d25e50a 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -152,6 +152,7 @@ export function setTheme(name: "dark" | "light") { * 解析文件后缀 */ function getFileSuffix(filename: string) { + if (!filename) return ""; return filename.split(".").pop()!; } diff --git a/src/views/FileTree/components/FileTree.vue b/src/views/FileTree/components/FileTree.vue index 5109eac..e8bed50 100644 --- a/src/views/FileTree/components/FileTree.vue +++ b/src/views/FileTree/components/FileTree.vue @@ -13,30 +13,28 @@ > - - - @@ -63,7 +52,6 @@ import { Utils } from "../../../utils"; import { reactive, ref, watch } from "vue"; import FolderUpload from "./FolderUpload.vue"; -import { contextmenuList } from "../config/index"; import { ElMessage, type ElTree } from "element-plus"; import { nextTick, onBeforeUnmount, onMounted } from "vue"; import { IFileTreeItem } from "../../../interface/FileTree"; @@ -72,6 +60,19 @@ import { useFileTreeStore } from "../../../pinia/useFileTreeStore"; import { FileSystemTreeMock } from "../../../mock/FileSystemTreeMock"; import { TreeNodeData } from "element-plus/es/components/tree/src/tree.type.mjs"; import { useEditorStore } from "../../../pinia/useEditorStore"; +import { Popover } from "../../../class/Popover"; + +/** + * 定义右键菜单 + */ +const contextmenu = ref( | null>null); +const menuList = [ + { callback: openinterminalHandle, title: "在集成终端打开", shortcut: "" }, + { callback: opentimelineHandle, title: "打开时间线", shortcut: "Ctrl + T" }, + { callback: copypathHandle, title: "复制相对路径", shortcut: "" }, + { callback: renameHandle, title: "重命名", shortcut: "F2" }, + { callback: deleteHandle, title: "删除", shortcut: "Delete" }, +]; // 解析 pinia store const fileTreeStore = useFileTreeStore(); @@ -126,17 +127,8 @@ function nodeClickHandle(data: IFileTreeItem) { function nodeContextmenuHandle(e: PointerEvent, data: IFileTreeItem) { e.stopPropagation(); setCurrentNodeID(data.id); // 高亮当前节点 -} - -/** - * contextmenuItemClick 右键菜单菜单项事件响应 - */ -async function contextmenuItemClick(command: string) { - if (command === "openinterminal") openinterminalHandle(); - if (command === "opentimeline") opentimelineHandle(); - if (command === "copypath") copypathHandle(); - if (command === "rename") renameHandle(); - if (command === "delete") deleteHandle(); + const { pageX, pageY } = e; + contextmenu.value?.show({ x: pageX, y: pageY }); } /** @@ -278,7 +270,6 @@ async function initDefaultProject() { function importFileHandle() { // 导入文件 - 创建 input const dataMap = getDataMap(); - console.log("==> ", dataMap); const input = document.createElement("input"); input.type = "file"; input.multiple = true; // 多选 @@ -525,6 +516,9 @@ function setCurrentNodeID(id: string | undefined) { onMounted(() => { window.addEventListener("keydown", keydownHandle); + + // 初始化右键菜单 + contextmenu.value = new Popover(menuList); }); onBeforeUnmount(() => { @@ -570,20 +564,6 @@ defineExpose({ .el-tree-node__content { border-radius: 4px; } -.file-tree-contextmenu-item { - margin: 8px 0; - padding: 4px 8px; - display: flex; - justify-content: space-between; - cursor: pointer; -} -.file-tree-contextmenu-item:hover { - background-color: #ecf5ff; -} -.file-tree-contextmenu-item .shortcut { - font-size: 12px; - color: #93a2b3; -} :deep().is-leaf { display: none; } diff --git a/src/views/FileTree/components/TopMenu.vue b/src/views/FileTree/components/TopMenu.vue index 5b7a593..6a6e4f9 100644 --- a/src/views/FileTree/components/TopMenu.vue +++ b/src/views/FileTree/components/TopMenu.vue @@ -3,39 +3,58 @@ - - - - -