123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881 |
- 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) {
- if (pageData.scroll) {
- pageData.scroll.destroy();
- pageData.scroll = null;
- }
- var placeOrderScroll;
- setTimeout(function () {
- pageData.scroll = new IScroll('#placeOrderScroll');
- }, 50);
- }
- /* 算账。 */
- function payCharge($orderCost) {
- // 原价
- var cost = $orderCost.data('cost');
- // 优惠
- var coupon = $orderCost.data('coupon');
- // 结算
- var pay = parseFloat(cost) - parseFloat(coupon);
- $orderCost.data('pay', pay);
- $orderCost.text('¥' + pay);
- }
- /* 也是自动选取最大优惠券的操作,只是与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);
- }, $view);
- $view.on('tapBackButton', function (event) {
- back.call(this, event);
- });
- $view.on('swipeRight', function (event) {
- back.call(this, event);
- });
- /* 点击查看详情。跳转到product页面 */
- $.newTouch('.product-pic', function (event) {
- $doc.trigger('spa:navigate', {
- hash: 'product',
- pushData: {
- needReload: true
- }
- });
- }, $view);
- /* 点击选择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;
- /* 算账 */
- var $orderCost = $('.order-cost', $view);
- $orderCost.data('cost', order.cost);
- payCharge($orderCost);
- }, $view);
- /* 点击选择地址 */
- $.newTouch('.select-address', function (event) {
- event.preventDefault();
- /* 如果是微信客户端,跳转到addressList页面。 */
- if (!config.isAndroid && !config.isIOS) {
- $doc.trigger('spa:navigate', {
- hash: 'addressList',
- pushData: {
- needReload: true
- },
- 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;
- order.productCount--;
- order.cost = order.productCount * product.price;
- $('.service-count', $view).find('.num').html(order.productCount);
- /* 算账 */
- var $orderCost = $('.order-cost', $view);
- $orderCost.data('cost', order.cost);
- payCharge($orderCost);
- }, $view);
- /* 点击数量+1 */
- $.newTouch('.btn-add', function (event) {
- if (order.productCount >= 99) return;
- order.productCount++;
- order.cost = order.productCount * product.price;
- $('.service-count', $view).find('.num').html(order.productCount);
- /* 算账 */
- var $orderCost = $('.order-cost', $view);
- $orderCost.data('cost', order.cost);
- payCharge($orderCost);
- }, $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 = 0; 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) {
- // var couponValue = 0;
- // var precedenceCost = product.precedence;
- // if (order.couponID) {
- // couponValue = user.getCouponValue(order.couponID);
- // }
- // 根据是否加急更新订单详情中的加急模块
- // if (precedence) {
- // $('.select-precedence', $view).removeClass('hide').find('.precedence-cost').html('¥' + precedenceCost);
- // $('.order-cost', $view).attr('data-precedence', precedenceCost);
- // } else {
- // $('.select-precedence', $view).addClass('hide').find('.precedence-cost').html('¥ 0');
- // $('.order-cost', $view).attr('data-precedence', '0');
- // }
- // 填写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();
- // 必须先选择时间
- if (!order.bookingDate) {
- $doc.trigger('spa:openpanel', ['simpleAlert', {
- message: '请选择服务时间'
- }]);
- return;
- }
- // 获取用户的优惠券
- var coupons = $.extend(true, [], user.orderCoupons);
- // /这不知道是干什么的
- for (var i in coupons) {
- if (coupons[i]['id'] == order.couponID) {
- coupons[i]['selected'] = true;
- break;
- }
- }
- // 跳转到picker页面,展示优惠券
- $doc.trigger('spa:navigate', {
- hash: 'picker',
- pushData: {
- options: coupons,
- unuseables: user.unuseable_coupons,
- temp: 'picker/coupon',
- title: '选择优惠券',
- backHash: 'placeOrder',
- pickType: 'coupon',
- products: JSON.stringify([{
- product_id: order.productID,
- count: 1
- }]),
- type: order.productType,
- needReload: true
- },
- callback: {
- // 在picker页面挑选之后,回到这个页面时执行的回调。pickValue:选中的优惠券的ID;
- onSelect: function (pickValue) {
- var $orderCost = $('.order-cost', $view);
- if (pickValue == '') {
- $('.coupon-selected-name', $view).html('不使用');
- // $('.select-coupon', $view).addClass('hide');
- $orderCost.data('coupon', '0');
- } else {
- $('.coupon-selected-name', $view).html(user.getCouponName(pickValue));
- // $('.select-coupon', $view).removeClass('hide').find('.coupon-cost').html('- ' + couponValue);
- $orderCost.data('coupon', user.getCouponValue(pickValue));
- }
- // 填写order
- order.couponID = pickValue;
- // 计算总费用
- payCharge($orderCost);
- }
- }
- });
- }, $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.extra.length && !order.appendID) {
- $doc.trigger('spa:openpanel', ['simpleAlert', {
- message: '请选择extra'
- }]);
- return;
- }
- if (!order.address) {
- $doc.trigger('spa:openpanel', ['simpleAlert', {
- message: '请选择地址'
- }]);
- return;
- }
- if (!order.bookingTimeStr) {
- $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');
- order.balance = user.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 */
- 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;
- if (!product.extra.length){
- order.price = product.price;
- order.cost = product.price * order.productCount;
- }
- /* 根据product建立渲染页面的数据 */
- var tmpData = {
- /* 环境,目前只决定是否显示保洁师 */
- env: config,
- /* 环境 */
- showNavBar: !config.isWX && !config.isChubao,
- /* 标题栏的标题 */
- title: product.type_str,
- /* 是否显示extra选择项 */
- showExtra: product.extra.length,
- /* extra选择项 */
- extra: product.extra,
- /* 如果用户有优惠券,则显示优惠券的选择栏 */
- showCoupon: user.orderCoupons.length,
- /* 账户余额 */
- balance: user.balance
- };
- /* 渲染页面 */
- var tpl = template('placeOrder/index', tmpData);
- $view.find('.spa-page-body').html(tpl);
- /* 绑定费用数据 */
- var $orderCost = $('.order-cost', $view);
- if (product.extra.length){
- $orderCost.data('cost', '0');
- }else {
- $orderCost.data('cost', product.price);
- }
- $orderCost.data('coupon', '0');
- payCharge($orderCost);
- /* 软键盘相关操作时对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);
- }
- }
- })
|