diff --git a/miniprogram/api/meeting/exhibition.js b/miniprogram/api/meeting/exhibition.js
new file mode 100644
index 0000000..b0e1142
--- /dev/null
+++ b/miniprogram/api/meeting/exhibition.js
@@ -0,0 +1,40 @@
+import {
+ request
+} from '../selfRequest';
+
+
+// 展厅列表
+export function showroomListRq() {
+ return request({
+ url: '/api/showroom/list',
+ method: "post",
+ });
+}
+
+// 展厅详情
+export function showroomDetailRq(id) {
+ return request({
+ url: '/api/showroom/get/' + id,
+ method: "get",
+ });
+}
+
+
+// 查询展厅能否预约
+export function selectFreeShowRoomRq(data) {
+ return request({
+ url: '/api/showroom/selectFreeShowRoom',
+ method: "post",
+ data
+ });
+}
+
+// 查询展厅已经预约的记录
+export function appointmentRecordRq(data) {
+ return request({
+ url: '/api/showroom/appointmentRecord',
+ method: "post",
+ data
+ });
+}
+
diff --git a/miniprogram/app.json b/miniprogram/app.json
index ff3850c..9b53d2f 100644
--- a/miniprogram/app.json
+++ b/miniprogram/app.json
@@ -65,7 +65,11 @@
"pages/meeting/visitorIinvitation/list/list",
"pages/meeting/visitorIinvitation/add/add",
"pages/meeting/visitorIinvitation/detail/detail",
- "pages/meeting/visitorIinvitation/indexBar/indexBar"
+ "pages/meeting/visitorIinvitation/indexBar/indexBar",
+ "pages/meeting/exhibition/list/list",
+ "pages/meeting/exhibition/detail/detail",
+ "pages/meeting/exhibition/booked/booked",
+ "pages/meeting/exhibition/order/order"
],
"window": {
"backgroundTextStyle": "light",
diff --git a/miniprogram/pages/index/index.js b/miniprogram/pages/index/index.js
index 14db452..5fa1591 100644
--- a/miniprogram/pages/index/index.js
+++ b/miniprogram/pages/index/index.js
@@ -92,7 +92,7 @@ Page({
{
name: "展厅预约",
img: "/profile/static/index/menu-ztyy.png",
- path: ""
+ path: "/pages/meeting/exhibition/list/list"
},
{
name: "访客预约",
diff --git a/miniprogram/pages/meeting/exhibition/booked/booked.js b/miniprogram/pages/meeting/exhibition/booked/booked.js
new file mode 100644
index 0000000..8ef8e7d
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/booked/booked.js
@@ -0,0 +1,222 @@
+const app = getApp()
+
+import Notify from '@vant/weapp/notify/notify';
+
+import {
+ appointmentRecordRq,
+ selectFreeShowRoomRq
+} from "../../../../api/meeting/exhibition.js"
+
+
+import {
+ selfFormatTimeYMDHMS,
+ selfFormatTimeYMDH
+} from "../../../../utils/util.js"
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ id: null,
+ minTime: null,
+ maxTime: null,
+ endMaxTime: null,
+ startTime: null,
+ endTime: null,
+ showTime: false,
+ dataList: [],
+ filterTime(type, options) {
+ if (type === 'minute') {
+ return options.filter((option) => option == '00');
+ }
+ return options;
+ },
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ console.log('onLoad', options);
+ // 获取传递参数
+ this.setData({
+ ...options
+ })
+ // 初始化时间
+ this.initParamTime()
+ },
+
+ // 初始化时间
+ initParamTime() {
+ let maxTime = new Date();
+ maxTime.setFullYear(maxTime.getFullYear() + 3)
+ this.setData({
+ maxTime: maxTime.getTime()
+ })
+ this.setEndMaxTime(this.data.startTime)
+ // 设置最小时间
+ this.setMinTime()
+ },
+
+ // 设置最小时间
+ setMinTime() {
+ let minTime = new Date(selfFormatTimeYMDH(new Date()) + ':00:00').getTime()
+ this.setData({
+ minTime,
+ startTime: minTime
+ })
+ },
+
+ // 指定天的最后一秒
+ setEndMaxTime(time) {
+ let endMaxTime = new Date(new Date(time).toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1;
+ this.setData({
+ endMaxTime: endMaxTime
+ })
+ },
+
+ // 选择-开始时间
+ onInputStartTime(event) {
+ this.setData({
+ startTime: event.detail,
+ });
+ this.setEndMaxTime(event.detail)
+ },
+
+ // 选择-结束时间
+ onInputEndTime(event) {
+ let _this = this;
+ this.setData({
+ endTime: event.detail,
+ });
+ },
+
+ // 预约时间
+ reservationTime() {
+ this.setData({
+ showTime: true
+ })
+ },
+
+ // 确认时间
+ confirmTime() {
+ let _this = this;
+ let id = _this.data.id;
+ let startTime = _this.data.startTime;
+ let endTime = _this.data.endTime;
+ let paramUrl = "?id=" + id + "&startTime=" + selfFormatTimeYMDHMS(startTime) + "&endTime=" + selfFormatTimeYMDHMS(endTime);
+
+ // 预约时间不能小于1小时
+ if ((1000 * 60 * 60) > (endTime - startTime)) {
+ Notify({
+ type: 'danger',
+ message: '预约时间不能小于1小时',
+ duration: 1000,
+ selector: '#notify',
+ });
+ return
+ }
+
+ // 查询展厅能否预约
+ selectFreeShowRoomRq({
+ "id": id,
+ "startTime": selfFormatTimeYMDHMS(startTime),
+ "endDate": selfFormatTimeYMDHMS(endTime)
+ }).then(res => {
+ console.log('selectFreeShowRoomRq', res);
+ // 可以预约
+ if (res.code == 0) {
+ wx.navigateTo({
+ url: "/pages/meeting/exhibition/order/order" + paramUrl,
+ })
+ _this.setData({
+ showTime: false
+ })
+ } else { // 不能预约
+ Notify({
+ type: 'danger',
+ message: res.msg,
+ duration: 1000,
+ selector: '#notify',
+ });
+ }
+ })
+ },
+
+ // 取消时间
+ cancelTime() {
+ this.setData({
+ showTime: false
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+ console.log('onShow');
+ let _this = this;
+ appointmentRecordRq({
+ "showroomId": _this.data.id
+ }).then(res => {
+ console.log('appointmentRecordRq', res);
+ let dataList = res.data;
+ dataList.map(item => {
+ item.nowDate = item.nowDate.substring(0, 10);
+ item.reservations = item.reservations.map(record => {
+ record.startTime = record.startTime.substring(11)
+ record.endDate = record.endDate.substring(11)
+ return record;
+ })
+ return item
+ })
+ _this.setData({
+ dataList
+ })
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/booked/booked.json b/miniprogram/pages/meeting/exhibition/booked/booked.json
new file mode 100644
index 0000000..73fd975
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/booked/booked.json
@@ -0,0 +1,8 @@
+{
+ "usingComponents": {
+ "van-datetime-picker": "@vant/weapp/datetime-picker/index",
+ "van-popup": "@vant/weapp/popup/index",
+ "van-notify": "@vant/weapp/notify/index"
+ },
+ "navigationBarTitleText": "展厅预约"
+}
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/booked/booked.wxml b/miniprogram/pages/meeting/exhibition/booked/booked.wxml
new file mode 100644
index 0000000..8006253
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/booked/booked.wxml
@@ -0,0 +1,38 @@
+
+
+
+
+ 展厅预约情况
+
+
+ {{item.nowDate}}
+
+ {{record.startTime}}~{{record.endDate}}
+ 已预约
+
+
+
+
+
+ 预约时间
+
+
+
+
+ 请选择开始时间
+
+
+
+
+ 请选择结束时间
+ 确定
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/booked/booked.wxss b/miniprogram/pages/meeting/exhibition/booked/booked.wxss
new file mode 100644
index 0000000..0471f3a
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/booked/booked.wxss
@@ -0,0 +1,66 @@
+.containerView.public {
+ padding-bottom: 300rpx;
+}
+
+.dataView {
+ padding: 20rpx;
+}
+
+.itemVIew {
+ box-shadow: rgba(153,134,134,0.2) 0px 0px 4px 0px;
+ padding: 0 20rpx;
+ margin-top: 40rpx;
+}
+
+.itemVIew .item,
+.itemVIew .itemTimeView {
+ padding: 30rpx 0;
+ background-image: linear-gradient(to right, rgb(126, 126, 126, 0.1), rgb(126, 126, 126, 0.1), transparent 100%);
+ background-size: 20rpx 2rpx;
+ background-repeat: repeat-x;
+}
+
+.itemVIew .item {
+ color: #f1bb6b;
+ font-size: 30rpx;
+}
+
+.itemVIew .itemTimeView {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ font-size: 28rpx;
+}
+
+.itemVIew .itemTimeView .status {
+ color: #b3b3b3;
+}
+
+.submitBtn {
+ z-index: 0;
+}
+
+.selfPop{
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ background: #ffffff;
+ transition: 1s all;
+}
+
+.selfPop .labelView{
+ box-sizing: border-box;
+ padding: 20rpx 34rpx 20rpx 20rpx;
+ background: #f5f7fa;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.selfPop .labelView .enter{
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #4e96f8;
+}
diff --git a/miniprogram/pages/meeting/exhibition/detail/detail.js b/miniprogram/pages/meeting/exhibition/detail/detail.js
new file mode 100644
index 0000000..927d68e
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/detail/detail.js
@@ -0,0 +1,131 @@
+const app = getApp()
+
+import {
+ selectCoordinateRq
+} from "../../../../api/meeting/meetingRoom.js"
+import {
+ showroomDetailRq
+} from "../../../../api/meeting/exhibition.js"
+
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ IMG_NAME: app.IMG_NAME,
+ id: null,
+ detail: {},
+ bannerList: [],
+ mapData: {}
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ let _this = this;
+ console.log('onLoad', options);
+ _this.setData({
+ ...options
+ })
+ showroomDetailRq(_this.data.id).then(res => {
+ console.log('showroomDetailRq', res);
+ _this.setData({
+ detail: res,
+ bannerList: [res.indoorPicUrl]
+ })
+ })
+ // 获取地址信息
+ _this.getAddress()
+ },
+
+ // 获取地址信息
+ getAddress() {
+ let _this = this;
+ selectCoordinateRq().then(res => {
+ _this.setData({
+ address: res,
+ mapData: {
+ latitude: res.lat,
+ longitude: res.lng,
+ markers: [{
+ id: 1,
+ latitude: res.lat,
+ longitude: res.lng,
+ title: res.address,
+ }]
+ },
+ })
+ })
+ },
+
+ // 打开地图
+ openMap(e) {
+ console.log('openMap', e);
+ let _this = this;
+ wx.openLocation({
+ name: _this.data.address.address,
+ latitude: _this.data.address.lat,
+ longitude: _this.data.address.lng,
+ })
+ },
+
+ // 跳转-预约
+ jumpBooked() {
+ let id = this.data.id;
+ wx.navigateTo({
+ url: "/pages/meeting/exhibition/booked/booked?id=" + id,
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/detail/detail.json b/miniprogram/pages/meeting/exhibition/detail/detail.json
new file mode 100644
index 0000000..68ab385
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/detail/detail.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {
+ "van-icon": "@vant/weapp/icon/index"
+ },
+ "navigationBarTitleText": "展厅"
+}
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/detail/detail.wxml b/miniprogram/pages/meeting/exhibition/detail/detail.wxml
new file mode 100644
index 0000000..ea43582
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/detail/detail.wxml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 所在楼层
+ {{detail.buildingName}}
+
+
+ 空间面积
+ {{detail.renArea}}m
+
+
+ 办公面积
+ {{detail.area}}m
+
+
+
+
+ {{detail.content ? detail.content : ''}}
+
+
+
+
+
+ 价格
+ ¥免费
+
+
+
+
+ 空间周边
+
+
+
+
+ 展厅预约
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/detail/detail.wxss b/miniprogram/pages/meeting/exhibition/detail/detail.wxss
new file mode 100644
index 0000000..d59dbfd
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/detail/detail.wxss
@@ -0,0 +1,142 @@
+.containerView.public {
+ padding-bottom: 200rpx;
+}
+
+.swiper-box {
+ border-radius: 14rpx;
+ box-sizing: border-box;
+ height: 358rpx;
+ margin: 0 22rpx;
+ overflow: hidden;
+}
+
+.swiper-box .img {
+ width: 100%;
+ height: 100%;
+}
+
+/* 轮播小点点 */
+.swiper-box .wx-swiper-dots.wx-swiper-dots-horizontal {
+ margin-left: 36%;
+}
+
+.swiper-box .wx-swiper-dot {
+ width: 20rpx;
+ display: inline-flex;
+ height: 5rpx;
+ margin-left: 10rpx;
+ justify-content: space-between;
+}
+
+.swiper-box .wx-swiper-dot::before {
+ content: '';
+ flex-grow: 1;
+ background: rgba(255, 255, 255, 0.8);
+ border-radius: 0rpx
+}
+
+.swiper-box .wx-swiper-dot-active::before {
+ background: #ff3333;
+}
+
+.swiper-box .wx-swiper-dot-active {
+ width: 40rpx;
+}
+
+.roomView {
+ margin-top: 30rpx;
+}
+
+.roomView .typeView {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin: 0 30rpx;
+}
+
+.roomView .typeView .typeItem {
+ text-align: center;
+}
+
+.roomView .typeView .typeItem .name {
+ font-size: 28rpx;
+ color: gray;
+}
+
+.roomView .typeView .typeItem .value {
+ margin-top: 10rpx;
+ font-size: 26rpx;
+ font-weight: bold;
+ color: black;
+}
+
+.roomView .content {
+ margin: 40rpx 20rpx 0;
+ font-size: 26rpx;
+}
+
+.roomView .contentSwichBtn {
+ border: 1px solid rgb(202, 202, 202);
+ border-radius: 6rpx;
+ margin: 20rpx;
+ padding: 14rpx;
+ text-align: center;
+ font-size: 28rpx;
+}
+
+.facilitiesView {
+ margin: 50rpx 20rpx;
+}
+
+.facilitiesView .itemView {
+ display: flex;
+ justify-content: start;
+ align-items: center;
+ flex-wrap: wrap;
+}
+
+.facilitiesView .itemView .singleItem {
+ box-sizing: border-box;
+ width: 25%;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin-top: 30rpx;
+}
+
+.facilitiesView .itemView .singleItem .img {
+ width: 70rpx;
+ height: 70rpx;
+}
+
+.facilitiesView .itemView .singleItem .name {
+ margin-top: 16rpx;
+ width: 150rpx;
+ text-align: center;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ word-break: break-all;
+ white-space: nowrap;
+}
+
+.priceView {
+ margin: 20rpx;
+}
+
+.priceView .content {
+ margin: 30rpx 20rpx;
+ font-size: 32rpx;
+ color: #c3c3c3;
+}
+
+.mapView {
+ margin: 50rpx 20rpx;
+}
+
+.mapView .myMap {
+ margin-top: 30rpx;
+ width: 100%;
+ height: 500rpx;
+}
+
diff --git a/miniprogram/pages/meeting/exhibition/list/list.js b/miniprogram/pages/meeting/exhibition/list/list.js
new file mode 100644
index 0000000..91a7f53
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/list/list.js
@@ -0,0 +1,103 @@
+const app = getApp()
+import {
+ showroomListRq
+} from "../../../../api/meeting/exhibition.js"
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ IMG_NAME: app.IMG_NAME,
+ dataList: [],
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ // 页面初始化 options为页面跳转所带来的参数
+ wx.setNavigationBarTitle({
+ title: options.name
+ })
+ // 初始化数据
+ this.initData();
+ },
+
+ // 初始化数据
+ initData() {
+ let _this = this;
+ // 获取数据
+ this.getDateList()
+ },
+
+ // 获取数据
+ getDateList() {
+ let _this = this;
+ // 列表数据
+ showroomListRq().then(res => {
+ console.log('showroomListRq', res);
+ _this.setData({
+ dataList: res.data
+ })
+ })
+ },
+
+ // 跳转-详情
+ jumpDetail(e) {
+ console.log('jumpDetail', e);
+ wx.navigateTo({
+ url: "/pages/meeting/exhibition/detail/detail?id=" + e.currentTarget.dataset.id,
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/list/list.json b/miniprogram/pages/meeting/exhibition/list/list.json
new file mode 100644
index 0000000..bfda1f2
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/list/list.json
@@ -0,0 +1,9 @@
+{
+ "usingComponents": {
+ "van-dropdown-menu": "@vant/weapp/dropdown-menu/index",
+ "van-dropdown-item": "@vant/weapp/dropdown-item/index",
+ "van-cell": "@vant/weapp/cell/index",
+ "van-switch": "@vant/weapp/switch/index",
+ "van-button": "@vant/weapp/button/index"
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/list/list.wxml b/miniprogram/pages/meeting/exhibition/list/list.wxml
new file mode 100644
index 0000000..3bc4528
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/list/list.wxml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+ {{item.capacityNum}}人间 | {{item.roomName}} | {{item.buildingName}}
+
+
+ ¥免费
+
+
+
+
+
+
+ 展厅
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/list/list.wxss b/miniprogram/pages/meeting/exhibition/list/list.wxss
new file mode 100644
index 0000000..4f005c2
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/list/list.wxss
@@ -0,0 +1,97 @@
+.queryView {
+ position: fixed;
+ left: 0;
+ top: 0;
+ z-index: 999;
+ width: 100%;
+}
+
+.meetingRoomView {
+ padding: 30rpx 30rpx;
+}
+
+.meetingRoomView .meetingRoomItem {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-top: 30rpx;
+ padding-bottom: 30rpx;
+ border-bottom: 1px solid rgb(126, 126, 126, 0.3);
+}
+
+.meetingRoomView .meetingRoomItem .content {
+ display: flex;
+ flex-direction: column;
+ justify-content: start;
+ align-items: flex-start;
+ height: 180rpx;
+}
+
+.meetingRoomView .meetingRoomItem .content .title {
+ font-size: 32rpx;
+ color: black;
+}
+
+.meetingRoomView .meetingRoomItem .content .articleView {
+ display: flex;
+ justify-content: start;
+ align-items: center;
+ margin-top: 18rpx;
+}
+
+.meetingRoomView .meetingRoomItem .content .articleView .article {
+ font-size: 28rpx;
+ color: gray;
+ margin-left: 10rpx;
+}
+
+.meetingRoomView .meetingRoomItem .content .articleView .article:first-child {
+ margin-left: 0;
+}
+
+
+.meetingRoomView .meetingRoomItem .content .propOpen {
+ flex: 1;
+}
+
+.meetingRoomView .meetingRoomItem .content .priceView {
+ display: flex;
+ justify-content: start;
+ align-items: center;
+}
+
+.meetingRoomView .meetingRoomItem .content .priceView .price {
+ font-size: 32rpx;
+ color: #c3c3c3;
+}
+
+.meetingRoomView .meetingRoomItem .content .priceView .unit {
+ font-size: 24rpx;
+ color: gray;
+}
+
+
+.meetingRoomView .meetingRoomItem .imgView {
+ position: relative;
+ width: 320rpx;
+ height: 180rpx;
+}
+
+.meetingRoomView .meetingRoomItem .imgView .title {
+ position: absolute;
+ left: 0;
+ top: 16rpx;
+ background: #76aef9;
+ font-size: 24rpx;
+ color: white;
+ font-weight: bold;
+ padding: 8rpx 30rpx;
+ border-top-right-radius: 6rpx;
+ border-bottom-right-radius: 6rpx;
+}
+
+.meetingRoomView .meetingRoomItem .imgView .img {
+ width: 100%;
+ height: 100%;
+ border-radius: 10rpx;
+}
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/order/order.js b/miniprogram/pages/meeting/exhibition/order/order.js
new file mode 100644
index 0000000..4041085
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/order/order.js
@@ -0,0 +1,189 @@
+const app = getApp()
+
+import Dialog from '@vant/weapp/dialog/dialog';
+import Notify from '@vant/weapp/notify/notify';
+
+import {
+ showroomDetailRq
+} from "../../../../api/meeting/exhibition.js"
+
+import {
+ meetingRoomDetailRq,
+ getCustomerTicketRq,
+ calculateMeetingRoomAmountRq,
+ saveMeetingRecordRq
+} from "../../../../api/meeting/meetingRoom.js"
+
+import {
+ selfFormatTimeYMD,
+ selfFormatTimeHM,
+ twoTimeInterval
+} from "../../../../utils/util.js"
+
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ IMG_NAME: app.IMG_NAME,
+ protocolFlag: true,
+ protocolTitle: '《展厅服务协议》',
+ id: null,
+ bannerList: [],
+ detail: {},
+ userData: {},
+ startTime: null,
+ endTime: null,
+ selectDay: null,
+ selectCountTime: null,
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ console.log('onLoad', options);
+ let selectCountTime = selfFormatTimeHM(options.startTime) + "-" + selfFormatTimeHM(options.endTime) + ' 共计' + twoTimeInterval(options.startTime, options.endTime)
+ this.setData({
+ ...options,
+ userData: wx.getStorageSync('user'),
+ selectDay: selfFormatTimeYMD(options.startTime),
+ selectCountTime
+ })
+ // 详细信息
+ this.getDetail();
+ },
+
+ // 详细信息
+ getDetail() {
+ let _this = this;
+ showroomDetailRq(this.data.id).then(res => {
+ _this.setData({
+ detail: res,
+ bannerList: [res.indoorPicUrl]
+ })
+ })
+ },
+
+ // 主题修改监听
+ titleChange(event) {
+ this.setData({
+ title: event.detail
+ })
+ },
+
+ // 协议点击
+ protocolChange() {
+ let _this = this;
+ _this.setData({
+ protocolFlag: !_this.data.protocolFlag
+ });
+ },
+
+ // 跳转协议
+ jumpProtocol() {
+ let _this = this;
+ wx.navigateTo({
+ url: "/pages/meeting/meetingRoom/meetingProtocol/meetingProtocol?title=" + _this.data.protocolTitle,
+ })
+ },
+
+ // 提交订单
+ submitCase() {
+ let _this = this
+ // 参数校验
+ if (!_this.data.title) {
+ // 错误提示
+ Notify({
+ type: 'danger',
+ message: '请输入会议主题!'
+ });
+ return;
+ }
+ if (!_this.data.protocolFlag) {
+ // 错误提示
+ Notify({
+ type: 'danger',
+ message: `请同意${_this.data.protocolTitle}!`
+ });
+ return;
+ }
+
+ saveMeetingRecordRq({
+ "roomContentId": _this.data.meetingRoomId,
+ "userId": _this.data.userData.id,
+ "ticketId": _this.data.couponId,
+ "customerId": _this.data.userData.icsCustomerId,
+ "title": _this.data.title,
+ "startTime": _this.data.startTime,
+ "endDate": _this.data.endTime,
+ "orderMoney": _this.data.totalAmount,
+ }).then(res => {
+ console.log('saveMeetingRecordRq', res);
+ if (res.code == 0) {
+ wx.redirectTo({
+ url: "/pages/meeting/pay/waitPay/waitPay?id=" + res.reservationId,
+ })
+ } else {
+ // 错误提示
+ Notify({
+ type: 'danger',
+ message: res.msg
+ });
+ }
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+ console.log('onShow');
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/order/order.json b/miniprogram/pages/meeting/exhibition/order/order.json
new file mode 100644
index 0000000..a78be73
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/order/order.json
@@ -0,0 +1,10 @@
+{
+ "usingComponents": {
+ "van-icon": "@vant/weapp/icon/index",
+ "van-field": "@vant/weapp/field/index",
+ "van-dialog": "@vant/weapp/dialog/index",
+ "van-notify": "@vant/weapp/notify/index",
+ "van-checkbox": "@vant/weapp/checkbox/index"
+ },
+ "navigationBarTitleText": "预约信息"
+}
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/order/order.wxml b/miniprogram/pages/meeting/exhibition/order/order.wxml
new file mode 100644
index 0000000..9379a2a
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/order/order.wxml
@@ -0,0 +1,62 @@
+
+
+
+ 展厅
+
+
+
+
+
+
+
+
+
+
+ {{detail.capacityNum}}人间 | {{detail.roomName}} | {{detail.buildingName}}
+
+
+ ¥免费
+
+
+
+
+
+
+
+ {{selectDay}}
+
+
+
+ {{selectCountTime}}
+
+
+
+ {{userData.username}} {{userData.mobile}}
+
+
+
+
+
+
+ 会议主题
+
+
+
+
+
+
+
+
+
+ 我已阅读并同意
+ {{protocolTitle}}
+
+
+
+ 立即预约
+
+
+
+
+
+
\ No newline at end of file
diff --git a/miniprogram/pages/meeting/exhibition/order/order.wxss b/miniprogram/pages/meeting/exhibition/order/order.wxss
new file mode 100644
index 0000000..f8b7844
--- /dev/null
+++ b/miniprogram/pages/meeting/exhibition/order/order.wxss
@@ -0,0 +1,223 @@
+.containerView {
+ height: 100vh;
+ width: 100vw;
+ overflow: auto;
+ padding-bottom: 100rpx;
+ background: #ffffff;
+}
+
+.swiperView {
+ position: relative;
+}
+
+.swiperView .tag {
+ position: absolute;
+ left: 22rpx;
+ top: 20rpx;
+ background: #76aef9;
+ font-size: 28rpx;
+ color: white;
+ font-weight: bold;
+ padding: 10rpx 40rpx;
+ border-top-right-radius: 6rpx;
+ border-bottom-right-radius: 6rpx;
+ z-index: 1;
+}
+
+.swiper-box {
+ border-radius: 14rpx;
+ box-sizing: border-box;
+ height: 358rpx;
+ margin: 0 22rpx;
+ overflow: hidden;
+}
+
+.swiper-box .img {
+ width: 100%;
+ height: 100%;
+}
+
+/* 轮播小点点 */
+.swiper-box .wx-swiper-dots.wx-swiper-dots-horizontal {
+ margin-left: 36%;
+}
+
+.swiper-box .wx-swiper-dot {
+ width: 20rpx;
+ display: inline-flex;
+ height: 5rpx;
+ margin-left: 10rpx;
+ justify-content: space-between;
+}
+
+.swiper-box .wx-swiper-dot::before {
+ content: '';
+ flex-grow: 1;
+ background: rgba(255, 255, 255, 0.8);
+ border-radius: 0rpx
+}
+
+.swiper-box .wx-swiper-dot-active::before {
+ background: #ff3333;
+}
+
+.swiper-box .wx-swiper-dot-active {
+ width: 40rpx;
+}
+
+.meetingDetailView {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin: 30rpx 22rpx;
+ padding: 0 16rpx;
+}
+
+.meetingDetailView .detailView {
+ flex: 1;
+ word-break: break-all;
+ margin-right: 20rpx;
+}
+
+.meetingDetailView .detailView .title {
+ font-size: 32rpx;
+}
+
+.meetingDetailView .detailView .itemList {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: start;
+ align-items: center;
+ margin-top: 14rpx;
+ font-size: 26rpx;
+ color: gray;
+}
+
+.meetingDetailView .detailView .itemList .item {
+ margin-right: 12rpx;
+}
+
+.meetingDetailView .priceView {
+ display: flex;
+ justify-content: start;
+ align-items: flex-end;
+ line-height: 1;
+}
+
+.meetingDetailView .priceView .price {
+ font-size: 28rpx;
+ color: #c3c3c3;
+}
+
+.meetingDetailView .priceView .unit {
+ font-size: 24rpx;
+}
+
+.contentView {
+ border-top: 1px solid rgb(126, 126, 126, 0.2);
+ border-bottom: 1px solid rgb(126, 126, 126, 0.2);
+ margin: 30rpx 22rpx 0;
+ padding: 20rpx 16rpx;
+}
+
+.contentView .item {
+ display: flex;
+ justify-content: start;
+ align-items: center;
+ margin-top: 20rpx;
+}
+
+.contentView .item:first-of-type {
+ margin-top: 0;
+}
+
+.contentView .item .time {
+ margin-left: 10rpx;
+ font-size: 26rpx;
+ line-height: 1;
+}
+
+.fillMsgView {}
+
+.fillMsgView .itemView {
+ border-bottom: 1px solid rgb(126, 126, 126, 0.2);
+ padding: 0 38rpx;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: 100rpx;
+}
+
+.fillMsgView .itemView .label {
+ font-size: 28rpx;
+}
+
+.fillMsgView .itemView .content {
+ flex: 1;
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+}
+
+.fillMsgView .itemView .content .coupon {
+ font-size: 26rpx;
+ color: gray;
+}
+
+.fillMsgView .itemView .content .coupon.select {
+ color: black;
+}
+
+.fillMsgView .itemView .content .price {
+ font-size: 30rpx;
+}
+
+.protocolView {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-size: 26rpx;
+ margin: 40rpx 0 50rpx;
+}
+
+.protocolTitle {
+ color: #76aef9;
+}
+
+.amountView {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0 38rpx;
+}
+
+.amountView .priceView {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+}
+
+.amountView .priceView .title {
+ font-size: 32rpx;
+}
+
+.amountView .priceView .price {
+ color: red;
+ font-size: 34rpx;
+}
+
+.amountView .priceView .describe {
+ color: red;
+ font-size: 28rpx;
+ margin-left: 6rpx;
+}
+
+.amountView .caseBtn {
+ border-radius: 10rpx;
+ padding: 16rpx 60rpx;
+ color: white;
+ font-size: 30rpx;
+ background: #4e96f8;
+}
+
+