下订单页面逻辑优化

feat/task1-c-wallet
devil_gong 2019-03-20 17:14:44 +08:00
parent 4905972568
commit 1e51ee8ed3
12 changed files with 177 additions and 116 deletions

View File

@ -57,34 +57,18 @@ class Buy extends Common
// 商品校验
if(isset($ret['code']) && $ret['code'] == 0)
{
// 用户默认地址
$address = UserService::UserDefaultAddress(['user'=>$this->user]);
// 商品/基础信息
$base = [
'total_price' => empty($ret['data']) ? 0 : array_sum(array_column($ret['data'], 'total_price')),
'total_stock' => empty($ret['data']) ? 0 : array_sum(array_column($ret['data'], 'stock')),
'address' => empty($address['data']) ? null : $address['data'],
];
// 支付方式
$payment_list = PaymentService::BuyPaymentList(['is_enable'=>1, 'is_open_user'=>1]);
// 扩展展示数据
$extension_list = [
// ['name'=>'感恩节9折', 'tips'=>'-¥23元'],
// ['name'=>'运费', 'tips'=>'+¥10元'],
];
// 数据返回组装
$result = [
'goods_list' => $ret['data'],
'goods_list' => $ret['data']['goods'],
'payment_list' => $payment_list,
'base' => $base,
'extension_list' => $extension_list,
'base' => $ret['data']['base'],
'extension_data' => $ret['data']['extension_data'],
'common_order_is_booking' => (int) MyC('common_order_is_booking', 0),
];
return DataReturn('success', 0, $result);
return DataReturn('操作成功', 0, $result);
}
return $ret;
}

View File

@ -55,7 +55,7 @@ class Buy extends Common
return redirect(MyUrl('index/buy/index'));
} else {
// 获取商品列表
$params = session('buy_post_data');
$params = array_merge(input(), session('buy_post_data'));
$params['user'] = $this->user;
$ret = BuyService::BuyTypeGoodsList($params);
@ -68,15 +68,9 @@ class Buy extends Common
// 支付方式
$this->assign('payment_list', PaymentService::BuyPaymentList(['is_enable'=>1, 'is_open_user'=>1]));
// 商品/基础信息
$base = [
'total_price' => empty($ret['data']) ? 0 : array_sum(array_column($ret['data'], 'total_price')),
'total_stock' => empty($ret['data']) ? 0 : array_sum(array_column($ret['data'], 'stock')),
'address' => UserService::UserDefaultAddress(['user'=>$this->user])['data'],
];
$this->assign('base', $base);
$this->assign('goods_list', $ret['data']);
$this->assign('base', $ret['data']['base']);
$this->assign('goods_list', $ret['data']['goods']);
$this->assign('extension_data', $ret['data']['extension_data']);
$this->assign('params', $params);
return $this->fetch();
} else {

View File

@ -26,7 +26,7 @@
{{if !empty($user_address_list)}}
<ul class="address-list">
{{foreach $user_address_list as $address}}
<li class="{{if isset($address['is_default']) and $address['is_default'] eq 1}}address-default{{/if}}" id="data-list-{{$address.id}}" data-value="{{$address.id}}">
<li class="{{if (isset($params['address_id']) and $params['address_id'] eq $address['id']) or (!isset($params['address_id']) and $params['address_id'] neq $address['id'] and isset($address['is_default']) and $address['is_default'] eq 1)}}address-default{{/if}}" id="data-list-{{$address.id}}" data-value="{{$address.id}}">
<div class="address-left">
<div class="user-base">
{{if !empty($address.alias)}}

View File

@ -509,6 +509,61 @@ class BuyService
} else {
$ret = DataReturn('参数有误', -1);
}
// 数据组装
if($ret['code'] == 0)
{
// 商品数据
$goods = $ret['data'];
// 用户默认地址
$address_params = [
'user' => $params['user'],
];
if(!empty($params['address_id']))
{
$address_params['where'] = ['id' => $params['address_id']];
}
$address = UserService::UserDefaultAddress($address_params);
// 商品/基础信息
$total_price = empty($goods) ? 0 : array_sum(array_column($goods, 'total_price'));
$base = [
'total_price' => $total_price,
'actual_price' => $total_price,
'total_stock' => empty($goods) ? 0 : array_sum(array_column($goods, 'stock')),
'address' => empty($address['data']) ? null : $address['data'],
];
// 扩展展示数据
// name 名称
// price 金额
// type 类型0减少, 1增加
// tips 提示信息
$extension_data = [
[
'name' => '感恩节9折',
'price' => 23,
'type' => 0,
'tips' => '-¥23元'
],
[
'name' => '运费',
'price' => 10,
'type' => 1,
'tips' => '+¥10元'
],
];
// 返回数据
$result = [
'goods' => $goods,
'base' => $base,
'extension_data' => $extension_data,
];
return DataReturn('操作成功', 0, $result);
}
return $ret;
}
@ -638,7 +693,7 @@ class BuyService
{
return $goods;
}
$check = self::BuyGoodsCheck(['goods'=>$goods['data']]);
$check = self::BuyGoodsCheck(['goods'=>$goods['data']['goods']]);
if(!isset($check['code']) || $check['code'] != 0)
{
return $check;
@ -689,7 +744,7 @@ class BuyService
$order_id = Db::name('Order')->insertGetId($order);
if($order_id > 0)
{
foreach($goods['data'] as $v)
foreach($goods['data']['goods'] as $v)
{
$detail = [
'order_id' => $order_id,

View File

@ -466,7 +466,7 @@ class UserService
}
// 获取用户地址
$params['where'] = ['is_default'=>1];
$params['where'] = empty($params['where']) ? ['is_default'=>1] : $params['where'];
$ret = self::UserAddressList($params);
if(!empty($ret['data'][0]))
{

View File

@ -46,8 +46,8 @@
<textarea onInput="bind_user_note_event" maxlength="60" auto-height placeholder="留言" class="spacing-mb" />
<!-- 扩展数据展示 -->
<view a:if="{{extension_list.length > 0}}" class="extension-list spacing-mb">
<view a:for="{{extension_list}}" class="item oh">
<view a:if="{{extension_data.length > 0}}" class="extension-list spacing-mb">
<view a:for="{{extension_data}}" class="item oh">
<text class="cr-666">{{item.name}}
</text>
<text class="text-tips fr">{{item.tips}}

View File

@ -12,7 +12,7 @@ Page({
total_price: 0,
user_note_value: '',
is_first: 1,
extension_list: [],
extension_data: [],
payment_id: 0,
common_order_is_booking: 0,
},
@ -87,7 +87,7 @@ Page({
this.setData({
goods_list: data.goods_list,
total_price: data.base.total_price,
extension_list: data.extension_list || [],
extension_data: data.extension_data || [],
data_list_loding_status: 3,
common_order_is_booking: data.common_order_is_booking || 0,
});

View File

@ -12,7 +12,7 @@ Page({
total_price: 0,
user_note_value: '',
is_first: 1,
extension_list: [],
extension_data: [],
payment_id: 0,
common_order_is_booking: 0,
},
@ -85,7 +85,7 @@ Page({
this.setData({
goods_list: data.goods_list,
total_price: data.base.total_price,
extension_list: data.extension_list || [],
extension_data: data.extension_data || [],
data_list_loding_status: 3,
common_order_is_booking: data.common_order_is_booking || 0,
});

View File

@ -45,8 +45,8 @@
<textarea bindinput="bind_user_note_event" maxlength="60" auto-height placeholder="留言" class="content-textarea bg-white spacing-mb" />
<!-- 扩展数据展示 -->
<view wx:if="{{extension_list.length > 0}}" class="extension-list spacing-mb">
<view wx:for="{{extension_list}}" wx:key="key" class="item oh">
<view wx:if="{{extension_data.length > 0}}" class="extension-list spacing-mb">
<view wx:for="{{extension_data}}" wx:key="key" class="item oh">
<text class="cr-666">{{item.name}}
</text>
<text class="text-tips fr">{{item.tips}}

View File

@ -1,4 +1,4 @@
{
"defaultTitle": "加载中...",
"navigationBarTitleText": "加载中...",
"enablePullDownRefresh": false
}

View File

@ -1055,6 +1055,81 @@ function FullscreenEscEvent()
}
}
/**
* url参数替换参数不存在则添加
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-03-20
* @desc description
* @param {[string]} field [字段名称]
* @param {[string]} value [字段值]
* @param {[string]} url [自定义url]
*/
function UrlFieldReplace(field, value, url)
{
// 当前页面url地址
url = url || window.location.href;
// 锚点
var anchor = '';
if(url.indexOf('#') >= 0)
{
anchor = url.substr(url.indexOf('#'));
url = url.substr(0, url.indexOf('#'));
}
if(url.indexOf('?') >= 0)
{
var str = url.substr(0, url.lastIndexOf('.'));
var ext = url.substr(url.lastIndexOf('.'));
if(str.indexOf(field) >= 0)
{
var first = str.substr(0, str.lastIndexOf(field));
var last = str.substr(str.lastIndexOf(field));
last = last.replace(new RegExp(field+'/', 'g'), '');
last = (last.indexOf('/') >= 0) ? last.substr(last.indexOf('/')) : '';
url = first+field+'/'+value+last+ext;
} else {
if(ext.indexOf('?') >= 0)
{
var p = '';
exts = ext.substr(ext.indexOf('?')+1);
if(ext.indexOf(field) >= 0)
{
var params_all = exts.split('&');
for(var i in params_all)
{
var temp = params_all[i].split('=');
if(temp.length >= 2)
{
if(i > 0)
{
p += '&';
}
if(temp[0] == field)
{
p += field+'='+value;
} else {
p += params_all[i];
}
}
}
} else {
p = exts+'&'+field+'='+value;
}
url = str+(ext.substr(0, ext.indexOf('?')))+'?'+p;
} else {
url = str+'/'+field+'/'+value+ext;
}
}
} else {
url += '?'+field+'='+value;
}
return url+anchor;
}
// 公共数据操作
$(function()
@ -1723,7 +1798,6 @@ $(function()
// 文件上传
upload_editor.addListener("beforeInsertFile", function(t, result)
{
console.log(t, result, 'file');
var fileHtml = '';
for(var i in result){
fileHtml += '<li><a href="'+result[i].url+'" target="_blank">'+result[i].url+'</a></li>';

View File

@ -1,32 +1,12 @@
if(store.enabled)
{
// 选择缓存key
var store_address_key = 'store-buy-address-selected-index';
var store_use_new_address_status_key = 'store-buy-use-new-address-status-count';
var store_payment_key = 'store-buy-payment-selected-index';
}
$(function()
{
// 底部地址同步显示
function address_sync_view()
{
var $address = $('ul.address-list li.address-default');
if($address.length > 0)
{
var user = $address.find('.user-base span.user').text();
var phone = $address.find('.user-base span.phone').text();
var province = $address.find('.region .province').text();
var city = $address.find('.region .city').text();
var dist = $address.find('.region .dist').text();
var street = $address.find('.region .street').text();
$('.buy-address-detail').text(province+' '+city+' '+dist+' '+street);
$('.buy-footer-address .buy-user').text(user);
$('.buy-footer-address .buy-phone').text(phone);
}
}
// 选中处理
if(store.enabled)
{
@ -37,20 +17,11 @@ $(function()
// 如果新的地址大于使用新地址标记数量则使用第一个地址
if(store_address_use_status < $('ul.address-list li').length)
{
store.set(store_address_key, 0);
store.set(store_use_new_address_status_key, undefined);
window.location.href = UrlFieldReplace('address_id', $('ul.address-list li:first').data('value'));
}
}
// 地址
var store_address_value = store.get(store_address_key);
if(store_address_value !== undefined)
{
$('ul.address-list li').eq(store_address_value).addClass('address-default').siblings().removeClass('address-default');
// 底部地址同步
address_sync_view();
}
// 支付方式
var store_payment_value = store.get(store_payment_key);
if(store_payment_value !== undefined)
@ -59,23 +30,34 @@ $(function()
}
}
// 地址不为空,并且未设置默认,并且没有选择 默认选中第一个
if($('ul.address-list li').length > 0 && $('ul.address-list li.address-default').length == 0)
{
$('ul.address-list li').eq(0).addClass('address-default');
// 底部地址同步
address_sync_view();
}
// 地址选择
$('ul.address-list li').on('click', function()
$('ul.address-list li').on('click', function(e)
{
$(this).addClass('address-default').siblings().removeClass('address-default');
store.set(store_address_key, $(this).index());
if($(window).width() < 640)
{
if(!$('.address').hasClass('mobile-address'))
{
$('.address').addClass('mobile-address');
$(document.body).css({"overflow": "hidden", "position":"fixed"});
e.stopPropagation();
}
} else {
// 底部地址同步
window.location.href = UrlFieldReplace('address_id', $(this).data('value'));
}
});
// 底部地址同步
address_sync_view();
// 手机模式下选择地址
$('.address').on('click', 'ul.address-list li', function()
{
window.location.href = UrlFieldReplace('address_id', $(this).data('value'));
});
// 设为默认地址
$('.address-default-submit').on('click', function(e)
{
ConfirmNetworkAjax($(this));
e.stopPropagation();
});
// 混合列表选择
@ -123,34 +105,6 @@ $(function()
e.stopPropagation();
});
// 手机模式下选择地址
$('ul.address-list li').on('click', function(e)
{
if($(window).width() < 640)
{
if(!$('.address').hasClass('mobile-address'))
{
$('.address').addClass('mobile-address');
$(document.body).css({"overflow": "hidden", "position":"fixed"});
e.stopPropagation();
}
}
});
$('.address').on('click', 'ul.address-list li', function()
{
$('.address').removeClass('mobile-address');
$(document.body).css({"overflow": "auto", "position":"unset"});
$('body').scrollTop(0);
});
// 设为默认地址
$('.address-default-submit').on('click', function(e)
{
ConfirmNetworkAjax($(this));
e.stopPropagation();
});
// 提交订单
$('.nav-buy .btn-go').on('click', function()
{