电商小程序
一、效果展示
在线预览:










二、搭建项目环境
- 新建项目,选择uni-app的默认模板即可

- 在manifest.json中设置小程序的APPID

- 由于小程序项目不支持axios,原生的wx.request不支持拦截器,所以这里使用的第三方包@escook/request-miniprogram
安装方法:
1 | |
从原项目中复制图片资源到static文件夹下面
在uni.scss中定义全局颜色:
1 | |
三、TabBar和导航条
- tabBar
在pages文件夹下面创建四个页面home.vue、cate.vue、cart.vue、my.vue,具体配置如下:

在pages.json中增加如下配置:
1 | |
- 导航条
在pages.json中增加一下配置:
1 | |
四、实现首页
- 封装网络请求模块
- 新建工具文件夹utils,新建request.js:
1 | |
- 修改request-miniprogram的源码,当传入的url是一个完整的连接时,不需要组装baseUrl:
1 | |
- 新建一个api/index.js,用来封装各种请求:
1 | |
- 封装消息函数
创建utils/showMsg.js:
1 | |
- 在main.js中引入封装函数
1 | |
- 实现轮播图
1 | |
- 实现分类导航
1 | |
- 实现楼层
1 | |
五、实现分类页
- 实现左侧大类别
注意:这里必须设置内容高度为屏幕高度,滚动条才能显示出来
- 实现右侧二级类别渲染
- 切换页签滚动条置顶
1 | |
由于当值相同时,v-bind不会进行刷新,所以scrollTop要在0和1之间反复切换。
- 实现搜索
- 创建组件my-search.vue,实现一个假的搜索框,点击展开真正的搜索页面
从DCloud市场上安装组件uni-icons
1 | |
- 创建分包search.vue
从DCloud插件市场安装uni-search-box跟uni-tag插件
- 添加到cate.vue中
1 | |
- 添加到home.vue中,增加吸顶效果
1 | |
- 实现商品列表
- 在main.js中定义全局过滤器tofixed
1 | |
- 创建分包goods-list.vue:
1 | |
- 将goods抽出来作为一个单独的组件my-goods.vue:
- 实现上拉下拉刷新
在pages.json中配置上拉下拉刷新:
1 | |
修改分包goods-list.vue中的代码:
1 | |
- 实现商品详情
安装插件uni-goods-nav
创建分包goods-detail.vue
实现购物车全局数据共享
创建store/store.js:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75import Vue from 'vue'
import Vuex from 'vuex'
import moduleCart from './cart.js'
Vue.use(Vuex)
const store = Vuex.Store({
modules: {
m_cart: moduleCart
}
})
export default store
创建store / cart.js:
export default {
namespaced: true,
state: () => ({
cart: JSON.parse(uni.getStorageSync('cart') || '[]')
}),
mutations: {
addToCart(state, goods) {
const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
if (findResult) {
findResult.goods_count++
} else {
state.cart.push(goods)
}
this.commit('m_cart/saveToStorage')
},
saveToStorage(state) {
uni.setStorageSync('cart', JSON.stringify(state.cart))
}
},
getters: {
total(state) {
let c = 0
state.cart.forEach(x => c += x.goods_count)
return c
}
}
}实现购物车页签的角标刷新
创建mixins/tabbar_badge.js:
1 | |
六、实现购物车页
- 实现购物车清单
从DCloud下载插件uni-number-box
修改number-box的源码,支持归零时触发事件的功能
1 | |
- 解决number-box中数据不合法的问题:
1 | |
- 给组件my-goods.vue增加单选按钮跟数量框
- 在cart.vue中挂载my-goods,并增加左滑删除的功能:
从DCloud中获取插件uni-swipe-action
1 | |
- 在cart.js中增加数据刷新函数:
1 | |
- 实现添加地址
实现store/user.js中的逻辑:
1 | |
在store.js中挂载user.js:
1 | |
- 实现结算功能
在cart.js中实现总价、商品选中状态、商品数量的功能:
1 | |
- 无商品界面
1 | |
七、实现用户页
- 实现组件my-login.vue
1 | |
在user.js中保存用户的数据
1 | |
- 实现组件my-userinfo.vue
- 实现页面my.vue
1 | |
- 实现支付功能
- 未登录跳转到登录页
1 | |
在user.js中实现redirectInfo:
1 | |
在my-login.vue中实现跳回购物车页面的逻辑:
1 | |
- 创建订单并拉起微信支付
在my-settle.vue中:
1 | |
八、发布
- 发布小程序
- 点击”发行”-> “小程序-微信(仅限uni-app)”

- 在弹出框中填写包名跟AppID,点击发行按钮:

- 在控制台中查看编译进度

- 编译完成后,会自动打开一个新的微信开发者工具界面,此时点击工具栏上的上传按钮:

- 填写版本号跟备注后,点击上传按钮

- 上传完成后,会出现一下界面:

- 在小程序后台中的版本管理->开发版本中可以看到刚上传的小程序

- 在“开发管理”->“开发设置”中找到“服务器域名”,给后台API添加白名单[1]

- 先填写基本应用信息,然后点”提交审核”,审核完成后,点击”发布”,即可完成小程序的发布上线:

- 生成小程序码[2]
点击右上角“工具”->“生成程序码”,跟着指导输入相关信息即可生成程序码
- 生成小程序码[2]
- 发布apk
- 登录账户

- 在manifest.json中的基础配置,设置App的名称:

- 点”发行”->“原生App-云打包”:

- 勾选打包配置

- 查看打包进度:

- 在给出的地址中下载apk安装包,即可安装到手机上
参考:
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!