下订单页面逻辑优化

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) 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]); $payment_list = PaymentService::BuyPaymentList(['is_enable'=>1, 'is_open_user'=>1]);
// 扩展展示数据
$extension_list = [
// ['name'=>'感恩节9折', 'tips'=>'-¥23元'],
// ['name'=>'运费', 'tips'=>'+¥10元'],
];
// 数据返回组装 // 数据返回组装
$result = [ $result = [
'goods_list' => $ret['data'], 'goods_list' => $ret['data']['goods'],
'payment_list' => $payment_list, 'payment_list' => $payment_list,
'base' => $base, 'base' => $ret['data']['base'],
'extension_list' => $extension_list, 'extension_data' => $ret['data']['extension_data'],
'common_order_is_booking' => (int) MyC('common_order_is_booking', 0), 'common_order_is_booking' => (int) MyC('common_order_is_booking', 0),
]; ];
return DataReturn('success', 0, $result); return DataReturn('操作成功', 0, $result);
} }
return $ret; return $ret;
} }

View File

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

View File

@ -26,7 +26,7 @@
{{if !empty($user_address_list)}} {{if !empty($user_address_list)}}
<ul class="address-list"> <ul class="address-list">
{{foreach $user_address_list as $address}} {{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="address-left">
<div class="user-base"> <div class="user-base">
{{if !empty($address.alias)}} {{if !empty($address.alias)}}

View File

@ -509,6 +509,61 @@ class BuyService
} else { } else {
$ret = DataReturn('参数有误', -1); $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; return $ret;
} }
@ -638,7 +693,7 @@ class BuyService
{ {
return $goods; return $goods;
} }
$check = self::BuyGoodsCheck(['goods'=>$goods['data']]); $check = self::BuyGoodsCheck(['goods'=>$goods['data']['goods']]);
if(!isset($check['code']) || $check['code'] != 0) if(!isset($check['code']) || $check['code'] != 0)
{ {
return $check; return $check;
@ -689,7 +744,7 @@ class BuyService
$order_id = Db::name('Order')->insertGetId($order); $order_id = Db::name('Order')->insertGetId($order);
if($order_id > 0) if($order_id > 0)
{ {
foreach($goods['data'] as $v) foreach($goods['data']['goods'] as $v)
{ {
$detail = [ $detail = [
'order_id' => $order_id, '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); $ret = self::UserAddressList($params);
if(!empty($ret['data'][0])) 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" /> <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:if="{{extension_data.length > 0}}" class="extension-list spacing-mb">
<view a:for="{{extension_list}}" class="item oh"> <view a:for="{{extension_data}}" class="item oh">
<text class="cr-666">{{item.name}} <text class="cr-666">{{item.name}}
</text> </text>
<text class="text-tips fr">{{item.tips}} <text class="text-tips fr">{{item.tips}}

View File

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

View File

@ -12,7 +12,7 @@ Page({
total_price: 0, total_price: 0,
user_note_value: '', user_note_value: '',
is_first: 1, is_first: 1,
extension_list: [], extension_data: [],
payment_id: 0, payment_id: 0,
common_order_is_booking: 0, common_order_is_booking: 0,
}, },
@ -85,7 +85,7 @@ Page({
this.setData({ this.setData({
goods_list: data.goods_list, goods_list: data.goods_list,
total_price: data.base.total_price, total_price: data.base.total_price,
extension_list: data.extension_list || [], extension_data: data.extension_data || [],
data_list_loding_status: 3, data_list_loding_status: 3,
common_order_is_booking: data.common_order_is_booking || 0, 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" /> <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:if="{{extension_data.length > 0}}" class="extension-list spacing-mb">
<view wx:for="{{extension_list}}" wx:key="key" class="item oh"> <view wx:for="{{extension_data}}" wx:key="key" class="item oh">
<text class="cr-666">{{item.name}} <text class="cr-666">{{item.name}}
</text> </text>
<text class="text-tips fr">{{item.tips}} <text class="text-tips fr">{{item.tips}}

View File

@ -1,4 +1,4 @@
{ {
"defaultTitle": "加载中...", "navigationBarTitleText": "加载中...",
"enablePullDownRefresh": false "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() $(function()
@ -1723,7 +1798,6 @@ $(function()
// 文件上传 // 文件上传
upload_editor.addListener("beforeInsertFile", function(t, result) upload_editor.addListener("beforeInsertFile", function(t, result)
{ {
console.log(t, result, 'file');
var fileHtml = ''; var fileHtml = '';
for(var i in result){ for(var i in result){
fileHtml += '<li><a href="'+result[i].url+'" target="_blank">'+result[i].url+'</a></li>'; fileHtml += '<li><a href="'+result[i].url+'" target="_blank">'+result[i].url+'</a></li>';

View File

@ -1,32 +1,12 @@
if(store.enabled) if(store.enabled)
{ {
// 选择缓存key // 选择缓存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_use_new_address_status_key = 'store-buy-use-new-address-status-count';
var store_payment_key = 'store-buy-payment-selected-index'; var store_payment_key = 'store-buy-payment-selected-index';
} }
$(function() $(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) if(store.enabled)
{ {
@ -37,20 +17,11 @@ $(function()
// 如果新的地址大于使用新地址标记数量则使用第一个地址 // 如果新的地址大于使用新地址标记数量则使用第一个地址
if(store_address_use_status < $('ul.address-list li').length) 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); 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); var store_payment_value = store.get(store_payment_key);
if(store_payment_value !== undefined) 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'); if($(window).width() < 640)
store.set(store_address_key, $(this).index()); {
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(); 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() $('.nav-buy .btn-go').on('click', function()
{ {