goods_info.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. // pages/sub_index_page/goods_info/goods_info.js
  2. // 获取应用实例
  3. const app = getApp()
  4. Page({
  5. /**
  6. * 页面的初始数据
  7. */
  8. data: {
  9. currentTitleIdx: 0,
  10. staticUrl: "",
  11. // 商品
  12. goods: {},
  13. goodsNum: 1,
  14. animationData: {},
  15. goodsInfoShowState: false,
  16. //选择的类型
  17. selectedOptions: {
  18. text: '',
  19. extra: 0
  20. },
  21. cartList: []
  22. },
  23. handleSwiperChange(e) {
  24. var idx = e.detail.current;
  25. this.setData({
  26. currentTitleIdx: idx
  27. })
  28. },
  29. handleTitleTap(e) {
  30. // console.log(e.currentTarget.dataset.idx)
  31. var index = e.currentTarget.dataset.idx;
  32. this.setData({
  33. currentTitleIdx: index
  34. })
  35. },
  36. //查询商品
  37. requestGoods(goodsId) {
  38. var _this = this
  39. wx.request({
  40. url: app.globalData.rootUrl + '/goods/getGoods',
  41. method: "GET",
  42. data: {
  43. goodsId: goodsId
  44. },
  45. success(e) {
  46. if (e.data.success) {
  47. var goods = e.data.data;
  48. _this.setData({
  49. goods: goods
  50. })
  51. }
  52. }
  53. })
  54. },
  55. //商品详情界面的显示
  56. handleGoodsInfoShow(e) {
  57. var _this = this;
  58. // 显示遮罩层
  59. var animation = wx.createAnimation({
  60. duration: 200,
  61. timingFunction: "linear",
  62. delay: 0
  63. })
  64. _this.animation = animation
  65. animation.translateY(500).step()
  66. _this.setData({
  67. animationData: animation.export(),
  68. goodsInfoShowState: true,
  69. cartShowState: false
  70. })
  71. setTimeout(function () {
  72. animation.translateY(0).step()
  73. _this.setData({
  74. animationData: animation.export()
  75. })
  76. }.bind(this), 200)
  77. },
  78. //商品详情界面的隐藏
  79. handleGoodsInfoHide(e) {
  80. var _this = this;
  81. // 隐藏遮罩层
  82. var animation = wx.createAnimation({
  83. duration: 500,
  84. timingFunction: "ease",
  85. delay: 0
  86. })
  87. _this.animation = animation
  88. animation.translateY(500).step()
  89. _this.setData({
  90. animationData: animation.export(),
  91. })
  92. setTimeout(function () {
  93. animation.translateY(0).step()
  94. _this.setData({
  95. animationData: animation.export(),
  96. goodsInfoShowState: false,
  97. })
  98. }.bind(this), 200)
  99. },
  100. //加
  101. handleGoodsAddTap(e) {
  102. var num = this.data.goodsNum + 1;
  103. this.setData({
  104. goodsNum: num
  105. })
  106. },
  107. //减
  108. handleGoodsReduceTap(e) {
  109. var num = this.data.goodsNum > 0 ? this.data.goodsNum - 1 : 0;
  110. this.setData({
  111. goodsNum: num
  112. })
  113. },
  114. //处理类型点击
  115. handleSelectStateTap(e) {
  116. var index1 = e.currentTarget.dataset.index1;
  117. var index2 = e.currentTarget.dataset.index2;
  118. var goods = this.data.goods;
  119. // var goodsOptions = goods.goodsOptions;
  120. goods.goodsOptions[index1].goodsOptionItems.forEach(els => {
  121. els.selectedState = false;
  122. });
  123. goods.goodsOptions[index1].goodsOptionItems[index2].selectedState = true;
  124. this.setData({
  125. goods: goods
  126. })
  127. this.setSelectedOptions();
  128. },
  129. //设置已选择Text
  130. setSelectedOptions() {
  131. var goods = this.data.goods;
  132. var res = '';
  133. var extra = 0;
  134. var ids=[]
  135. goods.goodsOptions.forEach(item1 => {
  136. item1.goodsOptionItems.forEach(item2 => {
  137. if (item2.selectedState) {
  138. ids.push(item2.id)
  139. res += "+" + item2.optionItem;
  140. extra += item2.extraPrice;
  141. }
  142. })
  143. })
  144. res = res.slice(1)
  145. this.setData({
  146. selectedOptions: {
  147. text: res,
  148. extra: extra
  149. },
  150. setSelectedOptionsIds:ids
  151. })
  152. },
  153. //点击添加到购物车
  154. handleAdd2CartGoodsTap(e) {
  155. var goodsNum = this.data.goodsNum;
  156. var goods = this.data.goods;
  157. var selectedOptions = this.data.selectedOptions;
  158. var selectedOptionsIds = this.data.selectedOptionsIds;
  159. var cartList = this.data.cartList;
  160. var idx = -1;
  161. //购物车已经含有
  162. cartList.forEach((cart, index) => {
  163. if (cart.goodsId == goods.id) {
  164. idx = index;
  165. }
  166. })
  167. var num = goodsNum > 0 ? goodsNum : 1;
  168. if (idx != -1) {
  169. cartList[idx].num = num;
  170. cartList[idx].selectedOptions = selectedOptions;
  171. } else {
  172. //购物车中没有
  173. cartList.push({
  174. goodsId: goods.id,
  175. goods: goods,
  176. selectedOptions: selectedOptions,
  177. selectedOptionsIds: selectedOptionsIds,
  178. num: num
  179. })
  180. }
  181. this.setData({
  182. cartList: cartList
  183. })
  184. this.updateCartList2Storage();
  185. wx.navigateBack()
  186. },
  187. /**
  188. * 更新购物车缓存
  189. */
  190. updateCartList2Storage() {
  191. var cartList = this.data.cartList;
  192. wx.setStorage({
  193. key: "cartList",
  194. data: cartList,
  195. success() {
  196. console.log("add cartList to storage success")
  197. }
  198. })
  199. },
  200. /**
  201. * 得到购物车缓存数据
  202. */
  203. getCartListStorage() {
  204. var cartList = wx.getStorageSync('cartList');
  205. //缓存中为空时,初始化购物车为集合
  206. if (cartList == '') {
  207. cartList = [];
  208. }
  209. this.setData({
  210. cartList: cartList
  211. })
  212. },
  213. /**
  214. * 生命周期函数--监听页面加载
  215. */
  216. onLoad: function (options) {
  217. var goodsId = options.goodsId;
  218. this.requestGoods(goodsId)
  219. this.getCartListStorage();
  220. this.setData({
  221. staticUrl: app.globalData.staticUrl,
  222. serverPrefix:app.globalData.serverPrefix
  223. })
  224. },
  225. /**
  226. * 生命周期函数--监听页面初次渲染完成
  227. */
  228. onReady: function () {
  229. },
  230. /**
  231. * 生命周期函数--监听页面显示
  232. */
  233. onShow: function () {
  234. },
  235. /**
  236. * 生命周期函数--监听页面隐藏
  237. */
  238. onHide: function () {
  239. },
  240. /**
  241. * 生命周期函数--监听页面卸载
  242. */
  243. onUnload: function () {
  244. },
  245. /**
  246. * 页面相关事件处理函数--监听用户下拉动作
  247. */
  248. onPullDownRefresh: function () {
  249. },
  250. /**
  251. * 页面上拉触底事件的处理函数
  252. */
  253. onReachBottom: function () {
  254. },
  255. /**
  256. * 用户点击右上角分享
  257. */
  258. onShareAppMessage: function () {
  259. }
  260. })