This commit is contained in:
吴红兵
2026-03-05 09:37:01 +08:00
parent cc9e0a1022
commit bff8907f88
3 changed files with 54 additions and 13 deletions

View File

@@ -370,6 +370,15 @@ export function downloadFileById(fileId: string) {
});
}
export function previewFileById(fileId: string) {
return request({
url: '/purchase/purchasingfiles/previewById',
method: 'get',
params: { fileId },
responseType: 'blob'
});
}
/**
* 批量获取文件下载地址列表
* @param purchaseId 采购申请ID

View File

@@ -98,10 +98,10 @@
</template>
<script setup lang="ts">
import { ref, computed } from 'vue'
import { ref, computed, onUnmounted } from 'vue'
import { FolderOpened, Download, Document } from '@element-plus/icons-vue'
import { useMessage } from '/@/hooks/message'
import { listDownloadUrls, getArchiveDownloadUrl } from '/@/api/purchase/purchasingrequisition'
import { listDownloadUrls, getArchiveDownloadUrl, downloadFileById, previewFileById } from '/@/api/purchase/purchasingrequisition'
import other from '/@/utils/other'
interface FileItem {
@@ -117,6 +117,7 @@ const loading = ref(false)
const downloading = ref(false)
const previewVisible = ref(false)
const previewUrl = ref('')
const previewLoading = ref(false)
const purchaseId = ref('')
const purchaseNo = ref('')
const fileList = ref<FileItem[]>([])
@@ -155,9 +156,9 @@ const isPdfFile = (fileName: string): boolean => {
return ext === 'pdf'
}
const handlePreview = (row: FileItem) => {
if (!row.downloadUrl) {
useMessage().warning('文件预览地址不存在')
const handlePreview = async (row: FileItem) => {
if (!row.id) {
useMessage().warning('文件ID不存在')
return
}
@@ -167,16 +168,41 @@ const handlePreview = (row: FileItem) => {
return
}
// 使用iframe预览PDF通过后端下载接口获取文件流
previewUrl.value = row.downloadUrl
previewLoading.value = true
previewVisible.value = true
previewUrl.value = ''
try {
const res = await previewFileById(row.id)
const blob = res as unknown as Blob
const url = window.URL.createObjectURL(blob)
previewUrl.value = url
} catch (err: any) {
useMessage().error(err?.msg || '预览失败')
previewVisible.value = false
} finally {
previewLoading.value = false
}
}
const handleDownloadFile = (row: FileItem) => {
if (row.downloadUrl) {
window.open(row.downloadUrl, '_blank')
} else {
useMessage().warning('文件下载地址不存在')
const handleDownloadFile = async (row: FileItem) => {
if (!row.id) {
useMessage().warning('文件ID不存在')
return
}
try {
const res = await downloadFileById(row.id)
const blob = res as unknown as Blob
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = row.fileTitle || 'download'
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
window.URL.revokeObjectURL(url)
} catch (err: any) {
useMessage().error(err?.msg || '下载失败')
}
}
@@ -197,6 +223,12 @@ const handleDownloadAll = () => {
}
}
onUnmounted(() => {
if (previewUrl.value) {
window.URL.revokeObjectURL(previewUrl.value)
}
})
defineExpose({
open
})

View File

@@ -261,7 +261,7 @@
<!-- 需求部门/内审部门操作按钮 -->
<el-button v-if="canSubmitToAsset" type="primary" @click="handleSubmitToAsset">提交至资产管理处</el-button>
<!-- 通用操作按钮 -->
<el-button v-if="canReturn" type="warning" @click="handleReturn">退回修改</el-button>
<el-button v-if="canReturn" type="primary" @click="handleReturn">提交招标代理</el-button>
<el-button v-if="canComplete" type="success" @click="handleComplete">确认流程结束</el-button>
<el-button @click="handleClose">关闭</el-button>
</div>