12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001 |
- 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');
- // }
- // }, 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);
- }, $view);
- $view.on('tapBackButton', function (event) {
- back.call(this, event);
- });
- $view.on('swipeRight', function (event) {
- back.call(this, event);
- });
- /* 点击查看详情。跳转到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;
- //这里修改预约日期 提前2天预约
- for (var i = 2; 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.columnTime 中
- 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;
- // 设定工作时间早上9:00 - 晚上 19:00
- 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 中
- 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();
- console.log(order);
- // 判断布艺沙发下单数量少于5套
- if (order.appendID === "布艺沙发") {
- if (order.productCount < 5) {
- $doc.trigger('spa:openpanel', ['simpleAlert', {
- message: '布衣沙发5套起购'
- }]);
- return;
- }
- }
- if ($(this).hasClass('disable')) {
- return false;
- }
- //擦玻璃数量少于10平米
- if (product.type_str == "擦玻璃" && order.productCount < 10) {
- $doc.trigger('spa:openpanel', ['simpleAlert', {
- message: '数量不少于10平米'
- }]);
- return;
- }
- // 新居开慌的数量少于50平米
- if (product.type_str == "新居开荒" && order.productCount < 50) {
- $doc.trigger('spa:openpanel', ['simpleAlert', {
- message: '数量不少于50平米'
- }]);
- return;
- }
- // 民宿保洁的数量少于10平米
- if (product.type_str == "民宿保洁" && order.productCount < 10) {
- $doc.trigger('spa:openpanel', ['simpleAlert', {
- message: '数量不少于10平米'
- }]);
- return;
- }
- //未选择服务
- if (product.extra && !order.appendID) {
- $doc.trigger('spa:openpanel', ['simpleAlert', {
- message: '请选择服务'
- }]);
- return;
- }
- //未选择服务时间
- if (order.bookingTime === "") {
- $doc.trigger('spa:openpanel', ['simpleAlert', {
- message: '请选择服务时间'
- }]);
- return;
- }
- // 地址为空
- if (!order.address) {
- $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(); //清空order内的值
- $('.booking-time', $view).html('请选择');
- // status = 1 表示新增订单添加成功
- if (res.data.status == 1) {
- $doc.trigger('spa:navigate', {
- hash: 'paySuccess'
- });
- } else {
- // 跳转到pay调用微信支付
- $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) {
- /*地址- setInterval-setTimeout*/
- /*地址-setInterval-setTimeout*/
- setTimeout(function () {
- if ($('.booking-time').html() == "选择服务时间" && order.bookingTimeStr.length > 0) {
- $('.booking-time', $view).html(order.bookingTimeStr);
- }
- /*隐藏广告位*/
- // $('.product-pic-o2o').css('display', 'none');
- /*当用户没有地址时*/
- var defaultAddress = address.defaultAddress;
- /*未登录*/
- if (user.id.length == 0) {
- $('.order-mobile').html('添加服务地址');
- } else if (user.id.length != 0 && typeof(defaultAddress) !== "undefined") {
- api.checkAddress({
- address_id: defaultAddress.address_id,
- user_id: user.id
- }, function (res) {
- if (res.success) {
- if ($('.order-username').html() == "") {
- order.address = address.defaultAddress;
- order.stationID = res.data.station;
- $('.order-username').html(defaultAddress.name);
- $('.order-mobile').html(defaultAddress.mobile);
- $('.order-address').html(defaultAddress.address.city + defaultAddress.address.area + defaultAddress.address.detail).css('text-align', 'right');
- }
- } else {
- $('.order-mobile').html('添加服务地址');
- }
- })
- } else if (user.id.length != 0 && typeof(defaultAddress) == "undefined") {
- $('.order-mobile').html('添加服务地址');
- }
- }, 500);
- 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);
- }
- }
- })
|