diff --git a/internal/models/task.go b/internal/models/task.go index b576840..23f4fcc 100644 --- a/internal/models/task.go +++ b/internal/models/task.go @@ -72,6 +72,7 @@ type TaskConfig struct { type Task struct { ID string `json:"id" gorm:"primaryKey;size:20"` Name string `json:"name" gorm:"size:255;not null"` + Remark string `json:"remark" gorm:"size:255;default:''"` Command BigText `json:"command"` // 普通任务的命令 Tags string `json:"tags" gorm:"size:255;default:''"` // 标签,逗号分隔 Type string `json:"type" gorm:"size:20;default:'task'"` // 任务类型: constant.TaskTypeNormal, constant.TaskTypeRepo diff --git a/internal/services/backup_service.go b/internal/services/backup_service.go index dabcada..48e1821 100644 --- a/internal/services/backup_service.go +++ b/internal/services/backup_service.go @@ -43,21 +43,21 @@ type tableConfig struct { func (s *BackupService) getTableConfigs() []tableConfig { return []tableConfig{ - {"users.json", s.exportTable(&[]models.User{}, true), s.restoreTable(&[]models.User{}, true)}, - {"tasks.json", s.exportTable(&[]models.Task{}, true), s.restoreTable(&[]models.Task{}, true)}, - {"task_logs.json", s.exportTable(&[]models.TaskLog{}, false), s.restoreTable(&[]models.TaskLog{}, false)}, - {"envs.json", s.exportTable(&[]models.EnvironmentVariable{}, true), s.restoreTable(&[]models.EnvironmentVariable{}, true)}, - {"scripts.json", s.exportTable(&[]models.Script{}, true), s.restoreTable(&[]models.Script{}, true)}, + {"users.json", s.exportTable(&[]models.User{}, true), s.restoreTable(&[]models.User{})}, + {"tasks.json", s.exportTable(&[]models.Task{}, true), s.restoreTable(&[]models.Task{})}, + {"task_logs.json", s.exportTable(&[]models.TaskLog{}, false), s.restoreTable(&[]models.TaskLog{})}, + {"envs.json", s.exportTable(&[]models.EnvironmentVariable{}, true), s.restoreTable(&[]models.EnvironmentVariable{})}, + {"scripts.json", s.exportTable(&[]models.Script{}, true), s.restoreTable(&[]models.Script{})}, {"settings.json", s.exportSettings, s.restoreSettings}, - {"send_stats.json", s.exportTable(&[]models.SendStats{}, false), s.restoreTable(&[]models.SendStats{}, false)}, + {"send_stats.json", s.exportTable(&[]models.SendStats{}, false), s.restoreTable(&[]models.SendStats{})}, - {"agents.json", s.exportTable(&[]models.Agent{}, true), s.restoreTable(&[]models.Agent{}, true)}, - {"tokens.json", s.exportTable(&[]models.AgentToken{}, true), s.restoreTable(&[]models.AgentToken{}, true)}, - {"languages.json", s.exportTable(&[]models.Language{}, true), s.restoreTable(&[]models.Language{}, true)}, - {"deps.json", s.exportTable(&[]models.Dependency{}, true), s.restoreTable(&[]models.Dependency{}, true)}, - {"notify_ways.json", s.exportTable(&[]models.NotifyWay{}, true), s.restoreTable(&[]models.NotifyWay{}, true)}, - {"notify_bindings.json", s.exportTable(&[]models.NotifyBinding{}, true), s.restoreTable(&[]models.NotifyBinding{}, true)}, - {"app_logs.json", s.exportTable(&[]models.AppLog{}, false), s.restoreTable(&[]models.AppLog{}, false)}, + {"agents.json", s.exportTable(&[]models.Agent{}, true), s.restoreTable(&[]models.Agent{})}, + {"tokens.json", s.exportTable(&[]models.AgentToken{}, true), s.restoreTable(&[]models.AgentToken{})}, + {"languages.json", s.exportTable(&[]models.Language{}, true), s.restoreTable(&[]models.Language{})}, + {"deps.json", s.exportTable(&[]models.Dependency{}, true), s.restoreTable(&[]models.Dependency{})}, + {"notify_ways.json", s.exportTable(&[]models.NotifyWay{}, true), s.restoreTable(&[]models.NotifyWay{})}, + {"notify_bindings.json", s.exportTable(&[]models.NotifyBinding{}, true), s.restoreTable(&[]models.NotifyBinding{})}, + {"app_logs.json", s.exportTable(&[]models.AppLog{}, false), s.restoreTable(&[]models.AppLog{})}, } } @@ -104,7 +104,7 @@ func (s *BackupService) exportTable(modelPtr any, unscoped bool) func(io.Writer) } } -func (s *BackupService) restoreTable(dest any, unscoped bool) func([]byte) error { +func (s *BackupService) restoreTable(dest any) func([]byte) error { return func(data []byte) error { if err := json.Unmarshal(data, dest); err != nil { return err @@ -375,14 +375,6 @@ func (s *BackupService) restoreScriptsDir(r *zip.ReadCloser) { } } -func (s *BackupService) readZipFile(f *zip.File) ([]byte, error) { - rc, err := f.Open() - if err != nil { - return nil, err - } - defer rc.Close() - return io.ReadAll(rc) -} func (s *BackupService) addDirToZip(zipWriter *zip.Writer, srcDir, prefix string) error { return filepath.Walk(srcDir, func(path string, info os.FileInfo, err error) error { diff --git a/internal/services/init_service.go b/internal/services/init_service.go index 22da1ba..f2e62ca 100644 --- a/internal/services/init_service.go +++ b/internal/services/init_service.go @@ -29,6 +29,9 @@ func (s *InitService) Initialize() *UserService { // 创建管理员账号 s.initializeAdmin(userService) + + // 初始化语言环境 + s.initializeLanguages() return userService } diff --git a/internal/services/mise_service.go b/internal/services/mise_service.go index b0a388f..50ff3d2 100644 --- a/internal/services/mise_service.go +++ b/internal/services/mise_service.go @@ -109,12 +109,6 @@ func (s *MiseService) fetchLiveLanguages() ([]MiseLanguage, error) { return s.listFallback() } -func min(a, b int) int { - if a < b { - return a - } - return b -} func (s *MiseService) listFallback() ([]MiseLanguage, error) { cmd := exec.Command("mise", "ls") diff --git a/web/src/api/index.ts b/web/src/api/index.ts index 0656740..2b60d46 100644 --- a/web/src/api/index.ts +++ b/web/src/api/index.ts @@ -338,6 +338,7 @@ export interface FileNode { export interface Task { id: string name: string + remark: string command: string tags: string type: string diff --git a/web/src/views/tasks/RepoDialog.vue b/web/src/views/tasks/RepoDialog.vue index c0d47dc..e158625 100644 --- a/web/src/views/tasks/RepoDialog.vue +++ b/web/src/views/tasks/RepoDialog.vue @@ -448,6 +448,10 @@ async function save() { +
+ + +
diff --git a/web/src/views/tasks/TaskDialog.vue b/web/src/views/tasks/TaskDialog.vue index 90c9d2b..447c633 100644 --- a/web/src/views/tasks/TaskDialog.vue +++ b/web/src/views/tasks/TaskDialog.vue @@ -464,6 +464,10 @@ async function save() {
+
+ + +
diff --git a/web/src/views/tasks/Tasks.vue b/web/src/views/tasks/Tasks.vue index d51948e..e6730b1 100644 --- a/web/src/views/tasks/Tasks.vue +++ b/web/src/views/tasks/Tasks.vue @@ -117,13 +117,13 @@ function clearAgentFilter() { } function openCreate() { - editingTask.value = { name: '', command: '', type: TASK_TYPE.NORMAL, schedule: '0 * * * * *', timeout: 30, work_dir: '', enabled: true, clean_config: '', envs: '', random_range: 0 } + editingTask.value = { name: '', remark: '', command: '', type: TASK_TYPE.NORMAL, schedule: '0 * * * * *', timeout: 30, work_dir: '', enabled: true, clean_config: '', envs: '', random_range: 0 } isEdit.value = false showTaskDialog.value = true } function openCreateRepo() { - editingTask.value = { name: '', type: TASK_TYPE.REPO, schedule: '0 0 0 * * *', timeout: 30, enabled: true, clean_config: '', envs: '', random_range: 0 } + editingTask.value = { name: '', remark: '', type: TASK_TYPE.REPO, schedule: '0 0 0 * * *', timeout: 30, enabled: true, clean_config: '', envs: '', random_range: 0 } isEdit.value = false showRepoDialog.value = true }