123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- // nova-tourism/pages/homestay/homestay-order2/index.js
- let Parse = getApp().Parse;
- const company = getApp().globalData.company
- import dateServ from '../../../service/date';
- const dateF = require("../../../../utils/date")
- const real = require("../../../../utils/real")
- const uid = Parse.User.current()?.id
- const sev = require('../../../service/request')
- Page({
- /**
- * 页面的初始数据
- */
- data: {
- room: {},
- startTime: null, // 入住开始时间
- endTime: null, // 入住结束时间
- roomId: null,
- count: 1, // 入住几晚
- date: '', //入住区间
- date02: '', //入住区间-页面显示
- name: '', //住客姓名
- mobile: '', //联系电话
- activeOrder: null, //创建的订单
- tradeNo: null, //订单号
- showPayment: false, //显示支付组件
- //显示日历选择
- show: false,
- order: null, //创建的订单-parse类型
- formatter: null, //标记被占用日期
- scope: null, //日历范围-今日至180天之后
- },
- /**
- * 生命周期函数--监听页面加载
- */
- onLoad: function (options) {
- const {
- objectId,
- date_start,
- date_end,
- } = options;
- console.log(date_start,
- date_end, )
- let minDate = new Date()
- let maxDate = new Date()
- maxDate.setDate(maxDate.getDate() + 180)
- let scope = {
- minDate: minDate.getTime(),
- maxDate: maxDate.getTime()
- }
- this.setData({
- startTime: date_start,
- endTime: date_end,
- roomId: objectId,
- scope
- })
- this.refersh()
- },
- async refersh() {
- await this.getroom()
- this.getdate()
- },
- /** 获取房间信息*/
- async getroom() {
- let {
- startTime,
- endTime
- } = this.data
- let room = new Parse.Query('ShopRoom');
- room.include('shop','shop.user');
- let d = await room.get(this.data.roomId)
- let timeList = ['12:00', '14:00']
- if (d?.get('open_time')) {
- timeList = d?.get('open_time').split("-");
- }
- console.log(d.toJSON())
- startTime = new Date(startTime + ' ' + timeList[0])
- endTime = new Date(endTime + ' ' + timeList[1])
- await this.setData({
- room: d.toJSON(),
- startTime,
- endTime
- })
- },
- /** 用户入住离店日期,并生成日期范围和价格信息。*/
- async getdate() {
- let {
- startTime,
- endTime
- } = this.data
- var dataAll = dateServ.getDayAll(startTime, endTime);
- dataAll.pop()
- await this.setData({
- date02: `${dateF.formatTime('mm月dd日 入住',startTime)} - ${dateF.formatTime('mm月dd日 离店',endTime)}`,
- date: `${this.formatDate(startTime)} - ${this.formatDate(endTime)}`,
- count: dataAll.length
- })
- this.getTotalPrice()
- },
- /** 开日历*/
- async onDisplay() {
- let {
- roomId
- } = this.data
- let list = await sev.getRoomOccupiaDate(roomId)
- // console.log(list)
- let formatter = (day) => {
- let year = day.date.getFullYear()
- let month = day.date.getMonth()
- let date = day.date.getDate()
- let isSame = list.findIndex(item=>item.year==year && item.month==month && item.date==date)
- if(isSame!=-1){
- day.topInfo = '被预定'
- }
- return day
- }
- this.setData({
- formatter,
- show: true
- });
- },
- /** 关日历*/
- onClose() {
- this.setData({
- show: false
- });
- },
- /** 选好日期点击完成后*/
- async onConfirm(event) {
- const [start, end] = event.detail;
- start.setHours(12, 0, 0);
- end.setHours(14, 0, 0);
- let {roomId}=this.data
- let isFree = await sev.isFree({from:start,to:end},roomId)
- console.log(isFree)
- if(!isFree){
- await this.onDisplay()
- wx.showToast({
- title: '时间段内存在被预定日期,请重新选择',
- icon:'none'
- })
- }else{
- await this.setData({
- show: false,
- startTime: start,
- endTime: end,
- });
- this.getdate()
- }
- },
- /** 判断是否可创建订单*/
- judgeOrder() {
- let {
- room,
- name,
- mobile
- } = this.data
- console.log(name, mobile)
- if (!name || !mobile) {
- wx.showToast({
- title: '住客姓名或联系电话为空',
- icon: 'none',
- });
- return false
- }
- if (!real.isPoneAvailable(mobile)) {
- wx.showToast({
- title: '手机号有误',
- icon: 'none',
- });
- return false
- }
- return true
- },
- /**创建订单 */
- async submitOrder() {
- let {
- room,
- name,
- mobile,
- startTime,
- endTime,
- totalPrice,
- order,
- tradeNo
- } = this.data
- console.log(startTime,
- endTime, )
- let isPass = this.judgeOrder()
- if (!isPass) return
- this.getTotalPrice()
- let o = order
- if (!order?.id) {
- let now = new Date()
- tradeNo = "C" +
- String(now.getFullYear()) +
- (now.getMonth() + 1) +
- now.getDate() +
- now.getHours() +
- now.getMinutes() +
- now.getSeconds() +
- Math.random().toString().slice(-6);
- let Order = Parse.Object.extend("RoomOrder");
- o = new Order()
- o.set("company", {
- __type: 'Pointer',
- className: 'Company',
- objectId: company
- })
- o.set("user", {
- __type: 'Pointer',
- className: '_User',
- objectId: uid
- })
- o.set("room", {
- __type: 'Pointer',
- className: 'ShopRoom',
- objectId: room?.objectId
- })
- o.set("shopStore", {
- __type: 'Pointer',
- className: 'ShopStore',
- objectId: room?.shop?.objectId
- })
- o.set("orderNum", tradeNo);
- o.set("merber", room?.merber || 0);
- o.set('status', 105) //未支付
- }
- o.set("name", name);
- o.set("mobile", mobile);
- o.set("startTime", startTime);
- o.set("endTime", endTime);
- o.set("price", totalPrice || 0);
- try {
- order = await o.save()
- this.setData({
- tradeNo,
- order: o,
- showPayment: true,
- })
- wx.showToast({
- title: '已创建订单',
- icon: 'none'
- })
- } catch (error) {
- wx.showToast({
- title: '出错了请检查后重试',
- icon: 'error'
- })
- }
- },
- /**支付回调 */
- async acceptResult(e) {
- let {
- order,room
- } = this.data
- let {
- params
- } = e.detail
- if (params == 'ok') {
- wx.showLoading({
- title: '加载中',
- })
- order.set('status', 100)
- order.set('isPay', true)
- try {
- await order.save()
- let userParse = Parse.User.current()
- if(!userParse?.get('invite')){
- userParse.set('invite',{__type:'Pointer',className:'_User',objectId:room.shop?.user?.objectId})
- await userParse.save()
- }
- setTimeout(() => {
- wx.hideLoading()
- wx.redirectTo({
- url: '/nova-tourism/pages/my/my-order/index?active=0',
- })
- }, 1000);
- } catch (error) {
- wx.showToast({
- title: '保存订单出错,请联系客服核对订单',
- icon: 'none'
- })
- }
- } else {
- wx.showToast({
- title: '支付失败',
- icon: 'none'
- })
- }
- },
- /**计算总价 */
- getTotalPrice() {
- let {
- room,
- count
- } = this.data
- let totalPrice = parseFloat(room?.price) * parseFloat(count)
- this.setData({
- totalPrice: parseFloat(totalPrice.toFixed(2) || 0) || 0
- })
- },
- /**获取日期格式 */
- formatDate(date) {
- date = new Date(date);
- const today = new Date();
- const month = date.getMonth() + 1;
- const day = date.getDate();
- const weekDays = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
- const weekDay = weekDays[date.getDay()];
- let dateDescription = '';
- if (date.toDateString() === today.toDateString()) {
- dateDescription = '今天';
- } else if (date.toDateString() === new Date(today.getTime() + 86400000).toDateString()) {
- dateDescription = '明天';
- } else {
- dateDescription = weekDay;
- }
- return `${month}月${day}日 ${dateDescription}`;
- },
- /** 发送短信*/
- formSubmit() {
- wx.request({
- url: 'https://server.fmode.cn/api/apig/message',
- method: "post", //请求方式
- data: {
- company: 'EbxZUK5lBI',
- mobile: '15279240198',
- templateId: '28754',
- apiName: 'message',
- },
- success(res) {
- console.log(res);
- }
- })
- },
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady: function () {
- },
- /**
- * 生命周期函数--监听页面显示
- */
- onShow: function () {
- },
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function () {
- },
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function () {
- },
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function () {
- },
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function () {
- },
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage: function () {
- },
- })
|