查询
- 打印
- 导出Excel
+ 打印
+ 导出Excel
@@ -139,7 +139,6 @@ const userStore = useUserStore()
const mbStore = useCommonStore();
const route = useRoute();
-
const openDetail = ref(false)
const mxtableData = ref([])
const queryParams = ref({
@@ -155,7 +154,8 @@ const checkBoxs = ref([])
const originalColumn = ref([]) //原始列
const tableColumns = ref([]);
const Template = ref({})
-
+const exportLoading = ref(false)
+const printLoading = ref(false)
const instrGroupOptions = ref([])
const instrGroupFields = ref([
@@ -301,7 +301,6 @@ const getPrintFooterText = (col, idx) => {
// 打印
const print = () => {
- // 不直接改 originalColumn,拷贝一份,避免影响导出等其他功能
const printColumns = originalColumn.value.map(item => {
const matchTabCol = tableColumns.value.find(col => col.prop === item.paramCode)
return { ...item, paramSequence: matchTabCol ? matchTabCol.paramSequence : 0 }
@@ -312,50 +311,11 @@ const print = () => {
Column: printColumns,
Template: Template.value
}
-
+ printLoading.value = true
printTemplate(data).then(res => {
- // 后端错误 JSON 判断,避免静默失败
- if (res instanceof Blob && res.type.includes('application/json')) {
- const reader = new FileReader()
- reader.onload = e => {
- const err = JSON.parse(e.target.result)
- ElMessage.error(err.msg || '打印失败')
- }
- reader.readAsText(res)
- return
- }
-
- const blob = new Blob([res], { type: 'application/pdf' })
- const pdfUrl = URL.createObjectURL(blob)
-
- // 不要 display:none,Chrome 对隐藏 iframe 的 PDF 打印有兼容问题;移出屏幕即可
- const iframe = document.createElement('iframe')
- iframe.style.position = 'fixed'
- iframe.style.right = '0'
- iframe.style.bottom = '0'
- iframe.style.width = '0'
- iframe.style.height = '0'
- iframe.style.border = '0'
- iframe.src = pdfUrl
- document.body.appendChild(iframe)
-
- iframe.onload = () => {
- // 等 PDF 渲染完再打印,避免空白页
- setTimeout(() => {
- const win = iframe.contentWindow
- if (win) {
- win.focus()
- win.print() // Chrome/Firefox 阻塞到打印对话框关闭
- }
- // print() 阻塞时,这里在对话框关闭后才执行;留 2s 缓冲再清理
- setTimeout(() => {
- URL.revokeObjectURL(pdfUrl)
- iframe.remove()
- }, 2000)
- }, 300)
- }
- }).catch(() => {
- ElMessage.error('打印失败')
+ classCom.printBlobPDF(res)
+ }).finally(() => {
+ printLoading.value = false
})
}
@@ -374,18 +334,13 @@ const exportHandle = () => {
Column: originalColumn.value,
Template: Template.value
};
+ exportLoading.value = true;
exportTemplate(data).then(res => {
- //classCom.printBase64PDF(res.data, 'excel', '统计报表')
- // 若依拦截器对 blob 直接透传,res 就是 Blob
- const blob = new Blob([res], {
- type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
- })
- const link = document.createElement('a')
- link.href = URL.createObjectURL(blob)
- link.download = '导出_' + new Date().getTime() + '.xlsx'
- link.click()
- URL.revokeObjectURL(link.href) // 释放内存
+ classCom.exportFile(res, statsTitle.value)
+ }).finally(() => {
+ exportLoading.value = false;
})
+
}
const xmList = ref([])