From 953a166f1cd52a658c7d08cca1ca68e0d8df98de Mon Sep 17 00:00:00 2001 From: jingrow Date: Mon, 3 Nov 2025 01:41:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=8A=82=E7=82=B9=E5=B8=82?= =?UTF-8?q?=E5=9C=BA=E8=8A=82=E7=82=B9=E8=AF=A6=E6=83=85=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/jingrow/frontend/src/app/router/index.ts | 5 + .../frontend/src/views/dev/NodeDetail.vue | 626 ++++++++++++++++++ .../src/views/dev/NodeMarketplace.vue | 7 +- apps/jingrow/jingrow/api/node_management.py | 19 + 4 files changed, 655 insertions(+), 2 deletions(-) create mode 100644 apps/jingrow/frontend/src/views/dev/NodeDetail.vue 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): """检查节点是否已安装"""