// nova-tourism/pages/my/my-order/index.js let Parse = getApp().Parse; const company = getApp().globalData.company const uid = Parse.User.current()?.id const dateF = require("../../../../utils/date") const req = require('../../../../utils/request') Page({ /** * 页面的初始数据 */ data: { currentTab: 0, //订单状态-页面(处理中0,进行中1,已完成2) roomList: [], show: false, showid: null, roomTabMap: { 0: "(100,500,601,602)", //已支付,申请退款,退款审核通过,退款已驳回 1: "(200,102,104)", //已入住,申请退房,退房被驳回 2: "(400,700,800,103)", //已退房,退款成功,已完成,退房成功 }, goodTabMap: { 0: "('200','500','601','602')", //已支付,申请退款,退款审核通过,退款已驳回 1: "('300')", //已发货 2: "('400','700','800')", //已收货,退款成功,订单完成 }, order: [], //订单列表 }, onClose() { this.setData({ show: false, }); // 关闭弹窗并重置标志位 }, ONShow(e) { const id = e.currentTarget.dataset.item.objectId this.setData({ showid: id, show: true, }); // 设置弹窗显示 console.log(this.data.showid); }, //订单完成 async ordercom(e) { console.log(e.currentTarget.dataset.item.objectId); let objectId = e.currentTarget.dataset.item.objectId let newOrder = new Parse.Query('RoomOrder'); newOrder.equalTo('company', company); newOrder.equalTo('objectId', objectId); newOrder.notEqualTo('isDeleted', true); let order = await newOrder.first(); console.log(order); order.set('status', 102) try { let saveDate = await order.save(); console.log('保存成功'); this.setData({ showid: null }) this.getRoomOrder() } catch (error) { console.error("保存数据时出现错误:", error); } }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { this.setData({ currentTab: Number(options.active) }) // this.getRoomOrder() this.refersh() }, async refersh() { this.getOrder() }, /**获取订单 */ async getOrder() { let { order, currentTab, roomTabMap, goodTabMap } = this.data let rosql = `AND ro."status" IN ${roomTabMap[currentTab]}` let gosql = `AND o."status" IN ${goodTabMap[currentTab]}` let sql = `WITH "order" AS( SELECT t1."objectId",t1."createdAt",t1."startTime",t1."endTime",t1."status",t1."totalPrice",sg."name",'order' AS "table",sg."image",sg."tag"::jsonb AS "tags",(t1."spec"::jsonb->'spec')::text AS "spec" FROM ( SELECT o."objectId",o."createdAt",o."status"::text,o."totalPrice"::text,o."startTime",o."endTime", jsonb_array_elements(o."targetObject")::json->>'objectId' AS "gid",spec.value AS "spec" FROM "Order" o, jsonb_each(o."specMap") AS spec (key, value) WHERE o."company"='${company}' AND o."isDeleted" IS NOT TRUE AND o."user"='${uid}' AND o."type"='scenery' ${gosql} AND o."isPay" IS TRUE )t1 LEFT JOIN "ShopGoods" sg ON sg."objectId" = t1."gid" ), "room_order" AS( SELECT ro."objectId",ro."createdAt",ro."startTime",ro."endTime", ro."status"::text,ro."price"::text AS "totalPrice",r."name",store."storeName" AS "table", r."images"->> 0 AS "image",r."tags"::jsonb AS "tags",''::text AS "spec" FROM "RoomOrder" ro LEFT JOIN "ShopRoom" r ON r."objectId"=ro."room" LEFT JOIN "ShopStore" store ON store."objectId"=r."shop" WHERE ro."company"='${company}' AND ro."isDeleted" IS NOT TRUE AND ro."user"='${uid}' AND ro."isPay" IS TRUE ${rosql} ), "tog" AS ( SELECT * FROM "order" UNION ALL SELECT * FROM "room_order" ) SELECT * FROM "tog" ORDER BY "tog"."createdAt" DESC LIMIT 20 OFFSET ${order?.length||0}` // console.log(sql) let d = await req.customSQL(sql) || [] d?.map(item => { if (item.startTime && item.endTime) { item.fromto = `${dateF.formatTime('YYYY年mm月dd日',item.startTime)}入住 - ${dateF.formatTime('YYYY年mm月dd日',item.endTime)}离店` } return item }) console.log(d) this.setData({ order: [...order, ...(d || [])] }) }, /**切换状态 */ async switchTab(e) { const index = e.currentTarget.dataset.index; await this.setData({ currentTab: index, order:[] }); this.getOrder() }, //改变民宿或物品 change(e) { console.log(this.data.value); this.setData({ currentTab: 0 }) if (this.data.value == '民宿') { this.getRoomOrder() } else { } }, formatDate2(date1, date2) { date1 = new Date(date1); date2 = new Date(date2); // 获取年份、月份和日期 const year1 = date1.getFullYear(); const month1 = date1.getMonth() + 1; // 月份从0开始,所以要加1 const day1 = date1.getDate(); const year2 = date2.getFullYear(); const month2 = date2.getMonth() + 1; // 月份从0开始,所以要加1 const day2 = date2.getDate(); // 返回格式化的字符串 return `${year1}年${month1}月${day1}日入住 - ${year2}年${month2}月${day2}日离店`; }, async getRoomOrder() { let Order = new Parse.Query('RoomOrder'); Order.equalTo('company', company); Order.include('room'); Order.equalTo('user', Parse.User.current().id); Order.include('shopStore'); if (this.data.currentTab == 0) { Order.equalTo('status', 100) } if (this.data.currentTab == 1) { Order.equalTo('status', 200); } if (this.data.currentTab == 2) { Order.equalTo('status', 800); } // 添加排序条件 Order.descending('updatedAt'); let room = await Order.find(); let roomList = room.map(async item => { let roomItme = item.toJSON(); roomItme.tiem = await this.formatDate2(roomItme.startTime.iso, roomItme.endTime.iso) return roomItme }); let roomList2 = await Promise.all(roomList); this.setData({ roomList: roomList2 }) console.log(this.data.roomList); }, tourl(e){ let url = e.currentTarget.dataset.url wx.navigateTo({ url: `${url}`, }); }, gourl(e) { const url = e.currentTarget.dataset.url; const id = e.currentTarget.dataset.id; // 构造要传递的信息 const info = { objectId: id, value: this.data.value }; // 将信息转为查询字符串 const queryString = Object.keys(info) .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(info[key])}`) .join('&'); // 使用查询字符串跳转 wx.navigateTo({ url: `${url}?${queryString}`, }); }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { this.getOrder() }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { } })