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
Plain Diff
Browse Files
Authored by
htoooth
8 years ago
Commit
dda0c589e91c2e027beea9dfeeabdfe49eb51c6f
2 parents
130601be
f2dea813
Merge remote-tracking branch 'origin/release/5.4.1' into release/5.4.1
Hide whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
371 additions
and
343 deletions
app.js
apps/cart/controllers/cart.js
apps/cart/controllers/easypay.js
apps/cart/controllers/order-ensure.js
apps/cart/models/cart-api.js
apps/cart/models/cart-helper.js
apps/cart/models/cart-service.js
apps/cart/models/easypay-api.js
apps/cart/models/easypay.js
apps/cart/models/order-ensure-api.js
apps/cart/models/order-ensure-handle.js
apps/cart/models/order-ensure.js
apps/cart/router.js
apps/cart/views/action/order-ensure2016.hbs
apps/cart/views/partial/ensure-tpl.hbs
apps/home/models/address-service.js
apps/home/views/action/home/address/address.hbs
apps/product/models/detail-service.js
doraemon/views/partial/analysis.hbs
doraemon/views/partial/header.hbs
mix/mix/cart/cart-item.hbs
mix/mix/cart/cart-list.hbs
package.json
public/hbs/header/mini-cart-tpl.hbs
public/js/cart/cart-action.js
public/js/cart/cart-api.js
public/js/cart/cart-goods-win.js
public/js/cart/ensure.page.js
public/js/cart/order-new/areaSelect.js
public/js/cart/order-new/invoice.js
public/js/header.js
public/js/home/common-address.js
public/scss/cart/_cart-togetherGoods.css
public/scss/cart/_cart.css
public/scss/cart/_order-ensure2016.css
public/scss/common/_header.css
app.js
View file @
dda0c58
...
...
@@ -54,6 +54,8 @@ if (config.zookeeperServer) {
require
(
'yoho-zookeeper'
)(
config
.
zookeeperServer
,
'pc'
,
app
.
locals
.
pc
=
{},
global
.
yoho
.
cache
);
}
app
.
enable
(
'trust proxy'
);
// 请求限制中间件
app
.
use
(
require
(
'./doraemon/middleware/limiter'
));
...
...
apps/cart/controllers/cart.js
View file @
dda0c58
...
...
@@ -7,6 +7,7 @@
const
_
=
require
(
'lodash'
);
const
co
=
require
(
'bluebird'
).
coroutine
;
const
logger
=
global
.
yoho
.
logger
;
const
yohoHelpers
=
global
.
yoho
.
helpers
;
const
service
=
require
(
'../models/cart-service'
);
const
helper
=
require
(
'../models/cart-helper'
);
const
ghelper
=
require
(
'../../guang/models/guang-helper'
);
...
...
@@ -97,6 +98,35 @@ const miniCart = (req, res, next) => {
};
/**
* 首页迷你购物车删除数据信息
* @param req
* @param res
* @param next
*/
const
delCartGoods
=
(
req
,
res
,
next
)
=>
{
let
uid
=
req
.
user
.
uid
;
let
shoppingKey
=
helper
.
getShoppingKeyByCookie
(
req
);
let
productSku
=
req
.
query
.
product_sku
;
let
buyNumber
=
req
.
query
.
product_num
||
1
;
let
callback
=
req
.
query
.
callback
;
let
skuList
=
{};
skuList
[
productSku
]
=
parseInt
(
buyNumber
);
//eslint-disable-line
service
.
removeFromCart
(
uid
,
shoppingKey
,
JSON
.
stringify
(
skuList
))
.
then
(
ret
=>
{
if
(
ret
&&
ret
.
code
===
200
&&
_
.
has
(
ret
,
'data.goods_count'
))
{
ret
.
data
.
total_goods_num
=
ret
.
data
.
goods_count
;
return
res
.
send
(
callback
+
'('
+
JSON
.
stringify
(
ret
)
+
')'
);
}
else
{
return
res
.
send
(
callback
+
'('
+
JSON
.
stringify
(
ret
)
+
')'
);
}
})
.
catch
(
next
);
};
/**
* 我的购物车
*/
const
cart
=
(
req
,
res
,
next
)
=>
{
...
...
@@ -105,6 +135,11 @@ const cart = (req, res, next) => {
let
shoppingKey
=
helper
.
getShoppingKeyByCookie
(
req
);
let
cartDelList
=
req
.
cookies
[
'cart-del-list'
];
let
isNewCart
=
_
.
get
(
req
.
app
.
locals
.
pc
,
'pay.oldCart'
,
false
);
if
(
isNewCart
)
{
return
res
.
redirect
(
yohoHelpers
.
urlFormat
(
'/shopping/cart'
));
}
if
(
cartDelList
)
{
res
.
cookie
(
'cart-del-list'
,
''
,
{
domain
:
'.yohobuy.com'
,
...
...
@@ -435,5 +470,6 @@ module.exports = {
swapGift
,
queryUserPromotionGift
,
getCoupons
,
miniCart
miniCart
,
delCartGoods
};
...
...
apps/cart/controllers/easypay.js
View file @
dda0c58
...
...
@@ -44,6 +44,7 @@ const compute = (req, res, next) => {
};
const
submit
=
(
req
,
res
,
next
)
=>
{
let
remoteIp
=
req
.
ip
;
let
uid
=
req
.
user
.
uid
;
let
params
=
req
.
body
;
...
...
@@ -51,7 +52,7 @@ const submit = (req, res, next) => {
return
next
();
}
easypay
.
easypayOrderSubmit
(
uid
,
'ordinary'
,
params
).
then
(
result
=>
{
easypay
.
easypayOrderSubmit
(
uid
,
'ordinary'
,
params
,
remoteIp
).
then
(
result
=>
{
res
.
json
(
result
);
}).
catch
(
next
);
};
...
...
apps/cart/controllers/order-ensure.js
View file @
dda0c58
...
...
@@ -27,6 +27,11 @@ const index = (req, res, next) => {
stepper
:
stepper
});
// 预售购物车不支持使用优惠券
if
(
req
.
query
.
type
===
'2'
)
{
result
.
notUseCoupon
=
true
;
}
res
.
render
(
'order-ensure2016'
,
{
title
:
'填写订单 | '
+
(
res
.
locals
.
title
||
''
),
page
:
'ensure'
,
...
...
@@ -57,6 +62,7 @@ const compute = (req, res, next) => {
const
submit
=
(
req
,
res
,
next
)
=>
{
let
cartType
=
req
.
body
.
cartType
===
'2'
?
'advance'
:
'ordinary'
;
let
uid
=
req
.
user
.
uid
;
let
remoteIp
=
req
.
ip
;
if
(
!
req
.
body
.
addressId
)
{
res
.
send
({
...
...
@@ -109,7 +115,7 @@ const submit = (req, res, next) => {
userAgent
:
userAgent
});
oeModel
.
submit
(
uid
,
cartType
,
req
.
body
).
then
(
data
=>
{
oeModel
.
submit
(
uid
,
cartType
,
req
.
body
,
remoteIp
).
then
(
data
=>
{
if
(
data
&&
data
.
code
===
200
&&
unionKey
)
{
data
.
data
.
unionKey
=
{
client_id
:
unionInfo
.
client_id
...
...
apps/cart/models/cart-api.js
View file @
dda0c58
...
...
@@ -105,11 +105,10 @@ const selectGoods = (uid, sku, shoppingKey /* , hasPromotion*/) => {
* @param bool $hasPromotion 是否有促销ID
* @return array 接口返回的数据
*/
const
removeFromCart
=
(
uid
,
shoppingKey
,
skuList
/* , hasPromotion*/
)
=>
{
const
removeFromCart
=
(
uid
,
shoppingKey
,
skuList
,
hasPromotion
)
=>
{
let
param
=
{
// method: hasPromotion ? 'app.Shopping.removeAndCart' : 'app.Shopping.remove',
method
:
'app.Shopping.removeAndQryCart'
,
method
:
hasPromotion
?
'app.Shopping.removeAndQryCart'
:
'app.Shopping.remove'
,
product_sku_list
:
skuList
};
...
...
@@ -346,13 +345,13 @@ const swapGift = (uid, shoppingKey, promotionId, newSkn, newSku) => {
/**
* 查询所有可选的赠品或者加价购活动下的商品
* @param promotionId
* @param promotionId
array
* @returns {*}
*/
const
queryPromotionGift
=
(
promotionId
)
=>
{
const
queryPromotionGift
=
(
promotionId
s
)
=>
{
let
param
=
{
method
:
'app.Shopping.queryPromotionGift'
,
promotion_id
:
promotionId
method
:
'app.Shopping.queryPromotionGifts'
,
promotion_ids
:
promotionIds
};
return
api
.
get
(
''
,
param
);
...
...
apps/cart/models/cart-helper.js
View file @
dda0c58
...
...
@@ -139,6 +139,10 @@ const formatCartGoods = (cartGoods, isAdvanceCart, inValid, isOffShelves, analys
if
(
it
.
min_buy_number
)
{
goods
.
minBuyNumber
=
Number
(
it
.
min_buy_number
);
if
(
goods
.
minBuyNumber
>
1
)
{
goods
.
tipMessage
=
goods
.
minBuyNumber
+
'件起购'
;
}
}
// 已下架
...
...
@@ -422,7 +426,7 @@ const formatPromotion = (it, selectedGiftsList) => {
tipTxt
=
'<span style=\'color:#ff575c\'>'
+
tipTxt
+
'</span>'
;
info
.
promotionTitle
=
'还差'
+
tipTxt
+
'满足 '
+
info
.
promotionTitle
;
}
else
if
(
info
.
isReach
&&
!
info
.
isSelected
)
{
}
else
if
(
info
.
isReach
)
{
info
.
promotionTitle
=
'已满足 '
+
info
.
promotionTitle
;
}
...
...
@@ -521,7 +525,7 @@ const formatCart = (cartDataRet, uid, shoppingKey, cartDelList) => {
// 未登录
if
(
!
uid
)
{
result
.
loginUrl
=
helpers
.
urlFormat
(
'/signin.html'
,
{
refer
:
helpers
.
urlFormat
(
'/
shopping
/cart'
)
refer
:
helpers
.
urlFormat
(
'/
cart
/cart'
)
});
}
...
...
apps/cart/models/cart-service.js
View file @
dda0c58
...
...
@@ -430,144 +430,8 @@ const getCoupons = (uid) => api.get('', {
* @returns {*}
*/
const
getCartData
=
(
uid
,
shoppingKey
,
cartDelList
)
=>
{
let
analysisData
=
{
ids
:
[],
criteo
:
[]
};
// 存放分析用的数据
return
co
(
function
*
()
{
let
result
=
{
isEmpty
:
false
,
isLogin
:
!!
uid
,
searchUrl
:
helpers
.
urlFormat
(
''
,
null
,
'search'
),
// 搜索链接(再逛逛)
listUrl
:
helpers
.
urlFormat
(
''
,
null
,
'list'
),
viewOrderUrl
:
helpers
.
urlFormat
(
'/home/orders'
,
{
t
:
new
Date
().
getTime
()
})
};
// 未登录
if
(
!
uid
)
{
result
.
loginUrl
=
helpers
.
urlFormat
(
'/signin.html'
,
{
refer
:
helpers
.
urlFormat
(
'/shopping/cart'
)
});
}
// 调用接口,获取购物车数据
let
cartDataRet
=
yield
cartApi
.
cartData
(
uid
,
shoppingKey
);
let
cartData
=
cartDataRet
&&
cartDataRet
.
data
;
let
advCartData
=
_
.
get
(
cartData
,
'advance_cart_data'
);
let
ordCartData
=
_
.
get
(
cartData
,
'ordinary_cart_data'
);
// 接口异常时,购物车置为空
if
(
!
cartData
)
{
result
.
isEmpty
=
true
;
// UdpLog::info('【购物车】校验参数传递auth', 'uid:' . $uid . 'shoppingKey:' . $shoppingKey);
return
result
;
}
result
.
advanceCart
=
{
// 未参加活动的商品
// goodsList: chelper.formatCartGoods(_.get(advCartData, 'goods_list'), true, false, false, analysisData),
pools
:
chelper
.
formatPromotionPools
(
_
.
get
(
advCartData
,
'goods_pool_list'
),
null
,
true
),
offShelves
:
chelper
.
formatOffShelves
(
_
.
get
(
advCartData
,
'off_shelves_goods_list'
),
true
,
analysisData
),
soldOuts
:
chelper
.
formatSoldOuts
(
_
.
get
(
advCartData
,
'sold_out_goods_list'
),
true
,
analysisData
),
promotionInfos
:
chelper
.
formatPromotionInfos
(
_
.
get
(
advCartData
,
'promotion_info'
)),
stat
:
chelper
.
formatShoppingCartData
(
_
.
get
(
advCartData
,
'shopping_cart_data'
)),
ensureUrl
:
helpers
.
urlFormat
(
'/cart/ensure'
,
{
type
:
2
})
};
let
giftsList
=
chelper
.
formatPriceGifts
(
_
.
get
(
ordCartData
,
'gift_list'
));
let
priceGifts
=
chelper
.
formatPriceGifts
(
_
.
get
(
ordCartData
,
'price_gift'
));
let
goodsList
=
chelper
.
formatCartGoods
(
_
.
get
(
ordCartData
,
'goods_list'
),
false
,
false
,
false
,
analysisData
);
result
.
ordinaryCart
=
{
// 全场可选的赠品
gifts
:
giftsList
,
// chelper.formatGifts(_.get(ordCartData, 'gift_list')),
// 全场可选的加价购商品列表
priceGifts
:
priceGifts
,
// chelper.formatPriceGifts(_.get(ordCartData, 'price_gift')),
// 已选择的全场加价购和赠品
goodsList
:
goodsList
,
pools
:
chelper
.
formatPromotionPools
(
_
.
get
(
ordCartData
,
'goods_pool_list'
),
goodsList
),
offShelves
:
chelper
.
formatOffShelves
(
_
.
get
(
ordCartData
,
'off_shelves_goods_list'
),
false
,
analysisData
),
soldOuts
:
chelper
.
formatSoldOuts
(
_
.
get
(
ordCartData
,
'sold_out_goods_list'
),
false
,
analysisData
),
promotionInfos
:
chelper
.
formatPromotionInfos
(
_
.
get
(
ordCartData
,
'promotion_info'
),
goodsList
),
stat
:
chelper
.
formatShoppingCartData
(
_
.
get
(
ordCartData
,
'shopping_cart_data'
)),
ensureUrl
:
helpers
.
urlFormat
(
'/cart/ensure'
)
};
let
advStat
=
result
.
advanceCart
.
stat
;
let
ordStat
=
result
.
ordinaryCart
.
stat
;
// 为空
if
(
!
_
.
get
(
advStat
,
'goodsCount'
,
0
))
{
result
.
advanceCart
=
false
;
}
if
(
!
_
.
get
(
ordStat
,
'goodsCount'
,
0
))
{
result
.
ordinaryCart
=
false
;
}
// promotionInfos, gifts, priceGifts 放一起展示
let
hasGifts
=
result
.
ordinaryCart
.
gifts
&&
result
.
ordinaryCart
.
gifts
.
length
;
let
hasPrices
=
result
.
ordinaryCart
.
priceGifts
&&
result
.
ordinaryCart
.
priceGifts
.
length
;
let
hasPromo
=
result
.
ordinaryCart
.
promotionInfos
&&
result
.
ordinaryCart
.
promotionInfos
.
length
;
if
(
result
.
ordinaryCart
)
{
result
.
ordinaryCart
.
hasGlobalBlock
=
hasGifts
||
hasPrices
||
hasPromo
;
}
result
.
stat
=
{
orderAmount
:
(
parseFloat
(
_
.
get
(
advStat
,
'orderAmount'
,
0
))
+
parseFloat
(
_
.
get
(
ordStat
,
'orderAmount'
,
0
))).
toFixed
(
2
),
discountAmount
:
(
parseFloat
(
_
.
get
(
advStat
,
'discountAmount'
,
0
))
+
parseFloat
(
_
.
get
(
ordStat
,
'discountAmount'
,
0
))).
toFixed
(
2
),
lastOrderAmount
:
(
parseFloat
(
_
.
get
(
advStat
,
'lastOrderAmount'
,
0
))
+
parseFloat
(
_
.
get
(
ordStat
,
'lastOrderAmount'
,
0
))).
toFixed
(
2
),
gainYohoCoin
:
parseFloat
(
_
.
get
(
advStat
,
'gainYohoCoin'
,
0
))
+
parseFloat
(
_
.
get
(
ordStat
,
'gainYohoCoin'
,
0
)),
goodsCount
:
_
.
get
(
advStat
,
'goodsCount'
,
0
)
+
_
.
get
(
ordStat
,
'goodsCount'
,
0
),
selectedGoodsCount
:
_
.
get
(
advStat
,
'selectedGoodsCount'
,
0
)
+
_
.
get
(
ordStat
,
'selectedGoodsCount'
,
0
)
};
/* 移除的商品列表 */
if
(
cartDelList
)
{
try
{
result
.
deleteShop
=
JSON
.
parse
(
cartDelList
);
}
catch
(
err
)
{
logger
.
error
(
err
);
}
}
// 普通购物车和预售购物车都为空
/* if (ordinaryCount === 0 && advanceCount === 0 && ordinarySoldOut && advanceSoldOut) {
result.isEmpty = true;
return result;
}*/
// 预售和普通都有商品
if
(
result
.
advanceCart
&&
_
.
get
(
result
,
'advanceCart.stat.selectedGoodsCount'
)
>
0
&&
result
.
ordinaryCart
&&
_
.
get
(
result
,
'ordinaryCart.stat.selectedGoodsCount'
)
>
0
)
{
result
.
stat
.
mix
=
true
;
}
else
if
(
result
.
advanceCart
&&
_
.
get
(
result
,
'advanceCart.stat.selectedGoodsCount'
)
>
0
)
{
result
.
stat
.
ensureUrl
=
result
.
advanceCart
.
ensureUrl
;
}
else
if
(
result
.
ordinaryCart
&&
_
.
get
(
result
,
'ordinaryCart.stat.selectedGoodsCount'
)
>
0
)
{
result
.
stat
.
ensureUrl
=
result
.
ordinaryCart
.
ensureUrl
;
}
return
result
;
})().
then
(
ret
=>
{
// 增加第三方分析用的数据
// ret['ids'] = empty($analysisData['ids']) ? '' : implode(',', $analysisData['ids']);
// $result['criteo'] = empty($analysisData['criteo']) ? "''" : json_encode($analysisData['criteo']);
return
Object
.
assign
(
ret
,
{
ids
:
_
.
isArray
(
analysisData
.
ids
)
?
analysisData
.
ids
.
join
(
','
)
:
''
,
criteo
:
analysisData
.
criteo
||
''
// empty($analysisData['criteo']) ? "''" : json_encode($analysisData['criteo']);
});
return
cartApi
.
cartData
(
uid
,
shoppingKey
).
then
(
cartDataRet
=>
{
return
chelper
.
formatCart
(
cartDataRet
,
uid
,
shoppingKey
,
cartDelList
);
});
};
...
...
@@ -730,6 +594,10 @@ const removeFromCart = (uid, shoppingKey, skuList, hasPromotion, cartDelList) =>
let
ret
=
yield
cartApi
.
removeFromCart
(
uid
,
shoppingKey
,
skuList
,
hasPromotion
);
if
(
!
hasPromotion
)
{
return
ret
;
}
if
(
ret
&&
ret
.
code
)
{
result
=
{
code
:
ret
.
code
,
...
...
@@ -766,7 +634,7 @@ const addToFav = (uid, skuList, hasPromotion, cartDelList) => {
message
:
'请先登录!'
,
data
:
{
url
:
helpers
.
urlFormat
(
'/signin.html'
,
{
refer
:
helpers
.
urlFormat
(
'/
shopping
/cart'
)
refer
:
helpers
.
urlFormat
(
'/
cart
/cart'
)
})
}
};
...
...
@@ -1056,7 +924,14 @@ const queryUserPromotionGift = (promotionId, uid, shoppingKey) => {
let
currentProduct
=
null
;
// 默认展示第一个商品
if
(
promotionGifts
&&
promotionGifts
.
code
===
200
)
{
promotionGifts
.
data
=
chelper
.
formatPriceGiftOne
(
promotionGifts
.
data
);
// chelper.formatPriceGiftOne(promotionGifts.data);
let
promotionList
=
chelper
.
formatPriceGifts
(
_
.
get
(
promotionGifts
,
'data.arrays'
));
if
(
promotionList
&&
promotionList
.
length
>=
0
)
{
promotionGifts
.
data
=
promotionList
[
0
];
}
else
{
promotionGifts
.
data
=
{};
}
if
(
promotionGifts
.
data
.
goodsList
&&
promotionGifts
.
data
.
goodsList
.
length
)
{
currentProduct
=
promotionGifts
.
data
.
goodsList
[
0
];
...
...
apps/cart/models/easypay-api.js
View file @
dda0c58
...
...
@@ -109,7 +109,7 @@ const getEasypayComputeAsync = (uid, cartType, paymentType, deliveryWay, other)
* @param couponCode [string] 优惠券码
* @param printPrice [string] 是否打印价格
*/
const
easypayOrderSubmitAsync
=
(
uid
,
cartType
,
addressId
,
deliveryTime
,
deliveryWay
,
paymentType
,
paymentId
,
printPrice
,
other
)
=>
{
// eslint-disable-line
const
easypayOrderSubmitAsync
=
(
uid
,
cartType
,
addressId
,
deliveryTime
,
deliveryWay
,
paymentType
,
paymentId
,
printPrice
,
other
,
remoteIp
)
=>
{
// eslint-disable-line
let
param
=
{
method
:
'app.Shopping.easySubmit'
,
uid
:
uid
,
...
...
@@ -172,7 +172,9 @@ const easypayOrderSubmitAsync = (uid, cartType, addressId, deliveryTime, deliver
}
}
return
api
.
get
(
''
,
param
);
return
api
.
get
(
''
,
param
,
{
headers
:
{
'X-Forwarded-For'
:
remoteIp
||
''
}
});
};
module
.
exports
=
{
...
...
apps/cart/models/easypay.js
View file @
dda0c58
...
...
@@ -190,12 +190,12 @@ const getOrderComputeData = (uid, cartType, params) => {
};
// 订单提交
const
easypayOrderSubmit
=
(
uid
,
cartType
,
params
)
=>
{
const
easypayOrderSubmit
=
(
uid
,
cartType
,
params
,
remoteIp
)
=>
{
params
.
addressId
=
crypto
.
decrypt
(
''
,
params
.
addressId
);
params
.
productSkuList
=
_getLimitProductData
(
params
);
return
easypayApi
.
easypayOrderSubmitAsync
(
uid
,
cartType
,
params
.
addressId
,
params
.
deliveryTime
,
params
.
deliveryWay
,
params
.
paymentType
,
params
.
paymentId
,
params
.
printPrice
,
params
).
then
(
result
=>
{
params
.
deliveryWay
,
params
.
paymentType
,
params
.
paymentId
,
params
.
printPrice
,
params
,
remoteIp
).
then
(
result
=>
{
if
(
result
.
code
===
200
)
{
let
d
=
result
.
data
;
...
...
apps/cart/models/order-ensure-api.js
View file @
dda0c58
...
...
@@ -76,9 +76,7 @@ const getOrderComputeAsync = (uid, cartType, paymentType, deliveryWay, other) =>
Object
.
assign
(
param
,
{
coupon_code
:
other
.
couponCode
});
}
if
(
other
.
promotionCode
)
{
}
else
if
(
other
.
promotionCode
)
{
Object
.
assign
(
param
,
{
promotion_code
:
other
.
promotionCode
});
...
...
@@ -107,7 +105,7 @@ const getOrderComputeAsync = (uid, cartType, paymentType, deliveryWay, other) =>
* @param couponCode [string] 优惠券码
* @param printPrice [string] 是否打印价格
*/
const
orderSubmitAsync
=
(
uid
,
cartType
,
addressId
,
deliveryTime
,
deliveryWay
,
paymentType
,
paymentId
,
printPrice
,
other
)
=>
{
// eslint-disable-line
const
orderSubmitAsync
=
(
uid
,
cartType
,
addressId
,
deliveryTime
,
deliveryWay
,
paymentType
,
paymentId
,
printPrice
,
other
,
remoteIp
)
=>
{
// eslint-disable-line
let
param
=
{
method
:
'app.Shopping.submit'
,
uid
:
uid
,
...
...
@@ -157,6 +155,10 @@ const orderSubmitAsync = (uid, cartType, addressId, deliveryTime, deliveryWay, p
Object
.
assign
(
param
,
{
coupon_code
:
other
.
couponCode
});
}
else
if
(
other
.
promotionCode
)
{
Object
.
assign
(
param
,
{
promotion_code
:
other
.
promotionCode
});
}
if
(
other
.
continueBuy
)
{
...
...
@@ -172,7 +174,12 @@ const orderSubmitAsync = (uid, cartType, addressId, deliveryTime, deliveryWay, p
});
}
return
api
.
get
(
''
,
param
);
return
api
.
get
(
''
,
param
,
{
headers
:
{
'X-Forwarded-For'
:
remoteIp
||
''
,
'User-Agent'
:
other
.
userAgent
||
''
}
});
};
module
.
exports
=
{
...
...
apps/cart/models/order-ensure-handle.js
View file @
dda0c58
...
...
@@ -56,17 +56,28 @@ const handleUseYohoCoin = (info) => {
const
handlePaymentInfo
=
(
d
,
address
)
=>
{
let
resData
=
{};
let
defAddrId
=
_
.
get
(
d
,
'delivery_address.address_id'
,
0
);
_
.
forEach
(
address
,
dd
=>
{
if
(
dd
.
is_default
===
'Y'
)
{
dd
.
default
=
true
;
}
// 三级地址默认4级显示全部
if
(
dd
.
area_code
&&
dd
.
area_code
.
length
===
6
)
{
dd
.
area
+=
' 全部'
;
}
// 地址加密
let
id
=
dd
.
address_id
;
dd
.
id
=
crypto
.
encryption
(
''
,
`
$
{
id
}
`
);
// 设置默认选中地址
if
(
id
===
defAddrId
)
{
dd
.
selected
=
true
;
}
// 删除uid,用户数据保密
_
.
unset
(
dd
,
'address_id'
);
_
.
unset
(
dd
,
'uid'
);
...
...
apps/cart/models/order-ensure.js
View file @
dda0c58
...
...
@@ -65,13 +65,13 @@ const compute = (uid, cartType, pa) => {
};
// 订单提交
const
submit
=
(
uid
,
cartType
,
p
)
=>
{
const
submit
=
(
uid
,
cartType
,
p
,
remoteIp
)
=>
{
if
(
p
.
addressId
)
{
p
.
addressId
=
crypto
.
decrypt
(
''
,
`
$
{
p
.
addressId
}
`
);
}
return
ensureApi
.
orderSubmitAsync
(
uid
,
cartType
,
p
.
addressId
,
p
.
deliveryTime
,
p
.
deliveryWay
,
p
.
paymentType
,
p
.
paymentId
,
p
.
printPrice
,
p
).
then
(
result
=>
{
p
.
deliveryWay
,
p
.
paymentType
,
p
.
paymentId
,
p
.
printPrice
,
p
,
remoteIp
).
then
(
result
=>
{
if
(
result
.
code
===
200
)
{
let
d
=
result
.
data
;
...
...
apps/cart/router.js
View file @
dda0c58
...
...
@@ -47,5 +47,6 @@ router.get('/cart/queryPromotionGift', cart.queryUserPromotionGift);
router
.
get
(
'/cart/togetherProduct'
,
cart
.
getTogetherProduct
);
router
.
get
(
'/cart/recommendProduct'
,
cart
.
getRecommendProductAction
);
router
.
get
(
'/cart/minicart'
,
cart
.
miniCart
);
router
.
get
(
'/cart/del'
,
cart
.
delCartGoods
);
module
.
exports
=
router
;
...
...
apps/cart/views/action/order-ensure2016.hbs
View file @
dda0c58
...
...
@@ -8,7 +8,7 @@
<div
class=
"block-title"
>
收货信息
<span
id=
"new-address-btn"
class=
"right"
>
新增收货地址
<i>
+
</i></span></div>
<div
id=
"addr-list"
class=
"addr-list clearfix"
>
{{#
deliveryAddress
}}
<div
class=
"addr-item
{{#
isY
is_default
}}
addr-default
addr-select
{{/
isY
}}
"
data-id=
"
{{
id
}}
"
data-consignee=
"
{{
consignee
}}
"
data-mobile=
"
{{
mobile
}}
"
data-phone=
"
{{
phone
}}
"
data-area=
"
{{
area
}}
"
data-code=
"
{{
area_code
}}
"
data-address=
"
{{
address
}}
"
{{#
isY
is_default
}}
data-default=
"1"
{{/
isY
}}{{#
isY
is_delivery
}}
data-delivery=
"1"
{{/
isY
}}{{#
isY
is_cash_delivery
}}
data-cashdelivery=
"1"
{{/
isY
}}
>
<div
class=
"addr-item
{{#
isY
is_default
}}
addr-default
{{/
isY
}}{{#if
selected
}}
addr-select
{{/if
}}
"
data-id=
"
{{
id
}}
"
data-consignee=
"
{{
consignee
}}
"
data-mobile=
"
{{
mobile
}}
"
data-phone=
"
{{
phone
}}
"
data-area=
"
{{
area
}}
"
data-code=
"
{{
area_code
}}
"
data-address=
"
{{
address
}}
"
{{#
isY
is_default
}}
data-default=
"1"
{{/
isY
}}{{#
isY
is_delivery
}}
data-delivery=
"1"
{{/
isY
}}{{#
isY
is_cash_delivery
}}
data-cashdelivery=
"1"
{{/
isY
}}
>
<p
class=
"name"
>
{{
consignee
}}
<span
class=
"right"
>
{{
mobile
}}
</span>
...
...
@@ -166,52 +166,58 @@
{{#
shoppingCartData
}}
<div
class=
"extra-wrap"
>
<dl>
<dt
id=
"use-coupons"
class=
"use-coupons"
>
<span
class=
"locker-switch"
></span>
使用优惠券/优惠码
<div
class=
"tip-box right"
>
<p>
优惠码不可与优惠券同时使用
</p>
<p
class=
"coupon-err-tip"
></p>
</div>
</dt>
<dd>
<div
class=
"coupon-opt-title"
>
<label
class=
"radio-btn on"
>
使用优惠券
</label>
<label
class=
"radio-btn code"
>
使用优惠码
</label>
<span
class=
"ticket-use-tip hide"
>
已成功使用
<em
class=
"red num"
>
1
</em>
张优惠券,
<em
class=
"red price"
></em>
<b
class=
"cancel-use-ticket"
>
取消使用
</b>
</span>
<div
class=
"opt-area right"
>
<input
type=
"text"
class=
"coupon-code"
>
<label
class=
"sure-use-code fw300"
>
直接使用
</label>
<label
class=
"sure-use-ticket fw300"
>
确定
</label>
{{#
unless
..
/
notUseCoupon
}}
<dt
id=
"use-coupons"
class=
"use-coupons"
>
<span
class=
"locker-switch"
></span>
使用优惠券/优惠码
<div
class=
"tip-box right"
>
<p>
优惠码不可与优惠券同时使用
</p>
<p
class=
"coupon-err-tip"
></p>
</div>
</div>
<div
class=
"coupon-list-wrap"
></div>
</dd>
<dt><span
class=
"locker-switch"
></span>
使用YOHO币
</dt>
<dd
id=
"yoho-coin-box"
class=
"yoho-coin-box"
data-coin=
"
{{
usedCoinNum
}}
"
data-max=
{{
canUseCoinNum
}}
>
<div
class=
"outer-view"
>
<p
class=
"coin-err-tip"
>
{{
coinErrorTip
}}
</p>
<p>
有货币满
<span
class=
"red"
>
{{
yoho_coin_pay_rule
.
num_limit
}}
</span>
个即可使用,每次使用有货币为
<span
class=
"red"
>
{{
yoho_coin_pay_rule
.
num_limit
}}
</span>
的整数倍
</p>
<i
class=
"help-icon"
></i>
<div
class=
"coin-tip-help"
>
<p>
有货币使用提示:
</p>
<p>
1.订单金额大于20元(含20元)
<br>
2.有货币数量大于
{{
yoho_coin_pay_rule
.
num_limit
}}
个(含
{{
yoho_coin_pay_rule
.
num_limit
}}
个)
<br>
3.有货币支付上限为每笔订单应付金额的
{{
yoho_coin_pay_rule
.
max_pay_rate_desc
}}
</p>
<p
class=
"rs-text"
>
备注:使用有货币数量为
{{
yoho_coin_pay_rule
.
num_limit
}}
的整数倍,100有货币抵1元
</p>
</dt>
<dd>
<div
class=
"coupon-opt-title"
>
<label
class=
"radio-btn on"
>
使用优惠券
</label>
<label
class=
"radio-btn code"
>
使用优惠码
</label>
<span
class=
"ticket-use-tip hide"
>
已成功使用
<em
class=
"red num"
>
1
</em>
张优惠券,
<em
class=
"red price"
></em>
<b
class=
"cancel-use-ticket"
>
取消使用
</b>
</span>
<div
class=
"opt-area right"
>
<input
type=
"text"
class=
"coupon-code"
>
<label
class=
"sure-use-code fw300"
>
直接使用
</label>
<label
class=
"sure-use-ticket fw300"
>
确定
</label>
</div>
</div>
</div>
<div
class=
"coin-main-view"
>
<p>
本次使用有货币
<span
class=
"red"
>
{{
canUseCoinNum
}}
</span>
个,抵扣
<span
class=
"red"
>
¥
{{
yoho_coin
}}
</span></p>
<p
class=
"grey fw300"
>
您当前共有有货币
<span
class=
"red"
>
{{
total_yoho_coin_num
}}
</span>
个,可用
<span
class=
"red"
>
{{
canUseCoinNum
}}
</span>
个
</p>
<label
class=
"coin-cancel-btn fw300"
>
取消使用
</label>
<label
class=
"coin-use-btn"
>
确定
</label>
</div>
</dd>
<div
class=
"coupon-list-wrap"
></div>
</dd>
{{/
unless
}}
{{#
unless
..
/
notUseYohoCoin
}}
<dt><span
class=
"locker-switch"
></span>
使用YOHO币
</dt>
<dd
id=
"yoho-coin-box"
class=
"yoho-coin-box"
data-coin=
"
{{
usedCoinNum
}}
"
data-max=
{{
canUseCoinNum
}}
data-total="
{{
total_yoho_coin_num
}}
"
>
<div
class=
"outer-view"
>
<p
class=
"coin-err-tip"
>
{{
coinErrorTip
}}
</p>
<p>
有货币满
<span
class=
"red"
>
{{
yoho_coin_pay_rule
.
num_limit
}}
</span>
个即可使用,每次使用有货币为
<span
class=
"red"
>
{{
yoho_coin_pay_rule
.
num_limit
}}
</span>
的整数倍
</p>
<i
class=
"help-icon"
></i>
<div
class=
"coin-tip-help"
>
<p>
有货币使用提示:
</p>
<p>
1.订单金额大于20元(含20元)
<br>
2.有货币数量大于
{{
yoho_coin_pay_rule
.
num_limit
}}
个(含
{{
yoho_coin_pay_rule
.
num_limit
}}
个)
<br>
3.有货币支付上限为每笔订单应付金额的
{{
yoho_coin_pay_rule
.
max_pay_rate_desc
}}
</p>
<p
class=
"rs-text"
>
备注:使用有货币数量为
{{
yoho_coin_pay_rule
.
num_limit
}}
的整数倍,100有货币抵1元
</p>
</div>
</div>
<div
class=
"coin-main-view"
>
<p>
本次使用有货币
<span
class=
"red"
>
{{
canUseCoinNum
}}
</span>
个,抵扣
<span
class=
"red"
>
¥
{{
yoho_coin
}}
</span></p>
<p
class=
"grey fw300"
>
您当前共有有货币
<span
class=
"red"
>
{{
total_yoho_coin_num
}}
</span>
个,可用
<span
class=
"red"
>
{{
canUseCoinNum
}}
</span>
个
</p>
<label
class=
"coin-cancel-btn fw300"
>
取消使用
</label>
<label
class=
"coin-use-btn"
>
确定
</label>
</div>
</dd>
{{/
unless
}}
{{#if
redEnvelopes
}}
<dt><span
class=
"locker-switch"
></span>
使用红包
</dt>
<dd
id=
"red-packet-box"
class=
"red-packet-box"
>
...
...
@@ -242,7 +248,7 @@
{{#
each
promotion_formula_list
}}
<li
class=
"promotion-item"
>
{{#if
@first
}}
<a
class=
"gain-coin-tip"
href=
"/help/
?category_id=87
"
target=
"_blank"
></a>
<a
class=
"gain-coin-tip"
href=
"/help/
detail?id=105&contId=233
"
target=
"_blank"
></a>
<span
class=
"back-coin"
>
共返YOHO币:
{{
..
/
gain_yoho_coin
}}
个
</span>
<span
class=
"total-num"
><i>
{{
..
/
selected_goods_count
}}
</i>
件商品
</span>
{{/if}}
...
...
apps/cart/views/partial/ensure-tpl.hbs
View file @
dda0c58
...
...
@@ -75,6 +75,7 @@
</script>
<script
id=
"invoice-chose-tpl"
type=
"text/html"
>
<div class="invoice-close"><i class="iconfont"></i></div>
<p class="invoice-header">发票信息</p>
<ul class="invoice-type">
<li class="el-invoice focus">电子发票</li>
...
...
@@ -83,7 +84,7 @@
<div class="invoice-content el-content">
<p class="el-tip">
※ 电子发票是税务局认可的有效凭证,其法律效力、基本用途及使用规定同纸质发票,如需纸质发票可自行下载打印。<br>
<a href="/
/www.yohobuy.com/help?category_id=99
">什么是电子发票?</a>
<a href="/
help/detail?id=33&contId=139" target="_blank
">什么是电子发票?</a>
</p>
<ul>
...
...
@@ -196,7 +197,7 @@
\{{#each promotion_formula_list}}
<li class="promotion-item">
\{{#if @first}}
<a class="gain-coin-tip" href="/help/
?category_id=87
" target="_blank"></a>
<a class="gain-coin-tip" href="/help/
detail?id=105&contId=233
" target="_blank"></a>
<span class="back-coin">共返YOHO币:\{{../gain_yoho_coin}}个</span>
<span class="total-num"><i>\{{../selected_goods_count}}</i>件商品</span>
\{{/if}}
...
...
apps/home/models/address-service.js
View file @
dda0c58
...
...
@@ -25,11 +25,14 @@
let
addressList
=
addressData
.
data
;
for
(
let
i
=
0
;
i
<
addressList
.
length
;
i
++
)
{
let
phone
=
_
.
get
(
addressList
[
i
],
'phone'
)
===
'null'
?
''
:
addressList
[
i
].
phone
;
let
zipCode
=
_
.
get
(
addressList
[
i
],
'zip_code'
)
===
'null'
?
''
:
addressList
[
i
].
zip_code
;
result
.
push
({
id
:
addressList
[
i
].
address_id
||
''
,
addressee
:
addressList
[
i
].
consignee
||
''
,
address
:
addressList
[
i
].
area
+
addressList
[
i
].
address
+
(
addressList
[
i
].
zip_code
||
''
),
phone
:
(
addressList
[
i
].
mobile
||
''
)
+
(
addressList
[
i
].
phone
||
''
),
address
:
addressList
[
i
].
area
+
addressList
[
i
].
address
+
' '
+
zipCode
,
phone
:
(
addressList
[
i
].
mobile
||
''
)
+
' '
+
phone
,
isPreferred
:
addressList
[
i
].
is_default
===
'Y'
?
'true'
:
''
// 默认地址
});
}
...
...
@@ -57,7 +60,6 @@
},
{
isSelect
:
true
,
labelText
:
'省份:'
,
tips
:
'注:标"*"的为支持货到付款的地区'
,
tipsUrl
:
'/help/?category_id=48'
,
selects
:
[{
key
:
'province'
...
...
@@ -92,11 +94,6 @@
labelText
:
'手机号码:'
,
value
:
''
,
tips
:
'填写手机号便于接收发货和收货通知'
},
{
key
:
'email'
,
labelText
:
'电子邮件:'
,
value
:
''
,
tips
:
'用来接收订单提醒邮件,便于您及时了解订单状态'
}]
};
...
...
@@ -122,6 +119,10 @@
for
(
let
i
=
0
;
i
<
addressList
.
length
;
i
++
)
{
if
(
addressList
[
i
].
address_id
===
id
)
{
addressList
[
i
].
phone
=
_
.
get
(
addressList
[
i
],
'phone'
)
===
'null'
?
''
:
addressList
[
i
].
phone
;
addressList
[
i
].
zip_code
=
_
.
get
(
addressList
[
i
],
'zip_code'
)
===
'null'
?
''
:
addressList
[
i
].
zip_code
;
respData
.
data
=
addressList
[
i
];
break
;
}
...
...
@@ -145,7 +146,6 @@
address
:
_
.
trim
(
params
.
address
||
''
),
area_code
:
_
.
trim
(
params
.
streets
||
''
),
consignee
:
_
.
trim
(
params
.
addressName
||
''
),
email
:
_
.
trim
(
params
.
email
||
''
),
id
:
params
.
addrId
===
'0'
?
null
:
params
.
addrId
,
mobile
:
_
.
trim
(
params
.
mobile
||
''
),
phone
:
_
.
trim
(
params
.
phone
||
''
),
...
...
@@ -154,11 +154,11 @@
if
(
query
.
uid
===
''
||
query
.
address
===
''
||
query
.
area_code
.
length
<
6
||
query
.
consignee
===
''
||
query
.
email
===
''
||
query
.
zip_code
===
''
)
{
query
.
zip_code
===
''
)
{
return
{
code
:
400
,
message
:
'
缺失必填项
'
message
:
'
请填写完整的省市区信息
'
};
}
let
respData
=
yield
addressApi
.
saveAddressData
(
query
);
...
...
apps/home/views/action/home/address/address.hbs
View file @
dda0c58
...
...
@@ -63,6 +63,7 @@
<label
for=
"
{{
key
}}
"
>
{{
labelText
}}
</label>
<input
type=
"text"
name=
'
{{
key
}}
'
id=
"
{{
key
}}
"
class=
"input-1 width-150"
value=
"
{{
value
}}
"
>
{{/if}}
{{#if
tips
}}
<span
class=
"form-prompt form-info"
id=
"
{{
key
}}
-tip"
>
{{
tips
}}
{{#
isSelect
}}
...
...
@@ -71,6 +72,7 @@
<!--</a>-->
{{/
isSelect
}}
</span>
{{/if}}
</div>
{{/
each
}}
</div>
...
...
apps/product/models/detail-service.js
View file @
dda0c58
...
...
@@ -1107,7 +1107,7 @@ const _detailDataPkg = (origin, uid, vipLevel, cookies) => {
result
.
maxSortId
=
propOrigin
(
'maxSortId'
,
''
);
result
.
smallSortId
=
propOrigin
(
'smallSortId'
,
''
);
result
.
goCartUrl
=
helpers
.
urlFormat
(
'/
shopping
/cart'
);
result
.
goCartUrl
=
helpers
.
urlFormat
(
'/
cart
/cart'
);
// 定金预售
result
.
deposit
=
propOrigin
(
'is_deposit_advance'
,
'N'
);
...
...
doraemon/views/partial/analysis.hbs
View file @
dda0c58
...
...
@@ -13,7 +13,7 @@ var _gaq = _gaq || [];
(
function
()
{
_gaq
.
push
([
'_setAccount'
,
'UA-48997038-32'
]);
_gaq
.
push
([
'_trackPageview'
]);
var
ga
=
document
.
createElement
(
'script'
);
var
ga
=
document
.
createElement
(
'script'
);
ga
.
type
=
'text/javascript'
;
ga
.
async
=
true
;
ga
.
src
=
(
'https:'
==
document
.
location
.
protocol
?
'https://ssl'
:
'http://www'
)
+
'.google-analytics.com/ga.js'
;
var
s
=
document
.
getElementsByTagName
(
'script'
)[
0
];
s
.
parentNode
.
insertBefore
(
ga
,
s
);
...
...
@@ -60,3 +60,19 @@ var _gaq = _gaq || [];
s
.
parentNode
.
insertBefore
(
bp
,
s
);
})();
</script>
<!-- 品众统计 -->
<script
type=
'text/javascript'
>
var
_fxcmd
=
_fxcmd
||
[];
_fxcmd
.
sid
=
'bb3b16fa1106a6ab8619da0095755f32'
;
_fxcmd
.
trackAll
=
false
;
// 参数配置(可选)...
// 追踪配置(可选)...
(
function
()
{
var
_pzfx
=
document
[
'createElement'
](
'script'
);
_pzfx
.
type
=
'text/javascript'
;
_pzfx
.
async
=
true
;
_pzfx
.
src
=
'//static.w3t.cn/fx/1/1/fx.js'
;
var
sc
=
document
.
getElementsByTagName
(
'script'
)[
0
];
sc
.
parentNode
.
insertBefore
(
_pzfx
,
sc
);
})();
</script>
...
...
doraemon/views/partial/header.hbs
View file @
dda0c58
...
...
@@ -101,7 +101,7 @@
</form>
</div>
<div
class=
"go-cart"
>
<a
href=
"//www.yohobuy.com/
shopping
/cart"
>
<a
href=
"//www.yohobuy.com/
cart
/cart"
>
<span
class=
"iconfont "
>

</span>
{{#
unless
@root
.
pc
.
common
.
removeCartCount
}}
<span
class=
"goods-num-tip hide"
>
0
</span>
...
...
mix/mix/cart/cart-item.hbs
View file @
dda0c58
...
...
@@ -64,7 +64,8 @@
<span
class=
"sale-info-title"
>
促销信息
<i></i></span>
<ul
class=
"none"
>
{{#
promotionInfos
}}
<li>
{{{
promotionTitle
}}}
<li
data-role=
"promotion-wrap"
data-promotionid=
"
{{
promotionId
}}
"
>
{{{
promotionTitle
}}}
{{>
mix
/
cart
/
cart-promotion-btn
}}
{{#if
isNotReach
}}
<a
class=
"btn-clear blue order-pay-link"
target=
"_blank"
href=
"
{{
promotionPageUrl
}}
"
>
去凑单
</a>
...
...
mix/mix/cart/cart-list.hbs
View file @
dda0c58
...
...
@@ -6,23 +6,6 @@
<a
href=
"
{{
listUrl
}}
"
>
去购物
</a>
</div>
</div>
<div
class=
"dev-revocation
{{#
unless
deleteShop
}}
none
{{/
unless
}}
"
>
<table>
{{#
deleteShop
}}
<tr
data-productnum=
"
{{
productNum
}}
"
data-productsku=
"
{{
productSku
}}
"
>
<td
style=
"width:35%; text-align: left;"
>
成功删除
<a
class=
"title"
href=
"
{{
link
}}
"
target=
"_blank"
>
{{
productTitle
}}
</a>
</td>
<td
style=
"width:14%;"
><span
class=
"productPrice"
>
{{
productPrice
}}
</span></td>
<td
style=
"width:15%;"
>
{{
productNum
}}
件
</td>
<td
style=
"width:16%;"
></td>
<td
style=
"width:11.8%; border-right: none; text-align: right;"
>
<a
href=
"javascript:void(0);"
><span
class=
"goBack"
>
撤销本次删除
</span></a>
</td>
</tr>
{{/
deleteShop
}}
</table>
</div>
{{^}}
<!-- 购物车商品列表 -->
<div
class=
"pay-wapper"
>
...
...
@@ -134,31 +117,6 @@
</div>
{{/if}}
{{#if
offShelves
}}
<div
class=
"mt20"
>
<div
class=
"cart-table"
>
<ul
class=
"table"
>
{{#
offShelves
}}
{{>
mix
/
cart
/
cart-item
}}
{{/
offShelves
}}
</ul>
</div>
</div>
{{/if}}
<!-- -->
{{#if
soldOuts
}}
<div
class=
"mt20"
>
<div
class=
"cart-table"
>
<ul
class=
"table"
>
{{#
soldOuts
}}
{{>
mix
/
cart
/
cart-item
}}
{{/
soldOuts
}}
</ul>
</div>
</div>
{{/if}}
<!--可选的加价购商品 -->
<!--priceGifts-->
<!--可选择的赠品-->
...
...
@@ -183,6 +141,31 @@
{{/
promotionInfos
}}
</div>
{{/if}}
{{#if
offShelves
}}
<div
class=
"mt20"
>
<div
class=
"cart-table"
>
<ul
class=
"table"
>
{{#
offShelves
}}
{{>
mix
/
cart
/
cart-item
}}
{{/
offShelves
}}
</ul>
</div>
</div>
{{/if}}
<!-- -->
{{#if
soldOuts
}}
<div
class=
"mt20"
>
<div
class=
"cart-table"
>
<ul
class=
"table"
>
{{#
soldOuts
}}
{{>
mix
/
cart
/
cart-item
}}
{{/
soldOuts
}}
</ul>
</div>
</div>
{{/if}}
</div>
{{/
ordinaryCart
}}
...
...
package.json
View file @
dda0c58
...
...
@@ -63,7 +63,7 @@
"urlencode"
:
"^1.1.0"
,
"uuid"
:
"^2.0.2"
,
"yoho-express-session"
:
"^2.0.0"
,
"yoho-node-lib"
:
"0.2.
5
"
,
"yoho-node-lib"
:
"0.2.
8
"
,
"yoho-zookeeper"
:
"^1.0.6"
},
"devDependencies"
:
{
...
...
public/hbs/header/mini-cart-tpl.hbs
View file @
dda0c58
...
...
@@ -58,7 +58,7 @@
<div>
<p
data-role=
"totalinfo"
data-total=
"
{{
total
}}
"
>
购物车里还有
<span
data-role=
"last-num"
>
{{
total
}}
</span>
件商品
</p>
<a
href=
"//www.yohobuy.com/
shopping
/cart"
>
查看我的购物车
</a>
<a
href=
"//www.yohobuy.com/
cart
/cart"
>
查看我的购物车
</a>
</div>
</div>
</div>
...
...
public/js/cart/cart-action.js
View file @
dda0c58
...
...
@@ -287,6 +287,7 @@ Cart = {
modNum
:
function
()
{
var
$this
=
$
(
this
);
var
$item
=
$this
.
closest
(
'li[data-role=pitem]'
);
var
$btn
=
$item
.
find
(
'.cart-item-check'
);
// var storagenum = $item.data('storagenum') ? $item.data('storagenum') * 1 : 0;
var
countJSON
=
{};
...
...
@@ -305,6 +306,10 @@ Cart = {
capi
.
cartItemNumChg
(
$
.
extend
(
countJSON
,
{
sku
:
$item
.
data
(
'id'
)
}));
if
(
!
$btn
.
hasClass
(
'cart-item-checked'
))
{
$btn
.
click
();
}
},
reAdd2Cart
:
function
()
{
...
...
public/js/cart/cart-api.js
View file @
dda0c58
...
...
@@ -194,7 +194,7 @@ cartItemNumChg = (function() {
}
countBusy
=
true
;
$
.
ajax
({
return
$
.
ajax
({
type
:
'POST'
,
dataType
:
'json'
,
url
:
'/cart/cart/modifyNum'
,
...
...
public/js/cart/cart-goods-win.js
View file @
dda0c58
...
...
@@ -5,6 +5,8 @@
var
$
=
require
(
'yoho-jquery'
),
Alert
=
require
(
'../common/dialog'
).
Alert
,
capi
=
require
(
'./cart-api'
),
rDialog
=
require
(
'./rdialog'
),
RAlert
=
rDialog
.
RAlert
,
giftsWinTpl
=
require
(
'hbs/cart/cart-gifts-win-tpl.hbs'
),
productInfoTpl
=
require
(
'hbs/cart/cart-product-info-tpl.hbs'
);
...
...
@@ -20,6 +22,11 @@ var $cartListWrap = $('#Y_CartListWrap'),
'[data-role=pg-resel-btn]'
];
function
renderAndShowGiftWin
(
plist
)
{
if
(
!
plist
.
goodsList
||
!
plist
.
goodsList
.
length
)
{
new
RAlert
(
'<div class="alert-main">已抢光</div>'
);
return
;
}
$goodsSelWin
.
find
(
'.detail-body'
).
empty
().
html
(
giftsWinTpl
(
plist
));
capi
.
showMDialog
(
'#Y_goodsSelectWinDialog'
);
...
...
public/js/cart/ensure.page.js
View file @
dda0c58
...
...
@@ -60,14 +60,12 @@ Hbs.registerHelper('round', function(num, precision) {
// 订单计算
// 传有货币数量则使用有货币,否者不使用,更改订单总价有货币使用数量重置为0
function
compute
(
coin
)
{
function
compute
(
coin
,
cb
)
{
var
reqData
=
{
cartType
:
order
.
cartType
,
coin
:
coin
?
coin
:
0
};
order
.
coin
=
reqData
.
coin
;
// 支付方式
if
(
order
.
paymentType
)
{
reqData
.
paymentType
=
order
.
paymentType
;
...
...
@@ -81,6 +79,13 @@ function compute(coin) {
// 优惠券
if
(
order
.
couponCode
)
{
reqData
.
couponCode
=
order
.
couponCode
;
}
else
if
(
order
.
promotionCode
)
{
reqData
.
promotionCode
=
order
.
promotionCode
;
}
// 有货币(保证更改其他价格yoho币不清零,调接口传最大数量,接口限制可使用数量)
if
(
!
coin
&&
order
.
coin
)
{
reqData
.
coin
=
yohoCoin
.
totalCoin
;
}
// 红包
...
...
@@ -98,28 +103,26 @@ function compute(coin) {
if
(
data
.
code
===
200
)
{
res
=
data
.
data
;
// update order used yoho coin
order
.
coin
=
res
.
usedCoinNum
;
// update yoho coin max use num
yohoCoin
.
maxCoin
=
res
.
canUseCoinNum
;
// update yoho coin using
yohoCoin
.
$el
.
html
(
coinTpl
(
res
));
if
(
!
reqData
.
coin
)
{
yohoCoin
.
$el
.
removeClass
(
'used'
);
}
// update last order amount
$orderPrice
.
html
(
'¥ '
+
res
.
last_order_amount
);
// update promotion formula list
$balanceDetail
.
html
(
promotionTpl
(
res
));
}
else
if
(
data
.
code
===
317
)
{
if
(
coupon
.
$errorTip
)
{
coupon
.
$errorTip
.
text
(
data
.
message
);
if
(
order
.
couponCode
)
{
delete
order
.
couponCode
;
}
}
}
// callback
if
(
cb
&&
typeof
cb
===
'function'
)
{
return
cb
(
data
);
}
});
}
...
...
@@ -479,30 +482,33 @@ coupon = {
that
.
cancelTicketUse
();
}).
on
(
'change'
,
'.coupon-code'
,
function
()
{
that
.
$errorTip
.
empty
();
}).
on
(
'click'
,
'.opt-area > label'
,
function
()
{
}).
on
(
'click'
,
'.sure-use-ticket'
,
function
()
{
that
.
close
();
}).
on
(
'click'
,
'.sure-use-code'
,
function
()
{
var
$this
=
$
(
this
);
var
couponId
,
data
;
if
(
$this
.
hasClass
(
'sure-use-ticket'
))
{
data
=
that
.
$radios
.
filter
(
'.on'
).
data
();
var
couponId
;
if
(
data
)
{
that
.
$ticketUseTip
.
find
(
'.price'
).
text
(
'- ¥'
+
data
.
price
);
that
.
$ticketUseTip
.
removeClass
(
'hide'
);
couponId
=
data
.
id
;
}
}
else
{
couponId
=
$this
.
siblings
(
'.coupon-code'
).
val
();
}
couponId
=
$this
.
siblings
(
'.coupon-code'
).
val
();
if
(
couponId
)
{
order
.
couponCode
=
couponId
;
// 重新计算订单价格
compute
();
compute
(
0
,
function
(
resData
)
{
if
(
resData
.
code
===
200
)
{
that
.
close
();
}
else
{
that
.
$errorTip
.
text
(
resData
.
message
);
if
(
order
.
couponCode
)
{
delete
order
.
couponCode
;
}
}
});
}
}).
on
(
'click'
,
'.coupon-radio'
,
function
()
{
var
$this
=
$
(
this
);
var
$this
=
$
(
this
),
data
,
couponId
;
if
(
$this
.
hasClass
(
'on'
))
{
return
;
...
...
@@ -512,6 +518,20 @@ coupon = {
that
.
$radios
.
filter
(
'.on'
).
removeClass
(
'on'
);
}
$this
.
addClass
(
'on'
);
data
=
$this
.
data
();
if
(
data
)
{
that
.
$ticketUseTip
.
find
(
'.price'
).
text
(
'- ¥'
+
data
.
price
);
that
.
$ticketUseTip
.
removeClass
(
'hide'
);
couponId
=
data
.
id
;
}
if
(
couponId
)
{
order
.
couponCode
=
couponId
;
// 重新计算订单价格
compute
();
}
});
},
cancelTicketUse
:
function
()
{
...
...
@@ -531,6 +551,9 @@ coupon = {
delete
order
.
couponCode
;
compute
();
// 重新计算订单价格
}
},
close
:
function
()
{
this
.
$el
.
children
(
'.locker-switch'
).
trigger
(
'click'
);
}
};
...
...
@@ -549,6 +572,7 @@ yohoCoin = {
if
(
data
)
{
order
.
coin
=
data
.
coin
||
0
;
this
.
maxCoin
=
data
.
max
;
this
.
totalCoin
=
data
.
total
;
}
this
.
eventBind
();
...
...
@@ -564,6 +588,7 @@ yohoCoin = {
that
.
close
();
}).
on
(
'click'
,
'.coin-cancel-btn'
,
function
()
{
if
(
order
.
coin
*
1
!==
0
)
{
order
.
coin
=
0
;
compute
();
}
...
...
@@ -584,6 +609,7 @@ $('.locker-switch').click(function() {
(
function
()
{
var
$redSureBtn
=
$
(
'#red-packet-sure'
);
var
$redPacketBox
=
$
(
'#red-packet-box'
);
var
used
;
if
(
!
$redSureBtn
.
length
)
{
...
...
@@ -598,12 +624,15 @@ $('.locker-switch').click(function() {
$redSureBtn
.
siblings
(
'.radio-btn'
).
addClass
(
'on'
);
}
$
(
'#red-packet-box'
)
.
on
(
'click'
,
'.radio-btn'
,
function
()
{
$
redPacketBox
.
on
(
'click'
,
'.radio-btn'
,
function
()
{
$
(
this
).
toggleClass
(
'on'
);
}).
on
(
'click'
,
'.sure-btn'
,
function
()
{
var
$this
=
$
(
this
),
num
=
$this
.
data
(
'num'
);
// 触发关闭事件
$redPacketBox
.
prev
().
children
(
'.locker-switch'
).
trigger
(
'click'
);
if
(
!
num
)
{
return
;
}
...
...
@@ -665,7 +694,7 @@ $('#order-submit').click(function() {
url
:
'/cart/ensure/submit'
,
data
:
order
}).
then
(
function
(
data
)
{
var
rdata
,
subTip
,
var
rdata
,
subTip
,
newUser
,
tongJi
=
{
num
:
0
,
skn
:
[],
...
...
@@ -722,8 +751,7 @@ $('#order-submit').click(function() {
// yas统计
yas
.
givePoint
(
'YB_SC_TOPAY_CLICK'
,
{
ORDER_CODE
:
rdata
.
order_code
,
PRD_NUM
:
tongJi
.
num
,
ORDER_AMOUNT
:
rdata
.
order_amount
,
PRO_SKN
:
tongJi
.
skn
.
join
(
','
),
PRO_SKU
:
tongJi
.
sku
.
join
(
','
),
UNIONCOOKIE
:
rdata
.
unionKey
||
''
});
ORDER_AMOUNT
:
rdata
.
order_amount
,
PRO_SKN
:
tongJi
.
skn
.
join
(
','
),
PRO_SKU
:
tongJi
.
sku
.
join
(
','
)});
// 品友统计
if
(
window
.
py
)
{
...
...
@@ -734,6 +762,19 @@ $('#order-submit').click(function() {
}).
track
(
'MC.ROh.yqkx8jgGASmo3McexF7XE0'
);
}
// 品众统计
if
(
window
.
_fxcmd
)
{
newUser
=
window
.
cookie
(
'__NEW_USER'
)
||
0
;
window
.
_fxcmd
.
push
([
'trackOrder'
,
{
oid
:
rdata
.
order_code
,
otp
:
rdata
.
order_amount
,
u_info
:
window
.
getUser
(),
u_type
:
newUser
},
[]]);
window
.
setCookie
(
'__NEW_USER'
,
0
);
}
location
.
href
=
rdata
.
url
;
}
}
else
if
(
data
.
message
)
{
...
...
@@ -748,5 +789,8 @@ multiPackage.init();
coupon
.
init
();
yohoCoin
.
init
();
// 获取用户是否新客(品众统计)写cookie
$
.
ajax
({
type
:
'GET'
,
url
:
'/home/newuser'
});
// 订单确认页默认埋点
yas
.
givePoint
(
'YB_SC_ORDER_ENSURE'
);
...
...
public/js/cart/order-new/areaSelect.js
View file @
dda0c58
...
...
@@ -268,6 +268,10 @@ var areaSelect = {
if
(
data
&&
data
.
length
)
{
if
(
select
&&
!
selInfo
.
id
)
{
select
=
this
.
area
.
id
||
0
;
this
.
town
=
{
id
:
select
,
text
:
'全部'
};
_h
=
'<span class="ai'
+
select
+
' all-town on" data-id="'
+
select
+
'" data-text="全部">全部</span>'
+
_h
;
}
else
{
...
...
public/js/cart/order-new/invoice.js
View file @
dda0c58
...
...
@@ -100,6 +100,10 @@ function bindInvoiceEvent($el) {
$goodsTypeWrap
.
find
(
'.on'
).
removeClass
(
'on'
);
$this
.
addClass
(
'on'
);
});
$el
.
on
(
'click'
,
'.invoice-close'
,
function
()
{
$
(
'.btn-close'
,
$el
).
trigger
(
'click'
);
});
}
function
bindInvoiceInfo
(
$el
,
info
)
{
...
...
public/js/header.js
View file @
dda0c58
...
...
@@ -359,7 +359,7 @@ function refreshCartNum() {
var
$totalInfo
=
$miniCart
.
find
(
'[data-role=totalinfo]'
);
var
total
=
0
;
$miniCart
.
find
(
'.goods-item.hide
)
'
).
each
(
function
()
{
$miniCart
.
find
(
'.goods-item.hide'
).
each
(
function
()
{
var
$t
=
$
(
this
);
var
val
=
$t
.
data
(
'num'
)
||
0
;
...
...
@@ -418,7 +418,7 @@ function delCartGoods(data, callback) {
product_num
:
data
.
num
};
$
.
getJSON
(
'//www.yohobuy.com/c
ommon/delCartGoods/
?callback=?'
,
param
,
function
(
jsonData
)
{
$
.
getJSON
(
'//www.yohobuy.com/c
art/cart/del
?callback=?'
,
param
,
function
(
jsonData
)
{
var
strG
=
''
;
if
(
jsonData
.
code
===
200
)
{
...
...
public/js/home/common-address.js
View file @
dda0c58
...
...
@@ -43,8 +43,7 @@ var address = {
loadAreaData
:
function
(
pCode
,
toDomId
,
defaultValue
,
allCode
)
{
var
the
=
this
,
$toDom
=
$
(
'#'
+
toDomId
),
i
=
0
,
point
=
''
;
i
=
0
;
var
active
,
val
,
...
...
@@ -76,12 +75,11 @@ var address = {
$toDom
.
append
(
'<option value="0">'
+
defaultValue
+
'</option>'
);
if
(
toDomId
===
the
.
streetsDomId
)
{
allCode
===
pCode
?
selectAll
=
'selected'
:
selectAll
=
''
;
$toDom
.
append
(
'<option value="'
+
pCode
+
'" '
+
selectAll
+
'>
*
全部</option>'
);
$toDom
.
append
(
'<option value="'
+
pCode
+
'" '
+
selectAll
+
'>全部</option>'
);
}
for
(
i
in
jsonData
.
options
)
{
if
(
jsonData
.
options
[
i
])
{
val
=
jsonData
.
options
[
i
];
point
=
(
toDomId
===
the
.
streetsDomId
&&
val
.
is_support
===
'Y'
)
?
'*'
:
''
;
nId
=
val
.
value
;
selecter
=
''
;
...
...
@@ -89,7 +87,7 @@ var address = {
nId
===
allCode
.
substr
(
0
,
nId
.
length
))
{
selecter
=
'selected'
;
}
$toDom
.
append
(
'<option value="'
+
nId
+
'" '
+
selecter
+
'>'
+
point
+
val
.
text
+
'</option>'
);
$toDom
.
append
(
'<option value="'
+
nId
+
'" '
+
selecter
+
'>'
+
val
.
text
+
'</option>'
);
}
}
}
...
...
public/scss/cart/_cart-togetherGoods.css
View file @
dda0c58
...
...
@@ -145,7 +145,7 @@
.oldprice
{
display
:
block
;
color
:
#b0b0b0
;
font-size
:
1
2
px
;
font-size
:
1
3
px
;
font-weight
:
normal
;
height
:
25px
;
line-height
:
25px
;
...
...
@@ -192,7 +192,7 @@
}
}
dd
{
width
:
55px
;
min-
width
:
55px
;
float
:
left
;
letter-spacing
:
0
;
word-spacing
:
0
;
...
...
@@ -200,12 +200,13 @@
text-align
:
left
;
}
dt
{
width
:
300
px
;
width
:
275
px
;
float
:
left
;
text-align
:
left
;
}
dd
.colorBox
{
line-height
:
40px
;
padding-bottom
:
10px
;
}
dd
.showSizeBox
{
line-height
:
23px
;
...
...
@@ -241,6 +242,7 @@
height
:
40px
;
text-align
:
center
;
margin-right
:
5px
;
margin-bottom
:
5px
;
display
:
inline
;
float
:
left
;
cursor
:
pointer
;
...
...
public/scss/cart/_cart.css
View file @
dda0c58
...
...
@@ -713,7 +713,7 @@
b
{
display
:
inline-block
;
vertical-align
:
bottom
;
max-width
:
1
2
0px
;
max-width
:
1
1
0px
;
margin-right
:
10px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
...
...
@@ -760,28 +760,28 @@
display
:
none
;
&:after{
position
:
absolute
;
top
:
100px
;
left
:
-16px
;
top
:
96px
;
left
:
-10px
;
content
:
''
;
display
:
inline-block
;
width
:
0
;
height
:
0
;
border-right
:
16px
solid
#000
;
border-top
:
8px
solid
transparent
;
border-bottom
:
8px
solid
transparent
;
border-right
:
10px
solid
#000
;
border-top
:
10px
solid
transparent
;
border-bottom
:
10px
solid
transparent
;
}
&
:before
{
position
:
absolute
;
top
:
101px
;
left
:
-14px
;
top
:
97px
;
left
:
-9px
;
z-index
:
20
;
content
:
''
;
display
:
inline-block
;
width
:
0
;
height
:
0
;
border-right
:
14px
solid
#fff
;
border-top
:
7px
solid
transparent
;
border-bottom
:
7px
solid
transparent
;
border-right
:
9px
solid
#fff
;
border-top
:
9px
solid
transparent
;
border-bottom
:
9px
solid
transparent
;
}
.goods-info
{
float
:
left
;
...
...
@@ -898,18 +898,19 @@
font-size
:
12px
;
font-weight
:
300
;
padding
:
0
;
border
:
none
;
border
:
1px
solid
#000
;
box-sizing
:
border-box
;
line-height
:
22px
;
cursor
:
pointer
;
outline
:
none
;
}
.button-sure
{
background-color
:
#
d0021b
;
background-color
:
#
000
;
color
:
#fff
;
margin-right
:
18px
;
}
.button-cancel
{
background-color
:
#
e0e0e0
;
background-color
:
#
fff
;
color
:
#000
;
}
}
...
...
@@ -1028,6 +1029,7 @@
color
:
#ff575c
;
&.tip-message-coin
{
color
:
#000
;
margin-top
:
2px
;
}
}
.product-price
{
...
...
@@ -1688,10 +1690,11 @@
&:nth-child(2)
{
margin-left
:
20px
;
}
}
.alert-sure
{
width
:
150px
;
&
:last-child
{
&.alert-sure
{
width
:
150px
;
}
}
}
.alert-main
{
...
...
public/scss/cart/_order-ensure2016.css
View file @
dda0c58
...
...
@@ -1331,10 +1331,11 @@
position
:
absolute
;
right
:
10px
;
top
:
12px
;
z-index
:
-1
;
}
>
span
{
width
:
9
2
%
;
width
:
9
8
%
;
font-size
:
14px
;
max-height
:
28px
;
line-height
:
28px
;
...
...
@@ -1521,6 +1522,21 @@
color
:
#444
;
background-color
:
#fff
;
>
.close
{
display
:
none
;
}
.invoice-close
{
position
:
absolute
;
top
:
10px
;
right
:
12px
;
cursor
:
pointer
;
.iconfont
{
font-size
:
32px
;
}
}
.radio-btn
{
&:before
{
content
:
''
;
...
...
@@ -1540,15 +1556,6 @@
}
}
>
.close
{
top
:
10px
;
right
:
12px
;
.iconfont
{
font-size
:
32px
;
}
}
>
.content
{
text-align
:
left
;
}
...
...
public/scss/common/_header.css
View file @
dda0c58
...
...
@@ -637,15 +637,16 @@
padding
:
0
25px
;
>
div
{
height
:
88px
;
border-top
:
1px
solid
#dcdcdc
;
text-align
:
right
;
padding-top
:
14px
;
padding-bottom
:
16px
;
}
p
{
font-size
:
13px
;
color
:
#444
;
text-align
:
right
;
padding-top
:
14px
;
padding-top
:
0
;
padding-bottom
:
8px
;
}
a
{
...
...
Please
register
or
login
to post a comment