This commit is contained in:
2026-08-28 14:38:39 +08:00
parent 283455eb52
commit 9fe0fd6cfc
6 changed files with 13 additions and 74 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -4,8 +4,8 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>视野管理端</title>
<script type="module" crossorigin src="/admin/assets/index-CLCH2RGt.js"></script>
<link rel="stylesheet" crossorigin href="/admin/assets/index-CQqGq03-.css">
<script type="module" crossorigin src="/admin/assets/index-DOXyyubn.js"></script>
<link rel="stylesheet" crossorigin href="/admin/assets/index-CLxGZFm2.css">
</head>
<body>
<div id="app"></div>
+4 -4
View File
@@ -45,9 +45,9 @@ imageGen:
promptTemplate: "野外大远景实拍:广角镜头下{scene}{distanceWord}有{count}{species}的小小身影在{action},鸟离镜头很远,只是很小的深色鸟形轮廓,隐约可辨,画面绝大部分是{scene},没有任何靠近镜头的动物,{light},写实野外摄影,真实照片质感"
distanceWord: "二十多米外" # 与校验距离带呼应的观感词
speciesByDataset: # 数据集名 → 物种池(表单未填动物名称时随机取一个)
鸽子: [家鸽, 山斑鸠, 火斑鸠, 虎纹斑鸠, 珠颈斑鸠]
: [雉鸡]
兔子: [兔]
鸽子: [家鸽,火斑鸠,虎纹斑鸠,珠颈斑鸠,灰斑鸠]
: [雉鸡]
兔子: []
鸭子: [野鸭]
鹌鹑: [鹌鹑]
scenes: # 环境场景池(同一短语在模板中出现两次,须两处都读得通)
@@ -72,7 +72,7 @@ imageGen:
default: 0.35
家鸽: 0.35
珠颈斑鸠: 0.30
斑鸠: 0.30
斑鸠: 0.30
火斑鸠: 0.25
虎纹斑鸠: 0.30
野鸡: 0.45
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

+5 -66
View File
@@ -57,11 +57,8 @@ async function loadAll() {
}
}
// ---------- 添加图片(本地上传 / AI 生成 二选一 ----------
// ---------- 添加图片(AI 生成) ----------
const addVisible = ref(false)
const addMode = ref('upload') // upload | ai
const uploadList = ref([])
const uploading = ref(false)
const genForm = reactive({ species: '', count: 1, size: '704x1248', animalCount: 3, distanceMin: 20, distanceMax: 30 })
const speciesOptions = ref([])
const generating = ref(false)
@@ -74,8 +71,6 @@ function loadGenOptions() {
}
function openAdd() {
addMode.value = 'upload'
uploadList.value = []
genForm.species = ''
loadGenOptions()
genForm.count = 1
@@ -86,29 +81,6 @@ function openAdd() {
addVisible.value = true
}
function submitUpload() {
if (!uploadList.value.length) {
ElMessage.warning('请选择图片文件')
return
}
uploading.value = true
const fd = new FormData()
fd.append('datasetId', datasetId.value)
uploadList.value.forEach((f) => fd.append('files', f.raw))
request
.post('/datasets/upload', fd, { timeout: 300000 })
.then((data) => {
const extra = data.skipped ? `${data.skipped} 张重名跳过)` : ''
ElMessage.success(`已上传 ${data.added || 0}${extra},自动标注处理中…`)
uploadList.value = []
addVisible.value = false
loadAll()
})
.finally(() => {
uploading.value = false
})
}
function submitGen() {
if (genForm.distanceMax < genForm.distanceMin) {
ElMessage.warning('距离范围上限不能小于下限')
@@ -629,33 +601,9 @@ onBeforeUnmount(() => {
<el-empty v-else-if="!loading" description="暂无图片,请上传或 AI 生成" />
</div>
<!-- 添加图片本地上传 / AI 生成表单随选择切换 -->
<el-dialog v-model="addVisible" title="添加图片" width="min(520px, 92vw)" append-to-body>
<div class="add-mode">
<el-radio-group v-model="addMode">
<el-radio-button value="upload">本地上传</el-radio-button>
<el-radio-button value="ai">AI 生成</el-radio-button>
</el-radio-group>
</div>
<div v-if="addMode === 'upload'" class="add-upload">
<el-upload
v-model:file-list="uploadList"
:auto-upload="false"
multiple
:limit="50"
accept=".jpg,.jpeg,.png"
list-type="picture-card"
>
<div class="upload-tile">
<el-icon :size="22"><Plus /></el-icon>
<div class="upload-tile-text">点击选择图片</div>
</div>
</el-upload>
<div class="add-tip">支持 jpg/jpeg/png 多选已选显示预览可点右上角×移除与库内重名的文件自动跳过</div>
</div>
<el-form v-else label-width="90px">
<!-- 添加图片AI 生成 -->
<el-dialog v-model="addVisible" title="AI 生成图片" width="min(520px, 92vw)" append-to-body>
<el-form label-width="90px">
<el-form-item label="动物名称">
<el-select
v-model="genForm.species"
@@ -693,16 +641,7 @@ onBeforeUnmount(() => {
</el-form>
<template #footer>
<el-button
v-if="addMode === 'upload'"
type="primary"
:loading="uploading"
:disabled="!uploadList.length"
@click="submitUpload"
>
上传 {{ uploadList.length ? `${uploadList.length}` : '' }}
</el-button>
<el-button v-else type="primary" :loading="generating" @click="submitGen">开始生成可能需数分钟</el-button>
<el-button type="primary" :loading="generating" @click="submitGen">开始生成可能需数分钟</el-button>
</template>
</el-dialog>