From a623f81fec36dffa9ad0f8effbd1954f3efa3919 Mon Sep 17 00:00:00 2001 From: dap <15891557205@163.com> Date: Fri, 13 Sep 2024 09:56:05 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=AF=BC=E5=87=BAexcel=20demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/locales/langs/en-US.json | 3 +- apps/web-antd/src/locales/langs/zh-CN.json | 3 +- apps/web-antd/src/utils/file/download.ts | 48 ++++++++++++++++++- .../src/views/system/config/index.vue | 8 +++- 4 files changed, 57 insertions(+), 5 deletions(-) diff --git a/apps/web-antd/src/locales/langs/en-US.json b/apps/web-antd/src/locales/langs/en-US.json index 5e75419a..d23790d7 100644 --- a/apps/web-antd/src/locales/langs/en-US.json +++ b/apps/web-antd/src/locales/langs/en-US.json @@ -49,7 +49,8 @@ "download": "Download", "sync": "Sync", "refresh": "Refresh", - "generate": "Generate" + "generate": "Generate", + "downloadLoading": "Downloading... Please wait." } } } diff --git a/apps/web-antd/src/locales/langs/zh-CN.json b/apps/web-antd/src/locales/langs/zh-CN.json index 78207486..79e90cfe 100644 --- a/apps/web-antd/src/locales/langs/zh-CN.json +++ b/apps/web-antd/src/locales/langs/zh-CN.json @@ -49,7 +49,8 @@ "download": "下载", "sync": "同步", "refresh": "刷新", - "generate": "生成" + "generate": "生成", + "downloadLoading": "下载中, 请稍后..." } } } diff --git a/apps/web-antd/src/utils/file/download.ts b/apps/web-antd/src/utils/file/download.ts index 667b7d9f..8bea0c1e 100644 --- a/apps/web-antd/src/utils/file/download.ts +++ b/apps/web-antd/src/utils/file/download.ts @@ -1,6 +1,35 @@ -import { openWindow } from '..'; +import { $t } from '@vben/locales'; + +import { message } from 'ant-design-vue'; + import { dataURLtoBlob, urlToBase64 } from './base64Conver'; +/** + * 下载excel文件 + * @param [func] axios函数 + * @param [fileName] 文件名称 不需要带xlsx后缀 + * @param [requestData] 请求参数 + * @param [withRandomName] 是否带随机文件名 + * + * @return void + */ +export async function downloadExcel( + func: (data?: any) => Promise, + fileName: string, + requestData: any = {}, + withRandomName = true, +) { + const hideLoading = message.loading($t('pages.common.downloadLoading'), 0); + try { + const data = await func(requestData); + downloadExcelFile(data, fileName, withRandomName); + } catch (error) { + console.error(error); + } finally { + hideLoading(); + } +} + export function downloadExcelFile( data: BlobPart, filename: string, @@ -78,6 +107,23 @@ export function downloadByData( window.URL.revokeObjectURL(blobURL); } +export function openWindow( + url: string, + opt?: { + noopener?: boolean; + noreferrer?: boolean; + target?: '_blank' | '_self' | string; + }, +) { + const { noopener = true, noreferrer = true, target = '__blank' } = opt || {}; + const feature: string[] = []; + + noopener && feature.push('noopener=yes'); + noreferrer && feature.push('noreferrer=yes'); + + window.open(url, target, feature.join(',')); +} + /** * Download file according to file address * @param {*} sUrl diff --git a/apps/web-antd/src/views/system/config/index.vue b/apps/web-antd/src/views/system/config/index.vue index 0750a5da..ab13185f 100644 --- a/apps/web-antd/src/views/system/config/index.vue +++ b/apps/web-antd/src/views/system/config/index.vue @@ -11,7 +11,8 @@ import { DictEnum } from '@vben/constants'; import { Space, Table } from 'ant-design-vue'; -import { configList } from '#/api/system/config'; +import { configExport, configList } from '#/api/system/config'; +import { downloadExcel } from '#/utils/file/download'; import { renderDict } from '#/utils/render'; import configModal from './config-modal.vue'; @@ -83,7 +84,10 @@ const columns: ColumnsType = [