feat(inspectTask): 新增下载模板/模板校验/模板导入按钮及对应后端接口

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
wsm
2026-06-30 10:33:45 +08:00
co-authored by Claude Opus 4.7
parent 8b3512276a
commit 238cb2df0a
2 changed files with 105 additions and 2 deletions
@@ -11,10 +11,14 @@ enum Api {
deleteOne = '/dqinspecttask/dqInspectTask/delete',
deleteBatch = '/dqinspecttask/dqInspectTask/deleteBatch',
importExcel = '/dqinspecttask/dqInspectTask/importExcel',
importExcelByEasyExcel = '/dqinspecttask/dqInspectTask/importExcelByEasyExcel',
checkExcelByEasyExcel = '/dqinspecttask/dqInspectTask/checkExcelByEasyExcel',
exportXls = '/dqinspecttask/dqInspectTask/exportXls',
exportXlsHeaders = '/dqinspecttask/dqInspectTask/exportXlsHeaders',
queryDataById = '/dqinspecttask/dqInspectTask/queryById',
dqInspectProgressList = '/dqinspecttask/dqInspectTask/queryDqInspectProgressByMainId',
specificProblemOptions = '/dqinspectproblem/dqInspectProblem/specificOptions',
}
/**
* 导出api
@@ -27,6 +31,12 @@ export const getExportUrl = Api.exportXls;
*/
export const getImportUrl = Api.importExcel;
export const getImportExcelByEasyExcelUrl = Api.importExcelByEasyExcel;
export const getCheckExcelByEasyExcelUrl = Api.checkExcelByEasyExcel;
export const getExportXlsHeadersUrl = Api.exportXlsHeaders;
/**
* 查询子表数据
* @param params
+95 -2
View File
@@ -58,9 +58,35 @@
<a-button type="primary" v-auth="'dqinspecttask:dq_inspect_task:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls">
导出</a-button
>
<j-upload-button type="primary" v-auth="'dqinspecttask:dq_inspect_task:importExcel'" preIcon="ant-design:import-outlined" @click="onImportXls"
<j-upload-button
type="primary"
v-auth="'dqinspecttask:dq_inspect_task:importExcel'"
preIcon="ant-design:import-outlined"
@click="onImpportXls"
>导入</j-upload-button
>
<a-button
type="primary"
v-auth="'dqinspecttask:dq_inspect_task:exportXls'"
preIcon="ant-design:download-outlined"
@click="handleDownloadTemplate"
>下载模板</a-button
>
<j-upload-button
type="primary"
v-auth="'dqinspecttask:dq_inspect_task:importExcel'"
preIcon="ant-design:check-outlined"
@click="handleCheckExcel"
>模板校验</j-upload-button
>
<j-upload-button
type="primary"
v-auth="'dqinspecttask:dq_inspect_task:importExcel'"
preIcon="ant-design:import-outlined"
@click="handleImportByTemplate"
>模板导入</j-upload-button
>
<a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay>
<a-menu>
@@ -109,7 +135,19 @@
import DqInspectTaskModal from './components/DqInspectTaskModal.vue';
import DqInspectProgressFeedbackViewModal from '../inspectProgress/components/DqInspectProgressFeedbackViewModal.vue';
import { ledgerColumns, superQuerySchema } from './DqInspectTask.data';
import { ledgerList, deleteOne, batchDelete, getImportUrl, getExportUrl, saveOrUpdate } from './DqInspectTask.api';
import {
ledgerList,
deleteOne,
batchDelete,
getImportUrl,
getExportUrl,
getImportExcelByEasyExcelUrl,
getCheckExcelByEasyExcelUrl,
getExportXlsHeadersUrl,
saveOrUpdate,
} from './DqInspectTask.api';
import { defHttp } from '/@/utils/http/axios';
import { showImportValidationErrors } from '/@/utils/helper/importError';
import { downloadFile } from '/@/utils/common/renderUtils';
import { useMessage } from '/@/hooks/web/useMessage';
import Icon from '/@/components/Icon/index';
@@ -230,6 +268,61 @@
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
async function handleDownloadTemplate() {
const data = await defHttp.get({ url: getExportXlsHeadersUrl, params: {}, responseType: 'blob', timeout: 60000 }, { isTransformResponse: false });
if (!data) {
createMessage.warning('文件下载失败');
return;
}
const blob = new Blob([data]);
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = '整改任务-导入模板.xls';
link.click();
URL.revokeObjectURL(link.href);
}
async function handleCheckExcel(data) {
const isReturn = (fileInfo) => {
try {
if (fileInfo.code === 500 || fileInfo.code === 510) {
if (fileInfo.result && Array.isArray(fileInfo.result) && fileInfo.result.length > 0) {
showImportValidationErrors(fileInfo.message || `${data.file.name} 校验失败`, fileInfo.result);
} else {
createMessage.error(fileInfo.message || `${data.file.name} 校验失败`);
}
} else {
createMessage.success(fileInfo.message || `${data.file.name} 校验通过`);
}
} catch {
// ignore
}
};
await defHttp.uploadFile({ url: getCheckExcelByEasyExcelUrl }, { file: data.file }, { success: isReturn });
}
async function handleImportByTemplate(data) {
const isReturn = (fileInfo) => {
try {
if (fileInfo.code === 500 || fileInfo.code === 510) {
if (fileInfo.result && Array.isArray(fileInfo.result) && fileInfo.result.length > 0) {
showImportValidationErrors(fileInfo.message || `${data.file.name} 导入失败`, fileInfo.result);
} else {
createMessage.error(fileInfo.message || `${data.file.name} 导入失败`);
}
} else {
createMessage.success(fileInfo.message || `${data.file.name} 导入成功`);
}
} catch {
// ignore
} finally {
reload();
}
};
await defHttp.uploadFile({ url: getImportExcelByEasyExcelUrl }, { file: data.file }, { success: isReturn });
}
/**
* 只在当前页内计算台账合并行,避免跨页合并导致表格分页行为不可控。
*/