uni-app基于vue实现商城小程序

一、前言

参考“网易严选”小程序

项目采用传统vue项目结构,即uni-app打包和运行成小程序,使用HBuilder开发工具开发项目,通过运行启动“微信开发者工具”完成项目启动。

二、功能效果图

1.首页

 

2.分类

 3.活动

4.我的

 5.商品详情

6.购物车

 

三、代码实现

1.项目结构截图 uni-app,Hbuilder

2.首页源码

<template><view class="Header"><view class="myHeader"><view class="logos">网易严选</view><view class="searchs"><uni-icons type="search" size="30"></uni-icons><input type="text" name="" id=""placeholder="请输入想搜索的商品..." @tap="goShowContract"></view><view class="search-button"><view class="button" @click="onSearch">取消</view></view></view><!-- 轮播图 --><view class="backgroundBanner"><view class="banner"><swiper autoplay="true" :interval="2000" :duration="500" circular="true" indicator-active-color="#fff"easing-function="true" indicator-dots='true'><swiper-item v-for="(item, index) in bannerList" :key="index"><img :src="item.url"></img></swiper-item></swiper></view></view><!-- 分类部分 --><view class="cates"><view class="cate-item" v-for="(cateItem,cateIndex) in cateList" :key="cateIndex" @tap="selPage(cateItem)"><image :src="cateItem.cateUrl"></image><text>{{cateItem.cateName}}</text></view></view><hr><view class="time"><view class="timeTop"><view class="logo"><image src="../../static/zhong.jpg" mode=""></image><!-- <uni-icons type="notification-filled" size="20"></uni-icons> --><text>限时秒购</text></view><view class="timeFinish"><text>距结束</text><uni-countdown :day="1" :hour="2" :minute="30" :second="0" color="#FFFFFF"background-color="#007AFF" /></view></view><view class="timeBottom"><view class="timeItem" v-for="(timeItem,timeIndex) in timeList" :key="timeIndex"><image :src="timeItem.timeUrl"></image><view class="timeText"><text class="timeText1">¥{{timeItem.timeText1}}</text><text class="timeText2">¥{{timeItem.timeText2}}</text></view></view></view><hr><scroll-view scroll-x class="myNav"><view v-for="(item,index) in indexTypes" :key="index" @tap="selType(item)" :class="'item '+(typeId===item.id?'active':'')" style='font-size: 30rpx;'>{{item.name}}</view></scroll-view><index-type ref="indexType"></index-type>	</view>	</view></view></template><script>import { mapState, mapGetters, mapActions, mapMutations } from 'vuex'import indexType from '@/components/index_type.vue'export default {components:{indexType,},data() {return {typeId: 0,cateList: [{cateId: 0,cateUrl: "../../static/zhong.jpg",cateName: '限时秒杀',path:''},{cateId: 0,cateUrl: '../../static/che.jpg',cateName: '断货清仓',path:'./okoko'},{cateId: 0,cateUrl: "../../static/yi.jpg",cateName: '宝藏女装',},{cateId: 0,cateUrl: "../../static/b3.jpg",cateName: '多多果园',},{cateId: 0,cateUrl: "../../static/9.9.jpg",cateName: '9块9特卖',},{cateId: 0,cateUrl: "../../static/1a.jpg",cateName: '签到',},{cateId: 0,cateUrl: "../../static/yao.jpg",cateName: '医药馆',},{cateId: 0,cateUrl: "../../static/54e.jpg",cateName: '省钱月卡',},],// //商品实例图timeList: [{time: 0,timeUrl: '../../static/7b.jpg',timeText1: '388',timeText2: '720',},{time: 0,timeUrl: '../../static/345d.jpg',timeText1: '18',timeText2: '39',},{time: 0,timeUrl: '../../static/3d.jpg',timeText1: '3888',timeText2: '3889',},{time: 0,timeUrl: '../../static/bing.jpg',timeText1: '12.9',timeText2: '18',},],bannerList: [{id: 1,url: '../../static/temp1.jpg'},{id: 2,url: '../../static/temp2.jpg'},{id: 3,url: '../../static/temp3.jpg'},{id: 4,url: '../../static/temp4.jpg'},{id: 5,url: '../../static/temp5.jpg'},],}},computed:{...mapState(['products','indexTypes'])},mounted() {this.typeId = this.indexTypes[0].id;this.$refs.indexType.initProduct(this.indexTypes[0]);},methods: {goShowContract() {uni.navigateTo({url: '/pages/index/show-contract'})},selPage(cateItem){// uni.navigateTo({// 	url:cateItem.path,// })},//选择分类selType(item){this.typeId = item.id;this.$refs.indexType.initProduct(item);}}}
</script><style lang="scss" scoped>* {margin: 0;padding: 0;}.myHeader {display: flex;padding: 10rpx;align-items: center;.logos {width: 140rpx;height: 40rpx;}.searchs {border: 1px solid black;border-radius: 10rpx;flex: 1;margin: 0 10rpx;width: 80rpx;padding-left: 14rpx;display: flex;align-items: center;padding: 4rpx 10rpx;vertical-align: top;}.btn {width: 80rpx;text-align: center;}}.myNav {white-space: nowrap;display: flex;color: #333;box-sizing: border-box;height: 80rpx;.item {flex: 1;margin: 10rpx 20rpx;display: inline-block;&.active {color: #ff5555;border-bottom: 2px solid #ff5555;font-size: 24px;}}.item:hover {display: inline-block;color: #ff5555;border-bottom: 2px solid #ff5555;}}.backgroundBanner {padding: 0 10rpx;box-sizing: border-box;}.banner {width: 100%;margin: 0 auto;}.banner swiper {height: calc(750rpx / 1.9); //calc(屏幕宽度 / (图片宽度 / 图片高度))}.banner img {width: 100%;height: 100%;}.cates {width: 100%;height: 200rpx;background-color: #fff;display: flex;align-items: center;justify-content: space-around;.cate-item {width: 20%;height: 160rpx;display: flex;flex-direction: column;align-items: center;justify-content: space-around;image {width: 100rpx;height: 100rpx;}}}.cates {width: 100%;height: 400rpx;background-color: #fff;display: flex;align-items: center;justify-content: space-around;flex-wrap: wrap;.cate-item {width: 22%;height: 160rpx;display: flex;flex-direction: column;align-items: center;justify-content: space-around;// flex-flow: wrap;image {width: 100rpx;height: 100rpx;}}}.time {width: 100%;background-color: #fff;margin-top: 20rpx;.timeTop {height: 80rpx;display: flex;justify-content: space-between;align-items: center;margin-left: 20rpx;.logo {image {width: 30rpx;height: 30rpx;margin-right: 10rpx;}text {font-size: 16px;}}.timeFinish {margin-right: 20rpx;display: flex;align-items: center;text {font-size: 14px;}}}.timeBottom {width: 100%;display: flex;justify-content: space-around;flex-wrap: wrap;.timeItem {width: 25%;justify-content: space-around;display: flex;flex-direction: column;align-items: center;box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;image {width: 160rpx;height: 160rpx;}.timeText {display: flex;justify-content: space-between;font-size: 14px;.timeText2 {color: #9F9F9F;text-decoration: line-through;}}}}}
</style>

3.数据模拟通讯

通过vuex实现数据通讯共享和管理

import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({state: {//公共的变量,这里的变量不能随便修改,只能通过触发mutations的方法才能改变//首页分类indexTypes:[{id: 1,name: '商品推荐'},{id: 2,name: '配饰'},{id: 3,name: '包包'},{id: 4,name: '鞋子'},{id: 5,name: '裙子'},{id: 6,name: '饮品'},{id: 7,name: '衣服'}],//分类菜单allTypes:[{id: 11,name: '推荐'},{id: 12,name: '箱包'},{id: 13,name: '男装'},{id: 14,name: '女装'},{id: 15,name: '鞋子'},{id: 16,name: '裤子'},{id: 17,name: '食品'},{id: 18,name: '维修'},{id: 19,name: '机票'},{id: 20,name: '图书'},{id: 21,name: '宠物'},],//活动商品 商品主键idactiveProducts:[1,2,3,4,5],//全部商品products: [{id:1,typeIds:[1,11],cover: require('../../static/0fd.jpg'),imgList: ['https://img11.360buyimg.com/n1/s450x450_jfs/t1/71831/14/25245/39959/6487c621Fca760cf2/769dd8bcf43d82c1.jpg','https://img.pddpic.com/mms-material-img/2022-08-11/cd9c638d-dac2-474a-aad2-0f141c146102.jpeg.a.jpeg?imageMogr2/quality/90/format/webp','https://img.pddpic.com/mms-material-img/2022-08-11/b0827f91-083a-4b5b-9461-64e6d6789fcf.jpeg.a.jpeg?imageMogr2/quality/90/format/webp'],name: '联想拯救者Y9000P i7/RTX3060 2022款16英寸电竞游戏笔记本电脑',title: '电脑',price: 2000,oldprice: 5000,saleNumMonth: 120,saleNumTotal: 2000,types: [{name: '类型',items: [{id: 1,name: '13.3英寸 M1芯片 8+7核 8G+256G'},{id: 2,name: '13.3英寸 M1芯片 8+7核 8G+512G'},{id: 3,name: '13.3英寸 M1芯片 8+7核 16G+256G'},{id:4,name: '13.3英寸 M1芯片 8+7核 16G+512G'}],},{name: '数量',items: [{id: 1,name: '英特尔官方21代'}, {id: 2,name: '英特尔官方18代'}, {id: 3,name: '英特尔官方19代'}]}]},{id:2,typeIds:[1,11],cover: require('../../static/13d.jpg'),imgList: ["https://img.pddpic.com/mms-material-img/2021-12-10/6b514989-49fb-4112-b636-33fc82cb1641.jpeg.a.jpeg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/mms-material-img/2022-01-05/6fbb05da-e1ba-4bee-985a-300cdd7ad2e9.jpeg.a.jpeg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/mms-material-img/2021-12-10/21e55b15-a17d-4668-b8a9-9b8616f11cb2.jpeg.a.jpeg?imageMogr2/quality/90/format/webp"],name: '保鲜膜([食品级认证)',title:'保鲜膜',price: 12.99,oldprice: 20.80,saleNumMonth: 120,saleNumTotal: 2000,types: [{name: '型号',items: [{id: 1,name: '1卷宽30厘米6.25斤'},{id: 2,name: '1卷宽50厘米7斤'},{id: 3,name: '整箱宽50厘米4卷28斤'},{id:4,name: '整箱4卷宽50厘米重40斤约720米'}],},{name: '数量',items: [{id: 1,name: '3包'}, {id: 2,name: '5包'}, {id: 3,name: '10包'}]}]},{id:3,typeIds:[1,11],cover: require('../../static/8537c.jpg'),imgList: ["https://img.pddpic.com/mms-material-img/2022-05-28/3329312a-b971-4990-af80-6e15113b0600.jpeg.a.jpeg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/mms-material-img/2022-05-28/e12d134d-c2d8-4aec-8dc3-0e9ff80befd5.jpeg.a.jpeg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/mms-material-img/2022-05-28/1510e448-2d5b-4398-a692-ff679e2587e8.jpeg.a.jpeg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/mms-material-img/2022-05-28/248a3ffb-b4ce-4529-a7a4-8f0c97a4b331.jpeg.a.jpeg?imageMogr2/quality/90/format/webp"],name: '男士斜挎包潮牌ins工装风日系休闲男包大容量单肩包个性邮差包潮',title:'斜挎包',price: 33.00,oldprice: 40.75,saleNumMonth: 120,saleNumTotal: 2000,types: [{name: '颜色',items: [{id: 1,name: '大板黑色'},{id: 2,name: '灰色'},{id: 3,name: '蓝色'},{id:4,name: '白色'}],},]},{id:4,typeIds:[1,11],cover: require('../../static/fa98.jpg'),imgList: ["https://img.pddpic.com/openapi/images/2020-04-27/4cd766b88b0a4e9e8fbebaa221de7b58.jpg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/openapi/images/2020-04-27/c2090bace7f938f02819fca05e17c4e7.jpg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/openapi/images/2020-04-27/1492ab8ba1e76cca387583c80180d65e.jpg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/openapi/images/2020-04-27/13b1af9176580b3e7a035871f4456594.jpg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/openapi/images/2020-04-27/793db583c0d598c13124af5991f7794e.jpg?imageMogr2/quality/90/format/webp"],name: '高级感韩版原创ins个性多层斜挎包2023夏季新款包包女单肩链条包',title:'休闲 仙女',price: 38.39,oldprice: 57.80,saleNumMonth: 120,saleNumTotal: 2000,types: [{name: '颜色',items: [{id: 1,name: '大板黑色'},{id: 2,name: '灰色'},{id: 3,name: '红色'},{id:4,name: '粉色'},{id:5,name: '白色'},],},]},{id:5,typeIds:[1,11],cover: 'https://img.pddpic.com/goods/images/2020-06-10/52fd0f70-671c-4ab0-a867-094d8301d4e5.jpeg?imageMogr2/quality/90/format/webp',imgList: ["https://img.pddpic.com/goods/images/2020-06-10/52fd0f70-671c-4ab0-a867-094d8301d4e5.jpeg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/mms-material-img/2020-06-04/a12fe65d-ee77-4b1c-b183-7ce735fb1342.jpeg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/mms-material-img/2020-06-04/cf0eb9da-efb7-4f24-9703-6450b792b4ec.jpeg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/mms-material-img/2020-06-04/911b4c63-1212-46e7-a1eb-038b983553b0.jpeg?imageMogr2/quality/90/format/webp","https://img.pddpic.com/goods/images/2020-06-10/f7e45e61-0a72-4ac9-8f56-f422327799b9.jpeg?imageMogr2/quality/90/format/webp"],name: '【驯龙士】夏季新款冰丝套装男休闲运动短袖男士大码七分裤两件套',title:'驯龙士',price: 99.99,oldprice: 120.80,saleNumMonth: 120,saleNumTotal: 2000,types: [{name: '颜色',items: [{id: 1,name: '军绿色'},{id: 2,name: '灰色'},{id: 3,name: '黑色'},],},]}],},mutations: {//相当于同步的操作getarray(state, count) {var shuffled = state.timesList.slice(0),i = state.timesList.length,min = i - count,temp,index;while (i-- > min) {index = Math.floor((i + 1) * Math.random());temp = shuffled[index];shuffled[index] = shuffled[i];shuffled[i] = temp;}return shuffled.slice(min);}},actions: {//相当于异步的操作,不能直接改变state的值,只能通过触发mutations的方法才能改变}
})
export default store

四、总结

项目功能完整,后续可能将不断升级。

关注作者,及时了解更多好项目!

作者主页也有更多好项目分享!

获取源码或如需帮助,可通过博客后面名片+作者即可!

 其他作品集合

  1. 《Springboot+Spring Security+OAuth2+redis+mybatis-plus+mysql+vue+elementui实现请假考勤系统》
  2. 《vue+element实现电商商城礼品代发网,商品、订单管理》
  3. 《vue+vant2完美实现香奈儿移动端商城网站》
  4. 《vue+elementui实现联想购物商城,样式美观大方》
  5. 《vue+elementui实现英雄联盟道具城》
  6. 《vue+elementui实现app布局小米商城,样式美观大方,功能完整》
  7. 《vue完美模拟pc版快手,实现短视频,含短视频详情播放》
  8. 《vue+element实现美观大方好看的音乐网站,仿照咪咕音乐网》     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/135373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React中组件之间如何通信?

一、是什么 我们将组件间通信可以拆分为两个词&#xff1a; 组件通信 回顾Vue系列的文章&#xff0c;组件是vue中最强大的功能之一&#xff0c;同样组件化是React的核心思想 相比vue&#xff0c;React的组件更加灵活和多样&#xff0c;按照不同的方式可以分成很多类型的组件…

第五届泰迪杯数据分析技能赛B题源码图片分享

需要B题源码以及第六届带队”指导“请私信本人&#xff0c;团队包含技能赛双一等&#xff0c;数学建模省一&#xff0c;泰迪杯挖掘国一&#xff0c;研究生队友。 去年一等作品可视化图如下&#xff0c;私信获取源码

【Ruoyi管理后台】用户登录强制修改密码

近期有个需求&#xff0c;就是需要调整Ruoyi管理后台&#xff1a;用户如果三个月(长时间)未修改过密码&#xff0c;需要在登录时强制修改密码&#xff0c;否则不能登录系统。 一、后端项目调整 从需求来看&#xff0c;我们需要在用户表增加一个字段&#xff0c;用于标记用户最…

【C语言】动态内存管理

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解动态内存管理&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 为什么存在动态内存分配二. 动态内存函数的介绍2.1 malloc和free2.2 calloc2.3 real…

Linux/centos上如何配置管理Web服务器?

Linux/centos上如何配置管理Web服务器&#xff1f; 1 Web简单了解2 关于Apache3 如何安装Apache服务器&#xff1f;3.1 Apache服务安装3.2 httpd服务的基本操作 4 如何配置Apache服务器&#xff1f;4.1 关于httpd.conf配置4.2 常用指令 5 简单实例 1 Web简单了解 Web服务器称为…

OpenGL_Learn08(坐标系统)

目录 1. 概述 2. 局部空间 3. 世界空间 4. 观察空间 5. 剪裁空间 6. 初入3D 7. 3D旋转 1. 概述 OpenGL希望在每次顶点着色器运行后&#xff0c;我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说&#xff0c;每个顶点的x&#xff0c;…

FMCW雷达论文速览 | TRS 2023, 基于FMCW雷达的多天线高精度测距算法及性能分析

注1:本文系“最新论文速览”系列之一,致力于简洁清晰地介绍、解读最新的顶会/顶刊论文 TRS 2023 | High Accuracy Multi-antenna Ranging Algorithm and Performance Analysis for FMCW Radar 论文原文:https://ieeexplore.ieee.org/document/10309162 Z. Xu, S. Qi and P. Zh…

SpringBoot定时任务打成jar 引入到新的项目中后并自动执行

一、springBoot开发定时任务 ①&#xff1a;连接数据库实现新增功能 1. 引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional> </dependency> <dependen…

2023年度API安全状况详解

随着云计算和移动应用的快速发展&#xff0c;API&#xff08;应用程序接口&#xff09;已成为不可或缺的技术组成部分。然而&#xff0c;API的广泛使用也带来了安全风险。本文将探讨2023年的API安全状况&#xff0c;并介绍了一些应对这些安全挑战的最佳实践。 引言 随着全球互联…

深度学习入门-基于Python的理论与实现摘要记录

基本是《深度学习入门-基于Python的理论与实现》的复制粘贴&#xff0c;以作为日后的检索和查询使用 感知机 感知机接收多个输入信号&#xff0c;输出一个信号。 感知机原理 感知机接收多个输入信号&#xff0c;输出一个信号。 图2-1是一个接收两个输入信号的感知机的例子。…

网络工程师回顾学习(第一部分)

根据书本目录&#xff0c;写下需要记忆的地方&#xff1a; 参考之前的笔记&#xff1a; 网络工程师回答问题_one day321的博客-CSDN博客 重构第一部分需要记忆的&#xff1a; 第一章&#xff1a;计算机网络概论 计算机网络的定义和分类&#xff1a;计算机网络是指将地理位…

IPv6详解

目录: 第一部分 IPv6的诞生背景和引起的主要变化 第二部分 IPv6数据报的基本首部和扩展首部 第三部分 IPv6地址 第四部分 IPv4向IPv6过渡 第一部分 IPv6的诞生背景和引起的主要变化 一.IPv6的诞生背景 IPv4存在设计缺陷: IPv4的设计者最初并没有想到该协议会在全球范围内广…

centos7.9 postgresql 16.0 源码安装部署

postgresql 16.0 源码安装部署 环境准备 系统主机名IP地址centos7.9postgres192.168.200.56 软件准备 postgresql-16.0.tar.gz https://ftp.postgresql.org/pub/source/v16.0/postgresql-16.0.tar.gz依赖安装 yum -y install systemd-devel readline readline-devel zlib-devel…

2023辽宁省数学建模B题数据驱动的水下导航适配区分类预测完整原创论文分享(python求解)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了辽宁省数学建模B题完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 B用Python&#xff0b;SPSSPRO求解&…

RabbitMQ 消息中间件

消息中间件 1、简介 消息中间件也可以称消息队列&#xff0c;是指用高效可靠的消息传递机制进行与平台无关的数据交流&#xff0c;并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型&#xff0c;可以在分布式环境下扩展进程的通信。 当下主流的消息中间…

【腾讯云 TDSQL-C Serverless 产品体验】以TDSQL-C Mysql Serverless 作为数据中心爬取豆瓣图书数据

【腾讯云 TDSQL-C Serverless 产品体验】以TDSQL-C Mysql Serverless 作为数据中心爬取豆瓣图书数据 文章目录 【腾讯云 TDSQL-C Serverless 产品体验】以TDSQL-C Mysql Serverless 作为数据中心爬取豆瓣图书数据背景TDSQL-C Serverless Mysql介绍以TDSQL-C Mysql Serverless 作…

记录两个Excel导出出现的问题

问题一&#xff1a;导出数据时&#xff0c;这行代码返回null&#xff0c;导致导出excel失败&#xff1b; Workbook workbook ExcelExportUtil.exportExcel(params, map);解决&#xff1a;排查出来&#xff0c;是因为版本问题&#xff0c;autopoi版本是1.2.1&#xff1b; 升级…

时间序列预测:深度学习、机器学习、融合模型、创新模型实战案例(附代码+数据集+原理介绍)

本文介绍->给大家推荐一下我的时间序列预测专栏&#xff0c;本专栏平均质量分98分&#xff0c;而且本专栏目前免费阅读&#xff0c;其中涉及机器学习、深度学习、融合模型、个人创新模型、数据分析等一系列有关时间序列的专栏&#xff0c;其中的实战的案例不仅有简单的模型类…

Vue中的 配置项 setup

setup 是 Vue3 中的一个全新的配置项&#xff0c;值为一个函数。 setup 是所有 Composition API&#xff08;组合式API&#xff09;的入口&#xff0c;是 Vue3 语法的基础。 组件中所用到的数据、方法、计算属性等&#xff0c;都需要配置在 setup 中。 setup 会在 beforeCre…

从业务到软件架构——软件建模

一、问题 1.架构到底是什么&#xff1f;架构和业务之间到底什么关系&#xff1f; 2.好的架构的设计出发点是什么&#xff1f;好的架构应该是什么样的&#xff1f; 作为一个计算机领域的词汇&#xff0c;架构的定义是&#xff1a;有关软件整体结构与组件的抽象描述&#xff0c…