Authored by 梁志锋

Merge branch 'feature/cart' of http://git.dev.yoho.cn/web/yohobuy into feature/cart

... ... @@ -20,7 +20,8 @@ var $num,
$colorList = $('.color-list ul>li'),
$sizeList = $('.size-list ul>li'),
firstColorId = $colorList.eq(0).data('id'),
colorIndex;
colorIndex,
confirming;
//初始化购物车面板显示
$sizeList.each(function() {
... ... @@ -31,7 +32,7 @@ $sizeList.each(function() {
}
});
// confirm;
// var tpl;
... ... @@ -81,41 +82,47 @@ $('.yoho-page').on('touchstart', '.chose-panel', function(e) {
}).on('touchstart', '#chose-btn-sure', function() {
var productSku,
buyNumber = $('#good-num') - 0;
buyNumber = $('#good-num').val() - 0,
promotionId,
isEdit = 0,
numInCart = $('.num-tag').html() - 0;
// promotionId,
// goodsType,
// goodsType,
// isEdit;
$chosed = $('.block-list>ul>li.chosed');
if (2 === $chosed.length && 0 === $chosed.closest('.zero-stock').length) {
productSku = $sizeList.closest('.chosed').data('skuid');
promotionId = $('[data-id="' + productSku + '"]').closest('.advance-block').data('promotion-id');
if (confirming) {
return false;
}
// if (confirm) {
// return false;
// }
// confirm = true;
confirming = true;
loading.showLoadingMask();
$.ajax({
method: 'POST',
url: '/cart/index/add',
data: {
productSku: productSku,
buyNumber: buyNumber
buyNumber: buyNumber,
promotionId: promotionId,
isEdit: isEdit
}
}).done(function(res) {
if (res.code === 200) {
loading.hideLoadingMask();
// confirm = false;
$('.num-tag').html(numInCart + buyNumber);
$('.num-tag').removeClass('hide');
confirming = false;
remove();
}
}).fail(function() {
tip.show('网络出了点问题~');
// confirm = false;
confirming = false;
});
}
... ...
... ... @@ -8,6 +8,7 @@ var $ = require('jquery'),
lazyLoad = require('yoho.lazyload'),
Handlebars = require('yoho.handlebars'),
tip = require('../plugin/tip'),
loading = require('../plugin/loading'),
chosePanel = require('./chose-panel');
var panelTmpl,
... ... @@ -27,6 +28,7 @@ $.get('/cart/index/giftinfoTpl', function(html) {
});
function getProductInfo(skn, promotionId) {
loading.showLoadingMask();
$.get('/cart/index/giftinfo', {
skn: skn,
promotionId: promotionId
... ... @@ -48,6 +50,8 @@ function getProductInfo(skn, promotionId) {
}
}).fail(function() {
tip.show('网络错误');
}).always(function() {
loading.hideLoadingMask();
});
}
... ...
... ... @@ -92,7 +92,7 @@ function getCouponHandle(coupons) {
// 第一页张数为 0 ,显示优惠券为空
if (!coupons.length && page === 2) {
$('.select-coupon-page').html($('#tmpl-no-coupon').html());
$('.coupin-wrap').html($('#tmpl-no-coupon').html());
return;
}
... ...
... ... @@ -43,6 +43,8 @@ function request() {
requesting = false;
end = true;
window.rePosFooter();
}).fail(function() {
$recommendForYou.hide();
});
... ... @@ -50,7 +52,7 @@ function request() {
}
function scrollHandler() {
if (!end || $(window).scrollTop() + winH >= $(document).height() - 50) {
if (!end || $(window).scrollTop() + winH >= $(document).height() - 200) {
request();
}
}
... ...
... ... @@ -4,9 +4,11 @@
<input type="text" name="couponCode" value="" placeholder="输入优惠券码">
<button type="submit" class="submit">确定</button>
</form>
<div id="coupon-list" class="coupon-list"></div>
<div class="not-avaliable-coupon-line hide">不可使用的优惠券</div>
<div id="coupon-list-not" class="coupon-list"></div>
<div class="coupin-wrap">
<div id="coupon-list" class="coupon-list"></div>
<div class="not-avaliable-coupon-line hide">不可使用的优惠券</div>
<div id="coupon-list-not" class="coupon-list"></div>
</div>
</div>
<script id="tmpl-coupon" type="text/tmpl">
\{{#coupons}}
... ...
... ... @@ -15,7 +15,7 @@
}
.help {
padding: 30px 30px;
font-size: 16px;
font-size: 24px;
line-height: 1.5;
color: #444;
}
... ... @@ -36,8 +36,7 @@
</ul>
<p>其他说明:</p>
<ul>
<li>1. YOHO!BUY有货对用户在本站进行晒单评价的文字、图片享有使用权利;</li>
<li>2. 用户所晒单评价的文字、图片提交发布后,默认同步YOHO!SHOW平台;</li>
<li>YOHO!BUY有货对用户在本站进行晒单评价的文字、图片享有使用权利</li>
</ul>
</div>
</body>
... ...
... ... @@ -5,8 +5,8 @@
<a class="swiper-slide" href="{{url}}">
<img class="swiper-lazy img-box" data-src="{{thumb}}">
<div class="price">
<span class="sale-price {{^price}}no-price{{/price}}">¥{{salePrice}}</span>
{{#price}}<span class="old-price">¥{{.}}</span>{{/price}}
<span class="sale-price {{^price}}no-price{{/price}}">&yen;{{salePrice}}</span>
{{#price}}<span class="old-price">&yen;{{.}}</span>{{/price}}
</div>
<div class="swiper-lazy-preloader"></div>
</a>
... ...
... ... @@ -218,7 +218,7 @@ class OrderModel
//已发货状态,给查看物流URL
$result['unreceived'] = true;
$result['logisticsUrl'] = Helpers::url('/home/logistic', array('order_code' => $order['order_code']));
if ($showLogistics) {
if ($showLogistics && isset($order['caption'])) {
$result['logisticsCompany'] = $order['caption'];
$result['logisticsNum'] = $order['express_number'];
}
... ... @@ -248,9 +248,9 @@ class OrderModel
//待收货状态,给查看物流url
$result['unreceived'] = true;
$result['logisticsUrl'] = Helpers::url('/home/logistic', array('order_code' => $order['order_code']));
if ($showLogistics) {
$result['logisticsCompany'] = isset($order['caption']) ? $order['caption'] : '';
$result['logisticsNum'] = isset($order['express_number']) ? $order['express_number'] : '';
if ($showLogistics && isset($order['caption'])) {
$result['logisticsCompany'] = $order['caption'];
$result['logisticsNum'] = $order['express_number'];
}
break;
case 6:
... ...
... ... @@ -241,7 +241,7 @@ class DetailModel
'numInCart' => 0,
'goodsInstore' => $baseInfo['storage'], // 库存量
);
$soldOut = $totalStorageNum === 0;
$soldOut = ($baseInfo['storage'] == 0) || ($totalStorageNum === 0);
$notForSale = $baseInfo['attribute'] == 2;
// 显示加入购物车链接
if (!$soldOut && !$notForSale) {
... ... @@ -346,7 +346,7 @@ class DetailModel
$referenceList = array();
// 判断是否显示参考尺码
$showReference = $boyReference || $girlReference;
$showReference = ($boyReference && !empty($sizeInfo['sizeInfoBo']['sizeBoList'][0]['boyReferSize'])) || ($girlReference && !empty($sizeInfo['sizeInfoBo']['sizeBoList'][0]['girlReferSize']) );
if ($showReference) {
$referenceList[0] = array('param' => $referenceName);
}
... ...
... ... @@ -48,6 +48,7 @@ class IndexController extends AbstractAction
// 渲染模板
$this->_view->display('index', $data);
}
/*
* 异步获取购物车数据
*/
... ... @@ -79,7 +80,7 @@ class IndexController extends AbstractAction
if ($this->isAjax()) {
$productId = $this->post('skuList', 0);
$uid = $this->getUid(true);
$shoppingKey = $this->getSession('shoppingKey');
$shoppingKey = Helpers::getShoppingKeyByCookie();
$result = CartModel::selectGoods($uid, $productId, $shoppingKey);
}
... ... @@ -100,7 +101,7 @@ class IndexController extends AbstractAction
if ($this->isAjax()) {
$productId = $this->post('id', 0);
$uid = $this->getUid(true);
$shoppingKey = $this->getSession('shoppingKey');
$shoppingKey = Helpers::getShoppingKeyByCookie();
$result = CartModel::removeFromCart($uid, $productId, $shoppingKey);
}
... ... @@ -191,6 +192,7 @@ class IndexController extends AbstractAction
/*
* 获取购物车加价购商品数据模板
* 需要返回模板的html代码,不能渲染
*/
public function giftinfoTplAction()
{
... ... @@ -206,11 +208,11 @@ class IndexController extends AbstractAction
{
$result = array();
// if ($this->isAjax()) {
if ($this->isAjax()) {
$skn = $this->get('skn', null);
$promotionId = $this->get('promotionId', null);
$result = CartModel::giftProductData($skn, $promotionId);
// }
}
if (empty($result)) {
echo ' ';
... ... @@ -227,7 +229,7 @@ class IndexController extends AbstractAction
$result = array();
if ($this->isAjax()) {
$shoppingKey = $this->getSession('shoppingKey');
$shoppingKey = Helpers::getShoppingKeyByCookie();
$uid = $this->getUid(true);
$sku= $this->post('sku', 0);
... ... @@ -251,7 +253,7 @@ class IndexController extends AbstractAction
$result = array();
if ($this->isAjax()) {
$shoppingKey = $this->getSession('shoppingKey');
$shoppingKey = Helpers::getShoppingKeyByCookie();
$uid = $this->getUid(true);
$params = array();
... ... @@ -356,7 +358,7 @@ class IndexController extends AbstractAction
}
if (empty($result)) {
echo ' ';
echo '[]';
} else {
$this->echoJson($result);
}
... ...
... ... @@ -17,26 +17,25 @@ class BindController extends AbstractAction
public function indexAction()
{
$refer = $this->get('refer');
if (!empty($refer))
{
if (!empty($refer)) {
$this->setCookie('refer', $refer);
}
$this->setTitle('绑定手机号');
$openId = $this->get('openId');
$sourceType = $this->get('sourceType');
$nickname = $this->get('nickname');
$data = array(
'bindIndex'=>true,//js标识
'backUrl' => '/', // 返回的URL链接
'bindIndex' => true, //js标识
'backUrl' => Helpers::url('/signin.html'), // 返回的URL链接
'showHeaderImg' => true, // 控制显示头部图片
'isPassportPage' => true, // 模板中模块标识
'sourceType' => $sourceType, // 第三方登录来源
'platform'=>$sourceType,
'platform' => $sourceType,
'openId' => $openId, // openId
'areaCode'=>'+86',//默认区号
'countrys'=>RegData::getAreasData(),//国别码
'areaCode' => '+86', //默认区号
'countrys' => RegData::getAreasData(), //国别码
'nickname' => $nickname, //昵称
);
... ... @@ -49,26 +48,25 @@ class BindController extends AbstractAction
*/
public function codeAction()
{
$this->setTitle('验证手机');
$openId = $this->get('openId');
$sourceType = $this->get('sourceType');
$nickname = $this->get('nickname');
$areaCode = $this->get('areaCode', '86');
$isReg = $this->get('isReg');
$phoneNum=$this->get('phoneNum');
$phoneNum = $this->get('phoneNum');
$data = array(
'bindCode'=>true,//js标识
'backUrl' => '/', // 返回的URL链接
'bindCode' => true, //js标识
'backUrl' => Helpers::url('/signin.html'), // 返回的URL链接
'showHeaderImg' => true, // 控制显示头部图片
'isPassportPage' => true, // 模板中模块标识
'sourceType' => $sourceType, // 第三方登录来源
'openId' => $openId, // openId
'nickname' => $nickname, //昵称
'isReg' => $isReg, //是否是已注册过的手机号
'areaCode' => $areaCode, //国别码
'phoneNum'=>$phoneNum,//手机号码
'areaCode' => $areaCode, //国别码
'phoneNum' => $phoneNum, //手机号码
);
// 渲染模板
... ... @@ -80,22 +78,21 @@ class BindController extends AbstractAction
*/
public function passwordAction()
{
$this->setTitle('重新设置登录密码');
$openId = $this->get('openId');
$sourceType = $this->get('sourceType');
$nickname = $this->get('nickname');
$areaCode = $this->get('areaCode', '86');
$phoneNum=$this->get('phoneNum');
$phoneNum = $this->get('phoneNum');
$data = array(
'bindPwd'=>true,//js标识
'backUrl' => '/', // 返回的URL链接
'bindPwd' => true, //js标识
'backUrl' => Helpers::url('/signin.html'), // 返回的URL链接
'showHeaderImg' => true, // 控制显示头部图片
'isPassportPage' => true, // 模板中模块标识
'sourceType' => $sourceType, // 第三方登录来源
'openId' => $openId, // openId
'nickname' => $nickname, //昵称
'areaCode' => $areaCode, //国别码
'areaCode' => $areaCode, //国别码
'phoneNum' => $phoneNum //国别码
);
... ... @@ -108,11 +105,9 @@ class BindController extends AbstractAction
{
$data = array('code' => 400, 'message' => '', 'data' => '');
do
{
do {
/* 判断是不是AJAX请求 */
if (!$this->isAjax())
{
if (!$this->isAjax()) {
break;
}
... ... @@ -123,27 +118,21 @@ class BindController extends AbstractAction
$nickname = $this->post('nickname');
if (!is_numeric($phoneNum) || !$openId || !$areaCode || !$sourceType)
{
if (!is_numeric($phoneNum) || !$openId || !$areaCode || !$sourceType) {
break;
}
$res = BindData::bindCheck($phoneNum, $openId, $sourceType);
if (!isset($res['code']))
{
if (!isset($res['code'])) {
break;
}
if ($res['code'] == 200)
{
if ($res['code'] == 200) {
$next = Helpers::url('/passport/bind/code', array('isReg' => $res['data']['is_register'], 'openId' => $openId, 'sourceType' => $sourceType, 'nickname' => $nickname, 'areaCode' => $areaCode, 'phoneNum' => $phoneNum));
$data = array('code' => $res['code'], 'message' => $res['message'], 'data' => array('isReg' => $res['data']['is_register'], 'next' => $next));
} else {
$data = array('code' => $res['code'], 'message' => $res['message'], 'data' => isset($res['data']) ? $res['data'] : '');
}
else
{
$data = array('code' => $res['code'], 'message' => $res['message'], 'data' => isset($res['data'])?$res['data']:'');
}
}
while (false);
} while (false);
$this->echoJson($data);
}
... ... @@ -153,29 +142,24 @@ class BindController extends AbstractAction
{
$data = array('code' => 400, 'message' => '', 'data' => '');
do
{
do {
/* 判断是不是AJAX请求 */
if (!$this->isAjax())
{
if (!$this->isAjax()) {
break;
}
$phoneNum = $this->post('phoneNum');
$areaCode = $this->post('areaCode');
if (!is_numeric($phoneNum))
{
if (!is_numeric($phoneNum)) {
break;
}
$data = BindData::sendBindMsg($areaCode,$phoneNum);
if (!isset($data['code']))
{
$data = BindData::sendBindMsg($areaCode, $phoneNum);
if (!isset($data['code'])) {
break;
}
}
while (false);
} while (false);
$this->echoJson($data);
}
... ... @@ -185,11 +169,9 @@ class BindController extends AbstractAction
{
$data = array('code' => 400, 'message' => '', 'data' => '');
do
{
do {
/* 判断是不是AJAX请求 */
if (!$this->isAjax())
{
if (!$this->isAjax()) {
break;
}
... ... @@ -197,18 +179,15 @@ class BindController extends AbstractAction
$code = $this->post('code');
$areaCode = $this->post('areaCode');
if (!is_numeric($phoneNum) || !$code)
{
if (!is_numeric($phoneNum) || !$code) {
break;
}
$data = BindData::checkBindCode($areaCode,$phoneNum, $code);
if (!isset($data['code']))
{
$data = BindData::checkBindCode($areaCode, $phoneNum, $code);
if (!isset($data['code'])) {
break;
}
}
while (false);
} while (false);
$this->echoJson($data);
}
... ... @@ -218,11 +197,9 @@ class BindController extends AbstractAction
{
$data = array('code' => 400, 'message' => '', 'data' => '');
do
{
do {
/* 判断是不是AJAX请求 */
if (!$this->isAjax())
{
if (!$this->isAjax()) {
break;
}
... ... @@ -233,42 +210,33 @@ class BindController extends AbstractAction
$nickname = $this->post('nickname');
$password = $this->post('password');
if (!is_numeric($phoneNum) || !$openId || !$sourceType || !$areaCode)
{
if (!is_numeric($phoneNum) || !$openId || !$sourceType || !$areaCode) {
break;
}
$res = BindData::bindMobile($openId, $nickname, $sourceType, $phoneNum, $areaCode, $password);
if (!isset($res['code']))
{
if (!isset($res['code'])) {
break;
}
//绑定成功,跳转页面
$refer = $this->getCookie('refer');
if (empty($refer))
{
if (empty($refer)) {
$refer = SITE_MAIN . '/?go=1';
}
else
{
} else {
$refer = rawurldecode($refer);
}
if (isset($res['code']) && $res['code'] == 200 && !empty($res['data']['uid']))
{
if (isset($res['code']) && $res['code'] == 200 && !empty($res['data']['uid'])) {
$token = Helpers::makeToken($res['data']['uid']);
$this->setCookie('_TOKEN', $token);
$this->setSession('_TOKEN', $token);
$refer = Helpers::syncUserSession($res['data']['uid'], $refer);
$data = array('code' => $res['code'], 'message' => $res['message'], 'data' => array('refer' => $refer));
}
else
{
} else {
$data = array('code' => $res['code'], 'message' => $res['message'], 'data' => array('refer' => $refer));
}
}
while (false);
} while (false);
$this->echoJson($data);
}
... ...
... ... @@ -79,7 +79,7 @@ class LoginController extends AbstractAction
$refer = $this->server('HTTP_REFERER', SITE_MAIN);
$token = $this->get('token');
if (!empty($token)) {
$this->go( Helpers::logoutSession($token, $refer) );
$this->go(Helpers::logoutSession($token, $refer));
}
$this->go($refer);
... ... @@ -119,7 +119,7 @@ class LoginController extends AbstractAction
}
/* 调用登录接口进行登录 */
$data = LoginData::signin($area, $profile, $password);
$data = LoginData::signin($area, $profile, $password);
if (!isset($data['code']) || $data['code'] != 200 || !isset($data['data']['uid'])) {
break;
}
... ... @@ -182,12 +182,10 @@ class LoginController extends AbstractAction
if (isset($realName, $email, $userId)) {
$result = LoginData::signinByOpenID($realName, $userId, 'alipay');
}
//判定是否需要绑定手机号
$isBind = $result['data']['is_bind'];
if ($isBind == 'N')
{
$this->go(Helpers::url('/passport/bind/index',array('openId'=>$userId,'sourceType'=>'alipay','nickname'=>$realName)));
if (isset($result['data']['is_bind']) && $result['data']['is_bind'] == 'N') {
$this->go(Helpers::url('/passport/bind/index', array('openId' => $userId, 'sourceType' => 'alipay', 'nickname' => $realName)));
}
$refer = $this->getCookie('refer');
... ... @@ -217,37 +215,29 @@ class LoginController extends AbstractAction
/* 获取QQ腾讯用户的详细信息 */
$partnerInfo = $qqconnect->getUserInfo($access);
$result = array();
if (!empty($partnerInfo) && isset($partnerInfo['nickname']))
{
if (!empty($partnerInfo) && isset($partnerInfo['nickname'])) {
$result = LoginData::signinByOpenID($partnerInfo['nickname'], $access['openid'], 'qq');
}
//判定是否需要绑定手机号
$isBind = $result['data']['is_bind'];
if ($isBind == 'N')
{
$this->go(Helpers::url('/passport/bind/index',array('openId'=>$access['openid'],'sourceType'=>'qq','nickname'=>$partnerInfo['nickname'])));
if ($isBind == 'N') {
$this->go(Helpers::url('/passport/bind/index', array('openId' => $access['openid'], 'sourceType' => 'qq', 'nickname' => $partnerInfo['nickname'])));
}
$refer = $this->getCookie('refer');
if (empty($refer))
{
if (empty($refer)) {
$refer = SITE_MAIN . '/?go=1';
}
else
{
} else {
$refer = rawurldecode($refer);
}
if (isset($result['code']) && $result['code'] == 200 && !empty($result['data']['uid']))
{
if (isset($result['code']) && $result['code'] == 200 && !empty($result['data']['uid'])) {
$token = Helpers::makeToken($result['data']['uid']);
$this->setCookie('_TOKEN', $token);
$this->setSession('_TOKEN', $token);
$this->go(Helpers::syncUserSession($result['data']['uid'], $refer));
}
else
{
} else {
$this->go($refer);
}
}
... ... @@ -258,9 +248,9 @@ class LoginController extends AbstractAction
public function sinacallbackAction()
{
$sina = Factory::create('sinaweibo');
$access = $sina->getAccessToken();
$access = $sina->getAccessToken();
/* 获取用户的详细信息 */
$partnerInfo = $sina->getUserInfo($access);
$partnerInfo = $sina->getUserInfo($access);
$result = array();
if ($partnerInfo && is_array($partnerInfo)) {
... ... @@ -268,11 +258,10 @@ class LoginController extends AbstractAction
}
//判定是否需要绑定手机号
$isBind = $result['data']['is_bind'];
if ($isBind == 'N')
{
$this->go(Helpers::url('/passport/bind/index',array('openId'=>$access['uid'],'sourceType'=>'sina','nickname'=>$partnerInfo['screen_name'])));
if ($isBind == 'N') {
$this->go(Helpers::url('/passport/bind/index', array('openId' => $access['uid'], 'sourceType' => 'sina', 'nickname' => $partnerInfo['screen_name'])));
}
$refer = $this->getCookie('refer');
if (empty($refer)) {
$refer = SITE_MAIN . '/?go=1';
... ... @@ -289,5 +278,5 @@ class LoginController extends AbstractAction
$this->go($refer);
}
}
}
... ...