|
|
|
@ -126,6 +126,8 @@ import { |
|
|
|
downloadBsEfficiencyTaskTemplate, |
|
|
|
downloadBsEfficiencyTaskTemplate, |
|
|
|
} from '@/api/performanceManagement/dataReporting'; |
|
|
|
} from '@/api/performanceManagement/dataReporting'; |
|
|
|
import { downloadXls, downloadFile, downloadFileBlob } from '@/utils/util'; |
|
|
|
import { downloadXls, downloadFile, downloadFileBlob } from '@/utils/util'; |
|
|
|
|
|
|
|
import { saveAs } from 'file-saver'; |
|
|
|
|
|
|
|
import JSZip from 'jszip'; |
|
|
|
export default { |
|
|
|
export default { |
|
|
|
components: { reportingPerf, prefDetail, batchAddContent }, |
|
|
|
components: { reportingPerf, prefDetail, batchAddContent }, |
|
|
|
data() { |
|
|
|
data() { |
|
|
|
@ -334,35 +336,63 @@ export default { |
|
|
|
this.currentRow = row; |
|
|
|
this.currentRow = row; |
|
|
|
this.showExamine = true; |
|
|
|
this.showExamine = true; |
|
|
|
}, |
|
|
|
}, |
|
|
|
// 任务行下载模板 |
|
|
|
// 任务行下载模板 → 打包ZIP |
|
|
|
async downloadTask(row) { |
|
|
|
async downloadTask(row) { |
|
|
|
|
|
|
|
const zip = new JSZip(); |
|
|
|
|
|
|
|
const promises = []; // 存储下载Promise |
|
|
|
if (row.parentId == 0) { |
|
|
|
if (row.parentId == 0) { |
|
|
|
if (!row.subTasks || row.subTasks.length === 0) { |
|
|
|
if (!row.subTasks || row.subTasks.length === 0) { |
|
|
|
this.$message.warning('暂无可下载文件!'); |
|
|
|
this.$message.warning('暂无可下载文件!'); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 只下载状态为2(已完成)的任务 |
|
|
|
const completedTasks = row.subTasks.filter(task => task.status === 2); |
|
|
|
const completedTasks = row.subTasks.filter(task => task.status === 2); |
|
|
|
if (completedTasks.length === 0) { |
|
|
|
if (completedTasks.length === 0) { |
|
|
|
this.$message.warning('暂无可下载文件!'); |
|
|
|
this.$message.warning('暂无可下载文件!'); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
// 调用模板下载接口 |
|
|
|
try { |
|
|
|
downloadBsEfficiencyTaskTemplate() |
|
|
|
// 1. 下载模板文件并加入压缩包 |
|
|
|
.then(res => { |
|
|
|
const templateRes = await downloadBsEfficiencyTaskTemplate(); |
|
|
|
downloadXls(res.data, `${row.yearMonth}绩效填报模板.xlsx`); |
|
|
|
zip.file(`${row.yearMonth}绩效填报模板.xlsx`, templateRes.data); |
|
|
|
// 只下载状态为2(已完成)的任务文件 |
|
|
|
// 2. 下载所有已完成的子任务附件 |
|
|
|
const completedTasks = row.subTasks.filter(task => task.status === 2); |
|
|
|
completedTasks.forEach(task => { |
|
|
|
completedTasks.forEach(task => { |
|
|
|
if (task.attachLink) { |
|
|
|
if (task.attachLink) { |
|
|
|
const promise = fetch(task.attachLink) |
|
|
|
downloadFileBlob(task.attachLink, task.taskName + '.xlsx'); |
|
|
|
.then(res => res.blob()) |
|
|
|
} |
|
|
|
.then(blob => { |
|
|
|
}); |
|
|
|
zip.file(`${task.taskName}.xlsx`, blob); |
|
|
|
}) |
|
|
|
}); |
|
|
|
.catch(error => { |
|
|
|
promises.push(promise); |
|
|
|
console.error('下载模板失败:', error); |
|
|
|
} |
|
|
|
this.$message.error('下载失败,请检查网络或稍后重试'); |
|
|
|
|
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
// 等待所有文件下载完成 → 生成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 { |
|
|
|
} 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 == '') { |
|
|
|
if (row.attachLink == '') { |
|
|
|
this.$message.warning('暂无可下载文件!'); |
|
|
|
this.$message.warning('暂无可下载文件!'); |
|
|
|
return; |
|
|
|
return; |
|
|
|
@ -477,13 +507,13 @@ export default { |
|
|
|
.then(res => { |
|
|
|
.then(res => { |
|
|
|
if (res.data.code === 200) { |
|
|
|
if (res.data.code === 200) { |
|
|
|
// 为子任务添加父级状态 |
|
|
|
// 为子任务添加父级状态 |
|
|
|
const processTasks = (tasks) => { |
|
|
|
const processTasks = tasks => { |
|
|
|
return tasks.map(task => { |
|
|
|
return tasks.map(task => { |
|
|
|
if (task.subTasks && task.subTasks.length > 0) { |
|
|
|
if (task.subTasks && task.subTasks.length > 0) { |
|
|
|
// 为每个子任务添加父级状态 |
|
|
|
// 为每个子任务添加父级状态 |
|
|
|
task.subTasks = task.subTasks.map(subTask => ({ |
|
|
|
task.subTasks = task.subTasks.map(subTask => ({ |
|
|
|
...subTask, |
|
|
|
...subTask, |
|
|
|
parentStatus: task.status // 添加父级状态 |
|
|
|
parentStatus: task.status, // 添加父级状态 |
|
|
|
})); |
|
|
|
})); |
|
|
|
// 递归处理子任务的子任务 |
|
|
|
// 递归处理子任务的子任务 |
|
|
|
processTasks(task.subTasks); |
|
|
|
processTasks(task.subTasks); |
|
|
|
|