新增了会议预约记录的页面和会议管理的页面

This commit is contained in:
chenze 2024-10-17 16:15:26 +08:00
parent f232fa9d63
commit 3720b9ccd9
4 changed files with 811 additions and 0 deletions

View File

@ -0,0 +1,42 @@
import { axios } from '@/utils/request'
const api = {
meetingReservation: '/admin/mr'
}
export function getMeetingReservationList (parameter) {
return axios({
url: api.meetingReservation + '/list',
method: 'post',
data: parameter
})
}
export function getAllRoom (parameter) {
return axios({
url: api.meetingReservation + '/getAllRoom',
method: 'post',
data: parameter
})
}
export function saveMeetingReservation (parameter) {
return axios({
url: api.meetingReservation + (parameter.id > 0 ? '/update' : '/save'),
method: 'post',
data: parameter,
headers: {
'Content-Type': 'application/json;charset=UTF-8'
}
})
}
export function delMeetingReservation (parameter) {
return axios({
url: api.meetingReservation + '/remove',
method: 'post',
params: parameter
})
}
export const meetingReservationExport = api.meetingReservation + '/export'

View File

@ -0,0 +1,192 @@
<template>
<a-card :bordered="false">
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col :md="5" :sm="15">
<a-form-item label="状态">
<a-select v-model="queryParam.status">
<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="5">
待审核
</a-select-option>
<a-select-option value="7">
审核通过
</a-select-option>
<a-select-option value="9">
进行中
</a-select-option>
<a-select-option value="11">
已结束
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="5" :sm="15">
<a-form-item label="会议室名称">
<a-input placeholder="会议室名称" v-model="queryParam.roomName" />
</a-form-item>
</a-col>
<a-col :md="5" :sm="15">
<a-form-item label="设备">
<a-input placeholder="设备" v-model="queryParam.deviceId" />
</a-form-item>
</a-col>
<a-col :md="5" :sm="15">
<a-form-item label="人数">
<a-input placeholder="请输人数" v-model="queryParam.num" />
</a-form-item>
</a-col>
<a-col :md="5" :sm="15">
<a-form-item label="形式">
<a-input placeholder="请输入形式" v-model="queryParam.parkId" />
</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="() => queryParam = {}">重置</a-button>
<a-button type="primary" style="margin-left: 450px">会议预约</a-button>
<a-button type="success" style="margin-left: 8px">占用</a-button>
</span>
</a-col>
</a-row>
</a-form>
<div class="room">
<div class="roomItem" v-for="item in roomList">
<div class="title">
{{ item.name }}
</div>
<div class="nav">
<div class="nav-item" v-for="room in item.list" :key="room.id">
<div class="desc" >
{{ room.name }}
</div>
<!-- <div class="desc disabled" >-->
<!-- {{ room.name }}-->
<!-- </div>-->
<div class="desc-item">
<div class="num">
{{ room.capacityNum }}
</div>
<div class="shape">
{{room.typeName}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</a-card>
</template>
<script>
import { getAllRoom } from '@/api/admin/meeting/meetingReservation'
export default {
name: 'MeetingMangerList',
data () {
return {
form: this.$form.createForm(this),
mdl: {},
// /
advanced: false,
//
queryParam: {},
roomList: []
//
}
},
created () {
this.getAllRoomList()
},
methods: {
getAllRoomList () {
getAllRoom({ timeFormat: 0, min: 1, max: 1000 }).then(res => {
const roomArr = {}
const valueObj = res.data
// eslint-disable-next-line no-unused-vars
for (const key in valueObj) {
const eachObj = valueObj[key]
if (eachObj['floorId'] in roomArr) {
} else {
roomArr[eachObj['floorId']] = {
name: eachObj['floor'],
list: []
}
}
roomArr[eachObj['floorId']]['list'].push(eachObj)
}
this.roomList = roomArr
console.log(this.roomList)
})
}
}
}
</script>
<style scoped>
.room {
border-top: 1px solid rgb(221 215 215 / 65%);
}
.roomItem {
margin-top: 20px;
}
.roomItem .desc {
width: 150px;
height: 50px;
background-color: #A3CDFF;
border-radius: 10px 10px 0 0px;
line-height: 50px;
text-align: center;
font-size: 20px;
margin-top: 20px;
}
.roomItem .desc-item {
width: 150px;
height: 30px;
background-color: #D8E9FC;
display: flex;
justify-content: space-between;
align-items: center;
border-radius: 0 0px 10px 10px;
}
.desc-item .num {
padding-left: 10px;
}
.desc-item .shape {
padding-right: 10px;
}
.disabled{
background-color: #F2F2F2 !important;
}
.nav {
display: flex;
}
.nav-item {
margin-left: 20px;
}
</style>

View File

@ -0,0 +1,326 @@
<template>
<a-card :bordered="false">
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="预约号">-->
<!-- <a-input placeholder="请输入预约号" v-model="queryParam.sn"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="会议室id">-->
<!-- <a-input placeholder="请输入会议室id" v-model="queryParam.roomId"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="预约时间格式0 任意时间1上午2下午3晚上">-->
<!-- <a-input placeholder="请输入预约时间格式0 任意时间1上午2下午3晚上" v-model="queryParam.timeFormat"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="参与人数">-->
<!-- <a-input placeholder="请输入参与人数" v-model="queryParam.personNum"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="参会领导">-->
<!-- <a-input placeholder="请输入参会领导" v-model="queryParam.leader"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="预约人姓名">-->
<!-- <a-input placeholder="请输入预约人姓名" v-model="queryParam.bookingUserName"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="预约人联系电话">-->
<!-- <a-input placeholder="请输入预约人联系电话" v-model="queryParam.bookingUserPhone"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="预约用户单位id">-->
<!-- <a-input placeholder="请输入预约用户单位id" v-model="queryParam.userOrgId"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="预约用户单位名称">-->
<!-- <a-input placeholder="请输入预约用户单位名称" v-model="queryParam.userOrg"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="操作记录json 格式">-->
<!-- <a-input placeholder="请输入操作记录json 格式" v-model="queryParam.operate"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="扩展1">-->
<!-- <a-input placeholder="请输入扩展1" v-model="queryParam.ext1"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="扩展2">-->
<!-- <a-input placeholder="请输入扩展2" v-model="queryParam.ext2"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="扩展3">-->
<!-- <a-input placeholder="请输入扩展3" v-model="queryParam.ext3"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :md="5" :sm="15">-->
<!-- <a-form-item label="园区ID">-->
<!-- <a-input placeholder="请输入园区ID" v-model="queryParam.parkId"/>-->
<!-- </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="() => queryParam = {}">重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<div class="table-operator">
<a-button v-if="addEnable" type="primary" icon="plus" @click="$refs.modal.add()">新建</a-button>
<a-dropdown v-if="removeEnable&&selectedRowKeys.length > 0">
<a-button type="danger" icon="delete" @click="delByIds(selectedRowKeys)">删除</a-button>
</a-dropdown>
</div>
<s-table
size="default"
ref="table"
rowKey="id"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
:columns="columns"
:data="loadData"
>
<!-- '预约状态1 取消 3 驳回 4 占用 5 待审核 7 审核通过,待开始 9 进行中 11已结束',-->
<span slot="status" slot-scope="text, record">
<a-tag v-if="record.status == 1" color="pink">
取消
</a-tag>
<a-tag v-if="record.status == 3" color="red">
驳回
</a-tag>
<a-tag v-if="record.status == 4" color="purple">
占用
</a-tag>
<a-tag v-if="record.status == 5" color="blue">
待审核
</a-tag>
<a-tag v-if="record.status == 7" color="green">
审核通过
</a-tag>
<a-tag v-if="record.status == 9" color="cyan">
进行中
</a-tag>
<a-tag v-if="record.status == 11" color="orange">
已结束
</a-tag>
</span>
<span slot="action" slot-scope="text, record">
<a v-if="editEnabel" @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a v-if="removeEnable" @click="delByIds([record.id])">删除</a>
</span>
</s-table>
<meetingReservation-modal ref="modal" @ok="handleOk" />
</a-card>
</template>
<script>
import { STable } from '@/components'
import { delMeetingReservation, getMeetingReservationList } from '@/api/admin/meeting/meetingReservation'
import MeetingReservationModal from './modules/MeetingReservationModal.vue'
import { checkPermission } from '@/utils/permissions'
import { getRoomServeList } from '@/api/admin/meeting/roomServe'
export default {
name: 'TableList',
components: {
STable,
MeetingReservationModal
},
data () {
return {
labelCol: {
xs: { span: 24 },
sm: { span: 5 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 }
},
form: this.$form.createForm(this),
mdl: {},
// /
advanced: false,
//
queryParam: {},
//
columns: [
{
title: '会议名称',
dataIndex: 'title'
},
{
title: '会议室',
dataIndex: 'name'
},
// {
// title: '',
// dataIndex: 'sn'
// },
{
title: '预约-开始时间',
dataIndex: 'start',
sorter: true
},
{
title: '预约-结束时间',
dataIndex: 'end',
sorter: true
},
{
title: '预约用户单位名称',
dataIndex: 'userOrg'
},
{
title: '预约人姓名',
dataIndex: 'bookingUserName'
},
{
title: '预约人联系电话',
dataIndex: 'bookingUserPhone'
},
{
title: '会议服务',
dataIndex: 'device'
},
{
title: '预约状态',
dataIndex: 'status',
scopedSlots: { customRender: 'status' }
},
{
title: '操作',
width: '200px',
dataIndex: 'action',
scopedSlots: { customRender: 'action' }
}
// {
// title: '0 123',
// dataIndex: 'timeFormat'
// },
// {
// title: '',
// dataIndex: 'personNum'
// },
// {
// title: '',
// dataIndex: 'leader'
// },
// {
// title: 'id',
// dataIndex: 'userOrgId'
// },
// {
// title: '1 3 4 5 7 9 11',
// dataIndex: 'status'
// },
// {
// title: 'json ',
// dataIndex: 'operate'
// },
// {
// title: '',
// dataIndex: 'remark'
// },
// {
// title: '1',
// dataIndex: 'ext1'
// },
// {
// title: '2',
// dataIndex: 'ext2'
// },
// {
// title: '3',
// dataIndex: 'ext3'
// },
// {
// title: 'ID',
// dataIndex: 'parkId'
// },
],
// Promise
loadData: parameter => {
return getMeetingReservationList(Object.assign(parameter, this.queryParam))
},
serveLoadData: (parameter) => {
let param = {
parkId: this.parkId
}
return getRoomServeList(Object.assign(parameter, param))
},
selectedRowKeys: [],
selectedRows: [],
addEnable: checkPermission('meeting:meetingReservation:add'),
editEnabel: checkPermission('meeting:meetingReservation:edit'),
removeEnable: checkPermission('meeting:meetingReservation:remove')
}
},
filters: {},
created () {
},
methods: {
onSelectChange (selectedRowKeys, selectedRows) {
this.selectedRowKeys = selectedRowKeys
this.selectedRows = selectedRows
},
handleAdd () {
this.$refs.modal.add()
},
handleEdit (record) {
this.$refs.modal.edit(record)
},
handleOk () {
this.$refs.table.refresh(true)
console.log('handleSaveOk')
},
delByIds (ids) {
delMeetingReservation({ ids: ids.join(',') }).then(res => {
if (res.code === 0) {
this.$message.success('删除成功')
this.handleOk()
} else {
this.$message.error(res.msg)
}
this.selectedRowKeys = []
})
}
},
watch: {
/*
'selectedRows': function (selectedRows) {
this.needTotalList = this.needTotalList.map(item => {
return {
...item,
total: selectedRows.reduce( (sum, val) => {
return sum + val[item.dataIndex]
}, 0)
}
})
}
*/
}
}
</script>

View File

@ -0,0 +1,251 @@
<template>
<a-modal
title="操作"
style="top: 20px;"
:width="800"
v-model="visible"
:confirmLoading="confirmLoading"
@ok="handleSubmit"
>
<a-form :form="form">
<a-form-item style="display:none">
<a-input v-decorator="['id']" />
</a-form-item>
<a-form-item style="display:none">
<a-input v-decorator="['version']" />
</a-form-item>
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="会议名称">
<a-input placeholder="会议名称" v-decorator="['title']" />
</a-form-item>
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="会议室名称">
<a-select v-decorator="['roomId']"
@change="selectRoomList"
>
<a-select-option v-for="item in roomList" :key="item.id">{{ item.name }}</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="预约时间">
<a-date-picker
v-model="startValue"
v-decorator="['start']"
:disabled-date="disabledStartDate"
show-time
format="YYYY-MM-DD HH:mm:ss"
placeholder="开始时间"
@openChange="handleStartOpenChange"
/>
<a-date-picker
v-model="startValue"
v-decorator="['end']"
:disabled-date="disabledEndDate"
show-time
format="YYYY-MM-DD HH:mm:ss"
placeholder="结束时间"
:open="endOpen"
@openChange="handleEndOpenChange"
/>
</a-form-item>
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="预约人姓名">
<a-input placeholder="预约人姓名" v-decorator="['bookingUserName']" />
</a-form-item>
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="预约人联系电话">
<a-input placeholder="预约人联系电话" v-decorator="['bookingUserPhone']" />
</a-form-item>
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="预约用户单位名称">
<a-input placeholder="预约用户单位名称" v-decorator="['userOrg']" />
</a-form-item>
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="会议服务">
<a-select v-decorator="['service']"
>
<a-select-option v-for="item in serviceList" :key="item.value">{{ item.text }}</a-select-option>
</a-select>
</a-form-item>
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="预约号">-->
<!-- <a-input placeholder="预约号" v-decorator="['sn', {rules: [{required: true, message: '请输入预约号'}]}]"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="会议室id">-->
<!-- <a-input placeholder="会议室id" v-decorator="['roomId', {rules: [{required: true, message: '请输入会议室id'}]}]"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="预约时间格式0 任意时间1上午2下午3晚上">-->
<!-- <a-input placeholder="预约时间格式0 任意时间1上午2下午3晚上" v-decorator="['timeFormat', {rules: [{required: true, message: '请输入预约时间格式0 任意时间1上午2下午3晚上'}]}]"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="参与人数">-->
<!-- <a-input placeholder="参与人数" v-decorator="['personNum']"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="参会领导">-->
<!-- <a-input placeholder="参会领导" v-decorator="['leader']"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="操作记录json 格式">-->
<!-- <a-input placeholder="操作记录json 格式" v-decorator="['operate']"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="备注">-->
<!-- <a-input placeholder="备注" v-decorator="['remark']"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="扩展1">-->
<!-- <a-input placeholder="扩展1" v-decorator="['ext1']"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="扩展2">-->
<!-- <a-input placeholder="扩展2" v-decorator="['ext2']"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="扩展3">-->
<!-- <a-input placeholder="扩展3" v-decorator="['ext3']"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="创建者">-->
<!-- <a-input placeholder="创建者" v-decorator="['createBy', {rules: [{required: true, message: '请输入创建者'}]}]"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="更新者">-->
<!-- <a-input placeholder="更新者" v-decorator="['updateBy']"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="租户ID">-->
<!-- <a-input placeholder="租户ID" v-decorator="['tenantId']"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="园区ID">-->
<!-- <a-input placeholder="园区ID" v-decorator="['parkId']"/>-->
<!-- </a-form-item>-->
</a-form>
</a-modal>
</template>
<script>
import { saveMeetingReservation, getAllRoom } from '@/api/admin/meeting/meetingReservation'
import pick from 'lodash.pick'
import { getMeetingDict } from '@/api/admin/meeting/roomContent'
export default {
name: 'MeetingReservationModal',
props: {},
components: {},
data () {
return {
visible: false,
labelCol: {
xs: { span: 24 },
sm: { span: 5 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 }
},
confirmLoading: false,
mdl: {},
form: this.$form.createForm(this),
startValue: null,
endValue: null,
endOpen: false,
roomList: [],
serviceList: []
}
},
beforeCreate () {
},
created () {
this.getAllRoomList()
},
mounted () {
this.getDict()
},
methods: {
getDict () {
getMeetingDict().then((res) => {
const dataObj = res.data
//
const _serviceList = []
for (const key in dataObj.services) {
const eachObj = dataObj.services[key]
const keys = Object.keys(eachObj)
_serviceList.push({
text: keys[0],
value: eachObj[keys[0]]
})
}
this.serviceList = _serviceList
})
console.log(this.serviceList)
},
selectRoomList () {
console.log()
},
getAllRoomList () {
getAllRoom({ timeFormat: 0, min: 1, max: 1000 }).then(res => {
this.roomList = res.data
})
},
disabledStartDate (startValue) {
const endValue = this.endValue
if (!startValue || !endValue) {
return false
}
return startValue.valueOf() > endValue.valueOf()
},
disabledEndDate (endValue) {
const startValue = this.startValue
if (!endValue || !startValue) {
return false
}
return startValue.valueOf() >= endValue.valueOf()
},
handleStartOpenChange (open) {
if (!open) {
this.endOpen = true
}
},
handleEndOpenChange (open) {
this.endOpen = open
},
add () {
this.form.resetFields()
this.edit({ id: 0 })
},
edit (record) {
this.mdl = Object.assign(record)
this.visible = true
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.mdl, 'id', 'sn', 'roomId', 'start', 'end', 'timeFormat', 'title', 'personNum', 'leader', 'bookingUserName', 'bookingUserPhone', 'userOrgId', 'userOrg', 'status', 'operate', 'remark', 'ext1', 'ext2', 'ext3', 'deleteFlag', 'createBy', 'createTime', 'updateBy', 'updateTime', 'tenantId', 'parkId'))
})
},
handleSubmit (e) {
e.preventDefault()
this.form.validateFields((err, values) => {
if (!err) {
console.log('Received values of form: ', values)
this.confirmLoading = true
saveMeetingReservation(values).then(res => {
if (res.code === 0) {
this.$message.success('保存成功')
this.$emit('ok')
this.visible = false
} else {
this.$message.error(res.msg)
}
}).catch(() => {
this.$message.error('系统错误,请稍后再试')
}).finally(() => {
this.confirmLoading = false
})
}
})
}
},
watch: {
startValue (val) {
console.log('startValue', val)
},
endValue (val) {
console.log('endValue', val)
}
/*
'selectedRows': function (selectedRows) {
this.needTotalList = this.needTotalList.map(item => {
return {
...item,
total: selectedRows.reduce( (sum, val) => {
return sum + val[item.dataIndex]
}, 0)
}
})
}
*/
}
}
</script>