diff --git a/internal/controllers/settings_controller.go b/internal/controllers/settings_controller.go index 5be19b5..d0c62dd 100644 --- a/internal/controllers/settings_controller.go +++ b/internal/controllers/settings_controller.go @@ -6,14 +6,15 @@ import ( "strconv" "fmt" + "os" + "time" + "github.com/engigu/baihu-panel/internal/constant" "github.com/engigu/baihu-panel/internal/database" "github.com/engigu/baihu-panel/internal/models" "github.com/engigu/baihu-panel/internal/services" "github.com/engigu/baihu-panel/internal/services/tasks" "github.com/engigu/baihu-panel/internal/utils" - "os" - "time" "github.com/gin-gonic/gin" "github.com/shirou/gopsutil/v3/process" @@ -164,6 +165,14 @@ func (sc *SettingsController) UpdateSchedulerSettings(c *gin.Context) { utils.SuccessMsg(c, "保存成功") } +// GetPaths 获取系统路径信息 +func (sc *SettingsController) GetPaths(c *gin.Context) { + absScriptsDir, _ := filepath.Abs(constant.ScriptsWorkDir) + utils.Success(c, gin.H{ + "scripts_dir": absScriptsDir, + }) +} + // GetAbout 获取关于信息 func (sc *SettingsController) GetAbout(c *gin.Context) { var taskCount, logCount, envCount int64 diff --git a/internal/router/router.go b/internal/router/router.go index 56d1034..a9f56a6 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -182,6 +182,7 @@ func Setup(c *Controllers) *gin.Engine { settings.POST("/password", c.Settings.ChangePassword) settings.GET("/site", c.Settings.GetSiteSettings) settings.PUT("/site", c.Settings.UpdateSiteSettings) + settings.GET("/paths", c.Settings.GetPaths) settings.GET("/scheduler", c.Settings.GetSchedulerSettings) settings.PUT("/scheduler", c.Settings.UpdateSchedulerSettings) settings.GET("/about", c.Settings.GetAbout) diff --git a/web/src/api/index.ts b/web/src/api/index.ts index 614d5c3..21d0c27 100644 --- a/web/src/api/index.ts +++ b/web/src/api/index.ts @@ -122,6 +122,7 @@ export const api = { getScheduler: () => request('/settings/scheduler'), updateScheduler: (data: SchedulerSettings) => request('/settings/scheduler', { method: 'PUT', body: JSON.stringify(data) }), + getPaths: () => request<{ scripts_dir: string }>('/settings/paths'), getAbout: () => request('/settings/about'), getLoginLogs: (params?: { page?: number; page_size?: number; username?: string }) => { const query = new URLSearchParams() diff --git a/web/src/views/editor/Editor.vue b/web/src/views/editor/Editor.vue index eabdc64..fbff6ea 100644 --- a/web/src/views/editor/Editor.vue +++ b/web/src/views/editor/Editor.vue @@ -44,6 +44,16 @@ const hasChanges = computed(() => fileContent.value !== originalContent.value) const showTerminalDialog = ref(false) const terminalRef = ref | null>(null) const runCommand = ref('') +const scriptsDir = ref('') + +async function fetchPaths() { + try { + const res = await api.settings.getPaths() + scriptsDir.value = res.scripts_dir + } catch { + scriptsDir.value = PATHS.SCRIPTS_DIR + } +} // Monaco Editor 实例引用 const editorRef = shallowRef() @@ -188,10 +198,11 @@ async function runScript() { const cmd = runner ? `${runner} ${fileName}` : `./${fileName}` // 构建完整命令 + const baseDir = scriptsDir.value || PATHS.SCRIPTS_DIR if (dirPath) { - runCommand.value = `cd ${PATHS.SCRIPTS_DIR}/${dirPath} && ${cmd}` + runCommand.value = `cd ${baseDir}/${dirPath} && ${cmd}` } else { - runCommand.value = `cd ${PATHS.SCRIPTS_DIR} && ${cmd}` + runCommand.value = `cd ${baseDir} && ${cmd}` } showTerminalDialog.value = true @@ -346,7 +357,10 @@ async function initFromUrl() { } } -onMounted(initFromUrl) +onMounted(() => { + initFromUrl() + fetchPaths() +}) onMounted(() => { window.addEventListener('resize', handleResize)