Jelajahi Sumber

优化页面跳转

洪海涛 8 tahun lalu
induk
melakukan
79bbc556b0

+ 0 - 2
www/webapp/o2o/build.js

@@ -11,7 +11,6 @@
 		include: [
 			'ratchet',
 			'pageHome',
-			'pageBargain',
 			'pageHelp',
 			'pageAbout',
 			'pageRecharge',
@@ -19,7 +18,6 @@
 			'pageSecondary',
 			'pageHomestay',
 			'pageHomeenterprise',
-			'pageExtension',
 			'pageProduct',
 			'pagePlaceOrder',
 			'pagePicker',

+ 0 - 2
www/webapp/o2o/dist/js/build.txt

@@ -21,7 +21,6 @@ build/template.js
 IScroll.js
 page/home.js
 model/recharge.js
-page/bargain.js
 page/help.js
 page/about.js
 page/rechargee.js
@@ -30,7 +29,6 @@ page/mine.js
 page/secondary.js
 page/homestay.js
 page/homeenterprise.js
-page/extension.js
 model/cart.js
 page/product.js
 page/placeOrder.js

File diff ditekan karena terlalu besar
+ 0 - 0
www/webapp/o2o/dist/js/build/template.js


File diff ditekan karena terlalu besar
+ 0 - 0
www/webapp/o2o/dist/js/main.js


+ 0 - 1
www/webapp/o2o/dist/js/page/extension.js

@@ -1 +0,0 @@
-define(["$","template","IScroll","recharge","native","config","user","product"],function(e,t,n,r,i,s,o,u){function a(t){t.preventDefault(),e(document).trigger("spa:navigate",{hash:"recharge",pushData:{dontNeedReload:!0}})}return{title:"双十一活动",body:"",init:function(t,n){var r=this,i=e(document);r.on("swipeRight",function(e){a.call(this,e)}),e.newTouch(".back-button",function(e){a.call(this,e)},r),r.on("tapBackButton",function(e){a.call(this,e)}),e.newTouch(".btn-appliances",function(t){t.preventDefault();var n=parseInt(e(this).attr("data-product-type"));i.trigger("spa:navigate",{hash:"placeOrder",pushData:{product:u.allList[n-1],needReset:!0}})},r),e.newTouch(".btn-home-day",function(e){e.preventDefault(),i.trigger("spa:navigate",{hash:"activity-day",pushData:{needReset:!0}})},r),e.newTouch(".btn-banner-coupon",function(e){e.preventDefault(),i.trigger("spa:navigate",{hash:"myCoupon",pushData:{needReload:!0}})},r),e.newTouch(".btn-action-logo",function(e){e.preventDefault(),i.trigger("spa:navigate",{hash:"im",pushData:{needReset:!0}})},r),e.newTouch(".btn-banner-recharge",function(e){e.preventDefault(),i.trigger("spa:navigate",{hash:"recharge",pushData:{needReload:!0}})},r),e.newTouch(".btn-action-my-order",function(e){e.preventDefault(),i.trigger("spa:navigate",{hash:"",pushData:{needReset:!0}})},r),e.newTouch(".btn-action-coupon",function(e){e.preventDefault(),o.checkLogin(function(){i.trigger("spa:navigate",{hash:"mine",pushData:{needReset:!0}})})},r),n.resolve()},beforeopen:function(e,t){t.resolve()},afteropen:function(i,o){var u=this,a=e(document);i.pushData.dontNeedReload||(a.trigger("spa:openloader"),r.getRechargeList(function(r){a.trigger("spa:closeloader");if(r.success){var o=t("activities/text",{showNavBar:!s.isWX,recharges:r.data});e(".spa-page-body",u).html(o),setTimeout(function(){i.scroll=new n("#activitiesTextScroll")},500)}})),o.resolve()},beforeclose:function(e,t){t.resolve()}}});

File diff ditekan karena terlalu besar
+ 0 - 0
www/webapp/o2o/dist/js/page/placeOrder.js


+ 1 - 1
www/webapp/o2o/dist/js/page/secondary.js

@@ -1 +1 @@
-define(["$","template","IScroll","user","product","native","config","address"],function(e,t,n,r,i,s,o,u){function a(t){t.preventDefault(),e(document).trigger("spa:navigate",{hash:"",pushData:{dontNeedReload:!0}})}return{title:"家庭保洁",body:"",init:function(t,n){var s=this,o=e(document);s.on("swipeRight",function(e){a.call(this,e)}),e.newTouch(".back-button",function(e){a.call(this,e)},s),s.on("tapBackButton",function(e){a.call(this,e)}),e.newTouch(".btn-product",function(t){t.preventDefault();var n=parseInt(e(this).attr("data-product-type"));o.trigger("spa:navigate",{hash:"placeOrder",pushData:{product:i.allList[n-1],needReset:!0,backHash:""}})},s),e.newTouch(".btn-action-logo",function(e){e.preventDefault(),window.location.href="/index.php?r=o2o/advisory/im"},s),e.newTouch(".btn-action-my-order",function(){event.preventDefault(),o.trigger("spa:navigate",{hash:"",pushData:{needReset:!0}})},s),e.newTouch(".btn-action-coupon",function(e){e.preventDefault(),r.checkLogin(function(){o.trigger("spa:navigate",{hash:"mine",pushData:{needReset:!0}})})},s),n.resolve()},beforeopen:function(e,t){t.resolve()},afteropen:function(r,i){var s=this,u=e(document);if(r.pushData&&r.pushData.needReset){var a=t("secondary/index",{showNavBar:!o.isWX});e(".spa-page-body",s).html(a),setTimeout(function(){r.scroll=new n("#secondaryScroll")},500)}i.resolve()},beforeclose:function(e,t){t.resolve()}}});
+define(["$","template","IScroll","user","product","native","config","address"],function(e,t,n,r,i,s,o,u){function a(t){t.preventDefault(),e(document).trigger("spa:navigate",{hash:"",pushData:{dontNeedReload:!0}})}return{title:"家庭保洁",body:"",init:function(t,n){var s=this,o=e(document);s.on("swipeRight",function(e){a.call(this,e)}),e.newTouch(".back-button",function(e){a.call(this,e)},s),s.on("tapBackButton",function(e){a.call(this,e)}),e.newTouch(".btn-product",function(t){t.preventDefault();var n=parseInt(e(this).attr("data-product-type"));o.trigger("spa:navigate",{hash:"placeOrder",pushData:{product:i.allList[n-1],needReset:!0,backHash:"secondary"}})},s),e.newTouch(".btn-action-logo",function(e){e.preventDefault(),window.location.href="/index.php?r=o2o/advisory/im"},s),e.newTouch(".btn-action-my-order",function(){event.preventDefault(),o.trigger("spa:navigate",{hash:"",pushData:{needReset:!0}})},s),e.newTouch(".btn-action-coupon",function(e){e.preventDefault(),r.checkLogin(function(){o.trigger("spa:navigate",{hash:"mine",pushData:{needReset:!0}})})},s),n.resolve()},beforeopen:function(e,t){t.resolve()},afteropen:function(r,i){var s=this,u=e(document);if(r.pushData&&r.pushData.needReset){var a=t("secondary/index",{showNavBar:!o.isWX});e(".spa-page-body",s).html(a),setTimeout(function(){r.scroll=new n("#secondaryScroll")},500)}i.resolve()},beforeclose:function(e,t){t.resolve()}}});

File diff ditekan karena terlalu besar
+ 0 - 0
www/webapp/o2o/js/build/template.js


+ 644 - 671
www/webapp/o2o/js/main.js

@@ -1,678 +1,651 @@
 require.config({
-	urlArgs: 'v=' + (new Date()).getTime(),
-	waitSeconds: 0,
-	paths: {
-		zepto: '../../common/js/zepto.min',
-		wx: '../../common/js/jweixin-1.0.0',
-		ctk: '../../common/js/ctk-1.0.0',
-		pingpp: '../../common/js/pingpp',
-		spa: '../../common/js/spa',
-		IScroll: '../../framework/iscroll5/iscroll-probe',
-		ratchet: '../../framework/ratchet-2.0.2/dist/js/ratchet.base',
-		$: '../../common/js/jq_extend',
-		autosize: '../../common/js/autosize',
-		config: '../../common/js/config',
-		helper: '../../common/js/helper',
-		native: '../../common/js/native',
-		storage: '../../common/js/storage',
-		base: '../../common/js/base',
-		template: './build/template',
-		api: './api',
-		bdmapapi: '../../common/js/bdmapapi',
-		BMap: 'http://api.map.baidu.com/getscript?v=2.0&ak=B349f0b32ef6e78b2e678f45cb9fddaf&services=&t=20160310104956',
-		//model
-		user: './model/user',
-		product: './model/product',
-		cart: './model/cart',
-		order: './model/order',
-		review: './model/review',
-		address: './model/address',
-		recharge: './model/recharge',
-		//page
-		pageHome: './page/home',
-		pageRecharge: './page/rechargee',
-		pageHelp: './page/help',
-		pageBargain: './page/bargain',
-		pageExtension:'./page/extension',
-		pageHomestay: './page/homestay',
-		pageHomeenterprise: './page/homeenterprise',
-		pageAbout: './page/about',
-		pageProduct: './page/product',
-		pageProductInfo: './page/productInfo',
-		pageDesc: './page/desc',
-		pagePlaceOrder: './page/placeOrder',
-		pagePicker: './page/picker',
-		pagePay: './page/pay',
-		pageAppendPay: './page/appendPay',
-		pageMyOrder: './page/myOrder',
-		pageMyOrderDetail: './page/myOrderDetail',
-		pageMyCoupon: './page/myCoupon',
-		pageOrderDone: './page/orderDone',
-		pageSuccess: './page/success',
-		pageAgreement: './page/agreement',
-		pageAddressList: './page/address/addressList',
-		pageAddressAdd: './page/address/addressAdd',
-		pageAddressDetail: './page/address/addressDetail',
-		pageAddressPoisiton: './page/address/addressPoi',
-		pageHire: './page/hire',
-		pageComing: './page/coming',
-		pageActivityCat: './page/activities/day',
-		pageActivityText: './page/activities/text',
-		pageActivityRule: './page/activities/rule',
-		
-		pageAppend: './page/append',
-		pageRefund: './page/refund',
-		pageRefundSuccess: './page/refundSuccess',
-		pageBeautician: './page/beautician',
-		pageBeauticianDetail: './page/beauticianDetail',
-		pageMine: './page/mine',
-		pageSecondary: './page/secondary',
-		//panel
-		panelAlert: './panel/alert',
-		panelActionSheet: './panel/actionSheet',
-		// panelAddressAction: './panel/addressAction',
-		panelDataPicker: './panel/dataPicker',
-		panelProductOption: './panel/productOption',
-		panelPostReview: './panel/postReview',
-		panelActivity: './panel/activity'
-	},
-	shim: {
-		zepto: {
-			exports: '$'
-		},
-		IScroll: {
-			exports: 'IScroll'
-		},
-		BMap: {
-			exports: 'BMap'
-		}
-
-	}
+    urlArgs: 'v=' + (new Date()).getTime(),
+    waitSeconds: 0,
+    paths: {
+        zepto: '../../common/js/zepto.min',
+        wx: '../../common/js/jweixin-1.0.0',
+        ctk: '../../common/js/ctk-1.0.0',
+        pingpp: '../../common/js/pingpp',
+        spa: '../../common/js/spa',
+        IScroll: '../../framework/iscroll5/iscroll-probe',
+        ratchet: '../../framework/ratchet-2.0.2/dist/js/ratchet.base',
+        $: '../../common/js/jq_extend',
+        autosize: '../../common/js/autosize',
+        config: '../../common/js/config',
+        helper: '../../common/js/helper',
+        native: '../../common/js/native',
+        storage: '../../common/js/storage',
+        base: '../../common/js/base',
+        template: './build/template',
+        api: './api',
+        bdmapapi: '../../common/js/bdmapapi',
+        BMap: 'http://api.map.baidu.com/getscript?v=2.0&ak=B349f0b32ef6e78b2e678f45cb9fddaf&services=&t=20160310104956',
+        //model
+        user: './model/user',
+        product: './model/product',
+        cart: './model/cart',
+        order: './model/order',
+        review: './model/review',
+        address: './model/address',
+        recharge: './model/recharge',
+        //page
+        pageHome: './page/home',
+        pageRecharge: './page/rechargee',
+        pageHelp: './page/help',
+        pageHomestay: './page/homestay',
+        pageHomeenterprise: './page/homeenterprise',
+        pageAbout: './page/about',
+        pageProduct: './page/product',
+        pageProductInfo: './page/productInfo',
+        pageDesc: './page/desc',
+        pagePlaceOrder: './page/placeOrder',
+        pagePicker: './page/picker',
+        pagePay: './page/pay',
+        pageAppendPay: './page/appendPay',
+        pageMyOrder: './page/myOrder',
+        pageMyOrderDetail: './page/myOrderDetail',
+        pageMyCoupon: './page/myCoupon',
+        pageOrderDone: './page/orderDone',
+        pageSuccess: './page/success',
+        pageAgreement: './page/agreement',
+        pageAddressList: './page/address/addressList',
+        pageAddressAdd: './page/address/addressAdd',
+        pageAddressDetail: './page/address/addressDetail',
+        pageAddressPoisiton: './page/address/addressPoi',
+        pageHire: './page/hire',
+        pageComing: './page/coming',
+        pageActivityCat: './page/activities/day',
+        pageActivityText: './page/activities/text',
+        pageActivityRule: './page/activities/rule',
+
+        pageAppend: './page/append',
+        pageRefund: './page/refund',
+        pageRefundSuccess: './page/refundSuccess',
+        pageBeautician: './page/beautician',
+        pageBeauticianDetail: './page/beauticianDetail',
+        pageMine: './page/mine',
+        pageSecondary: './page/secondary',
+        //panel
+        panelAlert: './panel/alert',
+        panelActionSheet: './panel/actionSheet',
+        // panelAddressAction: './panel/addressAction',
+        panelDataPicker: './panel/dataPicker',
+        panelProductOption: './panel/productOption',
+        panelPostReview: './panel/postReview',
+        panelActivity: './panel/activity'
+    },
+    shim: {
+        zepto: {
+            exports: '$'
+        },
+        IScroll: {
+            exports: 'IScroll'
+        },
+        BMap: {
+            exports: 'BMap'
+        }
+
+    }
 });
 require(['$', 'spa', 'native', 'helper', 'ratchet', 'config', 'user'], function ($, spa, native, helper, ratchet, config, user) {
-	var $doc = $(document);
-
-	// 首页
-	var pageHome = {
-		route: '',
-		classname: 'home',
-		animate: 'fadeIn',
-		view: function () {
-			var $page = this;
-			requirejs(['pageHome'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-	
-	//双十一支付
-	var pageBargain = {
-		route: 'bargain',
-		classname: 'bargain',
-		animate: 'fadeIn',
-		view: function () {
-			var $page = this;
-			requirejs(['pageBargain'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-	//11-7活动
-	var pageExtension={
-		route:"extension",
-		classname:'extension',
-		animate:'fadeIn',
-		view:function () {
-			var $page=this;
-			requirejs(['pageExtension'],function (viewData) {
-				$doc.trigger('spa:initpage',[$page,viewData])
-			})
-		}
-	};
-	
-	//商品页
-	var pageProduct = {
-		route: 'product',
-		classname: 'product',
-		animate: 'slideInUp',
-		view: function () {
-			var $page = this;
-			requirejs(['pageProduct'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-	//充值卡
-	var pageRecharge = {
-		route: 'recharge',
-		classname: 'recharge',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageRecharge'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-
-	//个人中心
-	var pageMine = {
-		route: 'mine',
-		classname: 'mine',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageMine'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-	//家庭保洁
-	var pageSecondary = {
-		route: 'secondary',
-		classname: 'secondary',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageSecondary'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-	//民宿保洁
-	var pageHomestay = {
-		route: 'homestay',
-		classname: 'homestay',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageHomestay'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-	//企业服务
-	var pageHomeenterprise = {
-		route: 'homeenterprise',
-		classname: 'homeenterprise',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageHomeenterprise'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-	//商品提示信息
-	var pageProductInfo = {
-		route: 'product-info/:type',
-		classname: 'product-info',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageProductInfo'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-
-	//商品介绍页
-	var pageDesc = {
-		route: 'desc',
-		classname: 'desc',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageDesc'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-
-	//订单页
-	var pagePlaceOrder = {
-		route: 'placeOrder',
-		classname: 'place-order',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pagePlaceOrder'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-
-	//选择列表页
-	var pagePicker = {
-		route: 'picker',
-		classname: 'picker',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pagePicker'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-
-	//支付页面
-	var pagePay = {
-		route: 'pay',
-		classname: 'pay',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pagePay'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-
-	// 追加订单支付页面
-	var pageAppendPay = {
-		route: 'append-pay',
-		classname: 'append-pay',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageAppendPay'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-
-	//支付成功
-	var pagePaySuccess = {
-		route: 'paySuccess',
-		classname: 'pay-success',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageSuccess'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	//我的订单页
-	var pageMyOrder = {
-		route: 'myOrder(/:type)',
-		classname: 'my-order',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageMyOrder'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	var pageMyOrderDetail = {
-		route: 'OrderDetail/:id',
-		classname: 'my-order-detail',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageMyOrderDetail'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	//我的优惠券
-	var pageMyCoupon = {
-		route: 'myCoupon',
-		classname: 'my-coupon',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageMyCoupon'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	//用户服务协议
-	var pageAgreement = {
-		route: 'agreement',
-		classname: 'agreement',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageAgreement'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	//地址列表
-	var pageAddressList = {
-		route: 'addressList',
-		classname: 'address-list',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageAddressList'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	//地址添加
-	var pageAddressAdd = {
-		route: 'addressAdd',
-		classname: 'address-add',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageAddressAdd'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	//地址详情
-	var pageAddressDetail = {
-		route: 'addressDetail',
-		classname: 'address-detail',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageAddressDetail'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	//地址定位
-	var pageAddressPoisiton = {
-		route: 'addressPoisiton',
-		classname: 'address-poisition',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageAddressPoisiton'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	//招聘
-	var pageHire = {
-		route: 'hire',
-		classname: 'hire',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageHire'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	// 未上线
-	var pageComing = {
-		route: 'coming',
-		classname: 'coming',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageComing'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	// 活动
-	var pageActivityCat = {
-		route: 'activity-day',
-		classname: 'activities-day',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageActivityCat'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-	// 活动
-	var pageActivityText = {
-		route: 'activity-text',
-		classname: 'activity-text',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageActivityText'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-//活动规则
-	var pageActivityRule = {
-		route: 'activity-rule',
-		classname: 'activity-rule',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageActivityRule'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-	// 追加服务
-	var pageAppend = {
-		route: 'append',
-		classname: 'append',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageAppend'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	// 申请退款
-	var pageRefund = {
-		route: 'refund',
-		classname: 'refund',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageRefund'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	// 申请成功
-	var pageRefundSuccess = {
-		route: 'refund-success',
-		classname: 'refund-success',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageRefundSuccess'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			});
-		}
-	};
-
-	// 订单确认完成
-	var pageOrderDone = {
-		route: 'order-done',
-		classname: 'order-done',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageOrderDone'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData])
-			})
-		}
-	};
-
-	var pageBeautician = {
-		route: 'beautician',
-		classname: 'beautician',
-		animate: 'pushInLeft',
-		view: function () {
-			var $page = this;
-			requirejs(['pageBeautician'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData]);
-			})
-		}
-	};
-
-	var pageBeauticianDetail = {
-		route: 'beautician-detail',
-		classname: 'beautician-detail',
-		animate: 'slideInUp',
-		view: function () {
-			var $page = this;
-			requirejs(['pageBeauticianDetail'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData]);
-			})
-		}
-	};
-
-	var pageHelp = {
-		route: 'help',
-		classname: 'help',
-		animate: 'slideInUp',
-		view: function () {
-			var $page = this;
-			requirejs(['pageHelp'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData]);
-			})
-		}
-	};
-
-	var pageAbout = {
-		route: 'about',
-		classname: 'about',
-		animate: 'slideInUp',
-		view: function () {
-			var $page = this;
-			requirejs(['pageAbout'], function (viewData) {
-				$doc.trigger('spa:initpage', [$page, viewData]);
-			})
-		}
-	};
-
-	$doc.trigger('spa:route', [pageHome, pageRecharge, pageAbout, pageHelp, pageMine, pageSecondary, pageHomestay, pageBargain,pageExtension,pageHomeenterprise, pageProduct, pageProductInfo, pageDesc, pagePlaceOrder, pagePicker, pagePay, pageAppendPay, pagePaySuccess, pageMyOrder, pageMyOrderDetail, pageMyCoupon, pageAgreement, pageAddressList, pageAddressAdd, pageAddressDetail, pageAddressPoisiton, pageHire, pageComing, pageActivityCat,pageActivityText,pageActivityRule, pageAppend, pageRefund, pageRefundSuccess, pageOrderDone, pageBeautician, pageBeauticianDetail]);
-
-	var panelAlert = {
-		id: 'simpleAlert',
-		classname: 'alert',
-		animate: 'zoomIn',
-		view: function () {
-			var $panel = this;
-			requirejs(['panelAlert'], function (viewData) {
-				$doc.trigger('spa:initpanel', [$panel, viewData]);
-			})
-		}
-	};
-
-	var panelActionSheet = {
-		id: 'actionSheet',
-		classname: 'action-sheet',
-		animate: 'overlayInUp',
-		view: function () {
-			var $panel = this;
-			requirejs(['panelActionSheet'], function (viewData) {
-				$doc.trigger('spa:initpanel', [$panel, viewData]);
-			})
-		}
-	};
-
-	var panelDataPicker = {
-		id: 'dataPicker',
-		classname: 'data-picker',
-		animate: 'overlayInUp',
-		view: function () {
-			var $panel = this;
-			requirejs(['panelDataPicker'], function (viewData) {
-				$doc.trigger('spa:initpanel', [$panel, viewData]);
-			})
-		}
-	};
-
-	var panelProductOption = {
-		id: 'productOption',
-		classname: 'product-option',
-		animate: 'overlayInUp',
-		view: function () {
-			var $panel = this;
-			requirejs(['panelProductOption'], function (viewData) {
-				$doc.trigger('spa:initpanel', [$panel, viewData]);
-			})
-		}
-	};
-
-	var panelPostReview = {
-		id: 'postReview',
-		classname: 'post-review',
-		animate: 'overlayInUp',
-		view: function () {
-			var $panel = this;
-			requirejs(['panelPostReview'], function (viewData) {
-				$doc.trigger('spa:initpanel', [$panel, viewData]);
-			})
-		}
-	};
-
-	var panelActivity = {
-		id: 'activity',
-		classname: 'activity',
-		animate: 'overlayInUp',
-		view: function () {
-			var $panel = this;
-			requirejs(['panelActivity'], function (viewData) {
-				$doc.trigger('spa:initpanel', [$panel, viewData]);
-			})
-		}
-	};
-
-	$doc.trigger('spa:panel', [panelAlert, panelActionSheet, panelDataPicker, panelProductOption, panelPostReview, panelActivity]);
-
-	$(function () {
-		if (config.isWX) {
-			//微信 去掉顶部导航栏
-			var styles = ".content {top: 0;}";
-			helper.includeStyleElement(styles, 'ios7');
-
-			//微信过来的登录后再启动
-			user.getUserInfo(function () {
-				$doc.trigger('spa:boot');
-			});
-
-		} else if (config.isAndroid || config.isIOS) {
-			//注册事件
-			native.delegateBackButton(true);
-
-			//安卓返回按钮
-			$(document).on('tapBackButton', function () {
-				$.spa.getCurPage().trigger('tapBackButton');
-			});
-
-			//ios7特殊样式 全屏幕往下移动20px
-			helper.osProxy({
-				ios: function () {
-					var styles = ".bar-nav {height: 64px;padding-top: 20px;}\
+    var $doc = $(document);
+
+    // 首页
+    var pageHome = {
+        route: '',
+        classname: 'home',
+        animate: 'fadeIn',
+        view: function () {
+            var $page = this;
+            requirejs(['pageHome'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+    //个人中心
+    var pageMine = {
+        route: 'mine',
+        classname: 'mine',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageMine'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+    //家庭保洁
+    var pageSecondary = {
+        route: 'secondary',
+        classname: 'secondary',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageSecondary'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+    //民宿保洁
+    var pageHomestay = {
+        route: 'homestay',
+        classname: 'homestay',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageHomestay'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+    //企业服务
+    var pageHomeenterprise = {
+        route: 'homeenterprise',
+        classname: 'homeenterprise',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageHomeenterprise'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+    //商品页
+    var pageProduct = {
+        route: 'product',
+        classname: 'product',
+        animate: 'slideInUp',
+        view: function () {
+            var $page = this;
+            requirejs(['pageProduct'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+    //充值卡
+    var pageRecharge = {
+        route: 'recharge',
+        classname: 'recharge',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageRecharge'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+    // 活动协议
+    var pageActivityText = {
+        route: 'activity-text',
+        classname: 'activity-text',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageActivityText'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+    //活动规则
+    var pageActivityRule = {
+        route: 'activity-rule',
+        classname: 'activity-rule',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageActivityRule'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+   
+    //商品提示信息
+    var pageProductInfo = {
+        route: 'product-info/:type',
+        classname: 'product-info',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageProductInfo'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+
+    //商品介绍页
+    var pageDesc = {
+        route: 'desc',
+        classname: 'desc',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageDesc'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+
+    //订单页
+    var pagePlaceOrder = {
+        route: 'placeOrder',
+        classname: 'place-order',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pagePlaceOrder'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+
+    //选择列表页
+    var pagePicker = {
+        route: 'picker',
+        classname: 'picker',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pagePicker'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+
+    //支付页面
+    var pagePay = {
+        route: 'pay',
+        classname: 'pay',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pagePay'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+
+    // 追加订单支付页面
+    var pageAppendPay = {
+        route: 'append-pay',
+        classname: 'append-pay',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageAppendPay'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+
+    //支付成功
+    var pagePaySuccess = {
+        route: 'paySuccess',
+        classname: 'pay-success',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageSuccess'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    //我的订单页
+    var pageMyOrder = {
+        route: 'myOrder(/:type)',
+        classname: 'my-order',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageMyOrder'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    var pageMyOrderDetail = {
+        route: 'OrderDetail/:id',
+        classname: 'my-order-detail',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageMyOrderDetail'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    //我的优惠券
+    var pageMyCoupon = {
+        route: 'myCoupon',
+        classname: 'my-coupon',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageMyCoupon'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    //用户服务协议
+    var pageAgreement = {
+        route: 'agreement',
+        classname: 'agreement',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageAgreement'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    //地址列表
+    var pageAddressList = {
+        route: 'addressList',
+        classname: 'address-list',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageAddressList'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    //地址添加
+    var pageAddressAdd = {
+        route: 'addressAdd',
+        classname: 'address-add',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageAddressAdd'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    //地址详情
+    var pageAddressDetail = {
+        route: 'addressDetail',
+        classname: 'address-detail',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageAddressDetail'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    //地址定位
+    var pageAddressPoisiton = {
+        route: 'addressPoisiton',
+        classname: 'address-poisition',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageAddressPoisiton'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    //招聘
+    var pageHire = {
+        route: 'hire',
+        classname: 'hire',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageHire'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    // 未上线
+    var pageComing = {
+        route: 'coming',
+        classname: 'coming',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageComing'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    // 活动
+    var pageActivityCat = {
+        route: 'activity-day',
+        classname: 'activities-day',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageActivityCat'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    // 追加服务
+    var pageAppend = {
+        route: 'append',
+        classname: 'append',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageAppend'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    // 申请退款
+    var pageRefund = {
+        route: 'refund',
+        classname: 'refund',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageRefund'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    // 申请成功
+    var pageRefundSuccess = {
+        route: 'refund-success',
+        classname: 'refund-success',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageRefundSuccess'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            });
+        }
+    };
+
+    // 订单确认完成
+    var pageOrderDone = {
+        route: 'order-done',
+        classname: 'order-done',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageOrderDone'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData])
+            })
+        }
+    };
+
+    var pageBeautician = {
+        route: 'beautician',
+        classname: 'beautician',
+        animate: 'pushInLeft',
+        view: function () {
+            var $page = this;
+            requirejs(['pageBeautician'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData]);
+            })
+        }
+    };
+
+    var pageBeauticianDetail = {
+        route: 'beautician-detail',
+        classname: 'beautician-detail',
+        animate: 'slideInUp',
+        view: function () {
+            var $page = this;
+            requirejs(['pageBeauticianDetail'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData]);
+            })
+        }
+    };
+
+    var pageHelp = {
+        route: 'help',
+        classname: 'help',
+        animate: 'slideInUp',
+        view: function () {
+            var $page = this;
+            requirejs(['pageHelp'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData]);
+            })
+        }
+    };
+
+    var pageAbout = {
+        route: 'about',
+        classname: 'about',
+        animate: 'slideInUp',
+        view: function () {
+            var $page = this;
+            requirejs(['pageAbout'], function (viewData) {
+                $doc.trigger('spa:initpage', [$page, viewData]);
+            })
+        }
+    };
+
+    $doc.trigger('spa:route', [pageHome, pageRecharge, pageAbout, pageHelp, pageMine, pageSecondary, pageHomestay, pageHomeenterprise, pageProduct, pageProductInfo, pageDesc, pagePlaceOrder, pagePicker, pagePay, pageAppendPay, pagePaySuccess, pageMyOrder, pageMyOrderDetail, pageMyCoupon, pageAgreement, pageAddressList, pageAddressAdd, pageAddressDetail, pageAddressPoisiton, pageHire, pageComing, pageActivityCat, pageActivityText, pageActivityRule, pageAppend, pageRefund, pageRefundSuccess, pageOrderDone, pageBeautician, pageBeauticianDetail]);
+
+    var panelAlert = {
+        id: 'simpleAlert',
+        classname: 'alert',
+        animate: 'zoomIn',
+        view: function () {
+            var $panel = this;
+            requirejs(['panelAlert'], function (viewData) {
+                $doc.trigger('spa:initpanel', [$panel, viewData]);
+            })
+        }
+    };
+
+    var panelActionSheet = {
+        id: 'actionSheet',
+        classname: 'action-sheet',
+        animate: 'overlayInUp',
+        view: function () {
+            var $panel = this;
+            requirejs(['panelActionSheet'], function (viewData) {
+                $doc.trigger('spa:initpanel', [$panel, viewData]);
+            })
+        }
+    };
+
+    var panelDataPicker = {
+        id: 'dataPicker',
+        classname: 'data-picker',
+        animate: 'overlayInUp',
+        view: function () {
+            var $panel = this;
+            requirejs(['panelDataPicker'], function (viewData) {
+                $doc.trigger('spa:initpanel', [$panel, viewData]);
+            })
+        }
+    };
+
+    var panelProductOption = {
+        id: 'productOption',
+        classname: 'product-option',
+        animate: 'overlayInUp',
+        view: function () {
+            var $panel = this;
+            requirejs(['panelProductOption'], function (viewData) {
+                $doc.trigger('spa:initpanel', [$panel, viewData]);
+            })
+        }
+    };
+
+    var panelPostReview = {
+        id: 'postReview',
+        classname: 'post-review',
+        animate: 'overlayInUp',
+        view: function () {
+            var $panel = this;
+            requirejs(['panelPostReview'], function (viewData) {
+                $doc.trigger('spa:initpanel', [$panel, viewData]);
+            })
+        }
+    };
+
+    var panelActivity = {
+        id: 'activity',
+        classname: 'activity',
+        animate: 'overlayInUp',
+        view: function () {
+            var $panel = this;
+            requirejs(['panelActivity'], function (viewData) {
+                $doc.trigger('spa:initpanel', [$panel, viewData]);
+            })
+        }
+    };
+
+    $doc.trigger('spa:panel', [panelAlert, panelActionSheet, panelDataPicker, panelProductOption, panelPostReview, panelActivity]);
+
+    $(function () {
+        if (config.isWX) {
+            //微信 去掉顶部导航栏
+            var styles = ".content {top: 0;}";
+            helper.includeStyleElement(styles, 'ios7');
+
+            //微信过来的登录后再启动
+            user.getUserInfo(function () {
+                $doc.trigger('spa:boot');
+            });
+
+        } else if (config.isAndroid || config.isIOS) {
+            //注册事件
+            native.delegateBackButton(true);
+
+            //安卓返回按钮
+            $(document).on('tapBackButton', function () {
+                $.spa.getCurPage().trigger('tapBackButton');
+            });
+
+            //ios7特殊样式 全屏幕往下移动20px
+            helper.osProxy({
+                ios: function () {
+                    var styles = ".bar-nav {height: 64px;padding-top: 20px;}\
           .content {top: 64px;}\
           .bar-nav .left-button {padding-top: 20px;}\
           .bar-nav .right-button {padding-top: 20px;}";
-					helper.includeStyleElement(styles, 'ios7');
-				}
-			});
-
-			$doc.trigger('spa:boot');
-		} else if (config.isChubao) {
-			var styles = ".content {top: 0;}";
-			helper.includeStyleElement(styles, 'ios7');
-			$doc.trigger('spa:boot');
-		} else {
-			$doc.trigger('spa:boot');
-		}
-	})
+                    helper.includeStyleElement(styles, 'ios7');
+                }
+            });
+
+            $doc.trigger('spa:boot');
+        } else if (config.isChubao) {
+            var styles = ".content {top: 0;}";
+            helper.includeStyleElement(styles, 'ios7');
+            $doc.trigger('spa:boot');
+        } else {
+            $doc.trigger('spa:boot');
+        }
+    })
 })

+ 0 - 142
www/webapp/o2o/js/page/extension.js

@@ -1,142 +0,0 @@
-define(['$', 'template', 'IScroll', 'recharge', 'native', 'config', 'user', 'product'], function ($, template, IScroll, recharge, native, config, user, product) {
-
-	function back(event) {
-		event.preventDefault();
-		$(document).trigger('spa:navigate', {
-			hash: 'recharge',
-			pushData: {
-				dontNeedReload: true
-			}
-		});
-	}
-
-	return {
-		title: '双十一活动',
-		body: '',
-		init: function (pageData, dtd) {
-			/* this是什么? */
-			var $view = this;
-			var $doc = $(document);
-
-			// 返回
-			$view.on('swipeRight', function (event) {
-				back.call(this, event);
-				// history.go(-1);
-			});
-
-			$.newTouch('.back-button', function (event) {
-				back.call(this, event);
-				// history.go(-1);
-			}, $view);
-
-			$view.on('tapBackButton', function (event) {
-				back.call(this, event);
-				// history.go(-1);
-			});
-			//跳转下单页面
-			$.newTouch('.btn-appliances', function (event) {
-				event.preventDefault();
-				var type = parseInt($(this).attr('data-product-type'));
-				$doc.trigger('spa:navigate', {
-					hash: 'placeOrder',
-					pushData: {
-						product: product.allList[type - 1],
-						needReset: true
-					}
-				});
-			}, $view);
-			// 双十一活动
-			$.newTouch('.btn-home-day', function (event) {
-				event.preventDefault();
-				$doc.trigger('spa:navigate', {
-					hash: 'activity-day',
-					pushData: {
-						needReset: true
-					}
-				});
-			}, $view);
-			//优惠券
-			$.newTouch('.btn-banner-coupon', function (event) {
-				event.preventDefault();
-				$doc.trigger('spa:navigate', {
-					hash: 'myCoupon',
-					pushData: {
-						needReload: true
-					}
-				});
-			}, $view);
-			// im
-			$.newTouch('.btn-action-logo', function (event) {
-				event.preventDefault();
-				$doc.trigger('spa:navigate', {
-					hash: 'im',
-					pushData: {
-						needReset: true
-					}
-				});
-			}, $view);
-			//充值卡
-			$.newTouch('.btn-banner-recharge', function (event) {
-				event.preventDefault();
-				$doc.trigger('spa:navigate', {
-					hash: 'recharge',
-					pushData: {
-						needReload: true
-					}
-				});
-			}, $view);
-			// 首页
-			$.newTouch('.btn-action-my-order', function (event) {
-				event.preventDefault();
-				$doc.trigger('spa:navigate', {
-					hash: '',
-					pushData: {
-						needReset: true
-					}
-				});
-			}, $view);
-			// 个人中心
-			$.newTouch('.btn-action-coupon', function (event) {
-				event.preventDefault();
-				user.checkLogin(function () {
-					$doc.trigger('spa:navigate', {
-						hash: 'mine',
-						pushData: {
-							needReset: true
-						}
-					});
-				});
-			}, $view);
-			dtd.resolve();
-		},
-		beforeopen: function (pageData, dtd) {
-			dtd.resolve();
-		},
-		afteropen: function (pageData, dtd) {
-			var $view = this;
-			var $doc = $(document);
-
-			if (!pageData.pushData.dontNeedReload) {
-				$doc.trigger('spa:openloader');
-				recharge.getRechargeList(function (res) {
-					$doc.trigger('spa:closeloader');
-					if (res.success) {
-						var tpl = template('activities/text', {
-							showNavBar: !config.isWX,
-							recharges: res.data
-						});
-						$('.spa-page-body', $view).html(tpl);
-						setTimeout(function () {
-							pageData.scroll = new IScroll('#activitiesTextScroll');
-						}, 500);
-					}
-				});
-			}
-
-			dtd.resolve();
-		},
-		beforeclose: function (pageData, dtd) {
-			dtd.resolve();
-		}
-	}
-})

+ 953 - 949
www/webapp/o2o/js/page/placeOrder.js

@@ -1,952 +1,956 @@
 define(['$', 'template', 'order', 'native', 'helper', 'user', 'api', 'config', 'address', 'IScroll'], function ($, template, order, native, helper, user, api, config, address, IScroll) {
 
-	/*
-	 * 这里对product和order做一个说明。
-	 * product前台写死。order沿用原模型,但只用其中几个字段。
-	 * 对应关系如下:
-	 * product.id == order.productID :产品ID
-	 * product.type == order.productType :产品类型,约定的数字
-	 * product.price == order.cost :订单原价,当product的extra字段为空
-	 * product.extra.price == order.cost :订单原价,当product的extra字段不为空
-	 * product.type_str == order.serviceName :服务名称
-	 * product.extra.type == order.appendID :服务的额外选项,当product的extra字段不为空
-	 */
-
-	/* 从首页传来的产品数据 */
-	var product;
-
-	/* 软键盘弹出与消失时布局变动。 */
-	function checkScroll(pageData, callback) {
-		if (pageData.scroll) {
-			if (!pageData.scrollHeight) {
-				pageData.scrollHeight = 0;
-			}
-			clearInterval(pageData.scrollCheck);
-			clearTimeout(pageData.scrollCheckAutoCancel);
-			pageData.scrollCheck = setInterval(function () {
-				pageData.scroll.refresh();
-				if ($.isFunction(callback)) {
-					callback();
-				}
-			}, 50);
-
-			pageData.scrollCheckAutoCancel = setTimeout(function () {
-				clearInterval(pageData.scrollCheck);
-			}, 500);
-		}
-	}
-
-	/* 返回上一级 */
-	function back(event) {
-		event.preventDefault();
-		$(document).trigger('spa:navigate', {
-			hash: '',
-			pushData: {
-				dontNeedReload: true
-			}
-		});
-	}
-
-	/* 重置页面时调用,重新生成IScroll */
-	function fixScroll(pageData) {
-		setInterval(function () {
-			if (product.name == "首单日常保洁2小时体验") {
-				$('.selected').css('display', 'none');
-				// $('.show-time-picker').css('display', 'none');
-				// $('.show-coupon-picker').css('display', 'none');
-				// $('.table-link-label').css('display', 'none');
-				// $('.product-pic-o2o').css('display', 'none');
-				// $('.o2o-singles-day').css('display', 'inline');
-			}
-		}, 100);
-		if (pageData.scroll) {
-			pageData.scroll.destroy();
-			pageData.scroll = null;
-		}
-		var placeOrderScroll;
-		setTimeout(function () {
-			pageData.scroll = new IScroll('#placeOrderScroll');
-		}, 700);
-	}
-
-	/* 算账。 */
-	function payCharge($orderCost) {
-		order.payValue = order.cost - order.couponValue;
-		$orderCost.text('¥' + order.payValue);
-	}
-
-	/* 也是自动选取最大优惠券的操作,只是与setCoupon策略不同
-	 function suitable(me, doc, productID, type, petPrice, pay, pageData, extra, precedence) {
-	 extra = extra || 0;
-	 precedence = precedence || 0;
-	 // 获取该类型宠物 可用优惠券
-	 doc.trigger('spa:openloader');
-	 api.getCouponList({
-	 products: JSON.stringify([{
-	 product_id: productID,
-	 count: 1
-	 }]),
-	 type: type,
-	 user_id: user.id
-	 }, function (res) {
-	 doc.trigger('spa:closeloader');
-	 if (!res.success) {
-	 doc.trigger('spa:openpanel', ['simpleAlert', {
-	 message: res.message
-	 }]);
-	 } else {
-	 user.orderCoupons = res.data;
-
-	 // 优惠券数据更新
-	 var coupons = user.orderCoupons;
-	 var couponSelectVal = 0;
-	 if (coupons.length) {
-	 // 选取最大金额
-	 var selectCoupon = user.getMaxAvailableCoupon();
-
-	 // 缓存到购物车
-	 cart['products'][type]['couponName'] = coupons[selectCoupon.couponIndex].coupon.name;
-	 cart['products'][type]['couponVal'] = selectCoupon.couponSelectVal;
-	 cart['products'][type]['couponId'] = coupons[selectCoupon.couponIndex].id;
-	 cart['products'][type]['couponList'] = coupons;
-
-	 // dom 更新
-	 $('.coupon-selected-name', me).html(user.getCouponName(coupons[selectCoupon.couponIndex].id));
-	 $('.coupon-cost', me).html('-' + selectCoupon.couponSelectVal);
-	 $('.select-coupon', me).removeClass('hide');
-	 $('.order-cost', me).attr('data-coupon', selectCoupon.couponSelectVal);
-	 $('.order-list', me).removeClass('hide');
-	 $('.order-cost', me).attr('data-pay', parseFloat(petPrice) - parseFloat(selectCoupon.couponSelectVal) + extra);
-
-	 // 减去优惠
-	 petPrice = parseFloat(petPrice) - parseFloat(selectCoupon.couponSelectVal) + extra + precedence;
-
-	 } else {
-	 // 缓存到购物车
-	 cart['products'][type]['couponName'] = '';
-	 cart['products'][type]['couponVal'] = '';
-	 cart['products'][type]['couponId'] = '';
-	 cart['products'][type]['couponList'] = [];
-
-	 $('.coupon-selected-name', me).html('');
-	 $('.coupon-cost', me).html('- 0');
-	 $('.select-coupon', me).addClass('hide');
-	 $('.order-cost', me).attr('data-coupon', 0);
-
-	 petPrice = parseFloat(petPrice) + extra + precedence;
-	 }
-	 // 缓存到本地
-	 cart.setCache('products');
-
-	 // 更新dom总价
-	 $('.order-cost', me).attr('data-costs', pay);
-	 $('.order-cost', me).html('¥' + petPrice);
-
-	 $('.select-pet', me).removeClass('hide');
-
-	 if (pageData && pageData.scroll) {
-	 pageData.scroll.refresh();
-	 }
-	 }
-	 });
-	 }
-	 */
-
-	/* 优惠券取决于主服务、宠物、数量、时间,所以在这几个值改变后要调用这个方法,更新最大优惠
-	 function setCoupon(me, pageData, extraServicePrice) {
-	 $(document).trigger('spa:openloader');
-	 var products = JSON.stringify([{
-	 product_id: order['productID'],
-	 count: order.productCount
-	 }]);
-	 var time = order.bookingDate + ' ' + order.bookingTime + ':00';
-	 user.getProductCoupon(products, time, cachePageData.productType, function (res) {
-	 $(document).trigger('spa:closeloader');
-	 if (res.success) {
-	 var coupons = user.orderCoupons;
-	 var price = 0;
-	 if (coupons.length) {
-	 var selectCoupon = user.getMaxAvailableCoupon();
-	 cart['products'][cachePageData.productType]['couponName'] = coupons[selectCoupon.couponIndex].coupon.name;
-	 cart['products'][cachePageData.productType]['couponVal'] = selectCoupon.couponSelectVal;
-	 cart['products'][cachePageData.productType]['couponId'] = coupons[selectCoupon.couponIndex].id;
-	 cart['products'][cachePageData.productType]['couponList'] = coupons;
-
-	 $('.coupon-selected-name', me).html(user.getCouponName(coupons[selectCoupon.couponIndex].id));
-	 $('.coupon-cost', me).html('-' + selectCoupon.couponSelectVal);
-	 $('.select-coupon', me).removeClass('hide');
-	 $('.order-cost', me).attr('data-coupon', selectCoupon.couponSelectVal);
-	 $('.order-list', me).removeClass('hide');
-	 price = parseFloat(order.petPrice) * order.productCount - parseFloat(selectCoupon.couponSelectVal) + parseFloat(extraServicePrice);
-
-	 } else {
-	 price = parseFloat(order.petPrice) * order.productCount + parseFloat(extraServicePrice);
-
-	 $('.coupon-selected-name', me).html('');
-	 $('.select-coupon', me).addClass('hide');
-	 $('.order-cost', me).attr('data-coupon', '0');
-	 $('.order-cost', me).attr('data-pay', parseFloat(order.petPrice));
-	 cart['products'][cachePageData.productType]['couponName'] = '';
-	 cart['products'][cachePageData.productType]['couponVal'] = '';
-	 cart['products'][cachePageData.productType]['couponId'] = '';
-	 cart['products'][cachePageData.productType]['couponList'] = [];
-	 }
-	 // 加急
-	 if (order.precedence) {
-	 price = price + parseFloat(product.precedence);
-	 }
-	 $('.order-cost', me).attr('data-pay', price);
-	 $('.order-cost', me).attr('data-costs', order.petPrice);
-	 $('.order-cost', me).html('¥' + price);
-
-	 cart.setCache('products');
-
-	 pageData.scroll.refresh();
-	 } else {
-	 $(document).trigger('spa:openpanel', ['simpleAlert', {
-	 message: res.message
-	 }]);
-	 }
-	 });
-	 }  */
-
-	/* 在选择主服务或宠物后,筛选附加服务
-	 function suitExtraService(me, checkedName) {
-	 var newExtraService = product.getExtraServiceList(order.productType, order.petName, checkedName);
-	 var extraService = {
-	 extraService: newExtraService
-	 }
-	 var extraServiceTpl = template('placeOrder/list', extraService);
-	 var extraServiceTpl2 = template('placeOrder/list2', extraService);
-	 me.find('.extra-service-list').html(extraServiceTpl);
-	 me.find('.calc-items').html(extraServiceTpl2).addClass('hide');
-
-	 cachePageData.extraServicePrice = 0;
-	 cachePageData.extraServiceCount = 0;
-	 } */
-
-	/* 在选择主服务、附加服务、宠物、时间、地点之后,重置保洁师
-	 function resetTech(me) {
-	 order.beautician.name = '请选择';
-	 order.beautician.id = '';
-	 $('.booking-people', me).html(order.beautician.name);
-	 }  */
-
-	return {
-		title: '壹管家上门服务',
-		body: '',
-		init: function (pageData, dtd) {
-			var $view = this;
-			var $doc = $(document);
-
-			/* 三个返回操作 */
-			$.newTouch('.back-button', function (event) {
-				back.call(this, event);
-				// history.go(-1);
-			}, $view);
-			$view.on('tapBackButton', function (event) {
-				back.call(this, event);
-				// history.go(-1);
-			});
-			$view.on('swipeRight', function (event) {
-				back.call(this, event);
-				// history.go(-1);
-			});
-			/*setTimeOut*/
-
-			/* 点击查看详情。跳转到product页面 */
-			$.newTouch('.product-pic-o2o', function (event) {
-				$doc.trigger('spa:navigate', {
-					hash: 'product',
-					pushData: {
-						produc: product,
-						needReload: true
-					}
-				});
-			}, $view);
-
-			/*特效*/
-			setInterval(function run() {
-				$('.product-img').fadeToggle();
-			},500);
-			/* 点击选择extra。 */
-			$.newTouch('.btn-main-service', function (event) {
-				/* on代表这一条的选中状态。如果已经选中了,就return。this的作用域是这一条extra。 */
-				if ($(this).hasClass('on')) return;
-				/* 如果没有on状态,加上on。 */
-				$(this).addClass('on');
-				/* 删掉其他选择框的on状态 */
-				$(this).parent().siblings().find('.btn').removeClass('on');
-				/* 填写order */
-				order.appendID = $(this).attr('data-extra-type');
-				order.price = $(this).attr('data-extra-price');
-				order.cost = order.price * order.productCount;
-				// 重置代金券
-				$('.coupon-selected-name', $view).html('选择优惠券');
-				order.couponValue = 0;
-				order.couponID = '';
-				payCharge($('.order-cost', $view));
-			}, $view);
-
-			/* 点击选择地址 */
-			$.newTouch('.select-address', function (event) {
-				event.preventDefault();
-				/* 如果是微信客户端,跳转到addressList页面。 */
-				if (!config.isAndroid && !config.isIOS) {
-					$doc.trigger('spa:navigate', {
-						hash: 'addressList',
-						pushData: {
-							backHash: 'placeOrder'
-						},
-						callback: {
-							/* 在addressList页面挑选之后,回到这个页面时执行的回调。 */
-							onSelect: function (address, station) {
-								order.set('address', address, true);
-								order.set('stationID', station, true);
-
-								var addressStr = '';
-								if (order.address.address.poi) {
-									addressStr = order.address.address.city + order.address.address.area + order.address.address.poi.name + order.address.address.detail
-								} else {
-									addressStr = order.address.address.province + order.address.address.city + order.address.address.area + order.address.address.detail
-								}
-								$('.order-address', $view).html(addressStr);
-								$('.order-username', $view).html(order.address.name);
-								$('.order-mobile', $view).html(order.address.mobile);
-							}
-						}
-					});
-				}
-			}, $view);
-
-			/* 点击选择附加服务
-			 $.newTouch('.item-checkbox', function (event) {
-			 event.preventDefault();
-			 // 如果'.main-service'元素的子元素数目为正(也就是说出现了选择主服务那一栏,也就是说在前一页选择的是附加服务),且不处于on状态(也就是还没有选择主服务)
-			 if ($('.main-service', $view).length && !$('.main-service', $view).find('.btn-main-service').hasClass('on')) {
-			 // 弹出一个对话框
-			 $doc.trigger('spa:openpanel', ['simpleAlert', {
-			 message: '请选择服务类型'
-			 }]);
-			 return;
-			 }
-			 // $(this).data('xxx'):获取this中data-xxx的数据。
-			 // 获取这一条附加服务的相关的数据。select没用,估计是原来想用这个记录选中状态的。
-			 var select = $(this).data('select'),
-			 id = $(this).data('id'),
-			 index = $(this).parent().index(),
-			 price = $(this).data('price');
-			 extraType = $(this).data('servicetype');
-			 // 获取附加服务的总费用。
-			 var extraCost = $('.order-cost', $view).attr('data-extra');
-			 // 如果原来没有选中这一项,下面就是选中的操作
-			 if (!$(this).hasClass('checked')) {
-			 // 附加服务数量+1
-			 cachePageData.extraServiceCount++;
-			 // 保存附加服务的总价格
-			 cachePageData.extraServicePrice += parseFloat(price);
-			 // 添加checked状态
-			 $(this).addClass('checked');
-			 var serviceParam = {
-			 product_id: id,
-			 count: 1
-			 }
-			 // /为什么是个数组?
-			 order.extraService[index] = serviceParam;
-			 // 把订单详情中对应的项目添加on属性
-			 $('.calc-items', $view).find('.select-extra-service').eq(index).addClass('on');
-			 // 计算附加服务的总费用。
-			 extraCost = parseFloat(extraCost) + parseFloat(price);
-			 $('.order-cost', $view).attr('data-extra', extraCost);
-			 }
-			 // 如果原来选中了这一项,下面就是取消选中的操作
-			 else {
-			 // 附加服务数量-1
-			 cachePageData.extraServiceCount--;
-			 // 保存附加服务的总价格
-			 cachePageData.extraServicePrice -= parseFloat(price);
-			 // 删除checked属性
-			 $(this).removeClass('checked');
-
-			 order.extraService[index] = {};
-			 // 把订单详情中对应的项目删掉on属性
-			 $('.calc-items', $view).find('.select-extra-service').eq(index).removeClass('on');
-			 // 计算附加服务的总费用。
-			 extraCost = parseFloat(extraCost) - parseFloat(price);
-			 $('.order-cost', $view).attr('data-extra', extraCost);
-			 }
-			 // 根据附加服务的数量,更新订单详情中附加服务模块的显示与隐藏
-			 if (cachePageData.extraServiceCount > 0) {
-			 $('.calc-items', $view).removeClass('hide');
-			 } else {
-			 $('.calc-items', $view).addClass('hide');
-			 }
-			 // 更新订单详情中每一条附加服务的显示与隐藏
-			 if ($('.calc-items', $view).find('.select-extra-service').hasClass('on')) {
-			 $('.calc-items', $view).removeClass('hide');
-			 } else {
-			 $('.calc-items', $view).addClass('hide');
-			 }
-			 // 计算总价钱
-			 payCharge();
-			 // 刷新界面
-			 pageData.scroll.refresh();
-			 }, $view); */
-
-			/* 点击选择保洁师
-			 $.newTouch('.show-beautician-picker', function (event) {
-			 // 如果订单的地址数据为空
-			 if (!order.address || !order.address.address_id) {
-			 // 弹出提示框
-			 $doc.trigger('spa:openpanel', ['simpleAlert', {
-			 message: '请选择地址'
-			 }]);
-			 return;
-			 }
-			 // 点击订单的预定时间为空
-			 if (order.bookingDate == '' || order.bookingTime == '') {
-			 // 弹出提示框
-			 $doc.trigger('spa:openpanel', ['simpleAlert', {
-			 message: '请选择上门时间'
-			 }]);
-			 return;
-			 }
-			 // 点击订单的主服务类型为空
-			 if (!order.productType) {
-			 // /弹出提示框
-			 $doc.trigger('spa:openpanel', ['simpleAlert', {
-			 message: '请选择服务类型'
-			 }]);
-			 return;
-			 }
-			 // 生成预定时间的字符串
-			 var bookingTime = order.bookingDate + ' ' + order.bookingTime + ':00';
-			 // 生成所有服务的字符串
-			 var service_type_array = [order.productType];
-			 var service_type = '[' + service_type_array.join(',') + ']';
-			 // 根据服务、时间、地址,向服务器请求保洁师列表
-			 user.getTechList(
-			 service_type,
-			 bookingTime,
-			 order.address.address_id,
-			 // 请求成功后跳转到beautician页面,在beautician页面展示保洁师列表
-			 function (res) {
-			 $doc.trigger('spa:navigate', {
-			 hash: 'beautician',
-			 pushData: {
-
-			 }
-			 });
-			 }
-			 );
-			 }, $view);  */
-
-			/* 点击选择宠物相关
-			 $.newTouch('.show-product-picker', function () {
-			 // 如果有了selected属性,就return
-			 if ($(this).hasClass('selected')) return;
-			 event.preventDefault();
-			 // 主服务>10是什么意思???
-			 if (cachePageData.productType > 10) {
-			 $doc.trigger('spa:openpanel', ['simpleAlert', {
-			 message: '请选择服务类型'
-			 }]);
-			 return;
-			 }
-			 // 弹出一个列表选择框。
-			 $doc.trigger('spa:openpanel', ['productOption', {
-			 pets: product.productGroup[cachePageData.productType],
-			 productType: cachePageData.productType,
-			 callback: {
-			 onSelect: function (petName, petWeight, petPrice) {
-			 // set order info
-			 order.petName = petName;
-			 order.petWeight = petWeight;
-			 order.petPrice = petPrice;
-			 order.productType = cachePageData.productType;
-			 order.petID = cart['products'][cachePageData.productType]['petID'];
-			 order.productID = cart['products'][cachePageData.productType]['productID'];
-			 // user.orderCoupons = res.data;
-			 // 筛选附加服务
-			 if (cachePageData.extraServiceType > 10) {
-			 var selectExtraServiceName = cachePageData.defaultExtraService[cachePageData.extraServiceType].serviceName;
-			 var selectExtraServicePrice = cachePageData.defaultExtraService[cachePageData.extraServiceType].servicePrice;
-
-			 $('.order-cost', $view).attr('data-extra', selectExtraServicePrice);
-			 }
-
-			 suitExtraService($view, selectExtraServiceName);
-
-			 $('.pet-info', $view).html(petName + ' (' + petWeight + ')');
-			 $('.pet-type', $view).html(petName + ' (' + petWeight + ')');
-			 $('.total-cost', $view).html('¥' + petPrice);
-
-			 if ($('.calc-items', $view).find('.select-extra-service').hasClass('on')) {
-			 $('.calc-items', $view).removeClass('hide');
-			 petPrice = parseFloat(petPrice) + parseFloat(selectExtraServicePrice);
-			 }
-
-			 $('.order-cost', $view).attr('data-costs', order.petPrice);
-			 $('.order-cost', $view).attr('data-extra', cachePageData.extraServicePrice);
-			 $('.order-cost', $view).html('¥' + petPrice);
-
-			 $('.select-pet', $view).removeClass('hide');
-
-			 if (order['productID'] && order.bookingDate) {
-			 setCoupon($view, pageData, cachePageData.extraServicePrice);
-			 }
-
-			 pageData.scroll.refresh();
-			 }
-			 }
-			 }]);
-			 }, $view); */
-
-			/* 点击数量-1 */
-			$.newTouch('.btn-sub', function (event) {
-				if (order.productCount <= 1) return;
-				if (order.price == 0) {
-					$doc.trigger('spa:openpanel', ['simpleAlert', {
-						message: '请选择服务'
-					}]);
-					return;
-				}
-				var inputNum = $('.service-count', $view).children('.input-num').val();
-				if (isNaN(inputNum)) {
-					$doc.trigger('spa:openpanel', ['simpleAlert', {
-						message: '请输入数字'
-					}]);
-					return false;
-				}
-				order.productCount = inputNum;
-				order.productCount--;
-				order.cost = order.productCount * order.price;
-				$('.service-count', $view).children('.input-num').val(order.productCount);
-				/* 算账 */
-				payCharge($('.order-cost', $view));
-			}, $view);
-
-			/*点击body重置金额*/
-			$.newTouch('body', function (event) {
-				//input输入
-				var inputNum = $('.service-count', $view).children('.input-num').val();
-				if (isNaN(inputNum)) {
-					$doc.trigger('spa:openpanel', ['simpleAlert', {
-						message: '请输入数字'
-					}]);
-					return false;
-				}
-				//与input输入框的文本的数据做交互;
-				order.productCount = inputNum;
-				order.cost = order.productCount * order.price;
-				$('.service-count', $view).children('.input-num').val(order.productCount);
-			})
-
-			/* 点击数量+1 */
-			$.newTouch('.btn-add', function (event) {
-				if (order.productCount > 999) return;
-				if (order.price == 0) {
-					$doc.trigger('spa:openpanel', ['simpleAlert', {
-						//message: '请选择extra'
-						message: '请选择服务'
-					}]);
-					return;
-				}
-				var inputNum = $('.service-count', $view).children('.input-num').val();
-				if (isNaN(inputNum)) {
-					$doc.trigger('spa:openpanel', ['simpleAlert', {
-						message: '请输入数字'
-					}]);
-					return false;
-				}
-				order.productCount = inputNum;
-				order.productCount++;
-				order.cost = order.productCount * order.price;
-				$('.service-count', $view).children('.input-num').val(order.productCount);
-				/* 算账 */
-				payCharge($('.order-cost', $view));
-			}, $view);
-
-			/* 点击选择时间 */
-			$.newTouch('.show-time-picker', function (event) {
-				event.preventDefault();
-				// 以下是构建时间选择器,不用管。直接看选完之后的回调。
-				var dayNamesA = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
-				var dayNamesB = ['今天'];
-				var columns = {
-					columnDay: [],
-					columnTime: []
-				};
-				var now = new Date().getHours();
-				var daySelectIndex = 0;
-				for (var i = 1; i <= 9; i++) {
-					var dd = new Date();
-					dd.setDate(dd.getDate() + i);
-
-					var month = dd.getMonth() + 1;
-					var day = dd.getDate();
-					var date = month + '月' + day + '日';
-
-					var dayStr = helper.getDateStr({
-						date: dd,
-						separator: '-'
-					});
-
-					var dayStrSuffix;
-					if (i < dayNamesB.length) {
-						dayStrSuffix = dayNamesB[i];
-					} else {
-						dayStrSuffix = dayNamesA[dd.getDay()];
-					}
-					var selected = false;
-					if (order.bookingDate) {
-						selected = true;
-					}
-					if (dayStr == order.bookingDate) {
-						daySelectIndex = i;
-					} else {
-						daySelectIndex = -1;
-					}
-					columns.columnDay.push({
-						text: date, // 几月几日
-						day: dayStrSuffix, // 周几
-						value: dayStr,
-						selected: selected,
-						selectIndex: daySelectIndex
-					});
-				}
-
-				var currentDate = new Date();
-				var currentMonth = currentDate.getMonth() + 1;
-				var currentDay = currentDate.getDate();
-				var now = new Date().getHours();
-				var min = new Date().getMinutes();
-				var timeSelectIndex = 0;
-				for (var i = 9; i <= 19; i++) {
-					var hour = i + ':00';
-					var selected = false;
-					if (order.bookingTime) {
-						selected = true;
-					}
-					if (hour == order.bookingTime) {
-						timeSelectIndex = i;
-					} else {
-						timeSelectIndex = -1;
-					}
-					columns.columnTime.push({
-						month: currentMonth,
-						day: currentDay,
-						min: min,
-						num: i,
-						now: now,
-						text: hour,
-						value: hour,
-						selected: selected,
-						selectIndex: timeSelectIndex
-					})
-				}
-				$doc.trigger('spa:openpanel', ['dataPicker', {
-					// type: cachePageData.productType,
-					columns: columns,
-					selected: order.bookingDate,
-					// offDay: product.offDay,
-					callback: {
-						// 选完之后的回调。values:[日期,时间];texts:时间字符串;precedence:是否加急;
-						onSelect: function (values, texts, precedence) {
-							// 重置代金券
-							$('.coupon-selected-name', $view).html('选择优惠券');
-							order.couponValue = 0;
-							order.couponID = '';
-							payCharge($('.order-cost', $view));
-							// 填写order
-							order.bookingDate = values[0];
-							order.bookingTime = values[1];
-							order.bookingTimeStr = texts[0] + ' ' + texts[1];
-							order.precedence = precedence;
-							// 更新预定时间组件
-							$('.booking-time', $view).html(order.bookingTimeStr);
-						}
-					}
-				}]);
-			}, $view);
-
-			/* 点击选择优惠券 */
-			$.newTouch('.show-coupon-picker', function (event) {
-				if ($(this).hasClass('disabled')) return;
-				event.preventDefault();
-
-				var extraJson = '';
-				if (product.extra && !order.appendID) {
-					$doc.trigger('spa:openpanel', ['simpleAlert', {
-						message: '请选择服务'
-					}]);
-					return;
-				} else {
-					extraJson = JSON.stringify([{type: order.appendID, price: order.price}]);
-				}
-
-				// 必须先选择时间
-				if (!order.bookingDate) {
-					$doc.trigger('spa:openpanel', ['simpleAlert', {
-						message: '请选择服务时间'
-					}]);
-					return;
-				}
-
-				// 跳转到picker页面,展示优惠券
-				$doc.trigger('spa:navigate', {
-					hash: 'picker',
-					pushData: {
-						title: '选择优惠券',
-						backHash: 'placeOrder',
-						products: JSON.stringify([{
-							product_id: order.productID,
-							count: order.productCount
-						}]),
-						time: order.bookingDate + ' ' + order.bookingTime + ':00',
-						type: order.productType,
-						extraJson: extraJson
-					},
-					callback: {
-						// 在picker页面挑选之后,回到这个页面时执行的回调。pickValue:选中的优惠券的ID;
-						onSelect: function (pickValue) {
-							if (pickValue == '') {
-								$('.coupon-selected-name', $view).text('不使用');
-								order.couponValue = 0;
-							} else {
-								for (var i in user.orderCoupons) {
-									var couponInfo = user.orderCoupons[i];
-									if (couponInfo.id == pickValue) {
-										$('.coupon-selected-name', $view).text(couponInfo['coupon']['name']);
-										order.couponValue = couponInfo['coupon']['value'];
-										break;
-									}
-								}
-							}
-							// 填写order
-							order.couponID = pickValue;
-							// 计算总费用
-							payCharge($('.order-cost', $view));
-						}
-					}
-				});
-			}, $view);
-
-			/* 是否选中同意用户协议,关系到下订单按钮是否激活 */
-			$.newTouch('.agreement-touch-area', function (event) {
-				var agreementObj = $('.agreement-checkbox', $view);
-				if (agreementObj.prop('checked')) {
-					agreementObj.prop('checked', false);
-					$('.btn-place').addClass('disable');
-				} else {
-					agreementObj.prop('checked', true);
-					$('.btn-place').removeClass('disable');
-				}
-			}, $view);
-
-			/* 跳转到agreement页面查看协议 */
-			$.newTouch('.agreement', function (event) {
-				$doc.trigger('spa:navigate', {
-					hash: 'agreement'
-				});
-			}, $view);
-
-			/* 点击下订单 */
-			$.newTouch('.btn-place', function (event) {
-				event.preventDefault();
-				if ($(this).hasClass('disable')) {
-					return false;
-				}
-				if (product.type_str == "擦玻璃" && order.productCount < 10) {
-					$doc.trigger('spa:openpanel', ['simpleAlert', {
-						message: '数量不少于10平米'
-					}]);
-					return;
-				}
-
-				if (product.type_str == "新居开荒" && order.productCount < 50) {
-					$doc.trigger('spa:openpanel', ['simpleAlert', {
-						message: '数量不少于50平米'
-					}]);
-					return;
-				}
-				if (product.extra && !order.appendID) {
-					$doc.trigger('spa:openpanel', ['simpleAlert', {
-						message: '请选择服务'
-					}]);
-					return;
-				}
-
-				if (!order.address) {
-					$doc.trigger('spa:openpanel', ['simpleAlert', {
-						message: '请选择地址'
-					}]);
-					return;
-				}
-
-				if (!order.bookingTimeStr&& product.name !== "双11虹口区日常保洁特价体验") {
-					$doc.trigger('spa:openpanel', ['simpleAlert', {
-						message: '请选择上门时间'
-					}]);
-					return;
-				}
-
-
-				var payChannel = 'wx_pub';
-
-				/* 使备注输入框失去焦点,获取值 */
-				$('.order-memo', $view).blur();
-				order.set('memo', $('.order-memo', $view).val());
-
-				/* 向服务器下订单 */
-				$doc.trigger('spa:openloader');
-				if (user.balance >= order.payValue) {
-					order.balance = order.payValue;
-					order.payValue = 0;
-				} else {
-					order.balance = user.balance;
-					order.payValue = order.payValue - order.balance;
-				}
-				order.addOrder(user.id, payChannel, function (res) {
-					console.log(res);
-					$doc.trigger('spa:closeloader');
-					if (res.success) {
-						// 更新user的订单
-						user.orders[1].data.push(res.data);
-						// 更新user的优惠券
-						var oldCouponList = user.orderCoupons;
-						var oldCouponId = order.couponID;
-						var newCouponList = [];
-						$.each(oldCouponList, function (index, val) {
-							if (val.id !== oldCouponId) {
-								newCouponList.push(oldCouponList[index])
-							}
-						});
-						user.orderCoupons = newCouponList;
-
-						var orderID = order.id;
-						order.reset();
-						$('.booking-time', $view).html('请选择');
-						if (res.data.status == 1) {
-							if(res.data.products_str=='双11虹口区日常保洁特价体验'){
-								$doc.trigger('spa:navigate', {
-									hash: 'bargain'
-								});
-							}else {
-								$doc.trigger('spa:navigate', {
-									hash: 'paySuccess'
-								});
-							}
-
-						} else {
-							$doc.trigger('spa:navigate', {
-								hash: 'pay',
-								pushData: {
-									orderID: orderID,
-									backHash: ''
-								}
-							});
-						}
-					} else {
-						$doc.trigger('spa:openpanel', ['simpleAlert', {
-							message: res.message
-						}]);
-					}
-				});
-			}, $view);
-
-			dtd.resolve();
-		},
-		beforeopen: function (pageData, dtd) {
-			var $view = this;
-			var pushData = pageData.pushData;
-			/* 只有首页跳转来,才会带有needReset = true */
-			if (pushData.hasOwnProperty('needReset') && pushData.needReset) {
-				/* 接收首页传来的product,填写order的productType(产品类型)、productID(产品ID)两个字段 */
-				pushData.needReset = false;
-				product = pushData.product;
-
-				order.productType = product.type;
-				order.productID = product.id;
-				order.productCount = 1;
-				order.couponValue = 0;
-				/* 根据product建立渲染页面的数据 */
-				var tmpData = {
-					/* 环境,目前只决定是否显示保洁师 */
-					env: config,
-					/* 环境 */
-					showNavBar: !config.isWX && !config.isChubao,
-					imgSrc: product.imgSrc,
-					/* 标题栏的标题 */
-					title: product.name,
-					/* extra选择项 */
-					extra: product.extra,
-					/* 如果用户有优惠券,则显示优惠券的选择栏 */
-					showCoupon: user.orderCoupons.length,
-					/* 账户余额 */
-					balance: user.balance
-				};
-				/* 渲染页面 */
-				var tpl = template('placeOrder/index', tmpData);
-				$view.find('.spa-page-body').html(tpl);
-				/* 绑定费用数据 */
-				if (product.extra) {
-					order.price = 0;
-					order.cost = 0;
-				} else {
-					order.price = product.price;
-					order.cost = product.price * order.productCount;
-				}
-				payCharge($('.order-cost', $view));
-
-				/* 软键盘相关操作时对IScroll的补偿 */
-				fixScroll(pageData);
-				$('.order-memo', $view).focus(function (event) {
-					var that = this;
-					checkScroll(pageData, function () {
-						if (pageData.scroll) {
-							pageData.scroll.scrollToElement(that, 0);
-						}
-					});
-				});
-				$('.order-memo', $view).on('closeKeyboard', function (event) {
-					checkScroll(pageData);
-					$(this).blur();
-				});
-				$('.order-memo', $view).blur(function (event) {
-					checkScroll(pageData);
-				});
-
-				/* 填写备注时,提交按钮失焦 */
-				$('#order-form', $view).on('submit', function (event) {
-					$(this).blur();
-					return false;
-				});
-			}
-			dtd.resolve();
-		},
-		afteropen: function (pageData, dtd) {
-			var type = pageData.pushData.productType;
-			native.registerEvent(true);
-			dtd.resolve();
-			if (config.isWX) {
-				wx.ready(function () {
-					wx.onMenuShareTimeline({
-						title: '家政服务' + product.desc[1].content + ',首选壹管家',
-						link: 'http://www.yiguanjia.me/o2o/web/index',
-						imgUrl: product.desc[0].content
-					});
-					wx.onMenuShareAppMessage({
-						title: '家政服务' + product.desc[1].content + ',首选壹管家',
-						desc: '全程管家,精心每一个细节',
-						link: 'http://www.yiguanjia.me/o2o/web/index',
-						imgUrl: product.desc[0].content
-					});
-				});
-			}
-		},
-		afterclose: function (pageData) {
-			native.registerEvent(false);
-		}
-	}
+    /*
+     * 这里对product和order做一个说明。
+     * product前台写死。order沿用原模型,但只用其中几个字段。
+     * 对应关系如下:
+     * product.id == order.productID :产品ID
+     * product.type == order.productType :产品类型,约定的数字
+     * product.price == order.cost :订单原价,当product的extra字段为空
+     * product.extra.price == order.cost :订单原价,当product的extra字段不为空
+     * product.type_str == order.serviceName :服务名称
+     * product.extra.type == order.appendID :服务的额外选项,当product的extra字段不为空
+     */
+
+    /* 从首页传来的产品数据 */
+    var product;
+    var backHash;
+
+    /* 软键盘弹出与消失时布局变动。 */
+    function checkScroll(pageData, callback) {
+        if (pageData.scroll) {
+            if (!pageData.scrollHeight) {
+                pageData.scrollHeight = 0;
+            }
+            clearInterval(pageData.scrollCheck);
+            clearTimeout(pageData.scrollCheckAutoCancel);
+            pageData.scrollCheck = setInterval(function () {
+                pageData.scroll.refresh();
+                if ($.isFunction(callback)) {
+                    callback();
+                }
+            }, 50);
+
+            pageData.scrollCheckAutoCancel = setTimeout(function () {
+                clearInterval(pageData.scrollCheck);
+            }, 500);
+        }
+    }
+
+    /* 返回上一级 */
+    function back(event) {
+        event.preventDefault();
+        $(document).trigger('spa:navigate', {
+            hash: backHash,
+            pushData: {
+                dontNeedReload: true
+            }
+        });
+    }
+
+    /* 重置页面时调用,重新生成IScroll */
+    function fixScroll(pageData) {
+        setInterval(function () {
+            if (product.name == "首单日常保洁2小时体验") {
+                $('.selected').css('display', 'none');
+                // $('.show-time-picker').css('display', 'none');
+                // $('.show-coupon-picker').css('display', 'none');
+                // $('.table-link-label').css('display', 'none');
+                // $('.product-pic-o2o').css('display', 'none');
+                // $('.o2o-singles-day').css('display', 'inline');
+            }
+        }, 100);
+        if (pageData.scroll) {
+            pageData.scroll.destroy();
+            pageData.scroll = null;
+        }
+        var placeOrderScroll;
+        setTimeout(function () {
+            pageData.scroll = new IScroll('#placeOrderScroll');
+        }, 700);
+    }
+
+    /* 算账。 */
+    function payCharge($orderCost) {
+        order.payValue = order.cost - order.couponValue;
+        $orderCost.text('¥' + order.payValue);
+    }
+
+    /* 也是自动选取最大优惠券的操作,只是与setCoupon策略不同
+     function suitable(me, doc, productID, type, petPrice, pay, pageData, extra, precedence) {
+     extra = extra || 0;
+     precedence = precedence || 0;
+     // 获取该类型宠物 可用优惠券
+     doc.trigger('spa:openloader');
+     api.getCouponList({
+     products: JSON.stringify([{
+     product_id: productID,
+     count: 1
+     }]),
+     type: type,
+     user_id: user.id
+     }, function (res) {
+     doc.trigger('spa:closeloader');
+     if (!res.success) {
+     doc.trigger('spa:openpanel', ['simpleAlert', {
+     message: res.message
+     }]);
+     } else {
+     user.orderCoupons = res.data;
+
+     // 优惠券数据更新
+     var coupons = user.orderCoupons;
+     var couponSelectVal = 0;
+     if (coupons.length) {
+     // 选取最大金额
+     var selectCoupon = user.getMaxAvailableCoupon();
+
+     // 缓存到购物车
+     cart['products'][type]['couponName'] = coupons[selectCoupon.couponIndex].coupon.name;
+     cart['products'][type]['couponVal'] = selectCoupon.couponSelectVal;
+     cart['products'][type]['couponId'] = coupons[selectCoupon.couponIndex].id;
+     cart['products'][type]['couponList'] = coupons;
+
+     // dom 更新
+     $('.coupon-selected-name', me).html(user.getCouponName(coupons[selectCoupon.couponIndex].id));
+     $('.coupon-cost', me).html('-' + selectCoupon.couponSelectVal);
+     $('.select-coupon', me).removeClass('hide');
+     $('.order-cost', me).attr('data-coupon', selectCoupon.couponSelectVal);
+     $('.order-list', me).removeClass('hide');
+     $('.order-cost', me).attr('data-pay', parseFloat(petPrice) - parseFloat(selectCoupon.couponSelectVal) + extra);
+
+     // 减去优惠
+     petPrice = parseFloat(petPrice) - parseFloat(selectCoupon.couponSelectVal) + extra + precedence;
+
+     } else {
+     // 缓存到购物车
+     cart['products'][type]['couponName'] = '';
+     cart['products'][type]['couponVal'] = '';
+     cart['products'][type]['couponId'] = '';
+     cart['products'][type]['couponList'] = [];
+
+     $('.coupon-selected-name', me).html('');
+     $('.coupon-cost', me).html('- 0');
+     $('.select-coupon', me).addClass('hide');
+     $('.order-cost', me).attr('data-coupon', 0);
+
+     petPrice = parseFloat(petPrice) + extra + precedence;
+     }
+     // 缓存到本地
+     cart.setCache('products');
+
+     // 更新dom总价
+     $('.order-cost', me).attr('data-costs', pay);
+     $('.order-cost', me).html('¥' + petPrice);
+
+     $('.select-pet', me).removeClass('hide');
+
+     if (pageData && pageData.scroll) {
+     pageData.scroll.refresh();
+     }
+     }
+     });
+     }
+     */
+
+    /* 优惠券取决于主服务、宠物、数量、时间,所以在这几个值改变后要调用这个方法,更新最大优惠
+     function setCoupon(me, pageData, extraServicePrice) {
+     $(document).trigger('spa:openloader');
+     var products = JSON.stringify([{
+     product_id: order['productID'],
+     count: order.productCount
+     }]);
+     var time = order.bookingDate + ' ' + order.bookingTime + ':00';
+     user.getProductCoupon(products, time, cachePageData.productType, function (res) {
+     $(document).trigger('spa:closeloader');
+     if (res.success) {
+     var coupons = user.orderCoupons;
+     var price = 0;
+     if (coupons.length) {
+     var selectCoupon = user.getMaxAvailableCoupon();
+     cart['products'][cachePageData.productType]['couponName'] = coupons[selectCoupon.couponIndex].coupon.name;
+     cart['products'][cachePageData.productType]['couponVal'] = selectCoupon.couponSelectVal;
+     cart['products'][cachePageData.productType]['couponId'] = coupons[selectCoupon.couponIndex].id;
+     cart['products'][cachePageData.productType]['couponList'] = coupons;
+
+     $('.coupon-selected-name', me).html(user.getCouponName(coupons[selectCoupon.couponIndex].id));
+     $('.coupon-cost', me).html('-' + selectCoupon.couponSelectVal);
+     $('.select-coupon', me).removeClass('hide');
+     $('.order-cost', me).attr('data-coupon', selectCoupon.couponSelectVal);
+     $('.order-list', me).removeClass('hide');
+     price = parseFloat(order.petPrice) * order.productCount - parseFloat(selectCoupon.couponSelectVal) + parseFloat(extraServicePrice);
+
+     } else {
+     price = parseFloat(order.petPrice) * order.productCount + parseFloat(extraServicePrice);
+
+     $('.coupon-selected-name', me).html('');
+     $('.select-coupon', me).addClass('hide');
+     $('.order-cost', me).attr('data-coupon', '0');
+     $('.order-cost', me).attr('data-pay', parseFloat(order.petPrice));
+     cart['products'][cachePageData.productType]['couponName'] = '';
+     cart['products'][cachePageData.productType]['couponVal'] = '';
+     cart['products'][cachePageData.productType]['couponId'] = '';
+     cart['products'][cachePageData.productType]['couponList'] = [];
+     }
+     // 加急
+     if (order.precedence) {
+     price = price + parseFloat(product.precedence);
+     }
+     $('.order-cost', me).attr('data-pay', price);
+     $('.order-cost', me).attr('data-costs', order.petPrice);
+     $('.order-cost', me).html('¥' + price);
+
+     cart.setCache('products');
+
+     pageData.scroll.refresh();
+     } else {
+     $(document).trigger('spa:openpanel', ['simpleAlert', {
+     message: res.message
+     }]);
+     }
+     });
+     }  */
+
+    /* 在选择主服务或宠物后,筛选附加服务
+     function suitExtraService(me, checkedName) {
+     var newExtraService = product.getExtraServiceList(order.productType, order.petName, checkedName);
+     var extraService = {
+     extraService: newExtraService
+     }
+     var extraServiceTpl = template('placeOrder/list', extraService);
+     var extraServiceTpl2 = template('placeOrder/list2', extraService);
+     me.find('.extra-service-list').html(extraServiceTpl);
+     me.find('.calc-items').html(extraServiceTpl2).addClass('hide');
+
+     cachePageData.extraServicePrice = 0;
+     cachePageData.extraServiceCount = 0;
+     } */
+
+    /* 在选择主服务、附加服务、宠物、时间、地点之后,重置保洁师
+     function resetTech(me) {
+     order.beautician.name = '请选择';
+     order.beautician.id = '';
+     $('.booking-people', me).html(order.beautician.name);
+     }  */
+
+    return {
+        title: '壹管家上门服务',
+        body: '',
+        init: function (pageData, dtd) {
+            var $view = this;
+            var $doc = $(document);
+            /* 三个返回操作 */
+            $.newTouch('.back-button', function (event) {
+                back.call(this, event);
+                // history.go(-1);
+            }, $view);
+            $view.on('tapBackButton', function (event) {
+                back.call(this, event);
+                // history.go(-1);
+            });
+            $view.on('swipeRight', function (event) {
+                back.call(this, event);
+                // history.go(-1);
+            });
+            /*setTimeOut*/
+
+            /* 点击查看详情。跳转到product页面 */
+            $.newTouch('.product-pic-o2o', function (event) {
+                $doc.trigger('spa:navigate', {
+                    hash: 'product',
+                    pushData: {
+                        produc: product,
+                        needReload: true
+                    }
+                });
+            }, $view);
+
+            /*特效*/
+            setInterval(function run() {
+                $('.product-img').fadeToggle();
+            }, 500);
+            /* 点击选择extra。 */
+            $.newTouch('.btn-main-service', function (event) {
+                /* on代表这一条的选中状态。如果已经选中了,就return。this的作用域是这一条extra。 */
+                if ($(this).hasClass('on')) return;
+                /* 如果没有on状态,加上on。 */
+                $(this).addClass('on');
+                /* 删掉其他选择框的on状态 */
+                $(this).parent().siblings().find('.btn').removeClass('on');
+                /* 填写order */
+                order.appendID = $(this).attr('data-extra-type');
+                order.price = $(this).attr('data-extra-price');
+                order.cost = order.price * order.productCount;
+                // 重置代金券
+                $('.coupon-selected-name', $view).html('选择优惠券');
+                order.couponValue = 0;
+                order.couponID = '';
+                payCharge($('.order-cost', $view));
+            }, $view);
+
+            /* 点击选择地址 */
+            $.newTouch('.select-address', function (event) {
+                event.preventDefault();
+                /* 如果是微信客户端,跳转到addressList页面。 */
+                if (!config.isAndroid && !config.isIOS) {
+                    $doc.trigger('spa:navigate', {
+                        hash: 'addressList',
+                        pushData: {
+                            backHash: 'placeOrder'
+                        },
+                        callback: {
+                            /* 在addressList页面挑选之后,回到这个页面时执行的回调。 */
+                            onSelect: function (address, station) {
+                                order.set('address', address, true);
+                                order.set('stationID', station, true);
+
+                                var addressStr = '';
+                                if (order.address.address.poi) {
+                                    addressStr = order.address.address.city + order.address.address.area + order.address.address.poi.name + order.address.address.detail
+                                } else {
+                                    addressStr = order.address.address.province + order.address.address.city + order.address.address.area + order.address.address.detail
+                                }
+                                $('.order-address', $view).html(addressStr);
+                                $('.order-username', $view).html(order.address.name);
+                                $('.order-mobile', $view).html(order.address.mobile);
+                            }
+                        }
+                    });
+                }
+            }, $view);
+
+            /* 点击选择附加服务
+             $.newTouch('.item-checkbox', function (event) {
+             event.preventDefault();
+             // 如果'.main-service'元素的子元素数目为正(也就是说出现了选择主服务那一栏,也就是说在前一页选择的是附加服务),且不处于on状态(也就是还没有选择主服务)
+             if ($('.main-service', $view).length && !$('.main-service', $view).find('.btn-main-service').hasClass('on')) {
+             // 弹出一个对话框
+             $doc.trigger('spa:openpanel', ['simpleAlert', {
+             message: '请选择服务类型'
+             }]);
+             return;
+             }
+             // $(this).data('xxx'):获取this中data-xxx的数据。
+             // 获取这一条附加服务的相关的数据。select没用,估计是原来想用这个记录选中状态的。
+             var select = $(this).data('select'),
+             id = $(this).data('id'),
+             index = $(this).parent().index(),
+             price = $(this).data('price');
+             extraType = $(this).data('servicetype');
+             // 获取附加服务的总费用。
+             var extraCost = $('.order-cost', $view).attr('data-extra');
+             // 如果原来没有选中这一项,下面就是选中的操作
+             if (!$(this).hasClass('checked')) {
+             // 附加服务数量+1
+             cachePageData.extraServiceCount++;
+             // 保存附加服务的总价格
+             cachePageData.extraServicePrice += parseFloat(price);
+             // 添加checked状态
+             $(this).addClass('checked');
+             var serviceParam = {
+             product_id: id,
+             count: 1
+             }
+             // /为什么是个数组?
+             order.extraService[index] = serviceParam;
+             // 把订单详情中对应的项目添加on属性
+             $('.calc-items', $view).find('.select-extra-service').eq(index).addClass('on');
+             // 计算附加服务的总费用。
+             extraCost = parseFloat(extraCost) + parseFloat(price);
+             $('.order-cost', $view).attr('data-extra', extraCost);
+             }
+             // 如果原来选中了这一项,下面就是取消选中的操作
+             else {
+             // 附加服务数量-1
+             cachePageData.extraServiceCount--;
+             // 保存附加服务的总价格
+             cachePageData.extraServicePrice -= parseFloat(price);
+             // 删除checked属性
+             $(this).removeClass('checked');
+
+             order.extraService[index] = {};
+             // 把订单详情中对应的项目删掉on属性
+             $('.calc-items', $view).find('.select-extra-service').eq(index).removeClass('on');
+             // 计算附加服务的总费用。
+             extraCost = parseFloat(extraCost) - parseFloat(price);
+             $('.order-cost', $view).attr('data-extra', extraCost);
+             }
+             // 根据附加服务的数量,更新订单详情中附加服务模块的显示与隐藏
+             if (cachePageData.extraServiceCount > 0) {
+             $('.calc-items', $view).removeClass('hide');
+             } else {
+             $('.calc-items', $view).addClass('hide');
+             }
+             // 更新订单详情中每一条附加服务的显示与隐藏
+             if ($('.calc-items', $view).find('.select-extra-service').hasClass('on')) {
+             $('.calc-items', $view).removeClass('hide');
+             } else {
+             $('.calc-items', $view).addClass('hide');
+             }
+             // 计算总价钱
+             payCharge();
+             // 刷新界面
+             pageData.scroll.refresh();
+             }, $view); */
+
+            /* 点击选择保洁师
+             $.newTouch('.show-beautician-picker', function (event) {
+             // 如果订单的地址数据为空
+             if (!order.address || !order.address.address_id) {
+             // 弹出提示框
+             $doc.trigger('spa:openpanel', ['simpleAlert', {
+             message: '请选择地址'
+             }]);
+             return;
+             }
+             // 点击订单的预定时间为空
+             if (order.bookingDate == '' || order.bookingTime == '') {
+             // 弹出提示框
+             $doc.trigger('spa:openpanel', ['simpleAlert', {
+             message: '请选择上门时间'
+             }]);
+             return;
+             }
+             // 点击订单的主服务类型为空
+             if (!order.productType) {
+             // /弹出提示框
+             $doc.trigger('spa:openpanel', ['simpleAlert', {
+             message: '请选择服务类型'
+             }]);
+             return;
+             }
+             // 生成预定时间的字符串
+             var bookingTime = order.bookingDate + ' ' + order.bookingTime + ':00';
+             // 生成所有服务的字符串
+             var service_type_array = [order.productType];
+             var service_type = '[' + service_type_array.join(',') + ']';
+             // 根据服务、时间、地址,向服务器请求保洁师列表
+             user.getTechList(
+             service_type,
+             bookingTime,
+             order.address.address_id,
+             // 请求成功后跳转到beautician页面,在beautician页面展示保洁师列表
+             function (res) {
+             $doc.trigger('spa:navigate', {
+             hash: 'beautician',
+             pushData: {
+
+             }
+             });
+             }
+             );
+             }, $view);  */
+
+            /* 点击选择宠物相关
+             $.newTouch('.show-product-picker', function () {
+             // 如果有了selected属性,就return
+             if ($(this).hasClass('selected')) return;
+             event.preventDefault();
+             // 主服务>10是什么意思???
+             if (cachePageData.productType > 10) {
+             $doc.trigger('spa:openpanel', ['simpleAlert', {
+             message: '请选择服务类型'
+             }]);
+             return;
+             }
+             // 弹出一个列表选择框。
+             $doc.trigger('spa:openpanel', ['productOption', {
+             pets: product.productGroup[cachePageData.productType],
+             productType: cachePageData.productType,
+             callback: {
+             onSelect: function (petName, petWeight, petPrice) {
+             // set order info
+             order.petName = petName;
+             order.petWeight = petWeight;
+             order.petPrice = petPrice;
+             order.productType = cachePageData.productType;
+             order.petID = cart['products'][cachePageData.productType]['petID'];
+             order.productID = cart['products'][cachePageData.productType]['productID'];
+             // user.orderCoupons = res.data;
+             // 筛选附加服务
+             if (cachePageData.extraServiceType > 10) {
+             var selectExtraServiceName = cachePageData.defaultExtraService[cachePageData.extraServiceType].serviceName;
+             var selectExtraServicePrice = cachePageData.defaultExtraService[cachePageData.extraServiceType].servicePrice;
+
+             $('.order-cost', $view).attr('data-extra', selectExtraServicePrice);
+             }
+
+             suitExtraService($view, selectExtraServiceName);
+
+             $('.pet-info', $view).html(petName + ' (' + petWeight + ')');
+             $('.pet-type', $view).html(petName + ' (' + petWeight + ')');
+             $('.total-cost', $view).html('¥' + petPrice);
+
+             if ($('.calc-items', $view).find('.select-extra-service').hasClass('on')) {
+             $('.calc-items', $view).removeClass('hide');
+             petPrice = parseFloat(petPrice) + parseFloat(selectExtraServicePrice);
+             }
+
+             $('.order-cost', $view).attr('data-costs', order.petPrice);
+             $('.order-cost', $view).attr('data-extra', cachePageData.extraServicePrice);
+             $('.order-cost', $view).html('¥' + petPrice);
+
+             $('.select-pet', $view).removeClass('hide');
+
+             if (order['productID'] && order.bookingDate) {
+             setCoupon($view, pageData, cachePageData.extraServicePrice);
+             }
+
+             pageData.scroll.refresh();
+             }
+             }
+             }]);
+             }, $view); */
+
+            /* 点击数量-1 */
+            $.newTouch('.btn-sub', function (event) {
+                if (order.productCount <= 1) return;
+                if (order.price == 0) {
+                    $doc.trigger('spa:openpanel', ['simpleAlert', {
+                        message: '请选择服务'
+                    }]);
+                    return;
+                }
+                var inputNum = $('.service-count', $view).children('.input-num').val();
+                if (isNaN(inputNum)) {
+                    $doc.trigger('spa:openpanel', ['simpleAlert', {
+                        message: '请输入数字'
+                    }]);
+                    return false;
+                }
+                order.productCount = inputNum;
+                order.productCount--;
+                order.cost = order.productCount * order.price;
+                $('.service-count', $view).children('.input-num').val(order.productCount);
+                /* 算账 */
+                payCharge($('.order-cost', $view));
+            }, $view);
+
+            /*点击body重置金额*/
+            $.newTouch('body', function (event) {
+                //input输入
+                var inputNum = $('.service-count', $view).children('.input-num').val();
+                if (isNaN(inputNum)) {
+                    $doc.trigger('spa:openpanel', ['simpleAlert', {
+                        message: '请输入数字'
+                    }]);
+                    return false;
+                }
+                //与input输入框的文本的数据做交互;
+                order.productCount = inputNum;
+                order.cost = order.productCount * order.price;
+                $('.service-count', $view).children('.input-num').val(order.productCount);
+            })
+
+            /* 点击数量+1 */
+            $.newTouch('.btn-add', function (event) {
+                if (order.productCount > 999) return;
+                if (order.price == 0) {
+                    $doc.trigger('spa:openpanel', ['simpleAlert', {
+                        //message: '请选择extra'
+                        message: '请选择服务'
+                    }]);
+                    return;
+                }
+                var inputNum = $('.service-count', $view).children('.input-num').val();
+                if (isNaN(inputNum)) {
+                    $doc.trigger('spa:openpanel', ['simpleAlert', {
+                        message: '请输入数字'
+                    }]);
+                    return false;
+                }
+                order.productCount = inputNum;
+                order.productCount++;
+                order.cost = order.productCount * order.price;
+                $('.service-count', $view).children('.input-num').val(order.productCount);
+                /* 算账 */
+                payCharge($('.order-cost', $view));
+            }, $view);
+
+            /* 点击选择时间 */
+            $.newTouch('.show-time-picker', function (event) {
+                event.preventDefault();
+                // 以下是构建时间选择器,不用管。直接看选完之后的回调。
+                var dayNamesA = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
+                var dayNamesB = ['今天'];
+                var columns = {
+                    columnDay: [],
+                    columnTime: []
+                };
+                var now = new Date().getHours();
+                var daySelectIndex = 0;
+                for (var i = 1; i <= 9; i++) {
+                    var dd = new Date();
+                    dd.setDate(dd.getDate() + i);
+
+                    var month = dd.getMonth() + 1;
+                    var day = dd.getDate();
+                    var date = month + '月' + day + '日';
+
+                    var dayStr = helper.getDateStr({
+                        date: dd,
+                        separator: '-'
+                    });
+
+                    var dayStrSuffix;
+                    if (i < dayNamesB.length) {
+                        dayStrSuffix = dayNamesB[i];
+                    } else {
+                        dayStrSuffix = dayNamesA[dd.getDay()];
+                    }
+                    var selected = false;
+                    if (order.bookingDate) {
+                        selected = true;
+                    }
+                    if (dayStr == order.bookingDate) {
+                        daySelectIndex = i;
+                    } else {
+                        daySelectIndex = -1;
+                    }
+                    columns.columnDay.push({
+                        text: date, // 几月几日
+                        day: dayStrSuffix, // 周几
+                        value: dayStr,
+                        selected: selected,
+                        selectIndex: daySelectIndex
+                    });
+                }
+
+                var currentDate = new Date();
+                var currentMonth = currentDate.getMonth() + 1;
+                var currentDay = currentDate.getDate();
+                var now = new Date().getHours();
+                var min = new Date().getMinutes();
+                var timeSelectIndex = 0;
+                for (var i = 9; i <= 19; i++) {
+                    var hour = i + ':00';
+                    var selected = false;
+                    if (order.bookingTime) {
+                        selected = true;
+                    }
+                    if (hour == order.bookingTime) {
+                        timeSelectIndex = i;
+                    } else {
+                        timeSelectIndex = -1;
+                    }
+                    columns.columnTime.push({
+                        month: currentMonth,
+                        day: currentDay,
+                        min: min,
+                        num: i,
+                        now: now,
+                        text: hour,
+                        value: hour,
+                        selected: selected,
+                        selectIndex: timeSelectIndex
+                    })
+                }
+                $doc.trigger('spa:openpanel', ['dataPicker', {
+                    // type: cachePageData.productType,
+                    columns: columns,
+                    selected: order.bookingDate,
+                    // offDay: product.offDay,
+                    callback: {
+                        // 选完之后的回调。values:[日期,时间];texts:时间字符串;precedence:是否加急;
+                        onSelect: function (values, texts, precedence) {
+                            // 重置代金券
+                            $('.coupon-selected-name', $view).html('选择优惠券');
+                            order.couponValue = 0;
+                            order.couponID = '';
+                            payCharge($('.order-cost', $view));
+                            // 填写order
+                            order.bookingDate = values[0];
+                            order.bookingTime = values[1];
+                            order.bookingTimeStr = texts[0] + ' ' + texts[1];
+                            order.precedence = precedence;
+                            // 更新预定时间组件
+                            $('.booking-time', $view).html(order.bookingTimeStr);
+                        }
+                    }
+                }]);
+            }, $view);
+
+            /* 点击选择优惠券 */
+            $.newTouch('.show-coupon-picker', function (event) {
+                if ($(this).hasClass('disabled')) return;
+                event.preventDefault();
+
+                var extraJson = '';
+                if (product.extra && !order.appendID) {
+                    $doc.trigger('spa:openpanel', ['simpleAlert', {
+                        message: '请选择服务'
+                    }]);
+                    return;
+                } else {
+                    extraJson = JSON.stringify([{type: order.appendID, price: order.price}]);
+                }
+
+                // 必须先选择时间
+                if (!order.bookingDate) {
+                    $doc.trigger('spa:openpanel', ['simpleAlert', {
+                        message: '请选择服务时间'
+                    }]);
+                    return;
+                }
+
+                // 跳转到picker页面,展示优惠券
+                $doc.trigger('spa:navigate', {
+                    hash: 'picker',
+                    pushData: {
+                        title: '选择优惠券',
+                        backHash: 'placeOrder',
+                        products: JSON.stringify([{
+                            product_id: order.productID,
+                            count: order.productCount
+                        }]),
+                        time: order.bookingDate + ' ' + order.bookingTime + ':00',
+                        type: order.productType,
+                        extraJson: extraJson
+                    },
+                    callback: {
+                        // 在picker页面挑选之后,回到这个页面时执行的回调。pickValue:选中的优惠券的ID;
+                        onSelect: function (pickValue) {
+                            if (pickValue == '') {
+                                $('.coupon-selected-name', $view).text('不使用');
+                                order.couponValue = 0;
+                            } else {
+                                for (var i in user.orderCoupons) {
+                                    var couponInfo = user.orderCoupons[i];
+                                    if (couponInfo.id == pickValue) {
+                                        $('.coupon-selected-name', $view).text(couponInfo['coupon']['name']);
+                                        order.couponValue = couponInfo['coupon']['value'];
+                                        break;
+                                    }
+                                }
+                            }
+                            // 填写order
+                            order.couponID = pickValue;
+                            // 计算总费用
+                            payCharge($('.order-cost', $view));
+                        }
+                    }
+                });
+            }, $view);
+
+            /* 是否选中同意用户协议,关系到下订单按钮是否激活 */
+            $.newTouch('.agreement-touch-area', function (event) {
+                var agreementObj = $('.agreement-checkbox', $view);
+                if (agreementObj.prop('checked')) {
+                    agreementObj.prop('checked', false);
+                    $('.btn-place').addClass('disable');
+                } else {
+                    agreementObj.prop('checked', true);
+                    $('.btn-place').removeClass('disable');
+                }
+            }, $view);
+
+            /* 跳转到agreement页面查看协议 */
+            $.newTouch('.agreement', function (event) {
+                $doc.trigger('spa:navigate', {
+                    hash: 'agreement'
+                });
+            }, $view);
+
+            /* 点击下订单 */
+            $.newTouch('.btn-place', function (event) {
+                event.preventDefault();
+                if ($(this).hasClass('disable')) {
+                    return false;
+                }
+                if (product.type_str == "擦玻璃" && order.productCount < 10) {
+                    $doc.trigger('spa:openpanel', ['simpleAlert', {
+                        message: '数量不少于10平米'
+                    }]);
+                    return;
+                }
+
+                if (product.type_str == "新居开荒" && order.productCount < 50) {
+                    $doc.trigger('spa:openpanel', ['simpleAlert', {
+                        message: '数量不少于50平米'
+                    }]);
+                    return;
+                }
+                if (product.extra && !order.appendID) {
+                    $doc.trigger('spa:openpanel', ['simpleAlert', {
+                        message: '请选择服务'
+                    }]);
+                    return;
+                }
+
+                if (!order.address) {
+                    $doc.trigger('spa:openpanel', ['simpleAlert', {
+                        message: '请选择地址'
+                    }]);
+                    return;
+                }
+
+                if (!order.bookingTimeStr && product.name !== "双11虹口区日常保洁特价体验") {
+                    $doc.trigger('spa:openpanel', ['simpleAlert', {
+                        message: '请选择上门时间'
+                    }]);
+                    return;
+                }
+
+
+                var payChannel = 'wx_pub';
+
+                /* 使备注输入框失去焦点,获取值 */
+                $('.order-memo', $view).blur();
+                order.set('memo', $('.order-memo', $view).val());
+
+                /* 向服务器下订单 */
+                $doc.trigger('spa:openloader');
+                if (user.balance >= order.payValue) {
+                    order.balance = order.payValue;
+                    order.payValue = 0;
+                } else {
+                    order.balance = user.balance;
+                    order.payValue = order.payValue - order.balance;
+                }
+                order.addOrder(user.id, payChannel, function (res) {
+                    console.log(res);
+                    $doc.trigger('spa:closeloader');
+                    if (res.success) {
+                        // 更新user的订单
+                        user.orders[1].data.push(res.data);
+                        // 更新user的优惠券
+                        var oldCouponList = user.orderCoupons;
+                        var oldCouponId = order.couponID;
+                        var newCouponList = [];
+                        $.each(oldCouponList, function (index, val) {
+                            if (val.id !== oldCouponId) {
+                                newCouponList.push(oldCouponList[index])
+                            }
+                        });
+                        user.orderCoupons = newCouponList;
+
+                        var orderID = order.id;
+                        order.reset();
+                        $('.booking-time', $view).html('请选择');
+                        if (res.data.status == 1) {
+                            if (res.data.products_str == '双11虹口区日常保洁特价体验') {
+                                $doc.trigger('spa:navigate', {
+                                    hash: 'bargain'
+                                });
+                            } else {
+                                $doc.trigger('spa:navigate', {
+                                    hash: 'paySuccess'
+                                });
+                            }
+
+                        } else {
+                            $doc.trigger('spa:navigate', {
+                                hash: 'pay',
+                                pushData: {
+                                    orderID: orderID,
+                                    backHash: ''
+                                }
+                            });
+                        }
+                    } else {
+                        $doc.trigger('spa:openpanel', ['simpleAlert', {
+                            message: res.message
+                        }]);
+                    }
+                });
+            }, $view);
+
+            dtd.resolve();
+        },
+        beforeopen: function (pageData, dtd) {
+            var $view = this;
+            var pushData = pageData.pushData;
+          
+            /* 只有首页跳转来,才会带有needReset = true */
+            backHash = pushData.backHash ? pushData.backHash : '';
+            console.log(backHash);
+
+            if (pushData.hasOwnProperty('needReset') && pushData.needReset) {
+                /* 接收首页传来的product,填写order的productType(产品类型)、productID(产品ID)两个字段 */
+                pushData.needReset = false;
+                product = pushData.product;
+
+                order.productType = product.type;
+                order.productID = product.id;
+                order.productCount = 1;
+                order.couponValue = 0;
+                /* 根据product建立渲染页面的数据 */
+                var tmpData = {
+                    /* 环境,目前只决定是否显示保洁师 */
+                    env: config,
+                    /* 环境 */
+                    showNavBar: !config.isWX && !config.isChubao,
+                    imgSrc: product.imgSrc,
+                    /* 标题栏的标题 */
+                    title: product.name,
+                    /* extra选择项 */
+                    extra: product.extra,
+                    /* 如果用户有优惠券,则显示优惠券的选择栏 */
+                    showCoupon: user.orderCoupons.length,
+                    /* 账户余额 */
+                    balance: user.balance
+                };
+                /* 渲染页面 */
+                var tpl = template('placeOrder/index', tmpData);
+                $view.find('.spa-page-body').html(tpl);
+                /* 绑定费用数据 */
+                if (product.extra) {
+                    order.price = 0;
+                    order.cost = 0;
+                } else {
+                    order.price = product.price;
+                    order.cost = product.price * order.productCount;
+                }
+                payCharge($('.order-cost', $view));
+
+                /* 软键盘相关操作时对IScroll的补偿 */
+                fixScroll(pageData);
+                $('.order-memo', $view).focus(function (event) {
+                    var that = this;
+                    checkScroll(pageData, function () {
+                        if (pageData.scroll) {
+                            pageData.scroll.scrollToElement(that, 0);
+                        }
+                    });
+                });
+                $('.order-memo', $view).on('closeKeyboard', function (event) {
+                    checkScroll(pageData);
+                    $(this).blur();
+                });
+                $('.order-memo', $view).blur(function (event) {
+                    checkScroll(pageData);
+                });
+
+                /* 填写备注时,提交按钮失焦 */
+                $('#order-form', $view).on('submit', function (event) {
+                    $(this).blur();
+                    return false;
+                });
+            }
+            dtd.resolve();
+        },
+        afteropen: function (pageData, dtd) {
+            var type = pageData.pushData.productType;
+            native.registerEvent(true);
+            dtd.resolve();
+            if (config.isWX) {
+                wx.ready(function () {
+                    wx.onMenuShareTimeline({
+                        title: '家政服务' + product.desc[1].content + ',首选壹管家',
+                        link: 'http://www.yiguanjia.me/o2o/web/index',
+                        imgUrl: product.desc[0].content
+                    });
+                    wx.onMenuShareAppMessage({
+                        title: '家政服务' + product.desc[1].content + ',首选壹管家',
+                        desc: '全程管家,精心每一个细节',
+                        link: 'http://www.yiguanjia.me/o2o/web/index',
+                        imgUrl: product.desc[0].content
+                    });
+                });
+            }
+        },
+        afterclose: function (pageData) {
+            native.registerEvent(false);
+        }
+    }
 })

+ 1 - 1
www/webapp/o2o/js/page/secondary.js

@@ -68,7 +68,7 @@ define(['$', 'template', 'IScroll', 'user', 'product', 'native', 'config', 'addr
                     pushData: {
                         product: product.allList[type - 1],
                         needReset: true,
-                        backHash:''
+                        backHash:'secondary'
                     }
                 });
             }, $view);

+ 0 - 0
www/webapp/o2o/tpl/extension/index.html


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini