diff --git a/frontend/src/views/Scan.vue b/frontend/src/views/Scan.vue index 0264d20..c42530c 100644 --- a/frontend/src/views/Scan.vue +++ b/frontend/src/views/Scan.vue @@ -466,8 +466,8 @@ export default { this.dirLoading = false } }, - // 点"选中此目录":把选中的目录填到对应的输入框里 - confirmDir() { + // 点"选中此目录":把选中的目录填到对应的输入框里,并保存配置 + async confirmDir() { if (!this.fsData.current) return if (this.pickerTarget === 'dest') { this.destDir = this.fsData.current @@ -475,6 +475,17 @@ export default { this.scanDir = this.fsData.current } this.dirPickerVisible = false + + // 保存目录配置到数据库 + try { + await request.put('/api/config/scan-dir', { + scanDir: this.scanDir.trim(), + destDir: this.destDir.trim() + }) + } catch (e) { + // 保存失败不影响使用,只是下次进来不会自动回填 + console.warn('保存目录配置失败', e) + } }, // ==================== 小工具 ==================== diff --git a/internal/api/config_controller.go b/internal/api/config_controller.go index 45ec747..2309f43 100644 --- a/internal/api/config_controller.go +++ b/internal/api/config_controller.go @@ -15,6 +15,8 @@ const ( ConfigKeyNsfwType = "nsfw.type" // 检测类型:"" / "human" / "anime" ConfigKeyNsfwThreshold = "nsfw.threshold" // 人类检测阈值 ConfigKeyAnimeNsfwThreshold = "anime.threshold" // 二次元检测阈值 + ConfigKeyScanDir = "scan.scanDir" // 扫描目录 + ConfigKeyDestDir = "scan.destDir" // 存放目录 ) // ConfigController 配置相关接口。 @@ -104,3 +106,32 @@ func (c *ConfigController) UpdateNsfwConfig(ctx *gin.Context) { Success(ctx, nil) } + +// UpdateScanDirReq 更新扫描目录配置请求。 +type UpdateScanDirReq struct { + ScanDir string `json:"scanDir"` // 扫描目录 + DestDir string `json:"destDir"` // 存放目录 +} + +// UpdateScanDir 处理 PUT /api/config/scan-dir:更新扫描目录配置。 +func (c *ConfigController) UpdateScanDir(ctx *gin.Context) { + var req UpdateScanDirReq + if err := ctx.ShouldBindJSON(&req); err != nil { + Error(ctx, http.StatusBadRequest, "请求参数错误:"+err.Error()) + return + } + + // 保存扫描目录 + if err := c.store.SaveConfig(ConfigKeyScanDir, req.ScanDir); err != nil { + Error(ctx, http.StatusInternalServerError, "保存扫描目录失败:"+err.Error()) + return + } + + // 保存存放目录 + if err := c.store.SaveConfig(ConfigKeyDestDir, req.DestDir); err != nil { + Error(ctx, http.StatusInternalServerError, "保存存放目录失败:"+err.Error()) + return + } + + Success(ctx, nil) +} diff --git a/internal/api/router.go b/internal/api/router.go index e417090..40817c8 100644 --- a/internal/api/router.go +++ b/internal/api/router.go @@ -52,6 +52,7 @@ func NewRouter(st *store.Store) *gin.Engine { cc := NewConfigController(st) apiGroup.GET("/config/nsfw", cc.GetNsfwConfig) apiGroup.PUT("/config/nsfw", cc.UpdateNsfwConfig) + apiGroup.PUT("/config/scan-dir", cc.UpdateScanDir) } return r }