index.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. // nova-tourism/pages/my/my-order/index.js
  2. let Parse = getApp().Parse;
  3. const company = getApp().globalData.company
  4. const uid = Parse.User.current()?.id
  5. const dateF = require("../../../../utils/date")
  6. const req = require('../../../../utils/request')
  7. Page({
  8. /**
  9. * 页面的初始数据
  10. */
  11. data: {
  12. currentTab: 0, //订单状态-页面(处理中0,进行中1,已完成2)
  13. roomList: [],
  14. show: false,
  15. showid: null,
  16. roomTabMap: {
  17. 0: "(100,500,601,602)", //已支付,申请退款,退款审核通过,退款已驳回
  18. 1: "(200,102,104)", //已入住,申请退房,退房被驳回
  19. 2: "(400,700,800,103)", //已退房,退款成功,已完成,退房成功
  20. },
  21. goodTabMap: {
  22. 0: "('200','500','601','602')", //已支付,申请退款,退款审核通过,退款已驳回
  23. 1: "('300')", //已发货
  24. 2: "('400','700','800')", //已收货,退款成功,订单完成
  25. },
  26. order: [], //订单列表
  27. },
  28. onClose() {
  29. this.setData({
  30. show: false,
  31. }); // 关闭弹窗并重置标志位
  32. },
  33. ONShow(e) {
  34. const id = e.currentTarget.dataset.item.objectId
  35. this.setData({
  36. showid: id,
  37. show: true,
  38. }); // 设置弹窗显示
  39. console.log(this.data.showid);
  40. },
  41. //订单完成
  42. async ordercom(e) {
  43. console.log(e.currentTarget.dataset.item.objectId);
  44. let objectId = e.currentTarget.dataset.item.objectId
  45. let newOrder = new Parse.Query('RoomOrder');
  46. newOrder.equalTo('company', company);
  47. newOrder.equalTo('objectId', objectId);
  48. newOrder.notEqualTo('isDeleted', true);
  49. let order = await newOrder.first();
  50. console.log(order);
  51. order.set('status', 102)
  52. try {
  53. let saveDate = await order.save();
  54. console.log('保存成功');
  55. this.setData({
  56. showid: null
  57. })
  58. this.getRoomOrder()
  59. } catch (error) {
  60. console.error("保存数据时出现错误:", error);
  61. }
  62. },
  63. /**
  64. * 生命周期函数--监听页面加载
  65. */
  66. onLoad: function (options) {
  67. this.setData({
  68. currentTab: Number(options.active)
  69. })
  70. // this.getRoomOrder()
  71. this.refersh()
  72. },
  73. async refersh() {
  74. this.getOrder()
  75. },
  76. /**获取订单 */
  77. async getOrder() {
  78. let {
  79. order,
  80. currentTab,
  81. roomTabMap,
  82. goodTabMap
  83. } = this.data
  84. let rosql = `AND ro."status" IN ${roomTabMap[currentTab]}`
  85. let gosql = `AND o."status" IN ${goodTabMap[currentTab]}`
  86. let sql = `WITH "order" AS(
  87. 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"
  88. FROM (
  89. SELECT o."objectId",o."createdAt",o."status"::text,o."totalPrice"::text,o."startTime",o."endTime",
  90. jsonb_array_elements(o."targetObject")::json->>'objectId' AS "gid",spec.value AS "spec"
  91. FROM "Order" o,
  92. jsonb_each(o."specMap") AS spec (key, value)
  93. WHERE o."company"='${company}'
  94. AND o."isDeleted" IS NOT TRUE
  95. AND o."user"='${uid}'
  96. AND o."type"='scenery'
  97. ${gosql}
  98. AND o."isPay" IS TRUE
  99. )t1
  100. LEFT JOIN "ShopGoods" sg ON sg."objectId" = t1."gid"
  101. ),
  102. "room_order" AS(
  103. SELECT ro."objectId",ro."createdAt",ro."startTime",ro."endTime",
  104. ro."status"::text,ro."price"::text AS "totalPrice",r."name",store."storeName" AS "table",
  105. r."images"->> 0 AS "image",r."tags"::jsonb AS "tags",''::text AS "spec"
  106. FROM "RoomOrder" ro
  107. LEFT JOIN "ShopRoom" r ON r."objectId"=ro."room"
  108. LEFT JOIN "ShopStore" store ON store."objectId"=r."shop"
  109. WHERE ro."company"='${company}'
  110. AND ro."isDeleted" IS NOT TRUE
  111. AND ro."user"='${uid}'
  112. AND ro."isPay" IS TRUE
  113. ${rosql}
  114. ),
  115. "tog" AS (
  116. SELECT * FROM "order"
  117. UNION ALL
  118. SELECT * FROM "room_order"
  119. )
  120. SELECT * FROM "tog"
  121. ORDER BY "tog"."createdAt" DESC
  122. LIMIT 20 OFFSET ${order?.length||0}`
  123. // console.log(sql)
  124. let d = await req.customSQL(sql) || []
  125. d?.map(item => {
  126. if (item.startTime && item.endTime) {
  127. item.fromto = `${dateF.formatTime('YYYY年mm月dd日',item.startTime)}入住 - ${dateF.formatTime('YYYY年mm月dd日',item.endTime)}离店`
  128. }
  129. return item
  130. })
  131. console.log(d)
  132. this.setData({
  133. order: [...order, ...(d || [])]
  134. })
  135. },
  136. /**切换状态 */
  137. async switchTab(e) {
  138. const index = e.currentTarget.dataset.index;
  139. await this.setData({
  140. currentTab: index,
  141. order:[]
  142. });
  143. this.getOrder()
  144. },
  145. //改变民宿或物品
  146. change(e) {
  147. console.log(this.data.value);
  148. this.setData({
  149. currentTab: 0
  150. })
  151. if (this.data.value == '民宿') {
  152. this.getRoomOrder()
  153. } else {
  154. }
  155. },
  156. formatDate2(date1, date2) {
  157. date1 = new Date(date1);
  158. date2 = new Date(date2);
  159. // 获取年份、月份和日期
  160. const year1 = date1.getFullYear();
  161. const month1 = date1.getMonth() + 1; // 月份从0开始,所以要加1
  162. const day1 = date1.getDate();
  163. const year2 = date2.getFullYear();
  164. const month2 = date2.getMonth() + 1; // 月份从0开始,所以要加1
  165. const day2 = date2.getDate();
  166. // 返回格式化的字符串
  167. return `${year1}年${month1}月${day1}日入住 - ${year2}年${month2}月${day2}日离店`;
  168. },
  169. async getRoomOrder() {
  170. let Order = new Parse.Query('RoomOrder');
  171. Order.equalTo('company', company);
  172. Order.include('room');
  173. Order.equalTo('user', Parse.User.current().id);
  174. Order.include('shopStore');
  175. if (this.data.currentTab == 0) {
  176. Order.equalTo('status', 100)
  177. }
  178. if (this.data.currentTab == 1) {
  179. Order.equalTo('status', 200);
  180. }
  181. if (this.data.currentTab == 2) {
  182. Order.equalTo('status', 800);
  183. }
  184. // 添加排序条件
  185. Order.descending('updatedAt');
  186. let room = await Order.find();
  187. let roomList = room.map(async item => {
  188. let roomItme = item.toJSON();
  189. roomItme.tiem = await this.formatDate2(roomItme.startTime.iso, roomItme.endTime.iso)
  190. return roomItme
  191. });
  192. let roomList2 = await Promise.all(roomList);
  193. this.setData({
  194. roomList: roomList2
  195. })
  196. console.log(this.data.roomList);
  197. },
  198. tourl(e){
  199. let url = e.currentTarget.dataset.url
  200. wx.navigateTo({
  201. url: `${url}`,
  202. });
  203. },
  204. gourl(e) {
  205. const url = e.currentTarget.dataset.url;
  206. const id = e.currentTarget.dataset.id;
  207. // 构造要传递的信息
  208. const info = {
  209. objectId: id,
  210. value: this.data.value
  211. };
  212. // 将信息转为查询字符串
  213. const queryString = Object.keys(info)
  214. .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(info[key])}`)
  215. .join('&');
  216. // 使用查询字符串跳转
  217. wx.navigateTo({
  218. url: `${url}?${queryString}`,
  219. });
  220. },
  221. /**
  222. * 生命周期函数--监听页面初次渲染完成
  223. */
  224. onReady: function () {
  225. },
  226. /**
  227. * 生命周期函数--监听页面显示
  228. */
  229. onShow: function () {
  230. },
  231. /**
  232. * 生命周期函数--监听页面隐藏
  233. */
  234. onHide: function () {
  235. },
  236. /**
  237. * 生命周期函数--监听页面卸载
  238. */
  239. onUnload: function () {
  240. },
  241. /**
  242. * 页面相关事件处理函数--监听用户下拉动作
  243. */
  244. onPullDownRefresh: function () {
  245. },
  246. /**
  247. * 页面上拉触底事件的处理函数
  248. */
  249. onReachBottom: function () {
  250. this.getOrder()
  251. },
  252. /**
  253. * 用户点击右上角分享
  254. */
  255. onShareAppMessage: function () {
  256. }
  257. })