address.js 5.16 KB
/**
 * @author: jiangmin
 * @date: 2016/07/05
 */

'use strict';
const mcHandler = require('../models/menu-crumb-handler');
const addressModel = require('../models/address');
const cleanHtml = require(`${global.utils}/cleanHtml`);
const crypto = global.yoho.crypto;
const config = global.yoho.config;
const logger = global.yoho.logger;

const _ = require('lodash');

/**
 * 默认地址
 */
const _setDefault = (id, uid) => {
    return addressModel.setDefaultAddress(id, uid).then(result => result);
};

/**
 * 收货地址页面加载
 */
const index = (req, res, next) => {
    let uid = req.user.uid;

    Promise.all([addressModel.getAddressDataAsync(uid, 20), mcHandler.getMeThumb()]).then(result => {
        let resultData = result[0].data ? result[0].data : [];
        let length = resultData.length > 7 ? 7 : resultData.length;
        let reg = /(\d{3})\d{4}(\d{4})/;
        let thumb = result[1];

        for (let i = 0; i < length; i++) {
            resultData[i].default = resultData[i].is_default === 'Y';
            resultData[i].mobile = resultData[i].mobile.replace(reg, '$1****$2');
            resultData[i].id = crypto.encryption(config.crypto.common, resultData[i].address_id + '');
            resultData[i].address = cleanHtml.htmlDecode(resultData[i].address);
        }
        resultData.leftLength = 7 - length;
        resultData.length = length;

        res.display('index', {
            module: 'me',
            page: 'address',
            isMe: true,
            content: {
                nav: mcHandler.getMeCrumb('收货地址'),
                navigation: mcHandler.getSideMenu('收货地址'),
                banner: thumb,
                address: true,
                title: '收货地址',
                data: resultData
            }
        });
    }).catch(next);
};

const getAddressList = (req, res, next) => {
    addressModel.getAddressDataAsync(req.user.uid, 20).then(result => {
        if (result.data) {
            let defaultAd = _.find(result.data, o => o.is_default === 'Y');

            _.each(result.data, (d) => {
                d.address_id = crypto.encryption(config.crypto.common, d.address_id + '');
                d.address = cleanHtml.htmlDecode(d.address);
                d.complete_mobile = d.mobile;
                d.mobile = d.mobile.substr(0, 3) + '****' + d.mobile.substr(7);
            });

            defaultAd && (defaultAd.focus = true);
        }
        res.send(result);
    }).catch(next);
};

/**
 * 添加地址
 */
const addAddressData = (req, res, next) => {
    let uid = req.user.uid;
    let address = cleanHtml.htmlEncode(req.body.address);
    let areaCode = req.body.area_code;
    let consignee = req.body.consignee;
    let mobile = req.body.mobile;
    let phone = req.body.phone;

    let isInit = req.body.init && req.body.init === 'true'; // 是否是初始地址

    addressModel.addAddressData(uid, address, areaCode, consignee, mobile, phone, isInit).then(result => {
        if (result.data && result.data.address_id) {
            result.data.address_id = crypto.encryption(config.crypto.common, result.data.address_id + '');
            result.data.aid = result.data.address_id;
        }

        res.send(result);
    }).catch(next);
};

/**
 * 修改地址
 */
const updateAddressData = (req, res, next) => {
    logger.info(`address update, address_id decrypt. address_id = ${req.body.id}`);

    let id = crypto.decrypt(config.crypto.common, req.body.id);
    let uid = req.user.uid;
    let address = cleanHtml.htmlEncode(req.body.address);
    let areaCode = req.body.area_code;
    let consignee = req.body.consignee;
    let mobile = req.body.mobile;
    let phone = req.body.phone;

    addressModel.updateAddressData(id, uid, address, areaCode, consignee, mobile, phone).then(result => {
        res.send(result);
    }).catch(next);
};

/**
 * 删除地址
 */
const delAddressData = (req, res, next) => {
    logger.info(`address delete, address_id decrypt. address_id = ${req.body.id}`);

    let id = crypto.decrypt(config.crypto.common, req.body.id);
    let uid = req.user.uid;

    addressModel.delAddressData(id, uid).then(result => {
        res.send(result);
    }).catch(next);
};

/**
 * 设置默认地址
 */
const setDefaultAddress = (req, res) => {
    logger.info(`address set default, address_id decrypt. address_id = ${req.body.id}`);

    let id = crypto.decrypt(config.crypto.common, req.body.id);
    let uid = req.user.uid;

    _setDefault(id, uid).then(result => {
        res.send(result);
    });
};

/**
 * 获取地址信息
 * @function getAddressData
 * @return { Object }
 */
const getAddressData = (req, res) => {
    addressModel.getAddressData(req.params.areaId).then(result => {
        if (result.code === 200) {
            result.data = result.data.map((item) => {
                return {
                    is_support: item.is_support_express,
                    text: item.caption,
                    value: item.id
                };
            });
            res.json(result);
        } else {
            res.json(result);
        }
    });
};

module.exports = {
    index,
    getAddressList,
    addAddressData,
    updateAddressData,
    delAddressData,
    setDefaultAddress,
    getAddressData
};