微信小程序微商城(五):动态API实现商品详情页(下)

字母哥的博客 2018-06-25 17:34:47 ⋅ 694 阅读

上一篇:微信小程序微商城(四):动态API实现商品详情页(上)

看效果


开发计划

1、加入购物车悬浮框、商品数量、价格计算、收藏和加入购物车功能开发
2、调用加入购物车API加入购物车

根据商品ID获取商品详情API数据模型

访问:https://100boot.cn/ 选择微商城案例,如下图所示:



下方还有详细的数据模型可以查看哦!

detail.wxml

<!-- 底部悬浮栏 -->
<view class="detail-nav">  <image bindtap="toCar" src="../../images/cart1.png" />    <view class="line_nav"></view>   <image bindtap="addLike" src="{{isLike?'../../images/enshrine_select.png':'../../images/enshrine.png'}}" />  <button data-goodid="1"  class="button-green" bindtap="toggleDialog" >加入购物车</button>  <button class="button-red" bindtap="immeBuy" formType="submit">立即购买</button></view><!--加入购物车-->#template模板引用<import src="../template/template.wxml" /><view class="dialog {{ showDialog ? 'dialog--show' : '' }}">      <view class="dialog__mask" bindtap="toggleDialog" />      <view class="dialog__container">        <view class="row">          <icon bindtap="closeDialog" class="image-close" type="cancel" size="25"/>          <image class="image-sku" src="{{goods.imgUrl}}"></image>          <view class="column">            <text class="sku-price">¥{{goods.totalMoney}}</text>            <text class="sku-title">销量 {{goods.buyRate}} 件</text>            <text class="sku-title">商品编码:{{goods.goodsId}}</text>          </view>        </view>        <text class="border-line"></text>        <view class="row">          <text >购买数量</text>          <view class="quantity-position">              <!-- <template is="quantity"  data="{{ ...item,index:index}}" />  -->               <template is="quantity" data="{{ ...goods,index:1}}" />          </view>        </view>        <text class="border-line"></text>        <button data-goodid="{{goods.goodsId}}" class="button-addCar" bindtap="addCar" formType="submit">确定</button>      </view>    </view>

detail.wxss

#template 模板引用
 @import "../template/template.wxss"; 
/* sku选择 */
.dialog__mask {  
   position: fixed;  
   top: 0;  
   left: 0;  
   right: 0;  
   bottom: 0;  
   z-index: 10;  
   background: rgba(0, 0, 0, 0.7);  
   display: none; }
.dialog__container {  
   position: fixed;  
   bottom: 0;  
   width: 100%;  
   background: white;  transform: translateY(150%);  
   transition: all 0.4s ease;  
   z-index: 11; }
.dialog--show .dialog__container {  
   transform: translateY(0); }
.dialog--show .dialog__mask {  
   display: block; }
.image-sku {  
   width: 200rpx;  
   height: 200rpx;  
   z-index: 12;  
   position: absolute;  
   left: 20px;  
   top: -30px;  
   border-radius: 20rpx; }
.image-close {  
   width: 40rpx;  
   height: 40rpx;  
   position: fixed;  
   right: 20rpx;  
   top: 10rpx; }
.column {  
   display: flex;  
   flex-direction: column; }
.row {  
   display: flex;  
   flex-direction: row;  
   align-items: center; }
.border-line {  
   width: 100%;  
   height: 2rpx;  
   display: inline-block;  
   margin: 30rpx 0rpx;  
   background-color: gainsboro;  
   text-align: center; }
.sku-title {  
   position: relative;  
   left: 300rpx;  
   margin: 1rpx; }
.sku-price {  
   color: red;  
   position: relative;  
   left: 300rpx;  
   margin: 1rpx; }
.row .quantity-position {  
   position: absolute;  
   right: 30rpx;  
   display: flex;      justify-content: center;      flex-direction: column;   }

detail.js

// 收藏-修改收藏状态
  addLike() {    
   this.setData({      
   isLike: !this.data.isLike    }); ajax.request({      
   method: 'GET',      
   url: 'collection/addShopCollection?key=' + utils.key + '&goodsId=' + goodsId,      
   success: data => {        
   console.log("收藏返回结果:" + data.message)        wx.showToast({          
           title: data.message,          
           icon: 'success',          
           duration: 2000        });      }    })  },
   // 立即购买-待开发  immeBuy() {    wx.showToast({      
       title: '购买成功',      
       icon: 'success',      
       duration: 2000    });  },
   // 跳到购物车-待开发  toCar() {    wx.navigateTo({      
       url: '../cart/cart'    })  }, /**   * sku 弹出   */  toggleDialog: function () {    
   this.setData({      
      showDialog: !this.data.showDialog    });  },  
   /**   * sku 关闭   */  closeDialog: function () {    
   console.info("关闭");    
   this.setData({      
       showDialog: false    });  },
   /* 减数 */  delCount: function (e) {    
   console.log("刚刚您点击了减1");    
   var count = this.data.goods.count;    // 商品总数量-1    if (count > 1) {      
       this.data.goods.count--;    }    
   // 将数值与状态写回      this.setData({      
       goods: this.data.goods    });    
   this.priceCount();  },  
   /* 加数 */  addCount: function (e) {    
   console.log("刚刚您点击了加1");    
   var count = this.data.goods.count;    
   // 商品总数量-1      if (count < 10) {      
       this.data.goods.count++;    }    
   // 将数值与状态写回      this.setData({      
       goods: this.data.goods    });    
   this.priceCount();  },  
   //价格计算  priceCount: function (e) {    
   this.data.goods.totalMoney = this.data.goods.price * this.data.goods.count;    
   this.setData({      
       goods: this.data.goods    })  },
   /* 减数 */  delCount: function (e) {    
   console.log("刚刚您点击了减1");    
   var count = this.data.goods.count;    // 商品总数量-1    if (count > 1) {      
       this.data.goods.count--;    }    
   // 将数值与状态写回      this.setData({      
       goods: this.data.goods    });    
   this.priceCount();  },  
   /* 加数 */  addCount: function (e) {    
   console.log("刚刚您点击了加1");    
   var count = this.data.goods.count;    // 商品总数量-1      if (count < 10) {      
       this.data.goods.count++;    }    
   // 将数值与状态写回      this.setData({      
       goods: this.data.goods    });    
   this.priceCount();  },  
//价格计算  priceCount: function (e) {    
   this.data.goods.totalMoney = this.data.goods.price * this.data.goods.count;    
   this.setData({      
       goods: this.data.goods    })  },
/**   * 加入购物车   */  addCar: function (e) {    
   var count = this.data.goods.count;    ajax.request({      
       method: 'GET',      
       url: 'carts/addShopCarts?key=' + utils.key + '&goodsId=' + goodsId + '&num=' + count,      
       success: data => {        
       console.log("加入购物车返回结果:" + data.message)        wx.showToast({          
           title: '加入购物车成功',          
           icon: 'success',          
           duration: 2000        });      }    }) }

template模板使用

由于再加上template的源码太长了,大家可以直接下载源码使用就好。

备注

微信小程序微商城系列 都是通过https 动态获取数据并展示的,建议从第一篇开始阅读。大家多多支持本系列文章会继续更新下去,谢谢各位!

微信小程序微商城系列

微信小程序微商城:开发者key获取
微信小程序微商城(一):https框架搭建并实现导航功能
微信小程序微商城(二):电商首页轮播、分类导航和新品特卖实现
微信小程序微商城(三):电商首页福利专场无限下拉刷新动态API数据实现
微信小程序微商城(四):动态API实现商品详情页(上)

关注我们

如果需要源码可以关注“IT实战联盟”公众号并留言(微商城源码,5个字会收到源码下载地址,一定要看源码里面的操作手册会少走很多弯路),也可以加入交流群和作者互撩哦~~~


全部评论: 0

    我有话说:

    程序商城(四):动态API实现商品详情(上)

    1、实现商品详情页面布局(这篇实现3个模块,头部商品图片轮播、商品价格和商品描述、商品详情展示) 2、根据用户点击不同的商品请求API动态加载数据

    程序商城(七):动态API实现商品分类

    程序商品分类页面布局并且调用动态API获取数据并加载

    程序电商实战-商品详情(上)

    先看一今天要实现程序商品详情吧!

    程序商城(六):动态API实现新品特卖商品流式布局

    实现新品特卖商品列表布局、调用动态API获取数据并加载和点击商品跳转商品详情

    程序商城(三):电商首福利专场无限拉刷新动态API数据实现

    电商首第5个模块-福利专场,通过https调用API数据模型来实现无限拉刷新......

    程序实现商品数量加减

    这是一个用程序原生代码实现的数量加减demo,主要是用于商品购物车或者商品详情修改数量使用

    程序电商实战-商品详情加入购物车(

    今天会接着上一篇开始写商品详情加入购物车的部分,直接看效果......

    程序商城(八):缓存实现商品购物车功能

    商品详情商品信息放入缓存,购物车页面读取缓存获取商品信息,购物车商品计算和删除缓存商品

    程序商城(九):授权并实现个人中心页面页面

    实现商城授权并获取用户信息和个人中心页面布局

    程序电商实战-首

    上一篇:程序电商实战-首(上)好了,上一期我们把首搜索、导航栏和广告轮播给做完了,那么接下来会继续

    程序-Image的widthFix属性和rpm尺寸的使用

    在做程序商品详情商品详情是图片集合,渲染完成后发现图片加载的很不自然

    程序抖音实战-首

    抖音程序动态数据获取

    程序实战篇:商品属性联动选择(案例)

    本期的程序实战篇来做一个电商网站经常用到的-商品属性联动选择的效果,素材参考了一点点

    程序电商实战-商品列表流式布局

    今天给大家分享一下程序商品列表的流式布局方式,根据文章内容操作就可以看到效果哦~~~

    程序电商实战-首(上)

    上一篇:程序电商实战-入门篇 嗨,大家好!经过近两周的精心准备终于开始程序电商实战之路喽。那么最终会做成什么样呢?好了,不啰嗦了 我们先看首长什么样吧!   首效果图

    程序商城(二):电商首轮播、分类导航和新品特卖实现

    本案例所有模块都为https动态调用API数据服务获得

    程序商城(一):https框架搭建并实现导航功能

    本文将带领大家搭建https的程序框架,并实现动态获取数据展示效果!

    程序抖音实战-首(上)

    你也可以用程序编写一个抖音

    程序-template使用:实现购物车商品数量加减功能

    上一篇我们实现了购物车功能,里面有用到template模板功能来实现购物车商品数量加减和价格计算功能......