卸载扩展包时同时卸载package包含的本地模块
This commit is contained in:
parent
196c8ecc7c
commit
7f648df653
@ -110,16 +110,12 @@ const uninstallPackage = async (packageName: string) => {
|
||||
try {
|
||||
uninstalling.value = true
|
||||
|
||||
const response = await axios.post('/api/action/jingrow.core.pagetype.package.package.uninstall_package', {
|
||||
package_name: packageName
|
||||
}, {
|
||||
const response = await axios.post(`/jingrow/uninstall-extension/${packageName}`, {}, {
|
||||
headers: get_session_api_headers()
|
||||
})
|
||||
|
||||
if (response.data.message.status === 'success') {
|
||||
if (response.data.success) {
|
||||
message.success(props.context.t("Package '{0}' uninstalled successfully").replace('{0}', packageName))
|
||||
|
||||
// 卸载成功后跳转到Package列表页
|
||||
props.context.router.push('/app/package')
|
||||
} else {
|
||||
message.error(props.context.t("Failed to uninstall package"))
|
||||
|
||||
@ -441,6 +441,76 @@ async def get_installed_apps(request: Request):
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.post("/jingrow/uninstall-extension/{package_name}")
|
||||
async def uninstall_extension(request: Request, package_name: str):
|
||||
"""卸载扩展包"""
|
||||
try:
|
||||
apps_dir, _ = get_app_directories()
|
||||
jingrow_backend_dir = apps_dir / "jingrow" / "jingrow"
|
||||
|
||||
if not jingrow_backend_dir.exists():
|
||||
return {'success': False, 'error': '找不到 jingrow 应用目录'}
|
||||
|
||||
modules = []
|
||||
try:
|
||||
api_url = f"{Config.jingrow_server_url}/api/action/jingrow.core.pagetype.package.package.get_package_dependencies"
|
||||
response = requests.post(
|
||||
api_url,
|
||||
json={'package_name': package_name},
|
||||
headers=get_jingrow_api_headers(),
|
||||
timeout=60
|
||||
)
|
||||
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
if result.get('message', {}).get('status') == 'success':
|
||||
modules = result['message'].get('modules', [])
|
||||
except Exception as e:
|
||||
print(f"[DEBUG] Failed to get modules: {str(e)}")
|
||||
|
||||
print(f"[DEBUG] Package: {package_name}")
|
||||
print(f"[DEBUG] Modules: {modules}")
|
||||
|
||||
try:
|
||||
uninstall_url = f"{Config.jingrow_server_url}/api/action/jingrow.core.pagetype.package.package.uninstall_package"
|
||||
uninstall_response = requests.post(
|
||||
uninstall_url,
|
||||
json={'package_name': package_name},
|
||||
headers=get_jingrow_api_headers(),
|
||||
timeout=60
|
||||
)
|
||||
print(f"[DEBUG] Uninstall database status: {uninstall_response.status_code}")
|
||||
except Exception as e:
|
||||
print(f"[DEBUG] Failed to uninstall from database: {str(e)}")
|
||||
|
||||
# 删除本地模块目录
|
||||
removed_count = 0
|
||||
removed_dirs = []
|
||||
for module_name in modules:
|
||||
module_dir_name = module_name.lower().replace(" ", "_").replace("-", "_")
|
||||
module_dir = jingrow_backend_dir / module_dir_name
|
||||
|
||||
print(f"[DEBUG] Module: {module_name} -> Dir: {module_dir_name}")
|
||||
print(f"[DEBUG] Full path: {module_dir}, exists: {module_dir.exists()}")
|
||||
|
||||
if module_dir.exists():
|
||||
shutil.rmtree(module_dir)
|
||||
removed_count += 1
|
||||
removed_dirs.append(module_dir_name)
|
||||
print(f"[DEBUG] Removed: {module_dir_name}")
|
||||
|
||||
print(f"[DEBUG] Total removed: {removed_count}, dirs: {removed_dirs}")
|
||||
|
||||
return {
|
||||
'success': True,
|
||||
'message': f'扩展包模块卸载成功,删除了 {removed_count} 个目录',
|
||||
'removed_count': removed_count
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.post("/jingrow/uninstall/{app_name}")
|
||||
async def uninstall_app(request: Request, app_name: str):
|
||||
"""卸载应用 - 直接删除整个app目录"""
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user