shop-service.js 2.54 KB
/**
 * Created by TaoHuang on 2016/6/28.
 */

'use strict';
const Promise = require('bluebird');
const co = Promise.coroutine;
const _ = require('lodash');

const api = require('./shop-api');

/**
 * 生成缩略图
 */
const _imageView2 = (url, width, height) => {
    url += url.includes('?') ? '&' : '?';
    return `${url}imageView2/1/w${width}/h/${height}`;
};

/**
 * 解析 resource_data 参数
 */
const _getResourceData = list => {
    list.resource_data = JSON.parse(list.resource_data || '[]');
    return list;
};

/**
 * 店铺Banner 资源位
 */
const _shopTopBanner = data => {
    let result = {
        banner: '',
        isShowShopName: false,
        bannerHeight: 150
    };
    let resource = _.head(data.resource_data);

    if (resource.shopSrc) {
        result.banner = _imageView2(resource.shopSrc, 1150, 150);
    }

    if (resource.detailSrc) {
        result.detailSrc = _imageView2(resource.detailSrc, 1150, 150);
    }

    if (resource.isShowShopName) {
        result.isShowShopName = resource.isShowShopName === 'Y';
    }

    return result;
};

/**
 * 水牌
 */
const _signboard = data => {
    let result = [];
    let resources = data.resource_data;

    resources.forEach(resource => {
        if (_.isEmpty(resource)) {
            return;
        }

        resource.data.forEach(val => {
            result.push({
                img: _imageView2(val.src, 160, 240),
                url: val.url
            });
        });
    });

    return {
        title: result[0].title || '',
        list: result
    };
};

/**
 * 基础模板
 */
exports.basisTemplateAsync = shopId => {
    return co(function * () {
        let data = {signboard: {}};
        const ResourceHandler = {
            shopTopBanner: _shopTopBanner,
            signboard: _signboard
        };
        let shops = yield api.shopsDecoratorListAsync(shopId);

        if (!shops.code || shops.code !== 200 || _.isEmpty(shops.data.list)) {
            return data;
        }

        shops.data.list.forEach(shop => {
            let resourceHandlerName = shop.resource_name;

            if (!ResourceHandler[resourceHandlerName]) {
                return;
            }

            let resourceData = ResourceHandler[resourceHandlerName](_getResourceData(shop));

            switch (resourceHandlerName) {
                case 'shopTopBanner':
                case 'signboard':
                    {
                        data[resourceHandlerName] = resourceData;
                        break;
                    }
            }

        });

        return data;
    })();
};