public-handler.js 6.89 KB
/*
* @Author: Targaryen
* @Date:   2016-06-02 15:50:47
* @Last Modified by:   Targaryen
* @Last Modified time: 2016-06-03 18:25:57
*/

'use strict';
const _ = require('lodash');

/**
 * 处理用于筛选的 URL
 * @param  {[type]} originParam [description]
 * @param  {[type]} newParam    [description]
 * @return {[type]}             [description]
 */
const handleFilterUrl = (originParam, newParam) => {
    let dest = '?';
    let tempOriginParam = {};

    // 创建 originParam、newParam 键的数组
    let originParamArray = _.keys(originParam);
    let newParamArray = _.keys(newParam);

    // 判断参数是否已经存在
    let isExist = !_.isEmpty(_.find(originParamArray, function(o) {
        return o === newParamArray[0];
    }));

    if (isExist) {
        tempOriginParam = Object.assign(tempOriginParam, originParam);

        _.forEach(newParam, function(value, key) {
            tempOriginParam[key] = value;
        });
    } else {
        tempOriginParam = Object.assign(tempOriginParam, originParam, newParam);
    }

    _.forEach(tempOriginParam, function(value, key) {
        dest = dest + key + '=' + value + '&';
    });

    return _.trim(dest, '&');
};

/**
 * 筛选类链接处理的对外接口
 * @type {[type]}
 */
exports.handleFilterUrl = handleFilterUrl;

/**
 * 处理选中数据
 * @param  {[type]} params [description]
 * @param  {[type]} origin [description]
 * @param  {[type]} param  [description]
 * @return {[type]}        [description]
 */
exports.handleCheckedData = (params, origin, param) => {
    var dest = [];

    // 品牌选中数据
    if (!_.isEmpty(origin)) {
        _.forEach(origin, (value) => {
            if (value.checked) {
                let checked = {};

                checked.name = value.name;

                let tempParam = {};

                tempParam[param] = '';

                checked.href = handleFilterUrl(params, tempParam);

                dest.push(checked);
            }
        });
    }

    return dest;
};

/**
 * 处理分页数据
 * @param  {[type]} total  [description]
 * @param  {[type]} params [description]
 * @return {[type]}        [description]
 */
exports.handleSalePagerData = (total, params) => {


    // 当前页
    let currentPage = parseInt((_.isEmpty(params.page) ? 1 : params.page), 10);
    let perPageCount = parseInt((_.isEmpty(params.limit) ? 60 : params.limit), 10);
    let totalPage = parseInt(total / perPageCount, 10) + 1;

    let dest = '<a href ="' + handleFilterUrl(params, { page: (currentPage) }) +
        '" class="cur">' + currentPage + '</a>';

    // 先处理大多数情况
    if ((currentPage > 2) && (currentPage < (parseInt(total, 10) / perPageCount) - 1)) {

        for (let i = 1; i < 3; i++) {
            dest = '<a href ="' + handleFilterUrl(params, { page: (currentPage - i) }) + '">' +
                (currentPage - i) + '</a> ' + dest + ' <a href ="' +
                handleFilterUrl(params, { page: (currentPage + i) }) +
                '">' + (currentPage + i) + '</a>';
        }

        // 处理页码小于2的情况
    } else if (currentPage <= 2) {
        for (let i = currentPage - 1; i > 0; i--) {
            dest = '<a href ="' + handleFilterUrl(params, { page: i }) +
                '">' + i + '</a>' + dest;
        }

        for (let i = currentPage + 1; i < (totalPage < 6 ? totalPage : 6); i++) {
            dest += '<a href ="' + handleFilterUrl(params, { page: i }) +
                '">' + i + '</a>';
        }

        // 处理页码大于最大页-2的情况
    } else if (currentPage > totalPage - 2) {
        for (let i = currentPage + 1; i < totalPage + 1; i++) {
            dest += '<a href ="' + handleFilterUrl(params, { page: i }) +
                '">' + i + '</a>';
        }

        for (let i = currentPage - 1; i > (currentPage - 5 > 1 ? currentPage - 5 : 1); i--) {
            dest = '<a href ="' + handleFilterUrl(params, { page: i }) +
                '">' + i + '</a>' + dest;
        }
    }

    // 处理后省略号的情况
    if ((totalPage > 5) && (currentPage < (totalPage - 2))) {

        dest += ' ... <a href ="' + handleFilterUrl(params, { page: totalPage }) +
            '">' + totalPage + '</a>';

    }

    // 处理前省略号的情况
    if (currentPage > 3) {
        dest = '<a href ="' + handleFilterUrl(params, { page: 1 }) +
            '">1</a> ... ' + dest;
    }

    // 处理上一页下一页
    if (currentPage !== 1) {
        dest = '<a href="' + handleFilterUrl(params, { page: currentPage - 1 }) +
            '"><span class="iconfont">&#xe60e;上一页</span></a>' + dest;
    }

    if (currentPage !== totalPage) {
        dest += '<a href="' + handleFilterUrl(params, { page: currentPage + 1 }) +
            '"><span class="iconfont">下一页&#xe60c;</span></a>';
    }

    return dest;
};


/**
 * 处理 opts 排序数据 待处理 待确认
 * @param  {[type]} origin [description]
 * @return {[type]}        [description]
 */
exports.handleSaleOptsData = (params, total) => {
    var dest = {};

    dest.sortType = [];

    for (let i = 0; i < 3; i++) {
        let opt = {};

        switch (i) {
            case 0:
                opt.href = handleFilterUrl(params, { order: 's_t_desc' });
                opt.name = '最新';
                break;
            case 1:
                opt.href = handleFilterUrl(params, { order: 's_p_asc' });
                opt.name = '价格';
                break;
            case 2:
                opt.href = handleFilterUrl(params, { order: 'p_d_asc' });
                opt.name = '折扣';
                break;
            default:
                break;
        }

        opt.hasSortOrient = {};
        opt.hasSortOrient.active = {};
        opt.hasSortOrient.active.desc = {};

        dest.sortType.push(opt);
    }

    // 上下翻页数据处理
    dest.pageCounts = [{
        href: handleFilterUrl(params, { limit: 100 }),
        count: 100
    }, {
        href: handleFilterUrl(params, { limit: 80 }),
        count: 80
    }, {
        href: handleFilterUrl(params, { limit: 60 }),
        count: 60
    }];

    dest.curPage = _.isEmpty(params.page) ? 1 : params.page; // 当前页码数

    // 上一页下一页
    let preHref = (!_.isEmpty(params.page) && params.page > 1) ? params.page - 1 : 1;
    let nextHref = (!_.isEmpty(params.page)) ? params.page + 1 : 2;

    dest.preHref = handleFilterUrl(params, { page: preHref });
    dest.nextHref = handleFilterUrl(params, { page: nextHref });

    // 每页商品数量
    dest.countPerPage = _.isEmpty(params.limit) ? 60 : params.limit;

    // 全部页码数量
    dest.pageCount = parseInt(total / (_.isEmpty(params.limit) ? 60 : params.limit), 10) + 1;

    // 每页多少商品
    let paramsLimit = parseInt((_.isEmpty(params.limit) ? 60 : params.limit), 10);

    // 商品开始结束数
    dest.start = (!_.isEmpty(params.page) ? params.page - 1 : 0) * paramsLimit;
    dest.end = parseInt(dest.start, 10) + paramsLimit;

    return dest;
};