address-service.js 6.44 KB
/**
 * 个人中心---地址管理
 * @author gaohongwei <hongwei.gao@yoho.cn>
 * @date: 2016/9/5
 */
'use strict';
const Promise = require('bluebird');
const co = Promise.coroutine;
const _ = require('lodash');
const AddressApi = require('./address-api');

module.exports = class extends global.yoho.BaseModel {
    constructor(ctx) {
        super(ctx);
    }

    /*
     * 个人中心-地址管理列表
     *
     * @param int $uid 用户ID
     * @return array|mixed 处理之后的返回数据
     *
     */
    getAddressList(uid, limit) {
        let that = this;

        return co(function*() {
            let addressDataModel = new AddressApi(that.ctx);
            let result = [],
                addressData = yield addressDataModel.addressData(uid, limit);

            if (addressData.data) {
                let addressList = addressData.data;

                for (let i = 0; i < addressList.length; i++) {
                    let phone = _.get(addressList[i], 'phone') === 'null' ? '' : addressList[i].phone;
                    let zipCode = _.get(addressList[i], 'zip_code') === 'null' ? '' : addressList[i].zip_code;

                    result.push({
                        id: addressList[i].address_id || '',
                        addressee: addressList[i].consignee || '',
                        address: addressList[i].area + addressList[i].address + ' ' + zipCode,
                        phone: (addressList[i].mobile || '') + ' ' + phone,
                        isPreferred: addressList[i].is_default === 'Y' ? 'true' : ''// 默认地址
                    });
                }
            }
            return result;
        })();
    }

    /**
     * 地址管理列表
     */
    getAddressInfo(uid) {
        let that = this;

        return co(function*() {
            let resq = {},
                addressList = yield that.getAddressList(uid);

            resq.address = {
                submitId: 'address-info',
                addressList: addressList,
                data: [{
                    key: 'addressName',
                    labelText: '收货人姓名:',
                    value: '',
                    tips: '请输入收货人姓名'
                }, {
                    isSelect: true,
                    labelText: '省份:',
                    tipsUrl: '/help/?category_id=48',
                    selects: [{
                        key: 'province'
                    },
                    {
                        key: 'city'
                    },
                    {
                        key: 'areaCode'
                    },
                    {
                        key: 'streets'
                    }
                    ]
                }, {
                    key: 'address',
                    labelText: '地址:',
                    value: '',
                    tips: '请填写详细地址'
                }, {
                    key: 'zipCode',
                    labelText: '邮编:',
                    value: '',
                    tips: '请输入收货人所在地邮编号'
                }, {
                    key: 'phone',
                    labelText: '固定电话:',
                    value: '',
                    tips: '请输入你的联系电话,可以为空哦'
                }, {
                    key: 'mobile',
                    labelText: '手机号码:',
                    value: '',
                    tips: '填写手机号便于接收发货和收货通知'
                }]
            };

            return resq;
        })();
    }

    /**
     * 编辑修改地址
     */
    editAddress(params, uid) {
        let that = this;

        return co(function*() {

            let id = params.id,
                respData = {};
            let addressDataModel = new AddressApi(that.ctx);

            let data = yield addressDataModel.addressData(uid);

            respData.code = data.code;

            // 获取该用户对应的地址id数据
            if (data.data) {
                let addressList = data.data;

                for (let i = 0; i < addressList.length; i++) {
                    if (addressList[i].address_id === id) {
                        addressList[i].phone = _.get(addressList[i], 'phone') === 'null' ?
                            '' : addressList[i].phone;
                        addressList[i].zip_code = _.get(addressList[i], 'zip_code') === 'null' ?
                            '' : addressList[i].zip_code;
                        respData.data = addressList[i];
                        break;
                    }
                }
            }
            if (!('data' in respData)) {
                respData.message = '无数据返回';
            }

            return respData;
        })();
    }

    /**
     * 添加保存地址
     */
    saveAddress(params, uid) {
        let that = this;

        return co(function*() {
            let query = {
                uid: uid,
                address: _.trim(params.address || ''),
                area_code: _.trim(params.streets || ''),
                consignee: _.trim(params.addressName || ''),
                id: params.addrId === '0' ? null : params.addrId,
                mobile: _.trim(params.mobile || ''),
                phone: _.trim(params.phone || ''),
                zip_code: _.trim(params.zipCode || '')
            };
            let addressDataModel = new AddressApi(that.ctx);

            if (query.uid === '' || query.address === '' ||
                query.area_code.length < 6 || query.consignee === '' ||
                query.zip_code === '') {

                return {
                    code: 400,
                    message: '请填写完整的省市区信息'
                };
            }
            let respData = yield addressDataModel.saveAddressData(query);

            return respData;
        })();
    }

    /**
     * 删除地址
     */
    delAddress(params, uid) {
        let that = this;

        return co(function*() {

            let addressDataModel = new AddressApi(that.ctx);
            let respData = yield addressDataModel.deleteAddress(uid, params.id);

            return respData;
        })();
    }

    /**
     * 设置默认地址
     */
    defaultAddress(params, uid) {
        let that = this;

        return co(function*() {
            let addressDataModel = new AddressApi(that.ctx);
            let respData = yield addressDataModel.setDefaultAddress(uid, params.id);

            return respData;
        })();
    }

};