From f677776c31f1372ab20f794046288da2a271e038 Mon Sep 17 00:00:00 2001 From: pfl <14579250+shadowman1@user.noreply.gitee.com> Date: Fri, 18 Apr 2025 17:05:35 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9C=80=E6=B1=82=E6=96=B0=E5=A2=9E=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=8F=8A=E6=89=B9=E9=87=8F=E5=AF=BC=E5=87=BA=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TestProjectController.java | 25 ++++++++ test-ui/src/utils/request.js | 57 +++++++++++++++++++ test-ui/src/views/test/project/index.vue | 47 ++++++++++++++- 3 files changed, 126 insertions(+), 3 deletions(-) diff --git a/test-test/src/main/java/com/test/test/controller/TestProjectController.java b/test-test/src/main/java/com/test/test/controller/TestProjectController.java index 15aa2c3..26398a3 100644 --- a/test-test/src/main/java/com/test/test/controller/TestProjectController.java +++ b/test-test/src/main/java/com/test/test/controller/TestProjectController.java @@ -5,11 +5,13 @@ import com.test.common.core.controller.BaseController; import com.test.common.core.domain.AjaxResult; import com.test.common.core.page.TableDataInfo; import com.test.common.enums.BusinessType; +import com.test.common.utils.poi.ExcelUtil; import com.test.test.domain.TestProject; import com.test.test.domain.qo.IDQO; import com.test.test.domain.qo.TestProjectListQO; import com.test.test.service.ITestProjectService; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; @@ -75,4 +77,27 @@ public class TestProjectController extends BaseController { public AjaxResult editProject(@RequestBody TestProject testProject) { return toAjax(testProjectService.updateTestProject(testProject)); } + + /** + * 导出需求列表 + */ + @Log(title = "需求", businessType = BusinessType.EXPORT) + @PostMapping("/exportProject") + public void exportProject(HttpServletResponse response, + @RequestBody TestProjectListQO qo) { + List list = testProjectService.selectTestProjectList(qo); + ExcelUtil util = new ExcelUtil(TestProject.class); + util.exportExcel(response, list, "需求数据"); + } + + /** + * 批量导出需求列表 + */ + @Log(title = "需求", businessType = BusinessType.EXPORT) + @PostMapping("/batchExportProject") + public void batchExportProject(HttpServletResponse response, + @RequestBody List list) { + ExcelUtil util = new ExcelUtil(TestProject.class); + util.exportExcel(response, list, "需求数据"); + } } diff --git a/test-ui/src/utils/request.js b/test-ui/src/utils/request.js index c7064dd..e933d36 100644 --- a/test-ui/src/utils/request.js +++ b/test-ui/src/utils/request.js @@ -149,4 +149,61 @@ export function download(url, params, filename, config) { }) } +function requestDownload0(options, filename, isSave = true) { + return service({ + ...options, + }).then(async (data) => { + downloadLoadingInstance?.close() + const isBlob = blobValidate(data); + if (isBlob) { + return data + } else { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg); + return null + } + }).then(data => { + if (data && isSave) { + const blob = new Blob([data]) + saveAs(blob, filename) + } + return data + }).catch((r) => { + console.error(r) + Message.error('下载文件出现错误,请联系管理员!') + downloadLoadingInstance?.close() + }) +} + +/** + * 下载文件;扩展原下载方法,支持get请求(默认post) + * + * @param url 下载地址 + * @param params 下载参数 + * @param data 请求体 + * @param filename 保存文件名称 + * @param config 请求参数配置 + * @param isSave 是否直接保存至本地 + * @returns Promise 若不保存至本地,返回带下载结果的Promise + */ +export function requestDownload({ url, async, params, data, fileName, isSave = true, ...config }) { + if (!async) downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) + const method = config.method || 'post' + const options = { + url, + params, + data, + method, + async, + responseType: 'blob', + ...config, + } + if (!!params && !options.transformRequest) { + options.transformRequest = [(params) => { return params ? tansParams(params) : params }] + } + return requestDownload0(options, fileName, isSave) +} + export default service diff --git a/test-ui/src/views/test/project/index.vue b/test-ui/src/views/test/project/index.vue index 59c9d79..9f1ac09 100644 --- a/test-ui/src/views/test/project/index.vue +++ b/test-ui/src/views/test/project/index.vue @@ -78,7 +78,7 @@ - + @@ -108,8 +108,8 @@
- 全部导出 - 批量导出 + 全部导出 + 批量导出
import {addProject, delProject, getProjectDetail, getProjectList, managerList, updateProject} from "@/api/test/project"; import SimpleOptions from "@/components/FormItem/option/SimpleOptions.vue"; +import {requestDownload} from "@/utils/request"; export default { name: 'project', @@ -295,6 +296,8 @@ export default { addOpen: false, //编辑弹窗 editOpen: false, + selectedRows: [], + selectedData: [], managerList: [], queryParams: { serialNumber: '', @@ -333,6 +336,9 @@ export default { }, }, methods: { + handleSelectionChange(selection) { + this.selectedRows = selection; + }, handleTabClick(tab) { this.activeTab = tab.name; this.getList(); @@ -466,6 +472,41 @@ export default { this.$message.error('编辑失败') this.editSubmitLoading = false }) + }, + /** 全部导出按钮操作 */ + handleExport() { + const [startCreateTime, endCreateTime] = this.queryParams.createTime || [] + this.queryParams.startCreateTime = startCreateTime + this.queryParams.endCreateTime = endCreateTime + const {pageNum, pageSize, ...rest} = this.queryParams + requestDownload({ + url: '/test/project/exportProject', + fileName: `需求列表信息_${new Date().getTime()}.xlsx`, + data: rest, + }) + }, + /** 批量导出按钮操作 */ + handleSelectExport() { + this.selectedData = this.selectedRows.map(row => ({ + serialNumber: row.serialNumber, + name: row.name, + outline: row.outline, + detail: row.detail, + manager: row.manager, + priority: row.priority, + estimatedTime: row.estimatedTime, + source: row.source, + type: row.type, + version: row.version, + createTime: row.createTime, + status: row.status + })); + console.log('selectedData', this.selectedData) + requestDownload({ + url: '/test/project/batchExportProject', + fileName: `需求列表信息_${new Date().getTime()}.xlsx`, + data: this.selectedData, + }); } } };