From 583287fb7b2a9144ed2b30f59e34fe292a9f8822 Mon Sep 17 00:00:00 2001 From: engigu Date: Tue, 17 Mar 2026 14:38:20 +0800 Subject: [PATCH] chore: fix mise envs panel --- internal/controllers/mise_controller.go | 21 +++++++++++++++++++++ internal/router/api_routes.go | 1 + internal/services/mise_service.go | 16 ++++++++++++++++ web/src/api/index.ts | 3 ++- web/src/views/languages/Languages.vue | 20 +++++++++++++------- 5 files changed, 53 insertions(+), 8 deletions(-) diff --git a/internal/controllers/mise_controller.go b/internal/controllers/mise_controller.go index 83fed38..5ec3cd8 100644 --- a/internal/controllers/mise_controller.go +++ b/internal/controllers/mise_controller.go @@ -96,3 +96,24 @@ func (c *MiseController) UseGlobal(ctx *gin.Context) { } utils.Success(ctx, nil) } + +// UnsetGlobal 取消全局默认版本 +func (c *MiseController) UnsetGlobal(ctx *gin.Context) { + var req struct { + Plugin string `json:"plugin"` + Version string `json:"version"` + } + if err := ctx.ShouldBindJSON(&req); err != nil { + utils.BadRequest(ctx, "参数错误: "+err.Error()) + return + } + if req.Plugin == "" { + utils.BadRequest(ctx, "参数 plugin 不能为空") + return + } + if err := c.service.UnsetGlobal(req.Plugin, req.Version); err != nil { + utils.ServerError(ctx, "取消全局版本失败: "+err.Error()) + return + } + utils.Success(ctx, nil) +} diff --git a/internal/router/api_routes.go b/internal/router/api_routes.go index 39daeb3..4fa56b9 100644 --- a/internal/router/api_routes.go +++ b/internal/router/api_routes.go @@ -211,6 +211,7 @@ func registerMiseRoutes(g *gin.RouterGroup, c *Controllers) { mise.GET("/versions", c.Mise.Versions) mise.GET("/verify-cmd", c.Mise.VerifyCommand) mise.POST("/use-global", c.Mise.UseGlobal) + mise.POST("/unset-global", c.Mise.UnsetGlobal) } } diff --git a/internal/services/mise_service.go b/internal/services/mise_service.go index 5585d04..d94ffc3 100644 --- a/internal/services/mise_service.go +++ b/internal/services/mise_service.go @@ -340,3 +340,19 @@ func (s *MiseService) UseGlobal(plugin, version string) error { } return nil } + +// UnsetGlobal 取消全局默认版本 +func (s *MiseService) UnsetGlobal(plugin, version string) error { + // 使用 mise unuse -g @ 移出全局配置 + target := plugin + if version != "" { + target = fmt.Sprintf("%s@%s", plugin, version) + } + cmd := exec.Command("mise", "unuse", "-g", target) + cmd.Env = os.Environ() + output, err := cmd.CombinedOutput() + if err != nil { + return fmt.Errorf("mise unuse global failed: %v, output: %s", err, string(output)) + } + return nil +} diff --git a/web/src/api/index.ts b/web/src/api/index.ts index a97db9a..5728b53 100644 --- a/web/src/api/index.ts +++ b/web/src/api/index.ts @@ -268,7 +268,8 @@ export const api = { plugins: () => request('/mise/plugins'), versions: (plugin: string) => request(`/mise/versions?plugin=${plugin}`), verifyCommand: (plugin: string, version: string) => request<{ command: string }>(`/mise/verify-cmd?plugin=${plugin}&version=${version}`), - useGlobal: (plugin: string, version: string) => request('/mise/use-global', { method: 'POST', body: JSON.stringify({ plugin, version }) }) + useGlobal: (plugin: string, version: string) => request('/mise/use-global', { method: 'POST', body: JSON.stringify({ plugin, version }) }), + unsetGlobal: (plugin: string, version: string) => request('/mise/unset-global', { method: 'POST', body: JSON.stringify({ plugin, version }) }) }, terminal: { cmds: () => request<{ name: string, description: string }[]>('/terminal/cmds') diff --git a/web/src/views/languages/Languages.vue b/web/src/views/languages/Languages.vue index 9325bbb..ed5810d 100644 --- a/web/src/views/languages/Languages.vue +++ b/web/src/views/languages/Languages.vue @@ -245,13 +245,18 @@ async function handleVerify(lang: MiseLanguage) { } } -async function handleSetDefault(lang: MiseLanguage) { +async function toggleDefault(lang: MiseLanguage) { try { - await api.mise.useGlobal(lang.plugin, lang.version) - toast.success(`已将 ${lang.plugin} ${lang.version} 设为全局默认版本`) + if (lang.is_global) { + await api.mise.unsetGlobal(lang.plugin, lang.version) + toast.success(`已取消 ${lang.plugin} 的全局默认设置`) + } else { + await api.mise.useGlobal(lang.plugin, lang.version) + toast.success(`已将 ${lang.plugin} ${lang.version} 设为全局默认版本`) + } await loadLanguages() } catch (e) { - toast.error('设置默认版本失败: ' + e) + toast.error('操作失败: ' + e) } } @@ -364,9 +369,10 @@ onMounted(loadLanguages) @click="handleVerify(lang)"> 环境验证 -