diff --git a/backend/routes/download.js b/backend/routes/download.js index 9597b1b..b9df722 100644 --- a/backend/routes/download.js +++ b/backend/routes/download.js @@ -1262,6 +1262,14 @@ router.put('/registry/config', async (req, res) => { // 更新配置 const updatedConfig = await downloadService.cacheConfigManager.updateConfig(updateData); + // 如果更新了存储模式,需要重新加载存储模式配置 + if (storageMode) { + const reloadResult = await downloadService.downloadRegistry.reloadStorageMode(); + if (!reloadResult.success) { + logger.warn('重新加载存储模式失败:', reloadResult.error); + } + } + res.json({ success: true, data: { diff --git a/backend/services/download-registry.js b/backend/services/download-registry.js index 63d1e59..63504f1 100644 --- a/backend/services/download-registry.js +++ b/backend/services/download-registry.js @@ -73,6 +73,33 @@ class DownloadRegistry { } } + /** + * 重新加载存储模式配置(用于切换存储模式时) + */ + async reloadStorageMode() { + try { + await this.loadStorageMode(); + + // 根据新的存储模式重新初始化相应的存储 + if (this.storageMode === 'database') { + if (!this.registryDatabase && this.databaseManager) { + await this.initDatabaseStorage(); + } + } else { + // JSON模式下确保注册表已加载 + if (!this.loaded) { + await this.initJsonStorage(); + } + } + + logger.info(`存储模式已切换到: ${this.storageMode}`); + return { success: true, storageMode: this.storageMode }; + } catch (error) { + logger.error('重新加载存储模式失败:', error); + return { success: false, error: error.message }; + } + } + /** * 初始化数据库存储 */ diff --git a/ui/src/components/common/RegistryWidget.vue b/ui/src/components/common/RegistryWidget.vue index b8f8a02..8897904 100644 --- a/ui/src/components/common/RegistryWidget.vue +++ b/ui/src/components/common/RegistryWidget.vue @@ -110,6 +110,40 @@ 当前模式: {{ storageMode === 'json' ? 'JSON文件存储' : 'MySQL数据库存储' }} + + +
+
切换方式选择:
+
+
+ +
+ +
+ +
+
+