diff --git a/apps/web-antd/src/locales/langs/en-US/common.json b/apps/web-antd/src/locales/langs/en-US/common.json new file mode 100644 index 00000000..cdfabf4c --- /dev/null +++ b/apps/web-antd/src/locales/langs/en-US/common.json @@ -0,0 +1,7 @@ +{ + "export": { + "title": "Export", + "loading": "Exporting...", + "canceled": "Export has been cancelled." + } +} diff --git a/apps/web-antd/src/locales/langs/en-US/pages.json b/apps/web-antd/src/locales/langs/en-US/pages.json index 901a75a1..ca0359ca 100644 --- a/apps/web-antd/src/locales/langs/en-US/pages.json +++ b/apps/web-antd/src/locales/langs/en-US/pages.json @@ -22,6 +22,7 @@ "tip": "Tip", "enable": "On", "disable": "Off", - "beforeCloseTip": "You have unsaved changes. Are you sure you want to exit?" + "beforeCloseTip": "You have unsaved changes. Are you sure you want to exit?", + "cancel": "Cancel" } } diff --git a/apps/web-antd/src/locales/langs/zh-CN/common.json b/apps/web-antd/src/locales/langs/zh-CN/common.json new file mode 100644 index 00000000..2577ab8b --- /dev/null +++ b/apps/web-antd/src/locales/langs/zh-CN/common.json @@ -0,0 +1,7 @@ +{ + "export": { + "title": "导出", + "loading": "导出中...", + "canceled": "导出已取消" + } +} diff --git a/apps/web-antd/src/locales/langs/zh-CN/pages.json b/apps/web-antd/src/locales/langs/zh-CN/pages.json index eab87798..c39978e2 100644 --- a/apps/web-antd/src/locales/langs/zh-CN/pages.json +++ b/apps/web-antd/src/locales/langs/zh-CN/pages.json @@ -22,6 +22,7 @@ "tip": "提示", "enable": "启用", "disable": "禁用", - "beforeCloseTip": "您有未保存的更改,确认要退出吗?" + "beforeCloseTip": "您有未保存的更改,确认要退出吗?", + "cancel": "取消" } } diff --git a/apps/web-antd/src/utils/file/export.tsx b/apps/web-antd/src/utils/file/export.tsx new file mode 100644 index 00000000..fbbdefb3 --- /dev/null +++ b/apps/web-antd/src/utils/file/export.tsx @@ -0,0 +1,76 @@ +import type { loginInfoExport } from '#/api/monitor/logininfo'; + +import { ref } from 'vue'; + +import { useRequest } from 'alova/client'; +import { Button } from 'antdv-next'; +import dayjs from 'dayjs'; + +import { $t } from '#/locales'; + +import { downloadByData } from './download'; + +// TODO: 这里的泛型实在难写 且基本都是统一按格式 +export type ExportBlobApi = typeof loginInfoExport; + +export interface ExportBlobFuncOptions { + fileName: string; + data?: any; +} + +export function useBlobExport(api: ExportBlobApi) { + const exportLoading = ref(false); + + const { send, abort } = useRequest(api, { immediate: false }); + + async function exportBlob(options: ExportBlobFuncOptions) { + const { fileName, data } = options; + + const hide = window.message.loading({ + content: ( +