提交 7afdcb61 编写于 作者: G gongfuxiang

商品详情及用户优化

上级 ad7c3aab
......@@ -77,10 +77,11 @@ class Buy extends Common
// 数据返回组装
$result = [
'goods_list' => $buy_goods,
'payment_list' => $payment_list,
'base' => $buy_base,
'common_site_type' => (int) $buy_base['common_site_type'],
'goods_list' => $buy_goods,
'payment_list' => $payment_list,
'base' => $buy_base,
'common_site_type' => (int) $buy_base['common_site_type'],
'default_payment_id' => $params['payment_id'],
];
$ret = SystemBaseService::DataReturn($result);
}
......
......@@ -304,7 +304,7 @@
<!--各种规格-->
{{if $goods['is_shelves'] == 1 and $goods['inventory'] gt 0}}
<dl class="iteminfo_parameter sys_item_specpara">
<dl class="buy-spec-info-container">
<dt class="buy-event mini-spec-event" data-type="buy">
<div class="cart-title">
<span class="specpara-title">{{:MyLang('goods.panel_can_choice_spec_name')}}</span>
......@@ -535,9 +535,7 @@
<!-- 加入购物车表单 -->
<form action="{{:MyUrl('index/cart/save')}}" method="post" class="cart-form am-hide" request-type="ajax-fun" request-value="CartSubmitBack">
<input type="hidden" name="goods_id" value="{{$goods.id}}" />
<input type="hidden" name="stock" value="1" />
<input type="hidden" name="spec" value="" />
<input type="hidden" name="goods_data" value="" />
<button type="submit"></button>
</form>
{{else /}}
......
......@@ -200,6 +200,60 @@ class GoodsCartService
* @param [array] $params [输入参数]
*/
public static function GoodsCartSave($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'user',
'error_msg' => MyLang('user_info_incorrect_tips'),
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 是否批量
$ret = DataReturn(MyLang('operate_fail'), -1);
if(!empty($params['goods_data']))
{
// 是否数组
if(!is_array($params['goods_data']))
{
$params['goods_data'] = json_decode(base64_decode(urldecode($params['goods_data'])), true);
}
if(empty($params['goods_data']))
{
return DataReturn(MyLang('params_error_tips'), -1);
}
// 循环处理
foreach($params['goods_data'] as $k=>$v)
{
$ret = self::GoodsCartSaveHandle(array_merge($v, ['user'=>$params['user']]));
if($ret['code'] != 0)
{
$ret['msg'] = ($k+1).'、'.$ret['msg'];
return $ret;
}
}
} else {
$ret = self::GoodsCartSaveHandle($params);
}
return $ret;
}
/**
* 购物车添加/更新处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-08-29
* @desc description
* @param [array] $params [输入参数]
*/
public static function GoodsCartSaveHandle($params = [])
{
// 请求参数
$p = [
......@@ -342,7 +396,7 @@ class GoodsCartService
}
/**
* 购物车数量保存
* 购物车数量更新
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
......
......@@ -2409,28 +2409,69 @@ class GoodsService
*/
public static function GoodsStock($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => MyLang('goods_id_error_tips'),
],
[
'checked_type' => 'min',
'key_name' => 'stock',
'checked_data' => 1,
'error_msg' => MyLang('common_service.goods.base_buy_stock_error_tips'),
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
// 是否批量
if(!empty($params['goods_data']))
{
return DataReturn($ret, -1);
}
// 是否数组
if(!is_array($params['goods_data']))
{
$params['goods_data'] = json_decode(htmlspecialchars_decode($params['goods_data']), true);
}
if(empty($params['goods_data']))
{
return DataReturn(MyLang('params_error_tips'), -1);
}
// 循环处理
$result = [];
foreach($params['goods_data'] as $v)
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => MyLang('goods_id_error_tips'),
],
[
'checked_type' => 'isset',
'key_name' => 'stock',
'error_msg' => MyLang('common_service.goods.base_buy_stock_error_tips'),
],
];
$ret = ParamsChecked($v, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 获取商品基础信息
return self::GoodsSpecDetail($params);
// 获取商品基础信息
$result[] = self::GoodsSpecDetail($v);
}
return DataReturn(MyLang('operate_success'), 0, $result);
} else {
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => MyLang('goods_id_error_tips'),
],
[
'checked_type' => 'isset',
'key_name' => 'stock',
'error_msg' => MyLang('common_service.goods.base_buy_stock_error_tips'),
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 获取商品基础信息
return self::GoodsSpecDetail($params);
}
}
/**
......
......@@ -796,35 +796,39 @@ class UserService
* @version 0.0.1
* @datetime 2017-03-09T11:37:43+0800
* @param [int] $user_id [用户id]
* @param [array] $user [用户信息]
* @return [boolean] [记录成功true, 失败false]
*/
public static function UserLoginRecord($user_id = 0)
public static function UserLoginRecord($user_id = 0, $user = [])
{
if(!empty($user_id))
if(!empty($user_id) && empty($user))
{
$user = self::UserInfo('id', $user_id);
if(!empty($user))
$user = self::UserHandle(self::UserInfo('id', $user_id));
}
if(!empty($user))
{
// 用户id处理
if(empty($user_id))
{
// 用户数据处理
$user = self::UserHandle($user);
$user_id = $user['id'];
}
// 用户登录成功信息纪录钩子
$hook_name = 'plugins_service_user_login_success_record';
MyEventTrigger($hook_name, [
'hook_name' => $hook_name,
'is_backend' => true,
'user' => &$user,
'user_id' => $user_id
]);
// 用户登录成功信息纪录钩子
$hook_name = 'plugins_service_user_login_success_record';
MyEventTrigger($hook_name, [
'hook_name' => $hook_name,
'is_backend' => true,
'user' => &$user,
'user_id' => $user_id
]);
// web端设置session
if(APPLICATION == 'web')
{
// 存储session
MyCookie(self::$user_login_key, $user);
}
return true;
// web端设置session
if(APPLICATION == 'web')
{
// 存储session
MyCookie(self::$user_login_key, $user);
}
return true;
}
return false;
}
......@@ -1292,7 +1296,7 @@ class UserService
$body_html = [];
// 用户登录后钩子
$user = self::UserInfo('id', $user_id, 'id,number_code,system_type,username,nickname,mobile,email,gender,avatar,province,city,county,birthday');
$user = self::UserHandle(self::UserInfo('id', $user_id));
// 会员码生成处理
if(empty($user['number_code']))
......@@ -1318,10 +1322,10 @@ class UserService
// 成功返回
if(APPLICATION == 'app')
{
$result = self::AppUserInfoHandle($user_id);
$result = self::AppUserInfoHandle(0, null, null, $user);
} else {
// 登录记录
if(!self::UserLoginRecord($user_id))
if(!self::UserLoginRecord(0, $user))
{
return DataReturn(MyLang('login_failure_tips'), -100);
}
......@@ -2142,7 +2146,7 @@ class UserService
$user = self::UserHandle(self::UserInfo('id', $params['user']['id']));
// 重新更新用户缓存
self::UserLoginRecord($user['id']);
self::UserLoginRecord(0, $user);
if(!empty($user['token']))
{
MyCache(SystemService::CacheKey('shopxo.cache_user_info').$user['token'], $user);
......@@ -2424,17 +2428,14 @@ class UserService
// 获取用户信息
if(!empty($user_id))
{
$user = self::UserInfo('id', $user_id);
$user = self::UserHandle(self::UserInfo('id', $user_id));
} elseif(!empty($where_field) && !empty($where_value) && empty($user))
{
$user = self::UserInfo($where_field, $where_value);
$user = self::UserHandle(self::UserInfo($where_field, $where_value));
}
if(!empty($user))
{
// 用户信息处理
$user = self::UserHandle($user);
// 是否强制绑定手机号码
$user['is_mandatory_bind_mobile'] = intval(MyC('common_user_is_mandatory_bind_mobile'));
......@@ -2447,11 +2448,8 @@ class UserService
$user['number_code'] = self::UserNumberCodeCreatedHandle($user['id']);
}
// 非token数据库校验,则重新生成token更新到数据库
if($where_field != 'token')
{
$user = self::UserTokenUpdate($user['id'], $user);
}
// 重新生成token更新到数据库并缓存
$user = self::UserTokenUpdate($user['id'], $user);
}
// 用户信息钩子
......@@ -2481,21 +2479,21 @@ class UserService
public static function UserTokenUpdate($user_id, $user = [])
{
// 未指定用户则读取用户信息、并处理数据
if(empty($user))
if(empty($user) && !empty($user_id))
{
$user = self::UserHandle(self::UserInfo('id', $user_id));
}
if(!empty($user))
{
// token生成并存储缓存
$user['token'] = ApiService::CreatedUserToken($user_id);
if(self::UserPlatformUpdate('user_id', $user_id, ['token'=>$user['token']]))
$user['token'] = ApiService::CreatedUserToken($user['id']);
if(self::UserPlatformUpdate('user_id', $user['id'], ['token'=>$user['token'], 'upd_time'=>time()]) !== false)
{
MyCache(SystemService::CacheKey('shopxo.cache_user_info').$user['token'], $user);
}
// web端用户登录纪录处理
self::UserLoginRecord($user_id);
self::UserLoginRecord($user_id, $user);
}
return $user;
}
......
......@@ -454,7 +454,6 @@ ul.am-dropdown-content > .am-active > a:focus,
.am-nav > li.am-active > a:hover,
.am-nav > li.am-active > a:focus {
color: #d2354c !important;
background-color: transparent;
}
.am-article-title.blog-title{
......
......@@ -34,7 +34,7 @@ input{font-size:12px;font-size:100%;outline:none;line-height:normal;color:#444;}
.stock-tips{ font-size:12px; }
/*可选规格*/
.iteminfo_parameter { margin-bottom: 10px; }
.buy-spec-info-container { margin-bottom: 10px; }
.theme-signin-left{max-height:250px ;overflow-y: scroll;background: #fff;}
.theme-options{display: block;overflow: hidden;padding-left: 10px;padding-right:10px; margin-bottom: 5px;color: #666;}
.theme-signin-left .sku-line{float: left; margin:10px;margin-left:0;border-radius: 2px; background:#efefef ;padding:3px 8px; border: 1px solid #d5d5d5;}
......@@ -43,7 +43,7 @@ input{font-size:12px;font-size:100%;outline:none;line-height:normal;color:#444;}
.sku-line-images img { width: 30px; height: 30px; vertical-align: middle;border-radius: 2px; }
.theme-signin .btn{width:100%;font-size: 16px;padding:5px ;}
.btn-op{position:fixed;left:0;bottom: 0;width:100%; z-index: 3;}
.iteminfo_parameter dt.buy-event {text-align: left;width:100% ;}
.buy-spec-info-container dt.buy-event {text-align: left;width:100% ;}
.theme-options dd{margin:10px 0px ;}
.introduce-main .am-sticky-placeholder { margin: 0px !important; }
......@@ -163,7 +163,7 @@ input{font-size:12px;font-size:100%;outline:none;line-height:normal;color:#444;}
.iteminfo_mktprice em, .goods-price { color:#c00;}
.tb-detail-price dd {display: inline-block;}
.goods-favor-count { color: #999; }
.iteminfo_parameter a:hover{text-decoration: none;color:initial ;}
.buy-spec-info-container a:hover{text-decoration: none;color:initial ;}
.tm-indcon .tm-label, .tb-detail-price dt, .specpara-title { white-space:nowrap; color:#666; font-weight: 400; }
.tb-detail-price{ background: #fcf1e3 url(../images/goods-meta-bg.png); background-size: cover; -moz-background-size: cover; background-repeat: no-repeat; height:auto;padding:10px; }
.tb-detail-price .items {display: block; margin: 5px 0;}
......@@ -172,7 +172,7 @@ input{font-size:12px;font-size:100%;outline:none;line-height:normal;color:#444;}
/* 二维码 */
.goods-qrcode{position: absolute; bottom: 5px; right: 10px; cursor: pointer; color: #666; width: 150px; text-align: right;}
.goods-qrcode .qrcode-images{display: none; position: absolute; z-index: 2; top: 30px; right: 0;}
.goods-qrcode .qrcode-images{display: none; position: absolute; z-index: 105; top: 30px; right: 0;}
.goods-qrcode:hover .qrcode-images{display: block;}
/* 视频 */
......@@ -194,7 +194,7 @@ input{font-size:12px;font-size:100%;outline:none;line-height:normal;color:#444;}
.scoll .goods-video-submit-start { left: 0; bottom: 30px; padding: 10px 10px 5px 10px; }
/*销量*/
.tm-ind-panel, .iteminfo_parameter, .parameters-base { border-bottom: 1px dotted #dadada; }
.tm-ind-panel, .buy-spec-info-container, .parameters-base { border-bottom: 1px dotted #dadada; }
.tm-ind-panel {padding: 10px 5px;position: relative;overflow: hidden;clear: both;display: flex;}
.tm-ind-item {float: left;width: 33%;text-align: center;position: relative;left: -1px;border-left: 1px solid #E5DFDA;
flex: 1 1 0%;line-height: 16px;cursor: pointer;}
......@@ -212,8 +212,8 @@ flex: 1 1 0%;line-height: 16px;cursor: pointer;}
.buy-event .cart-title .am-icon-angle-right{float: right;}
/*数量*/
.iteminfo_parameter.munber,.iteminfo_parameter.freight{display:none ;}
.iteminfo_parameter.munber dd{margin-left:5px ;}
.buy-spec-info-container.munber,.buy-spec-info-container.freight{display:none ;}
.buy-spec-info-container.munber dd{margin-left:5px ;}
#min, #add{ width: 35px; height: 25px; outline:none; line-height: 23px; padding: 0; cursor: pointer; }
#text_box { width: 60px; height: 25px; text-align: center; font-size: 12px !important; }
.theme-popover .am-input-group { display: inline-flex; }
......@@ -409,8 +409,8 @@ flex: 1 1 0%;line-height: 16px;cursor: pointer;}
.scoll{float: left;width: calc(45% - 20px);}
.scoll .slider-content { border: 1px solid #eee; }
.clearfix-right{float:right;width:55%;min-height: 270px;}
.iteminfo_parameter.freight{display: block;margin-top: 10px;margin-bottom:10px ;}
.iteminfo_parameter.freight dt{margin-left:-70px ;float: left;margin-right:10px ;padding-top:5px ;padding-bottom:20px ;}
.buy-spec-info-container.freight{display: block;margin-top: 10px;margin-bottom:10px ;}
.buy-spec-info-container.freight dt{margin-left:-70px ;float: left;margin-right:10px ;padding-top:5px ;padding-bottom:20px ;}
.buy-nav{position: static; margin-top: 20px; overflow: hidden; }
ul.am-avg-sm-4.am-tabs-nav.am-nav.am-nav-tabs {width: auto;}
......@@ -427,7 +427,7 @@ flex: 1 1 0%;line-height: 16px;cursor: pointer;}
/*基础*/
.tb-detail-price .items dt { min-width: 85px; }
.iteminfo_parameter {padding-left: 50px;}
.buy-spec-info-container {padding-left: 50px;}
.tb-detail-hd,.tb-detail-price{text-align: left;}
.tb-detail-hd h1 {font-size: 16px;}
......@@ -466,7 +466,7 @@ flex: 1 1 0%;line-height: 16px;cursor: pointer;}
/*规格*/
.theme-popover {display: block;position: static;border:none ;box-shadow: none;width: 100%;}
.theme-poptit,.theme-signin-right,.iteminfo_parameter dt.buy-event,.btn-op{display: none;}
.theme-poptit,.theme-signin-right,.buy-spec-info-container dt.buy-event,.btn-op{display: none;}
.theme-options{overflow: visible;padding:0px 0px; margin-bottom: 5px;}
.theme-options ul{overflow: hidden;float: none;}
......@@ -474,12 +474,9 @@ flex: 1 1 0%;line-height: 16px;cursor: pointer;}
.theme-signin-left .cart-title{margin-left: -46px;float: left;}
.scoll{display: none;}
.item-inform{max-width:1000px; background:#fff; margin-bottom: 30px; }
.clearfix-left{display:block;float: left;width:350px;}
.clearfix-right{width:calc(100% - 370px);margin-left:10px;}
.freight{width:400px;float: left;}
.iteminfo_parameter.freight dt{padding-top:6px ;padding-bottom:0px ;}
.iteminfo_parameter { border-bottom: 0; }
.clearfix-right{width:calc(100% - 370px);margin-left:10px;}}
.buy-spec-info-container { border-bottom: 0; }
/*左侧商品-看了又看*/
.introduce-main{width:80%;float:left;background:#fff ;}
......
......@@ -175,15 +175,15 @@ function BuyCartHandle(e)
}
// 操作类型
var goods_data = encodeURIComponent(CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify([{
goods_id: params.id,
stock: params.stock,
spec: params.spec
}]))));
switch(params.type)
{
// 立即购买
case 'buy' :
var goods_data = encodeURIComponent(CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify([{
goods_id: params.id,
stock: params.stock,
spec: params.spec
}]))));
var $form = $('form.buy-form');
$form.find('input[name="goods_data"]').val(goods_data);
$form.find('button[type="submit"]').trigger('click');
......@@ -192,8 +192,7 @@ function BuyCartHandle(e)
// 加入购物车
case 'cart' :
var $form = $('form.cart-form');
$form.find('input[name="spec"]').val(JSON.stringify(params.spec));
$form.find('input[name="stock"]').val(params.stock);
$form.find('input[name="goods_data"]').val(goods_data);
$form.find('button[type="submit"]').trigger('click');
PoptitClose();
break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册