Przeglądaj źródła

placeOrder默认显示地址

洪海涛 8 lat temu
rodzic
commit
21197782e0

Plik diff jest za duży
+ 69 - 61
www/webapp/o2o/css/placeOrder.css


Plik diff jest za duży
+ 0 - 0
www/webapp/o2o/dist/css/main.css


Plik diff jest za duży
+ 0 - 0
www/webapp/o2o/dist/js/build/template.js


Plik diff jest za duży
+ 0 - 0
www/webapp/o2o/dist/js/main.js


+ 1 - 1
www/webapp/o2o/dist/js/page/address/addressList.js

@@ -1 +1 @@
-define(["$","template","native","config","address","user","api","order"],function(e,t,n,r,i,s,o,u){function a(t,n){t.preventDefault(),e(document).trigger("spa:navigate",{hash:n})}return{title:"壹管家上门服务",body:"",init:function(t,n){var r=this,u=e(document);e.newTouch(".back-button",function(e){a.call(this,e,t.pushData.backHash)},r),r.on("tapBackButton",function(e){a.call(this,e,t.pushData.backHash)}),r.on("swipeRight",function(e){a.call(this,e,t.pushData.backHash)}),e.newTouch(".address-item",function(n){var a=e(this).data("id"),f=e(this).data("index");o.checkAddress({address_id:a,user_id:s.id},function(n){n.success?(r.trigger("tapBackButton"),t.callback&&e.isFunction(t.callback.onSelect)&&t.callback.onSelect(i.list[f],n.data.station)):u.trigger("spa:openpanel",["simpleAlert",{message:n.message}])})},r),e.newTouch(".btn-add",function(e){u.trigger("spa:navigate",{hash:"addressAdd",pushData:{needReload:!0}})},r),e.newTouch(".btn-edit",function(t){var n=e(this).data("id"),r=e(this).data("index");u.trigger("spa:navigate",{hash:"addressDetail",pushData:{addressIndex:r,addressID:n,needReload:!0},callback:{onEdit:function(e){}}})},r),n.resolve()},beforeopen:function(n,s){var o=this,u=t("address/list/index",{showNavBar:!r.isWX&&!r.isChubao,addText:"添加地址",addresses:i.list});e(".spa-page-body",o).html(u),s.resolve()},afteropen:function(e,t){t.resolve()}}});
+define(["$","template","native","config","address","user","api","order"],function(e,t,n,r,i,s,o,u){function a(t,n){t.preventDefault(),e(document).trigger("spa:navigate",{hash:n})}return{title:"壹管家上门服务",body:"",init:function(t,n){var r=this,u=e(document);e.newTouch(".back-button",function(e){a.call(this,e,t.pushData.backHash)},r),r.on("tapBackButton",function(e){a.call(this,e,t.pushData.backHash)}),r.on("swipeRight",function(e){a.call(this,e,t.pushData.backHash)}),e.newTouch(".address-item",function(n){var a=e(this).data("id"),f=e(this).data("index");console.log(a),o.checkAddress({address_id:a,user_id:s.id},function(n){n.success?(r.trigger("tapBackButton"),t.callback&&e.isFunction(t.callback.onSelect)&&t.callback.onSelect(i.list[f],n.data.station)):u.trigger("spa:openpanel",["simpleAlert",{message:n.message}])})},r),e.newTouch(".btn-add",function(e){u.trigger("spa:navigate",{hash:"addressAdd",pushData:{needReload:!0}})},r),e.newTouch(".btn-edit",function(t){var n=e(this).data("id"),r=e(this).data("index");u.trigger("spa:navigate",{hash:"addressDetail",pushData:{addressIndex:r,addressID:n,needReload:!0},callback:{onEdit:function(e){}}})},r),n.resolve()},beforeopen:function(n,s){var o=this,u=t("address/list/index",{showNavBar:!r.isWX&&!r.isChubao,addText:"添加地址",addresses:i.list});e(".spa-page-body",o).html(u),s.resolve()},afteropen:function(e,t){t.resolve()}}});

Plik diff jest za duży
+ 0 - 0
www/webapp/o2o/dist/js/page/placeOrder.js


Plik diff jest za duży
+ 0 - 1
www/webapp/o2o/js/build/template.js


+ 1 - 0
www/webapp/o2o/js/page/address/addressList.js

@@ -30,6 +30,7 @@ define(['$', 'template', 'native', 'config', 'address', 'user', 'api', 'order'],
             $.newTouch('.address-item', function (event) {
                 var addressID = $(this).data('id'),
                     addressIndex = $(this).data('index');
+	            console.log(addressID);
                 /* 检查用户的地址是否在服务站内 */
                 api.checkAddress({
                     address_id: addressID,

+ 962 - 952
www/webapp/o2o/js/page/placeOrder.js

@@ -1,955 +1,965 @@
 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;
-    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) {
-                    $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 : '';
-
-            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) {
+					$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) {
+							$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 : '';
+
+			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 defaultAddress = address.defaultAddress;
+			if (typeof(defaultAddress) == "undefined") {
+				$('.order-mobile').html('添加服务地址');
+			}
+			/*当用户有地址时*/
+			if (typeof(defaultAddress) !== "undefined") {
+				$('.order-username').html(defaultAddress.name);
+				$('.order-mobile').html(defaultAddress.mobile);
+				$('.order-address').html(defaultAddress.address.city + defaultAddress.address.area + defaultAddress.address.detail);
+				$('.order-address').css('text-align', 'right');
+			}
+			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);
+		}
+	}
 })

+ 3 - 2
www/webapp/o2o/tpl/placeOrder/index.html

@@ -54,10 +54,11 @@
                                     <div class="table-view-cell-right-label media-body has-address"
                                          style="display: block; position: static;">
                                         <span class="order-username"></span>
-                                        <span class="order-mobile">添加服务地址</span>
-
+                                        <span class="order-mobile"></span>
                                         <p class="order-address"></p>
+
                                     </div>
+
                                 </a>
                             </li>
                             <li class="table-view-cell table-link-label">

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików