e6956aa001
- React frontend with route-level code splitting - Backend rebranded from Baihu to TaskPool - DB brand migration script and local compatibility
94 lines
2.3 KiB
Go
94 lines
2.3 KiB
Go
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已删除"})
|
|
}
|