chore: fix mise envs panel

This commit is contained in:
engigu
2026-03-17 14:38:20 +08:00
parent 5310c54d47
commit 583287fb7b
5 changed files with 53 additions and 8 deletions
+21
View File
@@ -96,3 +96,24 @@ func (c *MiseController) UseGlobal(ctx *gin.Context) {
} }
utils.Success(ctx, nil) 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)
}
+1
View File
@@ -211,6 +211,7 @@ func registerMiseRoutes(g *gin.RouterGroup, c *Controllers) {
mise.GET("/versions", c.Mise.Versions) mise.GET("/versions", c.Mise.Versions)
mise.GET("/verify-cmd", c.Mise.VerifyCommand) mise.GET("/verify-cmd", c.Mise.VerifyCommand)
mise.POST("/use-global", c.Mise.UseGlobal) mise.POST("/use-global", c.Mise.UseGlobal)
mise.POST("/unset-global", c.Mise.UnsetGlobal)
} }
} }
+16
View File
@@ -340,3 +340,19 @@ func (s *MiseService) UseGlobal(plugin, version string) error {
} }
return nil return nil
} }
// UnsetGlobal 取消全局默认版本
func (s *MiseService) UnsetGlobal(plugin, version string) error {
// 使用 mise unuse -g <tool>@<version> 移出全局配置
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
}
+2 -1
View File
@@ -268,7 +268,8 @@ export const api = {
plugins: () => request<string[]>('/mise/plugins'), plugins: () => request<string[]>('/mise/plugins'),
versions: (plugin: string) => request<string[]>(`/mise/versions?plugin=${plugin}`), versions: (plugin: string) => request<string[]>(`/mise/versions?plugin=${plugin}`),
verifyCommand: (plugin: string, version: string) => request<{ command: string }>(`/mise/verify-cmd?plugin=${plugin}&version=${version}`), verifyCommand: (plugin: string, version: string) => request<{ command: string }>(`/mise/verify-cmd?plugin=${plugin}&version=${version}`),
useGlobal: (plugin: string, version: string) => request<void>('/mise/use-global', { method: 'POST', body: JSON.stringify({ plugin, version }) }) useGlobal: (plugin: string, version: string) => request<void>('/mise/use-global', { method: 'POST', body: JSON.stringify({ plugin, version }) }),
unsetGlobal: (plugin: string, version: string) => request<void>('/mise/unset-global', { method: 'POST', body: JSON.stringify({ plugin, version }) })
}, },
terminal: { terminal: {
cmds: () => request<{ name: string, description: string }[]>('/terminal/cmds') cmds: () => request<{ name: string, description: string }[]>('/terminal/cmds')
+13 -7
View File
@@ -245,13 +245,18 @@ async function handleVerify(lang: MiseLanguage) {
} }
} }
async function handleSetDefault(lang: MiseLanguage) { async function toggleDefault(lang: MiseLanguage) {
try { try {
await api.mise.useGlobal(lang.plugin, lang.version) if (lang.is_global) {
toast.success(`已将 ${lang.plugin} ${lang.version} 设为全局默认版本`) 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() await loadLanguages()
} catch (e) { } catch (e) {
toast.error('设置默认版本失败: ' + e) toast.error('操作失败: ' + e)
} }
} }
@@ -364,9 +369,10 @@ onMounted(loadLanguages)
@click="handleVerify(lang)"> @click="handleVerify(lang)">
环境验证 环境验证
</Button> </Button>
<Button variant="outline" size="sm" class="whitespace-nowrap flex-1 sm:flex-none" <Button variant="outline" size="sm"
:disabled="lang.isGlobal" @click="handleSetDefault(lang)"> :class="cn('whitespace-nowrap flex-1 sm:flex-none', lang.isGlobal && 'text-amber-600 border-amber-500/50 bg-amber-500/5 hover:bg-amber-500/10')"
设为默认 @click="toggleDefault(lang)">
{{ lang.isGlobal ? '取消默认' : '设为默认' }}
</Button> </Button>
<Button variant="ghost" size="icon" <Button variant="ghost" size="icon"
class="text-destructive h-8 w-8 shrink-0 ml-auto sm:ml-0" @click="confirmDelete(lang)" class="text-destructive h-8 w-8 shrink-0 ml-auto sm:ml-0" @click="confirmDelete(lang)"