order.js 2.98 KB
/**
 * 订单 controller
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2016/07/04
 */

'use strict';

const orderModel = require('../models/order');
const cleanHtml = require(`${global.utils}/cleanHtml`);

const _ = require('lodash');

const helper = global.yoho.helpers;
const crypto = global.yoho.crypto;
const config = global.yoho.config;

// 结算页面
const index = (req, res, next) => {
    orderModel.index(req.user.uid).then(result => {
        let data = result.data;

        if (data.goods_list && data.goods_list.length > 0) {
            // 设置头部路径索引focus
            data.bcNavFocus = 2;

            data.delivery_way = _.concat(_.find(data.delivery_way, {
                delivery_way_id: 1
            }));

            // 发票抬头
            data.invoices.invoiceTitle = [{
                name: '个人',
                value: 1,
                myClass: 'personal'
            }, {
                name: '单位',
                value: 2
            }];

            // 返回购物车链接
            data.goCartLink = helper.urlFormat('/shopping/cart');

            // 拆单是否显示左右切换
            _.forEach(data.shopping_cart_data.package_list, i => {
                if (i.goods_list.length > 4) {
                    i.showToggle = true;
                }
            });

            // 是否打印价格radio
            data.printPriceRadio = [{
                value: '1',
                name: '是'
            }, {
                value: '0',
                name: '否',
                checked: true
            }];

            if (data.delivery_address) {
                data.delivery_address.address = cleanHtml.htmlDecode(data.delivery_address.address);
            }

            res.header('Cache-Control', 'no-store');
            res.display('order', {
                content: data,
                defaultHeader: false
            });
        } else {
            res.redirect('/shopping/cart');
        }

    }).catch(next);
};

// 订单金额计算
const compute = (req, res, next) => {
    orderModel.compute(req.user.uid, req.query.coin).then(result => {
        res.send(result);
    }).catch(next);
};

// 订单提交
const orderSub = (req, res, next) => {
    var other = req.body;

    // 参数校验
    if (!other.address_id) {
        res.send({
            code: 500,
            message: '配送地址不能为空'
        });
        return;
    } else {
        other.address_id = crypto.decrypt(config.crypto.common, other.address_id);
    }

    other.remark = cleanHtml.htmlEncode(other.remark);
    other.invoices_title = cleanHtml.htmlEncode(other.invoices_title);

    orderModel.submit(req.user.uid, other).then(result => {

        // 拼接地址
        if (result.code === 200) {
            result.data.payUrl = helper.urlFormat('/shopping/pay/online', {
                code: result.data.order_code
            });
        }
        res.send(result);
    }).catch(next);
};

module.exports = {
    index,
    compute,
    orderSub
};