diff --git a/bundle/reserve/confirm.vue b/bundle/reserve/confirm.vue index 45e8dac..7c13f0a 100644 --- a/bundle/reserve/confirm.vue +++ b/bundle/reserve/confirm.vue @@ -1,14 +1,106 @@ @@ -138,12 +175,124 @@ data() { return { + venueId: 0, + roomId: 0, + typeId: 1, // 网球场1 篮球场2 billPopup: false, - showPrice: true + showPrice: true, + adding: true, + basketballDate: null, + venue: {}, + room: {}, + countSelectedTime: 0, + bill: { + cdf: { + nums: 0, // 场地费小时数 + price: 0, // 场地费单价 + total: 0 // 场地费总价 + }, + dgf: { + nums: 0, // 灯光数量 + price: 0, // 灯光单价 + total: 0 // 灯光总价 + }, + total: 0 // 总价 + } }; }, + onLoad(args) { + this.venueId = args.venueId || 0; + this.roomId = args.roomId || 0; + this.typeId = args.typeId || 1; + this.basketballDate = args.date || null; + console.log("🚀 ~ this.date:", this.date) + this.getData(); + }, + methods: { + getData() { + let self = this; + uni.showLoading({ + title: '加载中' + }); + + const reserveDate = uni.getStorageSync('reserveDate') || null + self.date = reserveDate + self.countSelectedTime = reserveDate && reserveDate.duration ? reserveDate.duration : 0 + if (self.typeId == 2) { + self.countSelectedTime = 4 + } + + // 获取场馆详情 + self._post( + 'ground.ground/groundDetails', + { + app_id: self.getAppId(), + id: self.venueId, + latitude: uni.getStorageSync('latitude') || '', + longitude: uni.getStorageSync('longitude') || '', + }, + function (res) { + if (res.code) { + self.loadding = false; + self.venue = res.data.lists + } + } + ) + + // 获取场馆包间详情 + self._post( + 'ground.ground/groundRoomDetails', + { + app_id: self.getAppId(), + id: self.roomId, // 场馆包间ID + }, + function(res) { + console.log("🚀 ~ res:", res) + if (res.code) { + self.room = res.data.lists; + } + + self.loadding = false; + } + ) + + // 计算费用明细 + if (self.countSelectedTime > 0) { + self._post( + 'ground.ground/countPrice', + { + app_id: self.getAppId(), + room_id: self.roomId, + nums: self.countSelectedTime, + type_id: self.typeId, + }, + function(res) { + const result = res.data.lists + self.bill = { + total: result.order_amount, + cdf: { + nums: result.nums, + price: result.room_price, + total: result.room_all_price + }, + dgf: { + nums: result.nums, + price: result.light_price, + total: result.light_all_price + } + } + console.log("🚀 ~ self.bill:", self.bill) + + self.loadding = false; + } + ) + } else { + self.loadding = false; + } + }, + // 显示费用明细 handleShowBill() { this.showPrice = false; @@ -154,6 +303,62 @@ this.billPopup = false; this.showPrice = true; }, + + // 去支付 + toConfirm() { + if (this.countSelectedTime === 0) { + uni.showToast({title: '请选择时间后再预定', icon: 'none'}); + return; + } + let self = this; + uni.showLoading({ + title: '加载中' + }); + self._post( + 'order.groundOrder/submitStoreOrder', + { + app_id: self.getAppId(), + ground_id: self.venueId, + room_id: self.roomId, + hours: 1, + day_time: self.date ? self.date.date : '', + start_time: self.date ? self.date.startTime : '', + end_time: self.date ? self.date.endTime : '', + }, + function(res) { + console.log("🚀 ~ order res:", res) + self._post( + 'user.groundOrder/pay', + { + app_id: self.getAppId(), + order_id: res.data.lists.id + }, + function(res) { + const data = res.data + console.log("🚀 ~ pay data:", data) + uni.requestPayment({ + provider: 'wxpay', + timeStamp: data.payment.timeStamp, + nonceStr: data.payment.nonceStr, + package: 'prepay_id=' + data.payment.prepay_id, + signType: 'MD5', + paySign: data.payment.paySign, + success: res => { + console.log("🚀 ~ pay success res:", res) + }, + fail: res => { + console.log("🚀 ~ pay fail res:", res) + uni.reLaunch({ + url: '/pages/order/cg-my-order', + }); + }, + }); + } + ) + self.loadding = false; + } + ) + } } }; diff --git a/bundle/reserve/details.vue b/bundle/reserve/details.vue index dc3b658..f87ed20 100644 --- a/bundle/reserve/details.vue +++ b/bundle/reserve/details.vue @@ -1,35 +1,123 @@ \ No newline at end of file diff --git a/bundle/reserve/reserve.vue b/bundle/reserve/reserve.vue index 9e3351b..04ab8da 100644 --- a/bundle/reserve/reserve.vue +++ b/bundle/reserve/reserve.vue @@ -7,59 +7,34 @@ - 这里是场馆的名称场馆的名称 + {{ venue.name }} - + 立即预约 - - - - - - 选择时间 - - - 示例:07:00代表07:01-07:59 - - - - - {{ item.time }} - - - - - - - - {{ item.time }} - - - - - - - - - - 合计: - - - 费用明细 - - - - 立即预定({{countSelectedTime}}小时) - - - + + + + + @@ -131,16 +106,23 @@ import banner from '@/components/diy/banner/banner.vue'; import priceFormat from '@/components/price-format/price-format.vue'; import Popup from '@/components/uni-popup.vue'; + import BookingTime from '@/components/booking-time.vue' + import ReserveTime from '@/components/reserve-time' export default { components: { navbar, banner, priceFormat, - Popup + Popup, + ReserveTime, + BookingTime + // BookingTime }, data() { return { + venueId: 0, + roomId: 0, bannerData: [], value: 4, currentTab: 1, @@ -151,39 +133,62 @@ ], content: '

欢迎来到秀湖网球中心!我们提供优质的网球场地和设施,适合各类网球爱好者。无论您是初学者还是专业选手,我们都能满足您的需求。我们的场地配备了先进的照明系统和舒适的休息区,让您在愉快的环境中享受网球运动。立即预定,开启您的网球之旅吧!

', timePopup: false, - time: [ - {type: 1, time: '3/16周日'}, - {type: 2, time: '3/17周一'}, - {type: 3, time: '3/18周二'}, - ], currentTime: 0, - date: [ - {type: 1, time: '06:00', disabled: false}, - {type: 2, time: '07:00', disabled: false}, - {type: 3, time: '08:00', disabled: false}, - {type: 4, time: '09:00', disabled: false}, - {type: 5, time: '10:00', disabled: true}, - {type: 6, time: '11:00', disabled: false}, - {type: 7, time: '12:00', disabled: false}, - {type: 8, time: '13:00', disabled: true}, - {type: 9, time: '14:00', disabled: false}, - {type: 10, time: '15:00', disabled: true}, - {type: 11, time: '16:00', disabled: true}, - {type: 12, time: '17:00', disabled: false}, - {type: 13, time: '18:00', disabled: false}, - {type: 14, time: '19:00', disabled: false}, - {type: 15, time: '20:00', disabled: false}, - {type: 16, time: '21:00', disabled: false}, - {type: 17, time: '22:00', disabled: false}, + date: { + minimum_time: 2, + time: [ + { + display: "12/02周二", + date: "2025-12-02", + time_slots: [ + {start_time: "08:00", timestamp: 1764633600, datetime: "2025-12-02 08:00", disabled: 1}, + {start_time: "09:00", timestamp: 1764637200, datetime: "2025-12-02 09:00", disabled: 1}, + {start_time: "10:00", timestamp: 1764640800, datetime: "2025-12-02 10:00", disabled: 1}, + {start_time: "11:00", timestamp: 1764644400, datetime: "2025-12-02 11:00", disabled: 1}, + {start_time: "12:00", timestamp: 1764648000, datetime: "2025-12-02 12:00", disabled: 1}, + {start_time: "13:00", timestamp: 1764651600, datetime: "2025-12-02 13:00", disabled: 1}, + {start_time: "14:00", timestamp: 1764655200, datetime: "2025-12-02 14:00", disabled: 1}, + {start_time: "15:00", timestamp: 1764658800, datetime: "2025-12-02 15:00", disabled: 1}, + {start_time: "16:00", timestamp: 1764662400, datetime: "2025-12-02 16:00", disabled: 1}, + {start_time: "17:00", timestamp: 1764666000, datetime: "2025-12-02 17:00", disabled: 1} + ], + timestamp: 1764640505 - ], + }, + { + display: "12/03周三", + date: "2025-12-03", + time_slots: [ + {start_time: "08:00", timestamp: 1764633600, datetime: "2025-12-02 08:00", disabled: 1}, + {start_time: "09:00", timestamp: 1764637200, datetime: "2025-12-02 09:00", disabled: 1}, + {start_time: "10:00", timestamp: 1764640800, datetime: "2025-12-02 10:00", disabled: 1}, + {start_time: "11:00", timestamp: 1764644400, datetime: "2025-12-02 11:00", disabled: 1}, + {start_time: "12:00", timestamp: 1764648000, datetime: "2025-12-02 12:00", disabled: 1}, + {start_time: "13:00", timestamp: 1764651600, datetime: "2025-12-02 13:00", disabled: 1}, + {start_time: "14:00", timestamp: 1764655200, datetime: "2025-12-02 14:00", disabled: 1}, + {start_time: "15:00", timestamp: 1764658800, datetime: "2025-12-02 15:00", disabled: 1}, + {start_time: "16:00", timestamp: 1764662400, datetime: "2025-12-02 16:00", disabled: 1}, + {start_time: "17:00", timestamp: 1764666000, datetime: "2025-12-02 17:00", disabled: 1} + ], + timestamp: 1764640505 + } + ] + }, selectedTime: [], countSelectedTime: 0, billPopup: false, + loadding: true, + venue: {}, + bannerData: { + data: [], + style: {btnColor: "#ffffff", background: "#ffffff", btnShape: "round", imgShape: "round", height: "330"} + }, }; }, onLoad(args) { + this.venueId = args.venueId || 0; + this.roomId = args.roomId || 0; this.getData(); }, @@ -193,16 +198,39 @@ uni.showLoading({ title: '加载中' }); - self._get( - 'index/index', + + // 获取场馆详情 + self._post( + 'ground.ground/groundDetails', { - url: self.url + app_id: self.getAppId(), + id: self.venueId, // 场馆ID + latitude: uni.getStorageSync('latitude') || '', + longitude: uni.getStorageSync('longitude') || '', }, function(res) { - self.bannerData = res.data.items[0]; - console.log("🚀 ~ self.bannerData:", self.bannerData) + if (res.code) { + self.venue = res.data.lists + res.data.lists.image_arr.map(items => { + self.bannerData.data.push({imgUrl: items, height: '400px'}) + }) + } } - ); + ) + + // 获取时间预约 + self._post( + 'ground.ground/get7Time', + { + app_id: self.getAppId() + }, + function(res) { + if (res.code) { + self.date = res.data.lists + } + self.loadding = false; + } + ) }, // 切换tab @@ -210,24 +238,6 @@ this.currentTab = e.type; }, - // 处理导航 - handleLocation() { - uni.openLocation({ - latitude: 30.74621, - longitude: 120.76055, - name: '秀湖网球中心', - address: '嘉兴市秀洲区秀园路秀湖公园(西南角)', - scale: 18 - }); - }, - - // 处理拨打电话 - handleCall() { - uni.makePhoneCall({ - phoneNumber: '0573-82069999' - }); - }, - // 选择时间 handleFilterTime(index) { this.currentTime = index; @@ -258,13 +268,29 @@ this.timePopup = true; }, + // 预约时间选择回调 + onSelectedTime(data) { + console.log("🚀 ~ data:", data) + // data: [selectedDay, selectedTime, selectedTimeStamp, countSelectedTime] + this.selectedTime = data[1] || []; + this.countSelectedTime = data[3] || 0; + uni.setStorageSync('reserveDate', data); + + this.toConfirm() + }, + + // 确认订单 toConfirm() { uni.navigateTo({ - url: '/bundle/reserve/confirm' + url: `/bundle/reserve/confirm?venueId=${this.venue.id}&roomId=${this.roomId}` }); + }, + + confirmPicker(e) { + console.log("🚀 ~ e:", e) } } - }; + } \ No newline at end of file diff --git a/components/reserve-time.vue b/components/reserve-time.vue new file mode 100644 index 0000000..5344306 --- /dev/null +++ b/components/reserve-time.vue @@ -0,0 +1,179 @@ + + + + + + + diff --git a/config.js b/config.js index 540185c..278df4b 100644 --- a/config.js +++ b/config.js @@ -1,5 +1,7 @@ //var app_url = 'http://www.jjj-shop.com'; -var app_url = 'https://6548.cn'; +// var app_url = 'https://6548.cn'; +var app_url = 'https://xh.stnav.com'; + // 如果是本地测试环境 if(process.env.NODE_ENV === 'development'){ //#ifdef H5 diff --git a/manifest.json b/manifest.json index 66c8c99..e3a7e2b 100644 --- a/manifest.json +++ b/manifest.json @@ -145,7 +145,7 @@ "quickapp" : {}, /* 快应用特有相关 */ "mp-weixin" : { - "appid" : "wxa184cbbc1bbe7621", + "appid" : "wx0f98e0cd9033a82b", "setting" : { "urlCheck" : false, "es6" : true, @@ -153,9 +153,10 @@ "minified" : true }, "usingComponents" : true, + "requiredPrivateInfos" : [ "getLocation" ], "permission" : { "scope.userLocation" : { - "desc" : "你的位置信息将用于小程序位置接口的效果展示" + "desc" : "获取您与体育场馆的距离" } } }, @@ -172,9 +173,9 @@ "base" : "/h5/" }, "devServer" : { - "port" : 8080, //端口 + "port" : 8080, //端口 "https" : true, - "disableHostCheck" : true, + "disableHostCheck" : true, "proxy" : { "/api" : { "target" : "https://6548.cn", @@ -193,5 +194,5 @@ } } }, - "sassImplementationName": "node-sass" + "sassImplementationName" : "node-sass" } diff --git a/pages/index/index.vue b/pages/index/index.vue index 331882a..a8c0b4d 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -1,17 +1,17 @@