提交 af770c20 编写于 作者: G gongfuxiang

cart

上级 4dda32bf
......@@ -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": "购物车",
},
// 请求地址
......
{
"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",
......
/**
* 商品列表
*/
.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;
}
\ No newline at end of file
<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>
\ No newline at end of file
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>
\ No newline at end of file
......@@ -64,9 +64,6 @@
position: absolute;
right: 0;
bottom: 0;
}
.item-base {
}
.item-base, .item-describe, .item-operation {
padding: 25rpx 10rpx 20rpx 10rpx;
......
<?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']);
}
}
?>
\ No newline at end of file
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册