Toggle navigation
Toggle navigation
This project
Loading...
Sign in
fe
/
yohobuywap-node
·
Commits
Go to a project
GitLab
Go to group
Project
Activity
Files
Commits
Pipelines
0
Builds
0
Graphs
Milestones
Issues
0
Merge Requests
0
Members
Labels
Wiki
Forks
Network
Create a new issue
Download as
Plain Diff
Browse Files
Authored by
陈峰
7 years ago
Commit
0fd8583bcc79d7e20ba99af85e1f7ac17a5a94e0
2 parents
8d0060f2
58aaffd7
master
...
develop
feature/1215
feature/baidu_ocpcapi
feature/captcha
feature/coupon-captcha
feature/delete-verify-code
feature/extend-params
feature/group-6.9.17
feature/group-tab-and-limit
feature/groupTab
feature/limit-uuid-coupon
feature/magazine
feature/payment
feature/phoneCoupon
feature/privacy
feature/refactor_alert
feature/seckill-coupon
feature/shoppingPay
feature/tagPrice
hotfix/11
hotfix/autoopenapp
hotfix/captcha
hotfix/change-xianyu-login
hotfix/couponWebSession
hotfix/fix-shop-product-floor
hotfix/hide-xianyu-yas
hotfix/im
hotfix/login
hotfix/magazine-style
hotfix/ocpc
hotfix/show-collage-price
hotfix/sub-domain
hotfix/uid-undifined-error
release/6.9.17
release/6.9.22
release/6.9.23
release/7.0.1
release/7.1.1
userAgentTest
ys
2019-12-5
0913
merge
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
162 additions
and
50 deletions
apps/3party/controllers/check.js
apps/activity/controllers/have-gain.js
apps/activity/models/feature.js
apps/activity/models/have-gain.js
apps/activity/views/action/have-gain/apply.hbs
apps/activity/views/partial/feature/product-old-style.hbs
apps/mip/controllers/guang.js
apps/mip/views/action/guang/detail.hbs
config/common.js
docker.sh
doraemon/middleware/limiter/rules/ip-list.js
doraemon/middleware/limiter/rules/qps-limit.js
doraemon/middleware/risk-management.js
doraemon/views/mip.hbs
doraemon/views/partial/analysis.hbs
public/hbs/product/detail/feedback-tab.hbs
public/js/activity/have-gain-apply.page.js
public/scss/feature/product.scss
public/scss/product/detail/detail.scss
public/static/yas-jssdk/2.4.17/yas.js
yarn.lock
apps/3party/controllers/check.js
View file @
0fd8583
...
...
@@ -61,8 +61,7 @@ const submitValidate = {
remoteIp
=
arr
[
0
];
}
// pc:limiter:IP 和PC端共用
let
operations
=
[
cache
.
delAsync
(
`
pc
:
limiter
:
$
{
remoteIp
}
`
)];
let
operations
=
[
cache
.
delAsync
(
`
$
{
config
.
app
}:
limiter
:
$
{
remoteIp
}
`
)];
// 验证码之后一小时之内不再限制qps
if
(
req
.
session
.
apiLimitValidate
||
req
.
session
.
apiRiskValidate
)
{
...
...
apps/activity/controllers/have-gain.js
View file @
0fd8583
...
...
@@ -31,10 +31,11 @@ class HaveGain {
let
uid
=
req
.
user
.
uid
;
let
socialMediaList
=
[
{
name
:
'微信'
,
name
:
'微信
(必填)
'
,
icon
:
'//cdn.yoho.cn/m-yohobuy-node/assets/img/weixin@2x.png'
,
type
:
1
,
account
:
''
,
required
:
true
,
fans
:
0
},
{
...
...
apps/activity/models/feature.js
View file @
0fd8583
...
...
@@ -110,6 +110,7 @@ class featureModel extends global.yoho.BaseModel {
f
.
component
[
0
].
type
===
'productGroup'
&&
f
.
component
[
0
].
defaultSkns
)
{
sknsArr
.
push
(
self
.
_getProductBySkns
(
f
.
component
[
0
],
self
.
ctx
));
f
.
component
[
0
].
isStyle2
=
_
.
get
(
f
,
'component[0].newStyle'
)
===
'2'
&&
_
.
get
(
f
,
'component[0].numOfOneRow'
)
===
'2'
;
// eslint-disable-line
f
.
component
[
0
].
newStyle
=
_
.
get
(
f
,
'component[0].newStyle'
)
===
'1'
;
}
...
...
@@ -120,6 +121,7 @@ class featureModel extends global.yoho.BaseModel {
limit
:
'60'
},
f
.
component
[
0
].
searchCondition
||
{});
f
.
component
[
0
].
isStyle2
=
_
.
get
(
f
,
'component[0].newStyle'
)
===
'2'
&&
_
.
get
(
f
,
'component[0].numOfOneRow'
)
===
'2'
;
// eslint-disable-line
f
.
component
[
0
].
newStyle
=
_
.
get
(
f
,
'component[0].newStyle'
)
===
'1'
;
}
...
...
apps/activity/models/have-gain.js
View file @
0fd8583
...
...
@@ -17,7 +17,7 @@ module.exports = class extends global.yoho.BaseModel {
let
gainList
=
[
{
url
:
_
.
get
(
res
[
1
],
'data.checkUrl'
,
''
),
img
:
'//img1
1.static.yhbimg.com/yhb-img01/2018/07/09/10/018092224dc2f48195e3ad15269f981d1f.jp
g?imageView2/{mode}/w/{width}/h/{height}'
,
// eslint-disable-line
img
:
'//img1
0.static.yhbimg.com/yhb-img01/2018/08/15/11/016160c8074cae1bca29ee257673d9540d.jpe
g?imageView2/{mode}/w/{width}/h/{height}'
,
// eslint-disable-line
isShow
:
false
},
{
...
...
apps/activity/views/action/have-gain/apply.hbs
View file @
0fd8583
...
...
@@ -15,7 +15,7 @@
<img
class=
"public-icon"
src=
"
{{
imgSrc
icon
}}
"
/>
<div
class=
"personal"
>
<div
class=
"public-name"
>
{{
name
}}
</div>
<div
class=
"account-name"
data-type=
"
{{
type
}}
"
>
<div
class=
"account-name
{{#if
required
}}
required
{{/if}}
"
data-type=
"
{{
type
}}
"
>
{{#if
account
}}
账号:
<em>
{{
account
}}
</em>
粉丝:
<em
data-fans=
"
{{
fans
}}
"
>
{{
fans
}}
</em>
...
...
apps/activity/views/partial/feature/product-old-style.hbs
View file @
0fd8583
<div
class=
"product-container item
{{
numOfOneRow
}}
"
{{#if
proBgImg
}}
style=
"background:url(
{{
image2
proBgImg
q
=
85
}}
) repeat;background-size:100%;"
<div
class=
"product-container item
{{
numOfOneRow
}}
{{#if
isStyle2
}}
is-style-2
{{/if}}
"
{{#if
proBgImg
}}
style=
"background:url(
{{
image2
proBgImg
q
=
85
}}
) repeat;background-size:100%;"
{{/if}}
>
<div
class=
"product-source"
condition=
'
{{
stringify
searchCondition
}}
'
fp=
"
{{
getAnalysis
..
/
this
@index
}}
"
data-rownum=
"
{{
numOfOneRow
}}
"
{{#
unless
defaultPros
.
length
}}
{{#if
searchCondition
.
item
}}
cloneitem=
"
{{
searchCondition
.
item
}}
"
{{else}}
cloneitem=
"
{{
searchCondition
.
limit
}}
"
{{/if}}
...
...
@@ -30,10 +30,12 @@
</div>
{{/
isEqualOr
}}
{{#
isEqualOr
..
/
showVipPrice
'1'
}}
<div
class=
"vipprice"
style=
"
{{#if
..
/
vipFontColor
}}
color:
{{
..
/
vipFontColor
}}
;
{{/if}}{{#if
..
/
vipBgColor
}}
background:
{{
..
/
vipBgColor
}}
;
{{/if}}
"
>
<span
class=
"vip-price-text"
>
VIP价
</span>
<span
class=
"vip-price-val"
>
¥
{{
vipprice
}}
</span>
</div>
{{#
unless
..
/
isStyle2
}}
<div
class=
"vipprice"
style=
"
{{#if
..
/
vipFontColor
}}
color:
{{
..
/
vipFontColor
}}
;
{{/if}}{{#if
..
/
vipBgColor
}}
background:
{{
..
/
vipBgColor
}}
;
{{/if}}
"
>
<span
class=
"vip-price-text"
>
VIP价
</span>
<span
class=
"vip-price-val"
>
¥
{{
vipprice
}}
</span>
</div>
{{/
unless
}}
{{/
isEqualOr
}}
</div>
</a>
...
...
apps/mip/controllers/guang.js
View file @
0fd8583
...
...
@@ -64,7 +64,7 @@ const _relatedTag = (tags, isApp) => {
value
.
url
=
tagUrl
;
}
else
{
if
(
value
.
url
.
indexOf
(
'openby'
)
>=
0
)
{
value
.
url
=
value
.
url
;
//
value.url = value.url;
}
else
{
value
.
url
=
tagUrl
+
'&openby:yohobuy={"action":"go.h5","params":{"query":"'
+
value
.
name
+
'","type":0,"title":"'
+
value
.
name
+
'","url":"http://guang.m.yohobuy.com/tags/index","islogin":"N"}}'
;
}
...
...
apps/mip/views/action/guang/detail.hbs
View file @
0fd8583
...
...
@@ -133,7 +133,7 @@
<div
class=
"brand-item"
>
<a
href=
"
{{
url
}}
"
>
<div
class=
"pic"
>
<mip-img
class=
"pic-mip"
width=
"75"
height=
"75"
src=
"
{{
thumb
}}
"
>
<mip-img
class=
"pic-mip"
width=
"75"
height=
"75"
src=
"
{{
image2
thumb
w
=
75
h
=
75
}}
"
>
</mip-img>
</div>
<p>
{{
name
}}
</p>
...
...
@@ -149,7 +149,7 @@
<div
class=
"info-item"
>
<a
data-type=
"mip"
data-title=
"
{{
title
}}
"
href=
"//m.yohobuy.com/guang/
{{
id
}}
.html?union_type=100000000013130"
>
<div
class=
"pic"
>
<mip-img
class=
"pic-mip"
width=
"117"
height=
"73"
src=
"
{{
thumb
}}
"
>
<mip-img
class=
"pic-mip"
width=
"117"
height=
"73"
src=
"
{{
image2
thumb
w
=
117
h
=
73
}}
"
>
</mip-img>
</div>
<div
class=
"info"
>
...
...
config/common.js
View file @
0fd8583
...
...
@@ -9,14 +9,14 @@ const pkg = require('../package.json');
const
from
=
require
(
'./from'
);
const
isProduction
=
process
.
env
.
NODE_ENV
===
'production'
;
const
isTest
=
process
.
env
.
NODE_ENV
===
'test'
;
const
isTest
=
process
.
env
.
NODE_ENV
===
'test
3
'
;
const
domains
=
{
api
:
'http://api.yoho.cn/'
,
service
:
'http://api.yoho.cn/'
,
liveApi
:
'http://testapi.live.yohops.com:9999/'
,
singleApi
:
'http://api-test3.yohops.com:9999/'
,
// api: 'http://api.yoho.cn/',
// service: 'http://service.yoho.cn/',
// liveApi: 'http://testapi.live.yohops.com:9999/',
// singleApi: 'http://api-test3.yohops.com:9999/',
// gray
// api: 'http://apigray.yoho.cn/',
...
...
@@ -24,10 +24,10 @@ const domains = {
// platformApi: 'http://172.16.6.210:8088/',
// api: 'http://api-test3.dev.yohocorp.com/',
// service: 'http://api-test3.dev.yohocorp.com/',
// liveApi: 'http://testapi.live.yohops.com:9999/',
// singleApi: 'http://api-test3.dev.yohocorp.com/',
api
:
'http://api-test3.dev.yohocorp.com/'
,
service
:
'http://api-test3.dev.yohocorp.com/'
,
liveApi
:
'http://testapi.live.yohops.com:9999/'
,
singleApi
:
'http://api-test3.dev.yohocorp.com/'
,
imSocket
:
'ws://socket.yohobuy.com:10240'
,
imCs
:
'http://im.yohobuy.com/api'
,
...
...
@@ -283,8 +283,8 @@ if (isProduction) {
Object
.
assign
(
module
.
exports
,
{
assetUrl
:
`
//cdn.yoho.cn/yohobuywap-node/${pkg.version}/`,
domains
:
{
api
:
process
.
env
.
TEST_API
||
'http://api-test1.yohops.com:9999/'
,
service
:
process
.
env
.
TEST_API
||
'http://api-test1.yohops.com:9999/'
,
api
:
process
.
env
.
TEST_API
||
'http://api-test3.dev.yohocorp.com/'
,
service
:
process
.
env
.
TEST_API
||
'http://api-test3.dev.yohocorp.com/'
,
global
:
process
.
env
.
TEST_GLOBAL
||
'http://global-test-soa.yohops.com:9999/'
,
store
:
process
.
env
.
TEST_STORE
||
'http://192.168.102.210:8080/portal-gateway/wechat/'
,
liveApi
:
process
.
env
.
TEST_LIVE
||
'http://testapi.live.yohops.com:9999/'
,
...
...
@@ -319,6 +319,38 @@ if (isProduction) {
host
:
'192.168.102.22'
,
port
:
8086
,
db
:
'web_monitor'
,
},
loggers
:
{
infoFile
:
{
name
:
'info'
,
level
:
'info'
,
filename
:
'/Data/logs/yoho-yohobuy-wap/info/info.log'
,
maxFiles
:
1
,
tailable
:
true
,
maxsize
:
Math
.
pow
(
1024
,
3
),
timestamp
()
{
return
new
Date
().
toString
();
}
},
errorFile
:
{
name
:
'error'
,
level
:
'error'
,
filename
:
'/Data/logs/yoho-yohobuy-wap/error/error.log'
,
maxFiles
:
1
,
tailable
:
true
,
maxsize
:
Math
.
pow
(
1024
,
3
),
handleExceptions
:
true
,
timestamp
()
{
return
new
Date
().
toString
();
}
},
console
:
{
close
:
true
,
level
:
'info'
,
colorize
:
'all'
,
prettyPrint
:
true
,
debugStdout
:
true
}
}
});
}
...
...
docker.sh
View file @
0fd8583
...
...
@@ -7,4 +7,4 @@ if [ "$needBuild" == "YES" ];then
yarn build
fi
yarn build:node --build
=
$needBuild
/usr/local/bin/node-prune ./dist/node/node_modules
\ No newline at end of file
/usr/local/bin/node-prune ./dist/node/node_modules
...
...
doraemon/middleware/limiter/rules/ip-list.js
View file @
0fd8583
'use strict'
;
const
cache
=
global
.
yoho
.
cache
.
master
;
const
_
=
require
(
'lodash'
);
const
logger
=
global
.
yoho
.
logger
;
const
config
=
global
.
yoho
.
config
;
module
.
exports
=
(
limiter
,
policy
)
=>
{
// 和pc共用
const
key
=
`
pc
:
limiter
:
$
{
limiter
.
remoteIp
}
`
;
const
ipBlackKey
=
`
pc
:
limiter
:
$
{
limiter
.
remoteIp
}
`
;
// ci ip黑名单
const
ipLimitKey
=
`
$
{
config
.
app
}
:
limiter
:
$
{
limiter
.
remoteIp
}
`
;
// 业务黑名单
return
cache
.
getAsync
(
key
).
then
((
result
)
=>
{
logger
.
debug
(
key
,
result
);
return
Promise
.
all
([
cache
.
getAsync
(
ipBlackKey
),
cache
.
getAsync
(
ipLimitKey
)
]).
then
(
result
=>
{
let
ipBlackRes
=
result
[
0
];
let
ipLimitRes
=
result
[
1
];
if
(
result
&&
_
.
isNumber
(
result
)
&&
result
!==
-
1
)
{
logger
.
debug
(
ipBlackKey
,
ipBlackRes
);
logger
.
debug
(
ipLimitKey
,
ipLimitRes
);
if
((
ipBlackRes
&&
+
ipBlackRes
>
0
)
||
(
ipLimitRes
&&
+
ipLimitRes
>
0
))
{
return
Promise
.
resolve
(
policy
);
}
else
{
return
Promise
.
resolve
(
true
);
...
...
doraemon/middleware/limiter/rules/qps-limit.js
View file @
0fd8583
...
...
@@ -45,10 +45,10 @@ module.exports = (limiter, policy) => {
if
(
!
results
[
key
])
{
operation
.
push
(
cache
.
setAsync
(
cacheKey
,
1
,
+
key
));
}
else
if
(
+
results
[
key
]
>
+
val
)
{
logger
.
warn
(
`
pc
:
limiter
:
$
{
limiter
.
remoteIp
}
`
);
logger
.
warn
(
`
$
{
config
.
app
}
:
limiter
:
$
{
limiter
.
remoteIp
}
`
);
// ip限制1小时
operation
.
push
(
cache
.
setAsync
(
`
pc
:
limiter
:
$
{
limiter
.
remoteIp
}
`
,
1
,
config
.
LIMITER_IP_TIME
));
operation
.
push
(
cache
.
setAsync
(
`
$
{
config
.
app
}
:
limiter
:
$
{
limiter
.
remoteIp
}
`
,
1
,
config
.
LIMITER_IP_TIME
));
return
Promise
.
resolve
(
policy
);
}
else
{
operation
.
push
(
cache
.
incrAsync
(
cacheKey
,
1
));
...
...
doraemon/middleware/risk-management.js
View file @
0fd8583
...
...
@@ -9,6 +9,7 @@ const cache = global.yoho.cache.master;
const
helpers
=
global
.
yoho
.
helpers
;
const
pathToRegexp
=
require
(
'path-to-regexp'
);
const
logger
=
global
.
yoho
.
logger
;
const
md5
=
require
(
'yoho-md5'
);
const
statusCode
=
{
code
:
4403
,
...
...
@@ -83,7 +84,7 @@ module.exports = () => {
return
next
();
}
let
keyPath
=
`
$
{
_
.
trim
(
path
,
'/'
).
replace
(
/
\/
/g
,
':'
)}
`
;
let
keyPath
=
md5
(
`
$
{
router
.
regRoute
}
`
)
;
let
limitKey
=
`
wap
:
risk
:
limit
:
$
{
keyPath
}
:
$
{
ip
}
`
;
let
configKey
=
`
wap
:
risk
:
$
{
keyPath
}
:
$
{
ip
}
`
;
let
checkUrl
=
helpers
.
urlFormat
(
'/3party/check'
,
{
...
...
doraemon/views/mip.hbs
View file @
0fd8583
...
...
@@ -13,11 +13,10 @@
{{
css
}}
{{
commonCss
}}
{{
localStyle
}}
</
style
>
<
style
mip-custom
>
[
data-clicked
=
true
]
{
display
:
none
;
}
[
data-clicked
=
true
]
{
display
:
none
;
}
</style>
<mip-data>
<script
type=
"application/json"
>
...
...
doraemon/views/partial/analysis.hbs
View file @
0fd8583
...
...
@@ -12,7 +12,7 @@
a.async = 1;
a.src = j;
m.parentNode.insertBefore(a, m);
}(window, document, 'script', (document.location.protocol === 'https:' ? 'https:' : 'http:') + '//cdn.yoho.cn/yas-jssdk/2.4.1
6
/yas.js', '_yas'));
}(window, document, 'script', (document.location.protocol === 'https:' ? 'https:' : 'http:') + '//cdn.yoho.cn/yas-jssdk/2.4.1
7
/yas.js', '_yas'));
var _hmt = _hmt || [];
...
...
public/hbs/product/detail/feedback-tab.hbs
View file @
0fd8583
...
...
@@ -12,7 +12,7 @@
<div
class=
"comment-content-main content-main clearfix"
>
<div
class=
"user-info clearfix"
>
{{#
comments
}}
<span
class=
"user-name"
>
<span
class=
"user-name
{{#if
userName
}}
pd-right
{{/if}}
"
>
{{{
userName
}}}
</span>
<span
class=
"goods-spec"
>
...
...
public/js/activity/have-gain-apply.page.js
View file @
0fd8583
...
...
@@ -35,7 +35,7 @@ class HaveGainApplyPage extends Page {
this
.
jumpVerify
();
this
.
selector
.
$nameInput
.
on
(
'input'
,
this
.
changeBtnStatus
.
bind
(
this
));
this
.
selector
.
$mobileInput
.
on
(
'input'
,
this
.
changeBtnStatus
.
bind
(
this
));
this
.
selector
.
$fillIn
.
on
(
'click'
,
that
.
tapFillIn
);
this
.
selector
.
$fillIn
.
on
(
'click'
,
that
.
tapFillIn
.
bind
(
this
)
);
this
.
selector
.
$agreement
.
on
(
'click'
,
that
.
tapAgreement
);
this
.
selector
.
$applyBtn
.
on
(
'click'
,
this
.
apply
.
bind
(
this
));
}
...
...
@@ -48,12 +48,6 @@ class HaveGainApplyPage extends Page {
// app内审核通过跳转区分处理
if
(
yoho
.
isApp
&&
jumpUrl
.
indexOf
(
'go.minealliance'
)
>
-
1
)
{
// 若指定跳转
if
(
this
.
query
.
passJump
===
'Y'
)
{
jumpUrl
=
`
//m.yohobuy.com/?openby:yohobuy={"action":"go.h5","params":{"title":"${this.query.title}","url":"${this.query.jumpUrl}"}}`; // eslint-disable-line
}
$
(
'body'
).
append
(
'<a id="jump-url" href="javascript:;" style="display: none;"></a>'
);
$
(
'#jump-url'
).
attr
(
'href'
,
jumpUrl
);
...
...
@@ -74,7 +68,11 @@ class HaveGainApplyPage extends Page {
yoho
.
ready
(
jumpFn
);
}
}
else
{
window
.
location
.
href
=
jumpUrl
;
if
(
jumpUrl
.
indexOf
(
'go.minealliance'
)
>
-
1
&&
this
.
query
.
jumpUrl
)
{
window
.
location
.
href
=
this
.
query
.
jumpUrl
;
}
else
{
window
.
location
.
href
=
jumpUrl
;
}
}
}
}
...
...
@@ -83,6 +81,7 @@ class HaveGainApplyPage extends Page {
let
errStatus
=
0
;
let
name
=
$
.
trim
(
this
.
selector
.
$nameInput
.
val
());
let
mobile
=
$
.
trim
(
this
.
selector
.
$mobileInput
.
val
());
let
wxInput
=
$
(
'.account-name.required'
).
find
(
'em'
).
length
>
0
;
if
(
name
===
''
)
{
errStatus
=
1
;
...
...
@@ -90,6 +89,8 @@ class HaveGainApplyPage extends Page {
errStatus
=
2
;
}
else
if
(
!
/^1
[
0-9
]{10}
$/
.
test
(
mobile
))
{
errStatus
=
21
;
}
else
if
(
!
wxInput
)
{
errStatus
=
3
;
}
if
(
errStatus
)
{
...
...
@@ -103,6 +104,7 @@ class HaveGainApplyPage extends Page {
}
tapFillIn
(
event
)
{
let
_this
=
this
;
let
$event
=
$
(
event
.
target
);
if
(
$event
.
hasClass
(
'disable'
))
{
...
...
@@ -139,6 +141,7 @@ class HaveGainApplyPage extends Page {
$accountName
.
html
(
`账号:
<
em
>
$
{
account
}
<
/em> 粉丝:<em data-fans="${fans}">${fansFix}</
em
>
`
);
// eslint-disable-line
dialog
.
hideDialog
();
_this
.
changeBtnStatus
();
$event
.
text
(
'已填写'
).
addClass
(
'disable'
);
});
}
...
...
@@ -185,6 +188,8 @@ class HaveGainApplyPage extends Page {
tip
.
show
(
'请输入手机号'
);
}
else
if
(
errStatus
===
21
)
{
tip
.
show
(
'请输入正确的手机号'
);
}
else
if
(
errStatus
===
3
)
{
tip
.
show
(
'请填写微信账号'
);
}
if
(
errStatus
)
{
...
...
public/scss/feature/product.scss
View file @
0fd8583
...
...
@@ -258,3 +258,56 @@
}
}
}
.is-style-2
{
padding
:
0
30px
10px
;
.feature-product-info
{
width
:
275px
;
margin-right
:
30px
;
margin-top
:
56px
;
.product-name
{
text-align
:
left
;
font-size
:
20px
;
color
:
#444
;
letter-spacing
:
0
;
margin-top
:
20px
;
line-height
:
32px
;
height
:
64px
;
font-family
:
PingFang-SC-Regular
,
sans-serif
;
}
.price
{
text-align
:
left
;
letter-spacing
:
0
;
margin-top
:
3px
;
height
:
27px
;
line-height
:
27px
;
}
.sale-price
{
color
:
#444
;
font-size
:
20px
;
line-height
:
27px
;
float
:
left
;
font-family
:
PingFang-SC-Regular
,
sans-serif
;
}
.market-price
{
color
:
#b0b0b0
;
font-size
:
20px
;
line-height
:
27px
;
float
:
left
;
margin-left
:
10px
;
font-family
:
PingFang-SC-Regular
,
sans-serif
;
}
.product-detail-imgbox
{
.product-detail-img
{
width
:
100%
;
height
:
369px
;
}
}
}
}
...
...
public/scss/product/detail/detail.scss
View file @
0fd8583
...
...
@@ -858,12 +858,16 @@ $basicBtnC: #eb0313;
.user-name
{
font-size
:
24px
;
line-height
:
62px
;
height
:
62px
;
color
:
$mainFontC
;
padding-left
:
28px
;
padding-right
:
18px
;
float
:
left
;
}
.pd-right
{
padding-right
:
18px
;
}
.user-info
{
max-width
:
100%
;
}
...
...
public/static/yas-jssdk/2.4.17/yas.js
0 → 100644
View file @
0fd8583
!
function
(
e
){
function
t
(
o
){
if
(
n
[
o
])
return
n
[
o
].
exports
;
var
i
=
n
[
o
]
=
{
exports
:{},
id
:
o
,
loaded
:
!
1
};
return
e
[
o
].
call
(
i
.
exports
,
i
,
i
.
exports
,
t
),
i
.
loaded
=!
0
,
i
.
exports
}
var
n
=
{};
t
.
m
=
e
,
t
.
c
=
n
,
t
.
p
=
""
,
t
(
0
)}([
function
(
e
,
t
,
n
){
var
o
=
n
(
20
);
if
(
window
.
YohoAcquisitionObject
){
var
i
=
window
.
YohoAcquisitionObject
;
window
[
i
].
p
&&
(
o
.
apply
(
this
,
window
[
i
].
p
),
window
[
i
]
=
o
)}
e
.
exports
=
o
},
function
(
e
,
t
){
e
.
exports
=
function
(
e
,
t
,
n
){
if
(
void
0
===
t
){
var
o
=
null
;
if
(
document
.
cookie
)
for
(
var
i
=
document
.
cookie
.
split
(
";"
),
r
=
0
;
r
<
i
.
length
;
r
++
){
var
a
=
(
i
[
r
]
||
""
).
trim
();
if
(
a
.
substring
(
0
,
e
.
length
+
1
)
==
e
+
"="
){
o
=
decodeURIComponent
(
a
.
substring
(
e
.
length
+
1
));
break
}}
return
o
}
n
=
n
||
{},
null
===
t
&&
(
t
=
""
,
n
.
expires
=-
1
);
var
d
=
""
;
if
(
n
.
expires
&&
(
"number"
==
typeof
n
.
expires
||
n
.
expires
.
toUTCString
)){
var
s
;
"number"
==
typeof
n
.
expires
?(
s
=
new
Date
,
s
.
setTime
(
s
.
getTime
()
+
24
*
n
.
expires
*
60
*
60
*
1
e3
)):
s
=
n
.
expires
,
d
=
"; expires="
+
s
.
toUTCString
()}
var
c
=
n
.
path
?
"; path="
+
n
.
path
:
""
,
p
=
n
.
domain
?
"; domain="
+
n
.
domain
:
""
,
l
=
n
.
secure
?
"; secure"
:
""
;
document
.
cookie
=
[
e
,
"="
,
encodeURIComponent
(
t
),
d
,
c
,
p
,
l
].
join
(
""
)}},,,
function
(
e
,
t
){
e
.
exports
=
function
(){
var
e
=
[];
return
e
.
toString
=
function
(){
for
(
var
e
=
[],
t
=
0
;
t
<
this
.
length
;
t
++
){
var
n
=
this
[
t
];
n
[
2
]?
e
.
push
(
"@media "
+
n
[
2
]
+
"{"
+
n
[
1
]
+
"}"
):
e
.
push
(
n
[
1
])}
return
e
.
join
(
""
)},
e
.
i
=
function
(
t
,
n
){
"string"
==
typeof
t
&&
(
t
=
[[
null
,
t
,
""
]]);
for
(
var
o
=
{},
i
=
0
;
i
<
this
.
length
;
i
++
){
var
r
=
this
[
i
][
0
];
"number"
==
typeof
r
&&
(
o
[
r
]
=!
0
)}
for
(
i
=
0
;
i
<
t
.
length
;
i
++
){
var
a
=
t
[
i
];
"number"
==
typeof
a
[
0
]
&&
o
[
a
[
0
]]
||
(
n
&&!
a
[
2
]?
a
[
2
]
=
n
:
n
&&
(
a
[
2
]
=
"("
+
a
[
2
]
+
") and ("
+
n
+
")"
),
e
.
push
(
a
))}},
e
}},
function
(
e
,
t
,
n
){
function
o
(
e
,
t
){
for
(
var
n
=
0
;
n
<
e
.
length
;
n
++
){
var
o
=
e
[
n
],
i
=
f
[
o
.
id
];
if
(
i
){
i
.
refs
++
;
for
(
var
r
=
0
;
r
<
i
.
parts
.
length
;
r
++
)
i
.
parts
[
r
](
o
.
parts
[
r
]);
for
(;
r
<
o
.
parts
.
length
;
r
++
)
i
.
parts
.
push
(
c
(
o
.
parts
[
r
],
t
))}
else
{
for
(
var
a
=
[],
r
=
0
;
r
<
o
.
parts
.
length
;
r
++
)
a
.
push
(
c
(
o
.
parts
[
r
],
t
));
f
[
o
.
id
]
=
{
id
:
o
.
id
,
refs
:
1
,
parts
:
a
}}}}
function
i
(
e
){
for
(
var
t
=
[],
n
=
{},
o
=
0
;
o
<
e
.
length
;
o
++
){
var
i
=
e
[
o
],
r
=
i
[
0
],
a
=
i
[
1
],
d
=
i
[
2
],
s
=
i
[
3
],
c
=
{
css
:
a
,
media
:
d
,
sourceMap
:
s
};
n
[
r
]?
n
[
r
].
parts
.
push
(
c
):
t
.
push
(
n
[
r
]
=
{
id
:
r
,
parts
:[
c
]})}
return
t
}
function
r
(
e
,
t
){
var
n
=
g
(),
o
=
y
[
y
.
length
-
1
];
if
(
"top"
===
e
.
insertAt
)
o
?
o
.
nextSibling
?
n
.
insertBefore
(
t
,
o
.
nextSibling
):
n
.
appendChild
(
t
):
n
.
insertBefore
(
t
,
n
.
firstChild
),
y
.
push
(
t
);
else
{
if
(
"bottom"
!==
e
.
insertAt
)
throw
new
Error
(
"Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'."
);
n
.
appendChild
(
t
)}}
function
a
(
e
){
e
.
parentNode
.
removeChild
(
e
);
var
t
=
y
.
indexOf
(
e
);
t
>=
0
&&
y
.
splice
(
t
,
1
)}
function
d
(
e
){
var
t
=
document
.
createElement
(
"style"
);
return
t
.
type
=
"text/css"
,
r
(
e
,
t
),
t
}
function
s
(
e
){
var
t
=
document
.
createElement
(
"link"
);
return
t
.
rel
=
"stylesheet"
,
r
(
e
,
t
),
t
}
function
c
(
e
,
t
){
var
n
,
o
,
i
;
if
(
t
.
singleton
){
var
r
=
v
++
;
n
=
w
||
(
w
=
d
(
t
)),
o
=
p
.
bind
(
null
,
n
,
r
,
!
1
),
i
=
p
.
bind
(
null
,
n
,
r
,
!
0
)}
else
e
.
sourceMap
&&
"function"
==
typeof
URL
&&
"function"
==
typeof
URL
.
createObjectURL
&&
"function"
==
typeof
URL
.
revokeObjectURL
&&
"function"
==
typeof
Blob
&&
"function"
==
typeof
btoa
?(
n
=
s
(
t
),
o
=
u
.
bind
(
null
,
n
),
i
=
function
(){
a
(
n
),
n
.
href
&&
URL
.
revokeObjectURL
(
n
.
href
)}):(
n
=
d
(
t
),
o
=
l
.
bind
(
null
,
n
),
i
=
function
(){
a
(
n
)});
return
o
(
e
),
function
(
t
){
if
(
t
){
if
(
t
.
css
===
e
.
css
&&
t
.
media
===
e
.
media
&&
t
.
sourceMap
===
e
.
sourceMap
)
return
;
o
(
e
=
t
)}
else
i
()}}
function
p
(
e
,
t
,
n
,
o
){
var
i
=
n
?
""
:
o
.
css
;
if
(
e
.
styleSheet
)
e
.
styleSheet
.
cssText
=
b
(
t
,
i
);
else
{
var
r
=
document
.
createTextNode
(
i
),
a
=
e
.
childNodes
;
a
[
t
]
&&
e
.
removeChild
(
a
[
t
]),
a
.
length
?
e
.
insertBefore
(
r
,
a
[
t
]):
e
.
appendChild
(
r
)}}
function
l
(
e
,
t
){
var
n
=
t
.
css
,
o
=
t
.
media
;
if
(
o
&&
e
.
setAttribute
(
"media"
,
o
),
e
.
styleSheet
)
e
.
styleSheet
.
cssText
=
n
;
else
{
for
(;
e
.
firstChild
;)
e
.
removeChild
(
e
.
firstChild
);
e
.
appendChild
(
document
.
createTextNode
(
n
))}}
function
u
(
e
,
t
){
var
n
=
t
.
css
,
o
=
t
.
sourceMap
;
o
&&
(
n
+=
"\n/*# sourceMappingURL=data:application/json;base64,"
+
btoa
(
unescape
(
encodeURIComponent
(
JSON
.
stringify
(
o
))))
+
" */"
);
var
i
=
new
Blob
([
n
],{
type
:
"text/css"
}),
r
=
e
.
href
;
e
.
href
=
URL
.
createObjectURL
(
i
),
r
&&
URL
.
revokeObjectURL
(
r
)}
var
f
=
{},
m
=
function
(
e
){
var
t
;
return
function
(){
return
void
0
===
t
&&
(
t
=
e
.
apply
(
this
,
arguments
)),
t
}},
h
=
m
(
function
(){
return
/msie
[
6-9
]\b
/
.
test
(
self
.
navigator
.
userAgent
.
toLowerCase
())}),
g
=
m
(
function
(){
return
document
.
head
||
document
.
getElementsByTagName
(
"head"
)[
0
]}),
w
=
null
,
v
=
0
,
y
=
[];
e
.
exports
=
function
(
e
,
t
){
t
=
t
||
{},
void
0
===
t
.
singleton
&&
(
t
.
singleton
=
h
()),
void
0
===
t
.
insertAt
&&
(
t
.
insertAt
=
"bottom"
);
var
n
=
i
(
e
);
return
o
(
n
,
t
),
function
(
e
){
for
(
var
r
=
[],
a
=
0
;
a
<
n
.
length
;
a
++
){
var
d
=
n
[
a
],
s
=
f
[
d
.
id
];
s
.
refs
--
,
r
.
push
(
s
)}
if
(
e
){
o
(
i
(
e
),
t
)}
for
(
var
a
=
0
;
a
<
r
.
length
;
a
++
){
var
s
=
r
[
a
];
if
(
0
===
s
.
refs
){
for
(
var
c
=
0
;
c
<
s
.
parts
.
length
;
c
++
)
s
.
parts
[
c
]();
delete
f
[
s
.
id
]}}}};
var
b
=
function
(){
var
e
=
[];
return
function
(
t
,
n
){
return
e
[
t
]
=
n
,
e
.
filter
(
Boolean
).
join
(
"\n"
)}}()},
function
(
e
,
t
){
function
n
(){
var
e
=
document
.
domain
.
split
(
"."
),
t
=
e
.
length
;
return
t
>
1
&&
isNaN
(
e
[
t
-
1
])?
"."
+
e
[
t
-
2
]
+
"."
+
e
[
t
-
1
]:
document
.
domain
}
e
.
exports
=
{
version
:
"1.0"
,
yasPath
:
"/web/"
,
yasDomain
:
n
(),
yasImgDomain
:
"//analytics.m.yohobuy.com/yas.gif"
,
yasMobileDomain
:
"//analytics.m.yohobuy.com/yas_mobile"
}},
function
(
e
,
t
,
n
){
var
o
=
n
(
1
);
t
.
flashChecker
=
function
(){
var
e
=
0
,
t
=
0
,
n
=
null
;
return
navigator
.
plugins
&&
navigator
.
plugins
.
length
>
0
&&
(
n
=
navigator
.
plugins
[
"Shockwave Flash"
])
&&
(
e
=
1
,
t
=
n
.
description
.
replace
(
"Shockwave Flash"
,
""
)),{
f
:
e
,
v
:
t
}},
t
.
Hash
=
function
(
e
){
var
t
,
n
=
1
,
o
=
0
;
if
(
e
)
for
(
n
=
0
,
t
=
e
.
length
-
1
;
t
>=
0
;
t
--
)
o
=
e
.
charCodeAt
(
t
),
n
=
(
n
<<
6
&
268435455
)
+
o
+
(
o
<<
14
),
0
!==
(
o
=
266338304
&
n
)
&&
(
n
^=
o
>>
21
);
return
n
},
t
.
Random
=
function
(){
return
Math
.
round
(
2147483647
*
Math
.
random
())},
t
.
hashClientInfo
=
function
(){
var
e
=
window
.
navigator
,
n
=
window
.
history
.
length
;
e
=
[
e
.
appName
,
e
.
version
,
e
.
language
,
e
.
platform
,
e
.
userAgent
,
e
.
javaEnabled
(),
window
.
screen
,
window
.
screen
.
colorDepth
,
window
.
document
.
cookie
?
window
.
document
.
cookie
:
""
,
window
.
document
.
referrer
?
window
.
document
.
referrer
:
""
].
join
(
""
);
for
(
var
o
=
e
.
length
;
n
>
0
;)
e
+=
n
--^
o
++
;
return
t
.
Hash
(
e
)},
t
.
merge
=
function
(
e
,
t
){
var
n
=
{};
for
(
var
o
in
e
)
n
[
o
]
=
e
[
o
];
for
(
var
i
in
t
)
n
[
i
]
=
t
[
i
];
return
n
},
t
.
genParam
=
function
(
e
){
var
t
=
[];
for
(
var
n
in
e
)
t
.
push
(
n
+
"="
+
e
[
n
]);
return
t
.
join
(
"&"
)},
t
.
trim
=
function
(
e
){
if
(
String
.
prototype
.
trim
)
return
null
===
e
?
""
:
String
.
prototype
.
trim
.
call
(
e
);
var
t
=
/^
\s
+/
,
n
=
/
\s
+$/
,
o
=
""
;
return
e
?(
o
=
e
.
toString
().
replace
(
t
,
""
),
o
=
o
.
replace
(
n
,
""
)):
void
0
},
t
.
getGeo
=
function
(
e
){
function
t
(
t
){
var
n
=
t
.
coords
.
longitude
,
o
=
t
.
coords
.
latitude
;
e
(
o
,
n
)}
function
n
(
t
){
e
(
!
1
)}
if
(
window
.
navigator
.
geolocation
){
var
o
=
{
enableHighAccuracy
:
!
0
};
window
.
navigator
.
geolocation
.
getCurrentPosition
(
t
,
n
,
o
)}
else
e
(
!
1
)},
t
.
queryString
=
function
(){
var
e
,
t
,
n
=
{},
o
=
window
.
location
.
search
.
slice
(
1
).
split
(
"&"
);
for
(
t
=
0
;
t
<
o
.
length
;
t
++
)
e
=
o
[
t
].
split
(
"="
),
n
[
e
[
0
]]
=
e
[
1
];
return
n
},
t
.
closest
=
function
(
e
,
t
){
for
(
var
n
=
e
.
matches
||
e
.
webkitMatchesSelector
||
e
.
mozMatchesSelector
||
e
.
msMatchesSelector
;
e
&&!
n
.
call
(
e
,
t
);)
e
=
e
.
parentElement
;
return
e
},
t
.
getChannel
=
function
(){
return
{
men
:
1
,
women
:
2
,
boys
:
1
,
girls
:
2
,
kids
:
3
,
lifestyle
:
4
}[
o
(
"_Channel"
)
||
"boys"
]};
t
.
getAppVersion
=
function
(){
return
window
.
qs
.
app_version
||
window
.
qs
.
appVersion
};
var
i
=
{
"baidu.com"
:
0x5af3107a4037
,
"so.com"
:
0x5af3107a4031
,
"sogou.com"
:
0x5af3107a4035
,
"bing.com"
:
0x5af3107a4039
,
"m.sm.cn"
:
0x5af3107a403b
,
"google.com"
:
0x5af3107a403d
};
"m.yohobuy.com"
===
location
.
hostname
||
/
\.
m
\.
yohobuy
\.
com$/
.
test
(
location
.
hostname
)
||
(
i
=
{
"baidu.com"
:
0x5af3107a5f73
,
"so.com"
:
0x5af3107a5f6b
,
"sogou.com"
:
0x5af3107a5f71
,
"bing.com"
:
0x5af3107a5f6d
,
"m.sm.cn"
:
0x5af3107a5f75
,
"google.com"
:
0x5af3107a5f6f
}),
t
.
getMktcBySeo
=
function
(){
var
e
,
t
=
document
.
referrer
;
for
(
var
n
in
i
)
if
(
t
.
indexOf
(
n
)
>-
1
){
e
=
i
[
n
];
break
}
return
e
},
t
.
setFontSize
=
function
(){
var
e
=
document
.
documentElement
;
if
(
!
e
.
style
.
fontSize
){
var
t
=
e
.
clientWidth
;
if
(
!
t
)
return
;
e
.
style
.
fontSize
=
t
>=
640
?
"40px"
:
t
/
640
*
40
+
"px"
}},
t
.
getMiniAppDialog
=
function
(){
var
e
=
"//cdn.yoho.cn/static/wechat/miniapp-yohobuy.jpg?imageView2/1/w/258/h/258&t="
+
(
new
Date
).
getTime
(),
t
=
document
.
getElementById
(
"main-wrap"
).
getAttribute
(
"data-minipath"
)
||
e
,
n
=
'<div class="mini-app-dialog-bg" id="mini-app-dialog-bg"></div>'
;
return
n
+=
'<div class="mini-app-dialog" id="mini-app-dialog">'
,
n
+=
'<div class="mini-app-header"><span class="mini-app-close" id="mini-app-close"></span></div>'
,
n
+=
'<div class="mini-app-content"><img id="mini-app-img" src="'
+
t
+
'" onerror="this.src= \''
+
e
+
"';this.onerror=null;\" /></div>"
,
n
+=
'<div class="mini-app-footer">长按识别小程序码进入有货精选</div>'
,
n
+=
"</div>"
},
t
.
getDownloadStr
=
function
(
e
){
var
t
=
'<div class="top-downloadbar'
;
return
e
&&
(
t
+=
" top-downloadbar-wechat"
),
t
+=
'" id="top-downloadbar"><a href="javascript:void(0);" class="download-close" id="download-close"></a>\t <span class="download-icon"></span><span class="download-text">Yoho!Buy有货</span>'
,
e
?(
t
+=
'<a class="download-go-wechat" id="download-go" href="https://union.yoho.cn/union/app-downloads.html">立即打开</a>'
,
t
+=
'<a class="mini-app-open" id="mini-app-open" href="javascript:;">进入小程序</a>'
):(
t
+=
'<p class="download-text-desc">新用户送惊喜礼包</p>'
,
t
+=
'<a class="download-go" id="download-go" href="https://union.yoho.cn/union/app-downloads.html">立即打开</a></div>'
),
t
},
t
.
getAppPath
=
function
(){
var
e
=
document
.
getElementById
(
"main-wrap"
).
dataset
||
{},
t
=
e
.
apppath
;
return
t
=
(
t
||
""
).
replace
(
"yohobuy://yohobuy.com/goapp?"
,
""
)
||
'openby:yohobuy={"action":"go.home","params":{"gender":"1","channel":"2"}}'
},
t
.
getUdid
=
function
(){
return
o
(
"udid"
)
||
""
||
0
}},
function
(
e
,
t
,
n
){
t
=
e
.
exports
=
n
(
4
)(),
t
.
push
([
e
.
id
,
'.top-downloadbar{display:block;height:2.25rem;background:rgba(68,68,68,.95);width:100%;padding:.125rem 0;position:relative;box-sizing:content-box}.top-downloadbar .download-close{margin-left:.25rem;width:.7rem;height:.7rem;background-image:url("data:image/png;base64,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")}.top-downloadbar .download-close,.top-downloadbar .download-icon{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-size:cover}.top-downloadbar .download-icon{width:2rem;height:2rem;left:1.25rem;background-image:url("data:image/png;base64,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")}.top-downloadbar .download-text{position:absolute;top:50%;-webkit-transform:translateY(-80%);transform:translateY(-80%);left:3.5rem;color:#fff;font-size:.6rem}.top-downloadbar-wechat .download-text{-webkit-transform:translateY(-50%);transform:translateY(-50%)}.top-downloadbar .download-text-desc{position:absolute;top:50%;-webkit-transform:translateY(-10%) scale(.5);transform:translateY(-10%) scale(.5);-webkit-transform-origin:left center;transform-origin:left center;left:3.5rem;color:#c7c7c7;font-size:1rem}.top-downloadbar .download-go{right:.375rem;background:red}.top-downloadbar .download-go,.top-downloadbar .download-go-wechat{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:.6rem;padding:0 .375rem;height:1.125rem;line-height:1.125rem;border-radius:.125rem;color:#fff;text-decoration:none}.top-downloadbar .download-go-wechat{right:4.7rem;background:#000}.top-downloadbar .download-wechat,.top-downloadbar .mini-app-open{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);right:.375rem;font-size:.6rem;padding:0 .375rem;height:1.125rem;line-height:1.125rem;border-radius:.125rem;background:red;color:#fff;text-decoration:none}'
,
""
])},
function
(
e
,
t
,
n
){
t
=
e
.
exports
=
n
(
4
)(),
t
.
push
([
e
.
id
,
'.mini-app-dialog,.mini-app-dialog-bg{display:none}.mini-app-dialog-bg{background-color:#000;opacity:.3;position:fixed;width:100%;z-index:9998;height:100%}.mini-app-dialog{position:fixed;z-index:9999;left:50%;top:50%;width:12.5rem;border-radius:.2rem;background-color:#fff;margin-left:-6.25rem;margin-top:-6.8rem}.mini-app-dialog,.mini-app-dialog div{text-align:center}.mini-app-dialog .mini-app-header{height:2rem;line-height:2rem}.mini-app-dialog .mini-app-content{padding:.625rem}.mini-app-dialog .mini-app-content img{width:6.45rem;height:6.45rem}.mini-app-dialog .mini-app-footer{height:3.65rem;line-height:3.65rem;font-size:.7rem}.mini-app-dialog .mini-app-close{width:.75rem;height:.75rem;position:absolute;right:.25rem;top:.25rem;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmFJREFUeNrMl99OE0EUxrdL9bYYbWoEJajUP5ckXsM2IZJe0IQQqY9AGq0+QY0vUExs+gqQkCblAi0ktPckvUQoQoyihDbE6qWELN9pzjbr6O7MlK7xJB/Tdg/nN+fszOzZkG3bhszK5fIlDI+hKegRdAe6wpe/Q/vQFrQBradSqV+ymCE/MICDGF5AGeiaoWYnUAHKYwJtbTCgaQyLUMzozZpQFvAlJTCAAxjecJb9sCL0DBM48wQzlGY4Z/TXStATN9wUHBYDgJLNchX/zBjZznO2QdpT5553wLx6dy6wkFStBcVptTulzvpAJ3jfNhQCb0Mj0LTH9Sj0snOPke1lyQr+ihkeYExAexKoBd/P9D8+fhlimnwaRX0c38FxCAEpmOUBJ2gCPk34UsarPvGu0ilo8lHoZ2PQpgsuZv6BocfwuYXPVWhUErMDHle4d3GG3wDgkOEfGWq5oDUFKNm4yRkZPcCtHjLtVjGMPxGN7XCP4RbDaSveZOhtjTgRytjW3Iu24m++RuCfGv67XN4jZDoMXcfnL1z2A404P0zJ3hShlgPl8lZd8EkN+B6B67qZMvQudJ/vuS68TuCKxKnB0G8C1LEHDI9plL1icp/U8nFKuqCbAtQNrzKcjswZSWtUcZ5OOXx55eFI5aNM3ivseTo6k9BDaM3D5zUmlwvzF3pIL3g8oWoaq5WAnySPxXy3A+FuMGsEb8+dzrPb+uCHZQxvA4QW3B2n2HNRD70SALQkVvQ3MHeBaW7I+2VFscP8vxr6v7zCZLk1iv6TVxiFl7ZBvtwWXtoqAJ7KYp4LMACryxGMnWAbNgAAAABJRU5ErkJggg==");background-size:cover}'
,
""
])},
function
(
e
,
t
,
n
){
var
o
=
n
(
8
);
"string"
==
typeof
o
&&
(
o
=
[[
e
.
id
,
o
,
""
]]);
n
(
5
)(
o
,{});
o
.
locals
&&
(
e
.
exports
=
o
.
locals
)},
function
(
e
,
t
,
n
){
var
o
=
n
(
9
);
"string"
==
typeof
o
&&
(
o
=
[[
e
.
id
,
o
,
""
]]);
n
(
5
)(
o
,{});
o
.
locals
&&
(
e
.
exports
=
o
.
locals
)},
function
(
module
,
exports
){
"object"
!=
typeof
JSON
&&
(
JSON
=
{}),
function
(){
"use strict"
;
function
f
(
e
){
return
e
<
10
?
"0"
+
e
:
e
}
function
this_value
(){
return
this
.
valueOf
()}
function
quote
(
e
){
return
rx_escapable
.
lastIndex
=
0
,
rx_escapable
.
test
(
e
)?
'"'
+
e
.
replace
(
rx_escapable
,
function
(
e
){
var
t
=
meta
[
e
];
return
"string"
==
typeof
t
?
t
:
"\\u"
+
(
"0000"
+
e
.
charCodeAt
(
0
).
toString
(
16
)).
slice
(
-
4
)})
+
'"'
:
'"'
+
e
+
'"'
}
function
str
(
e
,
t
){
var
n
,
o
,
i
,
r
,
a
,
d
=
gap
,
s
=
t
[
e
];
switch
(
s
&&
"object"
==
typeof
s
&&
"function"
==
typeof
s
.
toJSON
&&
(
s
=
s
.
toJSON
(
e
)),
"function"
==
typeof
rep
&&
(
s
=
rep
.
call
(
t
,
e
,
s
)),
typeof
s
){
case
"string"
:
return
quote
(
s
);
case
"number"
:
return
isFinite
(
s
)?
String
(
s
):
"null"
;
case
"boolean"
:
case
"null"
:
return
String
(
s
);
case
"object"
:
if
(
!
s
)
return
"null"
;
if
(
gap
+=
indent
,
a
=
[],
"[object Array]"
===
Object
.
prototype
.
toString
.
apply
(
s
)){
for
(
r
=
s
.
length
,
n
=
0
;
n
<
r
;
n
+=
1
)
a
[
n
]
=
str
(
n
,
s
)
||
"null"
;
return
i
=
0
===
a
.
length
?
"[]"
:
gap
?
"[\n"
+
gap
+
a
.
join
(
",\n"
+
gap
)
+
"\n"
+
d
+
"]"
:
"["
+
a
.
join
(
","
)
+
"]"
,
gap
=
d
,
i
}
if
(
rep
&&
"object"
==
typeof
rep
)
for
(
r
=
rep
.
length
,
n
=
0
;
n
<
r
;
n
+=
1
)
"string"
==
typeof
rep
[
n
]
&&
(
o
=
rep
[
n
],(
i
=
str
(
o
,
s
))
&&
a
.
push
(
quote
(
o
)
+
(
gap
?
": "
:
":"
)
+
i
));
else
for
(
o
in
s
)
Object
.
prototype
.
hasOwnProperty
.
call
(
s
,
o
)
&&
(
i
=
str
(
o
,
s
))
&&
a
.
push
(
quote
(
o
)
+
(
gap
?
": "
:
":"
)
+
i
);
return
i
=
0
===
a
.
length
?
"{}"
:
gap
?
"{\n"
+
gap
+
a
.
join
(
",\n"
+
gap
)
+
"\n"
+
d
+
"}"
:
"{"
+
a
.
join
(
","
)
+
"}"
,
gap
=
d
,
i
}}
var
rx_one
=
/^
[\]
,:{}
\s]
*$/
,
rx_two
=
/
\\(?:[
"
\\\/
bfnrt
]
|u
[
0-9a-fA-F
]{4})
/g
,
rx_three
=
/"
[^
"
\\\n\r]
*"|true|false|null|-
?\d
+
(?:\.\d
*
)?(?:[
eE
][
+
\-]?\d
+
)?
/g
,
rx_four
=
/
(?:
^|:|,
)(?:\s
*
\[)
+/g
,
rx_escapable
=
/
[\\\"\u
0000-
\u
001f
\u
007f-
\u
009f
\u
00ad
\u
0600-
\u
0604
\u
070f
\u
17b4
\u
17b5
\u
200c-
\u
200f
\u
2028-
\u
202f
\u
2060-
\u
206f
\u
feff
\u
fff0-
\u
ffff
]
/g
,
rx_dangerous
=
/
[\u
0000
\u
00ad
\u
0600-
\u
0604
\u
070f
\u
17b4
\u
17b5
\u
200c-
\u
200f
\u
2028-
\u
202f
\u
2060-
\u
206f
\u
feff
\u
fff0-
\u
ffff
]
/g
;
"function"
!=
typeof
Date
.
prototype
.
toJSON
&&
(
Date
.
prototype
.
toJSON
=
function
(){
return
isFinite
(
this
.
valueOf
())?
this
.
getUTCFullYear
()
+
"-"
+
f
(
this
.
getUTCMonth
()
+
1
)
+
"-"
+
f
(
this
.
getUTCDate
())
+
"T"
+
f
(
this
.
getUTCHours
())
+
":"
+
f
(
this
.
getUTCMinutes
())
+
":"
+
f
(
this
.
getUTCSeconds
())
+
"Z"
:
null
},
Boolean
.
prototype
.
toJSON
=
this_value
,
Number
.
prototype
.
toJSON
=
this_value
,
String
.
prototype
.
toJSON
=
this_value
);
var
gap
,
indent
,
meta
,
rep
;
"function"
!=
typeof
JSON
.
stringify
&&
(
meta
=
{
"\b"
:
"\\b"
,
"\t"
:
"\\t"
,
"\n"
:
"\\n"
,
"\f"
:
"\\f"
,
"\r"
:
"\\r"
,
'"'
:
'\\"'
,
"\\"
:
"\\\\"
},
JSON
.
stringify
=
function
(
e
,
t
,
n
){
var
o
;
if
(
gap
=
""
,
indent
=
""
,
"number"
==
typeof
n
)
for
(
o
=
0
;
o
<
n
;
o
+=
1
)
indent
+=
" "
;
else
"string"
==
typeof
n
&&
(
indent
=
n
);
if
(
rep
=
t
,
t
&&
"function"
!=
typeof
t
&&
(
"object"
!=
typeof
t
||
"number"
!=
typeof
t
.
length
))
throw
new
Error
(
"JSON.stringify"
);
return
str
(
""
,{
""
:
e
})}),
"function"
!=
typeof
JSON
.
parse
&&
(
JSON
.
parse
=
function
(
text
,
reviver
){
function
walk
(
e
,
t
){
var
n
,
o
,
i
=
e
[
t
];
if
(
i
&&
"object"
==
typeof
i
)
for
(
n
in
i
)
Object
.
prototype
.
hasOwnProperty
.
call
(
i
,
n
)
&&
(
o
=
walk
(
i
,
n
),
void
0
!==
o
?
i
[
n
]
=
o
:
delete
i
[
n
]);
return
reviver
.
call
(
e
,
t
,
i
)}
var
j
;
if
(
text
=
String
(
text
),
rx_dangerous
.
lastIndex
=
0
,
rx_dangerous
.
test
(
text
)
&&
(
text
=
text
.
replace
(
rx_dangerous
,
function
(
e
){
return
"\\u"
+
(
"0000"
+
e
.
charCodeAt
(
0
).
toString
(
16
)).
slice
(
-
4
)})),
rx_one
.
test
(
text
.
replace
(
rx_two
,
"@"
).
replace
(
rx_three
,
"]"
).
replace
(
rx_four
,
""
)))
return
j
=
eval
(
"("
+
text
+
")"
),
"function"
==
typeof
reviver
?
walk
({
""
:
j
},
""
):
j
;
throw
new
SyntaxError
(
"JSON.parse"
)})}(),
module
.
exports
=
JSON
},
function
(
e
,
t
,
n
){
var
o
=
n
(
7
),
i
=
n
(
6
),
r
=
i
.
yasPath
,
a
=
i
.
yasImgDomain
,
d
=
i
.
yasMobileDomain
,
s
=
function
(
e
,
t
){
var
n
;
return
window
.
XMLHttpRequest
?
n
=
new
XMLHttpRequest
:
"undefined"
!=
typeof
XDomainRequest
?
n
=
new
XDomainRequest
:
window
.
ActiveXObject
&&
(
n
=
new
ActiveXObject
(
"Microsoft.XMLHTTP"
)),
n
};
t
.
imgSend
=
function
(
e
,
t
){
var
n
=
o
.
getAppVersion
();
if
(
!
(
window
.
appBaseLogs
||
window
.
yohoInterface
||
n
>=
"5.2.1"
)){
var
i
=
new
Image
(
1
,
1
);
i
.
src
=
a
+
r
+
"?"
+
e
,
i
.
onload
=
function
(){
i
.
onload
=
null
,
t
&&
t
()}}},
t
.
appSend
=
function
(
e
,
t
){
if
(
window
.
appBaseLogs
){
var
n
=
s
();
n
&&
(
n
.
ontimeout
=
function
(
e
){
console
.
log
(
"timeout: "
,
JSON
.
stringify
(
e
))},
n
.
onerror
=
function
(
e
){
console
.
log
(
"error: "
,
JSON
.
stringify
(
e
))},
n
.
onreadystatechange
=
function
(){
4
==
n
.
readyState
&&
200
==
n
.
status
&&
t
&&
t
()},
n
.
open
(
"post"
,(
"https:"
===
document
.
location
.
protocol
?
"https:"
:
"http:"
)
+
d
,
!
0
),
n
.
setRequestHeader
(
"Content-Type"
,
"application/x-www-form-urlencoded"
),
n
.
send
(
e
))}},
t
.
downloadSend
=
function
(
e
,
t
,
n
){
var
o
=
s
();
o
&&
(
o
.
ontimeout
=
function
(
e
){
console
.
log
(
"timeout: "
,
JSON
.
stringify
(
e
))},
o
.
onerror
=
function
(
e
){
console
.
log
(
"error: "
,
JSON
.
stringify
(
e
))},
o
.
onreadystatechange
=
function
(){
4
==
o
.
readyState
&&
200
==
o
.
status
&&
n
&&
n
()},
o
.
open
(
"post"
,(
"https:"
===
document
.
location
.
protocol
?
"https:"
:
"http:"
)
+
e
,
!
0
),
o
.
setRequestHeader
(
"Content-Type"
,
"application/x-www-form-urlencoded"
),
o
.
send
(
t
))}},
function
(
e
,
t
){
t
.
addEventHandler
=
function
(
e
,
t
,
n
){
e
&&
(
e
.
addEventListener
?
e
.
addEventListener
(
t
,
n
,
!
1
):
e
.
attachEvent
?
e
.
attachEvent
(
"on"
+
t
,
n
):
e
[
"on"
+
t
]
=
n
)},
t
.
removeEventHandler
=
function
(
e
,
t
,
n
){
e
&&
(
e
.
removeEventListener
?
e
.
removeEventListener
(
t
,
n
,
!
1
):
e
.
detachEvent
?
e
.
detachEvent
(
"on"
+
t
,
n
):
delete
e
[
"on"
+
t
])}},
function
(
e
,
t
){
t
.
init
=
function
(){
"bind"
in
Function
.
prototype
||
(
Function
.
prototype
.
bind
=
function
(
e
){
var
t
=
this
;
if
(
arguments
.
length
<=
1
)
return
function
(){
return
t
.
apply
(
e
,
arguments
)};
var
n
=
Array
.
prototype
.
slice
.
call
(
arguments
,
1
);
return
function
(){
return
t
.
apply
(
e
,
0
===
arguments
.
length
?
n
:
n
.
concat
(
Array
.
prototype
.
slice
.
call
(
arguments
)))}}),
"trim"
in
String
.
prototype
||
(
String
.
prototype
.
trim
=
function
(){
return
this
.
replace
(
/^
\s
+/
,
""
).
replace
(
/
\s
+$/
,
""
)}),
"indexOf"
in
Array
.
prototype
||
(
Array
.
prototype
.
indexOf
=
function
(
e
,
t
){
void
0
===
t
&&
(
t
=
0
),
t
<
0
&&
(
t
+=
this
.
length
),
t
<
0
&&
(
t
=
0
);
for
(
var
n
=
this
.
length
;
t
<
n
;
t
++
)
if
(
t
in
this
&&
this
[
t
]
===
e
)
return
t
;
return
-
1
}),
"lastIndexOf"
in
Array
.
prototype
||
(
Array
.
prototype
.
lastIndexOf
=
function
(
e
,
t
){
for
(
void
0
===
t
&&
(
t
=
this
.
length
-
1
),
t
<
0
&&
(
t
+=
this
.
length
),
t
>
this
.
length
-
1
&&
(
t
=
this
.
length
-
1
),
t
++
;
t
--
>
0
;)
if
(
t
in
this
&&
this
[
t
]
===
e
)
return
t
;
return
-
1
}),
"forEach"
in
Array
.
prototype
||
(
Array
.
prototype
.
forEach
=
function
(
e
,
t
){
for
(
var
n
=
0
,
o
=
this
.
length
;
n
<
o
;
n
++
)
n
in
this
&&
e
.
call
(
t
,
this
[
n
],
n
,
this
)}),
"map"
in
Array
.
prototype
||
(
Array
.
prototype
.
map
=
function
(
e
,
t
){
for
(
var
n
=
new
Array
(
this
.
length
),
o
=
0
,
i
=
this
.
length
;
o
<
i
;
o
++
)
o
in
this
&&
(
n
[
o
]
=
e
.
call
(
t
,
this
[
o
],
o
,
this
));
return
n
}),
"filter"
in
Array
.
prototype
||
(
Array
.
prototype
.
filter
=
function
(
e
,
t
){
for
(
var
n
,
o
=
[],
i
=
0
,
r
=
this
.
length
;
i
<
r
;
i
++
)
i
in
this
&&
e
.
call
(
t
,
n
=
this
[
i
],
i
,
this
)
&&
o
.
push
(
n
);
return
o
}),
"every"
in
Array
.
prototype
||
(
Array
.
prototype
.
every
=
function
(
e
,
t
){
for
(
var
n
=
0
,
o
=
this
.
length
;
n
<
o
;
n
++
)
if
(
n
in
this
&&!
e
.
call
(
t
,
this
[
n
],
n
,
this
))
return
!
1
;
return
!
0
}),
"some"
in
Array
.
prototype
||
(
Array
.
prototype
.
some
=
function
(
e
,
t
){
for
(
var
n
=
0
,
o
=
this
.
length
;
n
<
o
;
n
++
)
if
(
n
in
this
&&
e
.
call
(
t
,
this
[
n
],
n
,
this
))
return
!
0
;
return
!
1
})}},,,,,
function
(
e
,
t
,
n
){
function
o
(
e
){
var
t
=
m
.
merge
(
b
,
k
);
t
=
m
.
merge
(
t
,
C
);
var
n
=
s
();
n
&&
(
t
=
m
.
merge
(
t
,
n
));
var
o
=
r
();
o
&&
(
t
=
m
.
merge
(
t
,
o
),
h
(
"_yasmp"
,
null
,{
path
:
"/"
,
domain
:
v
.
yasDomain
,
expires
:
73
e3
}));
var
i
=
h
(
"_yascustjson"
);
if
(
i
){
var
a
=
JSON
.
parse
(
i
);
t
=
m
.
merge
(
t
,
a
),
h
(
"_yascustjson"
,
null
,{
path
:
"/"
,
domain
:
v
.
yasDomain
,
expires
:
73
e3
})}
var
d
=
m
.
genParam
(
t
);
e
=
e
||
function
(){},
g
.
imgSend
(
d
,
e
);
var
c
=
h
(
"_yasev"
);
c
&&
g
.
imgSend
(
c
,
function
(){
h
(
"_yasev"
,
null
,{
path
:
"/"
,
domain
:
v
.
yasDomain
,
expires
:
73
e3
})})}
function
i
(){
var
e
=
h
(
"_yasvd"
);
return
e
?{
cid
:
e
,
isNew
:
"N"
}:(
e
=
m
.
Random
()
^
2147483647
&
m
.
hashClientInfo
(),
h
(
"_yasvd"
,
e
,{
path
:
"/"
,
domain
:
y
,
expires
:
73
e3
}),{
cid
:
e
,
isNew
:
"Y"
})}
function
r
(){
var
e
=
h
(
"_yasmp"
);
if
(
e
){
var
t
=
e
.
split
(
","
);
if
(
3
===
t
.
length
)
return
{
x
:
t
[
0
],
y
:
t
[
1
],
et
:
t
[
2
]};
if
(
4
===
t
.
length
)
return
{
x
:
t
[
0
],
y
:
t
[
1
],
et
:
t
[
2
],
ix
:
t
[
3
]}}
return
null
}
function
a
(
e
){
var
t
=
0
,
n
=
0
;
return
e
.
pageX
||
e
.
pageY
?(
t
=
e
.
pageX
,
n
=
e
.
pageY
):(
e
.
clientX
||
e
.
clientY
)
&&
(
t
=
e
.
clientX
+
document
.
body
.
scrollLeft
+
document
.
documentElement
.
scrollLeft
,
n
=
e
.
clientY
+
document
.
body
.
scrollTop
+
document
.
documentElement
.
scrollTop
),
t
-=
window
.
screen
.
width
/
2
,
n
=
window
.
screen
.
height
/
2
-
n
,{
x
:
t
,
y
:
n
}}
function
d
(){
var
e
=
window
.
qs
.
mkt_code
||
window
.
qs
.
union_type
||
m
.
getMktcBySeo
();
if
(
e
){
var
t
=
{
path
:
"/"
,
domain
:
y
,
expires
:
new
Date
(
Date
.
now
()
+
6048
e5
)};
h
(
"mkt_code"
)
&&
h
(
"mkt_code"
)
===
e
&&
"100000000000349"
!==
e
||
h
(
"mkt_code"
,
e
,
t
)}}
function
s
(){
var
e
=
h
(
"mkt_code"
)
||
window
.
qs
.
mkt_code
||
window
.
qs
.
union_type
;
return
e
?{
mktc
:
e
}:
null
}
function
c
(){
for
(
var
e
=
window
.
qs
.
mkt_code
||
window
.
qs
.
union_type
||
m
.
getMktcBySeo
()
||
h
(
"mkt_code"
)
||
"100000000000349"
,
t
=
document
.
getElementsByTagName
(
"a"
),
n
=
0
;
n
<
t
.
length
;
n
++
){
var
o
=
t
[
n
].
getAttribute
(
"href"
)
||
""
,
i
=
o
.
indexOf
(
"union.yoho.cn/union/downapp.html"
)
>-
1
,
r
=
o
.
indexOf
(
"union.yoho.cn/union/app-downloads.html"
)
>-
1
,
a
=
o
.
indexOf
(
"union.yoho.cn/union/ClickUnionRest/addUnion4Jump"
)
>-
1
;
if
(
i
||
r
||
a
){
var
d
=
[];
if
(
e
&&-
1
===
o
.
indexOf
(
"union_type"
)
&&
d
.
push
(
"union_type="
+
e
),
-
1
===
o
.
indexOf
(
"client_id"
)
&&
d
.
push
(
"client_id="
+
O
.
cid
),
-
1
===
o
.
indexOf
(
"openby:yohobuy"
)
&&
r
&&
d
.
push
(
m
.
getAppPath
()),
d
.
length
){
if
(
-
1
===
o
.
indexOf
(
"?"
))
o
+=
"?"
,
o
+=
d
.
join
(
"&"
);
else
{
var
s
=
o
.
split
(
"?"
);
o
=
s
[
0
]
+
"?"
+
d
.
join
(
"&"
)
+
"&"
+
s
[
1
]}
t
[
n
].
setAttribute
(
"href"
,
o
)}
w
.
addEventHandler
(
t
[
n
],
"click"
,
function
(
e
){
B
.
sendCustomInfo
&&
B
.
sendCustomInfo
({
op
:
"YB_DOWNLOAD_C"
,
param
:
JSON
.
stringify
({
C_ID
:
window
.
qs
.
yh_channel
||
m
.
getChannel
()
||
1
,
TO_URL
:
e
.
target
.
getAttribute
(
"href"
)})},
!
0
)})}}}
function
p
(){
if
(
!
E
)
return
!
1
;
m
.
setFontSize
();
var
e
=
(
n
(
11
),
document
.
createElement
(
"div"
));
e
.
innerHTML
=
m
.
getMiniAppDialog
(),
M
.
appendChild
(
e
);
var
t
,
o
=
document
.
getElementById
(
"mini-app-close"
),
i
=
document
.
getElementById
(
"mini-app-img"
);
w
.
addEventHandler
(
i
,
"touchstart"
,
function
(){
t
=
setTimeout
(
function
(){
_hmt
&&
_hmt
.
push
&&
_hmt
.
push
([
"_trackEvent"
,
"小程序码"
,
"长按超过1秒"
])},
1
e3
)}),
w
.
addEventHandler
(
i
,
"touchend"
,
function
(){
clearTimeout
(
t
)}),
w
.
addEventHandler
(
o
,
"click"
,
function
(){
_hmt
&&
_hmt
.
push
&&
_hmt
.
push
([
"_trackEvent"
,
"打开小程序按钮"
,
"关闭"
]),
T
()}),(
document
.
getElementById
(
"main-wrap"
).
getAttribute
(
"data-minipath"
)
||
""
).
indexOf
(
"isOpen=true"
)
>-
1
&&
(
_hmt
&&
_hmt
.
push
&&
_hmt
.
push
([
"_trackEvent"
,
"打开小程序按钮"
,
"自动打开"
]),
T
())}
function
l
(){
var
e
=
document
.
getElementById
(
"no-download"
),
t
=
document
.
getElementById
(
"top-downloadbar"
),
o
=
I
.
some
(
function
(
e
){
return
new
RegExp
(
e
,
"i"
).
test
(
location
.
href
)});
if
(
!
(
e
||
window
.
qs
.
nodownload
||
"app"
===
window
.
qs
.
openrefer
||
t
||
o
)
&&!
A
&&!
S
&&
(
x
||
E
)
&&
(
N
||
U
)){
if
(
t
=
document
.
getElementById
(
"float-layer-app"
),
t
&&
t
.
parentNode
.
removeChild
(
t
),
h
(
"_downloadBar"
))
return
;
m
.
setFontSize
();
var
i
=
(
n
(
10
),
document
.
createElement
(
"div"
));
i
.
innerHTML
=
m
.
getDownloadStr
(
E
),
M
.
appendChild
(
i
);
var
r
=
document
.
getElementById
(
"download-close"
);
w
.
addEventHandler
(
r
,
"click"
,
function
(){
h
(
"_downloadBar"
,
"close"
,{
path
:
"/"
,
domain
:
v
.
yasDomain
,
expires
:
new
Date
(
Date
.
now
()
+
6
e4
)}),
g
.
downloadSend
(
"//m.yohobuy.com/activitylog.json?close"
,
""
),
i
.
style
.
display
=
"none"
,
_hmt
&&
_hmt
.
push
&&
_hmt
.
push
([
"_trackEvent"
,
"顶部下载条目"
,
"点击关闭Banner"
])});
var
a
=
document
.
getElementById
(
"download-go"
);
w
.
addEventHandler
(
a
,
"click"
,
function
(
e
){
g
.
downloadSend
(
"//m.yohobuy.com/activitylog.json?download"
,
""
),
_hmt
&&
_hmt
.
push
&&
_hmt
.
push
([
"_trackEvent"
,
"顶部下载条目"
,
"所有打开和下载"
,
encodeURIComponent
(
e
.
currentTarget
.
getAttribute
(
"href"
))])});
var
d
=
document
.
getElementById
(
"download-wechat"
);
w
.
addEventHandler
(
d
,
"click"
,
function
(){
g
.
downloadSend
(
"//m.yohobuy.com/activitylog.json?attenion"
,
""
),
_hmt
&&
_hmt
.
push
&&
_hmt
.
push
([
"_trackEvent"
,
"顶部下载条目"
,
"微信里面关注"
])});
var
s
=
document
.
getElementById
(
"mini-app-open"
);
w
.
addEventHandler
(
s
,
"click"
,
function
(){
_hmt
&&
_hmt
.
push
&&
_hmt
.
push
([
"_trackEvent"
,
"打开小程序按钮"
,
"打开"
]),
T
()})}}
function
u
(
e
,
t
,
n
,
o
,
i
){
var
r
=
h
(
"_yasev"
);
r
?
r
+=
"&"
:
r
=
""
,
h
(
"_yasev"
,
r
+
"vd="
+
k
.
vd
+
"&t="
+
e
+
"&i="
+
t
+
"&l="
+
o
+
"&v="
+
i
,{
path
:
"/"
,
domain
:
y
,
expires
:
73
e3
}),
F
++
}
function
f
(
e
,
t
){
e
.
av
&&
(
window
.
indx
=
e
.
indx
,
window
.
originUrl
=
e
.
origin
||
location
.
href
,
window
.
appBaseLogs
=
{
device
:{
ak
:
e
.
ak
,
udid
:
e
.
udid
},
status
:[{
av
:
e
.
av
,
udid
:
e
.
udid
,
sid
:
e
.
sid
}],
events
:[{
uid
:
e
.
uid
,
sid
:
e
.
sid
,
abtype
:
e
.
abtype
}]},
window
.
originUrl
&&
window
.
qs
&&
B
.
sendAppLogs
({
appop
:
"YB_H5_PAGE_OPEN_L"
,
param
:
JSON
.
stringify
({
C_ID
:
window
.
qs
.
yh_channel
||
m
.
getChannel
()
||
1
,
PAGE_URL
:
window
.
originUrl
,
PAGE_NAME
:
decodeURI
(
window
.
qs
.
title
||
document
.
title
),
ACTION_URL
:
t
})},
!
1
))}
n
(
12
),
n
(
15
).
init
();
var
m
=
n
(
7
),
h
=
n
(
1
),
g
=
n
(
13
),
w
=
n
(
14
),
v
=
n
(
6
),
y
=
(
v
.
version
,
v
.
yaPath
,
v
.
yasDomain
),
b
=
{
h
:
document
.
domain
,
p
:
window
.
location
.
port
,
u
:
window
.
location
.
pathname
,
ft
:
0
,
fst
:
0
,
sv
:
""
,
ab
:
h
(
"ab_5"
)
||
""
,
op
:
"YB_PAGE_OPEN_L"
,
apf
:
window
.
location
.
search
.
indexOf
(
"app_version="
)
>=
0
?
"Y"
:
"N"
,
udid
:
m
.
getUdid
()},
A
=
/yoho/i
.
test
(
navigator
.
userAgent
)
||
/app_version=/i
.
test
(
window
.
location
.
search
)
||!!
window
.
yohoInterface
,
x
=
/
(
iPhone|Android|iPad|iPod|iOS
)
/i
.
test
(
navigator
.
userAgent
),
E
=
/micromessenger/i
.
test
(
navigator
.
userAgent
),
S
=
"miniprogram"
===
window
.
__wxjs_environment
,
N
=
/m
\.
yohobuy
\.
com/i
.
test
(
document
.
domain
),
U
=
/feature
\.
yoho
\.
cn/i
.
test
(
document
.
domain
)
||
/activity
\.
yoho
\.
cn/i
.
test
(
document
.
domain
),
I
=
[
"m.yohobuy.com/brands"
,
"m.yohobuy.com/passport"
],
O
=
i
(),
k
=
{
ak
:
""
,
cd
:
O
.
cid
,
vd
:(
new
Date
).
getTime
()
+
O
.
cid
,
ud
:
""
,
rf
:
document
.
referrer
,
ckf
:
O
.
isNew
},
R
=
m
.
flashChecker
(),
C
=
{
sr
:
window
.
screen
.
width
+
"x"
+
window
.
screen
.
height
,
wr
:
window
.
screen
.
availWidth
+
"x"
+
window
.
screen
.
availHeight
,
sd
:
window
.
screen
.
colorDepth
,
ln
:
window
.
navigator
.
language
?
window
.
navigator
.
language
:
window
.
navigator
.
browserLanguage
,
sy
:
window
.
navigator
.
platform
,
ce
:
window
.
navigator
.
cookieEnabled
,
fv
:
R
.
f
?
R
.
v
:
0
},
D
=
function
(){},
M
=
document
.
createElement
(
"div"
);
document
.
body
.
insertBefore
(
M
,
document
.
body
.
firstChild
);
var
B
=
function
(
e
,
t
,
n
,
i
,
r
,
s
){
window
.
qs
=
m
.
queryString
(),
k
.
ak
=
n
,
b
.
sv
=
t
,
k
.
ud
=
i
||
""
,
k
.
ts
=
(
new
Date
).
getTime
();
var
u
=
window
.
qs
.
yh_channel
||
m
.
getChannel
();
if
(
u
&&
(
b
.
param
=
JSON
.
stringify
({
C_ID
:
u
})),
h
(
"_yasgeo"
)){
var
f
=
h
(
"_yasgeo"
).
split
(
","
);
k
.
la
=
f
[
0
],
k
.
lo
=
f
[
1
],
h
(
"_yasgeo"
,
null
,{
path
:
"/"
,
domain
:
v
.
yasDomain
,
expires
:
73
e3
})}
var
g
=
(
new
Date
).
getTime
(),
A
=
null
,
x
=!
1
;
if
(
b
.
ft
=
g
-
e
,
w
.
addEventHandler
(
window
,
"load"
,
function
(
t
){
var
n
=
(
new
Date
).
getTime
();
b
.
fst
=
n
-
e
,
w
.
removeEventHandler
(
window
,
"load"
,
arguments
.
callee
),
window
.
clearTimeout
(
A
),
x
||
o
()}),
A
=
window
.
setTimeout
(
function
(){
b
.
fst
=
0
,
b
.
fse
=
">3s"
,
x
=!
0
,
o
()},
3
e3
),
r
&&
m
.
getGeo
(
function
(
e
,
t
){
e
&&
h
(
"_yasgeo"
,
e
+
","
+
t
,{
path
:
"/"
,
domain
:
y
,
expires
:
73
e3
})}),
p
(),
l
(),
d
(),
c
(),
s
&&
s
[
0
])
for
(
var
E
=
0
,
S
=
s
.
length
;
E
<
S
;
E
++
)
s
[
E
].
setAttribute
(
"yoho_index"
,
E
+
1
);
else
w
.
addEventHandler
(
document
,
"click"
,
function
(
e
){
e
=
e
||
window
.
event
;
var
t
=
e
.
target
||
e
.
srcElement
;
if
(
t
&&
(
"A"
===
t
.
nodeName
||
"IMG"
===
t
.
nodeName
&&
"A"
===
t
.
parentNode
.
nodeName
)){
var
n
=
a
(
e
),
o
=
n
.
x
+
","
+
n
.
y
+
","
+
e
.
type
,
i
=
t
.
getAttribute
(
"yoho_index"
)
||
t
.
parentNode
.
getAttribute
(
"yoho_index"
);
i
&&
(
o
+=
","
+
i
),
h
(
"_yasmp"
,
o
,{
path
:
"/"
,
domain
:
y
,
expires
:
73
e3
})}
ix
=
0
})},
T
=
function
(){
var
e
=
document
.
getElementById
(
"mini-app-dialog-bg"
),
t
=
document
.
getElementById
(
"mini-app-dialog"
);
e
&&
t
&&
(
t
.
style
.
display
=
"block"
===
t
.
style
.
display
?
"none"
:
"block"
,
e
.
style
.
display
=
t
.
style
.
display
)},
F
=
0
;
if
(
B
.
add
=
function
(
e
,
t
,
n
,
o
,
i
){
F
>
3
?
g
.
imgSend
(
h
(
"_yasev"
),
function
(){
h
(
"_yasev"
,
null
,{
path
:
"/"
,
domain
:
v
.
yasDomain
,
expires
:
73
e3
}),
F
=
0
,
u
(
e
,
t
,
n
,
o
,
i
)}):
u
(
e
,
t
,
n
,
o
,
i
)},
B
.
sendMouseEvent
=
function
(
e
,
t
){
e
=
e
||
window
.
event
;
var
n
=
a
(
e
);
if
(
t
){
var
o
=
{
x
:
n
.
x
,
y
:
n
.
y
,
et
:
e
.
type
},
i
=
m
.
merge
(
b
,
k
);
i
=
m
.
merge
(
i
,
C
),
i
=
m
.
merge
(
i
,
o
);
var
r
=
m
.
genParam
(
i
);
g
.
imgSend
(
r
,
function
(){})}
else
h
(
"_yasmp"
,
n
.
x
+
","
+
n
.
y
+
","
+
e
.
type
,{
path
:
"/"
,
domain
:
y
,
expires
:
73
e3
})},
B
.
sendCustomInfo
=
function
(
e
,
t
,
n
){
if
(
window
.
appBaseLogs
&&
e
.
appop
)
return
e
.
op
=
e
.
appop
,
B
.
sendAppLogs
(
e
,
!
0
);
if
(
delete
e
.
appop
,
e
.
ts
=
(
new
Date
).
getTime
(),
t
){
var
o
=
m
.
merge
(
b
,
k
);
o
=
m
.
merge
(
o
,
C
),
o
=
m
.
merge
(
o
,
e
);
var
i
=
s
();
i
&&
(
o
=
m
.
merge
(
o
,
i
));
var
r
=
m
.
genParam
(
o
);
g
.
imgSend
(
r
,
n
)}
else
{
var
a
=
JSON
.
stringify
(
e
);
h
(
"_yascustjson"
,
a
,{
path
:
"/"
,
domain
:
y
,
expires
:
73
e3
})}},
B
.
sendAppLogs
=
function
(
e
,
t
){
if
(
window
.
appBaseLogs
){
var
n
=
JSON
.
parse
(
e
.
param
);
n
.
F_URL
&&
(
n
.
F_URL
=
decodeURIComponent
(
n
.
F_URL
));
var
o
=
window
.
appBaseLogs
.
events
[
0
];
o
.
abtype
&&
(
n
.
AB_TYPE
=
o
.
abtype
);
var
i
=
m
.
merge
(
o
,{
ts
:(
new
Date
).
getTime
().
toString
(),
indx
:
++
window
.
indx
,
op
:
e
.
appop
,
param
:
n
}),
r
=
m
.
merge
(
window
.
appBaseLogs
,{
events
:[
i
]});
g
.
appSend
(
"_mlogs="
+
encodeURIComponent
(
JSON
.
stringify
(
r
))),
window
.
_yasloaded
=!
0
,
t
&&
(
window
.
isandroidyas
?
window
.
prompt
(
JSON
.
stringify
({
method
:
"set.analyticEventIndex"
,
arguments
:{
indx
:
window
.
indx
}})):
window
.
yohoInterface
.
triggerEvent
(
D
,
D
,{
method
:
"set.analyticEventIndex"
,
arguments
:{
indx
:
window
.
indx
}}))}},
navigator
.
userAgent
.
indexOf
(
"YohoBuy-android-yas"
)
>-
1
){
window
.
isandroidyas
=!
0
;
var
j
=
window
.
prompt
(
JSON
.
stringify
({
method
:
"get.analyticAppData"
}));
f
(
JSON
.
parse
(
j
||
"{}"
))}
else
w
.
addEventHandler
(
document
,
"deviceready"
,
function
(
e
){
window
.
_yasloaded
=!
1
;
for
(
var
t
=
[],
n
=
document
.
getElementsByTagName
(
"a"
),
o
=
0
;
o
<
n
.
length
;
o
++
){
var
i
=
n
[
o
].
getAttribute
(
"href"
);
!
i
||
/^#.*$/
.
test
(
i
)
||
/^javascript.*$/i
.
test
(
i
)
||
t
.
push
(
i
)}
w
.
addEventHandler
(
document
,
"click"
,
function
(
e
){
if
(
window
.
originUrl
){
e
=
e
||
window
.
event
;
var
t
=
e
.
target
||
e
.
srcElement
;
if
(
t
=
m
.
closest
(
t
,
"a"
)){
var
n
=
{
C_ID
:
window
.
qs
.
yh_channel
||
m
.
getChannel
()
||
1
,
PAGE_URL
:
window
.
originUrl
,
PAGE_NAME
:
decodeURI
(
window
.
qs
.
title
||
document
.
title
),
F_URL
:
t
.
getAttribute
(
"href"
)},
o
=
t
.
getAttribute
(
"fp"
);
o
&&
(
o
=
JSON
.
parse
(
o
),
n
.
F_ID
=
o
.
F_ID
,
n
.
F_NM
=
o
.
F_NM
,
n
.
F_INDEX
=
o
.
F_INDEX
,
n
.
I_INDEX
=
o
.
I_INDEX
,
n
.
I_NM
=
o
.
I_NM
||
""
),
B
.
sendAppLogs
({
appop
:
"YB_H5_PAGE_FLR_C"
,
param
:
JSON
.
stringify
(
n
)},
!
0
)}}}),
window
.
yohoInterface
.
triggerEvent
(
function
(
e
){
f
(
e
,
t
)},
D
,{
method
:
"get.analyticAppData"
});
var
r
=
setInterval
(
function
(){
window
.
_yasloaded
&&
(
clearInterval
(
r
),
window
.
yohoInterface
.
triggerEvent
(
D
,
D
,{
method
:
"set.analyticEventIndex"
,
arguments
:{
indx
:
window
.
indx
}}))},
500
)});
e
.
exports
=
B
}]);
\ No newline at end of file
...
...
yarn.lock
View file @
0fd8583
...
...
@@ -10192,9 +10192,15 @@ yoho-md5@^2.0.0:
version "2.1.0"
resolved "http://npm.yohops.com/yoho-md5/-/yoho-md5-2.1.0.tgz#f0c00d343f775e77952ebce0826863ac52e0ad50"
<<<<<<< HEAD
yoho-node-lib@=0.6.24:
version "0.6.24"
resolved "http://npm.yohops.com/yoho-node-lib/-/yoho-node-lib-0.6.24.tgz#3fbf5151da67d8848c4bb66daa3b92ba9051d5cb"
=======
yoho-node-lib@=0.6.23:
version "0.6.23"
resolved "http://npm.yohops.com/yoho-node-lib/-/yoho-node-lib-0.6.23.tgz#7ad4b550c3c66deb860bc6f7b1b7d9598ca89297"
>>>>>>> feature/docker
dependencies:
dnscache "^1.0.1"
handlebars "^4.0.5"
...
...
Please
register
or
login
to post a comment