diff --git a/apps/jingrow/frontend/src/views/pagetype/package/package_toolbar.vue b/apps/jingrow/frontend/src/views/pagetype/package/package_toolbar.vue index 041fe69..90c35c9 100644 --- a/apps/jingrow/frontend/src/views/pagetype/package/package_toolbar.vue +++ b/apps/jingrow/frontend/src/views/pagetype/package/package_toolbar.vue @@ -136,7 +136,7 @@ const showResources = async () => { try { const packageName = props.context.record.name - const response = await axios.post('/api/action/jingrow.core.pagetype.package.package.get_package_dependencies', { + const response = await axios.post('/jingrow/get-package-dependencies', { package_name: packageName }, { headers: get_session_api_headers() diff --git a/apps/jingrow/jingrow/api/dev.py b/apps/jingrow/jingrow/api/dev.py index 72348d4..4b41fc7 100644 --- a/apps/jingrow/jingrow/api/dev.py +++ b/apps/jingrow/jingrow/api/dev.py @@ -2,6 +2,7 @@ from fastapi import APIRouter, HTTPException from typing import Dict, Any from pathlib import Path import re +from jingrow.utils.jingrow_api import get_package_dependencies router = APIRouter() @@ -281,3 +282,36 @@ dev = [ raise HTTPException(status_code=400, detail=str(e)) +@router.post("/jingrow/get-package-dependencies") +async def get_package_dependencies_api(payload: Dict[str, Any]): + """获取Package的依赖信息""" + try: + package_name = payload.get("package_name") + if not package_name: + raise ValueError("package_name is required") + + # 调用 jingrow_api.get_package_dependencies + result = get_package_dependencies(package_name) + + # 转换返回格式以匹配前端期望的格式 + if result.get('success'): + return { + "message": { + "status": "success", + "package_name": result.get('package_name'), + "modules": result.get('modules', []), + "pagetypes": result.get('pagetypes', []), + "releases": result.get('releases', []), + "summary": result.get('summary', {}) + } + } + else: + return { + "message": { + "status": "error", + "message": result.get('error', '获取Package依赖信息失败') + } + } + + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) \ No newline at end of file diff --git a/apps/jingrow/jingrow/utils/jingrow_api.py b/apps/jingrow/jingrow/utils/jingrow_api.py index b5ed81e..58f74d7 100644 --- a/apps/jingrow/jingrow/utils/jingrow_api.py +++ b/apps/jingrow/jingrow/utils/jingrow_api.py @@ -479,6 +479,39 @@ def get_pagetype_module_app(pagetype: str): except Exception as e: return {'success': False, 'error': f"获取模块信息异常: {str(e)}"} +def get_package_dependencies(package_name: str): + """ + 获取指定Package的依赖信息(模块、PageType、Release等)。 + """ + try: + api_url = f"{Config.jingrow_server_url}/api/action/jingrow.core.pagetype.package.package.get_package_dependencies" + headers = get_jingrow_api_headers() + if not headers: + return {'success': False, 'error': 'JINGROW_API_KEY 或 JINGROW_API_SECRET 未配置'} + payload = {"package_name": package_name} + response = requests.post(api_url, json=payload, headers=headers, timeout=30) + if response.status_code == 200: + data = response.json() + # 处理服务端 action 的包裹格式 + if isinstance(data, dict) and 'message' in data: + data = data['message'] + # 检查返回格式 + if isinstance(data, dict) and data.get('status') == 'success': + return { + 'success': True, + 'package_name': data.get('package_name'), + 'modules': data.get('modules', []), + 'pagetypes': data.get('pagetypes', []), + 'releases': data.get('releases', []), + 'summary': data.get('summary', {}) + } + elif isinstance(data, dict) and data.get('status') == 'error': + return {'success': False, 'error': data.get('message', '获取Package依赖信息失败')} + return {'success': False, 'error': 'API响应格式错误'} + return {'success': False, 'error': f"HTTP {response.status_code}: {response.text}"} + except Exception as e: + return {'success': False, 'error': f"获取Package依赖信息异常: {str(e)}"} + def get_record_id(pagetype: str, filters: list = None, field: str = None, value: str = None, site: str = None): """ 按条件获取单条记录的 name 值。