Toggle navigation
Toggle navigation
This project
Loading...
Sign in
fe
/
yohobuy-node
·
Commits
Go to a project
GitLab
Go to group
Project
Activity
Files
Commits
Pipelines
0
Builds
0
Graphs
Milestones
Issues
1
Merge Requests
0
Members
Labels
Wiki
Forks
Network
Create a new issue
Download as
Email Patches
Plain Diff
Browse Files
Authored by
biao
9 years ago
Commit
88e552e1bd689fb96c0e8e7f4d658423c9d22cee
1 parent
7e511f3d
update for module format
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
114 additions
and
116 deletions
apps/channel/models/index.js
apps/channel/models/index.js
View file @
88e552e
...
...
@@ -20,7 +20,8 @@ const searchApi = global.yoho.SearchAPI;
const
headerModel
=
require
(
'../../../doraemon/models/header'
);
const
getShelveTime
=
duration
=>
{
// 获取上线时间
const
_getShelveTime
=
duration
=>
{
let
today
=
new
Date
(),
todayMil
=
today
.
getTime
().
toString
().
substr
(
0
,
10
),
startDayMil
=
(
today
.
setMonth
(
today
.
getMonth
()
-
duration
)).
toString
().
substr
(
0
,
10
);
...
...
@@ -29,7 +30,7 @@ const getShelveTime = duration => {
};
// 获取可用的标题
const
getText
=
data
=>
{
const
_
getText
=
data
=>
{
let
text
=
data
.
split
(
' '
)[
0
];
const
regResult
=
/
\w
+/
.
exec
(
text
);
...
...
@@ -49,27 +50,16 @@ const channelMap = dataMap.channel;
const
sortMap
=
dataMap
.
sort
;
// 构建url
const
httpBuildQuery
=
data
=>
{
const
_
httpBuildQuery
=
data
=>
{
return
searchApi
.
get
(
'/search.json'
,
data
);
};
/**
* 获取普通banner
* @param {[Object]} data 原始数据
* @return {[Object]} 转换后的数据
*/
const
getBannerList
=
data
=>
{
return
data
;
};
/**
* 获取带小图的banner
* @param {[Object]} data 原始数据
* @return {[Object]} 转换后的数据
*/
const
getDebrisSlide
=
data
=>
{
const
_
getDebrisSlide
=
data
=>
{
let
floorData
=
{
debrisSlider
:
{
left
:
[],
...
...
@@ -93,7 +83,7 @@ const getDebrisSlide = data => {
* @param {Object} data 原始数据
* @return {Object} 转换后的数据
*/
const
getadbannerData
=
data
=>
{
const
_
getadbannerData
=
data
=>
{
return
{
adbanner
:
data
...
...
@@ -105,7 +95,7 @@ const getadbannerData = data => {
* @param {Object} srcData 原始数据
* @return {Object} 转换后的数据
*/
const
getSlideData
=
srcData
=>
{
const
_
getSlideData
=
srcData
=>
{
const
slideData
=
{
slide
:
{
list
:
[],
...
...
@@ -114,15 +104,15 @@ const getSlideData = srcData => {
};
if
(
srcData
.
big_image
)
{
slideData
.
slide
.
list
=
getBannerList
(
srcData
.
big_image
)
;
slideData
.
slide
.
list
=
srcData
.
big_image
;
}
if
(
srcData
.
list
)
{
slideData
.
slide
.
pagination
=
getBannerList
(
srcData
.
list
)
;
slideData
.
slide
.
pagination
=
srcData
.
list
;
}
if
(
_
.
isArray
(
srcData
))
{
slideData
.
slide
.
list
=
getBannerList
(
srcData
)
;
slideData
.
slide
.
list
=
srcData
;
}
return
slideData
;
...
...
@@ -134,7 +124,7 @@ const getSlideData = srcData => {
* @param {Object} srcData 原始数据
* @return {Object} 转换后的数据
*/
const
getNewReportFloorData
=
args
=>
{
const
_
getNewReportFloorData
=
args
=>
{
const
title
=
args
[
0
].
data
.
text
;
let
item
=
args
[
1
].
data
;
let
secondItem
=
args
[
2
].
data
;
...
...
@@ -168,7 +158,7 @@ const getNewReportFloorData = args => {
floorDatas
.
push
(
data
);
if
(
forthItem
.
template_name
===
'single_image'
)
{
adData
=
getadbannerData
(
forthItem
.
data
[
0
]);
adData
=
_
getadbannerData
(
forthItem
.
data
[
0
]);
floorDatas
.
push
(
adData
);
}
...
...
@@ -182,7 +172,7 @@ const getNewReportFloorData = args => {
* @param {String} type 需要设置的频道类型
* @return undefined
*/
const
setChannelType
=
(
obj
,
type
)
=>
{
const
_
setChannelType
=
(
obj
,
type
)
=>
{
obj
[
type
+
'Channel'
]
=
true
;
};
...
...
@@ -192,7 +182,7 @@ const setChannelType = (obj, type) => {
* @param {String} type 频道类型
* @return {Object}
*/
const
getPreBrandTopData
=
(
args
,
type
)
=>
{
const
_
getPreBrandTopData
=
(
args
,
type
)
=>
{
const
title
=
args
[
0
].
data
.
text
;
let
item
=
args
[
1
].
data
;
...
...
@@ -206,7 +196,7 @@ const getPreBrandTopData = (args, type) => {
data
.
preferenceBrands
.
imgBrand
=
item
;
setChannelType
(
data
.
preferenceBrands
,
type
);
_
setChannelType
(
data
.
preferenceBrands
,
type
);
return
data
;
};
...
...
@@ -217,7 +207,7 @@ const getPreBrandTopData = (args, type) => {
* @param {String} type 频道类型
* @return {Object}
*/
const
getHotGoodsFloorData
=
(
args
,
type
)
=>
{
const
_
getHotGoodsFloorData
=
(
args
,
type
)
=>
{
let
item
=
args
[
0
];
let
nextItem
=
args
[
1
];
...
...
@@ -262,7 +252,7 @@ const getHotGoodsFloorData = (args, type) => {
data
.
recommend
.
tplrecommend
=
list
;
setChannelType
(
data
.
recommend
,
type
);
_
setChannelType
(
data
.
recommend
,
type
);
return
data
;
...
...
@@ -275,7 +265,7 @@ const getHotGoodsFloorData = (args, type) => {
* @param {String} type 频道类型
* @return {Object}
*/
const
getBoysSingleHot
=
(
args
,
type
)
=>
{
const
_
getBoysSingleHot
=
(
args
,
type
)
=>
{
const
len
=
10
;
const
data
=
{
singlehot
:
{
...
...
@@ -306,11 +296,11 @@ const getBoysSingleHot = (args, type) => {
}
data
.
singlehot
.
imgHot
=
list
;
setChannelType
(
data
.
singlehot
,
type
);
_
setChannelType
(
data
.
singlehot
,
type
);
floorDatas
.
push
(
data
);
if
(
args
[
3
].
template_name
===
'single_image'
)
{
adData
=
getadbannerData
(
args
[
3
].
data
[
0
]);
adData
=
_
getadbannerData
(
args
[
3
].
data
[
0
]);
floorDatas
.
push
(
adData
);
}
...
...
@@ -323,7 +313,7 @@ const getBoysSingleHot = (args, type) => {
* @param {String} type 频道类型
* @return {Object}
*/
const
getGirlsSingleHot
=
args
=>
{
const
_
getGirlsSingleHot
=
args
=>
{
let
goods
=
args
[
2
].
data
;
let
skns
=
''
;
...
...
@@ -352,11 +342,11 @@ const getGirlsSingleHot = args => {
* @param {String} type 频道类型
* @return {Object}
*/
const
getSingleHotFloorData
=
(
args
,
type
)
=>
{
const
_
getSingleHotFloorData
=
(
args
,
type
)
=>
{
if
(
type
===
'boys'
)
{
return
getBoysSingleHot
(
args
,
type
);
return
_
getBoysSingleHot
(
args
,
type
);
}
else
{
return
getGirlsSingleHot
(
args
,
type
);
return
_
getGirlsSingleHot
(
args
,
type
);
}
};
...
...
@@ -367,7 +357,7 @@ const getSingleHotFloorData = (args, type) => {
* @param {String} type 频道类型
* @return {Object}
*/
const
getSingehotViaResult
=
(
args
,
queryResult
,
type
)
=>
{
const
_
getSingehotViaResult
=
(
args
,
queryResult
,
type
)
=>
{
const
data
=
{
singlehot
:
{
name
:
args
[
0
].
data
.
text
,
...
...
@@ -400,7 +390,7 @@ const getSingehotViaResult = (args, queryResult, type) => {
});
}
data
.
singlehot
.
navs
=
args
[
1
].
data
;
setChannelType
(
data
.
singlehot
,
type
);
_
setChannelType
(
data
.
singlehot
,
type
);
return
data
;
};
...
...
@@ -413,14 +403,14 @@ const getSingehotViaResult = (args, queryResult, type) => {
* @param {Type} type 人气单品楼层的类型
* @return {Object}
*/
const
processFloorDataWithQueryReusult
=
(
rawData
,
queryResult
,
title
,
type
)
=>
{
const
_
processFloorDataWithQueryReusult
=
(
rawData
,
queryResult
,
title
,
type
)
=>
{
let
data
=
{};
_
.
forEach
(
rawData
,
(
subData
,
index
)
=>
{
const
text
=
subData
.
data
.
text
&&
getText
(
subData
.
data
.
text
);
const
text
=
subData
.
data
.
text
&&
_
getText
(
subData
.
data
.
text
);
if
(
text
===
title
)
{
data
=
getSingehotViaResult
(
rawData
.
slice
(
index
,
index
+
4
),
queryResult
,
type
);
data
=
_
getSingehotViaResult
(
rawData
.
slice
(
index
,
index
+
4
),
queryResult
,
type
);
}
});
...
...
@@ -433,7 +423,7 @@ const processFloorDataWithQueryReusult = (rawData, queryResult, title, type) =>
* @param string data
* return obj
*/
const
getNewGoodsFloorData
=
args
=>
{
const
_
getNewGoodsFloorData
=
args
=>
{
const
data
=
{
newArrivls
:
{
name
:
args
[
0
].
data
.
text
,
...
...
@@ -446,59 +436,7 @@ const getNewGoodsFloorData = args => {
return
data
;
};
/**
* 获取最新上架商品数据
*
* @param string $channel
* @return array
*/
exports
.
getNewArrival
=
channel
=>
{
let
rel
=
[],
sortList
=
sortMap
[
channel
],
params
=
{
order
:
'shelve_time:desc'
,
status
:
1
,
sales
:
'Y'
,
attribute_not
:
2
,
stocknumber
:
3
,
shelve_time
:
getShelveTime
(
20
)
};
params
.
gender
=
channelMap
[
channel
].
gender
;
_
.
forEach
(
sortList
,
(
item
)
=>
{
let
data
=
Object
.
assign
(
item
,
params
);
rel
.
push
(
httpBuildQuery
(
data
));
});
return
Promise
.
all
(
rel
).
then
(
res
=>
{
let
data
=
[],
result
=
[];
_
.
forEach
(
sortList
,
(
it
,
index
)
=>
{
if
(
res
[
index
].
data
.
product_list
&&
res
[
index
].
data
.
product_list
.
length
===
sortList
[
index
].
viewNum
)
{
data
=
data
.
concat
(
res
[
index
].
data
.
product_list
);
}
});
_
.
forEach
(
data
,
(
item
)
=>
{
result
.
push
(
processProduct
(
item
,
{
width
:
280
,
height
:
373
}));
});
return
result
;
});
};
const
getCategoryFloorData
=
args
=>
{
const
_getCategoryFloorData
=
args
=>
{
const
data
=
{
category
:
{
name
:
args
[
0
].
data
.
text
,
...
...
@@ -524,7 +462,7 @@ const getCategoryFloorData = args => {
return
data
;
};
const
getAccordionFloorData
=
args
=>
{
const
_
getAccordionFloorData
=
args
=>
{
let
data
=
{
accordion
:
{
name
:
args
[
0
].
data
.
text
,
...
...
@@ -538,7 +476,11 @@ const getAccordionFloorData = args => {
return
data
;
};
const
requestContent
=
type
=>
{
const
_requestContent
=
type
=>
{
let
data
=
{
client_type
:
'web'
,
content_code
:
channelMap
[
type
||
'boys'
].
code
,
...
...
@@ -558,23 +500,23 @@ const requestContent = type => {
};
const
floorMap
=
{
slide
:
getSlideData
,
hot
:
getHotGoodsFloorData
,
最新速报
:
getNewReportFloorData
,
人气单品
:
getSingleHotFloorData
,
'GIRL KIDS'
:
getSingleHotFloorData
,
'BOY KIDS'
:
getSingleHotFloorData
,
优选品牌
:
getPreBrandTopData
,
最新上架
:
getNewGoodsFloorData
,
ad
:
getadbannerData
,
category
:
getCategoryFloorData
,
accordion
:
getAccordionFloorData
,
debrisSlide
:
getDebrisSlide
slide
:
_getSlideData
,
hot
:
_getHotGoodsFloorData
,
最新速报
:
_getNewReportFloorData
,
人气单品
:
_getSingleHotFloorData
,
'GIRL KIDS'
:
_getSingleHotFloorData
,
'BOY KIDS'
:
_getSingleHotFloorData
,
优选品牌
:
_getPreBrandTopData
,
最新上架
:
_getNewGoodsFloorData
,
ad
:
_getadbannerData
,
category
:
_getCategoryFloorData
,
accordion
:
_getAccordionFloorData
,
debrisSlide
:
_getDebrisSlide
};
const
processFloorData
=
(
rawData
,
type
)
=>
{
const
_
processFloorData
=
(
rawData
,
type
)
=>
{
let
floorList
=
[];
let
searchPromise
=
[];
let
singlehotFloorIndex
=
[];
...
...
@@ -595,7 +537,7 @@ const processFloorData = (rawData, type) => {
}
else
if
(
data
.
template_intro
===
'热门品类'
)
{
// 处理热门品类
floorData
=
floorMap
.
hot
.
call
(
null
,
rawData
.
slice
(
index
,
index
+
hotCategoryLength
),
type
);
}
else
if
(
data
.
data
.
text
)
{
// 处理一般楼层
let
text
=
getText
(
data
.
data
.
text
);
let
text
=
_
getText
(
data
.
data
.
text
);
let
lastIndex
=
index
+
bigFloorLength
<
rawData
.
length
?
index
+
bigFloorLength
:
index
+
(
rawData
.
length
-
index
-
1
);
...
...
@@ -630,7 +572,7 @@ const processFloorData = (rawData, type) => {
singlehotFloorIndex
.
push
(
floorList
.
length
);
// 记住楼层标题, 以便后面promise获取数据后插入楼层数据
singlehotFloorTitle
.
push
(
getText
(
data
.
data
.
text
));
singlehotFloorTitle
.
push
(
_
getText
(
data
.
data
.
text
));
}
else
if
(
!
_
.
isNil
(
floorData
))
{
_
.
isArray
(
floorData
)
?
floorList
=
floorList
.
concat
(
floorData
)
:
...
...
@@ -646,21 +588,71 @@ const processFloorData = (rawData, type) => {
};
};
/**
* 获取最新上架商品数据
*
* @param string $channel
* @return array
*/
const
getNewArrival
=
channel
=>
{
let
rel
=
[],
sortList
=
sortMap
[
channel
],
params
=
{
order
:
'shelve_time:desc'
,
status
:
1
,
sales
:
'Y'
,
attribute_not
:
2
,
stocknumber
:
3
,
shelve_time
:
_getShelveTime
(
20
)
};
params
.
gender
=
channelMap
[
channel
].
gender
;
_
.
forEach
(
sortList
,
(
item
)
=>
{
let
data
=
Object
.
assign
(
item
,
params
);
rel
.
push
(
_httpBuildQuery
(
data
));
});
return
Promise
.
all
(
rel
).
then
(
res
=>
{
let
data
=
[],
result
=
[];
_
.
forEach
(
sortList
,
(
it
,
index
)
=>
{
if
(
res
[
index
].
data
.
product_list
&&
res
[
index
].
data
.
product_list
.
length
===
sortList
[
index
].
viewNum
)
{
data
=
data
.
concat
(
res
[
index
].
data
.
product_list
);
}
});
_
.
forEach
(
data
,
(
item
)
=>
{
result
.
push
(
processProduct
(
item
,
{
width
:
280
,
height
:
373
}));
});
return
result
;
});
};
/**
* 获取频道页数据
* @param {String} type 传入频道页类型,值可以是: boys, girls, kids, lifestyle
* @return {Object}
*/
exports
.
getContent
=
type
=>
{
return
Promise
.
all
([
headerModel
.
requestHeaderData
(
type
),
requestContent
(
type
)]).
then
(
res
=>
{
const
getContent
=
type
=>
{
return
Promise
.
all
([
headerModel
.
requestHeaderData
(
type
),
_requestContent
(
type
)]).
then
(
res
=>
{
let
headerData
=
res
[
0
].
data
||
res
[
0
],
contentData
=
res
[
1
].
data
?
res
[
1
].
data
.
list
:
res
[
1
];
let
data
=
{};
const
processResult
=
processFloorData
(
contentData
,
type
);
const
processResult
=
_
processFloorData
(
contentData
,
type
);
data
=
headerData
;
data
.
module
=
'channel'
;
...
...
@@ -687,7 +679,7 @@ exports.getContent = type => {
_
.
forEach
(
res
,
(
data
,
index
)
=>
{
result
.
floorData
.
channel
.
splice
(
result
.
singlehotFloorIndex
[
index
],
0
,
processFloorDataWithQueryReusult
(
_
processFloorDataWithQueryReusult
(
result
.
rawData
,
data
,
result
.
singlehotFloorTitle
[
index
],
...
...
@@ -705,8 +697,8 @@ exports.getContent = type => {
// 优选品牌楼层floorData-ajax
exports
.
getbrandFloorDataAjax
=
type
=>
{
return
requestContent
(
type
).
then
(
res
=>
{
const
getbrandFloorDataAjax
=
type
=>
{
return
_requestContent
(
type
).
then
(
res
=>
{
let
contentData
=
res
.
data
?
res
.
data
.
list
:
[];
let
data
=
{
...
...
@@ -732,3 +724,9 @@ exports.getbrandFloorDataAjax = type => {
return
data
;
});
};
module
.
exports
=
{
getNewArrival
:
getNewArrival
,
getContent
:
getContent
,
getbrandFloorDataAjax
:
getbrandFloorDataAjax
};
...
...
Please
register
or
login
to post a comment