cart
parent
4dda32bf11
commit
af770c20a4
|
|
@ -186,7 +186,7 @@ textarea {
|
|||
.sales-price {
|
||||
color: #f40;
|
||||
font-weight: bold;
|
||||
font-size: 38rpx;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
.original-price {
|
||||
color: #ccc;
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ App({
|
|||
"user_answer_list": "我的留言",
|
||||
"user": "用户中心",
|
||||
"goods_category": "分类",
|
||||
"cart": "购物车",
|
||||
},
|
||||
|
||||
// 请求地址
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"pages": [
|
||||
"pages": ["pages/cart/cart",
|
||||
"pages/index/index",
|
||||
"pages/goods-category/goods-category",
|
||||
"pages/cart/cart",
|
||||
|
||||
"pages/user/user",
|
||||
"pages/web-view/web-view",
|
||||
"pages/login/login",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,60 @@
|
|||
/**
|
||||
* 商品列表
|
||||
*/
|
||||
.goods-title {
|
||||
line-height: 36rpx;
|
||||
}
|
||||
.goods-item {
|
||||
padding: 20rpx 10rpx;
|
||||
position: relative;
|
||||
}
|
||||
.goods-item:not(:last-child) {
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.goods-title, .goods-attribute {
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
.goods-image {
|
||||
width: 160rpx;
|
||||
height: 160rpx;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
.goods-base {
|
||||
min-height: 160rpx;
|
||||
}
|
||||
.goods-price {
|
||||
position: relative;
|
||||
}
|
||||
.buy-number {
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
|
||||
/**
|
||||
* 数量操作
|
||||
*/
|
||||
.number-content {
|
||||
position: absolute;
|
||||
right: 20rpx;
|
||||
top: 120rpx;
|
||||
}
|
||||
.number-content button
|
||||
{
|
||||
background: #eee;
|
||||
height: 64rpx;
|
||||
line-height: 64rpx;
|
||||
font-weight: bold;
|
||||
color: #666;
|
||||
}
|
||||
.number-content input {
|
||||
width: 50px;
|
||||
margin: 2rpx 10rpx 0 10rpx;
|
||||
height: 60rpx;
|
||||
line-height: 60rpx;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.number-content button,
|
||||
.number-content input
|
||||
{
|
||||
border: 1px solid #ddd;
|
||||
padding: 0;
|
||||
}
|
||||
|
|
@ -1,3 +1,29 @@
|
|||
<view>
|
||||
New Page
|
||||
<view a:for="{{data_list}}" class="goods-item oh bg-white">
|
||||
<!-- 图片/链接 -->
|
||||
<navigator url="/pages/goods-detail/goods-detail?goods_id={{item.goods_id}}">
|
||||
<image class="goods-image fl" src="{{item.images}}" mode="aspectFill" />
|
||||
</navigator>
|
||||
|
||||
<!-- 基础 -->
|
||||
<view class="goods-base">
|
||||
<view class="goods-title multi-text">{{item.title}}
|
||||
</view>
|
||||
<block a:if="{{item.attribute != null}}">
|
||||
<view class="goods-attribute cr-888" a:for="{{item.attribute}}" a:for-item="attr"> {{attr.attr_type_name}}:{{attr.attr_name}}
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
<!-- 数量 -->
|
||||
<view class="number-content fr tr">
|
||||
<button type="default" size="mini" catchTap="goods_buy_number_event" data-index="{{index}}" data-type="0" hover-class="none">﹣</button>
|
||||
<input onBlur="goods_buy_number_blur" class="tc cr-888" type="number" value="{{item.stock}}" data-index="{{index}}" />
|
||||
<button type="default" size="mini" catchTap="goods_buy_number_event" data-index="{{index}}" data-type="1" hover-class="none">+</button>
|
||||
</view>
|
||||
|
||||
<!-- 价格 -->
|
||||
<view class="oh goods-price">
|
||||
<text class="sales-price">¥{{item.price}}</text>
|
||||
<text a:if="{{item.original_price > 0}}" class="original-price">¥{{item.original_price}}</text>
|
||||
<text class="buy-number">x{{item.stock}}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -1,4 +1,146 @@
|
|||
const app = getApp();
|
||||
Page({
|
||||
data: {},
|
||||
onLoad() {},
|
||||
data: {
|
||||
data_list_loding_status: 1,
|
||||
data_list_loding_msg: '',
|
||||
data_bottom_line_status: false,
|
||||
data_list: [],
|
||||
value: 8,
|
||||
},
|
||||
|
||||
onShow() {
|
||||
my.setNavigationBar({ title: app.data.common_pages_title.cart });
|
||||
this.init();
|
||||
},
|
||||
|
||||
init() {
|
||||
this.setData({
|
||||
data_list_loding_status: 1
|
||||
});
|
||||
|
||||
my.httpRequest({
|
||||
url: app.get_request_url("Index", "Cart"),
|
||||
method: "POST",
|
||||
data: {},
|
||||
dataType: "json",
|
||||
success: res => {
|
||||
my.stopPullDownRefresh();
|
||||
if (res.data.code == 0) {
|
||||
this.setData({
|
||||
data_list: res.data.data,
|
||||
data_list_loding_status: 3,
|
||||
data_bottom_line_status: true,
|
||||
data_list_loding_msg: '',
|
||||
});
|
||||
} else {
|
||||
self.setData({
|
||||
data_list_loding_status: 2,
|
||||
data_bottom_line_status: false,
|
||||
data_list_loding_msg: res.data.msg,
|
||||
});
|
||||
my.showToast({
|
||||
type: "fail",
|
||||
content: res.data.msg
|
||||
});
|
||||
}
|
||||
},
|
||||
fail: () => {
|
||||
my.stopPullDownRefresh();
|
||||
self.setData({
|
||||
data_list_loding_status: 2,
|
||||
data_bottom_line_status: false,
|
||||
data_list_loding_msg: '服务器请求出错',
|
||||
});
|
||||
|
||||
my.showToast({
|
||||
type: "fail",
|
||||
content: "服务器请求出错"
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 下拉刷新
|
||||
onPullDownRefresh() {
|
||||
this.init();
|
||||
},
|
||||
|
||||
// 数量输入事件
|
||||
goods_buy_number_blur(e) {
|
||||
var index = e.currentTarget.dataset.index || 0;
|
||||
var buy_number = parseInt(e.detail.value) || 1;
|
||||
this.goods_buy_number_func(index, buy_number);
|
||||
},
|
||||
|
||||
// 数量操作事件
|
||||
goods_buy_number_event(e) {
|
||||
var index = e.currentTarget.dataset.index || 0;
|
||||
var type = parseInt(e.currentTarget.dataset.type) || 0;
|
||||
var temp_buy_number = parseInt(this.data.data_list[index]['stock']);
|
||||
if (type == 0) {
|
||||
var buy_number = temp_buy_number - 1;
|
||||
} else {
|
||||
var buy_number = temp_buy_number + 1;
|
||||
}
|
||||
this.goods_buy_number_func(index, buy_number);
|
||||
},
|
||||
|
||||
// 数量处理方法
|
||||
goods_buy_number_func(index, buy_number) {
|
||||
var buy_min_number = parseInt(this.data.data_list[index]['buy_min_number']) || 1;
|
||||
var buy_max_number = parseInt(this.data.data_list[index]['buy_max_number']) || 0;
|
||||
var inventory = parseInt(this.data.data_list[index]['inventory']);
|
||||
var inventory_unit = this.data.data_list[index]['inventory_unit'];
|
||||
if (buy_number < buy_min_number) {
|
||||
buy_number = buy_min_number;
|
||||
if (buy_min_number > 1) {
|
||||
my.showToast({ content: '起购' + buy_min_number + inventory_unit });
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (buy_max_number > 0 && buy_number > buy_max_number) {
|
||||
buy_number = buy_max_number;
|
||||
my.showToast({ content: '限购' + buy_max_number + inventory_unit });
|
||||
return false;
|
||||
}
|
||||
if (buy_number > inventory) {
|
||||
buy_number = inventory;
|
||||
my.showToast({ content: '库存数量' + inventory + inventory_unit });
|
||||
return false;
|
||||
}
|
||||
|
||||
var temp_data_list = this.data.data_list;
|
||||
if (temp_data_list[index]['stock'] == 1 && buy_number == 1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// 更新数据库
|
||||
my.httpRequest({
|
||||
url: app.get_request_url("Stock", "Cart"),
|
||||
method: "POST",
|
||||
data: { "id": temp_data_list[index]['id'], "goods_id": temp_data_list[index]['goods_id'], "stock": buy_number},
|
||||
dataType: "json",
|
||||
success: res => {
|
||||
my.stopPullDownRefresh();
|
||||
if (res.data.code == 0) {
|
||||
temp_data_list[index]['stock'] = buy_number
|
||||
this.setData({ data_list: temp_data_list });
|
||||
my.showToast({ content: res.data.msg });
|
||||
} else {
|
||||
my.showToast({
|
||||
type: "fail",
|
||||
content: res.data.msg
|
||||
});
|
||||
}
|
||||
},
|
||||
fail: () => {
|
||||
my.showToast({
|
||||
type: "fail",
|
||||
content: "服务器请求出错"
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
});
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
</view>
|
||||
|
||||
<view class="nav-back tc wh-auto">
|
||||
<navigator open-type="navigateBack" hover-class="none">
|
||||
<navigator url="/pages/user-order/user-order" open-type="navigateBack" hover-class="none">
|
||||
<button type="default" size="mini" class="cr-888" hover-class="none">返回</button>
|
||||
</navigator>
|
||||
</view>
|
||||
|
|
@ -64,9 +64,6 @@
|
|||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
.item-base {
|
||||
|
||||
}
|
||||
.item-base, .item-describe, .item-operation {
|
||||
padding: 25rpx 10rpx 20rpx 10rpx;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
|
||||
namespace Api\Controller;
|
||||
|
||||
use Service\BuyService;
|
||||
|
||||
/**
|
||||
* 购物车
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2016-12-01T21:51:08+0800
|
||||
*/
|
||||
class CartController extends CommonController
|
||||
{
|
||||
/**
|
||||
* [_initialize 前置操作-继承公共前置方法]
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2016-12-03T12:39:08+0800
|
||||
*/
|
||||
public function _initialize()
|
||||
{
|
||||
// 调用父类前置方法
|
||||
parent::_initialize();
|
||||
|
||||
// 是否ajax请求
|
||||
if(!IS_AJAX)
|
||||
{
|
||||
$this->error(L('common_unauthorized_access'));
|
||||
}
|
||||
|
||||
// 是否登录
|
||||
$this->Is_Login();
|
||||
}
|
||||
|
||||
/**
|
||||
* [Index 首页]
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2017-02-22T16:50:32+0800
|
||||
*/
|
||||
public function Index()
|
||||
{
|
||||
$ret = BuyService::CartList(['user'=>$this->user]);
|
||||
$this->ajaxReturn($ret['msg'], $ret['code'], $ret['data']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 购物车保存
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2018-09-13
|
||||
* @desc description
|
||||
*/
|
||||
public function Save()
|
||||
{
|
||||
$params = $this->data_post;
|
||||
$params['user'] = $this->user;
|
||||
$ret = BuyService::CartAdd($params);
|
||||
$this->ajaxReturn($ret['msg'], $ret['code'], $ret['data']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 购物车删除
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2018-09-14
|
||||
* @desc description
|
||||
*/
|
||||
public function Delete()
|
||||
{
|
||||
|
||||
$params = $this->data_post;
|
||||
$params['user'] = $this->user;
|
||||
$ret = BuyService::CartDelete($params);
|
||||
$this->ajaxReturn($ret['msg'], $ret['code'], $ret['data']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 数量保存
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2018-09-14
|
||||
* @desc description
|
||||
*/
|
||||
public function Stock()
|
||||
{
|
||||
$params = $this->data_post;
|
||||
$params['user'] = $this->user;
|
||||
$ret = BuyService::CartStock($params);
|
||||
$this->ajaxReturn($ret['msg'], $ret['code'], $ret['data']);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
@ -175,6 +175,7 @@ class BuyService
|
|||
$v['images'] = empty($v['images']) ? null : $images_host.$v['images'];
|
||||
$v['attribute'] = empty($v['attribute']) ? null : json_decode($v['attribute'], true);
|
||||
$v['total_price'] = $v['stock']*$v['price'];
|
||||
$v['buy_max_number'] = ($v['buy_max_number'] <= 0) ? $v['inventory']: $v['buy_max_number'];
|
||||
}
|
||||
|
||||
return DataReturn(L('common_operation_success'), 0, $data);
|
||||
|
|
|
|||
Loading…
Reference in New Issue