改首页;

加入统计下钻;
加入数据导出
This commit is contained in:
471615499@qq.com 2024-10-25 21:39:53 +08:00
parent 3647205419
commit e18408b7f4
9 changed files with 187 additions and 43 deletions

View File

@ -133,4 +133,25 @@ export function addStaff(parameter) {
})
}
// 按天导出会议室预约记录列表
export function expMRByDate(parameter){
return axios({
// url: '/api/roomContent/cancelOrder',
url: api.meetingReservation + '/io/exportDayMR',
method: 'post',
params: parameter,
responseType: 'blob'
})
}
// 按月导出会议室预约记录
export function expMRByMonth(parameter){
return axios({
// url: '/api/roomContent/cancelOrder',
url: api.meetingReservation + '/io/exportMonthMR',
method: 'post',
params: parameter,
responseType: 'blob'
})
}
export const meetingReservationExport = api.meetingReservation + '/export'

View File

@ -21,6 +21,15 @@ export function exportRepair (parameter) {
})
}
export function exportRepairType (parameter) {
return axios({
url: api.repairFailureType + '/exportCategory',
method: 'get',
params: parameter,
responseType: 'blob'
})
}
export function importData (data) {
return axios({
url: api.repairFailureType + '/importRepair',

View File

@ -14,7 +14,7 @@ export const defaultRouterMap = [
export const constantRouterMap = [
{
path: '/',
redirect: '/admin/repair/RepairDeviceList/repairStatistics' // 默认首页
redirect: '/dashboard/Analysis' // 默认首页
},
{
path: '/user',

View File

@ -12,7 +12,7 @@ NProgress.configure({ showSpinner: false }) // NProgress Configuration
const allowList = ['login', 'register', 'registerResult', 'chart'] // no redirect allowList
const loginRoutePath = '/user/login'
const defaultRoutePath = '/admin/repair/RepairDeviceList/repairStatistics' // 登录跳转
const defaultRoutePath = '/dashboard/Analysis' // 登录跳转
router.beforeEach((to, from, next) => {

View File

@ -24,7 +24,7 @@ const rootRouter = {
'key': '',
'name': 'index',
'component': 'BasicLayout',
'redirect': '/admin/repair/RepairDeviceList/repairStatistics', // 登录跳转
'redirect': '/dashboard/Analysis', // 登录跳转
'children': []
}

View File

@ -10,31 +10,31 @@
type="inner"
@openChange="onOpenChange"
>
<a-menu-item key="/account/settings/base">
<router-link :to="{ name: 'base' }">
{{ i18nRender('menu.account.settings.base') }}
</router-link>
</a-menu-item>
<!-- <a-menu-item key="/account/settings/base">-->
<!-- <router-link :to="{ name: 'base' }">-->
<!-- {{ i18nRender('menu.account.settings.base') }}-->
<!-- </router-link>-->
<!-- </a-menu-item>-->
<a-menu-item key="/account/settings/security">
<router-link :to="{ name: 'security' }">
{{ i18nRender('menu.account.settings.security') }}
</router-link>
</a-menu-item>
<a-menu-item key="/account/settings/custom">
<router-link :to="{ name: 'custom' }">
{{ i18nRender('menu.account.settings.custom') }}
</router-link>
</a-menu-item>
<a-menu-item key="/account/settings/binding">
<router-link :to="{ name: 'binding' }">
{{ i18nRender('menu.account.settings.binding') }}
</router-link>
</a-menu-item>
<a-menu-item key="/account/settings/notification">
<router-link :to="{ name: 'notification' }">
{{ i18nRender('menu.account.settings.notification') }}
</router-link>
</a-menu-item>
<!-- <a-menu-item key="/account/settings/custom">-->
<!-- <router-link :to="{ name: 'custom' }">-->
<!-- {{ i18nRender('menu.account.settings.custom') }}-->
<!-- </router-link>-->
<!-- </a-menu-item>-->
<!-- <a-menu-item key="/account/settings/binding">-->
<!-- <router-link :to="{ name: 'binding' }">-->
<!-- {{ i18nRender('menu.account.settings.binding') }}-->
<!-- </router-link>-->
<!-- </a-menu-item>-->
<!-- <a-menu-item key="/account/settings/notification">-->
<!-- <router-link :to="{ name: 'notification' }">-->
<!-- {{ i18nRender('menu.account.settings.notification') }}-->
<!-- </router-link>-->
<!-- </a-menu-item>-->
</a-menu>
</div>
<div class="account-settings-info-right">

View File

@ -87,7 +87,7 @@
<a-button style='margin-left: 8px' type='primary' @click='exportRepair()'>导出工单模版</a-button>
<a-button style='margin-left: 8px' type='primary' @click='importDataVisible()'>导入</a-button>
<a-button style='margin-left: 8px' type='primary' @click='exportRepairList()'>导出工单数据</a-button>
<a-button style='margin-left: 8px' type='primary' @click='exportRepairTypeList()'>导出类型汇总数据</a-button>
</span>
</a-col>
</a-row>
@ -154,7 +154,7 @@ import RepairModal from './modules/RepairModal.vue'
import { checkPermission } from '@/utils/permissions'
import { getRepairDeviceList } from '@/api/admin/repair/repairDevice'
import { getRepairTypeList } from '@/api/admin/repair/repairDeviceType'
import { exportRepair, exportTemplate, importData } from '@/api/admin/repair/repairIo'
import { exportRepair, exportRepairType, exportTemplate, importData } from '@/api/admin/repair/repairIo'
import storage from 'store'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { message } from 'ant-design-vue'
@ -474,6 +474,21 @@ export default {
this.exportExcel('工单数据', res)
})
},
exportRepairTypeList() {
if (this.dateRange.length < 2) {
message.error('请先设置时间范围,系统将根据时间范围导出工单数据')
return
}
const startDate = this.dateRange[0].format('YYYY-MM-DD')
const endDate = this.dateRange[1].format('YYYY-MM-DD')
exportRepairType({
'beginTime': startDate,
'endTime': endDate
}).then(res => {
this.exportExcel('工单按维修类型汇总', res)
})
},
exportExcel(filename, res) {
const link = document.createElement('a')
let blob = new Blob([res], { type: 'application/vnd.ms-excel;charset=UTF-8' })

View File

@ -70,9 +70,9 @@
<a-row>
<a-col :span='18'>
<a-card title='会议日历' bodyStyle='height: 780px'>
<a-calendar :header-render='headerRender'>
<a-calendar :header-render='headerRender' @select="onSelect">
<ul slot='dateCellRender' slot-scope='value' class='c_meeting' style='padding: 0'>
<a-popover :title='item.title' v-for='item in getListData(value)'>
<a-popover @click.stop='return false' :title='item.title' v-for='item in getListData(value)'>
<template slot='content'>
<div>预约部门{{ item.org }}</div>
<div>会议时间{{ item.time }}</div>
@ -87,15 +87,15 @@
</a-col>
<a-col :span='6'>
<a-card title='会议状态'>
<a-row>
<a-row >
<a-col :span='18'>
<a-icon type='message' theme='filled' style='font-size: 24px;color: #E6A23C' />
<label style='position: relative;top: -1px;left: 10px;font-size: 20px'>
<label @click='goRes({status: "9"})' style='position: relative;top: -1px;left: 10px;font-size: 20px;cursor:pointer;'>
进行中
</label>
</a-col>
<a-col :span='6'>
<div style='text-align: right; font-weight: 700;font-size: 20px; position: relative;top: -1px;'>
<div @click='goRes({status: "9"})' style='text-align: right; font-weight: 700;font-size: 20px; position: relative;top: -1px;cursor:pointer;'>
{{ statusNum.going }}
</div>
</a-col>
@ -103,12 +103,12 @@
<a-row style='margin-top: 15px'>
<a-col :span='18'>
<a-icon type='flag' theme='filled' style='font-size: 24px;color: #409EFF' />
<label style='position: relative;top: -1px;left: 10px;font-size: 20px'>
开始
<label @click='goRes({status: "7"})' style='position: relative;top: -1px;left: 10px;font-size: 20px;cursor:pointer;'>
开始
</label>
</a-col>
<a-col :span='6'>
<div style='text-align: right; font-weight: 700;font-size: 20px; position: relative;top: -1px;'>
<div @click='goRes({status: "7"})' style='text-align: right; font-weight: 700;font-size: 20px; position: relative;top: -1px;cursor:pointer;'>
{{ statusNum.wait }}
</div>
</a-col>
@ -116,20 +116,20 @@
<a-row style='margin-top: 15px'>
<a-col :span='18'>
<a-icon type='carry-out' theme='filled' style='font-size: 24px;color: #919399' />
<label style='position: relative;top: -1px;left: 10px;font-size: 20px'>
<label @click='goRes({status: "11"})' style='position: relative;top: -1px;left: 10px;font-size: 20px;cursor:pointer;'>
已结束
</label>
</a-col>
<a-col :span='6'>
<div style='text-align: right; font-weight: 700;font-size: 20px; position: relative;top: -1px;'>
<div @click='goRes({status: "11"})' style='text-align: right; font-weight: 700;font-size: 20px; position: relative;top: -1px;cursor:pointer;'>
{{ statusNum.closed }}
</div>
</a-col>
</a-row>
</a-card>
<a-card title='任务代办(小程序审核)' bodyStyle='height: 554px'>
<a-card title='任务代办' bodyStyle='height: 554px'>
<a-list item-layout='horizontal' :data-source='waitList'>
<a-list-item slot='renderItem' slot-scope='item, index'>
<a-list-item @click='goRes({status: "5"})' slot='renderItem' slot-scope='item, index'>
<!-- <a slot='actions'>审核</a>-->
<a-list-item-meta
:description="item.time + '' +item.org + ''"
@ -275,6 +275,14 @@ export default {
// this.drawChart()
},
methods: {
onSelect(nowDate) {
let date = nowDate.format('YYYY-MM-DD')
this.goRes({date: date})
},
//
goRes(query) {
this.$router.push({ name: 'reservation', query: query })
},
/**
* 改变会议室管理统计日期
* @param date

View File

@ -58,14 +58,20 @@
<a-input placeholder='预约单位' v-model='queryParam.userOrg' />
</a-form-item>
</a-col>
<a-col :md='5' :sm='15'>
<a-form-item label='预约时间'>
<a-date-picker v-model='queryParam.chooseDate' @change='res => this.$forceUpdate()' />
</a-form-item>
</a-col>
<a-col :md='8' :sm='24'>
<span class='table-page-search-submitButtons'>
<a-button type='primary' @click='$refs.table.refresh(true)'>查询</a-button>
<a-button style='margin-left: 8px' @click='reset'>重置</a-button>
<a-dropdown v-if='removeEnable&&selectedRowKeys.length > 0'>
<a-button style='margin-left: 8px' type='danger' icon='delete'
@click='delByIds(selectedRowKeys)'>删除</a-button>
</a-dropdown>
<a-button v-if='isAdmin' type='danger' style='margin-left: 8px'
@click='exportOrderList'>导出会议日程</a-button>
<a-button v-if='isAdmin' type='danger' style='margin-left: 8px'
@click='exportMonthOrder'>导出月度汇总</a-button>
</span>
</a-col>
</a-row>
@ -157,7 +163,13 @@
<script>
import { STable } from '@/components'
import { getMeetingReservationList, cancelOrder, approveOrder } from '@/api/admin/meeting/meetingReservation'
import {
getMeetingReservationList,
cancelOrder,
approveOrder,
expMRByDate,
expMRByMonth
} from '@/api/admin/meeting/meetingReservation'
import { checkPermission } from '@/utils/permissions'
import moment from 'moment'
@ -237,7 +249,12 @@ export default {
// Promise
loadData: parameter => {
// this.queryParam.name = this.$route.params.roomId
//
let chooseDate = this.queryParam.chooseDate
if (chooseDate) {
this.queryParam.filterDate = chooseDate.format('YYYY-MM-DD')
} else {
this.queryParam.filterDate = ''
}
return getMeetingReservationList(Object.assign(parameter, this.queryParam)).then(res => {
for (let key in res.rows) {
let startTime = res.rows[key].start
@ -331,8 +348,28 @@ export default {
},
filters: {},
created() {
let date = this.$route.query.date
if (date) {
this.queryParam.chooseDate = moment(date)
}
let status = this.$route.query.status
if (status) {
this.queryParam.status = status
}
//
const query = { ...this.$route.query }
//
if (query.date) {
delete query.date
}
if (query.status) {
delete query.status
}
// 使 $router.replace()
this.$router.replace({ query })
},
mounted() {
},
methods: {
reset() {
@ -456,6 +493,60 @@ export default {
},
staff(id) {
this.$refs.staffModal.add(id)
},
//
exportOrderList() {
let chooseDate = this.queryParam.chooseDate
let filterDate = ''
if (chooseDate) {
filterDate = chooseDate.format('YYYY-MM-DD')
} else {
filterDate = ''
}
if (filterDate == '') {
this.$message.error('请选择会议预约时间')
return
}
expMRByDate({
'filterDate': filterDate,
'userOrg': this.queryParam.userOrg,
'title': this.queryParam.title,
'status': this.queryParam.status
}).then(res => {
this.exportExcel(chooseDate.format('YYYYMMDD') + '会议室预约记录', res)
})
},
exportMonthOrder() {
let chooseDate = this.queryParam.chooseDate
let filterDate = ''
if (chooseDate) {
filterDate = chooseDate.format('YYYY-MM')
} else {
filterDate = ''
}
if (filterDate == '') {
this.$message.error('请选择会议预约时间')
return
}
expMRByMonth({
'month': filterDate
}).then(res => {
this.exportExcel(chooseDate.format('YYYYMM') + '月度会议汇总', res)
})
},
exportExcel(filename, res) {
const link = document.createElement('a')
let blob = new Blob([res], { type: 'application/vnd.ms-excel;charset=UTF-8' })
link.style.display = 'none'
link.href = URL.createObjectURL(blob)
let num = ''
for (let i = 0; i < 10; i++) {
num += Math.ceil(Math.random() * 10)
}
link.setAttribute('download', filename + '.xls')
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}
},
watch: {