diff --git a/apps/jingrow/frontend/src/app/router/index.ts b/apps/jingrow/frontend/src/app/router/index.ts index 3d43beb..7e7eb04 100644 --- a/apps/jingrow/frontend/src/app/router/index.ts +++ b/apps/jingrow/frontend/src/app/router/index.ts @@ -140,6 +140,11 @@ const router = createRouter({ name: 'NodeMarketplace', component: () => import('../../views/dev/NodeMarketplace.vue') }, + { + path: 'node-marketplace/:name', + name: 'NodeDetail', + component: () => import('../../views/dev/NodeDetail.vue') + }, { path: 'app-marketplace/:name', name: 'AppDetail', diff --git a/apps/jingrow/frontend/src/views/dev/NodeDetail.vue b/apps/jingrow/frontend/src/views/dev/NodeDetail.vue new file mode 100644 index 0000000..608c36f --- /dev/null +++ b/apps/jingrow/frontend/src/views/dev/NodeDetail.vue @@ -0,0 +1,626 @@ + + + + + + diff --git a/apps/jingrow/frontend/src/views/dev/NodeMarketplace.vue b/apps/jingrow/frontend/src/views/dev/NodeMarketplace.vue index 3b9175d..5162a64 100644 --- a/apps/jingrow/frontend/src/views/dev/NodeMarketplace.vue +++ b/apps/jingrow/frontend/src/views/dev/NodeMarketplace.vue @@ -233,8 +233,11 @@ function handlePageSizeChange(newPageSize: number) { } function viewNodeDetail(node: any) { - // 跳转到节点详情页面 - router.push(`/node-marketplace/${node.name}`) + // 跳转到节点详情页面,传递返回路径 + router.push({ + path: `/node-marketplace/${node.name}`, + query: { returnTo: '/node-marketplace' } + }) } async function installNode(node: any) { diff --git a/apps/jingrow/jingrow/api/node_management.py b/apps/jingrow/jingrow/api/node_management.py index 03dafe1..0a7d8ad 100644 --- a/apps/jingrow/jingrow/api/node_management.py +++ b/apps/jingrow/jingrow/api/node_management.py @@ -266,6 +266,25 @@ async def get_node_marketplace( raise HTTPException(status_code=500, detail=f"获取节点市场数据失败: {str(e)}") +@router.get("/jingrow/node-marketplace/{name}") +async def get_node_detail(name: str): + """获取节点详情""" + try: + url = f"{get_jingrow_cloud_url()}/api/action/jcloud.api.jlocal.get_local_node" + params = {"name": name} + + headers = get_jingrow_cloud_api_headers() + response = requests.get(url, params=params, headers=headers, timeout=20) + + if response.status_code == 200: + data = response.json() + return data.get('message') + else: + raise HTTPException(status_code=404, detail="节点不存在") + except Exception as e: + raise HTTPException(status_code=500, detail=f"获取节点详情失败: {str(e)}") + + @router.get("/jingrow/check-node/{node_type}") async def check_node_exists(node_type: str): """检查节点是否已安装"""