|
|
/**
|
|
|
* 新潮教室
|
|
|
* @author: wsl<shuiling.wang@yoho.cn>
|
|
|
* @date: 2016/05/30
|
|
|
*/
|
|
|
'use strict';
|
|
|
const library = '../../../library';
|
|
|
const utils = '../../../utils';
|
|
|
const resourcesProcess = require(`${utils}/resources-process`);
|
|
|
const ServiceAPI = require(`${library}/api`).ServiceAPI;
|
|
|
const API = require(`${library}/api`).API;
|
|
|
const sign = require(`${library}/sign`);
|
|
|
const logger = require(`${library}/logger`);
|
|
|
const camelCase = require(`${library}/camel-case`);
|
|
|
const helpers = require(`${library}/helpers`);
|
|
|
const _ = require('lodash');
|
|
|
const url = require('url');
|
|
|
const qs = require('querystring');
|
|
|
const serviceAPI = new ServiceAPI();
|
|
|
const api = new API();
|
|
|
|
|
|
const contentCode = {
|
|
|
special: '89cc20483ee2cbc8a716dcfe2b6c7603'
|
|
|
};
|
|
|
|
|
|
class Star {
|
|
|
/**
|
|
|
* 获取资源位数据
|
|
|
* @param {[string]} page
|
|
|
* @return {[array]}
|
|
|
*/
|
|
|
static getResources(page) {
|
|
|
return serviceAPI.get('operations/api/v5/resource/get', sign.apiSign({
|
|
|
content_code: contentCode[page]
|
|
|
})).then((result) => {
|
|
|
if (result && result.code === 200) {
|
|
|
return resourcesProcess(result.data);
|
|
|
} else {
|
|
|
logger.error('星潮教室页面资源位返回 code 不是 200');
|
|
|
return [];
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 星潮教室首页数据处理
|
|
|
* @param {[array]} list
|
|
|
* @return {[array]}
|
|
|
*/
|
|
|
static processIndexData(list) {
|
|
|
const formatData = {
|
|
|
ads: [],
|
|
|
starAvatar: [],
|
|
|
articles: []
|
|
|
};
|
|
|
|
|
|
list = list || {};
|
|
|
list = camelCase(list);
|
|
|
|
|
|
// 首页资源位数据处理
|
|
|
if (list.ads) {
|
|
|
_.forEach(list.ads.data, (data) => {
|
|
|
formatData.ads.push({
|
|
|
src: data.src,
|
|
|
url: data.url
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 首页明星文章数据处理
|
|
|
if (list.list) {
|
|
|
_.forEach(list.list, (data) => {
|
|
|
const avatar = {
|
|
|
tags: []
|
|
|
};
|
|
|
|
|
|
if (data.ext.tags.length > 1) {
|
|
|
avatar.isSwiper = true;
|
|
|
}
|
|
|
|
|
|
_.forEach(data.ext.tags, (tags) => {
|
|
|
avatar.tags.push({
|
|
|
avatarUrl: `/guang/star/detail?tag=${tags.tagName}&openby:yohobuy={"action":"go.h5","params":{"id":"","share":"","shareparam":{},"islogin":"N","type":0,"updateflag":"N","url":"http:\/\/m.yohobuy.com\/guang\/star\/detail","param":{"tag":"${tags.tagName}"}}}`, // eslint-disable-line
|
|
|
cover: tags.cover,
|
|
|
tagName: tags.tagName
|
|
|
});
|
|
|
});
|
|
|
|
|
|
let urlObj = url.parse(data.url);
|
|
|
let appUrl = `&openby:yohobuy={"action":"go.h5","params":{"id":"","share":"","shareparam":{},"islogin":"N","type":0,"updateflag":"N","url":"${ urlObj.protocol + '//' + urlObj.host + urlObj.pathname}","param":${JSON.stringify(qs.parse(urlObj.query))}}}`.replace(/\//g, '\/'); // eslint-disable-line
|
|
|
|
|
|
formatData.articles.push(_.merge({
|
|
|
id: data.id,
|
|
|
url: data.url + appUrl,
|
|
|
title: data.title,
|
|
|
articeTxt: data.intro,
|
|
|
src: data.src,
|
|
|
publishTime: helpers.dateFormat('MM月DD日 hh:mm', data.publishTime),
|
|
|
viewsNum: data.viewsNum
|
|
|
}, avatar));
|
|
|
});
|
|
|
}
|
|
|
|
|
|
|
|
|
// 首页明星头像数据处理
|
|
|
if (list.tags) {
|
|
|
_.forEach(list.tags, (data) => {
|
|
|
let url = `/guang/star/detail?tag=${data.tagName}&openby:yohobuy={"action":"go.h5","params":{"id":"","share":"","shareparam":{},"islogin":"N","type":0,"updateflag":"N","url":"http:\/\/m.yohobuy.com\/guang\/star\/detail","param":{"tag":"${data.tagName}"}}}`; // eslint-disable-line
|
|
|
|
|
|
formatData.starAvatar.push({
|
|
|
url: url,
|
|
|
cover: data.cover
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return formatData;
|
|
|
}
|
|
|
|
|
|
static processShareUrl(post) {
|
|
|
return `${post.share.url}&openby:yohobuy={"action":"go.share","params":{"pic":"${helpers.image(post.src, 640, 640)}","title":"${post.title}","url":"${post.share.url}","content":"潮流资讯,新鲜贩售,YOHO!Buy有货【逛】不停"}}`; // eslint-disable-line
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 明星专题列表数据处理
|
|
|
* @param {[array]} list
|
|
|
* @return {[array]}
|
|
|
*/
|
|
|
static processDetailData(list) {
|
|
|
const formatData = [];
|
|
|
|
|
|
list = list || [];
|
|
|
list = camelCase(list);
|
|
|
|
|
|
_.forEach(list, (data) => {
|
|
|
data.publishTime = helpers.dateFormat('MM月DD日 hh:mm', data.publishTime);
|
|
|
if (data.share && data.share.url) {
|
|
|
data.share.url = Star.processShareUrl(data);
|
|
|
}
|
|
|
formatData.push(data);
|
|
|
});
|
|
|
|
|
|
return formatData;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 星搭配文章列表数据处理
|
|
|
*/
|
|
|
static processCollocationData(list) {
|
|
|
const formatData = [];
|
|
|
|
|
|
list = list || [];
|
|
|
list = camelCase(list);
|
|
|
|
|
|
_.forEach(list, (data) => {
|
|
|
if (data.isFavor === 'N') {
|
|
|
data.isCollected = false;
|
|
|
} else {
|
|
|
data.isCollected = true;
|
|
|
}
|
|
|
formatData.push(data);
|
|
|
});
|
|
|
|
|
|
return formatData;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 星潮首页
|
|
|
*/
|
|
|
static getIndexData() {
|
|
|
return api.get('', sign.apiSign({
|
|
|
method: 'app.starClass.index',
|
|
|
code: '8adc27fcf5676f356602889afcfd2a8e'
|
|
|
})).then((result) => {
|
|
|
if (result && result.code === 200) {
|
|
|
return Star.processIndexData(result.data);
|
|
|
} else {
|
|
|
logger.error('星潮教室首页数据返回 code 不是 200');
|
|
|
return {};
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 明星专题
|
|
|
*/
|
|
|
static getDetailData(params) {
|
|
|
return api.get('', sign.apiSign({
|
|
|
method: 'app.starClass.lastTagArticle',
|
|
|
tag: params.tag,
|
|
|
page: params.page || 1,
|
|
|
size: 10
|
|
|
})).then((result) => {
|
|
|
if (result && result.code === 200) {
|
|
|
if (params.page > result.data.totalPage) {
|
|
|
return '';
|
|
|
} else {
|
|
|
return Star.processDetailData(result.data.list);
|
|
|
}
|
|
|
} else {
|
|
|
logger.error('明星专题文章数据返回 code 不是 200');
|
|
|
return [];
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 星专题
|
|
|
*/
|
|
|
static getSpecialData() {
|
|
|
return Star.getResources('special').then((result) => {
|
|
|
|
|
|
// 数据结构嵌套太深
|
|
|
_.forEach(result, (data) => {
|
|
|
_.map(data.data, (item) => {
|
|
|
let urlObj = url.parse(item.url);
|
|
|
let appUrl = `&openby:yohobuy={"action":"go.h5","params":{"id":"","share":"","shareparam":{},"islogin":"N","type":0,"updateflag":"N","url":"${ urlObj.protocol + '//' + urlObj.host + urlObj.pathname}","param":${JSON.stringify(qs.parse(urlObj.query))}}}`.replace(/\//g, '\/'); // eslint-disable-line
|
|
|
|
|
|
item.url += appUrl;
|
|
|
return item;
|
|
|
});
|
|
|
});
|
|
|
return result;
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 星搭配
|
|
|
*/
|
|
|
static getCollocationListData(params, uid) {
|
|
|
|
|
|
return serviceAPI.get('guang/api/v5/article/getStarClassroomArticleList', sign.apiSign(Object.assign({
|
|
|
limit: '20',
|
|
|
uid: uid
|
|
|
}, params))).then((result) => {
|
|
|
if (result && result.code === 200) {
|
|
|
return Star.processCollocationData(result.data.list.artList);
|
|
|
} else {
|
|
|
logger.error('获取星搭配文章列表返回 code 不是 200');
|
|
|
return [];
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
static setFavorite(params, uid) {
|
|
|
if (!uid) {
|
|
|
return Promise.resolve({
|
|
|
code: 401,
|
|
|
message: '未登录'
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return api.get('', sign.apiSign({
|
|
|
method: params.type === 'del' ? 'app.sns.cancelFavorBackCount' : 'app.sns.setFavorBackCount',
|
|
|
client_type: 'h5',
|
|
|
article_id: params.articleId,
|
|
|
uid: uid
|
|
|
}));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
const a = ()
|
|
|
const _b = ()
|
|
|
|
|
|
module.exports = {a: a, c: c}; |