20250523-修复导出功能-新增弹窗(存在一个小问题:会情表选择一天时正常,多天,标题以第一天为准,月份汇总正常)

This commit is contained in:
luoyu 2025-05-23 17:42:06 +08:00
parent 38faff747e
commit 7c05e4d2b1
2 changed files with 163 additions and 55 deletions

View File

@ -147,7 +147,7 @@ export function addStaff(parameter) {
export function expMRByDate(parameter){
return axios({
// url: '/api/roomContent/cancelOrder',
url: api.meetingReservation + '/io/exportDayMR',
url: '/admin/mr/io/exportDayMR',
method: 'post',
params: parameter,
responseType: 'blob'
@ -157,7 +157,7 @@ export function expMRByDate(parameter){
export function expMRByMonth(parameter){
return axios({
// url: '/api/roomContent/cancelOrder',
url: api.meetingReservation + '/io/exportMonthMR',
url: '/admin/mr/io/exportMonthMR',
method: 'post',
params: parameter,
responseType: 'blob'

View File

@ -94,9 +94,9 @@
<a-button type='primary' @click='$refs.table.refresh(true)'>查询</a-button>
<a-button style='margin-left: 8px' @click='reset'>重置</a-button>
<a-button v-if='isAdmin' type='danger' style='margin-left: 8px'
@click='exportOrderList'>导出会议日程</a-button>
@click='showExportDayModal = true'>导出会议日程</a-button>
<a-button v-if='isAdmin' type='danger' style='margin-left: 8px'
@click='exportMonthOrder'>导出月度汇总</a-button>
@click='showExportMonthModal = true'>导出月度汇总</a-button>
</span>
</a-col>
</a-row>
@ -190,6 +190,48 @@
:auto-size='{ minRows: 3, maxRows: 5 }'
/>
</a-modal>
<!-- 导出会议日程弹窗 -->
<a-modal
title='导出会议日程'
:visible='showExportDayModal'
@ok='handleExportDay'
@cancel='showExportDayModal = false'
>
<a-form-item label='选择日期范围'>
<a-range-picker v-model='exportDayDate' style='width: 100%' />
</a-form-item>
<a-form-item label='会议名称'>
<a-input v-model='exportDayTitle' placeholder='可选,输入会议名称进行筛选' />
</a-form-item>
<a-form-item label='预约单位'>
<a-input v-model='exportDayUserOrg' placeholder='可选,输入预约单位进行筛选' />
</a-form-item>
<a-form-item label='预约状态'>
<a-select v-model='exportDayStatus'>
<a-select-option value=''>全部预约</a-select-option>
<a-select-option value='5'>待审核</a-select-option>
<a-select-option value='7'>待开始</a-select-option>
<a-select-option value='11'>已结束</a-select-option>
<a-select-option value='1'>已取消</a-select-option>
<a-select-option value='3'>已驳回</a-select-option>
<a-select-option value='4'>占用</a-select-option>
<a-select-option value='9'>进行中</a-select-option>
</a-select>
</a-form-item>
</a-modal>
<!-- 导出月度汇总弹窗 -->
<a-modal
title='导出月度汇总'
:visible='showExportMonthModal'
@ok='handleExportMonth'
@cancel='showExportMonthModal = false'
>
<a-form-item label='选择月份'>
<a-month-picker v-model='exportMonthDate' style='width: 100%' placeholder='请选择月份' />
</a-form-item>
</a-modal>
</a-card>
</template>
@ -401,7 +443,18 @@ export default {
rejectReason: '',
rejectId: '',
roomList: [],
isAdmin: checkPermission('meeting:admin')
isAdmin: checkPermission('meeting:admin'),
//
showExportDayModal: false,
exportDayDate: null,
exportDayTitle: '',
exportDayUserOrg: '',
exportDayStatus: '',
//
showExportMonthModal: false,
exportMonthDate: null,
}
},
filters: {},
@ -447,13 +500,13 @@ export default {
}
},
reset() {
this.queryParam = {
status: '',
sort: '',
this.queryParam = {
status: '',
sort: '',
name: '',
startDate: '',
endDate: '',
filterDate: ''
startDate: '',
endDate: '',
filterDate: ''
}
this.queryParam.chooseDate = null
this.$refs.table.refresh(true)
@ -603,65 +656,120 @@ export default {
staff(id) {
this.$refs.staffModal.add(id)
},
//
exportOrderList() {
let chooseDate = this.queryParam.chooseDate
let filterDate = ''
let startDate = ''
let endDate = ''
if (chooseDate && chooseDate.length === 2) {
startDate = chooseDate[0].format('YYYY-MM-DD')
endDate = chooseDate[1].format('YYYY-MM-DD')
} else if (chooseDate && chooseDate.length === 1) {
filterDate = chooseDate[0].format('YYYY-MM-DD')
} else {
this.$message.error('请选择会议预约时间')
//
handleExportDay() {
if (!this.exportDayDate || this.exportDayDate.length !== 2) {
this.$message.error('请选择日期范围')
return
}
const startDate = this.exportDayDate[0].format('YYYY-MM-DD')
const endDate = this.exportDayDate[1].format('YYYY-MM-DD')
//
this.$message.loading({ content: '正在导出数据,请稍候...', key: 'exportLoading', duration: 0 })
//
const timestamp = new Date().getTime()
expMRByDate({
'filterDate': filterDate,
'filterDate': '',
'startDate': startDate,
'endDate': endDate,
'userOrg': this.queryParam.userOrg,
'title': this.queryParam.title,
'status': this.queryParam.status
'userOrg': this.exportDayUserOrg,
'title': this.exportDayTitle,
'status': this.exportDayStatus,
'_t': timestamp
}).then(res => {
let fileName = ''
if (startDate && endDate) {
fileName = startDate + '至' + endDate + '会议室预约记录'
} else {
fileName = filterDate + '会议室预约记录'
}
this.$message.success({ content: '导出成功', key: 'exportLoading' })
const fileName = startDate + '至' + endDate + '会议室预约记录'
this.exportExcel(fileName, res)
this.showExportDayModal = false
}).catch(error => {
console.error('导出失败:', error)
let errorMsg = '导出失败'
if (error.response && error.response.data) {
try {
if (typeof error.response.data === 'string') {
errorMsg = error.response.data
} else if (error.response.data instanceof Blob) {
// Blob
const reader = new FileReader()
reader.onload = () => {
try {
const text = reader.result
this.$message.error({ content: text || '导出失败', key: 'exportLoading' })
} catch (e) {
this.$message.error({ content: '导出失败: ' + error.message, key: 'exportLoading' })
}
}
reader.readAsText(error.response.data)
return
} else {
errorMsg = error.response.data.msg || '导出失败'
}
} catch (e) {
errorMsg = '导出失败: ' + error.message
}
} else {
errorMsg = '导出失败: ' + error.message
}
this.$message.error({ content: errorMsg, key: 'exportLoading' })
})
},
exportMonthOrder() {
let chooseDate = this.queryParam.chooseDate
let filterDate = ''
let startMonth = ''
let endMonth = ''
if (chooseDate && chooseDate.length === 2) {
startMonth = chooseDate[0].format('YYYY-MM')
endMonth = chooseDate[1].format('YYYY-MM')
if (startMonth !== endMonth) {
this.$message.error('月度汇总请选择同一个月的日期范围')
return
}
filterDate = startMonth
} else if (chooseDate && chooseDate.length === 1) {
filterDate = chooseDate[0].format('YYYY-MM')
} else {
this.$message.error('请选择会议预约时间')
//
handleExportMonth() {
if (!this.exportMonthDate) {
this.$message.error('请选择月份')
return
}
const month = this.exportMonthDate.format('YYYY-MM')
//
this.$message.loading({ content: '正在导出数据,请稍候...', key: 'exportLoading', duration: 0 })
//
const timestamp = new Date().getTime()
expMRByMonth({
'month': filterDate
'month': month,
'_t': timestamp
}).then(res => {
this.exportExcel(filterDate + '月度会议汇总', res)
this.$message.success({ content: '导出成功', key: 'exportLoading' })
this.exportExcel(month + '月度会议汇总', res)
this.showExportMonthModal = false
}).catch(error => {
console.error('导出失败:', error)
let errorMsg = '导出失败'
if (error.response && error.response.data) {
try {
if (typeof error.response.data === 'string') {
errorMsg = error.response.data
} else if (error.response.data instanceof Blob) {
// Blob
const reader = new FileReader()
reader.onload = () => {
try {
const text = reader.result
this.$message.error({ content: text || '导出失败', key: 'exportLoading' })
} catch (e) {
this.$message.error({ content: '导出失败: ' + error.message, key: 'exportLoading' })
}
}
reader.readAsText(error.response.data)
return
} else {
errorMsg = error.response.data.msg || '导出失败'
}
} catch (e) {
errorMsg = '导出失败: ' + error.message
}
} else {
errorMsg = '导出失败: ' + error.message
}
this.$message.error({ content: errorMsg, key: 'exportLoading' })
})
},
exportExcel(filename, res) {