feat: 版本管理页面添加下载补丁包和完整包的操作按钮

- 补丁类型版本显示两个下载按钮:下载补丁包、下载完整包
- 全量版本显示一个下载按钮
- 添加相应的中英文翻译

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-03 04:12:21 +08:00
parent 62ea1da578
commit fd6384191c
4 changed files with 46 additions and 4 deletions
@@ -1,4 +1,4 @@
import { Download, Edit, Trash2, Upload, Archive, ArrowDownToLine } from 'lucide-vue-next'
import { Download, Edit, Trash2, Upload, Archive, ArrowDownToLine, Package } from 'lucide-vue-next'
import type { ColumnDef } from '@tanstack/vue-table'
import { h } from 'vue'
@@ -10,6 +10,7 @@ import Button from '@/components/ui/button/Button.vue'
interface ColumnOptions {
onDownload: (row: Version) => void
onDownloadFullPackage?: (row: Version) => void
onEdit: (row: Version) => void
onDelete: (row: Version) => void
onPublish?: (row: Version) => void
@@ -135,8 +136,35 @@ export function getColumns(options: ColumnOptions, t: (key: string) => string):
cell: ({ row }) => {
const buttons = []
// 下载按钮
if (row.original.file_path) {
// 下载按钮逻辑
if (row.original.update_type === 'patch') {
// 补丁版本:显示下载补丁包和下载完整包两个按钮
if (row.original.file_path) {
buttons.push(
h(Button, {
variant: 'ghost',
size: 'sm',
title: t('admin.versions.actions.downloadPatch'),
onClick: () => options.onDownload(row.original),
}, () => [
h(Download, { class: 'h-4 w-4 text-orange-500' }),
]),
)
}
if (row.original.full_package_path && options.onDownloadFullPackage) {
buttons.push(
h(Button, {
variant: 'ghost',
size: 'sm',
title: t('admin.versions.actions.downloadFullPackage'),
onClick: () => options.onDownloadFullPackage?.(row.original),
}, () => [
h(Package, { class: 'h-4 w-4 text-green-500' }),
]),
)
}
} else if (row.original.file_path) {
// 全量版本:只显示一个下载按钮
buttons.push(
h(Button, {
variant: 'ghost',
@@ -158,7 +186,7 @@ export function getColumns(options: ColumnOptions, t: (key: string) => string):
title: t('admin.versions.actions.downloadDelta'),
onClick: () => options.onDownloadDelta?.(row.original),
}, () => [
h(ArrowDownToLine, { class: 'h-4 w-4 text-orange-500' }),
h(ArrowDownToLine, { class: 'h-4 w-4 text-blue-500' }),
]),
)
}
@@ -162,6 +162,15 @@ function downloadVersion(version: Version) {
window.open(downloadUrl, '_blank')
}
function downloadFullPackage(version: Version) {
const path = version.full_package_path || version.file_path
if (!path)
return
const token = localStorage.getItem('token')
const downloadUrl = `${path}?token=${token}`
window.open(downloadUrl, '_blank')
}
function confirmDelete(version: Version) {
deleteTarget.value = version
deleteDialogOpen.value = true
@@ -408,6 +417,7 @@ watch([appFilter, strategyFilter, typeFilter, methodFilter, searchFilter], () =>
:data="versions"
:server-pagination="serverPagination"
:on-download="downloadVersion"
:on-download-full-package="downloadFullPackage"
:on-edit="goToEdit"
:on-delete="confirmDelete"
:on-publish="confirmPublish"
+2
View File
@@ -1440,6 +1440,8 @@
},
"actions": {
"download": "Download",
"downloadPatch": "Download Patch",
"downloadFullPackage": "Download Full Package",
"downloadDelta": "Download Delta",
"edit": "Edit",
"delete": "Delete",
+2
View File
@@ -1418,6 +1418,8 @@
},
"actions": {
"download": "下载",
"downloadPatch": "下载补丁包",
"downloadFullPackage": "下载完整包",
"downloadDelta": "下载增量包",
"edit": "编辑",
"delete": "删除",