仿京东商城小程序整套免费(一键复制2024)

仿京东购物商城小程序

先看效果:

 

 上代码:

(首页home.vue)

<template>
	<view class="home-container">
		<view class="search-box">
			<my-search @click="gotoSearch"></my-search>
		</view>
		<swiper :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000" :circular="true">
			<swiper-item v-for="(item,index) in swiperList" :key="item.good_id">
				<navigator class="swiper-item" :url="`/subpkg/goods_detail/goods_detail?goods_id=${item.goods_id}`">
					<image :src="item.image_src"></image>
				</navigator>
			</swiper-item>
		</swiper>
		<view class="nav-list">
			<view class="nav-item" v-for="(item,index) in navList" :key="index" @click="anvClickHandler(item)">
				<image :src="item.image_src" class="nav-img"></image>
			</view>
		</view>
		<view class="floor-list">
			<view class="floor-item" v-for="(item,index) in floorList" :key="index">
				<image :src="item.floor_title.image_src" class="floor-title"></image>
				<view class="floor-img-box">
					<navigator class="left-img-box" :url="item.product_list[0].url">
						<image :src="item.product_list[0].image_src" mode="widthFix"
							:style="{width:item.product_list[0].image_width + 'rpx'}"></image>
					</navigator>
					<view class="right-img-box">
						<navigator class="right-img-item" v-for="(items,indexs) in item.product_list" :key="indexs"
							v-if="indexs !== 0" :url="items.url">
							<image :src="items.image_src" mode="widthFix"
								:style="{width:item.product_list[0].image_width + 'rpx'}"></image>
						</navigator>
					</view>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
	import badgeMix from '@/mixins/tabbar-badge.js'
	export default {
		mixins: [badgeMix],
		data() {
			return {
				swiperList: [], //轮播图数据
				navList: [], // 分类导航
				floorList: [], // 楼层数据
			};
		},

		onLoad() {
			this.getSwiperList()
			this.getNavList()
			this.getFloorList()
		},
		methods: {
			// 轮播图
			async getSwiperList() {
				const {
					data: res
				} = await uni.$http.get('/api/public/v1/home/swiperdata')
				// 请求失败
				if (res.meta.status !== 200) return uni.$showMsg()
				// 请求成功,为 data 中的数据赋值
				this.swiperList = res.message
			},
			// 分类导航
			async getNavList() {
				const {
					data: res
				} = await uni.$http.get('/api/public/v1/home/catitems')
				console.log(res);
				// 请求失败
				if (res.meta.status !== 200) return uni.$showMsg()
				this.navList = res.message
			},
			// 点击跳转到分类
			anvClickHandler(item) {
				if (item.name === '分类') {
					uni.switchTab({
						url: '/pages/cate/cate'
					})
				}
			},

			//楼层的数据请求
			async getFloorList() {
				const {
					data: res
				} = await uni.$http.get('/api/public/v1/home/floordata')
				if (res.meta.status !== 200) return uni.$showMsg()
				res.message.forEach(floor => {
					floor.product_list.forEach(prod => {
						prod.url = "/subpkg/goods_list/goods_list?" + prod.navigator_url.split('?')[1]

					})
				})
				this.floorList = res.message
			},
			gotoSearch() {
				uni.navigateTo({
					url: '/subpkg/search/search'
				})
			}
		}
	}
</script>

<style lang="scss">
	swiper {
		height: 330rpx;

		.swiper-item,
		image {
			width: 100%;
			height: 100%;
		}
	}

	.nav-list {
		display: flex;
		justify-content: space-around;
		margin: 15px 0;

		.nav-img {
			width: 128rpx;
			height: 128rpx;
		}
	}

	.floor-title {
		height: 60rpx;
		width: 100%;
		display: flex;
	}

	.floor-img-box {
		display: flex;
		padding: 10rpx;

		.right-img-box {
			display: flex;
			flex-wrap: wrap;
			justify-content: space-around;
		}
	}

	.search-box {
		position: sticky;
		top: 0;
		z-index: 999;
	}
</style>

(商品详情页 :)

<template>
	<view>
		<view class="cart-container" v-if="cart.length!==0">
			<view>
				<my-address></my-address>
			</view>
			<!-- 标题内容 -->
			<view class="cart-title">
				<uni-icons type="shop" size="18"></uni-icons>
				<text class="cart-title-text">购物车</text>
			</view>
			<!-- 列表 -->
			<uni-swipe-action>
				<block v-for="(item,index) in cart" :key="index">
					<uni-swipe-action-item :right-options="options" @click="swipeActionHanlder(item)">
						<my-goods :goods="item" :showRadio="true" @rchange="radioChangeHandler" :showNumber="true"
							@num-change="numChangeHandler"></my-goods>
					</uni-swipe-action-item>
				</block>
			</uni-swipe-action>
			<!-- 结算区域 -->
			<my-settle></my-settle>
		</view>

		<!-- 空白购物车区域 -->
		<view class="empty-cart" v-else>
			<image src="" class="empty-img"></image>
			<text class="tip-text">至少要加入一件商品在走吧,亲</text>
		</view>
	</view>
</template>

<script>
	import badgeMix from '../../mixins/tabbar-badge.js'
	import {
		mapGetters,
		mapState,
		mapMutations
	} from 'vuex'
	import cart from '../../store/cart.js';
	export default {
		mixins: [badgeMix],
		data() {
			return {
				options: [{
					text: '删除', //显示的文本内容
					style: {
						backgroundColor: '#c00000' //按钮的背景颜色
					}
				}]
			};
		},
		computed: {
			...mapState('my_cart', ['cart'])
		},
		methods: {
			...mapMutations('my_cart', ['radioClickChange', 'numClickChange', 'removeGoodsCartItem']),
			//商品勾选按钮发生了变化
			radioChangeHandler(val) {
				this.radioClickChange(val)
				// console.log(val);
			},
			//商品的数量发生变化
			numChangeHandler(val) {
				this.numClickChange(val)
			},
			//点击了滑动的操作按钮
			swipeActionHanlder(item) {
				this.removeGoodsCartItem(item.goods_id)
			}
		}
	}
</script>

<style lang="scss">
	.cart-title {
		height: 40px;
		display: flex;
		align-items: center;
		font-size: 14px;
		padding-left: 5px;
		border-bottom: 1px solid #d0d0d0;

		.cart-title-text {
			margin-left: 10px;
		}
	}

	.empty-cart {
		display: flex;
		flex-direction: column;
		align-items: center;
		padding-top: 15px;

		.empty-img {
			width: 90px;
			height: 90px;
		}

		.tip-text {
			font-size: 12px;
			color: gray;
			margin-top: 15px;
		}
	}
</style>

 由于代码页面过多,这里就不做展示了,需要的可以留个关注私信我或者点击下方加我v。


点击看我下一篇同类型购物小程序文章

普通通用类购物商城小程序免费(一键复制2024)-CSDN博客

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耀南.

你的鼓励将是我最最最最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值