1
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<script setup>
|
||||
import { onBeforeUnmount, onMounted, reactive, ref } from 'vue'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { Plus, Picture, Setting, VideoPlay, Download } from '@element-plus/icons-vue'
|
||||
import { Plus, Picture, Setting, VideoPlay } from '@element-plus/icons-vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import request from '../api/request'
|
||||
|
||||
@@ -14,7 +14,7 @@ const size = ref(12)
|
||||
const keyword = ref('')
|
||||
|
||||
const createVisible = ref(false)
|
||||
const createForm = reactive({ name: '', source: 'manual' })
|
||||
const createForm = reactive({ name: '' })
|
||||
const creating = ref(false)
|
||||
|
||||
const configVisible = ref(false)
|
||||
@@ -55,7 +55,6 @@ function search() {
|
||||
|
||||
function openCreate() {
|
||||
createForm.name = ''
|
||||
createForm.source = 'manual'
|
||||
createVisible.value = true
|
||||
}
|
||||
|
||||
@@ -66,7 +65,7 @@ function submitCreate() {
|
||||
}
|
||||
creating.value = true
|
||||
request
|
||||
.post('/datasets', { name: createForm.name.trim(), source: createForm.source })
|
||||
.post('/datasets', { name: createForm.name.trim(), source: 'manual' })
|
||||
.then(() => {
|
||||
ElMessage.success('数据集已创建,请上传或生成图片')
|
||||
createVisible.value = false
|
||||
@@ -88,8 +87,10 @@ function openConfig(row) {
|
||||
})
|
||||
coverFile.value = null
|
||||
coverDeleted.value = false
|
||||
// 已有封面回显:el-upload picture-card 直接以 url 项展示
|
||||
coverFileList.value = row.cover ? [{ name: '当前封面', url: imgUrl(`/api/v1/admin/datasets/cover?datasetId=${row.id}`) }] : []
|
||||
// 已有封面回显:el-upload picture-card 直接以 url 项展示(带版本参数防浏览器缓存旧封面)
|
||||
coverFileList.value = row.cover
|
||||
? [{ name: '当前封面', url: imgUrl(`/api/v1/admin/datasets/cover?datasetId=${row.id}&v=${encodeURIComponent(row.updatedAt || '')}`) }]
|
||||
: []
|
||||
configVisible.value = true
|
||||
}
|
||||
|
||||
@@ -150,11 +151,7 @@ function startTrain(row) {
|
||||
})
|
||||
}
|
||||
|
||||
// ---------- 导出 / 删除 ----------
|
||||
|
||||
function exportDataset(row) {
|
||||
window.open(`${location.origin}/api/v1/admin/datasets/export?datasetId=${row.id}`, '_blank')
|
||||
}
|
||||
// ---------- 删除 ----------
|
||||
|
||||
function removeDataset(row) {
|
||||
const warn =
|
||||
@@ -181,7 +178,8 @@ function imgUrl(u) {
|
||||
|
||||
function coverUrl(row) {
|
||||
if (!row.cover) return ''
|
||||
return imgUrl(`/api/v1/admin/datasets/cover?datasetId=${row.id}`)
|
||||
// v=updatedAt 版本参数:换封面后 URL 变化,强制浏览器重新拉取
|
||||
return imgUrl(`/api/v1/admin/datasets/cover?datasetId=${row.id}&v=${encodeURIComponent(row.updatedAt || '')}`)
|
||||
}
|
||||
|
||||
// 训练进度(百分比):有总轮数才显示比例
|
||||
@@ -265,7 +263,6 @@ onBeforeUnmount(() => {
|
||||
{{ row.trainingStatus === 'running' ? '训练中' : '开始训练' }}
|
||||
</el-button>
|
||||
<el-button size="small" :icon="Setting" @click="openConfig(row)">配置</el-button>
|
||||
<el-button size="small" :icon="Download" @click="exportDataset(row)">导出</el-button>
|
||||
<el-button size="small" type="danger" @click="removeDataset(row)">删除</el-button>
|
||||
</div>
|
||||
|
||||
@@ -283,7 +280,8 @@ onBeforeUnmount(() => {
|
||||
{{ trainStatusMap[row.trainingStatus] || row.trainingStatus }}
|
||||
</el-tag>
|
||||
</el-tooltip>
|
||||
<el-tag v-else :type="trainStatusTag[row.trainingStatus] || 'info'" size="small">
|
||||
<!-- 训练成功不显示「已训练」标签,只保留发布按钮 -->
|
||||
<el-tag v-else-if="row.trainingStatus !== 'success'" :type="trainStatusTag[row.trainingStatus] || 'info'" size="small">
|
||||
{{ trainStatusMap[row.trainingStatus] || row.trainingStatus }}
|
||||
</el-tag>
|
||||
<el-button v-if="row.trainingStatus === 'success' && row.trainingId" size="small" type="success" @click="publishModel(row)">
|
||||
@@ -316,12 +314,6 @@ onBeforeUnmount(() => {
|
||||
placeholder="中文/字母/数字/下划线/短横线,唯一且作磁盘目录名"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="图片来源">
|
||||
<el-radio-group v-model="createForm.source">
|
||||
<el-radio value="manual">手动上传</el-radio>
|
||||
<el-radio value="ai">AI 生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="createVisible = false">取消</el-button>
|
||||
@@ -404,13 +396,13 @@ onBeforeUnmount(() => {
|
||||
}
|
||||
.ds-cover {
|
||||
position: relative;
|
||||
height: 150px;
|
||||
aspect-ratio: 16 / 9;
|
||||
background: #f5f7fa;
|
||||
}
|
||||
.ds-cover img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: contain;
|
||||
object-fit: cover;
|
||||
display: block;
|
||||
}
|
||||
.ds-cover-placeholder {
|
||||
|
||||
Reference in New Issue
Block a user