Files
TaskPool/cmd/webui/webui.go
T
admin e6956aa001 Initial commit: TaskPool React panel
- React frontend with route-level code splitting
- Backend rebranded from Baihu to TaskPool
- DB brand migration script and local compatibility
2026-07-26 08:43:52 +08:00

133 lines
3.2 KiB
Go

package webui
import (
"fmt"
"os"
"strings"
"github.com/engigu/taskpool/cmd/clibase"
"github.com/engigu/taskpool/internal/services"
)
func printMainHelp() {
fmt.Fprintf(os.Stderr, "\n任务池 WebUI 命令行管理工具\n\n")
fmt.Fprintf(os.Stderr, "用法:\n")
fmt.Fprintf(os.Stderr, " taskpool webui <子命令> [参数]\n\n")
fmt.Fprintf(os.Stderr, "可用子命令:\n")
fmt.Fprintf(os.Stderr, " list 列出当前安装的所有前端资源包\n")
fmt.Fprintf(os.Stderr, " set 设置激活指定的 WebUI\n")
fmt.Fprintf(os.Stderr, " reset 一键回退到系统默认的内置 WebUI\n")
fmt.Fprintf(os.Stderr, " delete 删除指定的 WebUI 资源包\n\n")
}
func Run(args []string) {
if len(args) == 0 || args[0] == "-h" || args[0] == "--help" {
printMainHelp()
return
}
subCommand := args[0]
subArgs := args[1:]
switch subCommand {
case "list":
runList(subArgs)
case "set":
runSet(subArgs)
case "reset":
runReset(subArgs)
case "delete":
runDelete(subArgs)
default:
fmt.Fprintf(os.Stderr, "未知子命令: %s\n", subCommand)
printMainHelp()
}
}
func initServices() *services.WebUIService {
clibase.InitContext(false)
settingsService := services.NewSettingsService()
return services.NewWebUIService(settingsService)
}
func runList(args []string) {
svc := initServices()
list, err := svc.GetWebUIs()
if err != nil {
fmt.Printf(">> 获取WebUI列表失败: %v\n", err)
return
}
settingsService := services.NewSettingsService()
activeWebUI := settingsService.Get("site", "active_webui")
if activeWebUI == "" {
activeWebUI = "default"
}
fmt.Println(strings.Repeat("=", 100))
fmt.Printf("%s | %s | %s | %s | %s\n",
clibase.VisualFormat("名称", 20),
clibase.VisualFormat("版本", 12),
clibase.VisualFormat("作者", 15),
clibase.VisualFormat("状态", 10),
clibase.VisualFormat("描述", 30),
)
fmt.Println(strings.Repeat("-", 100))
for _, w := range list {
status := "-"
if w.Name == activeWebUI {
status = "使用中"
}
fmt.Printf("%s | %s | %s | %s | %s\n",
clibase.VisualFormat(w.Name, 20),
clibase.VisualFormat(w.Version, 12),
clibase.VisualFormat(w.Author, 15),
clibase.VisualFormat(status, 10),
clibase.VisualFormat(w.Description, 30),
)
}
fmt.Println(strings.Repeat("=", 100))
}
func runSet(args []string) {
if len(args) < 1 {
fmt.Fprintf(os.Stderr, "错误: 缺少目标 WebUI 名称。\n用法: taskpool webui set <name>\n")
return
}
name := args[0]
svc := initServices()
err := svc.SetActiveWebUI(name)
if err != nil {
fmt.Printf(">> 设置激活WebUI失败: %v\n", err)
return
}
fmt.Printf(">> 成功激活 WebUI: %s\n", name)
}
func runReset(args []string) {
svc := initServices()
err := svc.SetActiveWebUI("default")
if err != nil {
fmt.Printf(">> 回退默认WebUI失败: %v\n", err)
return
}
fmt.Println(">> 成功回退到内置默认 WebUI")
}
func runDelete(args []string) {
if len(args) < 1 {
fmt.Fprintf(os.Stderr, "错误: 缺少目标 WebUI 名称。\n用法: taskpool webui delete <name>\n")
return
}
name := args[0]
svc := initServices()
err := svc.DeleteWebUI(name)
if err != nil {
fmt.Printf(">> 删除WebUI失败: %v\n", err)
return
}
fmt.Printf(">> 成功删除 WebUI: %s\n", name)
}