Browse Source

抽查导出50%

dev
wenlele 1 year ago
parent
commit
775ca75540
  1. 1995
      api/app/lib/controllers/report/index.js
  2. 286
      api/utils/xlsxDownload.js

1995
api/app/lib/controllers/report/index.js

File diff suppressed because it is too large

286
api/utils/xlsxDownload.js

@ -6,99 +6,209 @@ const moment = require('moment')
//递归创建目录 同步方法 //递归创建目录 同步方法
async function makeDir (dir) { async function makeDir (dir) {
if (!fs.existsSync(dir)) { if (!fs.existsSync(dir)) {
makeDir(path.dirname(dir)) makeDir(path.dirname(dir))
fs.mkdirSync(dir, function (err) { fs.mkdirSync(dir, function (err) {
if (err) { if (err) {
throw err throw err
} }
}); });
} }
}
async function gatherSheet ({ sheet_2, data = [] }) {
// header
const headerStyle = new xlsx.Style();
headerStyle.align.h = 'center';
headerStyle.align.v = 'center';
headerStyle.border.right = 'thin';
headerStyle.border.rightColor = '#000000';
headerStyle.border.bottom = 'thin';
headerStyle.border.bottomColor = '#000000';
const headerRow1 = sheet_2.addRow();
const indexCell1 = headerRow1.addCell();
indexCell1.value = '南昌县农村公路养护管理暨用地范围内环境整治提升工程 考核汇总表'
indexCell1.style = headerStyle
indexCell1.hMerge = 12
const headerRow2 = sheet_2.addRow();
const indexCell2 = headerRow2.addCell();
indexCell2.value = '责任单位'
indexCell2.style = headerStyle
indexCell2.vMerge = 1
for (let h of ['县道', '', '', '', '乡道', '', '', '', '村道', '', '', '',]) {
const cell = headerRow2.addCell();
cell.value = h;
cell.style = headerStyle
if(h){
cell.hMerge = 3
}
}
const header = [{
key: '',
title: '',
},{
key: 'county',
title: '总里程',
}, {
key: 'countyParticipate',
title: '纳入考核里程',
}, {
key: 'countyPresent',
title: '本次考核里程',
}, {
key: 'county',
title: '实际抽取比原计划多',
}, {
key: 'township',
title: '总里程',
}, {
key: 'townshipParticipate',
title: '纳入考核里程',
}, {
key: 'townshipPresent',
title: '本次考核里程',
}, {
key: 'township',
title: '实际抽取比原计划多',
}, {
key: 'village',
title: '总里程',
}, {
key: 'villageParticipate',
title: '纳入考核里程',
}, {
key: 'villagePresent',
title: '本次考核里程',
}, {
key: 'village',
title: '实际抽取比原计划多',
},]
const headerRow3 = sheet_2.addRow();
for (let h of header) {
const cell = headerRow3.addCell();
cell.value = h.title;
cell.style = headerStyle
}
// data
// const style = new xlsx.Style();
// style.align.h = 'left';
// style.align.v = 'center';
// style.border.right = 'thin';
// style.border.rightColor = '#000000';
// style.border.bottom = 'thin';
// style.border.bottomColor = '#000000';
// for (let i = 0; i < data.length; i++) {
// const row = sheet_2.addRow();
// const indexCell = row.addCell();
// indexCell.value = i + 1
// indexCell.style = headerStyle
// for (let h of header) {
// const cell = row.addCell();
// cell.value = data[i][h.key];
// cell.style = style
// }
// }
} }
async function simpleExcelDown ({ data = [], header = [], fileName = moment().format('YYYY-MM-DD HH:mm:ss'), exp } = {}) { async function simpleExcelDown ({ data = [], header = [], fileName = moment().format('YYYY-MM-DD HH:mm:ss'), exp, gather } = {}) {
const fileDirPath = path.join(__dirname, `../../downloadFiles`) const fileDirPath = path.join(__dirname, `../../downloadFiles`)
makeDir(fileDirPath) makeDir(fileDirPath)
const file = new xlsx.File(); const file = new xlsx.File();
const sheet_1 = file.addSheet('sheet_1'); const sheet_1 = file.addSheet('sheet_1');
if (gather) {
// header const sheet_2 = file.addSheet('sheet_2');
const headerStyle = new xlsx.Style(); await gatherSheet({ sheet_2, ...gather })
headerStyle.align.h = 'center'; }
headerStyle.align.v = 'center';
headerStyle.border.right = 'thin'; // header
headerStyle.border.rightColor = '#000000'; const headerStyle = new xlsx.Style();
headerStyle.border.bottom = 'thin'; headerStyle.align.h = 'center';
headerStyle.border.bottomColor = '#000000'; headerStyle.align.v = 'center';
headerStyle.border.right = 'thin';
const headerRow = sheet_1.addRow(); headerStyle.border.rightColor = '#000000';
const indexCell = headerRow.addCell(); headerStyle.border.bottom = 'thin';
indexCell.value = '序号' headerStyle.border.bottomColor = '#000000';
indexCell.style = headerStyle
for (let h of header) { const headerRow = sheet_1.addRow();
const cell = headerRow.addCell(); const indexCell = headerRow.addCell();
cell.value = h.title; indexCell.value = '序号'
cell.style = headerStyle indexCell.style = headerStyle
} for (let h of header) {
const cell = headerRow.addCell();
// data cell.value = h.title;
const style = new xlsx.Style(); cell.style = headerStyle
style.align.h = 'left'; }
style.align.v = 'center';
style.border.right = 'thin'; // data
style.border.rightColor = '#000000'; const style = new xlsx.Style();
style.border.bottom = 'thin'; style.align.h = 'left';
style.border.bottomColor = '#000000'; style.align.v = 'center';
for (let i = 0; i < data.length; i++) { style.border.right = 'thin';
const row = sheet_1.addRow(); style.border.rightColor = '#000000';
const indexCell = row.addCell(); style.border.bottom = 'thin';
indexCell.value = i + 1 style.border.bottomColor = '#000000';
indexCell.style = headerStyle for (let i = 0; i < data.length; i++) {
for (let h of header) { const row = sheet_1.addRow();
const cell = row.addCell(); const indexCell = row.addCell();
cell.value = data[i][h.key]; indexCell.value = i + 1
indexCell.style = headerStyle
if (exp == 'patrol' || exp == 'maintenance') { for (let h of header) {
if (h.key == 'projectType') { const cell = row.addCell();
let type = data[i][h.key] cell.value = data[i][h.key];
if (type == 'road') {
cell.value = '道路' if (exp == 'patrol' || exp == 'maintenance') {
} else if (type == 'bridge') { if (h.key == 'projectType') {
cell.value = '桥梁' let type = data[i][h.key]
} else if (type == 'culvert') { if (type == 'road') {
cell.value = '涵洞' cell.value = '道路'
} else if (type == 'other') { } else if (type == 'bridge') {
cell.value = '其他' cell.value = '桥梁'
} } else if (type == 'culvert') {
continue cell.value = '涵洞'
} } else if (type == 'other') {
cell.value = '其他'
if (h.key == 'reportType') { }
let type = data[i][h.key] continue
if (type == 'patrol') {
cell.value = '巡查'
} else if (type == 'conserve') {
cell.value = '养护'
}
continue
}
} }
cell.style = style if (h.key == 'reportType') {
} let type = data[i][h.key]
} if (type == 'patrol') {
cell.value = '巡查'
const savePath = path.join(fileDirPath, fileName) } else if (type == 'conserve') {
await new Promise(function (resolve, reject) { cell.value = '养护'
file.saveAs() }
.pipe(fs.createWriteStream(savePath)) continue
.on('finish', () => { }
resolve() }
});
}) cell.style = style
return savePath }
}
const savePath = path.join(fileDirPath, fileName)
await new Promise(function (resolve, reject) {
file.saveAs()
.pipe(fs.createWriteStream(savePath))
.on('finish', () => {
resolve()
});
})
return savePath
} }
module.exports = { module.exports = {
simpleExcelDown simpleExcelDown
} }
Loading…
Cancel
Save