订单确认

feat/task1-c-wallet
devil_gong 2018-09-25 17:04:56 +08:00
parent 58b9822f1c
commit b76c054122
12 changed files with 350 additions and 326 deletions

View File

@ -115,41 +115,12 @@ class UserAddressController extends CommonController
* @date 2018-07-18
* @desc description
*/
public function SetDefault()
public function Default()
{
// 请求参数
$params = [
[
'checked_type' => 'empty',
'key_name' => 'address_id',
'error_msg' => '地址ID不能为空',
]
];
$ret = params_checked($_POST, $params);
if($ret !== true)
{
$this->ajaxReturn($ret);
}
// 模型
$m = M('UserAddress');
// 开启事务
$m->startTrans();
// 先全部设置为0 再将当前设置为1
$all_status = $m->where(['user_id' => $this->user['id']])->save(['is_default'=>0]);
$my_status = $m->where(['user_id' => $this->user['id'], 'id'=>$_POST['address_id']])->save(['is_default'=>1]);
if($all_status && $my_status)
{
// 提交事务
$m->commit();
$this->ajaxReturn(L('common_operation_set_success'), 0);
} else {
// 回滚事务
$m->rollback();
$this->ajaxReturn(L('common_operation_delete_error'), -100);
}
$params = $_POST;
$params['user'] = $this->user;
$ret = UserService::UserAddressDefault($params);
$this->ajaxReturn($ret['msg'], $ret['code'], $ret['data']);
}
}
?>

View File

@ -0,0 +1,16 @@
<?php
/**
* 模块语言包-确认订单
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
return array(
'buy_user_address_not_data_tips' => '没有地址',
'buy_express_not_data_tips' => '没有物流方式',
'buy_payment_not_data_tips' => '没有支付方式',
'buy_goods_not_data_tips' => '没有商品',
);
?>

View File

@ -13,35 +13,35 @@
<include file="Public/GoodsCategory" />
<!-- content -->
<div class="am-container category-list">
<div class="am-container">
<!-- 地址 -->
<div class="link-list">
<div class="address">
<div class="control">
<h3>确认收货地址</h3>
<button class="am-btn am-btn-danger am-btn-xs address-submit" type="button" data-url="{{:U('Home/UserAddress/SaveInfo')}}">使用新地址</button>
<notempty name="user_address_list">
<button class="am-btn am-btn-danger am-btn-xs address-submit-save" type="button" data-url="{{:U('Home/UserAddress/SaveInfo')}}">使用新地址</button>
</notempty>
</div>
<notempty name="user_address_list">
<ul class="address-list">
<foreach name="user_address_list" item="address">
<li class="<if condition="isset($address['is_default']) and $address['is_default'] eq 1">address-default</if>" id="data-list-{{$address.id}}">
<div class="address-left">
<div class="user DefaultAddr">
<div class="user-base">
<span class="buy-address-detail">
<span class="buy-user">{{$address.name}}</span>
<span class="buy-phone">{{$address.tel}}</span>
<span class="buy-user">{{$address.name}}</span>
<span class="buy-phone">{{$address.tel}}</span>
</span>
</div>
<div class="default-address DefaultAddr">
<div>
<span class="buy-line-title buy-line-title-type">收货地址:</span>
<span class="buy--address-detail">
<span class="province">{{$address.province_name}}</span>
<span class="city">{{$address.city_name}}</span>
<span class="dist">{{$address.county_name}}</span>
<span class="street">{{$address.address}}</span>
</span>
<span class="province">{{$address.province_name}}</span>
<span class="city">{{$address.city_name}}</span>
<span class="dist">{{$address.county_name}}</span>
<span class="street">{{$address.address}}</span>
</span>
</div>
<if condition="isset($address['is_default']) and $address['is_default'] eq 1">
@ -49,13 +49,11 @@
</if>
</div>
<div class="address-right">
<a href="../person/address.html">
<span class="am-icon-angle-right am-icon-lg"></span>
</a>
<span class="am-icon-angle-right am-icon-lg"></span>
</div>
<div class="new-addr-btn">
<a href="#" class="hidden">设为默认</a>
<span class="new-addr-bar hidden">|</span>
<a href="javascript:;" class="address-default-submit" data-url="{{:U('Home/UserAddress/Default')}}" data-id="{{$address.id}}">设为默认</a>
<span class="new-addr-bar">|</span>
<a href="javascript:;" class="address-submit-save" data-url="{{:U('Home/UserAddress/SaveInfo', ['id'=>$address['id']])}}">编辑</a>
<span class="new-addr-bar">|</span>
<a href="javascript:;" class="address-submit-delete" data-url="{{:U('Home/UserAddress/Delete')}}" data-id="{{$address.id}}">删除</a>
@ -64,6 +62,12 @@
</foreach>
</ul>
</notempty>
<empty name="user_address_list">
<div class="table-no">
<i class="am-icon-warning"></i>
{{:L('buy_user_address_not_data_tips')}}
<button class="am-btn am-btn-secondary am-btn-xs address-submit-save" type="button" data-url="{{:U('Home/UserAddress/SaveInfo')}}">使用新地址</button></div>
</empty>
</div>
<!-- 物流 -->
@ -82,6 +86,9 @@
</foreach>
</ul>
</notempty>
<empty name="express_list">
<div class="table-no"><i class="am-icon-warning"></i> {{:L('buy_express_not_data_tips')}}</div>
</empty>
</div>
<!-- 支付方式 -->
@ -100,68 +107,76 @@
</foreach>
</ul>
</notempty>
<empty name="payment_list">
<div class="table-no"><i class="am-icon-warning"></i> {{:L('buy_payment_not_data_tips')}}</div>
</empty>
</div>
<!--订单 -->
<div class="concent">
<div id="payTable">
<div class="order-detail">
<div class="goods-table">
<h3>确认订单信息</h3>
<!-- 商品列表 -->
<table class="am-table">
<thead>
<tr>
<th>商品信息</th>
<th class="am-hide-sm-only">单价</th>
<th class="am-hide-sm-only">数量</th>
<th class="am-hide-sm-only">金额</th>
</tr>
</thead>
<tbody>
<foreach name="goods_list" item="goods">
<tr id="data-list-{{$goods.id}}" data-id="{{$goods.id}}" data-goods-id="{{$goods.goods_id}}">
<td class="base">
<div class="goods-detail">
<a href="{{$goods.goods_url}}" target="_blank">
<img src="{{$goods.images}}">
</a>
<div class="goods-base">
<a href="{{$goods.goods_url}}" target="_blank" class="goods-title">{{$goods.title}}</a>
<notempty name="goods.attribute">
<ul class="goods-attr">
<foreach name="goods.attribute" item="attr">
<li>{{$attr.attr_type_name}}{{$attr.attr_name}}</li>
</foreach>
</ul>
</notempty>
</div>
</div>
<div class="wap-base am-show-sm-only">
<if condition="$goods['original_price'] gt 0">
<span class="original-price">¥{{$goods.original_price}}</span>
</if>
<strong class="total-price-content">¥{{$goods.price}}</strong>
<span class="wap-number">x{{$goods.stock}}</span>
</div>
</td>
<td class="price am-hide-sm-only">
<if condition="$goods['original_price'] gt 0">
<p class="original-price">¥{{$goods.original_price}}</p>
</if>
<p class="line-price">¥{{$goods.price}}</p>
</td>
<td class="number am-hide-sm-only">
{{$goods.stock}} {{$goods.inventory_unit}}
</td>
<td class="total-price am-hide-sm-only">
<strong class="total-price-content">¥{{$goods.total_price}}</strong>
</td>
<notempty name="goods_list">
<table class="am-table">
<thead>
<tr>
<th>商品信息</th>
<th class="am-hide-sm-only">单价</th>
<th class="am-hide-sm-only">数量</th>
<th class="am-hide-sm-only">金额</th>
</tr>
</foreach>
</tbody>
</table>
</thead>
<tbody>
<foreach name="goods_list" item="goods">
<tr id="data-list-{{$goods.id}}" data-id="{{$goods.id}}" data-goods-id="{{$goods.goods_id}}">
<td class="base">
<div class="goods-detail">
<a href="{{$goods.goods_url}}" target="_blank">
<img src="{{$goods.images}}">
</a>
<div class="goods-base">
<a href="{{$goods.goods_url}}" target="_blank" class="goods-title">{{$goods.title}}</a>
<notempty name="goods.attribute">
<ul class="goods-attr">
<foreach name="goods.attribute" item="attr">
<li>{{$attr.attr_type_name}}{{$attr.attr_name}}</li>
</foreach>
</ul>
</notempty>
</div>
</div>
<div class="wap-base am-show-sm-only">
<if condition="$goods['original_price'] gt 0">
<span class="original-price">¥{{$goods.original_price}}</span>
</if>
<strong class="total-price-content">¥{{$goods.price}}</strong>
<span class="wap-number">x{{$goods.stock}}</span>
</div>
</td>
<td class="price am-hide-sm-only">
<if condition="$goods['original_price'] gt 0">
<p class="original-price">¥{{$goods.original_price}}</p>
</if>
<p class="line-price">¥{{$goods.price}}</p>
</td>
<td class="number am-hide-sm-only">
{{$goods.stock}} {{$goods.inventory_unit}}
</td>
<td class="total-price am-hide-sm-only">
<strong class="total-price-content">¥{{$goods.total_price}}</strong>
</td>
</tr>
</foreach>
</tbody>
</table>
</notempty>
<empty name="goods_list">
<div class="table-no"><i class="am-icon-warning"></i> {{:L('buy_goods_not_data_tips')}}</div>
</empty>
<!-- 留言 -->
<div class="buy-message">
<!--留言-->
<div class="order-extra">
<div class="order-user-info">
<div id="holyshit257" class="memo">
@ -171,22 +186,23 @@
</div>
</div>
</div>
<!--含运费小计 -->
<div class="buy-point-discharge ">
<p class="price g_price ">
<!-- 含运费小计 -->
<div class="buy-point-discharge">
<p>
合计(含运费) <span>¥</span><em class="pay-sum">{{$base.total_price}}</em>
</p>
</div>
<!--信息 -->
<div class="order-go clearfix">
<div class="pay-confirm clearfix">
<!-- 信息 -->
<div class="order-nav">
<div class="pay-confirm">
<div class="box">
<div tabindex="0" class="realPay">
<em class="t">实付款:</em>
<span class="price g_price">
<span>¥</span>
<em class="style-large-bold-red">{{$base.total_price}}</em>
<div class="base-real-pay">
<em>实付款:</em>
<span class="price">
<span>¥</span>
<em class="nav-total-price">{{$base.total_price}}</em>
</span>
</div>
@ -221,87 +237,16 @@
</div>
</div>
<div id="holyshit269" class="submitOrder">
<div class="nav-buy-submit">
<div class="go-btn-wrap">
<a id="J_Go" href="success.html" class="btn-go" tabindex="0" title="点击此按钮,提交订单">提交订单</a>
<a href="javascript:;" class="btn-go" title="点击此按钮,提交订单">提交订单</a>
</div>
</div>
<div class="clear"></div>
</div>
</div>
</div>
<div class="clear"></div>
</div>
</div>
<div class="theme-popover-mask"></div>
<div class="theme-popover">
<!--标题 -->
<div class="am-cf am-padding">
<div class="am-fl am-cf"><strong class="am-text-danger am-text-lg">新增地址</strong> / <small>Add address</small></div>
</div>
<hr/>
<div class="am-u-md-12">
<form class="am-form am-form-horizontal">
<div class="am-form-group">
<label for="user-name" class="am-form-label">收货人</label>
<div class="am-form-content">
<input type="text" id="user-name" placeholder="收货人">
</div>
</div>
<div class="am-form-group">
<label for="user-phone" class="am-form-label">手机号码</label>
<div class="am-form-content">
<input id="user-phone" placeholder="手机号必填" type="email">
</div>
</div>
<div class="am-form-group">
<label for="user-phone" class="am-form-label">所在地</label>
<div class="am-form-content address">
<select data-am-selected>
<option value="a">浙江省</option>
<option value="b">湖北省</option>
</select>
<select data-am-selected>
<option value="a">温州市</option>
<option value="b">武汉市</option>
</select>
<select data-am-selected>
<option value="a">瑞安区</option>
<option value="b">洪山区</option>
</select>
</div>
</div>
<div class="am-form-group">
<label for="user-intro" class="am-form-label">详细地址</label>
<div class="am-form-content">
<textarea class="" rows="3" id="user-intro" placeholder="输入详细地址"></textarea>
<small>100字以内写出你的详细地址...</small>
</div>
</div>
<div class="am-form-group theme-poptit">
<div class="am-u-sm-9 am-u-sm-push-3">
<div class="am-btn am-btn-danger">保存</div>
<div class="am-btn am-btn-danger close">取消</div>
</div>
</div>
</form>
</div>
</div>
<!-- <notempty name="goods_category_list">
<else />
<div class="table-no"><i class="am-icon-warning"></i> {{:L('common_not_data_tips')}}</div>
</notempty> -->
</div>
<!-- footer start -->

View File

@ -124,10 +124,6 @@
</notempty>
</div>
<!-- 罩层 -->
<div class="theme-popover-mask" style="display:none;"></div>
<!-- footer start -->
<include file="Public/Footer" />
<!-- footer end -->

View File

@ -25,7 +25,7 @@
</span>
</div>
</div>
<div id="map" data-level="17" class="am-form-group" style="width: 100%; height: 260px;"></div>
<div id="map" data-level="17" class="am-form-group"></div>
<div class="am-form-group">
<label>{{:L('useraddress_alias_text')}}</label>

View File

@ -209,6 +209,8 @@ class UserService
'lat' => floatval(I('lat')),
];
$m->startTrans();
// 默认地址处理
if($is_default == 1)
{
@ -222,16 +224,20 @@ class UserService
$data['add_time'] = time();
if($m->add($data) > 0)
{
$m->commit();
return DataReturn(L('common_operation_add_success'), 0);
} else {
$m->rollback();
return DataReturn(L('common_operation_add_error'));
}
} else {
$data['upd_time'] = time();
if($m->where($where)->save($data))
{
$m->commit();
return DataReturn(L('common_operation_update_success'), 0);
} else {
$m->rollback();
return DataReturn(L('common_operation_update_error'));
}
}
@ -276,5 +282,56 @@ class UserService
return DataReturn(L('common_operation_delete_error'), -100);
}
}
/**
* 用户地址设置默认地址
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-25
* @desc description
* @param [array] $params [输入参数]
*/
public static function UserAddressDefault($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => '地址id不能为空',
],
[
'checked_type' => 'empty',
'key_name' => 'user',
'error_msg' => '用户信息有误',
],
];
$ret = params_checked($params, $p);
if($ret !== true)
{
return DataReturn($ret);
}
// 模型
$m = M('UserAddress');
// 开启事务
$m->startTrans();
// 先全部设置为0 再将当前设置为1
$all_status = $m->where(['user_id' => $params['user']['id']])->save(['is_default'=>0]);
$my_status = $m->where(['user_id' => $params['user']['id'], 'id'=>$params['id']])->save(['is_default'=>1]);
if($all_status && $my_status)
{
// 提交事务
$m->commit();
return DataReturn(L('common_operation_set_success'), 0);
} else {
// 回滚事务
$m->rollback();
return DataReturn(L('common_operation_set_error'), -100);
}
}
}
?>

View File

@ -49,7 +49,6 @@
* iframe
*/
iframe { width: 100%; height: 100%; border: 0; }
.popup-iframe .am-popup-inner { overflow: hidden; }
/**
@ -69,6 +68,11 @@ iframe { width: 100%; height: 100%; border: 0; }
/* 地址联动 */
.region-linkage select { width: 33%; display: -webkit-inline-box; }
/**
* iframe
*/
.popup-iframe .am-popup-inner { overflow: hidden; }
}
/**

View File

@ -725,6 +725,84 @@ function DataDelete(e)
});
}
/**
* [ConfirmNetworkAjax 确认网络请求]
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-09-24T08:24:58+0800
* @param {[object]} e [当前元素对象]
*/
function ConfirmNetworkAjax(e)
{
var id = e.data('id');
var value = e.data('value') || '';
var url = e.data('url');
var view = e.data('view') || '';
var title = e.data('title') || '温馨提示';
var msg = e.data('msg') || '操作后不可恢复、确认操作吗?';
AMUI.dialog.confirm({
title: title,
content: msg,
onConfirm: function(e)
{
// ajax
$.ajax({
url:url,
type:'POST',
dataType:"json",
timeout:10000,
data:{id:id, value: value},
success:function(result)
{
if(result.code == 0)
{
switch(view)
{
// 成功则删除数据列表
case 'delete' :
Prompt(result.msg, 'success');
$('#data-list-'+id).remove();
break;
// 刷新
case 'reload' :
Prompt(result.msg, 'success');
setTimeout(function()
{
window.location.reload();
}, 1500);
break;
// 回调函数
case 'fun' :
if(IsExitsFunction(value))
{
window[value](result);
} else {
Prompt('['+value+']配置方法未定义');
}
break;
// 默认提示成功
default :
Prompt(result.msg, 'success');
}
} else {
Prompt(result.msg);
}
},
error:function(xhr, type)
{
Prompt('网络异常出错');
}
});
},
onCancel: function(){}
});
}
// 公共数据操作
$(function()
@ -1029,59 +1107,12 @@ $(function()
* @version 0.0.1
* @datetime 2016-12-10T14:22:39+0800
* @param {[int] [data-id] [数据id]}
* @param {[int] [data-view] [完成操作delete删除数据, reload刷新页面]}
* @param {[int] [data-view] [完成操作delete删除数据, reload刷新页面, fun方法回调(data-value)]}
* @param {[string] [data-url] [请求地址]}
*/
$(document).on('click', '.submit-ajax', function()
{
var id = $(this).data('id');
var value = $(this).data('value') || '';
var url = $(this).data('url');
var view = $(this).data('view') || 'reload';
var title = $(this).data('title') || '温馨提示';
var msg = $(this).data('msg') || '操作后不可恢复、确认操作吗?';
AMUI.dialog.confirm({
title: title,
content: msg,
onConfirm: function(e)
{
// ajax
$.ajax({
url:url,
type:'POST',
dataType:"json",
timeout:10000,
data:{id:id, value: value},
success:function(result)
{
if(result.code == 0)
{
Prompt(result.msg, 'success');
if(view == 'delete')
{
// 成功则删除数据列表
$('#data-list-'+id).remove();
} else if(view == 'reload')
{
setTimeout(function()
{
window.location.reload();
}, 1500);
}
} else {
Prompt(result.msg);
}
},
error:function(xhr, type)
{
Prompt('网络异常出错');
}
});
},
onCancel: function(){}
});
ConfirmNetworkAjax($(this));
});
/**

View File

@ -1,19 +1,18 @@
.hidden { display: none !important;}
.address-default { display:block !important;}
/*地址管理*/
.concent h3,.business-item h3{border-bottom: 3px solid #e3e3e3; margin-top:15px;}
/*地址管理*/
.order-detail h3,.business-item h3{border-bottom: 3px solid #e3e3e3; margin-top:15px;}
h3 { font-size: 14px;font-weight: 700;}
.address h3 { border-bottom:none;}
ul.address-list li{display:none;width:100%;padding:10px;position: relative;min-height:80px;}