product.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. define(['$', 'template', 'product', 'cart', 'api', 'order', 'user', 'config', 'review', 'native'], function ($, template, product, cart, api, order, user, config, review, native) {
  2. /* 返回上一级 */
  3. function back(event) {
  4. event.preventDefault();
  5. $(document).trigger('spa:navigate', {
  6. hash: 'placeOrder'
  7. });
  8. }
  9. function renderReviewTemplate(reviews, hasMore) {
  10. var tpl = template('product/reviewList', {
  11. reviews: reviews,
  12. imgW: parseInt((document.body.clientWidth - 30) / 3) - 5
  13. });
  14. $('#productReviewScroll .list-content').append(tpl);
  15. if (hasMore) {
  16. $('#productReviewScroll .btn-more-container').removeClass('hide');
  17. } else {
  18. $('#productReviewScroll .btn-more-container').addClass('hide');
  19. }
  20. }
  21. var isShowVideo = function () {
  22. var show = true;
  23. // 判断安卓版本
  24. var UA = navigator.userAgent;
  25. var index = UA.indexOf("Android");
  26. if (index >= 0) {
  27. var androidVersion = parseFloat(UA.slice(index + 8));
  28. if (androidVersion < 4.4) {
  29. show = false;
  30. }
  31. }
  32. return false;
  33. }
  34. var cachePageData = {}; //page内部的数据传递
  35. return {
  36. title: '壹管家上门服务',
  37. body: '',
  38. init: function (pageData, dtd) {
  39. var $view = this;
  40. var $doc = $(document);
  41. /* 三个返回操作 */
  42. $.newTouch('.back-button', function (event) {
  43. back.call(this, event);
  44. }, $view);
  45. $view.on('tapBackButton', function (event) {
  46. back.call(this, event);
  47. });
  48. $view.on('swipeRight', function (event) {
  49. back.call(this, event);
  50. });
  51. // 提示信息
  52. $.newTouch('.btn-product-info', function (event) {
  53. $doc.trigger('spa:navigate', {
  54. hash: 'product-info/' + cachePageData.product.type,
  55. pushData: {
  56. needReload: cachePageData.needReload,
  57. fromHome: cachePageData.fromHome
  58. }
  59. });
  60. }, $view);
  61. // 提示信息
  62. $.newTouch('.group-title-container', function (event) {
  63. if ($(this).find('.group-title').hasClass('active')) {
  64. $(this).find('.group-title').removeClass('active');
  65. $(this).next('.group-detail').addClass('hide');
  66. } else {
  67. $(this).find('.group-title').addClass('active');
  68. $(this).next('.group-detail').removeClass('hide');
  69. }
  70. cachePageData.scroll.refresh();
  71. }, $view);
  72. // 点击用户头像 打开用户个人中心
  73. $.newTouch('.user-info-btn', function (event) {
  74. var url = 'http://www.yiguanjia.me'
  75. if (config.test) {
  76. url = 'http://wwwtest.yiguanjia.me';
  77. }
  78. var id = $(this).attr('data-id');
  79. var param = {
  80. url: url + '/user/' + id
  81. };
  82. native.openURL(param);
  83. }, $view);
  84. //tab切换
  85. $.newTouch('.type-control .control-item', function (event) {
  86. if (isShowVideo()) {
  87. $('#iframe-service-introduce', $view).contents().find('video')[0].pause();
  88. }
  89. var type = $(this).data('type');
  90. $('.type-container', $view).hide();
  91. switch (type) {
  92. case 1:
  93. $('#descContainer').show();
  94. break;
  95. case 2:
  96. $('#reviewContainer').show();
  97. if (cachePageData.needReloadReview) {
  98. cachePageData.needReloadReview = false;
  99. $doc.trigger('spa:openloader');
  100. review.getList(cachePageData.product.type, function (res) {
  101. $doc.trigger('spa:closeloader');
  102. var hasMore = true;
  103. if (res.current_page >= res.sum_page) {
  104. hasMore = false;
  105. }
  106. if (res.success) {
  107. renderReviewTemplate(res.data.comments, hasMore);
  108. }
  109. if (cachePageData.reviewScroll) {
  110. cachePageData.reviewScroll.destroy();
  111. cachePageData.reviewScroll = null;
  112. }
  113. setTimeout(function () {
  114. cachePageData.reviewScroll = new IScroll('#productReviewScroll');
  115. }, 10);
  116. }, true);
  117. }
  118. break;
  119. case 3:
  120. $('#consultationContainer').show();
  121. break;
  122. default:
  123. break;
  124. }
  125. }, $view);
  126. // 图片预览
  127. $.newTouch('.img-preview', function (event) {
  128. var current = $(this).attr('data-src');
  129. var i = $(this).parents('.table-view-cell').index();
  130. var imgList = review['reviewDatas'][cachePageData.product.type]['list'][i]['pics'];
  131. var imgLists = [];
  132. imgList.forEach(function (item, index) {
  133. imgLists.push(item.url)
  134. });
  135. native.previewImage(imgLists, current);
  136. }, $view);
  137. //加载更多
  138. $.newTouch('.btn-more-review', function (event) {
  139. $doc.trigger('spa:openloader');
  140. review.getList(cachePageData.product.type, function (res) {
  141. $doc.trigger('spa:closeloader');
  142. if (res.success) {
  143. var hasMore = true;
  144. if (res.current_page >= res.sum_page) {
  145. hasMore = false;
  146. }
  147. renderReviewTemplate(res.data.comments, hasMore);
  148. cachePageData.reviewScroll.refresh();
  149. }
  150. }, false);
  151. }, $view);
  152. dtd.resolve();
  153. },
  154. beforeopen: function (pageData, dtd) {
  155. var $view = this;
  156. var $doc = $(document);
  157. var pushData = pageData.pushData;
  158. //渲染空页面
  159. cachePageData.product = pushData.produc;
  160. cachePageData.needReload = pushData.needReload;
  161. if (cachePageData.needReload) {
  162. cachePageData.needReloadReview = true;
  163. var commentCounts = 0;
  164. var productType = cachePageData.product.type;
  165. $doc.trigger('spa:openloader');
  166. review.getList(productType, function (res) {
  167. if (res.success) {
  168. commentCounts = res.sum_count;
  169. var tpl = template('product/index', {
  170. type: productType,
  171. title: cachePageData.product.name,
  172. // tips: product.getGroupDesc(productType),
  173. picLists: cachePageData.product.pics,
  174. commentCounts: commentCounts,
  175. showNavBar: !config.isWX && !config.isChubao,
  176. // isShowVideo: isShowVideo()
  177. });
  178. $('.spa-page-body', $view).html(tpl);
  179. var iframeW = document.body.clientWidth - 30;
  180. $('#iframe-service-introduce', $view).height(Math.ceil(iframeW * 360 / 640));
  181. // setTimeout(function () {
  182. // cachePageData.scroll = new IScroll('#productDescScroll');
  183. // }, 700);
  184. $doc.trigger('spa:closeloader');
  185. }
  186. }, false);
  187. }
  188. dtd.resolve();
  189. }
  190. }
  191. });