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
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/engigu/taskpool/internal/constant"
|
||||
"github.com/engigu/taskpool/internal/services"
|
||||
"github.com/engigu/taskpool/internal/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type WebUIController struct {
|
||||
webuiService *services.WebUIService
|
||||
}
|
||||
|
||||
func NewWebUIController(webuiService *services.WebUIService) *WebUIController {
|
||||
return &WebUIController{
|
||||
webuiService: webuiService,
|
||||
}
|
||||
}
|
||||
|
||||
// GetWebUIs 获取所有WebUI
|
||||
func (c *WebUIController) GetWebUIs(ctx *gin.Context) {
|
||||
webuis, err := c.webuiService.GetWebUIs()
|
||||
if err != nil {
|
||||
utils.ServerError(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
utils.Success(ctx, webuis)
|
||||
}
|
||||
|
||||
// UploadWebUI 上传新WebUI
|
||||
func (c *WebUIController) UploadWebUI(ctx *gin.Context) {
|
||||
file, err := ctx.FormFile("file")
|
||||
if err != nil {
|
||||
utils.BadRequest(ctx, "获取上传文件失败")
|
||||
return
|
||||
}
|
||||
|
||||
// 临时保存上传的文件到挂载目录,避免 /tmp 跨分区移动或权限问题
|
||||
tmpDir := filepath.Join(constant.DataDir, "tmp")
|
||||
os.MkdirAll(tmpDir, 0755)
|
||||
tmpFile := filepath.Join(tmpDir, file.Filename)
|
||||
|
||||
if err := ctx.SaveUploadedFile(file, tmpFile); err != nil {
|
||||
utils.ServerError(ctx, "保存临时文件失败")
|
||||
return
|
||||
}
|
||||
defer os.Remove(tmpFile) // 自动清理临时文件
|
||||
|
||||
webuiName, err := c.webuiService.ExtractWebUI(tmpFile)
|
||||
if err != nil {
|
||||
utils.BadRequest(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(ctx, gin.H{"message": "WebUI上传成功", "webui": webuiName})
|
||||
}
|
||||
|
||||
// SetActiveWebUI 切换活动WebUI
|
||||
func (c *WebUIController) SetActiveWebUI(ctx *gin.Context) {
|
||||
var req struct {
|
||||
Name string `json:"name" binding:"required"`
|
||||
}
|
||||
if err := ctx.ShouldBindJSON(&req); err != nil {
|
||||
utils.BadRequest(ctx, "无效的请求参数")
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.webuiService.SetActiveWebUI(req.Name); err != nil {
|
||||
utils.ServerError(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(ctx, gin.H{"message": "WebUI已切换成功,部分页面可能需要刷新"})
|
||||
}
|
||||
|
||||
// DeleteWebUI 删除自定义WebUI
|
||||
func (c *WebUIController) DeleteWebUI(ctx *gin.Context) {
|
||||
name := ctx.Param("name")
|
||||
if name == "" {
|
||||
utils.BadRequest(ctx, "未提供WebUI名称")
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.webuiService.DeleteWebUI(name); err != nil {
|
||||
utils.BadRequest(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
utils.Success(ctx, gin.H{"message": "WebUI已删除"})
|
||||
}
|
||||
Reference in New Issue
Block a user