From ea83cd03bac5b19061ef8b66a2757ed69b2589f0 Mon Sep 17 00:00:00 2001 From: jingrow Date: Sat, 25 Oct 2025 02:16:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=89=88=E6=A1=86=E6=9E=B6=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E4=BD=BF=E7=94=A8backend=E6=96=87=E4=BB=B6=E5=A4=B9?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E5=8F=97=E5=BD=B1=E5=93=8D=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/features/flows/utils/nodeMetadata.js | 4 ++-- .../core/features/flows/utils/schemaLoader.js | 2 +- apps/jingrow/frontend/src/shared/api/nodes.ts | 1 - .../src/views/dev/CreatePagetypeTemplate.vue | 2 +- .../frontend/src/views/dev/InstalledApps.vue | 3 +-- .../jingrow/jingrow/api/local_app_installer.py | 14 +++++++------- apps/jingrow/jingrow/utils/app_installer.py | 18 +++++++++--------- dev.sh | 1 - 8 files changed, 21 insertions(+), 24 deletions(-) diff --git a/apps/jingrow/frontend/src/core/features/flows/utils/nodeMetadata.js b/apps/jingrow/frontend/src/core/features/flows/utils/nodeMetadata.js index da99e6e..3fc5eaf 100644 --- a/apps/jingrow/frontend/src/core/features/flows/utils/nodeMetadata.js +++ b/apps/jingrow/frontend/src/core/features/flows/utils/nodeMetadata.js @@ -20,8 +20,8 @@ function resolveComponent(componentType) { function discoverNodeMetadata() { // 使用 import.meta.glob 获取所有节点JSON文件 // 注意:Vite 要求以 './' 或 '/' 开头,别名在 glob 中不可用 - // 从当前文件路径 ../../../../../../../ 指向到项目根,再进入 backend/nodes 目录(core 比原 features 深一层) - const modulesNew = import.meta.glob('../../../../../../backend/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/nodes/**/*.json', { eager: true }) + // 从当前文件路径 ../../../../../../../ 指向到项目根,再进入 apps/jingrow/nodes 目录(core 比原 features 深一层) + const modulesNew = import.meta.glob('../../../../../../apps/jingrow/jingrow/ai/pagetype/local_ai_agent/nodes/**/*.json', { eager: true }) const metadataMap = {} diff --git a/apps/jingrow/frontend/src/core/features/flows/utils/schemaLoader.js b/apps/jingrow/frontend/src/core/features/flows/utils/schemaLoader.js index 268d0d4..065cfe8 100644 --- a/apps/jingrow/frontend/src/core/features/flows/utils/schemaLoader.js +++ b/apps/jingrow/frontend/src/core/features/flows/utils/schemaLoader.js @@ -4,7 +4,7 @@ * @returns {Promise} Schema配置对象 */ -const LOCAL_NODE_SCHEMAS_NEW = import.meta.glob('../../../../../../backend/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/nodes/*/*.json', { eager: true }); +const LOCAL_NODE_SCHEMAS_NEW = import.meta.glob('../../../../../../apps/jingrow/jingrow/ai/pagetype/local_ai_agent/nodes/*/*.json', { eager: true }); function loadLocalSchemaByConvention(nodeType) { try { diff --git a/apps/jingrow/frontend/src/shared/api/nodes.ts b/apps/jingrow/frontend/src/shared/api/nodes.ts index 327f6f4..2ebe1ba 100644 --- a/apps/jingrow/frontend/src/shared/api/nodes.ts +++ b/apps/jingrow/frontend/src/shared/api/nodes.ts @@ -119,7 +119,6 @@ export const getNodeList = async (page: number = 1, pageSize: number = 10): Prom } } -// 导出节点定义(写入 backend/nodes/{type}/{type}.json) export const exportNodeDefinition = async (payload: { metadata: any; schema: any }): Promise<{ success: boolean; path?: string }> => { try { const response = await axios.post( diff --git a/apps/jingrow/frontend/src/views/dev/CreatePagetypeTemplate.vue b/apps/jingrow/frontend/src/views/dev/CreatePagetypeTemplate.vue index 6efe89e..a62b4f8 100644 --- a/apps/jingrow/frontend/src/views/dev/CreatePagetypeTemplate.vue +++ b/apps/jingrow/frontend/src/views/dev/CreatePagetypeTemplate.vue @@ -64,7 +64,7 @@ const frontendPath = computed(() => ) const backendPath = computed(() => appName.value && slug.value !== '' - ? `backend/apps/${appName.value}/${appName.value}/${dotToSlash(moduleName.value)}/pagetype/${slug.value}/${slug.value}.py` + ? `${appName.value}/apps/${appName.value}/${appName.value}/${dotToSlash(moduleName.value)}/pagetype/${slug.value}/${slug.value}.py` : '' ) diff --git a/apps/jingrow/frontend/src/views/dev/InstalledApps.vue b/apps/jingrow/frontend/src/views/dev/InstalledApps.vue index ef0b01a..29dd63e 100644 --- a/apps/jingrow/frontend/src/views/dev/InstalledApps.vue +++ b/apps/jingrow/frontend/src/views/dev/InstalledApps.vue @@ -217,10 +217,9 @@ const uninstallApp = async (app: any) => { const getAppTypeText = (type: string) => { switch (type) { - case 'backend': return t('Backend Only') case 'frontend': return t('Frontend Only') case 'both': return t('Full Stack') - default: return t('Unknown') + default: return t('Backend Only') } } diff --git a/apps/jingrow/jingrow/api/local_app_installer.py b/apps/jingrow/jingrow/api/local_app_installer.py index f8c3cd3..b7e0d6e 100644 --- a/apps/jingrow/jingrow/api/local_app_installer.py +++ b/apps/jingrow/jingrow/api/local_app_installer.py @@ -115,7 +115,7 @@ async def get_local_apps(request: Request): app_info = { 'name': app_dir.name, 'path': str(app_dir), - 'type': 'both' if (app_dir / "frontend").exists() else 'backend', + 'type': 'both' if (app_dir / "frontend").exists() else app_dir.name, 'title': app_dir.name.replace('_', ' ').title(), 'description': '', 'publisher': '', @@ -142,7 +142,7 @@ async def get_local_apps(request: Request): local_apps.append({ 'name': app_dir.name, 'path': str(app_dir), - 'type': 'backend', + 'type': app_dir.name, 'title': app_dir.name.replace('_', ' ').title(), 'description': '', 'publisher': '', @@ -170,7 +170,7 @@ async def install_local_app(request: Request, app_name: str): current = Path(__file__).resolve() root = current.parents[4] # 调整路径层级 apps_dir = root / "apps" # 新的apps目录 - app_dir = backend_dir / app_name + app_dir = apps_dir / app_name if not app_dir.exists(): raise HTTPException(status_code=404, detail=f"App '{app_name}' not found") @@ -290,8 +290,8 @@ async def uninstall_app(request: Request, app_name: str): # 检查应用是否存在 backend_dir, frontend_dir = get_app_directories() - backend_app_dir = backend_dir / app_name - frontend_app_dir = frontend_dir / app_name + backend_app_dir = backend_dir / app_name / app_name + frontend_app_dir = frontend_dir / app_name / "frontend" if not backend_app_dir.exists() and not frontend_app_dir.exists(): raise HTTPException(status_code=404, detail=f"应用 {app_name} 不存在") @@ -339,8 +339,8 @@ async def get_app_info(request: Request, app_name: str): try: backend_dir, frontend_dir = get_app_directories() - backend_app_dir = backend_dir / app_name - frontend_app_dir = frontend_dir / app_name + backend_app_dir = backend_dir / app_name / app_name + frontend_app_dir = frontend_dir / app_name / "frontend" app_info = { 'name': app_name, diff --git a/apps/jingrow/jingrow/utils/app_installer.py b/apps/jingrow/jingrow/utils/app_installer.py index d0bafaa..7acab11 100644 --- a/apps/jingrow/jingrow/utils/app_installer.py +++ b/apps/jingrow/jingrow/utils/app_installer.py @@ -38,7 +38,7 @@ def get_app_directories(): apps_dir.mkdir(parents=True, exist_ok=True) - return apps_dir + return apps_dir, apps_dir @handle_errors @@ -103,7 +103,7 @@ def analyze_package(temp_dir: str) -> Dict[str, Any]: @handle_errors def install_files(temp_dir: str, app_name: str, package_info: Dict[str, Any], is_backend: bool) -> Dict[str, Any]: """安装文件到指定目录""" - apps_dir = get_app_directories() + apps_dir, _ = get_app_directories() app_dir = apps_dir / app_name # 创建应用目录结构 @@ -111,8 +111,8 @@ def install_files(temp_dir: str, app_name: str, package_info: Dict[str, Any], is shutil.rmtree(app_dir) app_dir.mkdir(parents=True, exist_ok=True) - # 创建backend和frontend子目录 - backend_dir = app_dir / "backend" + # 创建app_name和frontend子目录 + backend_dir = app_dir / app_name frontend_dir = app_dir / "frontend" backend_dir.mkdir(parents=True, exist_ok=True) frontend_dir.mkdir(parents=True, exist_ok=True) @@ -185,7 +185,7 @@ def cleanup_temp_dir(temp_dir: str): def is_app_installed(app_name: str) -> bool: """检查应用是否已安装""" - apps_dir = get_app_directories() + apps_dir, _ = get_app_directories() app_dir = apps_dir / app_name return app_dir.exists() @@ -193,7 +193,7 @@ def is_app_installed(app_name: str) -> bool: def get_installed_apps() -> List[Dict[str, Any]]: """获取已安装的应用列表""" apps = [] - apps_dir = get_app_directories() + apps_dir, _ = get_app_directories() # 扫描apps目录 if apps_dir.exists(): @@ -206,14 +206,14 @@ def get_installed_apps() -> List[Dict[str, Any]]: 'exists': True } - # 检查是否有backend和frontend - backend_dir = app_dir / "backend" + # 检查是否有app_name和frontend + backend_dir = app_dir / app_dir.name frontend_dir = app_dir / "frontend" if backend_dir.exists() and frontend_dir.exists(): app_info['type'] = 'both' elif backend_dir.exists(): - app_info['type'] = 'backend' + app_info['type'] = app_dir.name elif frontend_dir.exists(): app_info['type'] = 'frontend' diff --git a/dev.sh b/dev.sh index 7062889..8c390cc 100755 --- a/dev.sh +++ b/dev.sh @@ -1,6 +1,5 @@ #!/bin/bash # Jingrow 统一开发脚本 -# 使用方法: ./dev.sh [start|stop|restart|frontend|backend] set -e