|
@ -32,7 +32,7 @@ |
|
|
<el-table-column |
|
|
<el-table-column |
|
|
:prop="getFirstColumnProp()" |
|
|
:prop="getFirstColumnProp()" |
|
|
:label="getFirstColumnLabel()" |
|
|
:label="getFirstColumnLabel()" |
|
|
width="60" |
|
|
|
|
|
|
|
|
width="80" |
|
|
align="center" |
|
|
align="center" |
|
|
/> |
|
|
/> |
|
|
<el-table-column |
|
|
<el-table-column |
|
@ -58,7 +58,7 @@ |
|
|
<script> |
|
|
<script> |
|
|
import CRUD, { presenter, crud } from '@crud/crud' |
|
|
import CRUD, { presenter, crud } from '@crud/crud' |
|
|
import { getCurrentTime } from '@/utils/index' |
|
|
import { getCurrentTime } from '@/utils/index' |
|
|
import { FetchAnnualStatistics, FetchAnnualStatisticsByMonth } from '@/api/system/documentArchives' |
|
|
|
|
|
|
|
|
import { FetchAnnualStatistics, FetchAnnualStatisticsByMonth, FetchAnnualStatisticsByBorrow } from '@/api/system/documentArchives' |
|
|
import * as XLSX from 'xlsx' |
|
|
import * as XLSX from 'xlsx' |
|
|
import { saveAs } from 'file-saver' // 简化文件保存 |
|
|
import { saveAs } from 'file-saver' // 简化文件保存 |
|
|
|
|
|
|
|
@ -126,7 +126,7 @@ export default { |
|
|
this.getAnnualStatisticsByMonth() |
|
|
this.getAnnualStatisticsByMonth() |
|
|
break |
|
|
break |
|
|
case 2: |
|
|
case 2: |
|
|
// this.getCirculationStatistics() |
|
|
|
|
|
|
|
|
this.getAnnualStatisticsByBorrow() |
|
|
break |
|
|
break |
|
|
default: |
|
|
default: |
|
|
break |
|
|
break |
|
@ -134,12 +134,16 @@ export default { |
|
|
}, |
|
|
}, |
|
|
handleYear(val) { |
|
|
handleYear(val) { |
|
|
this.tableDataLoading = true |
|
|
this.tableDataLoading = true |
|
|
|
|
|
this.tableData = [] |
|
|
this.yearValue = val |
|
|
this.yearValue = val |
|
|
this.getAnnualStatisticsByMonth() |
|
|
this.getAnnualStatisticsByMonth() |
|
|
}, |
|
|
}, |
|
|
handleCustomYear(val) { |
|
|
handleCustomYear(val) { |
|
|
console.log('this.customYear', this.customYear) |
|
|
console.log('this.customYear', this.customYear) |
|
|
console.log('this.val', val) |
|
|
console.log('this.val', val) |
|
|
|
|
|
this.tableDataLoading = true |
|
|
|
|
|
this.tableData = [] |
|
|
|
|
|
this.getAnnualStatisticsByBorrow() |
|
|
}, |
|
|
}, |
|
|
getFirstColumnProp() { |
|
|
getFirstColumnProp() { |
|
|
switch (this.activeIndex) { |
|
|
switch (this.activeIndex) { |
|
@ -181,6 +185,22 @@ export default { |
|
|
console.log(err) |
|
|
console.log(err) |
|
|
}) |
|
|
}) |
|
|
}, |
|
|
}, |
|
|
|
|
|
getAnnualStatisticsByBorrow() { |
|
|
|
|
|
console.log('customYear', this.customYear) |
|
|
|
|
|
const params = { |
|
|
|
|
|
'startTime': this.customYear[0], |
|
|
|
|
|
'endTime': this.customYear[1] |
|
|
|
|
|
} |
|
|
|
|
|
console.log('params', params) |
|
|
|
|
|
FetchAnnualStatisticsByBorrow(params).then((res) => { |
|
|
|
|
|
this.tableData = this.formatTableData('name', res) |
|
|
|
|
|
setTimeout(() => { |
|
|
|
|
|
this.tableDataLoading = false |
|
|
|
|
|
}, 500) |
|
|
|
|
|
}).catch(err => { |
|
|
|
|
|
console.log(err) |
|
|
|
|
|
}) |
|
|
|
|
|
}, |
|
|
formatTableData(dataType, rawData) { |
|
|
formatTableData(dataType, rawData) { |
|
|
const allColumns = new Set() |
|
|
const allColumns = new Set() |
|
|
Object.keys(rawData).forEach(key => { |
|
|
Object.keys(rawData).forEach(key => { |
|
@ -217,6 +237,11 @@ export default { |
|
|
sortedKeys = Object.keys(rawData) |
|
|
sortedKeys = Object.keys(rawData) |
|
|
.filter(key => key !== '合计') |
|
|
.filter(key => key !== '合计') |
|
|
.sort((a, b) => parseInt(a) - parseInt(b)) |
|
|
.sort((a, b) => parseInt(a) - parseInt(b)) |
|
|
|
|
|
} else if (dataType === 'name') { |
|
|
|
|
|
// 名称数据:按字母顺序排序 |
|
|
|
|
|
sortedKeys = Object.keys(rawData) |
|
|
|
|
|
.filter(key => key !== '合计') |
|
|
|
|
|
.sort((a, b) => a.localeCompare(b)) |
|
|
} else { |
|
|
} else { |
|
|
// 默认不排序 |
|
|
// 默认不排序 |
|
|
sortedKeys = Object.keys(rawData).filter(key => key !== '合计') |
|
|
sortedKeys = Object.keys(rawData).filter(key => key !== '合计') |
|
@ -227,14 +252,16 @@ export default { |
|
|
const values = rawData[key] |
|
|
const values = rawData[key] |
|
|
const item = dataType === 'year' |
|
|
const item = dataType === 'year' |
|
|
? { year: key, ...values } // 年份数据 |
|
|
? { year: key, ...values } // 年份数据 |
|
|
: { month: `${key}月`, ...values } // 月份数据 |
|
|
|
|
|
|
|
|
: dataType === 'month' |
|
|
|
|
|
? { month: `${key}月`, ...values } // 月份数据 |
|
|
|
|
|
: { name: key, ...values } // 名称数据 |
|
|
formattedData.push(item) |
|
|
formattedData.push(item) |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
// 处理合计行 |
|
|
// 处理合计行 |
|
|
if (rawData['合计']) { |
|
|
if (rawData['合计']) { |
|
|
formattedData.push({ |
|
|
formattedData.push({ |
|
|
[dataType === 'year' ? 'year' : 'month']: '合计', |
|
|
|
|
|
|
|
|
[dataType === 'year' ? 'year' : dataType === 'month' ? 'month' : 'name']: '合计', |
|
|
...rawData['合计'] |
|
|
...rawData['合计'] |
|
|
}) |
|
|
}) |
|
|
} |
|
|
} |
|
@ -242,7 +269,29 @@ export default { |
|
|
return formattedData |
|
|
return formattedData |
|
|
}, |
|
|
}, |
|
|
getExportMeta() { |
|
|
getExportMeta() { |
|
|
|
|
|
console.log('this.customYear', this.customYear) |
|
|
let sheetName, firstColumnLabel, firstColumnProp |
|
|
let sheetName, firstColumnLabel, firstColumnProp |
|
|
|
|
|
|
|
|
|
|
|
const formatDateRange = (dates) => { |
|
|
|
|
|
if (!dates || dates.length !== 2) return '' |
|
|
|
|
|
|
|
|
|
|
|
// 解析日期字符串并获取年月日信息 |
|
|
|
|
|
const formatDate = (dateStr) => { |
|
|
|
|
|
const date = new Date(dateStr) |
|
|
|
|
|
const year = date.getFullYear() |
|
|
|
|
|
const month = String(date.getMonth() + 1).padStart(2, '0') |
|
|
|
|
|
const day = String(date.getDate()).padStart(2, '0') |
|
|
|
|
|
return `${year}${month}${day}` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const startDate = formatDate(dates[0]) |
|
|
|
|
|
const endDate = formatDate(dates[1]) |
|
|
|
|
|
|
|
|
|
|
|
return `${startDate}-${endDate}` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const dateRange = formatDateRange(this.customYear) |
|
|
|
|
|
|
|
|
switch (this.activeIndex) { |
|
|
switch (this.activeIndex) { |
|
|
case 0: |
|
|
case 0: |
|
|
sheetName = '馆藏年度统计' |
|
|
sheetName = '馆藏年度统计' |
|
@ -256,7 +305,7 @@ export default { |
|
|
firstColumnProp = 'month' // 对应数据中的月份字段(如 '1月') |
|
|
firstColumnProp = 'month' // 对应数据中的月份字段(如 '1月') |
|
|
break |
|
|
break |
|
|
case 2: |
|
|
case 2: |
|
|
sheetName = '传阅统计' |
|
|
|
|
|
|
|
|
sheetName = `传阅统计_${dateRange}` |
|
|
firstColumnLabel = '借阅者' |
|
|
firstColumnLabel = '借阅者' |
|
|
firstColumnProp = 'name' // 对应数据中的借阅者名称字段 |
|
|
firstColumnProp = 'name' // 对应数据中的借阅者名称字段 |
|
|
break |
|
|
break |
|
@ -299,6 +348,13 @@ export default { |
|
|
|
|
|
|
|
|
// 导出文件(文件名与 sheetName 一致,添加时间戳) |
|
|
// 导出文件(文件名与 sheetName 一致,添加时间戳) |
|
|
const fileName = `${sheetName}_${new Date().getTime()}.xlsx` |
|
|
const fileName = `${sheetName}_${new Date().getTime()}.xlsx` |
|
|
|
|
|
// const now = new Date() |
|
|
|
|
|
// const fileName = `${sheetName}_${now.getFullYear()}-${ |
|
|
|
|
|
// String(now.getMonth() + 1).padStart(2, '0')}-${ |
|
|
|
|
|
// String(now.getDate()).padStart(2, '0')}_${ |
|
|
|
|
|
// String(now.getHours()).padStart(2, '0')}-${ |
|
|
|
|
|
// String(now.getMinutes()).padStart(2, '0')}-${ |
|
|
|
|
|
// String(now.getSeconds()).padStart(2, '0')}.xlsx` |
|
|
const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'array', cellDates: true }) |
|
|
const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'array', cellDates: true }) |
|
|
const blob = new Blob([wbout], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }) |
|
|
const blob = new Blob([wbout], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }) |
|
|
saveAs(blob, fileName) |
|
|
saveAs(blob, fileName) |
|
|