zoukankan      html  css  js  c++  java
  • uniapp 购物车案例

    wxml

    <template>
        <view class="cart">
            <view class="content">
                <view class="list" v-for="item in list" :key='item.id'>
                    <view class="left">
                        <checkbox-group @change="checkboxChange($event,item.id)">
                            <checkbox :value="item.id" :checked="item.isChecked" />
                        </checkbox-group>
                        <image :src="item.img" class="img"></image>
                    </view>
                    <view class="center">
                        <view class="name">
                            {{item.name}}
                        </view>
                        <view class="size">
                            尺寸:{{item.size}}
                        </view>
                        <view class="count">
                            数量:x{{item.count}}
                        </view>
                    </view>
                    <view class="right">
                        <view class="price">
                            单价¥{{item.price}}元
                        </view>
                        <view class="update-count">
                            <view class="reduce" @tap="editNum(item.id,-1)">
                                -
                            </view>
                            <view class="cart-count">
                                {{item.count}}
                            </view>
                            <view class="add" @tap="editNum(item.id,1)">
                                +
                            </view>
                        </view>
                    </view>
                </view>
            </view>
    
            <!-- 底部导航栏 -->
            <view class="tabbar">
                <view class="all">
                    <checkbox-group @change="checkboxChangeAll">
                        <checkbox :checked="isAllChecked" />全选
                    </checkbox-group>
                </view>
                <view class="totalPrice">
                    总价:¥{{totalPrice}}元
                </view>
                <view class="submitOrder" @tap="submitOrder">
                    付款
                </view>
            </view>
        </view>
    </template>

    js

    <script>
        export default {
            data() {
                return {
                    list: [], //列表数据
                    isAllChecked: false, //是否全选
                    totalPrice: 0, //总价
                }
            },
            methods: {
                setCart() { //计算总价
                    let totalPrice = 0
                    this.list.forEach(v => {
                        if (v.isChecked) {
                            totalPrice += v.count * v.price
                        }
                    })
                    this.totalPrice = totalPrice
                },
    
                editNum(id, type) { //编辑数量
                    const index = this.list.findIndex(v => v.id == id)
                    if (this.list[index].count == 1 && type == -1) {
                        uni.showToast({
                            title: '至少购买一件商品',
                            icon: 'none'
                        })
                    } else {
                        this.list[index].count += type
                    }
                    this.setCart()
                },
    
                // 全选
                checkboxChangeAll(e) {
                    this.isAllChecked = !this.isAllChecked
                    this.list.forEach(v => v.isChecked = this.isAllChecked)
                    this.setCart()
                },
    
                // 选择每一项
                checkboxChange: function(e, id) {
                    var temp = []
    
                    // 找到被修改的商品对象
                    let index = this.list.findIndex(v => v.id === id)
                    // 选中状态取反
                    this.list[index].isChecked = !this.list[index].isChecked
    
                    temp = this.list.every(v => v.isChecked)
                    if (temp) {
                        this.isAllChecked = true
                    } else {
                        this.isAllChecked = false
                    }
                    this.setCart()
                },
    
                submitOrder() { // 提交购物车订单
                    // 判断是否选择购物车商品
                    var bol = this.list.every(el => el.isChecked == false)
                    if (bol) {
                        uni.showToast({
                            title: "这些你都不喜欢吗,你是不是只喜欢喝水,你倒是选一个啊商品啊",
                            icon: "none",
                            duration: 2000
                        })
                    } else {
                        uni.showToast({
                            title: "你肯定没有钱,还是算了吧",
                            icon: "none",
                            duration: 2000
                        })
                    }
                }
            },
            onShow() {
                // 模拟从后台拿到的数据
                var list = [{
                        id: '0',
                        name: '好吃的虾',
                        price: 10,
                        count: 1,
                        size: '大份',
                        img: 'http://47.92.83.204:8080/zhangying/img/cart/xia1.jpg'
                    },
                    {
                        id: '1',
                        name: '很好吃的虾',
                        price: 15,
                        count: 1,
                        size: '大份',
                        img: 'http://47.92.83.204:8080/zhangying/img/cart/xia2.jpg'
                    },
                    {
                        id: '2',
                        name: '可乐鸡翅',
                        price: 12,
                        count:1,
                        size: '大份',
                        img: 'http://47.92.83.204:8080/zhangying/img/cart/jichi.jpg'
                    },{
                        id: '3',
                        name: '火锅',
                        price: 30,
                        count: 1,
                        size: '大份',
                        img: 'http://47.92.83.204:8080/zhangying/img/cart/huoguo.jpg'
                    },
                    {
                        id: '4',
                        name: '干锅鸡',
                        price: 25,
                        count: 1,
                        size: '大份',
                        img: 'http://47.92.83.204:8080/zhangying/img/cart/ganguoji.jpg'
                    }
                ]
                // list数组中为每一项添加双向绑定的属性---这个属性要在页面显示(onShow)添加
                list.forEach(el => el.isChecked = false);
                this.list = list;
            },
        }
    </script>

    css

    <style lang="scss" scoped>
        page {
            background: #f1e8e7;
        }
        .content {
             670rpx;
            margin: 0 auto 180rpx;
        }
    
        // 居中显示
        @mixin textCenter {
            display: flex;
            align-items: center;
            justify-content: center;
        }
    
        .list {
             672rpx;
            height: 208rpx;
            background: #f9f9f9;
            box-shadow: 0 8rpx 16rpx 0 rgba(83, 66, 49, 0.08);
            border-radius: 24rpx;
            margin-top: 32rpx;
            display: flex;
            justify-content: space-around;
            align-items: center;
    
            .left {
                display: flex;
    
                .img {
                     136rpx;
                    height: 136rpx;
                    margin-left: 10rpx;
                    border-radius: 8%;
                }
            }
    
            .center {
                 170rpx;
    
                .name {
                    font-size: 26rpx;
                    color: #3E3E3E;
                    white-space: nowrap;
                    text-overflow: ellipsis;
                    overflow: hidden;
                }
    
                .size,
                .count {
                    font-size: 22rpx;
                    color: #8D8D8D;
                }
            }
    
            .right {
                .price {
                    margin-top: 40rpx;
                    font-size: 26rpx;
                    margin-left: 40rpx;
                }
    
                // 加减数量
                .update-count {
                    margin-top: 40rpx;
                    display: flex;
    
                    .reduce,
                    .add {
                         40rpx;
                        height: 40rpx;
                        background: #F1ECE7;
                        border-radius: 21.6rpx;
                        color: #979797;
                        @include textCenter;
                        font-size: 50rpx;
                    }
    
                    .cart-count {
                         72rpx;
                        height: 40rpx;
                        line-height: 40rpx;
                        background: #F1ECE7;
                        border-radius: 21.6rpx;
                        margin-left: 18rpx;
                        margin-right: 18rpx;
                        text-align: center;
                    }
                }
            }
        }
    
        // 底部导航
        .tabbar {
             100%;
            height: 176rpx;
            background-color: #f3f3f3;
            position: fixed;
            bottom: 0rpx;
            display: flex;
            align-items: center;
            justify-content: space-around;
            border-radius: 8% 8%;
    
            .all {
                font-size: 32rpx;
                color: #3E3E3E;
                letter-spacing: 2.29rpx;
                display: flex;
            }
    
            .totalPrice {
                font-size: 32rpx;
                color: #3E3E3E;
                letter-spacing: 2.29rpx;
                color: red;
            }
    
            .submitOrder {
                 208rpx;
                height: 80rpx;
                background: #354E44;
                border-radius: 14rpx;
                border-radius: 14rpx;
                font-size: 36rpx;
                color: #FFFFFF;
                letter-spacing: 2.57rpx;
                display: flex;
                align-items: center;
                justify-content: center;
            }
        }
    </style>

    效果图

  • 相关阅读:
    vector 指针结果 排序
    C++移位或与操作
    Win7如何显示/隐藏Administrator账号
    一些常用的工具
    发布单机端DELPHI程序访问MySQL必备文件
    DBX error:Driver could not be properly initialized .... 解决办法
    终止当前循环,退出循环,退出当前过程的指令的什么
    Delphi XE中使用dbExpress连接MySQL数据库疑难问题解决
    控件缩写大全
    ClienDataSet 随手笔计(1)
  • 原文地址:https://www.cnblogs.com/zhangying0518/p/14699752.html
Copyright © 2011-2022 走看看