diff --git a/internal/services/env_service.go b/internal/services/env_service.go index 55149aa..a2d6ce3 100644 --- a/internal/services/env_service.go +++ b/internal/services/env_service.go @@ -22,7 +22,24 @@ func (es *EnvService) CreateEnvVar(name, value, remark string, hidden bool, user Hidden: hidden, UserID: uint(userID), } - database.DB.Create(env) + data := map[string]interface{}{ + "name": name, + "value": value, + "remark": remark, + "hidden": hidden, + "user_id": userID, + } + database.DB.Model(&models.EnvironmentVariable{}).Create(data) + + // 将自动生成的 ID 赋值回对象以便返回 + if id, ok := data["id"].(uint); ok { + env.ID = id + } else if id, ok := data["id"].(int64); ok { + env.ID = uint(id) + } else { + // 如果 ID 没有自动回填到 map,尝试通过刚才的数据查出来 + database.DB.Where("name = ? AND user_id = ?", name, userID).Order("id DESC").First(env) + } return env } diff --git a/web/src/views/agents/Agents.vue b/web/src/views/agents/Agents.vue index 34cbab1..e89182c 100644 --- a/web/src/views/agents/Agents.vue +++ b/web/src/views/agents/Agents.vue @@ -323,7 +323,7 @@ onUnmounted(() => { class="w-24 sm:w-32 shrink-0 font-medium text-xs sm:text-sm truncate cursor-pointer hover:text-primary" @click="viewDetail(agent)" :title="agent.name">{{ agent.name }} {{ agent.ip || '-' - }} + }} {{ agent.hostname || '-' }} {{ @@ -423,7 +423,7 @@ onUnmounted(() => { - + Agent 详情 @@ -492,7 +492,7 @@ onUnmounted(() => { - + 编辑 Agent @@ -532,7 +532,7 @@ onUnmounted(() => { - + 下载 Agent 当前版本: {{ agentVersion }} @@ -580,7 +580,7 @@ onUnmounted(() => { - + 生成令牌 diff --git a/web/src/views/dependencies/Dependencies.vue b/web/src/views/dependencies/Dependencies.vue index 6d748d2..f7ccf73 100644 --- a/web/src/views/dependencies/Dependencies.vue +++ b/web/src/views/dependencies/Dependencies.vue @@ -202,8 +202,10 @@ onMounted(loadDeps) - - 全部重装 + + 全部重装 安装 @@ -212,7 +214,8 @@ onMounted(loadDeps) - + 包名 版本 备注 @@ -229,12 +232,8 @@ onMounted(loadDeps) {{ searchQuery ? '无匹配结果' : '暂无依赖包' }} - + @@ -246,7 +245,8 @@ onMounted(loadDeps) - + @@ -261,7 +261,7 @@ onMounted(loadDeps) - + 安装 {{ getTypeLabel(activeTab) }} 包 @@ -309,7 +309,7 @@ onMounted(loadDeps) - + 安装日志 - {{ logPkgName }} diff --git a/web/src/views/editor/Editor.vue b/web/src/views/editor/Editor.vue index 4544340..7d6e81a 100644 --- a/web/src/views/editor/Editor.vue +++ b/web/src/views/editor/Editor.vue @@ -522,7 +522,7 @@ onUnmounted(() => { - + 新建 @@ -570,7 +570,7 @@ onUnmounted(() => { - + 重命名 @@ -592,7 +592,7 @@ onUnmounted(() => { + :show-close-button="false" @openAutoFocus.prevent> 运行脚本 - @@ -183,7 +175,7 @@ onMounted(loadEnvVars) - + {{ isEdit ? '编辑变量' : '新建变量' }} diff --git a/web/src/views/tasks/RepoDialog.vue b/web/src/views/tasks/RepoDialog.vue index 7cc7e3e..f341ba0 100644 --- a/web/src/views/tasks/RepoDialog.vue +++ b/web/src/views/tasks/RepoDialog.vue @@ -116,7 +116,7 @@ watch(() => props.open, async (val) => { // 兼容旧字段: 优先使用 $task_concurrency, 若无则默认 1 let concurrency = 1 if (parsed['$task_concurrency'] !== undefined) { - concurrency = parsed['$task_concurrency'] === 1 ? 1 : 0 + concurrency = parsed['$task_concurrency'] === 1 ? 1 : 0 } repoConfig.value = { ...defaultConfig, ...parsed, concurrency } } catch { @@ -149,7 +149,7 @@ async function save() { ...repoConfig.value, '$task_concurrency': repoConfig.value.concurrency !== undefined ? repoConfig.value.concurrency : 1 } - + form.value.config = JSON.stringify(configToSave) form.value.command = `[${repoConfig.value.source_type}] ${repoConfig.value.source_url}` form.value.agent_id = selectedAgentId.value === 'local' ? null : Number(selectedAgentId.value) @@ -168,7 +168,8 @@ async function save() { - + {{ isEdit ? '编辑仓库同步' : '新建仓库同步' }} @@ -179,7 +180,8 @@ async function save() { 源类型 - repoConfig.source_type = String(v || 'git')"> + repoConfig.source_type = String(v || 'git')"> @@ -191,12 +193,15 @@ async function save() { 源地址 - + 目标路径 - repoConfig.target_path = v" /> + repoConfig.target_path = v" /> @@ -214,15 +219,20 @@ async function save() { 仓库同步任务暂时仅支持本地执行 - + 分支 - + - + 稀疏路径 - + - + 单文件 @@ -246,11 +256,13 @@ async function save() { 代理地址 - + 认证Token - + 并发控制 @@ -269,12 +281,9 @@ async function save() { 格式: 秒 分 时 日 月 周 - + @click="form.schedule = preset.value"> {{ preset.label }} @@ -298,7 +307,8 @@ async function save() { 按条数 - + diff --git a/web/src/views/tasks/TaskDialog.vue b/web/src/views/tasks/TaskDialog.vue index 65c41ad..5f541d9 100644 --- a/web/src/views/tasks/TaskDialog.vue +++ b/web/src/views/tasks/TaskDialog.vue @@ -109,7 +109,7 @@ watch(() => props.open, async (val) => { if (!configStr) { configStr = '{}' } - + const parsed = JSON.parse(configStr) // 确保解析结果是对象 if (parsed && typeof parsed === 'object') { @@ -178,10 +178,10 @@ async function save() { form.value.envs = selectedEnvIds.value.join(',') form.value.type = 'task' form.value.agent_id = selectedAgentId.value === 'local' ? null : Number(selectedAgentId.value) - + // 保存配置 - 确保 concurrency 字段被正确保存 let config: Record = {} - + // 如果 form.value.config 存在,先解析它以保留其他配置 if (form.value.config) { try { @@ -193,16 +193,16 @@ async function save() { config = {} } } - + // 更新并发控制字段 (1: 开启, 0: 关闭) config['$task_concurrency'] = concurrency.value - + // 重新序列化配置 form.value.config = JSON.stringify(config) // 保存当前选择的执行位置对应的工作目录 form.value.work_dir = currentWorkDir.value - + if (props.isEdit && form.value.id) { await api.tasks.update(form.value.id, form.value) toast.success('任务已更新') @@ -212,15 +212,15 @@ async function save() { } emit('update:open', false) emit('saved') - } catch (error) { - toast.error('保存失败') + } catch (error) { + toast.error('保存失败') } } - + {{ isEdit ? '编辑任务' : '新建任务' }} @@ -248,7 +248,7 @@ async function save() { - 本地执行 + 本地执行 {{ agent.name }} ({{ agent.status === 'online' ? '在线' : '离线' }}) @@ -265,12 +265,9 @@ async function save() { 格式: 秒 分 时 日 月 周 - + @click="form.schedule = preset.value"> {{ preset.label }} @@ -294,7 +291,8 @@ async function save() { 按条数 - + @@ -324,12 +322,9 @@ async function save() { {{ allEnvVars.length === 0 ? '暂无环境变量' : '无匹配结果' }} - + @click="addEnv(env.id)"> {{ env.name }} @@ -337,7 +332,8 @@ async function save() { - + {{ env.name }}
仓库同步任务暂时仅支持本地执行
格式: 秒 分 时 日 月 周