需求新增导出及批量导出接口
This commit is contained in:
@@ -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<TestProject> list = testProjectService.selectTestProjectList(qo);
|
||||
ExcelUtil<TestProject> util = new ExcelUtil<TestProject>(TestProject.class);
|
||||
util.exportExcel(response, list, "需求数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量导出需求列表
|
||||
*/
|
||||
@Log(title = "需求", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/batchExportProject")
|
||||
public void batchExportProject(HttpServletResponse response,
|
||||
@RequestBody List<TestProject> list) {
|
||||
ExcelUtil<TestProject> util = new ExcelUtil<TestProject>(TestProject.class);
|
||||
util.exportExcel(response, list, "需求数据");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Blob> 若不保存至本地,返回带下载结果的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
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
<el-tab-pane :label="'已完成(' + statusCounts.completed + ')'" name="2"></el-tab-pane>
|
||||
<el-tab-pane :label="'已终止(' + statusCounts.terminated + ')'" name="3"></el-tab-pane>
|
||||
|
||||
<el-Table v-loading="loading" :data="list">
|
||||
<el-Table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection"/>
|
||||
<el-table-column prop="serialNumber" label="ID" align="center"/>
|
||||
<el-table-column prop="version" label="版本" align="center"/>
|
||||
@@ -108,8 +108,8 @@
|
||||
<!-- 操作按钮 -->
|
||||
<div style="margin-top: 10px; display: flex; justify-content: space-between; align-items: center;">
|
||||
<div>
|
||||
<el-button type="primary" size="small">全部导出</el-button>
|
||||
<el-button size="small">批量导出</el-button>
|
||||
<el-button type="primary" size="small" @click="handleExport">全部导出</el-button>
|
||||
<el-button size="small" @click="handleSelectExport">批量导出</el-button>
|
||||
</div>
|
||||
<div>
|
||||
<pagination
|
||||
@@ -247,6 +247,7 @@
|
||||
<script>
|
||||
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,
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user