慕尚花坊小程序

一、app.js文件配置各项页面路径

{

  "pages": [

    "pages/index/index",

    "pages/list/list",

    "pages/hua/hua",

    "pages/cart/cart",

    "pages/category/category",

    "pages/my/my",

    "pages/detail/detail",

    "pages/order/order"

  ],

  "window": {

    "navigationBarTextStyle": "white",

    "navigationBarTitleText": "幕尚花坊",

    "navigationBarBackgroundColor": "#f3514f"

  },

  "tabBar": {

    "color": "#252933",

    "selectedColor": "#FF734C",

    "list": [

      {

        "pagePath": "pages/index/index",

        "text": "首页",

        "iconPath": "assets/tabbar/index.png",

        "selectedIconPath": "assets/tabbar/index-active.png"

      },

      {

        "pagePath": "pages/category/category",

        "text": "分类",

        "iconPath": "assets/tabbar/cate.png",

        "selectedIconPath": "assets/tabbar/cate-active.png"

      },

      {

        "pagePath": "pages/cart/cart",

        "text": "购物车",

        "iconPath": "assets/tabbar/cart.png",

        "selectedIconPath": "assets/tabbar/cart-active.png"

      },

      {

        "pagePath": "pages/my/my",

        "text": "我的",

        "iconPath": "assets/tabbar/my.png",

        "selectedIconPath": "assets/tabbar/my-active.png"

      }

二、首页轮播图和广告区域

轮播图区域:商品导航区域、活动宣传区域、猜你喜欢区域、人气推荐区域。

       在实现这些功能之前,我们需要先获取数据,在获取数据以后,然后进行页面的渲染,同时完成进行功能的开发。

       因为需要同时获取 5 个接口的数据,所以我们使用并发请求来实现。这样能够提升页面的渲染速度。

实现步骤:1、封装接口请求函数,可以一个个封装,也可以直接使用 `all` 方法进行封装

                  2. 在页面 .js 文件中导入封装的接口 `API` 函数

                  3. 在 `onLoad` 钩子函数中调用方法,获取首页轮播图数据

首页格式

.index-container {

    position: relative;

    background-color: whitesmoke;

// 首页背景图

    .window-bgc {

        height: 200rpx;

        width: 100%;

        background-color: #f3514f;

        border-radius:0 0 25% 25%;

        position:absolute;

    }

    .adver {

        display: flex;

        width: 96%;

        margin: 0 auto;

        border-radius: 18rpx;

        background-color:white;

        .adver-left {

            width: 50%;

            padding: 8rpx 8rpx 0rpx 8rpx;

        }

        .adver-right {

            width: 50%;

            padding: 8rpx 8rpx 0rpx 6rpx;

            // 选中第二张图片

            view:last-child {

                padding-top: 6rpx;

            }  

        }

        image{

            width: 100%;

        }

    }

}

首页页面图

商品列表

格式

副页

<!-- pages/hua/hua.wxml -->

<view class="container">

  <!-- 商品大图 -->

  <view class="banner-img">

    <image src="../../assets/images/floor-img.jpg" mode="" />

  </view>

  <!-- 商品的基本信息 -->

  <view class="content">

    <!-- 商品价钱 -->

    <view class="price">

      <view class="price-num">¥299</view>

      <view class="price-origin-num">¥399</view>

    </view>

    <!-- 商品标题 -->

    <view class="title">

      亲爱的/情人节网红款/19支玫瑰

    </view>

    <!-- 详细信息  -->

    <view class="info">

      亲爱的/情人节网红款/19支玫瑰亲爱的/情人节网红款/19支玫瑰亲爱的/情人节网红款/19支玫瑰

    </view>

  </view>

  <!-- 商品的详细信息 -->

  <view class="detail">

    <image src="../../assets/images/floor-img.jpg" mode="" />

    <image src="../../assets/images/floor-img.jpg" mode="" />

    <image src="../../assets/images/floor-img.jpg" mode="" />

  </view>

  <!-- 商品的底部导航栏 -->

  <van-goods-action>

  <navigator url="/pages/index/index" open-type="switchTab">

    <van-goods-action-icon icon="wap-home-o" text="首页" />

  </navigator>

  <van-goods-action-icon icon="chat-o" text="客服" dot />

  <van-goods-action-icon icon="cart-o" text="购物车" info="5" />

  <van-goods-action-icon icon="shop-o" text="店铺" />

  <van-goods-action-button text="加入购物车" type="warning" bind:tap="handelSheet" />

  <van-goods-action-button text="立即购买" bind:tap="handelSheet" />

</van-goods-action>

  <!-- 自定义面板 -->

  <!-- bind:close为面板关闭事件 -->

  <van-action-sheet show="{{ show }}" bind:close="onClose">

  <view class="sheet-container">

  <view class="img">

    <image src="../../assets/images/floor-img.jpg" mode="" />

  </view>

    <view class="baseInfo">

    <view class="title">亲爱的/情人节网红款/19支玫瑰</view>

    <view class="buy">

    <view class="price">

    <view class="symbol">¥</view>

    <view class="num">100</view>

    </view>

    <view class="buyBtn">

    <van-stepper value="{{ 1 }}" bind:change="onChange" />

    </view>

    </view>

    </view>

  </view>

  <view class="textArea">

  <view class="title">祝福语</view>

  <textarea value="" placeholder="请输入你的祝福" class="box" />

  </view>

  <view class="btn">

  <van-button type="primary" round size="large">主要按钮</van-button>

</view>

  </van-action-sheet>

</view>

进行购物

三、第二副分类页面

商品分类是一个单独的 `tabBar` 页面,当点击分类 `tabBar`  的时候就能够进入商品分类页面。

在商品分类页面我们主要实现三个功能:

1. 一级分类的渲染

2. 一级分类的切换

3. 二级分类的渲染

       根据接口文档封装接口 `API` 函数,然后在页面调用 `API` 函数获取分类的数据,在获取到数据以后,使用后端返回的数据对一级、二级分类进行渲染。

        在项目根目录下 `api` 目录下新建 `category.js` 文件,用来管理分类页面接口请求,在该文件中导入封装的网络请求模块,根据接口文档,创建获取分类数据的 `API` 函数 `reqCategoryData`, 在 `/pages/category/category.js` 中导入封装好的获取分类数据的 `API` 函数, 页面数据需要在页面加载的时候进行调用,因此需要在 `onLoad` 钩子函数中调用  `reqCategoryData` 方法,在获取到数据以后,使用后端返回的数据对页面进行渲染。

分类页面格式

.category-container {

    display: flex;

// 左侧

    .category-left-view {

        width: 220rpx;

        background-color: white;

        height: 100vh;

        .left-view-item {

            font-size: 26rpx;

            // 文本的排列方式

            text-align: center;

            line-height: 99rpx;

        }

        .active {

            color: #f3514f;

            // &表示当前标签

            // ::before是伪元素选择器

            // 在指定元素前添加内容

            &::before {

                content: "";

                width: 6rpx;

                height: 66rpx;

                background-color: #f3514f;

                display: block;

                position: absolute;

                // 沿着Y轴平移

                transform: translateY(25%);

            }

        }

    }

    // 右侧 

    .category-right-view {

        &::before {

            content: "";

            width: 6rpx;

            height: 100vh;

            background-color: pink;

            display: block;

            position: absolute;

        }

        .right-view-item {

            width: 33%;

            float: left;

            margin-top: 30rpx;

            .navigator {

                display: flex;

                // 设置纵轴方向上排列

                flex-direction: column;

                align-items: center;

            }

            .goods_item_name {

                font-size: 26rpx;

                margin-top: 18rpx;

            }

        }

    }

    image {

        width: 90rpx;

        height: 90rpx;

    }

}

四、购物车页面

1、购物车-封装购物车接口 API

在这一节将购物车所有的接口封装成接口 API 函数,给 `Stepper` 步进器组件,通过`value`设置输入值,同时绑定`change`事件,并将值同步到 `data` 中, 根据接口文档,导入封装的购物车的接口 API,点击弹框按钮的时候,判断点击的加入购物车还是立即购买,执行不同的操作。

页面代码

<view class="container">

  <!-- 购物车列表区域 -->

  <view class="carList-container" wx:if="{{ carList.length}}">

    <view class="carList-container-cell" wx:for="{{ carList }}" wx:key="index">

      <van-swipe-cell right-width="{{ 65 }}" left-width="{{ 65 }}">

        <view slot="left" class="van-swipe-cell__left">选择</view>

        <van-cell-group>

          <view class="goods-info">

            <view class="left">

              <van-checkbox value="{{ false }}" checked-color="#e60017" bind:change="onChange">

              </van-checkbox>

            </view>

            <view class="mid">

              <image src="../../assets/images/floor-img.jpg" mode="" />

            </view>

            <view class="right">

              <view class="title">【11支红玫瑰】买花就送女友送爱人送老婆520</view>

              <view class="buy">

                <view class="price">¥99.99</view>

                <view class="buy-btn">

                  <van-stepper value="{{ 1 }}" bind:change="onChange" />

                </view>

              </view>

            </view>

          </view>

        </van-cell-group>

      <view slot="right" class="van-swipe-cell__right">删除</view>

      </van-swipe-cell>

    </view>

  </view>

  <van-empty description="还没有商品,快去添加吧!" wx:else="">

    <navigator url="">

      <van-button type="danger" round>去购物</van-button>

    </navigator>

    <navigator url="">

      <van-button type="danger" round>去登入</van-button>

    </navigator>

  </van-empty>

  <!-- 提交订单栏区域 -->

  <van-submit-bar price="{{ 3050 }}" button-text="提交订单" bind:submit="onClickButton" tip="{{ true }}">

    <van-checkbox value="{{ true }}" checked-color="#e60017" bind:change="onChange">

      全选

    </van-checkbox>

  </van-submit-bar>

</view>

格式

.container {

  background-color: whitesmoke;

  height: 100vh;

}

.carList-container{

  .carList-container-cell {

    .goods-info {

      display: flex;

      background-color: white;

      border-radius: 16rpx;

      margin: 20rpx 20rpx 10rpx 20rpx;

      padding: 24rpx 16rpx;

      .left{

        display: flex;

        align-items: center;

      }

      .mid {

        width: 300rpx;

        height: 300rpx;

        image {

          width: 100%;

          height: 100%;

        }

      }

      .right {

        display: flex;

        flex-direction: column;

        height: 300rpx;

        justify-content: space-between;

        padding-left: 20rpx;

        .title {

          font-size: 26rpx;

        }

        .buy {

          display: flex;

          justify-content: space-between;

          .price {

            font-size: 30rpx;

            color: #fa4126;

          }   }}

    }  

  }}

.van-empty__bottom{

  display: flex;

  height: 250rpx;

  flex-direction: column;

  justify-content: space-between;

}

5、我的服务页面

<view class="container">

<!-- 顶部展示图 -->

  <view class="top-show">

    <image src="../../assets/images/banner.jpg" mode="widthFix" class="top-show-img" />

  </view>

 <!-- 白色背景面板 -->

  <view class="bottom-show">

    <!-- 未登录面板 -->

    <view class="user-container">

      <!-- 左边头像区域 -->

      <view class="avatar-container">

        <image src="../../assets/images/avatar.png" class="avatar" mode="" />

      </view>

      <!-- 右边文字区域 -->

      <view class="no-login">

        <text>未登录</text>

        <text>点击授权登录</text>

      </view>

    </view>

    <!-- 已登陆面板 -->

  </view>

<!-- 订单面板 -->

  <view class="order">

    <!-- 订单面板标题部分 -->

    <view class="order-title">

      <text class="title">我的订单</text>

      <text class="more">查看更多></text>

    </view>

    <!-- 订单面板内容部分 -->

    <view class="order-content">

      <view class="order-content-item" wx:for="{{orderItem}}" wx:key="index">

        <!-- item指数组内的项 -->

        <navigator url="/pages/order/order">

          <view class="iconfont {{item.iconfont}}"></view>

          <text>{{ item.title }}</text>

        </navigator>

      </view>

    </view>

  </view>

<!-- 关于售前售后服务面板 -->

  <view class="after-scale">

    <view class="order-title-wrap">

      <text class="title">关于售前售后服务</text>

    </view>

    <view class="after-scale-item">

      <view class="iconfont icon-kefufenxiermaikefu"></view>

      <text>可与小程序客服实时聊天或电话咨询</text>

    </view>

    <view class="after-scale-item">

      <view class="iconfont icon-shijian"></view>

      <text>小程序客服工作时间为: 8:30 ~ 20:30</text>

    </view>

    <view class="after-scale-item">

      <view class="iconfont icon-dizhiguanli"></view>

      <text>鲜花制作完毕情况下暂不支持退款</text>

    </view>

    <view class="after-scale-item">

      <view class="iconfont icon-zhangben"></view>

      <text>鲜花可以提前7-15天预订重大节假日不支持定时配送</text>

    </view>

  </view>

 <!-- 底部面板 -->

  <view class="info-footer"> 智谷星图技术支持 </view>

</view>

页面展示

页面格式

.container {

    background-color: whitesmoke;

    height: 100vh;

    .top-show {

        width: 100%;

        height: 360rpx;

        .top-show-img {

            width: 100%;

            height: 100%;

        }

    }

    .bottom-show {

        position: relative;

        top:-100rpx;

        border-radius: 20rpx;

        margin: 0 auto;

        width: 96%;

        background-color: white;

        .user-container {

            display: flex;

            align-items: center;

            .avatar-container{

                margin: 20rpx;

                .avatar {

                    height: 120rpx;

                    width: 120rpx;

                }

            }

            .no-login {

                display: flex;

                flex-direction: column;

                font-size: 24rpx;

                color: gray;

                text:first-child {

                    font-size: 28rpx;

                }

            }

        }

    }

    .order {

        border-radius: 20rpx;

        margin: 0 auto;

        width: 96%;

        background-color:white;

        margin-top: -80rpx;

        .order-title {

            display: flex;

            // justify-content: 设置主轴上的排列方式;

            justify-content: space-between;

            padding: 40rpx;

            .more {

                font-size: 30rpx;

                color: #ccc;

            }

        }

        .order-content {

            display: flex;

            justify-content: space-evenly;

            text-align: center;

            padding-bottom: 24rpx;

            .iconfont {

                font-size: 60rpx;

            }

            text {

                font-size: 26rpx;

            }

        }

    }

    .after-scale {

        border-radius: 20rpx;

        margin: 0 auto;

        width: 96%;

        background-color:white;

        margin: 20rpx;

        padding-bottom: 25rpx;

        .order-title-wrap {

            padding: 20rpx 0 0 20rpx;

        }

        .after-scale-item {

            display: flex;

            margin: 30rpx 25rpx;

            text {

                font-size: 25rpx;

                color: #999;

                margin-left: 20rpx;

            }

            .iconfont {

                color: #a2b364;

            }

        }

    }  

.info-footer {

        text-align: center;

        font-size: 24rpx;

        color: #999;

        margin-top: 30rpx;

    }}

六、慕尚花坊小程序介绍

1、项目涵盖电商项目常见功能模块,包含:项目首页、商品分类、商品列表、商品详情、 用户管理收货地址、 购物车、 结算支付、订单管理。

2、项目使用原生小程序进行搭建开发

小程序内置组件:采用小程序内置组件 结合 `Vant` 组件库实现页面结构的搭建。

项目中使用了 css 拓展语言 Scss 绘制页面的结构。

小程序内置`API`:交互、支付、文件上传、地图定位、网络请求、预览图片、本地存储等

小程序分包加载:降低小程序的启动时间、包的体积,提升用户体验度。

小程序组件开发:将页面内的功能模块抽象成自定义组件,实现代码的复用。

网络请求封装:request 方法封装、快捷方式封装、响应拦截器、请求拦截器。

骨架屏`组件:利用开发者工具提供了自动生成骨架屏代码的能力,提高了整体使用体验和用户满意度。

 `UI` 组件库:使用 `Vant` 组件库实现小程序 结构的绘制。

 `LBS`:使用腾讯地图服务进行 `LBS`逆地址解析,实现选择收货地址功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值