Browse Source

feat: export

xingyu4j 2 years ago
parent
commit
4065387b54

+ 15 - 1
yudao-ui-admin-vue3/src/hooks/web/useVxeGrid.ts

@@ -4,6 +4,7 @@ import { useAppStore } from '@/store/modules/app'
 import { VxeAllSchemas } from './useVxeCrudSchemas'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useMessage } from '@/hooks/web/useMessage'
+import download from '@/utils/download'
 
 const { t } = useI18n()
 const message = useMessage() // 消息弹窗
@@ -144,11 +145,24 @@ export const useVxeGrid = <T = any>(config?: UseVxeGridConfig<T>) => {
         })
     })
   }
+  // 导出
+  const exportList = async (ref, fileName?: string) => {
+    await nextTick()
+    const queryParams = Object.assign(
+      {},
+      JSON.parse(JSON.stringify(ref.value?.getProxyInfo()?.form))
+    )
+    message.exportConfirm().then(async () => {
+      const res = await (config?.exportListApi && config?.exportListApi(queryParams))
+      download.excel(res as unknown as Blob, fileName ? fileName : 'excel.xls')
+    })
+  }
 
   return {
     gridOptions,
     reloadList,
     getSearchData,
-    delList
+    delList,
+    exportList
   }
 }

+ 4 - 10
yudao-ui-admin-vue3/src/views/system/loginlog/index.vue

@@ -30,21 +30,19 @@
 // 全局相关的 import
 import { ref } from 'vue'
 import { useI18n } from '@/hooks/web/useI18n'
-import { useMessage } from '@/hooks/web/useMessage'
 import { useVxeGrid } from '@/hooks/web/useVxeGrid'
 import { VxeGridInstance } from 'vxe-table'
 // 业务相关的 import
 import { allSchemas } from './loginLog.data'
 import { getLoginLogPageApi, exportLoginLogApi, LoginLogVO } from '@/api/system/loginLog'
-import download from '@/utils/download'
 
 const { t } = useI18n() // 国际化
-const message = useMessage() // 消息弹窗
 // 列表相关的变量
 const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref
-const { gridOptions, getSearchData } = useVxeGrid<LoginLogVO>({
+const { gridOptions, exportList } = useVxeGrid<LoginLogVO>({
   allSchemas: allSchemas,
-  getListApi: getLoginLogPageApi
+  getListApi: getLoginLogPageApi,
+  exportListApi: exportLoginLogApi
 })
 
 // 详情操作
@@ -60,10 +58,6 @@ const handleDetail = async (row: LoginLogVO) => {
 
 // 导出操作
 const handleExport = async () => {
-  message.exportConfirm().then(async () => {
-    const queryParams = await getSearchData(xGrid)
-    const res = await exportLoginLogApi(queryParams)
-    download.excel(res, '登录列表.xls')
-  })
+  exportList(xGrid, '登录列表.xls')
 }
 </script>

+ 4 - 10
yudao-ui-admin-vue3/src/views/system/operatelog/index.vue

@@ -45,21 +45,19 @@
 // 全局相关的 import
 import { ref } from 'vue'
 import { useI18n } from '@/hooks/web/useI18n'
-import { useMessage } from '@/hooks/web/useMessage'
 import { useVxeGrid } from '@/hooks/web/useVxeGrid'
 import { VxeGridInstance } from 'vxe-table'
 // 业务相关的 import
 import * as OperateLogApi from '@/api/system/operatelog'
 import { allSchemas } from './operatelog.data'
-import download from '@/utils/download'
 
 const { t } = useI18n() // 国际化
-const message = useMessage() // 消息弹窗
 // 列表相关的变量
 const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref
-const { gridOptions, getSearchData } = useVxeGrid<OperateLogApi.OperateLogVO>({
+const { gridOptions, exportList } = useVxeGrid<OperateLogApi.OperateLogVO>({
   allSchemas: allSchemas,
-  getListApi: OperateLogApi.getOperateLogPageApi
+  getListApi: OperateLogApi.getOperateLogPageApi,
+  exportListApi: OperateLogApi.exportOperateLogApi
 })
 
 // 弹窗相关的变量
@@ -76,10 +74,6 @@ const handleDetail = (row: OperateLogApi.OperateLogVO) => {
 
 // 导出操作
 const handleExport = async () => {
-  message.exportConfirm().then(async () => {
-    const queryParams = await getSearchData(xGrid)
-    const res = await OperateLogApi.exportOperateLogApi(queryParams)
-    download.excel(res, '岗位列表.xls')
-  })
+  exportList(xGrid, '岗位列表.xls')
 }
 </script>

+ 4 - 6
yudao-ui-admin-vue3/src/views/system/post/index.vue

@@ -84,16 +84,16 @@ import { FormExpose } from '@/components/Form'
 // 业务相关的 import
 import * as PostApi from '@/api/system/post'
 import { rules, allSchemas } from './post.data'
-import download from '@/utils/download'
 
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
 // 列表相关的变量
 const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref
-const { gridOptions, reloadList, delList, getSearchData } = useVxeGrid<PostApi.PostVO>({
+const { gridOptions, reloadList, delList, exportList } = useVxeGrid<PostApi.PostVO>({
   allSchemas: allSchemas,
   getListApi: PostApi.getPostPageApi,
-  delListApi: PostApi.deletePostApi
+  delListApi: PostApi.deletePostApi,
+  exportListApi: PostApi.exportPostApi
 })
 // 弹窗相关的变量
 const dialogVisible = ref(false) // 是否显示弹出层
@@ -117,9 +117,7 @@ const handleCreate = () => {
 
 // 导出操作
 const handleExport = async () => {
-  const queryParams = await getSearchData(xGrid)
-  const res = await PostApi.exportPostApi(queryParams)
-  download.excel(res, '岗位列表.xls')
+  await exportList(xGrid, '岗位列表.xls')
 }
 
 // 修改操作