需求新增导出及批量导出接口
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.domain.AjaxResult;
|
||||||
import com.test.common.core.page.TableDataInfo;
|
import com.test.common.core.page.TableDataInfo;
|
||||||
import com.test.common.enums.BusinessType;
|
import com.test.common.enums.BusinessType;
|
||||||
|
import com.test.common.utils.poi.ExcelUtil;
|
||||||
import com.test.test.domain.TestProject;
|
import com.test.test.domain.TestProject;
|
||||||
import com.test.test.domain.qo.IDQO;
|
import com.test.test.domain.qo.IDQO;
|
||||||
import com.test.test.domain.qo.TestProjectListQO;
|
import com.test.test.domain.qo.TestProjectListQO;
|
||||||
import com.test.test.service.ITestProjectService;
|
import com.test.test.service.ITestProjectService;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@@ -75,4 +77,27 @@ public class TestProjectController extends BaseController {
|
|||||||
public AjaxResult editProject(@RequestBody TestProject testProject) {
|
public AjaxResult editProject(@RequestBody TestProject testProject) {
|
||||||
return toAjax(testProjectService.updateTestProject(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
|
export default service
|
||||||
|
|||||||
@@ -78,7 +78,7 @@
|
|||||||
<el-tab-pane :label="'已完成(' + statusCounts.completed + ')'" name="2"></el-tab-pane>
|
<el-tab-pane :label="'已完成(' + statusCounts.completed + ')'" name="2"></el-tab-pane>
|
||||||
<el-tab-pane :label="'已终止(' + statusCounts.terminated + ')'" name="3"></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 type="selection"/>
|
||||||
<el-table-column prop="serialNumber" label="ID" align="center"/>
|
<el-table-column prop="serialNumber" label="ID" align="center"/>
|
||||||
<el-table-column prop="version" label="版本" 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 style="margin-top: 10px; display: flex; justify-content: space-between; align-items: center;">
|
||||||
<div>
|
<div>
|
||||||
<el-button type="primary" size="small">全部导出</el-button>
|
<el-button type="primary" size="small" @click="handleExport">全部导出</el-button>
|
||||||
<el-button size="small">批量导出</el-button>
|
<el-button size="small" @click="handleSelectExport">批量导出</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<pagination
|
<pagination
|
||||||
@@ -247,6 +247,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import {addProject, delProject, getProjectDetail, getProjectList, managerList, updateProject} from "@/api/test/project";
|
import {addProject, delProject, getProjectDetail, getProjectList, managerList, updateProject} from "@/api/test/project";
|
||||||
import SimpleOptions from "@/components/FormItem/option/SimpleOptions.vue";
|
import SimpleOptions from "@/components/FormItem/option/SimpleOptions.vue";
|
||||||
|
import {requestDownload} from "@/utils/request";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'project',
|
name: 'project',
|
||||||
@@ -295,6 +296,8 @@ export default {
|
|||||||
addOpen: false,
|
addOpen: false,
|
||||||
//编辑弹窗
|
//编辑弹窗
|
||||||
editOpen: false,
|
editOpen: false,
|
||||||
|
selectedRows: [],
|
||||||
|
selectedData: [],
|
||||||
managerList: [],
|
managerList: [],
|
||||||
queryParams: {
|
queryParams: {
|
||||||
serialNumber: '',
|
serialNumber: '',
|
||||||
@@ -333,6 +336,9 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
handleSelectionChange(selection) {
|
||||||
|
this.selectedRows = selection;
|
||||||
|
},
|
||||||
handleTabClick(tab) {
|
handleTabClick(tab) {
|
||||||
this.activeTab = tab.name;
|
this.activeTab = tab.name;
|
||||||
this.getList();
|
this.getList();
|
||||||
@@ -466,6 +472,41 @@ export default {
|
|||||||
this.$message.error('编辑失败')
|
this.$message.error('编辑失败')
|
||||||
this.editSubmitLoading = false
|
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