list.js
4.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/**
* list model
* @author: wsl<shuiling.wang@yoho.cn>
* @date: 2018/08/20
*/
'use strict';
const utils = '../../../utils';
const productProcess = require(`${utils}/product-process`);
const searchProcess = require(`${utils}/search-process`);
const _ = require('lodash');
const co = require('bluebird').coroutine;
module.exports = class extends global.yoho.BaseModel {
constructor(ctx) {
super(ctx);
}
/**
* 获取品类下的商品列表
* @param isSearch 是否是搜索列表页
* 搜索列表页默认调用 app.search.li 接口
* 类目列表页默认调用 web.search.search 接口
*/
getCategoryGoods(params, isSearch) {
let method = isSearch ? 'app.search.li' : 'web.search.search';
if (params.filter_poolId) {
method = 'app.search.pool';
}
if (params.shop_id && !params.filter_poolId && !params.productPool) {
method = 'app.search.li';
}
// 个人中心优惠券立即使用 - 商品列表
if (params.coupon_id || params.coupon_code) {
method = 'app.search.coupon';
}
// 物料商品列表增加
if (params.material === 'true') {
method = 'app.search.recommendProduct';
}
if (params.isblknew) {
method = 'app.search.newProduct';
}
if (params.promotion_id) {
method = 'app.search.promotion';
}
// 学生优惠
if (params.students) {
method = 'app.student.discount';
}
// 学生返币查询
if (params.coin) {
method = 'app.student.rebate';
}
// 促销活动
if (params.specialsale_id) {
method = 'app.search.li';
}
if (method === 'web.search.search') {
params.from = 'categoryList';
}
let paramsForApi = searchProcess.getSearchParamsWithoutMethod(params);
return this.get({
data: _.assign({}, paramsForApi, {
method: method
})
});
}
/**
* 搜索品牌的商品
*/
getBrandGoods(params) {
let finalParams = {
method: 'app.search.brand',
};
finalParams = _.assign(finalParams, searchProcess.getSearchParamsWithoutMethod(params));
return this.get({
data: finalParams
});
}
/**
* 搜索店铺的商品
*/
getShopGoods(params) {
if (!/^[0-9]*$/.test(params.shop_id)) {
return Promise.resolve({});
}
let finalParams = {
method: 'app.search.shop',
};
finalParams = _.assign(finalParams, searchProcess.getSearchParamsWithoutMethod(params));
return this.get({
data: finalParams
});
}
/**
* 获取筛选数据
*/
getFilterData(params) {
let self = this;
return co(function* () {
let filterDataResult = {};
if (params.isShopBrand === 'Y') { // 店铺之品牌
filterDataResult = yield self.getBrandGoods(params);
} else if (params.isShopList === 'Y') { // 无店铺有店铺 ID 的商品列表
filterDataResult = yield self.getShopGoods(params);
} else { // 新的 SEO 友好的品类落地页
filterDataResult = yield self.getCategoryGoods(params);
}
let filterData = _.get(filterDataResult, 'data.filter', []);
if (filterData) {
return productProcess.processFilter(filterData, params);
} else {
return [];
}
})();
}
/**
* 通过 skn 搜索商品
* @param productSkn
* @returns {*|Promise.<TResult>}
* @private
*/
searchProductBySkn(productSkn) {
return this.get({
data: {
method: 'h5.product.batch',
productSkn: productSkn
},
param: {code: 200, cache: true}
}).then(result => {
return _.get(result, 'data.product_list', []);
});
}
};