diff --git a/src/api/admin/meeting/meetingReservation.js b/src/api/admin/meeting/meetingReservation.js index 42d002e..48aca9a 100644 --- a/src/api/admin/meeting/meetingReservation.js +++ b/src/api/admin/meeting/meetingReservation.js @@ -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' diff --git a/src/views/admin/meeting/MeetingReservationList.vue b/src/views/admin/meeting/MeetingReservationList.vue index a304ea6..ecf761f 100644 --- a/src/views/admin/meeting/MeetingReservationList.vue +++ b/src/views/admin/meeting/MeetingReservationList.vue @@ -94,9 +94,9 @@ 查询 重置 导出会议日程 + @click='showExportDayModal = true'>导出会议日程 导出月度汇总 + @click='showExportMonthModal = true'>导出月度汇总 @@ -190,6 +190,48 @@ :auto-size='{ minRows: 3, maxRows: 5 }' /> + + + + + + + + + + + + + + + 全部预约 + 待审核 + 待开始 + 已结束 + 已取消 + 已驳回 + 占用 + 进行中 + + + + + + + + + + @@ -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) {