diff --git a/web-admin/src/views/pl/vehicle/index.vue b/web-admin/src/views/pl/vehicle/index.vue
index 480ad5a2b..5b1972070 100644
--- a/web-admin/src/views/pl/vehicle/index.vue
+++ b/web-admin/src/views/pl/vehicle/index.vue
@@ -64,6 +64,15 @@
filename="车辆列表.xlsx"
/>
+
+ 批量下载证书 ZIP
+
+
previewListPhoto(raw)
const handlePhotoDownload = (raw?: string | null) => downloadListPhoto(raw)
@@ -665,6 +675,7 @@ const { handlePersonnelFormSaved } = usePlVehiclePersonnelQuickCreate({
onSelect: handlePersonnelSelect
})
const selectedRows = ref([])
+const certZipLoading = ref(false)
function buildListQueryParams(): Record {
const params: Record = {
@@ -1047,6 +1058,32 @@ function handleSelectionChange(rows: Vehicle[]) {
selectedRows.value = rows
}
+async function handleBatchDownloadCertZip() {
+ if (!selectedRows.value.length || certZipLoading.value) return
+ certZipLoading.value = true
+ try {
+ const result = await buildAndSaveVehicleCertZip(selectedRows.value)
+ if (!result.zipName && result.okCount === 0 && result.failCount === 0) {
+ ElMessage.warning('无可下载附件')
+ return
+ }
+ if (!result.zipName && result.failCount > 0) {
+ ElMessage.error('下载失败,请稍后重试')
+ return
+ }
+ if (result.failCount > 0) {
+ ElMessage.warning(`已打包 ${result.okCount} 个文件,${result.failCount} 个失败`)
+ return
+ }
+ ElMessage.success(`下载成功(${result.okCount} 个文件)`)
+ } catch (e) {
+ console.error(e)
+ ElMessage.error('下载失败,请稍后重试')
+ } finally {
+ certZipLoading.value = false
+ }
+}
+
function handleToolbarEdit() {
if (selectedRows.value.length !== 1) {
ElMessage.warning('请选择一条车辆记录')