task-260(admin.html观感对齐): 软件版本页对齐(zip 校验文案/发布成功含链接/下载列/空态)

This commit is contained in:
2026-09-05 21:57:22 +08:00
parent 8120ba48f6
commit 6bd44e6884
6 changed files with 120 additions and 22 deletions
@@ -32,23 +32,29 @@ function onFileChange(file: File) {
async function submitUpload() {
if (!isNonEmptyVersion(newVersion.value)) {
ElMessage.warning('版本号不能为空')
ElMessage.warning('请填写版本号')
return
}
if (!pickedFile.value) {
ElMessage.warning('请选择程序压缩包')
ElMessage.warning('请选择 zip 压缩包')
return
}
if (!/\.zip$/i.test(pickedFile.value.name)) {
ElMessage.warning('仅支持 .zip 格式')
return
}
uploading.value = true
try {
await uploadSoftwareVersion(newVersion.value.trim(), pickedFile.value, pickedFile.value.name)
ElMessage.success('上传成功')
const created = await uploadSoftwareVersion(newVersion.value.trim(), pickedFile.value, pickedFile.value.name)
const version = created?.version || newVersion.value.trim()
const link = created?.fileUrl
ElMessage.success(link ? `发布成功。版本:${version},链接:${link}` : `发布成功。版本:${version}`)
uploadVisible.value = false
newVersion.value = ''
pickedFile.value = null
load()
} catch (error) {
ElMessage.error(error instanceof Error ? error.message : '上传失败')
ElMessage.error(error instanceof Error ? error.message : '发布失败')
} finally {
uploading.value = false
}
@@ -70,9 +76,9 @@ onMounted(load)
</div>
<el-card shadow="never">
<el-table v-loading="loading" :data="items" stripe border>
<el-table v-loading="loading" :data="items" stripe border empty-text="暂无版本">
<el-table-column prop="version" label="版本号" min-width="180" />
<el-table-column label="下载" min-width="260">
<el-table-column label="下载链接" min-width="240">
<template #default="{ row }">
<el-link v-if="(row as SoftwareVersionItem).fileUrl" type="primary" :href="(row as SoftwareVersionItem).fileUrl" target="_blank">{{ (row as SoftwareVersionItem).fileUrl }}</el-link>
<span v-else class="dim"></span>
@@ -81,6 +87,12 @@ onMounted(load)
<el-table-column prop="createdAt" label="创建时间" min-width="190">
<template #default="{ row }">{{ formatDateTime(row.createdAt) }}</template>
</el-table-column>
<el-table-column label="操作" width="90" fixed="right">
<template #default="{ row }">
<el-link v-if="(row as SoftwareVersionItem).fileUrl" type="primary" :href="(row as SoftwareVersionItem).fileUrl" target="_blank">下载</el-link>
<span v-else class="dim"></span>
</template>
</el-table-column>
</el-table>
</el-card>
@@ -90,7 +102,7 @@ onMounted(load)
<el-input v-model="newVersion" placeholder="如 1.0.2" />
</el-form-item>
<el-form-item label="程序压缩包" required>
<el-upload :auto-upload="false" :limit="1" accept=".zip,.rar,.7z,.exe" :on-change="(file: any) => onFileChange(file.raw)" :on-remove="() => (pickedFile = null)">
<el-upload :auto-upload="false" :limit="1" accept=".zip" :on-change="(file: any) => onFileChange(file.raw)" :on-remove="() => (pickedFile = null)">
<el-button>选择文件</el-button>
</el-upload>
<div v-if="pickedFile" class="dim">{{ pickedFile.name }}</div>