人效管理-绩效管理-绩效填报-任务行下载压缩包

dev-scheduling
ysn 1 month ago
parent fc087603f0
commit c9b1081643
  1. 60
      src/views/personnelEfficiencyManagement/performanceManagement/dataReporting.vue

@ -126,6 +126,8 @@ import {
downloadBsEfficiencyTaskTemplate,
} from '@/api/performanceManagement/dataReporting';
import { downloadXls, downloadFile, downloadFileBlob } from '@/utils/util';
import { saveAs } from 'file-saver';
import JSZip from 'jszip';
export default {
components: { reportingPerf, prefDetail, batchAddContent },
data() {
@ -334,35 +336,63 @@ export default {
this.currentRow = row;
this.showExamine = true;
},
//
// ZIP
async downloadTask(row) {
const zip = new JSZip();
const promises = []; // Promise
if (row.parentId == 0) {
if (!row.subTasks || row.subTasks.length === 0) {
this.$message.warning('暂无可下载文件!');
return;
}
// 2
const completedTasks = row.subTasks.filter(task => task.status === 2);
if (completedTasks.length === 0) {
this.$message.warning('暂无可下载文件!');
return;
}
//
downloadBsEfficiencyTaskTemplate()
.then(res => {
downloadXls(res.data, `${row.yearMonth}绩效填报模板.xlsx`);
// 2
const completedTasks = row.subTasks.filter(task => task.status === 2);
try {
// 1.
const templateRes = await downloadBsEfficiencyTaskTemplate();
zip.file(`${row.yearMonth}绩效填报模板.xlsx`, templateRes.data);
// 2.
completedTasks.forEach(task => {
if (task.attachLink) {
downloadFileBlob(task.attachLink, task.taskName + '.xlsx');
}
const promise = fetch(task.attachLink)
.then(res => res.blob())
.then(blob => {
zip.file(`${task.taskName}.xlsx`, blob);
});
})
.catch(error => {
console.error('下载模板失败:', error);
this.$message.error('下载失败,请检查网络或稍后重试');
promises.push(promise);
}
});
// zip
await Promise.all(promises);
const content = await zip.generateAsync({ type: 'blob' });
saveAs(content, `${row.yearMonth}绩效填报文件包.zip`);
this.$message.success('打包下载成功');
} catch (error) {
console.error('打包下载失败:', error);
this.$message.error('打包下载失败,请稍后重试');
}
} else {
// zip
// if (!row.attachLink) {
// this.$message.warning('');
// return;
// }
// try {
// const res = await fetch(row.attachLink);
// const blob = await res.blob();
// zip.file(`${row.taskName}.xlsx`, blob);
// const content = await zip.generateAsync({ type: 'blob' });
// saveAs(content, `${row.taskName}.zip`);
// this.$message.success('');
// } catch (error) {
// console.error(':', error);
// this.$message.error('');
// }
if (row.attachLink == '') {
this.$message.warning('暂无可下载文件!');
return;
@ -477,13 +507,13 @@ export default {
.then(res => {
if (res.data.code === 200) {
//
const processTasks = (tasks) => {
const processTasks = tasks => {
return tasks.map(task => {
if (task.subTasks && task.subTasks.length > 0) {
//
task.subTasks = task.subTasks.map(subTask => ({
...subTask,
parentStatus: task.status //
parentStatus: task.status, //
}));
//
processTasks(task.subTasks);

Loading…
Cancel
Save