Explorar el Código

插件支持右键菜单

mxd hace 3 años
padre
commit
ce8e9f473c

+ 73 - 64
src/components/panel/main/magic-data-resource.vue

@@ -113,77 +113,86 @@ const deleteNode = item => {
 	}
 }
 const onContextMenu = (item, event) => {
-	if(!item.id){
-		return
-	}
-	const menus = [{
-		label: $i('message.update'),
-		icon: 'update',
-		divided: true,
-		onClick: () => {
-			loading.value = true
-			dataResourceDialogTitle.value = $i('message.updateTips', props.title)
-			saveButtonText.value = $i('message.update')
-			dataResourceDialogVisible.value = true
-			bus.status('message.getDetail', `${props.title}「${getFullPath(item)}」`)
-			request.sendGet(`/resource/file/${item.id}`).success(data => dataResourceObj.value = data).end(() => {
-				loading.value = false
+	const menus = []
+	if(item.id){
+		[{
+			label: $i('message.update'),
+			icon: 'update',
+			divided: true,
+			onClick: () => {
+				loading.value = true
+				dataResourceDialogTitle.value = $i('message.updateTips', props.title)
+				saveButtonText.value = $i('message.update')
+				dataResourceDialogVisible.value = true
+				bus.status('message.getDetail', `${props.title}「${getFullPath(item)}」`)
+				request.sendGet(`/resource/file/${item.id}`).success(data => dataResourceObj.value = data).end(() => {
+					loading.value = false
+				})
+			}
+		},{
+			label: $i('resource.contextmenu.delete'),
+			icon: 'delete',
+			onClick: () => {
+				const msg = `${props.title}「${getFullPath(item)}」`
+				proxy.$confirm($i('message.deleteTips', props.title), $i('message.deleteConfirm', msg), () => {
+					request.send('/resource/delete', { id: item.id }).success(ret => {
+						bus.status(ret ? 'message.deleteSuccess': 'message.deleteFailed', ret, msg)
+						if(!ret) {
+							proxy.$alert(ret ? 'message.deleteSuccess': 'message.deleteFailed', msg)
+						}else{
+							deleteNode(item)
+						}
+					})
+				})
+			}
+		}, {
+			label: $i('message.copy'),
+			icon: 'copy',
+			divided: true,
+			onClick: () => {
+				request.send(`/resource/file/${item.id}`).success(res => {
+					res.id = undefined
+					res.name = res.name + `(${$i('message.copy')})`
+					res.key = res.key + '_copy'
+					doSaveObj(res, 'datasource.copy',`${props.title}「${getFullPath(res)}」`)
+				})
+			}
+		}].forEach(m => menus.push(m))
+		if(item.lock === constants.LOCKED){
+			menus.push({
+				label: $i('resource.contextmenu.unlock'),
+				icon: 'unlock',
+				onClick: () => request.sendPost('/resource/unlock', { id: item.id}).success(ret => {
+					bus.status(ret ? 'message.unlockSuccess': 'message.unlockFailed', ret, `${props.title}「${getFullPath(item)}」`)
+					if(ret) {
+						item.lock = constants.UNLOCK
+					}
+
+				})
 			})
-		}
-	},{
-		label: $i('resource.contextmenu.delete'),
-		icon: 'delete',
-		onClick: () => {
-			const msg = `${props.title}「${getFullPath(item)}」`
-			proxy.$confirm($i('message.deleteTips', props.title), $i('message.deleteConfirm', msg), () => {
-				request.send('/resource/delete', { id: item.id }).success(ret => {
-					bus.status(ret ? 'message.deleteSuccess': 'message.deleteFailed', ret, msg)
-					if(!ret) {
-						proxy.$alert(ret ? 'message.deleteSuccess': 'message.deleteFailed', msg)
-					}else{
-						deleteNode(item)
+		} else {
+			menus.push({
+				label: $i('resource.contextmenu.lock'),
+				icon: 'lock',
+				onClick: () => request.sendPost('/resource/lock', { id: item.id}).success(ret => {
+					bus.status(ret ? 'message.lockSuccess': 'message.lockFailed', ret, `${props.title}「${getFullPath(item)}」`)
+					if(ret) {
+						item.lock = constants.LOCKED
 					}
 				})
 			})
 		}
-	}, {
-		label: $i('message.copy'),
-		icon: 'copy',
-		divided: true,
-		onClick: () => {
-			request.send(`/resource/file/${item.id}`).success(res => {
-				res.id = undefined
-				res.name = res.name + `(${$i('message.copy')})`
-				res.key = res.key + '_copy'
-				doSaveObj(res, 'datasource.copy',`${props.title}「${getFullPath(res)}」`)
+	}
+	constants.PLUGINS.forEach(it => {
+		if(it.contextmenu && typeof it.contextmenu === 'function'){
+			const pMenus = it.contextmenu({
+				...item,
+				menuType: 'datasource'
 			})
+			pMenus && pMenus.length && pMenus.forEach(m => menus.push(m))
 		}
-	}]
-	if(item.lock === constants.LOCKED){
-		menus.push({
-			label: $i('resource.contextmenu.unlock'),
-			icon: 'unlock',
-			onClick: () => request.sendPost('/resource/unlock', { id: item.id}).success(ret => {
-				bus.status(ret ? 'message.unlockSuccess': 'message.unlockFailed', ret, `${props.title}「${getFullPath(item)}」`)
-				if(ret) {
-					item.lock = constants.UNLOCK
-				}
-
-			})
-		})
-	} else {
-		menus.push({
-			label: $i('resource.contextmenu.lock'),
-			icon: 'lock',
-			onClick: () => request.sendPost('/resource/lock', { id: item.id}).success(ret => {
-				bus.status(ret ? 'message.lockSuccess': 'message.lockFailed', ret, `${props.title}「${getFullPath(item)}」`)
-				if(ret) {
-					item.lock = constants.LOCKED
-				}
-			})
-		})
-	}
-	proxy.$contextmenu({ menus, event})
+	})
+	menus.length && proxy.$contextmenu({ menus, event})
 }
 </script>
 <style scoped>

+ 10 - 1
src/components/panel/main/magic-resource.vue

@@ -495,7 +495,16 @@ const onContextMenu = (item, event) => {
 				}
 			}])
 		}
-		 proxy.$contextmenu({ menus, event })
+		constants.PLUGINS.forEach(it => {
+			if(it.contextmenu && typeof it.contextmenu === 'function'){
+				const pMenus = it.contextmenu({
+					...item,
+					menuType: 'resource'
+				})
+				pMenus && pMenus.length && pMenus.forEach(m => menus.push(m))
+			}
+		})
+		proxy.$contextmenu({ menus, event })
 	}
 }
 

+ 9 - 0
src/components/panel/main/magic-script-editor.vue

@@ -162,6 +162,15 @@ const onContextMenu = (event, item, index) => {
 			[...openedScripts].forEach(it => onClose(it))
 		}
 	}]
+	constants.PLUGINS.forEach(it => {
+		if(it.contextmenu && typeof it.contextmenu === 'function'){
+			const pMenus = it.contextmenu({
+				...item,
+				menuType: 'editorTab'
+			})
+			pMenus && pMenus.length && pMenus.forEach(m => menus.push(m))
+		}
+	})
 	proxy.$contextmenu({ menus, event})
 }
 // 判断是否有变动