home.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. define(['$', 'template', 'IScroll', 'product', 'user', 'native', 'config'], function ($, template, IScroll, product, user, native, config) {
  2. var products;
  3. /*
  4. * 先定义一些模块内用到的function
  5. */
  6. function back(event) {
  7. event.preventDefault();
  8. native.back();
  9. }
  10. /*
  11. * 模块结构:5部分。
  12. * title:题目。
  13. * content:不知道是什么,似乎从没用过。
  14. * 以下可以当作生命周期回调,虽然并不清楚是什么时候回调的……
  15. * init:根据上一个页面传来的pageData初始化本页数据,生成页面,绑定事件。
  16. * beforeopen:接收上一个页面传来的数据、有需要的话重置数据
  17. * afteropen:做一些网络请求。
  18. * beforeclose:
  19. */
  20. return {
  21. title: '壹管家上门服务',
  22. body: '',
  23. init: function (pageData, dtd) {
  24. /* this是什么? */
  25. var $view = this;
  26. var $doc = $(document);
  27. /* 定义按钮事件。
  28. * 为什么不是$(selector).onclick(function)呢?
  29. */
  30. //返回
  31. $.newTouch('.back-button', function (event) {
  32. back.call(this, event);
  33. }, $view);
  34. $view.on('tapBackButton', function (event) {
  35. back.call(this, event);
  36. });
  37. //客服电话
  38. $.newTouch('.service-telephone', function (event) {
  39. event.preventDefault();
  40. native.call('4000328170');
  41. }, $view);
  42. /* 点击产品列表的某一项 */
  43. $.newTouch('.btn-product', function (event) {
  44. event.preventDefault();
  45. var type = $(this).attr('data-product-type');
  46. goProductPage(type);
  47. }, $view);
  48. /* 点击标签 */
  49. $.newTouch('.btn-product-group', function (event) {
  50. event.preventDefault();
  51. if ($(this).hasClass('global-msg-active')) return;
  52. $(this).addClass('global-msg-active').siblings().removeClass('global-msg-active');
  53. var index = $(this).attr('data-group-index');
  54. switch (index){
  55. case '0':
  56. $('#list0').show().siblings().hide();
  57. break;
  58. case '1':
  59. $('#list1').show().siblings().hide();
  60. break;
  61. case '2':
  62. $('#list2').show().siblings().hide();
  63. break;
  64. case '3':
  65. $('#list3').show().siblings().hide();
  66. break;
  67. }
  68. }, $view);
  69. // 我的预约
  70. $.newTouch('.btn-action-my-order', function (event) {
  71. event.preventDefault();
  72. user.checkLogin(function () {
  73. $doc.trigger('spa:navigate', {
  74. hash: 'myOrder/1',
  75. pushData: {
  76. needReload: true
  77. }
  78. });
  79. });
  80. }, $view);
  81. // 优惠券
  82. $.newTouch('.btn-action-coupon', function (event) {
  83. event.preventDefault();
  84. user.checkLogin(function () {
  85. $doc.trigger('spa:navigate', {
  86. hash: 'myCoupon'
  87. });
  88. });
  89. }, $view);
  90. // 招聘
  91. $.newTouch('.btn-action-hire', function () {
  92. event.preventDefault();
  93. $doc.trigger('spa:navigate', {
  94. hash: 'hire'
  95. });
  96. }, $view);
  97. /* 定义按钮事件结束。*/
  98. /* 不知道什么意思。*/
  99. dtd.resolve();
  100. /* 跳转到填写订单页面。*/
  101. function goProductPage(type) {
  102. /* 如果没登陆会跳转到登录。这个function参数是登陆成功的回调 */
  103. user.checkLogin(function () {
  104. /* 从products中找出type相同的product传递给placeOrder页面 */
  105. var x;
  106. for (x in products) {
  107. if (type == products[x].type)
  108. /*
  109. * 这个写法是SPA路由框架规定的。
  110. * $(selector).trigger(event, params)是jQuery的:触发被选元素上的指定事件
  111. */
  112. $doc.trigger('spa:navigate', {
  113. hash: 'placeOrder',
  114. pushData: {
  115. product: products[x],
  116. needReset: true
  117. }
  118. });
  119. }
  120. /* 预期字段不足 先清除本地数据
  121. if (!user['productVisit'][13]) {
  122. localStorage.removeItem('user_productVisit');
  123. localStorage.removeItem('user_productVisit-time');
  124. user['productVisit'][13] = {
  125. visited: false
  126. }
  127. }
  128. 判断是否是第一次看这个类型。如果不是的话跳转到placeOrder页面
  129. if (user['productVisit'][type]['visited']) {
  130. } else {
  131. 如果是的话跳转到product页面
  132. $doc.trigger('spa:navigate', {
  133. hash: 'product',
  134. pushData: {
  135. type: type,
  136. needReload: true,
  137. fromHome: true
  138. }
  139. });
  140. 并把这个类别的visit属性设置为true
  141. user.productVisit[type].visited = true;
  142. user.setCache('productVisit');
  143. } */
  144. });
  145. }
  146. /* 跳转到coming页面。
  147. function goComing(type) {
  148. user.checkLogin(function () {
  149. $doc.trigger('spa:navigate', {
  150. hash: 'coming',
  151. pushData: {
  152. productType: type
  153. }
  154. });
  155. });
  156. }*/
  157. /* 不知道这是干什么。离线显示一张图片?
  158. if (!user.activities['visited_offservice0126']) {
  159. // showActivity();
  160. }
  161. function showActivity() {
  162. var imgUrl = 'http://wozhua-others.qiniudn.com/20160126-offservice.png';
  163. var d = new Image();
  164. d.src = imgUrl;
  165. d.onload = function () {
  166. $doc.trigger('spa:openpanel', ['activity', {
  167. content: imgUrl
  168. }]);
  169. }
  170. } */
  171. },
  172. beforeopen: function (pageData, dtd) {
  173. localStorage.removeItem('cart_products');
  174. dtd.resolve();
  175. native.switchPopGesture(true);
  176. },
  177. afteropen: function (pageData, dtd) {
  178. var $view = this;
  179. var $doc = $(document);
  180. /* 如果需要重新加载,就请求服务列表。 */
  181. if (!pageData.pushData.dontNeedReload) {
  182. $doc.trigger('spa:openloader');
  183. product.getListAll(user.id, function (res) {
  184. $doc.trigger('spa:closeloader');
  185. products = res.data.products;
  186. if (!products || !products.length) return;
  187. // 把products的desc字段转为对象
  188. var x;
  189. for (x in products) {
  190. products[x].desc = JSON.parse(products[x].desc);
  191. }
  192. var a = products.slice(0, 2);
  193. var b = products.slice(2, 4);
  194. var c = products.slice(4, 6);
  195. var d = products.slice(6, 8);
  196. /*
  197. * tmodjs:
  198. * 使用模版语法把数据填到html文件,生成一个js文件。
  199. * var tpl = template(html文件路径,数据)
  200. */
  201. var tpl = template('home/index', {
  202. showNavBar: !config.isWX && !config.isChubao,
  203. productsa: products,
  204. productsb: b,
  205. productsc: c,
  206. productsd: d
  207. });
  208. /*
  209. * jQuery:
  210. * 提供一个html元素到js变量的映射,和findViewById一个作用。
  211. * $(selector).???(xxx)
  212. * 其中selector是选择器,对应html的元素、类、id等
  213. * ???是jQuery定义的事件
  214. * xxx是参数,具体是什么取决于事件
  215. *
  216. * 这句的意思是,选取class=".spa-page-body"的元素,把tpl插入其中
  217. */
  218. $('.spa-page-body', $view).html(tpl);
  219. /* 建立IScroll */
  220. setTimeout(function () {
  221. pageData.scroll = new IScroll('#homeScroll');
  222. }, 200);
  223. });
  224. }
  225. /* 判断用户是否有优惠卷,如果有就请求优惠卷列表。 */
  226. if (!user.isCheck.couponCheck) {
  227. user.getCouponList(user.id, function (res) {
  228. if (res.success) {
  229. user.isCheck['couponCheck'] = true;
  230. user.setCache('isCheck');
  231. }
  232. });
  233. }
  234. /* 又是这个。不知道什么玩意…… */
  235. dtd.resolve();
  236. //强制设置首页的上一页是空的,后面再调整框架
  237. pageData.prevPage = $('.spa-page-empty');
  238. },
  239. beforeclose: function (pageData, dtd) {
  240. dtd.resolve();
  241. native.switchPopGesture(false);
  242. }
  243. }
  244. })