1.页面代码
首页
<view class="index-container">
<!-- 首页背景图 -->
<view class="window-bgc"></view>
<!-- 页面主体部分 -->
<view class="container">
<!-- 轮播图区域 -->
<banner />
<!-- 导航区域 -->
<entrance />
<!-- 广告区域 -->
<view class="adver">
<view class="adver-left">
<navigator url="">
<image src="../../assets/images/love.jpg" mode="widthFix" />
</navigator>
</view>
<view class="adver-right">
<view>
<navigator url="">
<image src="../../assets/images/elder.jpg" mode="widthFix" />
</navigator>
</view>
<view>
<navigator url="">
<image src="../../assets/images/friend.jpg" mode="widthFix" />
</navigator>
</view>
</view>
</view>
<!-- 商品列表 -->
<goods-list title="人气推荐"/>
<goods-list title="猜我喜欢"/>
<goods-card/>
</view>
</view>
//首页背景图
.window-bgc{
height: 200rpx;
position:absolute;
width:100%;
background-color: #f3514f;
border-radius:0rpx 0rpx 40% 40%;
}
.adver {
display: flex;
margin:0 auto;
width: 96%;
padding: 18rpx;
box-sizing: border-box;
background-color:rgb(177, 54, 54);
border-radius: 18rpx;
.adver-left{
width: 50%;
padding: 8rpx 8rpx 0rpx 8rpx;
}
.adver-right{
width: 50%;
padding: 8rpx 8rpx 0rpx 6rpx;
view:laat-child{
padding-top: 10rpx;
}
}
image{
width: 100%;
}
}
边边框框
position: relative;
.swiper{
height: 320rpx;
//设置圆角弧度
border-radius: 18rpx;
//设置溢出隐藏
overflow: hidden;
width: 95%;
//margin设置外边距
margin: 0 auto;
}
.swiper-item{
.img{
width: 100%;
height: 100%;
border-radius: 18rpx;
}
}
.indicator{
display: flex;
justify-content: center;
position: absolute;
bottom: 16rpx;
left: 0rpx;
right: 0rpx;
.rectangle{
width: 30rpx;
height: 6rpx;
background-color: #f3514f;
margin: 0 8rpx;
border-radius: 6rpx;
}
}
<!--components/goods-card/goods-card.wxml-->
<view class="goods_card_container">
<!-- 图片 -->
<navigator class="navigator_nav" url="/pages/goods/detail/detail?goodsId={{goodItem.id}}">
<image src="{{ goodItem.imageUrl }}" mode="widthFix" class="goods_img"/>
<!-- 详细信息 -->
<view class="goods_item_info">
<!-- 商品名称 -->
<text class="goods_item_info_name">{{ goodItem.name }}</text>
<!-- 商品描述 -->
<text class="goods_item_info_promo">{{ goodItem.floralLanguage }}</text>
<!-- 商品价格 -->
<view class="goods_item_info_bottom">
<view class="goods_item_info_price">
<text class="text">¥</text>{{ goodItem.price }}
</view>
<view class="goods_item_info_origin_price">
<text class="text">¥</text>{{goodItem.marketPrice}}
</view>
<!-- 加入购物车图片 -->
<view class="goods_item_info_btn">
<image class="goods_image" src="/static/images/buybtn.png" mode=""/>
</view>
</view>
</view>
</navigator>
</view>
2.分类页面
<!--pages/category/category.wxml-->
<view>
<view class="category-container">
<!-- 左侧的滚动视图区域 -->
<scroll-view class="category-left-view" scroll-y>
<!-- active:被选中的内容 -->
<view class="left-view-item {{ activeIndex === index ? 'active' : '' }}" wx:for="{{categoryList}}" wx:key="id" bindtap="updateAcitve" data-index="{{index}}">
{{ item.name}}
</view>
</scroll-view>
<!-- 右侧的滚动视图区域 -->
<scroll-view class="category-right-view" scroll-y>
<!-- 二级分类 -->
<view class="test">
<view wx:for="{{ 10 }}" wx:key="index" class="right-view-item">
<navigator class="navigator" url="">
<image class="" src="../../assets/images/cate-1.png" mode="" />
<text class="goods_item_name">真情告白</text>
</navigator>
</view>
</view>
</scroll-view>
</view>
</view>
3.购物车代码效果图
<!-- 购物车列表区域 -->
<view class="carList-container">
<view class="carList-container-cell">
<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枝红玫瑰】买玫瑰送老婆</view>
<view class="buy">
<view class="price">¥99.00</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-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>
<!--pages/goods/goods.wxml-->
<view class="container">
<!-- 商品大图 -->
<view class="banner-img">
<image src="../../assets/images/floor.jpg" mode="" />
</view>
<!-- 商品的基本信息 -->
<view class="content">
<!-- 商品标题 -->
<view class="title">亲爱的/情人节网红款/19枝</view>
<!-- 详细信息 -->
<view class=" info">情⼈节新品情⼈节新品情⼈节新品情⼈节新品</view>
<!-- 商品价格 -->
<view class="price">
<view class="price-num">¥299</view>
<view class="price-origin-num">¥399</view>
</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标签跳转到tabber栏 则需要加open-type -->
<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-button text="加入购物车" type="warning" bind:tap="handelSheet" />
<!-- handelSheel为点击按钮事件 -->
<van-goods-action-button text="立即购买" bind:tap="handelSheet" />
</van-goods-action>
<!-- 自定义面板 -->
<!-- bind:close为面板关闭事件 -->
<van-action-sheet show="{{ show }}" bind:close="onClose" position="bottom">
<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>
4.我的页面
代码
Page({
/**
* 页面的初始数据
*/
data: {
orderItem: [
{
url: '/pages/order/list/list',
title: '商品订单',
iconfont: 'icon-dingdan'
},
{
url:'/pages/order/list/list',
title:'礼品卡订单',
iconfont:'icon-lipinka'
},
{
url:'/pages/order/list/list',
title:'退款/售后',
iconfont:'icon-tuikuan'
}
]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})
.container {
background-color: rgba(245, 242, 242, 0.692);
height: 100vh;
.top-show {
width: 100%;
height: 360rpx;
.top-show-img {
width: 100%;
height: 100%;
}
}
.bottom-show {
position: relative;
top: -80rpx;
border-radius: 20rpx;
margin: 0 auto;
background-color: white;
width: 96%;
.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: 35rpx;
}
}
}
}
.order {
border-radius: 20rpx;
margin: 0 auto;
background-color: white;
width: 96%;
margin-top: -70rpx;
.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;
margin: 20rpx;
background-color: white;
height: 30%;
width: 96%;
margin-bottom: 25rpx;
.order-title-wrap {
padding: 20rpx 0 0 20rpx;
}
.after-scale-item {
display: flex;
margin: 30rpx 20rpx;
text {
font-size: 25rpx;
color: #999;
margin-left: 20rpx;
}
.iconfont {
color: #a2b364;
}
}
}
.info-footer {
text-align: center;
font-size: 30rpx;
color: #999;
}
}
<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" mode="" class="avatar" />
</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="{{item.url}}">
<view class="iconfont {{item.iconfont}}"></view>
<text>{{item.title}}</text>
</navigator>
</view>
</view>
</view>
<!-- 关于售前售后服务面板 -->
<view class="after-scale section">
<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>
5.总结
项目结构
慕尚花坊小程序采用了清晰的项目结构,主要包括以下几个部分:
- 页面:包含首页、分类页面、购物车页面、商品详情页面等。每个页面都对应了相应的
.
页面结构、页面样式和页面逻辑文件。 - 组件:为了提高代码的复用性,小程序中使用了大量的自定义组件,如导航栏、轮播图、商品列表等。
二、技术栈与特性
- 小程序原生开发:慕尚花坊小程序采用了微信小程序原生开发,充分利用了小程序框架提供的API和组件。
- 组件化开发:通过自定义组件,提高了代码的复用性和可维护性。
- 网络请求封装:对微信小程序的
wx.request
进行了封装,简化了网络请求的代码,提高了代码的健壮性。
三、代码实现细节
- 页面跳转与导航:
- 使用了
<navigator>
组件进行声明式导航,通过url
和open-type
属性实现页面间的跳转。
- 使用了
- 分类页面实现:
- 使用了
<scroll-view>
组件实现滚动视图,通过scroll-y
属性设置垂直滚动。
- 使用了
- 购物车页面实现:
- 使用了
<view>
组件结合wx:if
、wx:for
等指令实现购物车列表的展示。
- 使用了
- 商品详情页面实现:
- 使用了
<image>
、<text>
等组件展示商品的图片、名称、价格等信息。 - 提供了加入购物车和立即购买的功能。
- 使用了