创建一个微信小程序的在线购物商城应用,以下是一个详细的代码案例。这个案例主要包括以下几个模块:
- 用户登录模块:用户通过手机号码登录或注册新账号。
- 商品列表模块:展示商城中的商品列表,用户可以通过搜索或浏览进行商品选择。
- 购物车模块:用户可以将商品添加到购物车中,查看和编辑购物车中的商品。
- 订单模块:用户可以创建和查看订单,并进行支付。
- 个人中心模块:用户可以查看和编辑个人信息,以及查看订单历史记录。
这里假设你已经有一个后端API,提供了相应的接口。下面是前端小程序的代码实现。
1. 用户登录模块
1.1 登录界面
在pages
目录下新建一个login
目录,在该目录下新建login.wxml
和login.wxss
文件,代码如下:
login.wxml
<view class="container">
<text>手机号:</text>
<input bindinput="onPhoneInput" />
<button bindtap="onLogin">登录</button>
</view>
login.wxss
.container {
margin-top: 200rpx;
text-align: center;
}
1.2 登录逻辑
在pages/login
目录下新建login.js
文件,代码如下:
Page({
data: {
phone: ''
},
onPhoneInput(e) {
this.setData({
phone: e.detail.value
});
},
onLogin() {
// 调用后端API进行登录验证
wx.request({
url: 'https://api.example.com/login',
method: 'POST',
data: {
phone: this.data.phone
},
success(res) {
const token = res.data.token;
// 将token存储到本地
wx.setStorageSync('token', token);
// 跳转到商品列表页
wx.navigateTo({
url: '/pages/goodsList/goodsList'
});
}
});
}
});
1.3 注册逻辑
在pages/login
目录下新建register.js
文件,代码如下:
Page({
data: {
phone: ''
},
onPhoneInput(e) {
this.setData({
phone: e.detail.value
});
},
onRegister() {
// 调用后端API进行注册
wx.request({
url: 'https://api.example.com/register',
method: 'POST',
data: {
phone: this.data.phone
},
success(res) {
const token = res.data.token;
// 将token存储到本地
wx.setStorageSync('token', token);
// 跳转到商品列表页
wx.navigateTo({
url: '/pages/goodsList/goodsList'
});
}
});
}
});
2. 商品列表模块
2.1 商品列表界面
在pages
目录下新建一个goodsList
目录,在该目录下新建goodsList.wxml
和goodsList.wxss
文件,代码如下:
goodsList.wxml
<view class="container">
<input bindinput="onSearchInput" />
<button bindtap="onSearch">搜索</button>
<view class="list">
<block wx:for="{{ goods }}" wx:key="index">
<view class="item">
<image src="{{ item.image }}" mode="aspectFit" />
<text>{{ item.name }}</text>
<text>{{ item.price }}</text>
<button bindtap="onAddToCart" data-id="{{ item.id }}">添加到购物车</button>
</view>
</block>
</view>
</view>
goodsList.wxss
.container {
margin-top: 20rpx;
text-align: center;
}
.list {
display: flex;
flex-wrap: wrap;
}
.item {
width: 200rpx;
margin: 20rpx;
text-align: center;
border: 1rpx solid #eee;
padding: 10rpx;
}
2.2 商品列表逻辑
在pages/goodsList
目录下新建goodsList.js
文件,代码如下:
Page({
data: {
goods: []
},
onSearchInput(e) {
this.setData({
keyword: e.detail.value
});
},
onSearch() {
// 调用后端API进行商品搜索
wx.request({
url: 'https://api.example.com/search',
method: 'GET',
data: {
keyword: this.data.keyword
},
success(res) {
const goods = res.data.goods;
this.setData({
goods: goods
});
}
});
},
onAddToCart(e) {
const goodsId = e.currentTarget.dataset.id;
// 调用后端API将商品添加到购物车
wx.request({
url: 'https://api.example.com/cart/add',
method: 'POST',
data: {
goodsId: goodsId
},
success(res) {
wx.showToast({
title: '添加成功'
});
}
});
}
});
3. 购物车模块
3.1 购物车界面
在pages
目录下新建一个cart
目录,在该目录下新建cart.wxml
和cart.wxss
文件,代码如下:
cart.wxml
<view class="container">
<block wx:for="{{ cart }}" wx:key="index">
<view class="item">
<image src="{{ item.image }}" mode="aspectFit" />
<text>{{ item.name }}</text>
<text>{{ item.price }}</text>
<button bindtap="onRemoveFromCart" data-id="{{ item.id }}">删除</button>
</view>
</block>
<view class="total">
<text>总计:{{ total }}</text>
<button bindtap="onCheckout">结算</button>
</view>
</view>
cart.wxss
.container {
margin-top: 20rpx;
text-align: center;
}
.item {
display: flex;
align-items: center;
justify-content: center;
margin: 20rpx;
text-align: center;
border: 1rpx solid #eee;
padding: 10rpx;
}
.total {
display: flex;
align-items: center;
justify-content: center;
}
3.2 购物车逻辑
在pages/cart
目录下新建cart.js
文件,代码如下:
Page({
data: {
cart: [],
total: 0
},
onLoad() {
// 调用后端API获取购物车数据
wx.request({
url: 'https://api.example.com/cart',
method: 'GET',
success(res) {
const cart = res.data.cart;
this.setData({
cart: cart
});
this.calculateTotal();
}
});
},
onRemoveFromCart(e) {
const goodsId = e.currentTarget.dataset.id;
// 调用后端API将商品从购物车移除
wx.request({
url: 'https://api.example.com/cart/remove',
method: 'POST',
data: {
goodsId: goodsId
},
success(res) {
wx.showToast({
title: '删除成功'
});
this.setData({
cart: this.data.cart.filter(item => item.id !== goodsId)
});
this.calculateTotal();
}
});
},
calculateTotal() {
const total = this.data.cart.reduce((sum, item) => {
return sum + item.price;
}, 0);
this.setData({
total: total
});
},
onCheckout() {
// 调用后端API创建订单
wx.request({
url: 'https://api.example.com/order/create',
method: 'POST',
success(res) {
wx.showToast({
title: '订单创建成功'
});
// 跳转到订单页
wx.navigateTo({
url: '/pages/order/order'
});
}
});
}
});
4. 订单模块
4.1 订单界面
在pages
目录下新建一个order
目录,在该目录下新建order.wxml
和order.wxss
文件,代码如下:
order.wxml
<view class="container">
<view class="list">
<block wx:for="{{