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
+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
}