feat: tag view add #87 #86

This commit is contained in:
duorameng
2026-04-24 19:47:37 +08:00
parent 84c23585b5
commit 9bb7b5a42d
7 changed files with 360 additions and 24 deletions
+17
View File
@@ -456,3 +456,20 @@ func (tc *TaskController) StopTask(c *gin.Context) {
utils.SuccessMsg(c, "停止请求已发送")
}
// GetTags 获取所有任务标签
// @Summary 获取所有任务标签
// @Description 获取系统中所有任务已使用的唯一标签列表
// @Tags 任务管理
// @Produce json
// @Security BearerAuth
// @Success 200 {object} utils.Response{data=[]string}
// @Router /tasks/tags [get]
func (tc *TaskController) GetTags(c *gin.Context) {
tags, err := tc.taskService.GetAllTags()
if err != nil {
utils.ServerError(c, err.Error())
return
}
utils.Success(c, tags)
}
+1
View File
@@ -76,6 +76,7 @@ func registerTaskRoutes(g *gin.RouterGroup, c *Controllers) {
tasks.POST("/batch-delete", c.Task.BatchDeleteTasks)
tasks.DELETE("/batch-by-query", c.Task.BatchDeleteByQuery)
tasks.POST("/stop/:logID", c.Task.StopTask)
tasks.GET("/tags", c.Task.GetTags)
}
execution := g.Group("/execute")
+46 -3
View File
@@ -5,9 +5,11 @@ import (
"github.com/engigu/baihu-panel/internal/database"
"github.com/engigu/baihu-panel/internal/models"
"github.com/engigu/baihu-panel/internal/utils"
"strings"
)
type TaskService struct{}
type TaskService struct {
}
func NewTaskService() *TaskService {
return &TaskService{}
@@ -56,6 +58,8 @@ func (ts *TaskService) CreateTask(name, command, schedule string, timeout int, w
task.NextRun = nil
}
database.DB.Select("*").Create(task)
return task
}
@@ -74,10 +78,25 @@ func (ts *TaskService) GetTasksWithPagination(page, pageSize int, name string, a
if name != "" {
query = query.Where("name LIKE ? OR remark LIKE ?", "%"+name+"%", "%"+name+"%")
}
// 标签筛选 (并集)
if tags != "" {
query = query.Where("tags LIKE ?", "%"+tags+"%")
tagList := strings.Split(tags, ",")
var orConditions []string
var orValues []interface{}
for _, tag := range tagList {
tag = strings.TrimSpace(tag)
if tag != "" {
orConditions = append(orConditions, "tags LIKE ?")
orValues = append(orValues, "%"+tag+"%")
}
}
if len(orConditions) > 0 {
query = query.Where(strings.Join(orConditions, " OR "), orValues...)
}
}
if taskType != "" {
if taskType != "" && taskType != "all" {
query = query.Where("type = ?", taskType)
}
if agentID != nil {
@@ -136,6 +155,7 @@ func (ts *TaskService) UpdateTask(id string, name, command, schedule string, tim
"RetryCount", "RetryInterval", "RandomRange", "Type",
"TriggerType", "Config", "SourceID",
).Updates(&task)
return &task
}
@@ -154,3 +174,26 @@ func (ts *TaskService) BatchDeleteTasks(ids []string) int64 {
result := database.DB.Where("id IN ?", ids).Delete(&models.Task{})
return result.RowsAffected
}
// GetAllTags 获取所有任务标签
func (ts *TaskService) GetAllTags() ([]string, error) {
var tasks []models.Task
database.DB.Select("tags").Where("tags != ?", "").Find(&tasks)
tagMap := make(map[string]bool)
for _, task := range tasks {
tags := strings.Split(task.Tags, ",")
for _, tag := range tags {
tag = strings.TrimSpace(tag)
if tag != "" {
tagMap[tag] = true
}
}
}
result := make([]string, 0, len(tagMap))
for tag := range tagMap {
result = append(result, tag)
}
return result, nil
}