【系】微信小程序云开发实战坚果商城-前端之购物车实现

第 2-5 课:前端之购物车实现

目录

所在路径 client/pages/cart/cart

1 购物车基本实现

cart.js data 数据如下,目前我们是没有调后台的数据,默认给出默认值方便页面的展示

data: {
    cartData: [{
        _id: "5cf526aaa87a1a18b6624ae6",
        product_description: "",
        product_img: "cloud://release-prod.7265-release-prod/product/product-nux@1.png",
        product_name: "花生 300g",
        product_price: 0.1,
        product_sell_price: 0.1,
        product_stock: 100,
        counts: 2,
        selectStatus: true
      },
      {
        _id: "5cf526aaa87a1a18b6624ae8",
        product_description: "",
        product_img: "cloud://release-prod.7265-release-prod/product/product-nux@2.png",
        product_name: "夏威夷果 120g",
        product_price: 0.1,
        product_sell_price: 0.1,
        product_stock: 100,
        counts: 2,
        selectStatus: true
      }
    ],
    selectedCounts: 0, //总的商品数
    selectedTypeCounts: 0, //总的商品类型数 
    account: 0.7
  },

cart.wxml

<!--pages/cart/cart.wxml-->
<view class='container'>
  <view class='cart-container' wx:for="{{cartData}}" wx:key="index">
    <!-- 商品左边 -->
    <view class='cart-left-container' bindtap="toggleSelect" data-id="{{item._id}}" data-status="{{item.selectStatus}}" >
        <view class="cart-select {{item.selectStatus?'selectActive':''}}"   >
            <icon  class='iconfont iconiconfontcheck'></icon>
        </view>   
    </view>
     <!-- 商品图片 -->
    <view class='cart-middle-container'>
        <image src="{{item.product_img}}"></image>
    </view>
    <view class='cart-right-container'>
        <view class='product-basic'> 
          <view class='product-title'>
            <text>{{item.product_name}}</text>
          </view>
          <view class='product-price'>
            <text>¥{{item.product_sell_price}}</text>
          </view>
        </view>  
        <view class='edit-contianer'>
           <view class='edit-num'>
              <icon class="iconfont {{item.counts==1?'disabled':''}} iconjian  "  bindtap="{{item.counts==1?'':'changeCounts'}}" data-id="{{item._id}}" data-type="cut"></icon>
              <view class='num'> <text>{{item.counts}}</text></view>
              <icon class='iconfont allow iconjia1' bindtap="changeCounts" data-id="{{item._id}}" data-type="add"></icon>
           </view>
           <view class='delete'>
            <icon class='iconfont iconshanchu'></icon>
           </view>
        </view>
    </view>
  </view>

 <!-- 全选  wx:if="{{checkall?'selectActive':''}}" -->
    <view class='bottom-container'> 
      <view class='all-select'>
        <view class="all-select-icon {{selectedTypeCounts==cartData.length?'selectActive':''}}" data-dealerIndex='{{dealerIndex}}' bind:tap='checkall'   data-status="{{selectedTypeCounts==cartData.length?'true':'false'}}" >
          <icon  class='iconfont iconiconfontcheck'></icon>
        </view>
        <view class='all-select-text'>
            <text >全选</text>
        </view>
      </view>
      <view class='total-container' >
        <view class='total-price'>
          <text>合计:</text>        
          <text class='price-symbol' >¥</text>
          <text class='price' >{{account}}</text>
        </view>
        <view class='accounts' bind:tap="confirm">
          <text>结算</text>
        </view>      
      </view>
    </view>
</view>

cart.wxss

/* pages/cart/cart.wxss */
@import '/common/css/iconfont.wxss';
.container{
  display: flex;
  flex-direction: column;
  align-items:flex-start;
  background-color: #fff;
  min-height: 100%;

}

.cart-container{
  display: inline-flex;
  border-bottom: 1rpx solid #bbb;
  width: 100%;

}
.cart-left-container{
  width: 100rpx;
  height: 180rpx;
  display: inline-flex;
  justify-content: center;
  align-items: center;
}
.cart-select{
  width:37rpx;
  height:37rpx;
  position: relative;
  border: 1rpx solid #bbb;
  border-radius: 50%;
}
.cart-select icon{
  position: absolute;
  top: -14rpx;
  font-size: 38rpx;
  color: #fff;
}
.selectActive{
  background:#FD5E53;
  border: 1rpx solid #FD5E53;
}

.cart-middle-container{
  width: 180rpx;
  height: 180rpx;
}
.cart-middle-container image{
  width: 100%;
  height: 100%;
}
.cart-right-container{
  display: inline-flex;
  flex-direction: column;
  justify-content: space-between;
  padding: 20rpx 0;
}
.product-basic{
  display: inline-flex;
  justify-content: space-between;
  width: 420rpx;
  color: #454553;
  font-size: 28rpx;
}
.edit-contianer{
  width: 420rpx;
  display: inline-flex;
  justify-content: space-between;
  align-items: flex-end;
}
.edit-num{
  display: inline-flex;
  flex-direction: row;
  justify-content: center;
  align-items: center;
  align-content: center;
}
.edit-num .iconfont{
  color: #454553;
  font-size: 50rpx;
  padding: 0 10rpx;
}
.delete .iconfont{
  color: #D5D5DB;
  font-size: 40rpx;
}
.edit-contianer .num{
  font-size: 36rpx;
  padding: 0 10rpx;
  color: #454553;
}
.edit-num .disabled{
    color: #D5D5DB;
}
/* 结算 */
.bottom-container{
  position: fixed;
  display: inline-flex;
  justify-content: space-between;
  background-color: #FFFFFF;
  width: 750rpx;
  height: 100rpx;
  bottom: 10rpx;
  border-top: 1rpx solid #bbb;
}
.all-select{
  display: inline-flex;
  align-content: center;
}
.all-select-text{
  padding-top: 28rpx;
  margin-left: 20rpx;
  font-size:28rpx;
  font-weight:400;
  color:rgba(36,36,36,1);
}
.all-select-icon{
  width:27rpx;
  height:27rpx;
  border-radius: 50%;
  margin: 35rpx 0 0 34rpx;
  position: relative;
  border: 1rpx solid #bbb;
}

.all-select-icon icon{
  position: absolute;
  top: -20rpx;
  left: -1rpx;
  color: #FFFFFF;
}
.total-container{
 display: inline-flex;
 align-items: center;
}
.total-price{
  margin-right: 12rpx;
}
.total-price >text{
  font-size:28rpx;
  color:rgba(252,44,29,1);
}
.total-price >text:first-child{
  color: #242424;
}
.price-symbol{
  font-weight:500;
 
  line-height:26rpx;
}
.price{
  font-weight:600;
  color:rgba(252,44,29,1);
  line-height:40rpx;
  margin-left: -5rpx;
}
.total-remarks{
  color: #848484;
  font-size:20rpx;
  text-align: right;
}
.accounts{
  width:140rpx;
  height:58rpx;
  background:rgba(253,94,83,1);
  border-radius:29rpx;
  text-align: center;
  margin-right: 16rpx;
}
.accounts text{
  font-size:28rpx;
  color:rgba(255,255,255,1);
  line-height:58rpx;
}
.selectActive{
  background:#FD5E53;
  border: 1rpx solid #FD5E53;
}

.delete-container{
  margin: 24rpx 25rpx 0 0 ;
  width:140rpx;
  height:58rpx;
  border-radius:29rpx;
  border:2rpx solid #FD5E53;
  text-align: center;
}
.delete-container text{
  width:56rpx;
  height:40rpx;
  font-size:28rpx;
  font-weight:400;
  color:#FD5E53;
  line-height:58rpx;
}
.null-container{
  text-align: center;
  margin-top: 45%;
}

/* 价格增加 */
.num-container{
  display: inline-flex;
  justify-content: center;
  align-items: center;
}
.num-container view{
  width:37rpx;
  height:37rpx;
}

.count{
  text-align: center;
  border:2rpx solid #D9D9D9; 
  border-radius: 50%;
}
.num{
  margin: 0 10rpx;
  text-align: center;
}
.num text{
  width:14rpx;
  height:44rpx;
  font-size:32rpx;
  font-weight:400;
  color:#000000;
  line-height:44rpx;
}
.count text{
  font-size: 18rpx;
}
.num-container .iconfont{
  font-size: 38rpx;
 
}
.noarrow{
  color: #D9D9D9;
}
.allow{
  color: #FD5E53;
}

运行效果如下:

1562420680094

部署不成功、图片无法显示、数据库无法获取,快速部署坚果商城,欢迎微信搜索「山间木匠」,后台回复关键字「坚果商城」获取最新PDF

源码地址

在搭建项目前,根据自己需要下载本系列文章的源代码

本项目源码地址:https://gitee.com/mtcarpenter/nux-shop

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
技术选型1,前端微信小程序原生框架cssJavaScript2,管理后台开发Cms内容管理统web网页3,数据后台小程序开发函数数据库存储 1,小程序端1-1,首页首页有以下几个功能点点餐菜单浏览排号等位拨打电话顶部轮播图搜索菜品这里点餐分两种1,可以设置直接点餐直接点餐:适合小型饭店,或者奶茶类的快餐店。直接就可以下单,不用识别桌号2,也可设置扫码点餐扫码点餐适合中大型饭店,可以区分桌号,方便管理我后面会教大家如何生成桌号二维码,只需要把对应桌号的二维码贴在餐桌上,用户点击 扫码点餐 识别二维码,即可获取到桌号信息。1-2,菜品浏览页菜品浏览分两种1,不带分类适合菜品少的时候2,带分类菜品多的时候,带分类更方便客户选择不带分类 带分类 1-3,搜索功能我们这里搜索有两个触发方式1,直接点击搜索图标2,点击键盘上的搜索键1-4,搜索结果,支持模糊查询如我这里只搜‘鱼’,那么菜品中所有包含鱼的都可以搜索到 1-5,购物首先菜品列表页可以直接添加商品到购物购物弹起后可以做如下操作1,增删单个菜品2,清空购物3,删除菜品这些操作都和菜品列表是联动的,也就是菜品列表和购物里增删个数,都是可以同步的。我会在项目预览章节的视频里做具体演示。1-6,下单页下单页就是确认订单后进行下单支付的。有以下功能1,点餐明细2,价格计算3,桌号地址4,就餐人数5,添加备注6,点击下单1-7,支付页支付页分两种方式1,模拟支付适合前期学习,毕业设计等演示类的场景。2,真实微信支付适合商用,但是使用微信支付必须要有营业执照,所以前期如果只是学习的话,建议使用模拟支付。 1-8,我的订单页我的订单页分以下几个状态1,新下单待上餐2,已上餐待评价3,订单完成4,订单取消1-9,提交评论页我们可以对店家进行评论。 1-10,评价列表页可以查看所有评价和自己的评价 1-11,排号等位可以看出,我们可以选择就餐人数,排大桌或者小桌。我这里已排小桌为例通过上图可以看出1,当前排号情况2,我的排号3,可以重新排号4,到号时会有到号提示后面我会把订阅消息功能加进来,这样到号后会有订阅消息提示。 1-12,个人中心个人中心分登录和未登录两种状态未登录已登录 1-13,微信授权登录小程序 2,后厨端和排号管理端2-1,后厨端主要供后厨的厨师使用1,可以查看当前新下单2,完成后可以操作菜品完成3,可以监听用户新下单4,有新订单时会有语音提示5,厨师登录页语音提示我会在视频课里具体演示厨师登录页 厨师管理页可以查看待制作订单用户新下单后,会有语音提示 2-2,排号管理页同样也有登录页,和上面厨师登录一样,这里重点看下排号管理页管理员可以查看当前排号情况,可以叫号。3,cms管理后台我们这里的可视化网页后台使用的时开发自带的cms(内容管理)3-1,登录页 3-2,管理后台我们可以在这里 1,添加轮播图,删除轮播图,修改轮播图2,添加菜品,删除菜品,修改菜品,上架下架菜品3,管理订单4,查看评价5,管理后厨和排号管理员6,查看排号数据  比如我查询某个用户的所有订单 查询所有新下单还未上菜的订单 还有更多的功能,我会在视频课里给大家用视频来演示,这样更直观。 4,数据库数据库我们这里用开发自带的数据库餐厅管理员查看趋势图

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值