vue尚品汇商城项目-day07【44.个人中心二级路由搭建+45.我的订单+46.优化登录跳转+47.独享守卫】

在这里插入图片描述

文章目录

    • 44.个人中心二级路由搭建
    • 45.我的订单
    • 46.优化登录跳转
    • 47.独享守卫
  • 本人其他相关文章链接

44.个人中心二级路由搭建

修改代码:

将Center拆分为2个组件MyOrder+GroupOrder

src/router/routes.js

import Center from '@/pages/Center'
import GroupOrder from '@/pages/Center/GroupOrder'
import MyOrder from '@/pages/Center/MyOrder'

{
        name: 'center',
        path: '/center',
        component: Center,
        meta:{"isShow": true},   //自定义元数据属性,判断Footer组件在底部是否显示
        children: [ //通过children配置子级路由
            {
                path: 'myOrder',
                component: MyOrder,
            },
            {
                path: 'groupOrder',
                component: GroupOrder,
            },
            {
                path: '',
                redirect: 'myorder'
            }
        ]
    },

src/pages/Center/index.vue

<router-link to="/center/myOrder">我的订单</router-link>
<router-link to="/center/groupOrder">团购订单</router-link>
<router-view></router-view>

45.我的订单

修改代码:

src/api/index.js

//获取个人中心的数据
//api/order/auth/{page}/{limit}  get
export const reqMyOrderList = (page,limit)=>requests({url:`/order/auth/${page}/${limit}`,method:'get'});

src/pages/Center/MyOrder/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"
            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>x{{ cart.skuNum }}</span>
                <a href="#" class="service">售后申请</a>
              </div>
            </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 }}.00</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"
            >
              <ul class="unstyled">
                <li>
                  <a href="mycomment.html" target="_blank">评价|晒单</a>
                </li>
              </ul>
            </td>
          </tr>
          </tbody>
        </table>
      </div>
      <div class="choose-order">
        <!-- 分页器 -->
        <Pagination
            :pageNo="page"
            :pageSize="limit"
            :total="myOrder.total"
            :continues="5"
            @getPageNo="getPageNo"
        />
      </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",
  data() {
    return {
      //初始化参数
      //当前第几页
      page: 1,
      //每一页展示数据个数
      limit: 3,
      //存储我的订单的数据
      myOrder: {},
    };
  },
  mounted() {
    //获取我的订单的数据方法
    this.getData();
  },
  methods: {
    //获取我的订单的方法
    async getData() {
      //解构出参数
      const { page, limit } = this;
      let result = await this.$API.reqMyOrderList(page, limit);
      console.log("******获取个人中心的数据result:{}", result)

      if (result.code == 200) {
        this.myOrder = result.data;
      }
    },
    //获取当前点击那一页
    getPageNo(page){
      //修改组件响应式数据page
      this.page = page;
      this.getData();
    }
  },
};
</script>

<style scoped></style>

46.优化登录跳转

优化点:之前是登录后默认都是跳转的/home首页,现在有个需求:用户未登录情况下点击跳转订单页 -> 先跳转到登录页 -> 当登陆成功后应该跳转到订单页而不是首页

方案:

src/router/index.js

else{
        //未登录:不能去交易相关、不能去支付相关【pay|paysuccess】、不能去个人中心
        //未登录去上面这些路由-----登录
        let toPath = to.path;
        if(toPath.indexOf('/trade')!=-1 || toPath.indexOf('/pay')!=-1||toPath.indexOf('/center')!=-1){
            //把未登录的时候向去而没有去成的信息,存储于地址栏中【路由】
            next('/login?redirect='+toPath);
        }else{
            //去的不是上面这些路由(home|search|shopCart)---放行
            next();
        }
    }

src/pages/Login/index.vue

原来的代码:
this.$router.push("/home");
------------------------------------------------------------------------------------------------------------------------
优化后的代码:
//判断query是否有参数,有就登录后重定向
let goPath = this.$route.query.redirect||'/home';
//跳转到首页
this.$router.push(goPath);

47.独享守卫

优化点:知识点46是针对未登录情况下的错误跳转,知识点47是针对已登录情况下,假设用户刚登录成功,能直接跳转支付成功页面或者订单页面吗?答案是不能。

方案:

src/router/routes.js

{
        name: 'trade',
        path: '/trade',
        component: Trade,
        meta:{"isShow": true},   //自定义元数据属性,判断Footer组件在底部是否显示
        //路由独享守卫
        beforeEnter: (to, from, next) => {
            //去交易页面,必须是从购物车而来
            if (from.path == "shopCart") {
                next();
            } else {
                next(false);
            }
        }
},
{
        name: 'paySuccess',
        path: '/paySuccess',
        component: PaySuccess,
        meta:{"isShow": true},   //自定义元数据属性,判断Footer组件在底部是否显示
        //路由独享守卫
        beforeEnter: (to, from, next) => {
            //去交易页面,必须是从购物车而来
            if (from.path == "pay") {
                next();
            } else {
                next(false);
            }
        }
    },

本人其他相关文章链接

1.vue尚品汇商城项目-day07【44.个人中心二级路由搭建+45.我的订单+46.优化登录跳转+47.独享守卫】
2.vue尚品汇商城项目-day07【vue插件-48.(了解)图片懒加载插件】
3.vue尚品汇商城项目-day07【vue插件-49.(了解)自定义插件】
4.vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】
5.vue尚品汇商城项目-day07【51.路由懒加载】
6.vue尚品汇商城项目-day07【52.打包文件,处理map文件】
7.vue尚品汇商城项目-day07【53.nginx反向代理配置】
8.vue尚品汇商城项目-day07【vue插件-54.(了解)生成二维码插件】
9.vue尚品汇商城项目-day07【55.编码测试与打包发布项目】

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT 常见控件使用

1. QLineEdit 添加控件后&#xff0c;可以编辑控件的名称&#xff0c;然后使用名称获取和设置值 QString qstrValue ui->strName->text(); QMessageBox::information(this, "提示", qstrValue); 2.窗体导航切换 添加新的对话框&#xff0c;然后引入头文件…

游戏安全漏洞一些分享

安全界对漏洞的定义为&#xff1a;在硬件、软件、系统等具体实现或者系统安全策略上存在的缺陷&#xff0c;从而使攻击者能够达到于某种破坏效果。游戏安全漏洞属于常规漏洞的子类&#xff0c;常规漏洞的分类如下图所示&#xff1a; 通过以上的漏洞分类图可知游戏漏洞属于常规…

MATLAB | 如何绘制github同款日历热力图

应粉丝要求&#xff0c;出一个类似于github热图的日历热力图&#xff0c;大概长这样&#xff1a; 依旧工具函数放在文末&#xff0c;如有bug请反馈并去gitee下载更新版。 使用教程 使用方式有以下几种会慢慢讲到&#xff1a; heatmapDT(Year,T,V)heatmapDT(Year,T,V,MonLim)h…

被称为“眼黄金”的叶黄素究竟是什么?叶黄素则能过滤蓝光

人眼视觉依赖于黄斑的中心凹陷。黄斑中含有大量的叶黄素&#xff0c;因此被称为“黄斑”。叶黄素&#xff0c;也被称为“眼黄金”&#xff0c;是人类视网膜中最重要的营养物质。它含有黄斑&#xff08;视觉中心&#xff09;和晶状体&#xff0c;特别是黄斑中含有高浓度的叶黄素…

外部中断实验

基础知识及实验目标 目标&#xff1a;通过中断来实现按键对小灯的控制。 WK_UP 翻转小灯&#xff1b; KEY 1控制 DS1按一次亮&#xff0c;再按一次灭&#xff1b;KEY 0控制DS0&#xff0c;按一次亮&#xff0c;再按一次灭。 触发中断的意思就是&#xff1a;当这个IO口达到触发…

MathType公式使用技巧汇总——Mathtype怎么在word中编辑公式?论文中公式有哪技巧?有哪些注意事项?论文中的公式怎么写?

文章目录1 Mathtype安装2 word 段落间插入公式3 文字间嵌入&#xff08;内联&#xff09;公式4 公式修改5 不要使用键盘上的括号等符号5.1 键盘上符号引发的问题5.2 正确的符号使用方法6 常用设置6. 1公式字体大小设置6.2 公式样式设置7 公式标号设置8 MathType怎么设置下一章公…

ESP-C3入门18. 低功耗蓝牙SPP Server端功能测试

ESP-C3入门18. 低功耗蓝牙SPP Server端功能测试一、功能简介1. GATT2. SPP3. SPP Server和 SPP Client二、 SPP Server开发步骤1. 启动 GATT Server2. SPP 任务初始化3. 注册 SPP应用程序4. UART 初始化5. UART 事件处理程序二、完整程序1. 代码和注释2. 运行方法一、功能简介 …

【SQL 必知必会】- 第八课 使用函数处理数据

目录 函数 函数带来的问题 可移植&#xff08;portable&#xff09; 是否应该使用函数&#xff1f; 使用函数 文本处理函数 SOUNDEX 支持 日期和时间处理函数 数值处理函数 函数 函数带来的问题 与几乎所有DBMS 都等同地支持SQL 语句&#xff08;如SELECT&#xff09;不同&am…

Selenium Web UI 自动化分布式运行:SeleniumGrid

简介&#xff1a;Selenium Grid是selenium的三大组件之一&#xff0c;它允许Selenium-RC针对规模庞大的测试案例集或者需要在不同环境中运行的测试案例集进行扩展。通过将客户端命令发送到远程浏览器的实例, Selenium Grid 允许在远程计算机 (虚拟或真实) 上执行WebDriver脚本.…

2016蓝桥杯C/C++B组

剪邮票 解题思路&#xff1a;做法很多&#xff0c;dx[], dy[]做出来不对&#xff0c;4*4 会出现16个方向重复了&#xff0c;只有四个方向要注意。 然后又看到网上的另一个做法使用全排列&#xff0c;用{1, 1 ,1,1,1 ,0&#xff0c;0&#xff0c;0&#xff0c;0}五个1&#xf…

Web漏洞-RCE代码及命令执行漏洞全解-web漏洞产生的原理及条件-墨者靶场详解

目录 一、导图 二、RCE漏洞简介 三、代码执行漏洞示例 四、命令执行漏洞示例 五、漏洞的产生条件 <网站原码层面> <网站应用层面> 六、漏洞检测 七、黑盒-应用层面-漏洞实例 八、白盒-代码层面-漏洞实例 九、黑盒-RCE公开漏洞-漏洞实例 十、漏洞产生的…

推箱子小游戏

文章目录一、 介绍二、 制作墙壁、地面三、 制作箱子四、 制作终点五、 制作人物移动六、 推箱子关键触发机制七、 终点设置八、 关卡切换设置九、 协程十、 下载一、 介绍 2D推箱子游戏是一种益智类游戏&#xff0c;玩家需要控制角色将箱子推到指定的位置&#xff0c;以完成关…

[Latex]特殊符号和花式字体

特殊符号 正体希腊字母 大写效果小写效果大写效果小写效果异体效果$\Alpha$A\AlphaA$\alpha$α\alphaα$\Beta$B\BetaB$\beta$β\betaβ\Gamma$Γ\GammaΓ$\gamma$γ\gammaγ$Delta$Δ\DeltaΔ$\delta$δ\deltaδ$\Zeta$Z\ZetaZ$\zeta$ζ\zetaζ$Epsilon$E\EpsilonE$\epsilon$…

Qt学习笔记

Qt学习笔记整理&#xff0c;内容主要包含&#xff1a; QT的概述创建QT的项目(hello qt)第一个窗口及窗口属性第一个按钮信号与槽机制带菜单栏的窗口对话框布局常见的控件QT消息机制以及事件绘图与绘图设备 笔记整理时间&#xff1a;2023年3月24日~2023年3月29日 代码仓库&#…

录音文件如何转换成文字文件?

当今社会&#xff0c;录音文件转换成文字文件的需求越来越多&#xff0c;例如会议记录、采访笔录、讲座笔记等。但是&#xff0c;手动逐词逐句转录录音文件费时费力&#xff0c;尤其是文件较大的情况下&#xff0c;会给人带来很大的烦恼。因此&#xff0c;本文将介绍几种常见的…

算法设计-hw2

一、从分治到动态规划 1.1 动态规划的性质 ​ 动态规划具有以下三个明显特性&#xff1a; 无后效性&#xff1a;如果给定某一阶段的状态&#xff0c;则在这一阶段以后过程的发展不受这阶段以前各段状态的影响。如果说的直白一些&#xff0c;就是当我们求出 dpidp_idpi​ 的时…

剑指 Offer 40. 最小的k个数 剑指 Offer 42. 连续子数组的最大和

剑指 Offer 40. 最小的k个数 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入4、5、1、6、2、7、3、8这8个数字&#xff0c;则最小的4个数字是1、2、3、4。 示例 1&#xff1a; 输入&#xff…

HTML5 <form> 标签

HTML5 <form> 标签 实例 带有两个输入字段和一个提交按钮的 HTML 表单&#xff1a; <form action"demo_form.php" method"get">First name: <input type"text" name"fname"><br>Last name: <input type&qu…

永久删除文件不得恢复吗 不小心永久删除文件怎么办

一般情况下&#xff0c;我们清理电脑文件时都不是彻底删除文件。这些被删除的文件&#xff0c;基本上都可以通过电脑回收站直接恢复。那么&#xff0c;永久删除文件不得恢复吗&#xff0c;不小心删除永久文件怎么办&#xff1f;今天作者就和大家一起探讨这两个问题。 一、永久…

网络映射工具

网络映射&#xff1a;定义 网络映射是用于发现新设备、接口以及可视化物理和虚拟网络连接的过程。网络拓扑映射提供对 IT 基础架构的全面可见性。网络映射工具通过精确定位网络故障来帮助简化网络监控。 如何进行网络映射 使用专门的网络映射软件是完成网络映射的最有效方法…