Authored by 郭成尧

logistic

@@ -51,7 +51,7 @@ exports.orderEnsure = (req, res, next) => { @@ -51,7 +51,7 @@ exports.orderEnsure = (req, res, next) => {
51 headerData.backUrl = returnUrl; 51 headerData.backUrl = returnUrl;
52 } 52 }
53 53
54 - let orderPromise = cartModel.cartPay(uid, cartType, orderInfo, sku, skn, buyNumber); 54 + let orderPromise;
55 let userProfilePromise = userModel.queryProfile(uid); 55 let userProfilePromise = userModel.queryProfile(uid);
56 let addressPromise = addressModel.addressData(uid); 56 let addressPromise = addressModel.addressData(uid);
57 57
@@ -59,6 +59,8 @@ exports.orderEnsure = (req, res, next) => { @@ -59,6 +59,8 @@ exports.orderEnsure = (req, res, next) => {
59 let activityInfo = JSON.parse(req.cookies['activity-info']); 59 let activityInfo = JSON.parse(req.cookies['activity-info']);
60 60
61 orderPromise = cartModel.cartPay(uid, cartType, orderInfo, sku, skn, buyNumber, activityInfo); 61 orderPromise = cartModel.cartPay(uid, cartType, orderInfo, sku, skn, buyNumber, activityInfo);
  62 + } else {
  63 + orderPromise = cartModel.cartPay(uid, cartType, orderInfo, sku, skn, buyNumber);
62 } 64 }
63 65
64 return Promise.all([orderPromise, userProfilePromise, addressPromise]).then(result => { 66 return Promise.all([orderPromise, userProfilePromise, addressPromise]).then(result => {
@@ -70,9 +70,27 @@ const cancelOrder = (req, res, next) => { @@ -70,9 +70,27 @@ const cancelOrder = (req, res, next) => {
70 }).catch(next); 70 }).catch(next);
71 }; 71 };
72 72
  73 +/**
  74 + * 我的订单-查看物流信息
  75 + */
  76 +const logistic = (req, res, next) => {
  77 + orderDetailModel.logistics(req.query.order_code, req.user.uid).then(result => {
  78 + res.render('logistic', _.assign(result, {
  79 + pageHeader: headerModel.setNav({
  80 + navTitle: '订单详情',
  81 + navBtn: false
  82 + }),
  83 + module: 'home',
  84 + page: 'logistic',
  85 + logisticInfoPage: true
  86 + }));
  87 + }).catch(next);
  88 +};
  89 +
73 module.exports = { 90 module.exports = {
74 orderDetailData, 91 orderDetailData,
75 delOrder, 92 delOrder,
76 readdData, 93 readdData,
77 - cancelOrder 94 + cancelOrder,
  95 + logistic
78 }; 96 };
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 2
3 3
4 const api = global.yoho.API; 4 const api = global.yoho.API;
  5 +const serviceApi = global.yoho.ServiceAPI;
5 6
6 const _ = require('lodash'); 7 const _ = require('lodash');
7 8
@@ -10,6 +11,8 @@ const helpers = global.yoho.helpers; @@ -10,6 +11,8 @@ const helpers = global.yoho.helpers;
10 const camelCase = global.yoho.camelCase; 11 const camelCase = global.yoho.camelCase;
11 const logger = global.yoho.logger; 12 const logger = global.yoho.logger;
12 13
  14 +const CODE_LOGISTIC_BANNER = '1fc9b2484fcd559049f2f7e0db313f20'; // 物流详情banner资源码
  15 +
13 const closeReasons = () => { 16 const closeReasons = () => {
14 return api.get('', { 17 return api.get('', {
15 method: 'app.SpaceOrders.closeReasons' 18 method: 'app.SpaceOrders.closeReasons'
@@ -370,10 +373,84 @@ const cancelOrder = (orderCode, uid, reasonId, gender, channel, reason) => { @@ -370,10 +373,84 @@ const cancelOrder = (orderCode, uid, reasonId, gender, channel, reason) => {
370 }); 373 });
371 }; 374 };
372 375
  376 +/*
  377 +* 我的订单-查看物流
  378 +* @param int $orderCode 订单号
  379 +* @param int $uid 用户ID
  380 +* @return array
  381 +*/
  382 +const _logisticsData = (orderCode, uid) => {
  383 + return api.get('', {
  384 + method: 'app.express.li',
  385 + order_code: orderCode,
  386 + uid: uid
  387 + });
  388 +};
  389 +
  390 +/**
  391 + * 获取物流详情页banner
  392 + */
  393 +const _getLogisterBanner = () => {
  394 + return serviceApi.get('operations/api/v5/resource/get', {
  395 + content_code: CODE_LOGISTIC_BANNER
  396 + }, {code: 200});
  397 +};
  398 +
  399 +/**
  400 + * 查看物流
  401 + *
  402 + * @param int orderCode 订单编号
  403 + * @param int uid 用户ID
  404 + * @return array
  405 + */
  406 +const logistics = (orderCode, uid) => {
  407 + return Promise.all([
  408 + _getLogisterBanner(),
  409 + _logisticsData(orderCode, uid),
  410 + ]).then(result => {
  411 + let finalResult = {
  412 + banner: []
  413 + };
  414 + let banners = result[0];
  415 + let logistic = result[1];
  416 +
  417 + // 获取物流详情页banner
  418 + if (banners && banners.data) {
  419 + _.forEach(banners.data, value => {
  420 + _.forEach(value.data, subValue => {
  421 + finalResult.banner.push({
  422 + url: subValue.url,
  423 + img: subValue.src
  424 + });
  425 + });
  426 + });
  427 + }
  428 +
  429 + if (logistic && logistic.data) {
  430 + finalResult.logisticUrl = _.get(logistic, 'data.url', '');
  431 + finalResult.logisticImg = _.get(logistic, 'data.logo', '');
  432 + finalResult.logisticCompany = _.get(logistic, 'data.caption', '');
  433 + finalResult.logisticNumber = _.get(logistic, 'data.express_number', '');
  434 + finalResult.logisticDetail = [];
  435 +
  436 + _.forEach(_.get(logistic, 'data.express_detail', []), value => {
  437 + finalResult.logisticDetail.push({
  438 + status: value.accept_address,
  439 + date: value.acceptTime,
  440 + });
  441 + });
  442 +
  443 + }
  444 +
  445 + return finalResult;
  446 + });
  447 +};
  448 +
373 module.exports = { 449 module.exports = {
374 orderDetailData, 450 orderDetailData,
375 closeReasons, 451 closeReasons,
376 delOrder, 452 delOrder,
377 readdData, 453 readdData,
378 - cancelOrder 454 + cancelOrder,
  455 + logistics
379 }; 456 };
@@ -134,4 +134,6 @@ router.get('/installment/setMasterCard', installment.setMasterCard); // 銝 @@ -134,4 +134,6 @@ router.get('/installment/setMasterCard', installment.setMasterCard); // 銝
134 134
135 router.get('/getaddress.json', addressController.newGetAddress); // TODO 模拟省数据 135 router.get('/getaddress.json', addressController.newGetAddress); // TODO 模拟省数据
136 136
  137 +router.get('/logistic', auth, orderDetailController.logistic); // 查看物流页面
  138 +
137 module.exports = router; 139 module.exports = router;
  1 +<div class="logistic-page yoho-page">
  2 + <div class="overview">
  3 + <div class="left" >
  4 + <a href="{{logisticUrl}}"><img class="icon" src="{{logisticImg}}" /></a>
  5 + </div>
  6 + <div class="right">
  7 + <div>
  8 + <span class='info'>物流公司:</span>
  9 + <span >{{logisticCompany}}</span>
  10 + </div>
  11 + <div>
  12 + <span class='info'>快递单号:</span>
  13 + <span>{{logisticNumber}}</span>
  14 + </div>
  15 + </div>
  16 +
  17 + </div>
  18 +
  19 + <div class="title">
  20 + <span>物流详情</span>
  21 + </div>
  22 +
  23 + <div class="detail">
  24 + {{# logisticDetail}}
  25 + <div class="timeline-box ">
  26 + <span class="timeline-node"></span>
  27 + <div class="timeline-info">
  28 + <div class="timeline-info-row">
  29 + {{status}}
  30 + </div>
  31 + <div class="timeline-info-row">
  32 + {{date}}
  33 + </div>
  34 + </div>
  35 + </div>
  36 + {{/ logisticDetail}}
  37 + </div>
  38 +
  39 + <div class="banner">
  40 + {{#banner}}
  41 + <a href="{{url}}">
  42 + <img src="{{image2 img w=640 h=200}}" alt="img">
  43 + </a>
  44 + {{/banner}}
  45 + </div>
  46 +
  47 + {{#unless @root.wap.ucenter.removePrefer}}
  48 + {{> common/recommend-for-you}}
  49 + {{/unless}}
  50 +</div>
  1 +/**
  2 + * 物流信息页面
  3 + * @author: 赵彪<bill.zhao@yoho.cn>
  4 + * @date: 2015/12/02
  5 + */
  6 +
  7 +var $ = require('yoho-jquery');
  8 +
  9 +var $footer = $('#yoho-footer'),
  10 + winH = window.outerHeight,
  11 + bodyH = document.body.offsetHeight,
  12 + footH = $footer.height();
  13 +
  14 +require('../common');
  15 +function addFooterTopBorder() {
  16 + if (footH + bodyH > winH) {
  17 + window.rePosFooter();
  18 + } else {
  19 + $footer.css('border-top', '1px solid #f1f1f1');
  20 + }
  21 +}
  22 +
  23 +$(document).ready(addFooterTopBorder);
  24 +
  25 +require('./recommend-for-you-user-center');
  26 +
  27 +// 提前触发lazyload
  28 +$(window).scrollTop(1).scrollTop(0);