appointment.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. const app = getApp();
  2. import productApi from '../../api/product'
  3. import storeApi from '../../api/store'
  4. import createTimeApi from '../../utils/date'
  5. import orderApi from '../../api/order'
  6. import until from '../../utils/util'
  7. Page({
  8. /**
  9. * 页面的初始数据
  10. */
  11. data: {
  12. peopleNum: 1,
  13. activeTab: 0,
  14. shopInfo: {},
  15. shopId: 0,
  16. storeName: '',
  17. productId: 0,
  18. productImg: '',
  19. productName: '',
  20. price: 0,
  21. tabs: [],
  22. orderTime: "",
  23. orderTimeHeight: 0,
  24. days: [],
  25. hasMobile: false,
  26. mobile: '',
  27. address:'',
  28. shopName:'',
  29. userName:''
  30. },
  31. /**
  32. * 生命周期函数--监听页面加载
  33. */
  34. onLoad: async function (options) {
  35. console.log(options)
  36. let shopId = options.shopId;
  37. let productId = options.productId
  38. let address = options.address;
  39. let shopName = options.shopName;
  40. let product = await productApi.getProductById(productId);
  41. let productImg = product.info.productImg;
  42. let productName = product.info.productName;
  43. let price = product.info.currentPrice;
  44. this.setData({
  45. shopId,
  46. productId,
  47. productImg,
  48. productName,
  49. price,
  50. address,
  51. shopName
  52. })
  53. let userInfo = await app.getWxUserInfo();
  54. console.log(userInfo.name)
  55. if (userInfo) {
  56. this.setData({
  57. userInfo: userInfo,
  58. hasUserInfo: true,
  59. hasMobile: userInfo.mobile.length > 1 ? true : false,
  60. mobile: userInfo.mobile,
  61. userName:userInfo.name
  62. })
  63. }
  64. await this.createTimeList();
  65. },
  66. checkAuth: async function () {
  67. const self = this
  68. const isAuth = await app.isAuth()
  69. if (!isAuth) {
  70. wx.redirectTo({
  71. url: '/pages/prompt/prompt?page=' + this.route,
  72. })
  73. return
  74. }
  75. if (!self.data.orderTime){
  76. wx.showModal({
  77. title: '提示',
  78. content: '请选择预约时间',
  79. showCancel:false,
  80. })
  81. return
  82. }
  83. if (!self.data.mobile){
  84. wx.showModal({
  85. title: '提示',
  86. content: '请输入手机号',
  87. showCancel:false,
  88. })
  89. return
  90. }
  91. let data = {
  92. productId: self.data.productId,
  93. storeId: self.data.shopId,
  94. appointmentTime: self.data.orderTime,
  95. num: self.data.peopleNum,
  96. mobile: self.data.mobile
  97. }
  98. const rs = await orderApi.createOrder(data)
  99. let orderId = rs.orderId;
  100. wx.requestPayment({
  101. timeStamp: rs.timeStamp,
  102. nonceStr: rs.nonceStr,
  103. package: rs.package,
  104. signType: rs.signType,
  105. paySign: rs.paySign,
  106. success (res) {
  107. wx.navigateTo({
  108. url: '../order/order?id=' + orderId,
  109. })
  110. },
  111. fail (res) {
  112. wx.navigateTo({
  113. url: '../order/order?id=' + orderId,
  114. })
  115. }
  116. })
  117. },
  118. getMobile: async function (params) {
  119. console.log(params);
  120. let _self = this
  121. const data = {
  122. encryptedData:params.detail.encryptedData,
  123. iv: params.detail.iv
  124. }
  125. const userInfo = await app.getPhoneNumber(data)
  126. console.log(userInfo)
  127. let hasMobile = false
  128. if (userInfo.mobile > 1) {
  129. hasMobile:true
  130. }
  131. _self.setData({
  132. hasMobile: hasMobile,
  133. mobile: userInfo.mobile,
  134. })
  135. },
  136. onSlideChangeEnd: function (e) {
  137. var that = this;
  138. that.setData({
  139. activeTab: e.detail.index
  140. })
  141. },
  142. //生成当前可预约的时间
  143. createTimeList: async function () {
  144. var storeId = this.data.shopId;
  145. var price = this.data.price;
  146. var shopInfo = await storeApi.getStoreById(storeId);
  147. var openTime = shopInfo.info.openTime;
  148. var closeTime = shopInfo.info.closeTime;
  149. var date = await storeApi.getStoreAppointTime(storeId);
  150. var days = date.date;
  151. console.log(days)
  152. console.log(price)
  153. const tabs = createTimeApi.createTimeList(openTime, closeTime, days, price);
  154. console.log(tabs)
  155. this.setData({
  156. storeName: shopInfo.info.storeName,
  157. days,
  158. tabs
  159. })
  160. },
  161. getOrderTime: function (e) {
  162. //选中日期的下标
  163. var i = this.data.activeTab;
  164. //选中时间的下标
  165. var index = e.currentTarget.dataset.i;
  166. //获取选中的日期
  167. let date = this.data.days[i];
  168. let time = e.currentTarget.dataset.time;
  169. let year = (new Date()).getFullYear()
  170. let oTime = year + '-' + date + ' ' + time;
  171. //设置选中的样式
  172. var tabs = this.data.tabs;
  173. var list = tabs[i].list;
  174. //先清空其他选中的样式
  175. list.forEach(function (item, i, array) {
  176. item.checked = false;
  177. })
  178. //设置在开通时间内选中的样式
  179. if (list[index].inTime) {
  180. list[index].checked = true;
  181. this.data.tabs[i].list = list;
  182. this.setData({
  183. tabs,
  184. orderTime: oTime,
  185. })
  186. }
  187. },
  188. addPeopleNum: function (e) {
  189. var num = e.currentTarget.dataset.num;
  190. var maxNum = 9;
  191. if (num < maxNum) {
  192. num++;
  193. }
  194. this.setData({
  195. peopleNum: num
  196. })
  197. },
  198. reducePeopleNum: function (e) {
  199. var num = e.currentTarget.dataset.num;
  200. if (num > 1) {
  201. num--;
  202. }
  203. this.setData({
  204. peopleNum: num
  205. })
  206. },
  207. /**
  208. * 生命周期函数--监听页面初次渲染完成
  209. */
  210. onReady: function () {
  211. },
  212. /**
  213. * 生命周期函数--监听页面显示
  214. */
  215. onShow: async function () {
  216. },
  217. /**
  218. * 生命周期函数--监听页面隐藏
  219. */
  220. onHide: function () {
  221. },
  222. /**
  223. * 生命周期函数--监听页面卸载
  224. */
  225. onUnload: function () {
  226. },
  227. /**
  228. * 页面相关事件处理函数--监听用户下拉动作
  229. */
  230. onPullDownRefresh: function () {
  231. },
  232. /**
  233. * 页面上拉触底事件的处理函数
  234. */
  235. onReachBottom: function () {
  236. },
  237. /**
  238. * 用户点击右上角分享
  239. */
  240. onShareAppMessage: function () {
  241. },
  242. })