feat: add svn preset management and optimize docker builds

This commit is contained in:
liumangmang
2026-06-11 13:57:20 +08:00
parent 409c5a81e4
commit b5c7907c23
24 changed files with 1317 additions and 138 deletions
+15 -3
View File
@@ -1,12 +1,22 @@
<template>
<div class="svn-fetch">
<div class="card">
<!-- 空状态无预设时引导去仓库管理新增 -->
<div v-if="!loading && !presets.length" class="card" style="text-align:center;padding:var(--space-2xl) var(--space-lg);">
<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="color:var(--c-text-muted);margin-bottom:var(--space-md);" aria-hidden="true"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg>
<h3 style="font-size:16px;font-weight:600;margin-bottom:8px;color:var(--c-text);">尚未配置 SVN 仓库</h3>
<p style="font-size:13px;color:var(--c-text-muted);margin-bottom:var(--space-lg);">
请先在<a href="#/presets" style="color:var(--c-primary);font-weight:500;">仓库管理</a>页面新增仓库后再来抓取日志
</p>
<router-link to="/presets" class="btn btn-primary">前往仓库管理</router-link>
</div>
<div v-else class="card">
<div class="card-title">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
SVN 批量抓取参数
</div>
<div class="alert alert-info" style="margin-bottom:var(--space-md);">
默认已填充 3 个常用项目路径可选月份自动填充版本号或手动填写
支持多个项目批量抓取选月份自动填充版本号或手动填写
</div>
<div style="padding:var(--space-md);background:rgba(15,23,42,0.4);border-radius:var(--radius-md);margin-bottom:var(--space-lg);border:1px solid var(--c-border-light);">
@@ -114,6 +124,7 @@ const { toast } = useToast()
const presets = ref([])
const defaultPresetId = ref('')
const loading = ref(true)
const testing = ref(false)
const running = ref(false)
const autoFillLoading = ref(false)
@@ -166,7 +177,8 @@ onMounted(async () => {
startRevision: '',
endRevision: '',
}))
} catch (err) { toast(err.message, true) }
loading.value = false
} catch (err) { loading.value = false; toast(err.message, true) }
const now = new Date()
const y = now.getFullYear()