会议预约功能完善

预约功能增删改查;
审核、会务列表页
This commit is contained in:
471615499@qq.com 2024-09-17 20:26:20 +08:00
parent 84c9e6f7c4
commit a7dcd25647
24 changed files with 2546 additions and 800 deletions

View File

@ -62,6 +62,8 @@
"pages/meeting/reservationRecord/reservationRecord", "pages/meeting/reservationRecord/reservationRecord",
"pages/meeting/reservationRecord/meetingRecord/meetingRecord", "pages/meeting/reservationRecord/meetingRecord/meetingRecord",
"pages/meeting/reservationRecord/meetingRecord/meetingDetail/meetingDetail", "pages/meeting/reservationRecord/meetingRecord/meetingDetail/meetingDetail",
"pages/meeting/reservationRecord/approve/approve",
"pages/meeting/reservationRecord/service/service",
"pages/meeting/invite/invite", "pages/meeting/invite/invite",
"pages/meeting/visitorIinvitation/list/list", "pages/meeting/visitorIinvitation/list/list",
"pages/meeting/visitorIinvitation/add/add", "pages/meeting/visitorIinvitation/add/add",
@ -74,6 +76,7 @@
"pages/meeting/reservationRecord/exhibitionRecord/list/list", "pages/meeting/reservationRecord/exhibitionRecord/list/list",
"pages/meeting/reservationRecord/exhibitionRecord/detail/detail", "pages/meeting/reservationRecord/exhibitionRecord/detail/detail",
"pages/meeting/meetingRoom/meetingService/meetingService", "pages/meeting/meetingRoom/meetingService/meetingService",
"pages/reportRepair/index/index", "pages/reportRepair/index/index",
"pages/reportRepair/report/report", "pages/reportRepair/report/report",
"pages/reportRepair/query/record/record", "pages/reportRepair/query/record/record",

View File

@ -183,7 +183,7 @@
} }
.fixedbox { .fixedbox {
width: 100%; width: 50%;
text-align: center; text-align: center;
margin-top: 70rpx; margin-top: 70rpx;
float: left; float: left;

View File

@ -26,14 +26,14 @@ Page({
type: "assign", type: "assign",
name: "会议审核", name: "会议审核",
img: "/profile/static/repair/index/case.png", img: "/profile/static/repair/index/case.png",
path: "/pages/meeting/visitorIinvitation/list/list", path: "/pages/meeting/reservationRecord/approve/approve",
visible: false visible: true
}, { }, {
type: "repair", type: "repair",
name: "会务服务", name: "会务服务",
img: "/profile/static/repair/index/repair.png", img: "/profile/static/repair/index/repair.png",
path: "/pages/reportRepair/repair/index/index", path: "/pages/meeting/reservationRecord/service/service",
visible: false visible: true
}], }],
timeShow: false, timeShow: false,
currentDate: new Date().getTime(), currentDate: new Date().getTime(),

View File

@ -15,6 +15,7 @@ Page({
data: { data: {
IMG_NAME: app.IMG_NAME, IMG_NAME: app.IMG_NAME,
roomDataList: {}, roomDataList: {},
rId: '',
date: '', date: '',
queryParam: { queryParam: {
timeRangeDict: { timeRangeDict: {
@ -87,13 +88,18 @@ Page({
title: options.name title: options.name
}) })
} }
if (!options.rId) {
// 首页过来会找不到rId设为空否则会报错
options.rId = ''
}
const time = options.time const time = options.time
if (!time || time === '') { if (!time || time === '') {
app.selfShowMsg('请选择时间!', '/pages/meeting/index/index') app.selfShowMsg('请选择时间!', '/pages/meeting/index/index')
return return
} }
this.setData({ this.setData({
date: time date: time,
rId: options.rId
}) })
const _date = new Date(parseInt(time)) const _date = new Date(parseInt(time))
const _year = _date.getFullYear() const _year = _date.getFullYear()
@ -285,7 +291,7 @@ Page({
timeRange = timeRange ? timeRange : 0 timeRange = timeRange ? timeRange : 0
// 跳转预约详情 // 跳转预约详情
wx.navigateTo({ wx.navigateTo({
url: "/pages/meeting/meetingRoom/meetingRoom?id=" + e.currentTarget.dataset.id + '&time=' + this.data.date + '&timeRange=' + timeRange, url: "/pages/meeting/meetingRoom/meetingRoom?id=" + e.currentTarget.dataset.id + '&time=' + this.data.date + '&timeRange=' + timeRange + '&rId=' + this.data.rId,
}) })
}, },

View File

@ -21,6 +21,7 @@ Page({
data: { data: {
IMG_NAME: app.IMG_NAME, IMG_NAME: app.IMG_NAME,
date: '', date: '',
rId: '',
dateText: '', dateText: '',
timeRange: '', timeRange: '',
timeRangeText: '', timeRangeText: '',
@ -110,7 +111,7 @@ Page({
startTime = parseInt(date) + (parseInt(startTimeArr[0]) * 60 * 60 + parseInt(startTimeArr[1]) * 60) * 1000 startTime = parseInt(date) + (parseInt(startTimeArr[0]) * 60 * 60 + parseInt(startTimeArr[1]) * 60) * 1000
let endTimeArr = endTime.split(':') let endTimeArr = endTime.split(':')
endTime = parseInt(date) + (parseInt(endTimeArr[0]) * 60 * 60 + parseInt(endTimeArr[1]) * 60) * 1000 endTime = parseInt(date) + (parseInt(endTimeArr[0]) * 60 * 60 + parseInt(endTimeArr[1]) * 60) * 1000
let paramUrl = "?meetingRoomId=" + meetingRoomId + "&startTime=" + selfFormatTimeYMDHMS(startTime) + "&endTime=" + selfFormatTimeYMDHMS(endTime); let paramUrl = "?meetingRoomId=" + meetingRoomId + "&startTime=" + selfFormatTimeYMDHMS(startTime) + "&endTime=" + selfFormatTimeYMDHMS(endTime) + '&rId=' + _this.data.rId;
// 结束时间不能小于开始时间 // 结束时间不能小于开始时间
if (startTime >= endTime) { if (startTime >= endTime) {
Notify('结束时间不能小于开始时间!') Notify('结束时间不能小于开始时间!')
@ -261,6 +262,7 @@ Page({
this.setData({ this.setData({
meetingRoomId: options.meetingRoomId, meetingRoomId: options.meetingRoomId,
date: time, date: time,
rId: options.rId,
dateText: _year + '年' + _month + '月' + _day + '日', dateText: _year + '年' + _month + '月' + _day + '日',
timeRange: _timeRange, timeRange: _timeRange,
timeRangeText: _timeRangeText, timeRangeText: _timeRangeText,

View File

@ -9,7 +9,7 @@ import {
calculateMeetingRoomAmountRq, calculateMeetingRoomAmountRq,
saveMeetingRecordRq, saveMeetingRecordRq,
saveChangyangMeetingRecordRq, saveChangyangMeetingRecordRq,
meetingRoomBookedRecordRq selectReservationByIdRq
} from "../../../../api/meeting/meetingRoom.js" } from "../../../../api/meeting/meetingRoom.js"
import { import {
@ -26,7 +26,7 @@ Page({
* 页面的初始数据 * 页面的初始数据
*/ */
data: { data: {
id: '', rId: '',
IMG_NAME: app.IMG_NAME, IMG_NAME: app.IMG_NAME,
detail: {}, detail: {},
meetingRoomId: null, meetingRoomId: null,
@ -45,22 +45,36 @@ Page({
*/ */
onLoad(options) { onLoad(options) {
console.log('onLoad', options); console.log('onLoad', options);
let selectCountTime = selfFormatTimeHM(options.startTime) + "-" + selfFormatTimeHM(options.endTime) + ' 共计' + twoTimeInterval(options.startTime, options.endTime)
this.setData({ this.setData({
...options, ...options,
userData: wx.getStorageSync('user'), userData: wx.getStorageSync('user'),
selectDay: selfFormatTimeYMD(options.startTime), // selectDay: selfFormatTimeYMD(options.startTime),
selectCountTime // selectCountTime,
}) })
if (options.startTime && options.endTime) {
this.getTimeDetail(options.startTime, options.endTime)
}
// 详细信息 // 详细信息
this.getDetail(); this.getDetail();
}, },
/**
* 计算并填充时间细节
* @param {*} sTime 开始时间 2024-09-18 09:04:00
* @param {*} eTime 结束时间 2024-09-18 10:04:00
*/
getTimeDetail(sTime, eTime) {
let selectCountTime = selfFormatTimeHM(sTime) + "-" + selfFormatTimeHM(eTime) + ' 共计' + twoTimeInterval(sTime, eTime)
this.setData({
selectDay: selfFormatTimeYMD(sTime),
selectCountTime,
})
},
// 详细信息 // 详细信息
getDetail() { getDetail() {
let _this = this; let _this = this;
let _dataId = _this.data.id let _dataId = _this.data.rId
if (_dataId === '') { if (_dataId === '') {
console.log('新增预约')
// 为新增新增的会议室id是传来的 // 为新增新增的会议室id是传来的
let _meetingRoomId = _this.data.meetingRoomId let _meetingRoomId = _this.data.meetingRoomId
_this.getRoomInfo(_meetingRoomId) _this.getRoomInfo(_meetingRoomId)
@ -76,14 +90,52 @@ Page({
} }
}) })
} else { } else {
// 为编辑此时根据id获取信息获取信息后其中有roomId // 为编辑,编辑有两种情况,一是重新选择会议室和时间,另一种是编辑基本信息
meetingRoomBookedRecordRq(_dataId).then(res => { // 1. 无时间和会议室id此时根据id获取信息获取信息后其中有roomId
console.log(res) // 2. 有时间和会议室id此时根据会议室id获取会议室信息即可
let _meetingRoomId = _this.data.meetingRoomId
if (_meetingRoomId !== null) {
_this.getRoomInfo(_meetingRoomId)
}
selectReservationByIdRq(_dataId).then(res => {
console.log('编辑,获取信息', res)
if (_meetingRoomId === null) {
_meetingRoomId = res.data.roomContentId
_this.setData({
meetingRoomId: _meetingRoomId,
startTime: res.data.startTime,
endTime: res.data.endDate
})
let serviceId = []
for (let key in res.data.reservationServes) {
let eachObj = res.data.reservationServes[key]
serviceId.push(eachObj.serveId)
}
_this.getRoomInfo(_meetingRoomId, serviceId)
// 计算日期和时间
_this.getTimeDetail(res.data.startTime, res.data.endDate)
}
_this.setData({
detail: {
orderUser: res.data.orderUser,
orderTel: res.data.orderTel,
title: res.data.title,
personNum: res.data.personNum,
leader: res.data.leader,
depName: res.data.depName,
remark: res.data.remark,
}
})
}) })
} }
}, },
/**
getRoomInfo(roomId) { * 获取会议室基本信息
* @param {*} roomId 会议室id
* @param {*} serveId 提供服务id用于编辑时默认勾选
*/
getRoomInfo(roomId, serveId) {
serveId = serveId || []
// 获取会议室详情 // 获取会议室详情
let _this = this let _this = this
meetingRoomDetailRq(this.data.meetingRoomId).then(res => { meetingRoomDetailRq(this.data.meetingRoomId).then(res => {
@ -96,7 +148,22 @@ Page({
console.log(`JSON error : ${error}`); console.log(`JSON error : ${error}`);
} }
} }
// 提前处理服务,不需要进入页面后获取
let serviceList = detail.roomServeList.map(item => {
let isSel = false
if (serveId.includes(item.id)) {
isSel = true
}
return {
serveId: item.id,
serveName: item.serveName,
isSelect: isSel,
num: '',
type: 'free'
}
})
_this.setData({ _this.setData({
serviceList: serviceList,
room: detail, room: detail,
bannerList bannerList
}) })
@ -153,15 +220,15 @@ Page({
// }); // });
// return; // return;
// } // }
if (_this.data.detail.orderUser == '') { if (!_this.data.detail.orderUser || _this.data.detail.orderUser === '') {
// 错误提示 // 错误提示
Notify({ Notify({
type: 'danger', type: 'danger',
message: '请输入预约人!' message: '请输入预约人!'
}); });
return; return
} }
if (_this.data.detail.orderTel == '') { if (!_this.data.detail.orderUser || _this.data.detail.orderTel == '') {
// 错误提示 // 错误提示
Notify({ Notify({
type: 'danger', type: 'danger',
@ -169,6 +236,19 @@ Page({
}); });
return; return;
} }
// 处理一下serviceList
let service = []
let serviceList = _this.data.serviceList
// console.log(serviceList)
for (let key in serviceList) {
let eachObj = serviceList[key]
console.log(eachObj)
if (eachObj.isSelect === true) {
service.push(eachObj)
}
}
// console.log(service)
// return
saveChangyangMeetingRecordRq({ saveChangyangMeetingRecordRq({
"roomContentId": _this.data.meetingRoomId, "roomContentId": _this.data.meetingRoomId,
"userId": _this.data.userData.id, "userId": _this.data.userData.id,
@ -178,7 +258,7 @@ Page({
"startTime": _this.data.startTime, "startTime": _this.data.startTime,
"endDate": _this.data.endTime, "endDate": _this.data.endTime,
"orderMoney": 0, "orderMoney": 0,
"reservationServes": _this.data.serviceList, "reservationServes": service,
"remark": _this.data.detail.remark, "remark": _this.data.detail.remark,
"orderUser": _this.data.detail.orderUser, "orderUser": _this.data.detail.orderUser,
"orderTel": _this.data.detail.orderTel, "orderTel": _this.data.detail.orderTel,

View File

@ -90,6 +90,13 @@
<van-icon name="arrow" size="44rpx" /> <van-icon name="arrow" size="44rpx" />
</view> </view>
</view> </view>
<view class="meetingDetailView" style="margin-top: 10rpx;">
<view class="detailView">
<view class="itemList">
<view class="item" wx:for="{{serviceList}}" wx:key="*this" wx:if="{{item.isSelect}}">#{{item.serveName}}</view>
</view>
</view>
</view>
<!-- <view class="itemView" bind:tap="jumpMeetingCoupon"> <!-- <view class="itemView" bind:tap="jumpMeetingCoupon">
<view class="label">优惠券</view> <view class="label">优惠券</view>
<view class="content"> <view class="content">

View File

@ -14,24 +14,13 @@ Page({
data: { data: {
IMG_NAME: app.IMG_NAME, IMG_NAME: app.IMG_NAME,
meetingRoomId: null, meetingRoomId: null,
date: '', date: '', // 选择的时间
timeRange: '', rId: '', // 预约id
timeRange: '', // 选择的时间范围
detail: {}, detail: {},
bannerList: [], bannerList: [],
mapData: {}, mapData: {},
recordList: [{ recordList: [],
date: '2024年9月18日',
time: '14:00 - 17:30',
user: '王XX',
dep: '司法局',
tel: '15811111111'
}, {
date: '2024年9月19日',
time: '14:00 - 17:30',
user: '王XX',
dep: '司法局',
tel: '15811111111'
}],
canRes: true // 是否允许预约 canRes: true // 是否允许预约
}, },
@ -45,7 +34,8 @@ Page({
let timeRange = options.timeRange let timeRange = options.timeRange
_this.setData({ _this.setData({
date: time, date: time,
timeRange: timeRange timeRange: timeRange,
rId: options.rId
}) })
let meetingRoomId = options.id; let meetingRoomId = options.id;
meetingRoomDetailRq(meetingRoomId).then(res => { meetingRoomDetailRq(meetingRoomId).then(res => {
@ -154,7 +144,7 @@ Page({
let time = this.data.date let time = this.data.date
let timeRange = this.data.timeRange let timeRange = this.data.timeRange
wx.navigateTo({ wx.navigateTo({
url: "/pages/meeting/meetingRoom/meetingBooked/meetingBooked?meetingRoomId=" + meetingRoomId + '&time=' + time + '&timeRange=' + timeRange, url: "/pages/meeting/meetingRoom/meetingBooked/meetingBooked?meetingRoomId=" + meetingRoomId + '&time=' + time + '&timeRange=' + timeRange + '&rId=' + this.data.rId,
}) })
}, },

View File

@ -27,6 +27,7 @@ Page({
onLoad(options) { onLoad(options) {
let _this = this; let _this = this;
let serviceList = JSON.parse(options.serviceList) let serviceList = JSON.parse(options.serviceList)
// console.log(ser)
_this.setData({ _this.setData({
...options, ...options,
serviceList serviceList
@ -67,22 +68,21 @@ Page({
} }
// 查询服务信息 // 查询服务信息
queryServiceMsgRq({ // queryServiceMsgRq({
"dictType": "server_info" // "dictType": "server_info"
}).then(res => { // }).then(res => {
console.log('queryServiceMsgRq', res); // console.log('queryServiceMsgRq', res);
for (let i = 0; i < res.data.length; i++) { // for (let i = 0; i < res.data.length; i++) {
if (res.data[i].dictValue == app.tenantId) { // if (res.data[i].dictValue == app.tenantId) {
_this.setData({ // _this.setData({
msg: res.data[i].dictLabel // msg: res.data[i].dictLabel
}) // })
break; // break;
} // }
} // }
}) // })
}, },
// 服务选择 // 服务选择
checkBoxClick(e) { checkBoxClick(e) {
let _this = this; let _this = this;
@ -138,6 +138,7 @@ Page({
prevPage.setData({ prevPage.setData({
serviceList: _this.data.serviceList serviceList: _this.data.serviceList
}) })
console.log(_this.data.serviceList)
wx.navigateBack(); wx.navigateBack();
}, },

View File

@ -2,7 +2,7 @@
<!-- 免费服务 --> <!-- 免费服务 -->
<view class="serviceView"> <view class="serviceView">
<view class="leftLineTitle">免费服务</view> <view class="leftLineTitle">服务</view>
<view class="serviceItemView"> <view class="serviceItemView">
<view class="serviceItem" wx:if="{{item.type == 'free'}}" wx:for="{{serviceList}}" wx:key="*this"> <view class="serviceItem" wx:if="{{item.type == 'free'}}" wx:for="{{serviceList}}" wx:key="*this">
<van-checkbox value="{{ item.isSelect }}" data-id="{{item.serveId}}" shape="square" bind:tap="checkBoxClick"></van-checkbox> <van-checkbox value="{{ item.isSelect }}" data-id="{{item.serveId}}" shape="square" bind:tap="checkBoxClick"></van-checkbox>
@ -13,7 +13,7 @@
</view> </view>
<!-- 增值服务 --> <!-- 增值服务 -->
<view class="serviceView"> <!-- <view class="serviceView">
<view class="leftLineTitle">增值服务</view> <view class="leftLineTitle">增值服务</view>
<view class="serviceItemView"> <view class="serviceItemView">
<view class="serviceItem" wx:if="{{item.type == 'increment'}}" wx:for="{{serviceList}}" wx:key="*this"> <view class="serviceItem" wx:if="{{item.type == 'increment'}}" wx:for="{{serviceList}}" wx:key="*this">
@ -22,7 +22,7 @@
<van-field style="width: 10rpx; visibility: hidden;" data-id="{{item.serveId}}" value="{{ item.num }}" type="number" clearable placeholder="请输入人数" border="{{ false }}" bind:change="inputChange" /> <van-field style="width: 10rpx; visibility: hidden;" data-id="{{item.serveId}}" value="{{ item.num }}" type="number" clearable placeholder="请输入人数" border="{{ false }}" bind:change="inputChange" />
</view> </view>
</view> </view>
</view> </view> -->
<!-- 声明信息 --> <!-- 声明信息 -->
<view class="statementView"> <view class="statementView">

View File

@ -0,0 +1,610 @@
const app = getApp()
import Dialog from '@vant/weapp/dialog/dialog';
import Notify from '@vant/weapp/notify/notify';
import {
selfFormatTimeYMD,
selfFormatTimeHM
} from "../../../../utils/util.js"
import {
selectReservationListByUserIdRq,
selectVisitorInvitationRecordRq,
cancelOrderRq
} from "../../../../api/meeting/meetingRoom.js"
Page({
/**
* 页面的初始数据
*/
data: {
IMG_NAME: app.IMG_NAME,
userData: null,
dataChange: false,
tabTitle: '预约记录',
// 预约记录参数
reservationPageNum: 1,
reservationPageSize: 10,
reservationDataList: [],
reservationIsDataAll: false,
search: {
title: {
text: '会议名称',
value: ''
},
status: {
value: 1,
option: [{
text: '全部预约',
value: ''
},
{
text: '待审核',
value: 1
},
{
text: '待开始',
value: 2
},
{
text: '已结束',
value: 3
},
{
text: '已取消',
value: 4
},
{
text: '已驳回',
value: 5
},
]
}
},
showRejectReason: false, // 是否展示弹出层
rejectlId: '', // 驳回预约会议id
rejectReason: '', // 驳回预约原因
beforeReject(action) {
return new Promise(resolve => {
if (action === 'confirm') {
resolve(false)
} else {
resolve(true)
}
});
}, // 弹出层点击确认不关闭,手动关
// 会议重新预约需要参数
editId: '',
showEdit: false,
editAction: [{
name: '重新选择时间、会议室',
type: 1
},
{
name: '重新编辑会议信息',
type: 2
},
],
timeShow: false,
currentDate: new Date().getTime(),
minDate: new Date().getTime(),
maxDate: '',
formatter(type, value) {
if (type === 'year') {
return `${value}`;
}
if (type === 'month') {
return `${value}`;
}
if (type === 'day') {
return `${value}`;
}
return value;
},
// 参与记录参数,不需要
// participatePageNum: 1,
// participatePageSize: 10,
// participateDataList: [],
// participateIsDataAll: false,
},
changeSearchTitle(e) {
this.setData({
['search.title.value']: e.detail,
})
},
searchTitle() {
// 刷新预约数据
this.setData({
reservationPageNum: 1,
reservationDataList: [],
reservationIsDataAll: false,
})
this.getDataList()
this.selectComponent('#item').toggle()
},
changeSearchStatus(e) {
// 刷新预约数据
this.setData({
reservationPageNum: 1,
reservationDataList: [],
reservationIsDataAll: false,
['search.status.value']: e.detail
})
this.getDataList()
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let _this = this;
_this.setData({
userData: wx.getStorageSync('user'),
})
// 获取数据
let userId = _this.data.userData.id
// 获取预约数据
_this.getReservationData({
userId,
pageNum: _this.data.reservationPageNum,
pageSize: _this.data.reservationPageSize,
})
// 获取一月后时间,默认只能选一个月之后
const today = new Date()
const newDate = new Date(today)
newDate.setMonth(newDate.getMonth() + 1)
_this.setData({
maxDate: newDate.getTime()
})
},
// 获取数据
getDataList() {
// 获取参数
let _this = this;
let tabTitle = _this.data.tabTitle
let userId = _this.data.userData.id
let isDataAll = null
let pageNum = null
let pageSize = null
// 预约记录参数,目前只保留预约记录,其余去掉
isDataAll = _this.data.reservationIsDataAll
pageNum = _this.data.reservationPageNum
pageSize = _this.data.reservationPageSize
// 判断数据是否已全部加载
if (isDataAll) {
return;
}
// 传递参数
let param = {
userId,
pageNum,
pageSize
}
_this.getReservationData(param)
},
// 获取预约数据
getReservationData(param) {
let _this = this;
let {
pageNum,
pageSize,
userId
} = param
// 查询数据
selectReservationListByUserIdRq({
pageNum,
pageSize,
userId,
parkId: 25,
title: _this.data.search.title.value,
statusValue: _this.data.search.status.value
}).then(res => {
console.log('selectReservationListByUserIdRq', res);
// 判断数据是否全部查询
let queryDataList = res.page.records;
if (queryDataList && queryDataList.length > 0) {
// 更新参数
let reservationDataList = _this.data.reservationDataList.concat(_this.formartData(queryDataList));
let reservationPageNum = _this.data.reservationPageNum + 1;
_this.setData({
reservationPageNum,
reservationDataList,
})
} else {
_this.setData({
reservationIsDataAll: true
})
}
})
},
// 获取参与数据,此处不需要
getParticipateData(param) {
let _this = this;
let {
pageNum,
pageSize,
userId
} = param
// 查询数据
selectVisitorInvitationRecordRq({
pageNum,
pageSize,
userId
}).then(res => {
console.log('selectVisitorInvitationRecordRq', res);
// 判断数据是否全部查询
let queryDataList = res.page.records;
if (queryDataList && queryDataList.length > 0) {
// 更新参数
let participateDataList = _this.data.participateDataList.concat(_this.formartData(queryDataList));
let participatePageNum = _this.data.participatePageNum + 1;
_this.setData({
participatePageNum,
participateDataList,
})
} else {
_this.setData({
participateIsDataAll: true
})
}
})
},
// 格式化数据
formartData(queryDataList) {
// 格式化数据
return queryDataList.map(item => {
item.timeSlot = selfFormatTimeYMD(item.startTime) + ' ' + selfFormatTimeHM(item.startTime) + '~' + selfFormatTimeHM(item.endDate);
// 状态字体颜色
let statusColor = "#FFB119";
// 按钮是否显示
let statusValue = item.statusValue;
let showPay = false;
let showInvite = false;
let showCancel = false;
let showDetail = false;
// 待支付 0 :去支付、取消订单、查看详情
if (statusValue == 0) {
showPay = true;
showCancel = true;
showDetail = true;
// 状态字体颜色
statusColor = "#FFB119";
}
// 待使用 1去邀请、取消订单、查看详情
if (statusValue == 1) {
showInvite = true;
showCancel = true;
showDetail = true;
// 状态字体颜色
statusColor = "#3794FF";
// 待使用 修改为 预约成功
item.statusName = '预约成功'
}
// 进行中 2去邀请、查看详情
if (statusValue == 2) {
showInvite = true;
showDetail = true;
// 状态字体颜色
statusColor = "#FF4040";
}
// 已结束 3查看详情
if (statusValue == 3) {
showDetail = true;
// 状态字体颜色
statusColor = "#333333";
}
// 已取消 4查看详情
if (statusValue == 4) {
showDetail = true;
// 状态字体颜色
statusColor = "#7F7F7F";
}
//
// 赋值
item.showPay = showPay;
item.showInvite = showInvite;
item.showCancel = showCancel;
item.showDetail = showDetail;
// 状态字体颜色
item.statusColor = statusColor;
// 图片
if (item.roomContent.indoorPicUrl) {
try {
item.roomContent.indoorPicUrlFirst = JSON.parse(item.roomContent.indoorPicUrl)[0].url
} catch (error) {
console.log(`JSON error : ${error}`);
}
}
return item;
})
},
// 跳转-预约详情
jumpMeetingDetail(e) {
console.log('jumpMeetingDetail', e);
let id = e.currentTarget.dataset.id
wx.navigateTo({
url: "/pages/meeting/reservationRecord/meetingRecord/meetingDetail/meetingDetail?id=" + id,
})
},
// 取消预约一系列方法
cancelConfirm(e) {
console.log('cancelConfirm', e);
let _this = this;
let id = e.currentTarget.dataset.id
_this.setData({
cancelId: id,
showCancelReason: true,
cancelReason: ''
})
},
onCloseCancel(e) {
let _this = this;
_this.setData({
cancelId: '',
showCancelReason: false,
cancelReason: ''
})
},
onChangeCancelReason(e) {
let _this = this;
_this.setData({
cancelReason: e.detail
})
},
// 取消订单
cancelOrder() {
let _this = this;
let id = _this.data.cancelId
let reason = _this.data.cancelReason
if (id === '') {
return
}
if (reason === '') {
Notify('请输入取消原因!')
return
}
cancelOrderRq({
id: id,
cancelResaon: reason
}).then(res => {
console.log('cancelOrderRq', res);
if (res.code == 0) {
// 刷新预约数据
_this.setData({
reservationPageNum: 1,
reservationDataList: [],
reservationIsDataAll: false,
showCancelReason: false
})
_this.getDataList()
} else {
// 危险通知
Notify({
type: 'danger',
message: res.msg
});
}
})
},
editConfirm(e) {
let id = e.currentTarget.dataset.id
this.setData({
editId: id,
showEdit: true
})
},
hideEdit() {
this.setData({
showEdit: false
})
},
editMode(e) {
let _this = this
if (e.detail.type === 1) {
// 重选时间会议室
this.setData({
showEdit: false,
timeShow: true
})
} else {
// 直接跳转
console.log('重新编辑会议基本信息!')
this.setData({
showEdit: false,
})
wx.navigateTo({
url: "/pages/meeting/meetingRoom/meetingOrder/meetingOrder?rId=" + _this.data.editId,
})
}
},
showTimePicker() {
this.setData({
timeShow: true
});
},
hideTimePicker() {
this.setData({
timeShow: false
});
},
// 跳转会议预约页面
goRes(e) {
let _this = this
// 加入rId参数为预约id用于重新修改
wx.navigateTo({
url: '/pages/meeting/meetingReservation/meetingReservation?rId=' + _this.data.editId + '&time=' + e.detail,
})
},
pass() {
Dialog.confirm({
title: '确认',
message: '是否确认通过会议室申请?',
})
.then(() => {
// on confirm
console.log('已通过')
// 重新加载数据
this.getDataList()
})
.catch(() => {
// on cancel
});
},
// 取消预约一系列方法
rejectConfirm(e) {
console.log('rejectConfirm', e);
let _this = this;
let id = e.currentTarget.dataset.id
_this.setData({
rejectId: id,
showRejectReason: true,
rejectReason: ''
})
},
onCloseReject(e) {
let _this = this;
_this.setData({
rejectId: '',
showRejectReason: false,
rejectReason: ''
})
},
onChangeRejectReason(e) {
let _this = this;
_this.setData({
rejectReason: e.detail
})
},
// 取消订单
rejectOrder() {
let _this = this;
let id = _this.data.rejectId
let reason = _this.data.rejectReason
if (id === '') {
return
}
if (reason === '') {
Notify('请输入驳回原因!')
return
}
// 执行驳回方法
console.log('驳回,原因为' + reason)
return
cancelOrderRq({
id: id,
cancelResaon: reason
}).then(res => {
console.log('rejectOrder', res);
if (res.code == 0) {
// 刷新预约数据
_this.setData({
reservationPageNum: 1,
reservationDataList: [],
reservationIsDataAll: false,
showRejcctReason: false
})
_this.getDataList()
} else {
// 危险通知
Notify({
type: 'danger',
message: res.msg
});
}
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
let _this = this;
// 数据是否变化
if (_this.data.dataChange) {
// 刷新数据
_this.setData({
dataChange: false,
// 预约记录参数
reservationPageNum: 1,
reservationDataList: [],
reservationIsDataAll: false,
// 搜索重置
['search.title.value']: '',
['search.status.value']: 0
})
// 获取数据
let userId = _this.data.userData.id
// 获取预约数据
_this.getReservationData({
userId,
pageNum: _this.data.reservationPageNum,
pageSize: _this.data.reservationPageSize,
})
}
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
console.log('onPullDownRefresh', '页面相关事件处理函数--监听用户下拉动作');
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
console.log('onReachBottom', '页面上拉触底事件的处理函数');
let _this = this;
// 获取数据
_this.getDataList()
},
/**
* 用户点击右上角分享
*/
onShareAppMessage(e) {
console.log('onShareAppMessage', e);
let _this = this;
let id = e.target.dataset.id;
let detail = _this.data.reservationDataList.find(item => item.id == id)
//
let param = {
title: detail.title,
path: "/pages/meeting/invite/invite?id=" + id,
imageUrl: app.IMG_NAME + detail.roomContent.indoorPicUrlFirst,
}
console.log('onShareAppMessage', param);
return param;
}
})

View File

@ -0,0 +1,18 @@
{
"usingComponents": {
"van-tab": "@vant/weapp/tab/index",
"van-tabs": "@vant/weapp/tabs/index",
"van-divider": "@vant/weapp/divider/index",
"van-dialog": "@vant/weapp/dialog/index",
"van-notify": "@vant/weapp/notify/index",
"van-dropdown-menu": "@vant/weapp/dropdown-menu/index",
"van-dropdown-item": "@vant/weapp/dropdown-item/index",
"van-field": "@vant/weapp/field/index",
"van-button": "@vant/weapp/button/index",
"van-datetime-picker": "@vant/weapp/datetime-picker/index",
"van-popup": "@vant/weapp/popup/index",
"van-action-sheet": "@vant/weapp/action-sheet/index"
},
"navigationBarTitleText": "会议审核",
"onReachBottomDistance": 100
}

View File

@ -0,0 +1,67 @@
<view class="containerView public">
<van-dropdown-menu>
<van-dropdown-item id="item" title="{{ search.title.text }}">
<van-cell>
<van-field clearable value="{{ search.title.value }}" placeholder="请输入会议名称模糊查询" bind:change="changeSearchTitle" />
</van-cell>
<view style="padding: 15px 16px;">
<van-button type="info" size="small" block round bind:click="searchTitle">
查询
</van-button>
</view>
</van-dropdown-item>
<van-dropdown-item value="{{ search.status.value }}" options="{{ search.status.option }}" bind:change="changeSearchStatus" />
</van-dropdown-menu>
<view class="itemView" wx:for="{{reservationDataList}}" wx:for-item="item" wx:key="*this">
<view class="headView">
<view class="number">{{item.title}}</view>
<view class="status" style="color: {{item.statusColor}};">{{item.statusName}}</view>
</view>
<view class="contentView" bind:tap="jumpMeetingDetail" data-id="{{item.id}}">
<image class="img" src="{{IMG_NAME + item.roomContent.indoorPicUrlFirst}}" mode="aspectFill"></image>
<view class="msgView">
<view class="title">{{item.roomContent.buildingName}} | {{item.roomContent.roomName}} | {{item.roomContent.capacityNum}} | {{item.roomContent.shape}}</view>
<view class="name">预约人: {{item.createBy}}</view>
<view class="time">{{item.timeSlot}}</view>
</view>
</view>
<view class="priceView">
<view class="cancelContent" wx:if="{{item.statusValue == 4 && item.cancelResaon}}">{{item.cancelResaon}}</view>
</view>
<view class="btnView">
<!-- <view class="btn" wx:if="{{item.showInvite}}">去邀请
<button class="shareBtn" open-type="share" data-id="{{item.id}}">转发</button>
</view> -->
<!-- <view class="btn" wx:if="{{item.showCancel}}" bind:tap="cancelConfirm" data-id="{{item.id}}">取消预约</view> -->
<van-button style="margin-right: 10rpx;" size="small" plain type="info" wx:if="{{item.showCancel}}" bind:tap="editConfirm" data-id="{{item.id}}">修改信息</van-button>
<van-button style="margin-right: 10rpx;" size="small" plain type="primary" bind:tap="pass" data-id="{{item.id}}">通过</van-button>
<van-button style="margin-right: 10rpx;" size="small" plain type="danger" bind:tap="rejectConfirm" data-id="{{item.id}}">驳回</van-button>
<!-- <view class="btn" wx:if="{{item.showDetail}}" bind:tap="jumpMeetingDetail" data-id="{{item.id}}">查看详情</view> -->
</view>
</view>
<view class="loadAllLine" wx:if="{{reservationIsDataAll}}">
<van-divider class="van-divider" customStyle="font-size: 26rpx;" contentPosition="center">数据已全部加载</van-divider>
</view>
</view>
<!-- 提示框 -->
<van-dialog id="van-dialog" />
<van-dialog use-slot title="驳回申请" show="{{ showRejectReason }}" show-cancel-button bind:close="onCloseRejct" bind:confirm="rejectOrder" beforeClose="{{ beforeReject }}" zIndex="109">
<van-cell-group style="margin: 20px;">
<van-field bind:change="onChangeRejectReason" value="{{ rejectReason }}" clearable label="" type="textarea" placeholder="请输入驳回原因" autosize />
</van-cell-group>
</van-dialog>
<van-dialog use-slot title="取消预约" show="{{ showCancelReason }}" show-cancel-button bind:close="onCloseCancel" bind:confirm="cancelOrder" beforeClose="{{ beforeClose }}" zIndex="109">
<van-cell-group style="margin: 20px;">
<van-field bind:change="onChangeCancelReason" value="{{ cancelReason }}" clearable label="" type="textarea" placeholder="请输入取消预约原因" autosize />
</van-cell-group>
</van-dialog>
<!-- 提示框 -->
<van-notify id="van-notify" />
<!-- 修改信息 -->
<van-action-sheet show="{{ showEdit }}" actions="{{ editAction }}" cancel-text="取消" bind:cancel="hideEdit" bind:select="editMode" bind:close="hideEdit"/>
<van-popup show="{{ timeShow }}" bind:close="hideTimePicker" position="bottom" round="true">
<van-datetime-picker title="请重新选择会议日期" type="date" value="{{ currentDate }}" min-date="{{ minDate }}" max-date="{{ maxDate }}" formatter="{{ formatter }}" bind:confirm="goRes" bind:cancel="hideTimePicker" />
</van-popup>

View File

@ -0,0 +1,136 @@
.containerView.public {
background: none;
height: auto;
}
.itemView {
background: white;
margin: 30rpx 20rpx;
padding: 30rpx 20rpx;
/* box-shadow: rgba(210,210,210,0.5) 0px 3.752px 3.752px 0px; */
}
.itemView .headView {
display: flex;
justify-content: space-between;
align-items: center;
}
.itemView .headView .number {
flex: 1;
margin-right: 30rpx;
font-size: 26rpx;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
white-space: nowrap;
}
.itemView .headView .status {
font-size: 26rpx;
color: #4e96f8;
margin-right: 20rpx;
}
.itemView .contentView {
box-sizing: border-box;
border-radius: 10rpx;
width: 100%;
margin-top: 20rpx;
padding: 30rpx 20rpx;
display: flex;
justify-content: flex-start;
align-items: center;
background: #f2f2f2;
}
.itemView .contentView .img {
border-radius: 10rpx;
width: 200rpx;
height: 110rpx;
}
.itemView .contentView .msgView {
flex: 1;
margin-left: 20rpx;
word-break: break-all;
}
.itemView .contentView .msgView .title {
font-size: 28rpx;
}
.itemView .contentView .msgView .name,
.itemView .contentView .msgView .time {
font-size: 24rpx;
color: gray;
margin-top: 6rpx;
}
.itemView .priceView {
display: flex;
justify-content: flex-end;
align-items: center;
margin: 30rpx 0;
}
.itemView .priceView .cancelContent {
flex: 1;
margin-right: 40rpx;
font-size: 26rpx;
color: #7F7F7F;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
white-space: nowrap;
}
.itemView .priceView .priceContent {
display: flex;
justify-content: flex-start;
align-items: center;
}
.itemView .priceView .priceContent .name {
font-size: 26rpx;
}
.itemView .priceView .priceContent .price {
font-size: 28rpx;
font-weight: bold;
color: red;
margin-left: 10rpx;
}
.itemView .btnView {
display: flex;
justify-content: flex-end;
align-items: center;
}
.itemView .btnView .btn {
border: 1px solid #4e96f8;
position: relative;
border-radius: 10rpx;
margin-left: 16rpx;
padding: 10rpx 24rpx;
font-size: 24rpx;
color: #4e96f8;
}
.shareBtn {
position: absolute;
z-index: 1;
width: 100%;
height: 100%;
left: 0;
top: 0;
opacity: 0;
}
.loadAllLine {
margin-top: 80rpx;
}

View File

@ -26,7 +26,47 @@ Page({
id: null, id: null,
detail: null, detail: null,
facilities: {}, facilities: {},
joinPersonList: [] joinPersonList: [],
showCancelReason: false, // 是否展示弹出层
cancelId: '', // 取消预约会议id
cancelReason: '', // 取消预约原因
beforeClose(action) {
return new Promise(resolve => {
if (action === 'confirm') {
resolve(false)
} else {
resolve(true)
}
});
}, // 弹出层点击确认不关闭,手动关
// 会议重新预约需要参数
showEdit: false,
editAction: [
{
name: '重新选择时间、会议室',
type: 1
},
{
name: '重新编辑会议信息',
type: 2
},
],
timeShow: false,
currentDate: new Date().getTime(),
minDate: new Date().getTime(),
maxDate: '',
formatter(type, value) {
if (type === 'year') {
return `${value}`;
}
if (type === 'month') {
return `${value}`;
}
if (type === 'day') {
return `${value}`;
}
return value;
},
}, },
/** /**
@ -39,6 +79,13 @@ Page({
}) })
// 获取详情 // 获取详情
_this.getDetail(); _this.getDetail();
// 获取一月后时间,默认只能选一个月之后
const today = new Date()
const newDate = new Date(today)
newDate.setMonth(newDate.getMonth() + 1)
_this.setData({
maxDate: newDate.getTime()
})
}, },
// 获取详情 // 获取详情
@ -138,22 +185,52 @@ Page({
}) })
}) })
}, },
// 取消预约一系列方法
// 取消订单 cancelConfirm(e) {
cancelOrder(e) { console.log('cancelConfirm', e);
console.log('cancelOrder', e);
let _this = this; let _this = this;
let id = e.currentTarget.dataset.id let id = e.currentTarget.dataset.id
const beforeClose = (action) => { _this.setData({
console.log('action', action); cancelId: id,
return new Promise((resolve) => { showCancelReason: true,
if (action === 'confirm') { cancelReason: ''
})
},
onCloseCancel(e) {
let _this = this;
_this.setData({
cancelId: '',
showCancelReason: false,
cancelReason: ''
})
},
onChangeCancelReason(e) {
let _this = this;
_this.setData({
cancelReason: e.detail
})
},
// 取消订单
cancelOrder() {
let _this = this;
let id = _this.data.cancelId
let reason = _this.data.cancelReason
if (id === '') {
return
}
if (reason === '') {
Notify('请输入取消原因!')
return
}
cancelOrderRq({ cancelOrderRq({
id, id: id,
cancelResaon: "" cancelResaon: reason
}).then(res => { }).then(res => {
console.log('cancelOrderRq', res); console.log('cancelOrderRq', res);
if (res.code == 0) { if (res.code == 0) {
_this.setData({
showCancelReason: false
})
// 刷新数据 // 刷新数据
_this.getDetail(); _this.getDetail();
// 数据状态变更,向上个页面传递变更 // 数据状态变更,向上个页面传递变更
@ -169,20 +246,55 @@ Page({
message: res.msg message: res.msg
}); });
} }
resolve(true); })
},
editConfirm() {
this.setData({
showEdit: true
})
},
hideEdit() {
this.setData({
showEdit: false
})
},
editMode(e) {
let _this = this
if (e.detail.type === 1) {
// 重选时间会议室
this.setData({
showEdit: false,
timeShow: true
}) })
} else { } else {
// 拦截取消操作 // 直接跳转
resolve(true); console.log('重新编辑会议基本信息!')
this.setData({
showEdit: false,
})
wx.navigateTo({
url: "/pages/meeting/meetingRoom/meetingOrder/meetingOrder?rId=" + _this.data.detail.id,
})
} }
},
showTimePicker() {
this.setData({
timeShow: true
}); });
} },
Dialog.confirm({ hideTimePicker() {
title: '提示', this.setData({
message: '是否取消预约!', timeShow: false
beforeClose,
}); });
}, },
// 跳转会议预约页面
goRes(e) {
let _this = this
// 加入rId参数为预约id用于重新修改
wx.navigateTo({
url: '/pages/meeting/meetingReservation/meetingReservation?rId=' + _this.data.detail.id + '&time=' + e.detail,
})
},
// 跳转-支付 // 跳转-支付
jumpPay(e) { jumpPay(e) {

View File

@ -1,7 +1,12 @@
{ {
"usingComponents": { "usingComponents": {
"van-dialog": "@vant/weapp/dialog/index", "van-dialog": "@vant/weapp/dialog/index",
"van-notify": "@vant/weapp/notify/index" "van-notify": "@vant/weapp/notify/index",
"van-field": "@vant/weapp/field/index",
"van-datetime-picker": "@vant/weapp/datetime-picker/index",
"van-popup": "@vant/weapp/popup/index",
"van-action-sheet": "@vant/weapp/action-sheet/index",
"van-button": "@vant/weapp/button/index"
}, },
"navigationBarTitleText": "会议预约详情" "navigationBarTitleText": "会议预约详情"
} }

View File

@ -102,12 +102,25 @@
<!-- <view class="btn" wx:if="{{detail.showInvite}}">去邀请 <!-- <view class="btn" wx:if="{{detail.showInvite}}">去邀请
<button class="shareBtn" open-type="share" data-id="{{detail.id}}">转发</button> <button class="shareBtn" open-type="share" data-id="{{detail.id}}">转发</button>
</view> --> </view> -->
<view class="btn" wx:if="{{detail.showCancel}}" bind:tap="cancelOrder" data-id="{{detail.id}}">取消预约</view> <van-button style="margin-right: 10rpx;" size="normal" plain type="warning" wx:if="{{detail.showCancel}}" bind:tap="cancelConfirm" data-id="{{detail.id}}">取消预约</van-button>
<van-button style="margin-right: 10rpx;" size="normal" plain type="info" wx:if="{{detail.showCancel}}" bind:tap="editConfirm" data-id="{{detail.id}}">修改信息</van-button>
<!-- <view class="btn" wx:if="{{detail.showCancel}}" bind:tap="cancelConfirm" data-id="{{detail.id}}">取消预约</view>
<view class="btn" wx:if="{{detail.showCancel}}" bind:tap="editConfirm" data-id="{{detail.id}}">修改信息</view> -->
</view> </view>
<!-- 提示框 -->
<van-dialog id="van-dialog" />
<!-- 提示框 -->
<van-notify id="van-notify" />
</view> </view>
<!-- 提示框 -->
<van-notify id="van-notify" />
<van-dialog id="van-dialog" />
<van-dialog use-slot title="取消预约" show="{{ showCancelReason }}" show-cancel-button bind:close="onCloseCancel" bind:confirm="cancelOrder" beforeClose="{{ beforeClose }}" zIndex="109">
<van-cell-group style="margin: 20px;">
<van-field bind:change="onChangeCancelReason" value="{{ cancelReason }}" clearable label="" type="textarea" placeholder="请输入取消预约原因" autosize />
</van-cell-group>
</van-dialog>
<!-- 修改信息 -->
<van-action-sheet show="{{ showEdit }}" actions="{{ editAction }}" cancel-text="取消" bind:cancel="hideEdit" bind:select="editMode" bind:close="hideEdit" />
<van-popup show="{{ timeShow }}" bind:close="hideTimePicker" position="bottom" round="true">
<van-datetime-picker title="请重新选择会议日期" type="date" value="{{ currentDate }}" min-date="{{ minDate }}" max-date="{{ maxDate }}" formatter="{{ formatter }}" bind:confirm="goRes" bind:cancel="hideTimePicker" />
</van-popup>

View File

@ -29,13 +29,111 @@ Page({
reservationPageSize: 10, reservationPageSize: 10,
reservationDataList: [], reservationDataList: [],
reservationIsDataAll: false, reservationIsDataAll: false,
search: {
title: {
text: '会议名称',
value: ''
},
status: {
value: '',
option: [{
text: '全部预约',
value: ''
},
{
text: '待审核',
value: 1
},
{
text: '待开始',
value: 2
},
{
text: '已结束',
value: 3
},
{
text: '已取消',
value: 4
},
{
text: '已驳回',
value: 5
},
]
}
},
showCancelReason: false, // 是否展示弹出层
cancelId: '', // 取消预约会议id
cancelReason: '', // 取消预约原因
beforeClose(action) {
return new Promise(resolve => {
if (action === 'confirm') {
resolve(false)
} else {
resolve(true)
}
});
}, // 弹出层点击确认不关闭,手动关
// 会议重新预约需要参数
editId: '',
showEdit: false,
editAction: [{
name: '重新选择时间、会议室',
type: 1
},
{
name: '重新编辑会议信息',
type: 2
},
],
timeShow: false,
currentDate: new Date().getTime(),
minDate: new Date().getTime(),
maxDate: '',
formatter(type, value) {
if (type === 'year') {
return `${value}`;
}
if (type === 'month') {
return `${value}`;
}
if (type === 'day') {
return `${value}`;
}
return value;
},
// 参与记录参数,不需要 // 参与记录参数,不需要
// participatePageNum: 1, // participatePageNum: 1,
// participatePageSize: 10, // participatePageSize: 10,
// participateDataList: [], // participateDataList: [],
// participateIsDataAll: false, // participateIsDataAll: false,
}, },
changeSearchTitle(e) {
this.setData({
['search.title.value']: e.detail
})
},
searchTitle() {
// 刷新预约数据
this.setData({
reservationPageNum: 1,
reservationDataList: [],
reservationIsDataAll: false,
})
this.getDataList()
this.selectComponent('#item').toggle()
},
changeSearchStatus(e) {
// 刷新预约数据
this.setData({
reservationPageNum: 1,
reservationDataList: [],
reservationIsDataAll: false,
['search.status.value']: e.detail
})
this.getDataList()
},
/** /**
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
@ -52,6 +150,13 @@ Page({
pageNum: _this.data.reservationPageNum, pageNum: _this.data.reservationPageNum,
pageSize: _this.data.reservationPageSize, pageSize: _this.data.reservationPageSize,
}) })
// 获取一月后时间,默认只能选一个月之后
const today = new Date()
const newDate = new Date(today)
newDate.setMonth(newDate.getMonth() + 1)
_this.setData({
maxDate: newDate.getTime()
})
// 获取参与数据 // 获取参与数据
// _this.getParticipateData({ // _this.getParticipateData({
// userId, // userId,
@ -91,7 +196,6 @@ Page({
// }); // });
// return; // return;
// } // }
// 判断数据是否已全部加载 // 判断数据是否已全部加载
if (isDataAll) { if (isDataAll) {
return; return;
@ -126,6 +230,8 @@ Page({
pageSize, pageSize,
userId, userId,
parkId: 25, parkId: 25,
title: _this.data.search.title.value,
statusValue: _this.data.search.status.value
}).then(res => { }).then(res => {
console.log('selectReservationListByUserIdRq', res); console.log('selectReservationListByUserIdRq', res);
// 判断数据是否全部查询 // 判断数据是否全部查询
@ -287,19 +393,46 @@ Page({
tabTitle: event.detail.title tabTitle: event.detail.title
}) })
}, },
// 取消预约一系列方法
// 取消订单 cancelConfirm(e) {
cancelOrder(e) { console.log('cancelConfirm', e);
console.log('cancelOrder', e);
let _this = this; let _this = this;
let id = e.currentTarget.dataset.id let id = e.currentTarget.dataset.id
const beforeClose = (action) => { _this.setData({
console.log('action', action); cancelId: id,
return new Promise((resolve) => { showCancelReason: true,
if (action === 'confirm') { cancelReason: ''
})
},
onCloseCancel(e) {
let _this = this;
_this.setData({
cancelId: '',
showCancelReason: false,
cancelReason: ''
})
},
onChangeCancelReason(e) {
let _this = this;
_this.setData({
cancelReason: e.detail
})
},
// 取消订单
cancelOrder() {
let _this = this;
let id = _this.data.cancelId
let reason = _this.data.cancelReason
if (id === '') {
return
}
if (reason === '') {
Notify('请输入取消原因!')
return
}
cancelOrderRq({ cancelOrderRq({
id, id: id,
cancelResaon: "" cancelResaon: reason
}).then(res => { }).then(res => {
console.log('cancelOrderRq', res); console.log('cancelOrderRq', res);
if (res.code == 0) { if (res.code == 0) {
@ -308,6 +441,7 @@ Page({
reservationPageNum: 1, reservationPageNum: 1,
reservationDataList: [], reservationDataList: [],
reservationIsDataAll: false, reservationIsDataAll: false,
showCancelReason: false
}) })
_this.getDataList() _this.getDataList()
} else { } else {
@ -317,21 +451,57 @@ Page({
message: res.msg message: res.msg
}); });
} }
resolve(true); })
},
editConfirm(e) {
let id = e.currentTarget.dataset.id
this.setData({
editId: id,
showEdit: true
})
},
hideEdit() {
this.setData({
showEdit: false
})
},
editMode(e) {
let _this = this
if (e.detail.type === 1) {
// 重选时间会议室
this.setData({
showEdit: false,
timeShow: true
}) })
} else { } else {
// 拦截取消操作 // 直接跳转
resolve(true); console.log('重新编辑会议基本信息!')
this.setData({
showEdit: false,
})
wx.navigateTo({
url: "/pages/meeting/meetingRoom/meetingOrder/meetingOrder?rId=" + _this.data.editId,
})
} }
}); },
} showTimePicker() {
Dialog.confirm({ this.setData({
title: '提示', timeShow: true
message: '是否取消预约!',
beforeClose,
}); });
}, },
hideTimePicker() {
this.setData({
timeShow: false
});
},
// 跳转会议预约页面
goRes(e) {
let _this = this
// 加入rId参数为预约id用于重新修改
wx.navigateTo({
url: '/pages/meeting/meetingReservation/meetingReservation?rId=' + _this.data.editId + '&time=' + e.detail,
})
},
/** /**
* 生命周期函数--监听页面初次渲染完成 * 生命周期函数--监听页面初次渲染完成
*/ */
@ -353,6 +523,9 @@ Page({
reservationPageNum: 1, reservationPageNum: 1,
reservationDataList: [], reservationDataList: [],
reservationIsDataAll: false, reservationIsDataAll: false,
// 搜索重置
['search.title.value']: '',
['search.status.value']: 0
// 参与记录参数 // 参与记录参数
// participatePageNum: 1, // participatePageNum: 1,
// participateDataList: [], // participateDataList: [],

View File

@ -4,7 +4,14 @@
"van-tabs": "@vant/weapp/tabs/index", "van-tabs": "@vant/weapp/tabs/index",
"van-divider": "@vant/weapp/divider/index", "van-divider": "@vant/weapp/divider/index",
"van-dialog": "@vant/weapp/dialog/index", "van-dialog": "@vant/weapp/dialog/index",
"van-notify": "@vant/weapp/notify/index" "van-notify": "@vant/weapp/notify/index",
"van-dropdown-menu": "@vant/weapp/dropdown-menu/index",
"van-dropdown-item": "@vant/weapp/dropdown-item/index",
"van-field": "@vant/weapp/field/index",
"van-button": "@vant/weapp/button/index",
"van-datetime-picker": "@vant/weapp/datetime-picker/index",
"van-popup": "@vant/weapp/popup/index",
"van-action-sheet": "@vant/weapp/action-sheet/index"
}, },
"navigationBarTitleText": "预约记录", "navigationBarTitleText": "预约记录",
"onReachBottomDistance": 100 "onReachBottomDistance": 100

View File

@ -50,7 +50,19 @@
</view> </view>
</van-tab> </van-tab>
</van-tabs> --> </van-tabs> -->
<van-dropdown-menu>
<van-dropdown-item id="item" title="{{ search.title.text }}">
<van-cell>
<van-field clearable value="{{ search.title.value }}" placeholder="请输入会议名称模糊查询" bind:change="changeSearchTitle" />
</van-cell>
<view style="padding: 15px 16px;">
<van-button type="info" size="small" block round bind:click="searchTitle">
查询
</van-button>
</view>
</van-dropdown-item>
<van-dropdown-item value="{{ search.status.value }}" options="{{ search.status.option }}" bind:change="changeSearchStatus" />
</van-dropdown-menu>
<view class="itemView" wx:for="{{reservationDataList}}" wx:for-item="item" wx:key="*this"> <view class="itemView" wx:for="{{reservationDataList}}" wx:for-item="item" wx:key="*this">
<view class="headView"> <view class="headView">
<view class="number">{{item.title}}</view> <view class="number">{{item.title}}</view>
@ -65,23 +77,35 @@
</view> </view>
</view> </view>
<view class="priceView"> <view class="priceView">
<view class="cancelContent" wx:if="{{item.statusValue == 4 && item.cancelResaon}}">取消原因: {{item.cancelResaon}}</view> <view class="cancelContent" wx:if="{{item.statusValue == 4 && item.cancelResaon}}">{{item.cancelResaon}}</view>
</view> </view>
<view class="btnView"> <view class="btnView">
<!-- <view class="btn" wx:if="{{item.showInvite}}">去邀请 <!-- <view class="btn" wx:if="{{item.showInvite}}">去邀请
<button class="shareBtn" open-type="share" data-id="{{item.id}}">转发</button> <button class="shareBtn" open-type="share" data-id="{{item.id}}">转发</button>
</view> --> </view> -->
<view class="btn" wx:if="{{item.showCancel}}" bind:tap="cancelOrder" data-id="{{item.id}}">取消预约</view> <van-button style="margin-right: 10rpx;" size="small" plain type="warning" wx:if="{{item.showCancel}}" bind:tap="cancelConfirm" data-id="{{item.id}}">取消预约</van-button>
<view class="btn" wx:if="{{item.showDetail}}" bind:tap="jumpMeetingDetail" data-id="{{item.id}}">查看详情</view> <van-button style="margin-right: 10rpx;" size="small" plain type="info" wx:if="{{item.showCancel}}" bind:tap="editConfirm" data-id="{{item.id}}">修改信息</van-button>
<!-- <view class="btn" wx:if="{{item.showCancel}}" bind:tap="cancelConfirm" data-id="{{item.id}}">取消预约</view>
<view class="btn" wx:if="{{item.showCancel}}" bind:tap="editConfirm" data-id="{{item.id}}">修改信息</view> -->
<!-- <view class="btn" wx:if="{{item.showDetail}}" bind:tap="jumpMeetingDetail" data-id="{{item.id}}">查看详情</view> -->
</view> </view>
</view> </view>
<view class="loadAllLine" wx:if="{{reservationIsDataAll}}"> <view class="loadAllLine" wx:if="{{reservationIsDataAll}}">
<van-divider class="van-divider" customStyle="font-size: 26rpx;" contentPosition="center">数据已全部加载</van-divider> <van-divider class="van-divider" customStyle="font-size: 26rpx;" contentPosition="center">数据已全部加载</van-divider>
</view> </view>
</view>
<!-- 提示框 --> <!-- 提示框 -->
<van-dialog id="van-dialog" /> <van-dialog use-slot title="取消预约" show="{{ showCancelReason }}" show-cancel-button bind:close="onCloseCancel" bind:confirm="cancelOrder" beforeClose="{{ beforeClose }}" zIndex="109">
<van-cell-group style="margin: 20px;">
<van-field bind:change="onChangeCancelReason" value="{{ cancelReason }}" clearable label="" type="textarea" placeholder="请输入取消预约原因" autosize />
</van-cell-group>
</van-dialog>
<!-- 提示框 --> <!-- 提示框 -->
<van-notify id="van-notify" /> <van-notify id="van-notify" />
<!-- 修改信息 -->
<van-action-sheet show="{{ showEdit }}" actions="{{ editAction }}" cancel-text="取消" bind:cancel="hideEdit" bind:select="editMode" bind:close="hideEdit"/>
</view> <van-popup show="{{ timeShow }}" bind:close="hideTimePicker" position="bottom" round="true">
<van-datetime-picker title="请重新选择会议日期" type="date" value="{{ currentDate }}" min-date="{{ minDate }}" max-date="{{ maxDate }}" formatter="{{ formatter }}" bind:confirm="goRes" bind:cancel="hideTimePicker" />
</van-popup>

View File

@ -0,0 +1,302 @@
const app = getApp()
import Dialog from '@vant/weapp/dialog/dialog';
import Notify from '@vant/weapp/notify/notify';
import {
selfFormatTimeYMD,
selfFormatTimeHM
} from "../../../../utils/util.js"
import {
selectReservationListByUserIdRq,
selectVisitorInvitationRecordRq,
cancelOrderRq
} from "../../../../api/meeting/meetingRoom.js"
Page({
/**
* 页面的初始数据
*/
data: {
IMG_NAME: app.IMG_NAME,
userData: null,
dataChange: false,
// 我的服务参数
reservationPageNum: 1,
reservationPageSize: 10,
reservationDataList: [],
reservationIsDataAll: false,
search: {
title: {
text: '会议名称',
value: ''
},
status: {
value: 1,
option: [{
text: '全部会议',
value: ''
},
{
text: '待开始',
value: 1
},
{
text: '已结束',
value: 2
},
]
}
},
},
changeSearchTitle(e) {
this.setData({
['search.title.value']: e.detail,
})
},
searchTitle() {
// 刷新预约数据
this.setData({
reservationPageNum: 1,
reservationDataList: [],
reservationIsDataAll: false,
})
this.getDataList()
this.selectComponent('#item').toggle()
},
changeSearchStatus(e) {
// 刷新预约数据
this.setData({
reservationPageNum: 1,
reservationDataList: [],
reservationIsDataAll: false,
['search.status.value']: e.detail
})
this.getDataList()
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let _this = this;
_this.setData({
userData: wx.getStorageSync('user'),
})
// 获取数据
let userId = _this.data.userData.id
// 获取预约数据
_this.getReservationData({
userId,
pageNum: _this.data.reservationPageNum,
pageSize: _this.data.reservationPageSize,
})
},
// 获取数据
getDataList() {
// 获取参数
let _this = this;
let tabTitle = _this.data.tabTitle
let userId = _this.data.userData.id
let isDataAll = null
let pageNum = null
let pageSize = null
// 预约记录参数,目前只保留预约记录,其余去掉
isDataAll = _this.data.reservationIsDataAll
pageNum = _this.data.reservationPageNum
pageSize = _this.data.reservationPageSize
// 判断数据是否已全部加载
if (isDataAll) {
return;
}
// 传递参数
let param = {
userId,
pageNum,
pageSize
}
_this.getReservationData(param)
},
// 获取会议数据
getReservationData(param) {
let _this = this;
let {
pageNum,
pageSize,
userId
} = param
// 查询数据
selectReservationListByUserIdRq({
pageNum,
pageSize,
userId,
parkId: 25,
title: _this.data.search.title.value,
statusValue: _this.data.search.status.value
}).then(res => {
console.log('selectReservationListByUserIdRq', res);
// 判断数据是否全部查询
let queryDataList = res.page.records;
if (queryDataList && queryDataList.length > 0) {
// 更新参数
let reservationDataList = _this.data.reservationDataList.concat(_this.formartData(queryDataList));
let reservationPageNum = _this.data.reservationPageNum + 1;
_this.setData({
reservationPageNum,
reservationDataList,
})
} else {
_this.setData({
reservationIsDataAll: true
})
}
})
},
// 格式化数据
formartData(queryDataList) {
// 格式化数据
return queryDataList.map(item => {
item.timeSlot = selfFormatTimeYMD(item.startTime) + ' ' + selfFormatTimeHM(item.startTime) + '~' + selfFormatTimeHM(item.endDate);
// 状态字体颜色
let statusColor = "#FFB119";
// 按钮是否显示
let statusValue = item.statusValue;
let showPay = false;
let showInvite = false;
let showCancel = false;
let showDetail = false;
// 待支付 0 :去支付、取消订单、查看详情
if (statusValue == 0) {
showPay = true;
showCancel = true;
showDetail = true;
// 状态字体颜色
statusColor = "#FFB119";
}
// 待使用 1去邀请、取消订单、查看详情
if (statusValue == 1) {
showInvite = true;
showCancel = true;
showDetail = true;
// 状态字体颜色
statusColor = "#3794FF";
// 待使用 修改为 预约成功
item.statusName = '预约成功'
}
// 进行中 2去邀请、查看详情
if (statusValue == 2) {
showInvite = true;
showDetail = true;
// 状态字体颜色
statusColor = "#FF4040";
}
// 已结束 3查看详情
if (statusValue == 3) {
showDetail = true;
// 状态字体颜色
statusColor = "#333333";
}
// 已取消 4查看详情
if (statusValue == 4) {
showDetail = true;
// 状态字体颜色
statusColor = "#7F7F7F";
}
//
// 赋值
item.showPay = showPay;
item.showInvite = showInvite;
item.showCancel = showCancel;
item.showDetail = showDetail;
// 状态字体颜色
item.statusColor = statusColor;
// 图片
if (item.roomContent.indoorPicUrl) {
try {
item.roomContent.indoorPicUrlFirst = JSON.parse(item.roomContent.indoorPicUrl)[0].url
} catch (error) {
console.log(`JSON error : ${error}`);
}
}
return item;
})
},
// 跳转-预约详情
jumpMeetingDetail(e) {
console.log('jumpMeetingDetail', e);
let id = e.currentTarget.dataset.id
wx.navigateTo({
url: "/pages/meeting/reservationRecord/meetingRecord/meetingDetail/meetingDetail?id=" + id,
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
let _this = this;
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
console.log('onPullDownRefresh', '页面相关事件处理函数--监听用户下拉动作');
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
console.log('onReachBottom', '页面上拉触底事件的处理函数');
let _this = this;
// 获取数据
_this.getDataList()
},
/**
* 用户点击右上角分享
*/
onShareAppMessage(e) {
console.log('onShareAppMessage', e);
let _this = this;
let id = e.target.dataset.id;
let detail = _this.data.reservationDataList.find(item => item.id == id)
//
let param = {
title: detail.title,
path: "/pages/meeting/invite/invite?id=" + id,
imageUrl: app.IMG_NAME + detail.roomContent.indoorPicUrlFirst,
}
console.log('onShareAppMessage', param);
return param;
}
})

View File

@ -0,0 +1,18 @@
{
"usingComponents": {
"van-tab": "@vant/weapp/tab/index",
"van-tabs": "@vant/weapp/tabs/index",
"van-divider": "@vant/weapp/divider/index",
"van-dialog": "@vant/weapp/dialog/index",
"van-notify": "@vant/weapp/notify/index",
"van-dropdown-menu": "@vant/weapp/dropdown-menu/index",
"van-dropdown-item": "@vant/weapp/dropdown-item/index",
"van-field": "@vant/weapp/field/index",
"van-button": "@vant/weapp/button/index",
"van-datetime-picker": "@vant/weapp/datetime-picker/index",
"van-popup": "@vant/weapp/popup/index",
"van-action-sheet": "@vant/weapp/action-sheet/index"
},
"navigationBarTitleText": "会务服务",
"onReachBottomDistance": 100
}

View File

@ -0,0 +1,36 @@
<view class="containerView public">
<van-dropdown-menu>
<van-dropdown-item id="item" title="{{ search.title.text }}">
<van-cell>
<van-field clearable value="{{ search.title.value }}" placeholder="请输入会议名称模糊查询" bind:change="changeSearchTitle" />
</van-cell>
<view style="padding: 15px 16px;">
<van-button type="info" size="small" block round bind:click="searchTitle">
查询
</van-button>
</view>
</van-dropdown-item>
<van-dropdown-item value="{{ search.status.value }}" options="{{ search.status.option }}" bind:change="changeSearchStatus" />
</van-dropdown-menu>
<view class="itemView" wx:for="{{reservationDataList}}" wx:for-item="item" wx:key="*this">
<view class="headView">
<view class="number">{{item.title}}</view>
<view class="status" style="color: {{item.statusColor}};">{{item.statusName}}</view>
</view>
<view class="contentView" bind:tap="jumpMeetingDetail" data-id="{{item.id}}">
<image class="img" src="{{IMG_NAME + item.roomContent.indoorPicUrlFirst}}" mode="aspectFill"></image>
<view class="msgView">
<view class="title">{{item.roomContent.buildingName}} | {{item.roomContent.roomName}} | {{item.roomContent.capacityNum}} | {{item.roomContent.shape}}</view>
<view class="name">预约人: {{item.createBy}}</view>
<view class="time">{{item.timeSlot}}</view>
</view>
</view>
<view class="priceView">
<view class="cancelContent" wx:if="{{item.statusValue == 4 && item.cancelResaon}}">{{item.cancelResaon}}</view>
</view>
</view>
<view class="loadAllLine" wx:if="{{reservationIsDataAll}}">
<van-divider class="van-divider" customStyle="font-size: 26rpx;" contentPosition="center">数据已全部加载</van-divider>
</view>
</view>

View File

@ -0,0 +1,136 @@
.containerView.public {
background: none;
height: auto;
}
.itemView {
background: white;
margin: 30rpx 20rpx;
padding: 30rpx 20rpx;
/* box-shadow: rgba(210,210,210,0.5) 0px 3.752px 3.752px 0px; */
}
.itemView .headView {
display: flex;
justify-content: space-between;
align-items: center;
}
.itemView .headView .number {
flex: 1;
margin-right: 30rpx;
font-size: 26rpx;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
white-space: nowrap;
}
.itemView .headView .status {
font-size: 26rpx;
color: #4e96f8;
margin-right: 20rpx;
}
.itemView .contentView {
box-sizing: border-box;
border-radius: 10rpx;
width: 100%;
margin-top: 20rpx;
padding: 30rpx 20rpx;
display: flex;
justify-content: flex-start;
align-items: center;
background: #f2f2f2;
}
.itemView .contentView .img {
border-radius: 10rpx;
width: 200rpx;
height: 110rpx;
}
.itemView .contentView .msgView {
flex: 1;
margin-left: 20rpx;
word-break: break-all;
}
.itemView .contentView .msgView .title {
font-size: 28rpx;
}
.itemView .contentView .msgView .name,
.itemView .contentView .msgView .time {
font-size: 24rpx;
color: gray;
margin-top: 6rpx;
}
.itemView .priceView {
display: flex;
justify-content: flex-end;
align-items: center;
margin: 30rpx 0;
}
.itemView .priceView .cancelContent {
flex: 1;
margin-right: 40rpx;
font-size: 26rpx;
color: #7F7F7F;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
white-space: nowrap;
}
.itemView .priceView .priceContent {
display: flex;
justify-content: flex-start;
align-items: center;
}
.itemView .priceView .priceContent .name {
font-size: 26rpx;
}
.itemView .priceView .priceContent .price {
font-size: 28rpx;
font-weight: bold;
color: red;
margin-left: 10rpx;
}
.itemView .btnView {
display: flex;
justify-content: flex-end;
align-items: center;
}
.itemView .btnView .btn {
border: 1px solid #4e96f8;
position: relative;
border-radius: 10rpx;
margin-left: 16rpx;
padding: 10rpx 24rpx;
font-size: 24rpx;
color: #4e96f8;
}
.shareBtn {
position: absolute;
z-index: 1;
width: 100%;
height: 100%;
left: 0;
top: 0;
opacity: 0;
}
.loadAllLine {
margin-top: 80rpx;
}