dbd-meeting-html/src/views/admin/meeting/modules/RoomOrderDetailModal.vue
471615499@qq.com 3647205419 预约列表、审核、分配会务
去掉冗余功能
2024-10-24 22:31:53 +08:00

273 lines
7.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<a-modal
title='预约详情'
style='top: 20px'
width='1200px'
v-model='visible'
:ok-button-props='{style:{display:"none"}}'
@ok='handleSubmit'
>
<a-alert v-if='order.status == 7' message="预约成功,待开始" type="success" show-icon style='margin-bottom: 10px' />
<a-alert v-if='order.status == 1' message="已取消" :description='order.operate[order.operate.length - 1].content' type="info" show-icon style='margin-bottom: 10px' />
<a-alert v-if='order.status == 3' message="已驳回" :description='order.operate[order.operate.length - 1].content' type="error" show-icon style='margin-bottom: 10px' />
<a-alert v-if='order.status == 4' message="占用" type="info" show-icon style='margin-bottom: 10px' />
<a-alert v-if='order.status == 5' message="待审核" type="info" show-icon style='margin-bottom: 10px' />
<a-alert v-if='order.status == 9' message="进行中" type="success" show-icon style='margin-bottom: 10px' />
<a-alert v-if='order.status == 11' message="已结束" type="warning" show-icon style='margin-bottom: 10px' />
<a-card title='会议室情况'>
<a-tabs default-active-key='1' @change='callback'>
<a-tab-pane key='1' tab='会议室详情'>
<a-carousel autoplay>
<div v-for='item in banner'>
<img :src='item' />
</div>
</a-carousel>
<a-descriptions title='' bordered>
<a-descriptions-item label='会议室名称'>
{{ roomDetail.name }}
</a-descriptions-item>
<a-descriptions-item label='会议室概况'>
{{ roomDetail.floor }} | {{ roomDetail.roomNum }} | {{ roomDetail.capacityNum }} |
{{ roomDetail.typeName }}
</a-descriptions-item>
<a-descriptions-item label='会议室设备'>
{{ roomDetail.device }}
</a-descriptions-item>
<a-descriptions-item label='会议室描述'>
{{ roomDetail.content }}
</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane key='2' tab='预约情况' force-render>
<a-table :columns='recordCol' :data-source='recordList'>
</a-table>
</a-tab-pane>
</a-tabs>
</a-card>
<a-card title='预约信息' style='margin-top: 10px'>
<a-descriptions title='' bordered>
<a-descriptions-item label='会议时间'>
{{ order.timeSlot }}
</a-descriptions-item>
<a-descriptions-item label='会议名称'>
{{ order.title }}
</a-descriptions-item>
<a-descriptions-item label='参会人数'>
{{ order.personNum }}
</a-descriptions-item>
<a-descriptions-item label='参会领导'>
{{ order.leader }}
</a-descriptions-item>
<a-descriptions-item label='预约部门'>
{{ order.userOrg }}
</a-descriptions-item>
<a-descriptions-item label='会议预约人'>
{{ order.bookingUserName }}
</a-descriptions-item>
<a-descriptions-item label='联系方式'>
{{ order.bookingUserPhone }}
</a-descriptions-item>
<a-descriptions-item label='备注' :span='2'>
{{ order.remark }}
</a-descriptions-item>
<a-descriptions-item label='会议服务' :span='3'>
{{ order.service }}
</a-descriptions-item>
<a-descriptions-item label='会务人员' :span='3'>
音控组{{ order.staff.music }}
<br />
会务服务组{{ order.staff.serve }}
</a-descriptions-item>
</a-descriptions>
</a-card>
</a-modal>
</template>
<script>
import {
meetingRoomDetail, getDep, saveMeetingReservation, getOrderInfo
} from '@/api/admin/meeting/meetingReservation'
import pick from 'lodash.pick'
import storage from 'store'
import moment from 'moment'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { getMeetingDict } from '@/api/admin/meeting/roomContent'
export default {
name: 'RoomOrderDetailModal',
props: {},
components: {},
data() {
return {
visible: false,
labelCol: {
xs: { span: 24 },
sm: { span: 8 }
},
wrapperCol: {
xs: { span: 35 },
sm: { span: 16 }
},
id: '',
rId: '',
banner: '',
roomDetail: {},
recordList: [],
order: {},
recordCol: [{
title: '预约时间',
dataIndex: 'time'
}, {
title: '预约单位',
dataIndex: 'userOrg'
}, {
title: '预约人',
dataIndex: 'bookingUserName'
}, {
title: '联系方式',
dataIndex: 'bookingUserPhone'
}]
}
},
beforeCreate() {
},
created() {
},
mounted() {
// this.getDict()
},
methods: {
show(id) {
this.rId = id
getOrderInfo({ id: this.rId }).then((res) => {
this.id = res.mr.roomId
// 获取会议室信息
this.getRoomInfo()
// 处理会议时间
let sTime = res.mr.start
let eTime = res.mr.end
res.mr.timeSlot = moment(sTime).format('YYYY-MM-DD HH:mm') + '~' + moment(eTime).format('HH:mm')
// 处理会议服务
let service = ''
for (let key in res.serve) {
service += '#' + res.serve[key]['name'] + ' '
}
res.mr.service = service
// 处理会务人员
let staff = {
music: '',
serve: ''
}
for (let key in res.waiters) {
if (res.waiters[key].type == '1') {
// 音控组
staff.music += '#' + res.waiters[key].username + ' '
}
if (res.waiters[key].type == '3') {
// 会务服务组
staff.serve += '#' + res.waiters[key].username + ' '
}
}
if (staff.music == '') {
staff.music = '无'
}
if (staff.serve == '') {
staff.serve = '无'
}
res.mr.staff = staff
this.order = res.mr
})
this.visible = true
},
getRoomInfo() {
meetingRoomDetail({
roomId: this.id
}).then(res => {
let detail = res.room // 详细信息
let recordList = res.mr // 预约信息
let bannerList = [] // 轮播图
if (detail.imgs) {
try {
bannerList = detail.imgs.map(item => process.env.VUE_APP_MODEL_BASE_URL + item.url)
} catch (error) {
console.log(`JSON error : ${error}`)
}
}
let newRecordList = []
for (let key in recordList) {
let eachObj = recordList[key]
let sTime = eachObj['start']
let eTime = eachObj['end']
eachObj['date'] = moment(sTime).format('YYYY-MM-DD')
eachObj['time'] = moment(sTime).format('YYYY-MM-DD HH:mm') + '~' + moment(eTime).format('HH:mm')
newRecordList.push(eachObj)
}
this.recordList = newRecordList
this.roomDetail = detail
this.banner = bannerList
// this.getDict(detail.ext1)
})
}
}
}
</script>
<style scoped>
/* For demo */
.ant-carousel >>> .slick-dots {
height: auto;
}
.ant-carousel >>> .slick-slide img {
border: 5px solid #fff;
display: block;
margin: auto;
max-width: 300px;
}
.ant-carousel >>> .slick-thumb {
bottom: -45px;
}
.ant-carousel >>> .slick-thumb li {
width: 60px;
height: 45px;
}
.ant-carousel >>> .slick-thumb li img {
width: 100%;
height: 100%;
filter: grayscale(100%);
}
.ant-carousel >>> .slick-thumb li.slick-active img {
filter: grayscale(0%);
}
.self-item-cell {
display: flex;
justify-content: space-between;
align-items: center;
}
.self-item-cell .self-item {
display: flex;
justify-content: flex-start;
align-items: center;
width: 50%;
}
.self-item-cell .self-item:first-of-type {
margin-right: 10px;
}
.self-item-cell .self-item .title {
margin-right: 10px;
}
.self-item-cell .self-item .input {
flex: 1;
}
</style>