This commit is contained in:
2026-08-26 18:37:24 +08:00
parent 28220899fb
commit c323ca9031
10 changed files with 38 additions and 82 deletions
+4 -53
View File
@@ -28,9 +28,7 @@ const coverFile = ref(null) // 新选择的封面文件(el-upload 单文件)
const coverFileList = ref([]) // 封面回显:已有封面(服务端 url)或新选文件(本地预览)
const coverDeleted = ref(false) // 用户删除了已有封面(保存时调删除接口)
const trainVisible = ref(false)
const training = ref(false)
const trainForm = reactive({ datasetId: 0, name: '', imgsz: 704, epochs: 150, batch: 16, device: '0' })
const statusMap = { building: '建设中', labeled: '已标注', synced: '已同步' }
const statusTag = { building: 'info', labeled: 'success', synced: 'primary' }
@@ -133,29 +131,14 @@ async function submitConfig() {
}
}
// ---------- 开始训练 ----------
// ---------- 开始训练(一键发起:任务名自动生成,参数走 config.yml training 节点) ----------
function openTrain(row) {
trainForm.datasetId = row.id
trainForm.name = `${row.name} 训练`
trainForm.imgsz = 704
trainForm.epochs = 150
trainForm.batch = 16
trainForm.device = '0'
trainVisible.value = true
}
function submitTrain() {
if (!trainForm.name.trim()) {
ElMessage.warning('请输入任务名称')
return
}
function startTrain(row) {
training.value = true
request
.post('/trainings', { ...trainForm })
.post('/trainings', { datasetId: row.id })
.then(() => {
ElMessage.success('训练任务已发起,完成后可发布为模型版本')
trainVisible.value = false
load()
})
.catch(() => {})
@@ -268,7 +251,7 @@ onBeforeUnmount(() => {
</div>
</div>
<div class="ds-actions" @click.stop>
<el-button type="primary" size="small" :icon="VideoPlay" :disabled="row.trainingStatus === 'running'" @click="openTrain(row)">
<el-button type="primary" size="small" :icon="VideoPlay" :disabled="row.trainingStatus === 'running'" @click="startTrain(row)">
{{ row.trainingStatus === 'running' ? '训练中' : '开始训练' }}
</el-button>
<el-button size="small" :icon="Setting" @click="openConfig(row)">配置</el-button>
@@ -361,32 +344,6 @@ onBeforeUnmount(() => {
</template>
</el-dialog>
<!-- 开始训练 -->
<el-dialog v-model="trainVisible" title="开始训练" width="min(480px, 92vw)">
<el-form label-width="90px">
<el-form-item label="任务名称">
<el-input v-model="trainForm.name" maxlength="50" show-word-limit placeholder="如:雉鸡数据集 v2 训练" />
</el-form-item>
<el-form-item label="分辨率">
<el-input-number v-model="trainForm.imgsz" :min="64" :max="2048" :step="32" />
<span class="field-tip">与端侧推理对齐默认 704</span>
</el-form-item>
<el-form-item label="轮数">
<el-input-number v-model="trainForm.epochs" :min="1" :max="1000" />
</el-form-item>
<el-form-item label="Batch">
<el-input-number v-model="trainForm.batch" :min="1" :max="128" />
</el-form-item>
<el-form-item label="设备">
<el-input v-model="trainForm.device" maxlength="16" placeholder="GPU 编号 0CPU 填 cpu" />
</el-form-item>
<div class="start-tip">训练前自动整理 80/20 训练/验证集须先完成图片标注训练机并发度 1已有运行中任务会被拒绝</div>
</el-form>
<template #footer>
<el-button @click="trainVisible = false">取消</el-button>
<el-button type="primary" :loading="training" @click="submitTrain">发起训练</el-button>
</template>
</el-dialog>
</el-card>
</template>
@@ -512,12 +469,6 @@ onBeforeUnmount(() => {
font-size: 12px;
color: #909399;
}
.start-tip {
font-size: 12px;
color: #909399;
line-height: 1.6;
margin-left: 90px;
}
.cover-row {
display: flex;
align-items: center;