feat: 数据集下载鉴权、MinIO 发布与数据库兼容增强

- 数据集下载接口鉴权:单文件直接返回、多文件打包 ZIP,前端统一走请求客户端携带 Token
- 预检/同步支持 MinIO 对象补建与资源副本记录,兼容接入 MinIO 前的历史数据集
- create_dataset 增加名称重复校验,软删记录释放名称并保留墓碑
- 数据处理发布结果支持写入 MinIO storage_objects 并关联 dataset_file
- 数据存储根目录支持 YG_FT_DATA_ROOT 环境变量
- SQL 迁移兼容旧版 approval_steps / retention_policies / data_process_results
- 训练日志图表按曲线独立过滤缺失采样点

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
wuyongtao
2026-08-18 14:45:16 +08:00
parent 6c1bf61ff7
commit 2adf78a6ed
10 changed files with 313 additions and 36 deletions

View File

@@ -63,12 +63,12 @@ async function loadAll() {
}
// 获取当前资源类型的列表
function currentResourceList() {
function currentResourceList(): Array<{ id: string; name: string }> {
if (form.resourceType === 'dataset') {
return datasets.value.map((d) => ({ id: d.id, name: d.name || d.id }))
return datasets.value.map((d: DatasetItem) => ({ id: String(d.id), name: d.name || String(d.id) }))
}
if (form.resourceType === 'trained_model') {
return models.value.map((m) => ({ id: String(m.id || m.name || ''), name: m.name || String(m.id) || '' }))
return models.value.map((m: TrainedModel) => ({ id: String(m.id || m.name || ''), name: m.name || String(m.id) || '' }))
}
return []
}
@@ -176,9 +176,10 @@ async function saveAcl() {
}
// 显示名称
function principalName(entry: AclEntry) {
const user = users.value.find((u) => u.id === entry.principal_id)
return user ? `${user.display_name || user.username}` : entry.principal_id
function principalName(entry: unknown) {
const aclEntry = entry as AclEntry
const user = users.value.find((u) => u.id === aclEntry.principal_id)
return user ? `${user.display_name || user.username}` : aclEntry.principal_id
}
onMounted(loadAll)
@@ -250,7 +251,7 @@ onMounted(loadAll)
v-for="p in row.permissions"
:key="p"
size="small"
:type="p === 'admin' ? 'danger' : p === 'delete' || p === 'write' ? 'warning' : ''"
:type="p === 'admin' ? 'danger' : p === 'delete' || p === 'write' ? 'warning' : undefined"
>{{ p }}</el-tag>
</el-space>
</template>