首页 > 其他分享 >Vue2电商实战项目(六)个人中心

Vue2电商实战项目(六)个人中心

时间:2023-06-27 11:35:45浏览次数:54  
标签:实战 index Center ...... 订单 Vue2 电商 page ###

个人中心Center组件

  • 先搞定静态组件
### router.routes.js

import Center from '@/pages/Center'
export default [
	{
		name:"center",
		path: "/center",
		component: Center,
		meta: {
			show: true
		}
	}......
  • 拆分Center组件,把我的订单团购订单拆分成两个子路由组件(注意:并不是子组件而是子路由组件)
### myOrder.index.vue(把Center.index.vue结构中,'右侧的内容'拷贝过来)

<template>
	<div class="order-right">
		<div class="order-content">
			<div class="title">
				<h3>我的订单</h3>
			</div>
			<div class="chosetype">
				<table>
					<thead>
						<tr>
							<th width="29%">商品</th>
							<th width="31%">订单详情</th>
							<th width="13%">收货人</th>
							<th>金额</th>
							<th>状态</th>
							<th>操作</th>
						</tr>
					</thead>
				</table>
			</div>
			<div class="orders">

				<table class="order-item">
					<thead>
						<tr>
							<th colspan="5">
								<span class="ordertitle">2017-02-11 11:59 订单编号:7867473872181848 <span
										class="pull-right delete"><img src="../images/delete.png"></span></span>
							</th>
						</tr>
					</thead>
					<tbody>
						<tr>
							<td width="60%">
								<div class="typographic">
									<img src="../images/goods.png">
									<a href="#" class="block-text">包邮 正品玛姬儿压缩面膜无纺布纸膜100粒 送泡瓶面膜刷喷瓶 新款</a>
									<span>x1</span>
									<a href="#" class="service">售后申请</a>
								</div>
							</td>
							<td rowspan="2" width="8%" class="center">小丽</td>
							<td rowspan="2" width="13%" class="center">
								<ul class="unstyled">
									<li>总金额¥138.00</li>
									<li>在线支付</li>

								</ul>
							</td>
							<td rowspan="2" width="8%" class="center">
								<a href="#" class="btn">已完成 </a>
							</td>
							<td rowspan="2" width="13%" class="center">
								<ul class="unstyled">
									<li>
										<a href="mycomment.html" target="_blank">评价|晒单</a>
									</li>

								</ul>
							</td>
						</tr>
						<tr>
							<td width="50%">
								<div class="typographic">
									<img src="../images/goods.png">
									<a href="#" class="block-text">包邮 正品玛姬儿压缩面膜无纺布纸膜100粒 送泡瓶面膜刷喷瓶 新款</a>
									<span>x1</span>
									<a href="#" class="service">售后申请</a>
								</div>
							</td>
						</tr>
					</tbody>
				</table>

				<table class="order-item">
					<thead>
						<tr>
							<th colspan="5">
								<span class="ordertitle">2017-02-11 11:59 订单编号:7867473872181848 <span
										class="pull-right delete"><img src="../images/delete.png"></span></span>
							</th>
						</tr>
					</thead>
					<tbody>
						<tr>
							<td width="60%">
								<div class="typographic">
									<img src="../images/goods.png">
									<a href="#" class="block-text">包邮 正品玛姬儿压缩面膜无纺布纸膜100粒 送泡瓶面膜刷喷瓶 新款</a>
									<span>x1</span>
									<a href="#" class="service">售后申请</a>
								</div>
							</td>
							<td rowspan="2" width="8%" class="center">小丽</td>
							<td rowspan="2" width="13%" class="center">
								<ul class="unstyled">
									<li>总金额¥138.00</li>
									<li>在线支付</li>

								</ul>
							</td>
							<td rowspan="2" width="8%" class="center">
								<a href="#" class="btn">已完成 </a>
							</td>
							<td rowspan="2" width="13%" class="center">
								<ul class="unstyled">
									<li>
										<a href="mycomment.html" target="_blank">评价|晒单</a>
									</li>

								</ul>
							</td>
						</tr>
						<tr>
							<td width="50%">
								<div class="typographic">
									<img src="../images/goods.png">
									<a href="#" class="block-text">包邮 正品玛姬儿压缩面膜无纺布纸膜100粒 送泡瓶面膜刷喷瓶 新款</a>
									<span>x1</span>
									<a href="#" class="service">售后申请</a>
								</div>
							</td>
						</tr>
					</tbody>
				</table>
			</div>
			<div class="choose-order">
				<div class="pagination">
					<ul>
						<li class="prev disabled">
							<a href="javascript:">«上一页</a>
						</li>
						<li class="page actived">
							<a href="javascript:">1</a>
						</li>
						<li class="page">
							<a href="javascript:">2</a>
						</li>
						<li class="page">
							<a href="javascript:">3</a>
						</li>
						<li class="page">
							<a href="javascript:">4</a>
						</li>

						<li class="next disabled">
							<a href="javascript:">下一页»</a>
						</li>
					</ul>
					<div>
						<span>&nbsp;&nbsp;&nbsp;&nbsp;共2页&nbsp;</span>
					</div>
				</div>
			</div>
		</div>
		<!--猜你喜欢-->
		<div class="like">
			<h4 class="kt">猜你喜欢</h4>
			<ul class="like-list">
				<li class="likeItem">
					<div class="p-img">
						<img src="../images/itemlike01.png" />
					</div>
					<div class="attr">
						<em>DELL戴尔Ins 15MR-7528SS 15英寸 银色 笔记本</em>
					</div>
					<div class="price">
						<em>¥</em>
						<i>3699.00</i>
					</div>
					<div class="commit">已有6人评价
					</div>
				</li>
				<li class="likeItem">
					<div class="p-img">
						<img src="../images/itemlike02.png" />
					</div>
					<div class="attr">
						Apple苹果iPhone 6s/6s Plus 16G 64G 128G
					</div>
					<div class="price">
						<em>¥</em>
						<i>4388.00</i>
					</div>
					<div class="commit">已有700人评价
					</div>
				</li>
				<li class="likeItem">
					<div class="p-img">
						<img src="../images/itemlike03.png" />
					</div>
					<div class="attr">DELL戴尔Ins 15MR-7528SS 15英寸 银色 笔记本
					</div>
					<div class="price">
						<em>¥</em>
						<i>4088.00</i>
					</div>
					<div class="commit">已有700人评价
					</div>
				</li>
				<li class="likeItem">
					<div class="p-img">
						<img src="../images/itemlike04.png" />
					</div>
					<div class="attr">DELL戴尔Ins 15MR-7528SS 15英寸 银色 笔记本
					</div>
					<div class="price">
						<em>¥</em>
						<i>4088.00</i>
					</div>
					<div class="commit">已有700人评价
					</div>
				</li>
			</ul>
		</div>
	</div>
</template>

<script>
	export default {
		name: 'MyOrder'
	}
</script>

<style>
</style>

### groupOrder.index.vue
<template>
	<div>
		我是团购订单的内容
	</div>
</template>

<script>
	export default {
		name:'GroupOrder'
	}
</script>

<style>
</style>
  • Center路由中,注册二级路由
### router.routes.js
......
{
	name:"center",
	path: "/center",
	component: Center,
	......
	children:[ // 注册二级路由
		{
			path: "myorder", // 注意,不要写成'/myorder'
			component: MyOrder,
		},
		{
			path: "grouporder",
			component: GroupOrder,
		},
	]
},
### Center.index.vue
......
<div class="order-body">
	<!--左侧列表-->
	<div class="order-left">
		<dl>
			<dt><i>·</i> 订单中心</dt>
			<dd><!--生成链接-->
				<router-link to="/center/myorder">我的订单</router-link> 
			</dd>
			<dd>
				<router-link to="/center/grouporder">团购订单</router-link>
			</dd>
			<dd>本地生活订单 </dd>
	<!-- 右侧内容 -->
			<!-- <MyOrder></MyOrder> -->
			<!-- <GroupOrder></GroupOrder> -->
			<!--展示内容-->
			<router-view></router-view>
- 注意事项: Center组件的 <style lang="less" > 必须取消scoped,否则'我的订单'没有样式
  • 至此,二级路由组件配置完成,但是有一个问题,当用户访问Center页面的时候,右侧一片空白,用户需点击我的订单才有内容

    所以,当用户访问Center页面的时候,路由应当直接重定向myOrder,即默认就展示我的订单

### router.routes.js
......
{
		name:"center",
		......
		children:[
			{
				path: "myorder",
				component: MyOrder,
			},
			{
				path: "grouporder",
				component: GroupOrder,
			},
			{
				path: "/center",
				redirect: "/center/myorder", // 配置重定向
			},
		]
	},

获取个人中心数据

  • 配置请求,然后挂载组件以后发请求
### api.index.js
......
// 传入page和limie
export const reqMyOrderList = (page,limit)=>requests({url:`/order/auth/${page}/${limit}`,method:'get'})

### myOrder.index.vue
......
<script>
	export default {
		name: 'MyOrder',
		data(){
			return {
				page:1, // 初始化数据
				limit:3,
				myOrder:{}
			}
		},
		mounted(){
			this.getData(); // 封装异步函数
		},
		methods:{
			async getData(){
				const {page,limit} = this
				let res = await this.$API.reqMyOrderList(page,limit)
				// console.log(res)
				if(res.code == 200){
					this.myOrder = res.data
				}
			}
		}
	}
</script>

  • 数据的渲染
### myOrder.index.vue

<template>
	<div class="order-right">
		......
			<div class="orders">
				
				<!--开始渲染-->
				<table class="order-item" v-for="(order,index) in myOrder.records" :key="order.id">
					<thead>
						<tr>
							<th colspan="5">			<!--订单创建时间和订单编号-->
								<span class="ordertitle">{{order.createTime}} 订单编号:{{order.outTradeNo}} <span
										class="pull-right delete"><img src="../images/delete.png"></span></span>
							</th>
						</tr>
					</thead>
					<tbody>
						<!--渲染购物车商品数据-->
						<tr v-for="(cart,index) in order.orderDetailList" :key="cart.id">
							<td width="60%">
								<div class="typographic">
									<!--渲染图片并指定样式-->
									<img :src="cart.imgUrl" style="width: 100px;height: 100px;">
									<a href="#" class="block-text">{{cart.skuName}}</a>
									<span>{{cart.skuNum}}</span>
									<a href="#" class="service">售后申请</a>
								</div>
							</td>
							<!-- <td rowspan="2" width="8%" class="center">{{order.consignee}}</td> -->
							<!--渲染'行数'-->
							<td :rowspan="order.orderDetailList.length" v-if="index==0" width="8%" class="center">{{order.consignee}}</td>
							<td :rowspan="order.orderDetailList.length" v-if="index==0" width="13%" class="center">
								<ul class="unstyled">
									<li>总金额¥{{order.totalAmount}}</li>
									<li>在线支付</li>

								</ul>
							</td>
							<td :rowspan="order.orderDetailList.length" v-if="index==0" width="8%" class="center">
								<a href="#" class="btn">{{order.orderStatusName}} </a>
							</td>
							<td :rowspan="order.orderDetailList.length" v-if="index==0" width="13%" class="center">
								......
							</td>
						</tr>
					</tbody>
				</table>

			</div>
			<div class="choose-order">
				......
			</div>
		</div>
		<!--猜你喜欢-->
		<div class="like">
			......
		</div>
	</div>
</template>
  • 最后,搞定分页(注意:分页已是全局组件,搞过来用即可)
### myOrder.index.vue
......
<div class="choose-order">
	<!--引入全局组件Pagination-->
	<Pagination
		:pageNo="page"
		:pageSize="limit"
		:total="myOrder.total"
		:continues="5"
		@getPageNo="getPageNo" <!--绑定事件-->
	></Pagination>
	
</div>
......
methods:{
	......
	getPageNo(page){ // 获取用户点击的当前页面,再次发请求
		this.page = page
		this.getData()
	}
}

标签:实战,index,Center,......,订单,Vue2,电商,page,###
From: https://www.cnblogs.com/qinganning/p/17508232.html

相关文章

  • 【vue2】使用vue常见的业务流程与实现思路
     ......
  • 武汉星起航跨境电商:亚马逊云斥资1亿美元建AIGC中心
    亚马逊云业务部门AWS宣布,将投资1亿美元建立一个中心,以帮助企业使用生成式人工智能(AIGC)技术。这一举措进一步加强了亚马逊与谷歌和微软在人工智能领域的竞争,标志着亚马逊在此领域的重要举措。AWS首席执行官塞利普斯基(AdamSelipsky)表示,人工智能领域的竞争可以形容为一场"10K比赛",即......
  • 【vue2】vuex超超超级详解!(核心五大配置项)
    ......
  • 【vue2】Vue Cli脚手架与VueTools的安装详解
    ......
  • vue2中$set用法详细讲解
    1、为什么要用set?在vue中,并不是任何时候数据都是双向绑定的。在官方文档中,有这样一段话,如下: 从文档得知,当数据没有被双向绑定的时候,我们就需要使用set了2、set用法解决数据没有被双向绑定我们可以使用vm.$set实例方法,该方法是全局方法Vue.set的一个别名。this.$set(原......
  • 《MySQL 实战 45 讲》学习笔记一
    一条SQL查询语句是如何执行的?MySQL的基本架构示意图(语句执行流程)  ......
  • TensorFlow11.5 循环神经网络RNN-LSTM、LSTM实战
    LSTM的产生我们之前在求RNN的loss的时候很容易出现梯度弥散或者梯度爆炸。这个LSTM的出现很大程度上减少了梯度弥散的情况。还有一个很重要的就是RNN只能够记住一个比较短的序列,如果一个句子单词很多的话,它学到最后一个的时候可能它的前面的就忘记了。而这个LSTM能够改善这问题......
  • Vue2.x 基本认识四:路由
    路由认识概念路由(route)就是一组(key -value)对应关系。多个路由由一个路由器(router)管理。key为路径,value可能是function或component。function是后端路由,用于请求服务器获取数据。component是前端路由,用于展示页面内容。但浏览器的路径改变时,对应的组件就会显示。作......
  • 项目集成redis实战
    项目集成redis实战1.进入到项目的tomcat配置文件中,修改redis服务器和密码cd/usr/src/tomcat-pinter/webapps/WEB-INF/classes/viapplication.properties.2.杀死tomcat进程,重启服务3.重启服务cd/usr/src/tomcat-pinter/bin./startup.sh&tail–f../logs/catalina.ou......
  • 十年电商数据分析经验分享【速收藏】
    电商行业它不仅改变了人们购物的方式,还改变了传统商业模式。如何利用电商平台上庞大的用户群体、商品数据和交易数据等宝贵的数据资源,成了电商企业发展和竞争的关键。那么,如何进行电商数据分析,获得更多的商业价值,为企业决策带来新思路和方案呢?这就需要有一款好用的、可靠的BI大数据......