index.js 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868
  1. let Parse = getApp().Parse
  2. const company = getApp().globalData.company
  3. import dataSource from '../../../service/data';
  4. import dateServ from '../../../service/date';
  5. const rechText = require('../../../../utils/rech-text')
  6. Page({
  7. /**
  8. * 页面的初始数据
  9. */
  10. data: {
  11. roomId: null,
  12. room: {},
  13. note: {
  14. "title": '订房必读',
  15. "desc": '为响应《关于南昌市旅游住宿业不主动提供一次性周品的侣仪书》,消费者减少一次性塑料制品使用,南昌市旅游住宿单位不再主动向消费者提供牙刷、牙膏、香皂、浴液、拖鞋、梳子等一次性易耗品和一次性碗、杯、盘、餐具等餐饮用具,如有需要请提前向酒店咨询。',
  16. "arrowtext": '查看全部',
  17. 'detail': `城市通知\t为响应《关于南昌市旅游住宿业不主动提供一次性周品的侣仪书》,消费者减少一次性塑料制品使用,南昌市旅游住宿单位不再主动向消费者提供牙刷、牙膏、香皂、浴液、拖鞋、梳子等一次性易耗品和一次性碗、杯、盘、餐具等餐饮用具,如有需要请提前向酒店咨询。\n\n
  18. 外宾政策\t商家仅接待大陆客人。
  19. 预提示:您填写的预订信息和联系方式是商家或供应商提供相关服务所需的必要信息,美团会基于履约必要的范围向商家或供应商提供。
  20. 如您预订的产品涉及实名制要求(如包含有实名制需求的景区门票产品),需要您填写出行人真实有效的证件信息,用于出游时的身份验证。美团会基于履约必要的范围向供应商提供。
  21. 订单等商家或供应商确认后才生效,订单确认结果以美团短信或邮件通知为准;请在订单生效后再至商家前台办理入住。
  22. 业务实际运营和相应责任由门店签约主体公司负责。
  23. 入住时间:14:00以后;离店时间:12:00以前,如需提前入住或延迟退房请联系商家。
  24. 宠物携带:允许携带宠物。`
  25. },
  26. date: '', // 入住时间
  27. defaultDate: [], // 日历默认时间
  28. startTime: null, // 入住开始时间
  29. endTime: null, // 入住结束时间
  30. count: 1, // 入住几晚
  31. columns: [], // 入住人数可选数组
  32. peopleNum: 1, // 入住人数
  33. showNote: false,
  34. showDate: false,
  35. showNumPicker: false,
  36. showPayment: false,
  37. customers: [], // 住客信息
  38. priceInfoArr: [], // 房费详细信息
  39. formatter: null, // 日历格式化
  40. // checkedFormatter: null,// 日历相关数据处理
  41. CountArray: [], // 房型可选日期及已订数量数组 [{date: '',count: 0}]
  42. CountObj: [], // 房型可选日期及已订数量对象 {date: count}
  43. start:'',
  44. end:'',
  45. objectId:'',
  46. },
  47. /**
  48. * 生命周期函数--监听页面加载
  49. */
  50. onLoad: function (options) {
  51. const {
  52. objectId,
  53. date_start,
  54. date_end,
  55. } = options;
  56. const date_start1 = decodeURIComponent(date_start);
  57. const date_end1 = decodeURIComponent(date_end);
  58. this.setData({
  59. start:date_start1,
  60. end:date_end1,
  61. objectId
  62. })
  63. console.log('123', date_start1, date_end1);
  64. this.getdate()
  65. this.initData(objectId)
  66. },
  67. getdate() {
  68. let {
  69. startTime,
  70. endTime
  71. } = this.formatTimeArea(this.data.start, this.data.end)
  72. console.log('开始时间', startTime, '结束时间', endTime);
  73. var dataAll = dateServ.getDayAll(startTime, endTime);
  74. dataAll.pop(); // 最后一天为退房,不算在内
  75. console.log(dataAll);
  76. console.log(this.formatDate(startTime), this.formatDate(endTime))
  77. let dateStr = this.formatDate(startTime) + '-' + this.formatDate(endTime)
  78. console.log(dateStr)
  79. this.setData({
  80. showDate: false,
  81. date: `${this.formatDate(startTime)} - ${this.formatDate(endTime)}`,
  82. startTime: new Date(startTime),
  83. endTime: new Date(endTime),
  84. priceInfoArr: dataAll,
  85. count: dataAll.length
  86. })
  87. console.log(this.data.priceInfoArr);
  88. },
  89. /**
  90. * 生命周期函数--监听页面显示
  91. */
  92. onShow: function () {
  93. this.setData({
  94. customers: this.data.customers
  95. })
  96. console.log(this.data.customers);
  97. },
  98. initData(roomId) {
  99. dataSource.getRoomById(roomId).then(room => {
  100. room.desc = room.tags.join(" ") // 标签
  101. this.data.note.detail = rechText.formatRichText((room.note || '')); // 订房必读
  102. let merber = room.merber; // 房间容纳人数
  103. let columns = [...new Array(merber + 1).keys()] // 入住人数可选数组
  104. columns.shift(0)
  105. console.log(columns);
  106. // 日期相关数据初始化
  107. // let defaultDate = this.initDate()
  108. // 订单开始时间结束时间 默认下午两点 方便无房时间对比
  109. // let today = new Date();
  110. // let tommrrow = dateServ.getStrByTimeIncreaseDay(today,1)
  111. // let {startTime,endTime}=this.formatTimeArea(today,tommrrow)
  112. // console.log(startTime,endTime);
  113. // let priceInfoArr = dateServ.getDayAll(startTime,endTime)// 订单时间跨度数组
  114. // priceInfoArr.pop();// 最后一天为退房 不计入
  115. // console.log(priceInfoArr);
  116. // let count= priceInfoArr.length;
  117. this.setData({
  118. roomId,
  119. room,
  120. columns,
  121. // date:defaultDate,
  122. peopleNum: merber,
  123. // priceInfoArr,
  124. // count,
  125. // startTime,
  126. // endTime,
  127. })
  128. })
  129. },
  130. dayAddOne(time) {
  131. time = new Date(time)
  132. let year = time.getFullYear()
  133. let month = time.getMonth() + 1
  134. let day = time.getDate()
  135. return new Date(`${year}-${month}-${day + 1} 14:00:00`);
  136. },
  137. formatTimeArea(start, end) {
  138. start = new Date(start)
  139. end = new Date(end)
  140. console.log(start, end);
  141. let year = start.getFullYear()
  142. let month = start.getMonth() + 1
  143. let day = start.getDate()
  144. let year2 = end.getFullYear()
  145. let month2 = end.getMonth() + 1
  146. let day2 = end.getDate()
  147. console.log(year, month, day);
  148. let obj = {
  149. startTime: new Date(`${year}/${month}/${day} 14:00:00`),
  150. endTime: new Date(`${year2}/${month2}/${day2} 14:00:00`)
  151. }
  152. console.log(obj);
  153. return obj
  154. },
  155. navigate(event){
  156. console.log(event);
  157. let type = event.currentTarget.dataset.type;
  158. switch (type) {
  159. case 'room':
  160. console.log('暂时无详细页面');
  161. //暂时无详细页面
  162. // wx.navigateTo({
  163. // url: `/nova-tourism/pages/homestay/room-detail/index?id=${this.data.roomId}`
  164. // })
  165. break;
  166. case 'customer':
  167. //跳转到信息页面
  168. wx.navigateTo({
  169. url: `../customer/select-customer/index`
  170. })
  171. break;
  172. default:
  173. break;
  174. }
  175. },
  176. // 显示订房必读
  177. showNotePop() {
  178. this.setData({
  179. showNote: true
  180. })
  181. },
  182. closeModal() {
  183. this.setData({
  184. showNote: false
  185. });
  186. },
  187. // 日期
  188. initDate() {
  189. let month = new Date().getMonth() + 1;
  190. let start = new Date().getDate();
  191. let end = new Date().getDate() + 1;
  192. return `${month}月${start} 日 - ${month}月${end} 日`;
  193. },
  194. checkDate() {
  195. this.initCalenderData()
  196. this.setData({
  197. showDate: true
  198. })
  199. },
  200. closeDate() {
  201. this.setData({
  202. showDate: false
  203. })
  204. },
  205. enterDate(event) {
  206. const [start, end] = event.detail;
  207. console.log(11111, event.detail)
  208. let {
  209. startTime,
  210. endTime
  211. } = this.formatTimeArea(start, end)
  212. console.log('开始时间', startTime, '结束时间', endTime);
  213. var dataAll = dateServ.getDayAll(startTime, endTime);
  214. dataAll.pop(); // 最后一天为退房,不算在内
  215. console.log(dataAll);
  216. console.log(this.formatDate(startTime), this.formatDate(endTime))
  217. let dateStr = this.formatDate(startTime) + '-' + this.formatDate(endTime)
  218. console.log(dateStr)
  219. this.setData({
  220. showDate: false,
  221. date: `${this.formatDate(startTime)} - ${this.formatDate(endTime)}`,
  222. startTime: new Date(startTime),
  223. endTime: new Date(endTime),
  224. priceInfoArr: dataAll,
  225. count: dataAll.length
  226. })
  227. console.log(this.data.priceInfoArr);
  228. },
  229. formatDate(date) {
  230. date = new Date(date);
  231. return `${date.getMonth() + 1}/${date.getDate()}`;
  232. },
  233. /*****
  234. * 已知:用户选择房型、时间段,房型的可用数量
  235. * 查询:范围内是否有空房
  236. *
  237. * 入住时间:当天占用房间
  238. * 离店时间:当天房间可用
  239. let CountArray = [
  240. {日期:20220419,数量:1},
  241. {date:20220419,count:1},
  242. ]
  243. function addOrdertoArray(currentDate){
  244. let currentIdx = CountArray.findIndex(item=>item.date == currentDate)
  245. if(currentIdx&&currentIdx>=0){
  246. CountArray[currentIdx].count += 1
  247. }else{
  248. CountArray.push({date:currentDate,count:1})
  249. }
  250. }
  251. function getDateByTime() // 同时获取14点校准时间
  252. RoomOrderList.forEach(order=>{
  253. let startDate = getDateByTime(order.get("startTime"));
  254. let endDate = getDateByTime(order.get("endTime"));
  255. let breakDate =
  256. for(currentDate; currentDate + 1day; currentDate=breakDate){
  257. addOrdertoArray(currentDate);
  258. }
  259. })
  260. */
  261. /*** 日期组件初始化
  262. * 1、获取日历可选时间区间内 所有已生成订单 生成日期对应订单数量对象 {date:count}
  263. * 1、设置默认日期 (组件默认时间为当前时间及后一天 需修改为非无房状态日期)
  264. * 2、无房状态显示禁点
  265. * 3、已选择开始日期时,日期往后推 无房日期之后均为禁点
  266. */
  267. async initCalenderData() {
  268. // 获取日历可选时间区间内 所有已生成订单
  269. console.log(111)
  270. let orders = await this.getRoomOrdersByRoomId(this.data.roomId)
  271. orders.forEach(order => {
  272. let startDate = dateServ.getDateStrByTime(order.get("startTime"));
  273. let endDate = dateServ.getDateStrByTime(order.get("endTime"));
  274. let breakDate = dateServ.getStrByTimeIncreaseDay(order.get("endTime"), -1);
  275. console.log(startDate, endDate, breakDate);
  276. // 遍历单个订单下已订时间 将订单覆盖时间推入CountObject
  277. let dateArr = dateServ.getDayAll(startDate, breakDate)
  278. console.log(dateArr)
  279. for (let index = 0; index < dateArr.length; index++) {
  280. let datastr = dateArr[index];
  281. this.addOrdertoArray(datastr)
  282. }
  283. })
  284. console.log(this.data.CountArray, this.data.CountObj);
  285. this.setData({
  286. orders,
  287. defaultDate: [], // 默认日期
  288. CountArray: this.data.CountArray,
  289. CountObj: this.data.CountObj
  290. })
  291. this.checkedFormatter('init')
  292. },
  293. selectDay(date, type) {
  294. let day = {
  295. date,
  296. text: '20',
  297. type: '',
  298. bottomInfo: undefined
  299. }
  300. console.log('ddddddd', type);
  301. this.formatter(day, type)
  302. },
  303. getOrderDate(date) {
  304. console.log(this.data.CountObj[date], this.data.room.total);
  305. if (!this.data.CountObj[date]) {
  306. return date
  307. }
  308. if (this.data.CountObj[date] && this.data.CountObj[date] < this.data.room.total) {
  309. return date
  310. }
  311. if (this.data.CountObj[date] && this.data.CountObj[date] >= this.data.room.total) {
  312. return false
  313. }
  314. },
  315. addOrdertoArray(currentDate) {
  316. // currentDate = new Date(currentDate)
  317. let currentIdx = this.data.CountArray.findIndex(item => item.date == currentDate)
  318. if (currentIdx && currentIdx >= 0) {
  319. this.data.CountArray[currentIdx].count += 1
  320. } else {
  321. this.data.CountArray.push({
  322. date: currentDate,
  323. count: 1
  324. }) // 日期,已订数量
  325. }
  326. this.data.CountObj[currentDate] ? this.data.CountObj[currentDate] += 1 : this.data.CountObj[currentDate] = 1;
  327. console.log(this.data.CountObj)
  328. },
  329. // 组件日期订单数量达到总数时,type设置为disabled
  330. // 组件默认start为当前日期,end为当前日期后一天 当前日期无房情况下需将最近的非disabled日期设为start
  331. // 当start 后一天为 无房日期时,该日期type改为'' ,无房日期 不可为start
  332. type: null,
  333. start: null,
  334. end: null,
  335. disabled: null,
  336. // start后的第一个无房日期
  337. checkedFormatter(type) {
  338. if (this.end) {
  339. this.disabled = null;
  340. }
  341. let that = this;
  342. this.status = null;
  343. let formatter = function (day, type) { //
  344. const month = day.date.getMonth() + 1;
  345. const date = day.date.getDate();
  346. if (month < 7) {
  347. if (date == 4 || date == 5 || date == 20 || date == 21 || date == 30) {
  348. // console.log(day,day.date,day.type);
  349. }
  350. let CountObj = that.data.CountObj
  351. let datestr = dateServ.getDateStrByTime(day.date);
  352. let endstr = null;
  353. let disabledstr = null;
  354. let startstr = null;
  355. if (that.end) {
  356. endstr = dateServ.getDateStrByTime(that.end);
  357. }
  358. if (that.disabled) {
  359. disabledstr = dateServ.getDateStrByTime(that.disabled);
  360. }
  361. if (that.start) {
  362. startstr = dateServ.getDateStrByTime(that.start);
  363. }
  364. // 1、该日期订单数量达到房间总量且非结束日期 显示无房 禁点
  365. if (CountObj[datestr] && CountObj[datestr] >= that.data.room.total && endstr != datestr) {
  366. day.bottomInfo = '无房';
  367. day.type = 'disabled';
  368. // that.disabled = day.date;
  369. // 4.1无房后日期禁点1 无离店日期时 入住日期后最近无房日期保存为disabled
  370. // console.log(startstr, datestr,that.disabled);
  371. if (startstr < datestr && !that.end && (!that.disabled || disabledstr > datestr)) {
  372. // console.log(startstr, datestr,that.disabled);
  373. that.disabled = day.date
  374. }
  375. }
  376. // 已有end时,记录end
  377. if (day.type == 'end') {
  378. that.end = day.date;
  379. that.disabled = null;
  380. }
  381. // 4.2无房后日期禁点2 已选入住日期 无离店日期 时,离入住日期最近无房日期后所有日期type 设为 disabled
  382. // console.log(day.config,that.start,that.end,datestr,disabledstr,startstr);
  383. if (that.start && !that.end && (datestr > disabledstr) && (startstr < datestr)) {
  384. // console.log(datestr,disabledstr);
  385. day.type = 'disabled'
  386. }
  387. // 2、设置默认入住日期:无start时,最近一天非disabled日期设为start 设为默认日期
  388. if (day.type != 'disabled' && !that.start) { //&& !that.data.defaultDate[0]
  389. day.type = 'start'
  390. that.start = day.date;
  391. // that.data.defaultDate[0] = day.date.getTime()
  392. // console.log(that.data.defaultDate);
  393. // that.setData({
  394. // defaultDate:that.data.defaultDate
  395. // })
  396. }
  397. // 已有start时,记录start 原无房日期type为start时,不存
  398. if (day.type == 'start') {
  399. console.log(day, 'start');
  400. that.type = 'start';
  401. that.start = day.date;
  402. if (CountObj[datestr] && CountObj[datestr] >= that.data.room.total) {
  403. day.type = 'disabled';
  404. that.start = null;
  405. }
  406. }
  407. // 3.1、有start无end时,后一天如果为disabled,type设为''
  408. if (that.start && day.type == 'disabled' && month < 6) {
  409. let leavSelect = dateServ.getStrByTimeIncreaseDay(that.start, 1)
  410. // 日历day 时间为00:00:00,需把时间转换为 00:00:00 进行对比
  411. let isSame = dateServ.isSameDay(day.date, leavSelect)
  412. // console.log(startstr,CountObj[startstr] , that.data.room.total , !CountObj[startstr] || CountObj[startstr] <that.data.room.total);
  413. if (isSame && datestr != endstr && (!CountObj[startstr] || CountObj[startstr] < that.data.room.total)) {
  414. // console.log(datestr,endstr);
  415. // console.log('ddddddddddddddddddddd');
  416. // console.log(day,day.date,day.type);
  417. day.type = ''
  418. }
  419. }
  420. // 3.2、如果离店日期为无房日期,点击该日期 不修改入住和离店日期
  421. if (datestr == endstr) {
  422. console.log(datestr, endstr);
  423. if (CountObj[datestr] && CountObj[datestr] >= that.data.room.total) {
  424. day.type == 'end'
  425. }
  426. }
  427. if (day.type === 'start') {
  428. day.bottomInfo = '入住';
  429. } else if (day.type === 'end') {
  430. day.bottomInfo = '离店';
  431. }
  432. }
  433. return day;
  434. }
  435. // return formatter()
  436. // if(!this.defaultDate){
  437. // this.setData({
  438. // defaultDate:[this.start,this.end]
  439. // })
  440. // }
  441. this.setData({
  442. checkedFormatter: formatter
  443. })
  444. },
  445. unselectDate(event) {
  446. console.log(event);
  447. },
  448. selectDate(event) {
  449. console.log(event);
  450. let dates = event.detail;
  451. this.start = dates[0]
  452. this.end = dates[1]
  453. if (this.end) {
  454. this.disabled = null;
  455. console.log(this.disabled);
  456. }
  457. this.checkedFormatter()
  458. },
  459. formatter(day, type) {
  460. const month = day.date.getMonth() + 1;
  461. if (month < 6) {
  462. console.log(day, type);
  463. }
  464. let CountObj = this.data.CountObj
  465. let datestr = dateServ.getDateStrByTime(day.date);
  466. // 该日期已有订单 且数量达到房间总量 显示无房 禁点
  467. if (CountObj[datestr] && CountObj[datestr] >= this.data.room.total) {
  468. day.bottomInfo = '无房';
  469. day.type = 'disabled'
  470. }
  471. if (day.type === 'start') {
  472. day.bottomInfo = '入住';
  473. } else if (day.type === 'end') {
  474. day.bottomInfo = '离店';
  475. }
  476. if (type) {
  477. day.type = type;
  478. }
  479. return day;
  480. },
  481. select: {
  482. start: null,
  483. end: null
  484. },
  485. // defaultDate(){
  486. // // 已知: 有订单时间对象数组 this.CountObj this.CountArray 房间数量 this.room.total
  487. // // 求: 最近订单数量小于房间数量时间
  488. // let arr = this.getTimeArr()
  489. // console.log(arr);
  490. // return arr
  491. // // format(day,type){
  492. // // if(type){
  493. // // day.type == type
  494. // // }
  495. // },
  496. getTimeArr() {
  497. let arr = [...new Array(30).keys()] // 日期遍历以30天为周期遍历
  498. let date = new Date();
  499. for (let i = 0; i < arr.length; i++) {
  500. let startstr = new Date(dateServ.getStrByTimeIncreaseDay(date, 0))
  501. let start = this.getOrderDate(startstr)
  502. date = new Date(dateServ.getStrByTimeIncreaseDay(date, 1))
  503. if (start) { // 最近可订的时间
  504. console.log(start);
  505. this.selectDay(start, 'start')
  506. console.log(start);
  507. let end = new Date(dateServ.getStrByTimeIncreaseDay(start, 1))
  508. let endstr = dateServ.getStrByTimeIncreaseDay(start, 1)
  509. let select = this.getOrderDate(endstr)
  510. console.log(select);
  511. if (!select) { // 处于禁用状态
  512. this.selectDay(end, 'end')
  513. }
  514. return [start, end]
  515. }
  516. if (i + 1 == arr.length) {
  517. this.getTimeArr()
  518. }
  519. }
  520. },
  521. // formatter (day) {
  522. // const month = day.date.getMonth() + 1;
  523. // const date = day.date.getDate();
  524. // // console.log(month,date);
  525. // // if (month === 5) {
  526. // // if (date === 1) {
  527. // // day.topInfo = '劳动节';
  528. // // } else if (date === 4) {
  529. // // day.topInfo = '五四青年节';
  530. // // } else if (date === 11) {
  531. // // day.text = '今天';
  532. // // }
  533. // // }
  534. // if(month === 4){
  535. // if(date === 18 || date === 19 || date === 20 || date === 21){
  536. // console.log(day);
  537. // }
  538. // if(day.type == 'start'){
  539. // console.log('start');
  540. // this.type = 'start';
  541. // // type = 'start';
  542. // }
  543. // if (day.type === 'start') {
  544. // day.bottomInfo = '入住';
  545. // } else if (day.type === 'end') {
  546. // day.bottomInfo = '离店';
  547. // }
  548. // let CountObj = this.data.CountObj
  549. // let datestr = dateServ.getDateStrByTime(day.date);
  550. // if(CountObj[datestr] && CountObj[datestr]>= this.data.room.total){// 该日期已有订单 且数量达到房间总量 显示无房 禁点
  551. // day.bottomInfo = '无房';
  552. // day.type = 'disabled'
  553. // }
  554. // if(date === 18 || date === 19 || date === 20 || date === 21){
  555. // console.log(day);
  556. // }
  557. // }
  558. // return day;
  559. // },
  560. // 入住人数选择
  561. checkNum() {
  562. this.setData({
  563. showNumPicker: true
  564. })
  565. },
  566. numPickerChange(event) {
  567. // console.log(event,event.detail);
  568. // this.setData({
  569. // peopleNum:event.detail
  570. // })
  571. },
  572. numPickerEnter(event) {
  573. const {
  574. picker,
  575. value,
  576. index
  577. } = event.detail;
  578. console.log(picker, value, index);
  579. console.log(`当前值:${value}, 当前索引:${index}`);
  580. this.setData({
  581. peopleNum: value,
  582. showNumPicker: false
  583. })
  584. },
  585. numPickerCancel() {
  586. console.log('取消');
  587. this.setData({
  588. showNumPicker: false
  589. })
  590. },
  591. async checkOrderCount() {
  592. // start1 end1 现在选择
  593. // start2 end2 已有订单时间
  594. // start1 < start2 end1 < end2
  595. // start1 > start2 end1 > end2
  596. // start1 = start2 end1 = end2
  597. let now = dateServ.changeDateTime(new Date(), '14:00:00')
  598. let Order = new Parse.Query("RoomOrder")
  599. Order.equalTo("room", this.data.roomId)
  600. Order.equalTo("company", company)
  601. Order.exists("status")
  602. Order.notEqualTo("status", 100)
  603. Order.notEqualTo("status", 400)
  604. Order.notEqualTo("status", 601)
  605. Order.notEqualTo("status", 700)
  606. Order.greaterThanOrEqualTo("startTime", this.data.endTime) //20 23 21 22
  607. Order.lessThanOrEqualTo("endTime", this.data.startTime)
  608. Order.select("startTime", "endTime")
  609. let count = await Order.count()
  610. console.log(count);
  611. return count
  612. },
  613. async submit() {
  614. if (!this.data.startTime || !this.data.endTime) {
  615. wx.showToast({
  616. title: '请选择入住时间',
  617. icon: 'none',
  618. })
  619. return
  620. }
  621. if (this.data.customers.length == 0) {
  622. wx.showToast({
  623. title: '请选择入住人',
  624. icon: 'none',
  625. })
  626. return
  627. }
  628. let count = await this.checkOrderCount()
  629. if (count >= this.data.room.total) {
  630. console.log(count);
  631. wx.showToast({
  632. title: '当前日期,已无剩余房间,请重新选择',
  633. icon: 'none',
  634. })
  635. return
  636. }
  637. let tradeNo = this.getTradeNo()
  638. let order = await this.setOrder(tradeNo)
  639. if (order) {
  640. this.setData({
  641. activeOrder: order,
  642. tradeNo,
  643. showPayment: true,
  644. })
  645. }
  646. },
  647. async acceptResult(e) {
  648. let {
  649. activeOrder
  650. } = this.data
  651. let that = this
  652. let {
  653. params,
  654. no
  655. } = e.detail;
  656. that.setData({
  657. showPayment: false
  658. })
  659. try {
  660. if (params == "ok") {
  661. activeOrder.set("status", 100)
  662. activeOrder.set("isPay", true)
  663. await activeOrder.save()
  664. wx.showToast({
  665. title: '支付成功',
  666. icon: 'none',
  667. duration: 1500,
  668. mask: false,
  669. });
  670. wx.navigateBack({
  671. delta: 1,
  672. })
  673. } else {
  674. wx.showToast({
  675. title: '支付失败,取消订单',
  676. icon: 'none',
  677. duration: 1500,
  678. mask: false,
  679. });
  680. }
  681. } catch (error) {
  682. console.log(error)
  683. wx.showToast({
  684. title: "支付失败",
  685. icon: "error",
  686. duration: 1500,
  687. });
  688. wx.hideLoading()
  689. }
  690. },
  691. //生成订单号
  692. getTradeNo() {
  693. let now = new Date()
  694. let tradeNo = "C" +
  695. String(now.getFullYear()) +
  696. (now.getMonth() + 1) +
  697. now.getDate() +
  698. now.getHours() +
  699. now.getMinutes() +
  700. now.getSeconds() +
  701. Math.random().toString().slice(-6); //生成六位随机数
  702. return tradeNo
  703. },
  704. // 创建待支付订单
  705. async setOrder(tradeNo) {
  706. let currentUser = Parse.User.current()
  707. let Order = Parse.Object.extend("RoomOrder");
  708. let order = new Order()
  709. try {
  710. order.set("details", this.data.room.details);
  711. order.set("user", {
  712. __type: 'Pointer',
  713. className: '_User',
  714. objectId: currentUser.id
  715. });
  716. order.set("orderNum", tradeNo);
  717. order.set("room", {
  718. __type: 'Pointer',
  719. className: 'ShopRoom',
  720. objectId: this.data.roomId
  721. });
  722. console.log(this.data.startTime, this.data.endTime);
  723. order.set("startTime", this.data.startTime);
  724. order.set("endTime", this.data.endTime);
  725. order.set("price", this.data.count * this.data.room.price);
  726. order.set("shopStore", {
  727. __type: 'Pointer',
  728. className: 'ShopStore',
  729. objectId: this.data.room.shop.objectId
  730. });
  731. order.set("company", {
  732. __type: 'Pointer',
  733. className: 'Company',
  734. objectId: company
  735. })
  736. order.set("name", this.data.customers[0]['realname']);
  737. order.set("mobile", this.data.customers[0]['mobile']);
  738. order.set("merber", this.data.peopleNum);
  739. order = await order.save()
  740. } catch (error) {
  741. console.log(error);
  742. wx.showToast({
  743. title: error.errMsg,
  744. icon: 'none'
  745. })
  746. }
  747. return order
  748. },
  749. /**
  750. * 生命周期函数--监听页面初次渲染完成
  751. */
  752. onReady: function () {
  753. },
  754. async getRoomOrdersByRoomId(roomId) {
  755. let time1 = dateServ.changeDateTime(new Date(), '00:00:00');
  756. let time2 = this.timeaddsix(dateServ.changeDateTime(new Date(), '23:59:59'));
  757. console.log("time1", time1, "time2", time2)
  758. let Order = new Parse.Query("RoomOrder")
  759. Order.equalTo("room", roomId)
  760. Order.equalTo("company", company)
  761. Order.exists("status")
  762. Order.greaterThanOrEqualTo("startTime", time1)
  763. Order.lessThanOrEqualTo("startTime", time2)
  764. Order.select("startTime", "endTime")
  765. let orders = await Order.find()
  766. console.log(orders);
  767. return orders
  768. },
  769. timeaddsix(str) {
  770. // 创建日期对象,并初始化,完成文本转日期
  771. var date = new Date(str);
  772. //日期转文本方式一:
  773. // str = date.format("yyyy-MM-dd");
  774. var year = date.getFullYear(); //年
  775. var month = date.getMonth() + 7; //月 +6个月 因为js里month从0开始,所以要加1
  776. if (month > 12) {
  777. year++;
  778. month -= 12;
  779. }
  780. if (month < 10) {
  781. month = "0" + month;
  782. }
  783. var date2 = new Date(year, month, 0); //新的年月
  784. var day1 = date.getDate();
  785. var day2 = date2.getDate();
  786. if (day1 > day2) { //防止+6月后没有31天
  787. day1 = day2;
  788. }
  789. str = year + '/' +
  790. month + '/' +
  791. day1;
  792. return str
  793. },
  794. /**
  795. * 生命周期函数--监听页面隐藏
  796. */
  797. onHide: function () {
  798. },
  799. /**
  800. * 生命周期函数--监听页面卸载
  801. */
  802. onUnload: function () {
  803. },
  804. /**
  805. * 页面相关事件处理函数--监听用户下拉动作
  806. */
  807. onPullDownRefresh: function () {
  808. },
  809. /**
  810. * 页面上拉触底事件的处理函数
  811. */
  812. onReachBottom: function () {
  813. },
  814. /**
  815. * 用户点击右上角分享
  816. */
  817. onShareAppMessage: function () {
  818. },
  819. // getRoom(){
  820. // this.getRoom
  821. // }
  822. })