Vue电商项目--个人中心

news2024/12/28 20:26:15

个人中心二级路由搭建

配置路由

界面如上

我们现在要实现一种方式就是点击右侧的,左侧发生变化

<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>

先把这部分拆走,拆分成俩部分

 但是很明显报错了,错误是图片路径的问题

  然后就没有问题了。

但是我们这块不是使用组件的方式,而是使用二级路由的方式

 

然后回到个人中心页面,配置路由

 然后就完事了

我的订单

就是我们当当做的个人中心页都是静态的。现在我们需要修改成动态的

写接口

获取我的订单列表

请求地址

/api/order/auth/{page}/{limit}

请求方式

GET

参数类型

参数名称

类型

是否必选

描述

page

string

Y

页码

limit

string

Y

每页显示数量

返回示例

成功:

{

    "code": 200,

    "message": "成功",

    "data": {

        "records": [

            {

                "id": 70,

                "consignee": "admin",

                "consigneeTel": "15011111111",

                "totalAmount": 29495,

                "orderStatus": "UNPAID",

                "userId": 2,

                "paymentWay": "ONLINE",

                "deliveryAddress": "北京市昌平区2",

                "orderComment": "",

                "outTradeNo": "ATGUIGU1584247289311481",

                "tradeBody": "Apple iPhone 11 (A2223) 128GB手机 双卡双待 A",

                "createTime": "2020-03-15 12:41:29",

                "expireTime": "2020-03-16 12:41:29",

                "processStatus": "UNPAID",

                "trackingNo": null,

                "parentOrderId": null,

                "imgUrl": null,

                "orderDetailList": [

                    {

                        "id": 81,

                        "orderId": 70,

                        "skuId": 2,

                        "skuName": "Apple iPhone 11 (A2223) 64GB 红色",

                        "imgUrl": "http://192.168.200.128:8080/xxx.jpg",

                        "orderPrice": 5499,

                        "skuNum": 1,

                        "hasStock": null

                    },

                    …

                ],

                "orderStatusName": "未支付",

                "wareId": null

            },

            …

        ],

        "total": 41,

        "size": 2,

        "current": 1,

        "pages": 21

    },

    "ok": true

}

去掉api,写错了

 然后就能拿到数据,并将它渲染到页面上

  虽然渲染到页面上,但有些内容并没有合并

 修改了一下代码,现在展示的是正确的。

<tbody>
                  <tr v-for="(cart,index) in order.orderDetailList" :key="cart.id">
                    <td :rowspan="order.orderDetailList.lenght" v-if="index==0" 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.lenght" v-if="index==0" width="8%" class="center">{{order.consignee}}</td>
                    <td :rowspan="order.orderDetailList.lenght" v-if="index==0" width="13%" class="center">
                      <ul class="unstyled">
                        <li>总金额¥{{order.totalAmount}}.00</li>
                        <li>在线支付</li>
                      </ul>
                    </td>
                    <td :rowspan="order.orderDetailList.lenght" v-if="index==0" width="8%" class="center">
                      <a href="#" class="btn">{{ order.orderStatusName }} </a>
                    </td>
                    <td :rowspan="order.orderDetailList.lenght" v-if="index==0" width="13%" class="center">
                      <ul class="unstyled">
                        <li>
                          <a href="mycomment.html" target="_blank">评价|晒单</a>
                        </li>
                      </ul>
                    </td>
                  </tr>
                </tbody>

然后写后面的分页器的功能

 然后就能实现分页器的功能

我看了一下以前的笔记,这个分页器是被配置的全局组件

未登录的导航守卫判断

优化了一些还没有实现的功能

还存在一个问题,未登陆访问,交易相关(trade)、支付相关(pay,paysuccess)、用户中心(center)相关跳转应该先到登陆页面 

我们可以通过这种方式。保存我们原先想要去的路由地址

反编译一下,把未登录的时候向去而没有去成的信息,存储与地址栏中

而我们此时就不能傻乎乎的直接跳home了

就是看路由当中是否包含query参数,有:跳到query参数指定路由,没有,跳到home中 

当当找到自己写的一个bug,就是无论点击哪个都是/login页面 这个是因为我其中,toPath.indexOf('/pay') != 1 这个条件判断是有问题的。应该将 != 1 修改为 !== -1。这样才能正确检查是否包含 '/pay'。

正确代码如下:

router.beforeEach(async (to,from,next)=>{
        next();
    let token=store.state.user.token;
    let name=store.state.user.userInfo.name;
    if(token){
        if(to.path=='/login'){
            next('/home')
        }else{
            // 如果有用户名
            if(name){
                next();
            }else{
                try {
                    // 没有用户名,派发action让仓库存储用户信息在跳转
                await store.dispatch('getUserInfo');
                next();
                } catch (error) {
                    // token过期
                    // 清除token
                    await store.dispatch('userLogout');
                    next('/login')
                }
            }
        }
    }else{
        // 卡登录,不能跳转交易、支付,个人中心方面的页面
        let toPath=to.path;
        console.log(toPath);
        if(toPath.indexOf('/trade')!=-1||toPath.indexOf('/pay')!=-1||toPath.indexOf('/center')!=-1){
            next('/login?redirect='+toPath);
        }else{
             // 去的不是这些页面,那就放行
             next();
        }

    }
})

用户登录(路由独享与组件内守卫)

刚刚考虑了用户没有登录的情况,现在考虑如果用户登录了。想paysuccess肯定就是不能打开的

。我们这里需要使用路由独享守卫(只负责自己路由的)

这行代码的意思是如果你是从购物车来的,那就放行。否则停留在当前

 

 通过这种方式来管理,当然我们除了这种方式。我们也可以采用组件内守卫

 

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

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

相关文章

《贫穷的本质》阅读笔记

《贫穷的本质》阅读笔记 2023年8月11日在杭州小屋读完&#xff0c;对于穷&#xff0c;我可有太多想说的了。可以说自己活这么大以来&#xff0c;一直在摆脱贫穷&#xff0c;也将会穷尽一生去避免贫穷。作为一个穷人该如何去摆脱贫穷&#xff0c;我觉得没有一个确切的答案&#…

SQL | 使用通配符进行过滤

6-使用通配符进行过滤 6.1-LIKE操作符 前面介绍的所有操作符都是通过已知的值进行过滤&#xff0c;或者检查某个范围的值。但是如果我们想要查找产品名字中含有bag的数据&#xff0c;就不能使用前面那种过滤情况。 利用通配符&#xff0c;可以创建比较特定数据的搜索模式。 …

SpringSpringBoot常用注解

目录 一、核心注解二、Spring Bean 相关2.1 Autowired2.2 Component, Repository, Service, Controller2.3 RestController 与 Controller2.4 Configuration 与 Component2.5 Scope 三、处理常见的 HTTP 请求类型3.1 GET 请求3.2 POST 请求3.3 PUT 请求3.4 DELETE 请求3.5 PATC…

Mybatis查询

返回实体类&#xff0c;必须指定返回类型&#xff0c; resultType不能省略&#xff0c;并且数据库字段名与实体类不一致会填充NULL&#xff0c;实体类我们一般都是驼峰&#xff0c;数据库字段一般都是下划线&#xff0c;所以在查询的时候可以起别名解决,属性填充本质上调用的是…

XXLJOB 怎么用

目录 1、数据库执行sql语句&#xff0c;建立表 2、配置Admin &#xff0c;连接xxl_job数据库 3、启动admin&#xff0c;访问 http://localhost:8080/xxl-job-admin 4、需要定时任务的微服务里导入依赖 5、配置yml&#xff08;admin地址&#xff0c;执行器名字 端口&#x…

小红书店铺怎样开通?(含详细步骤)

目录 一、小红书店铺开通 二、小红书店铺的权益 三、小红书店铺的三大玩法功能 四、小红书店铺常见问题 五、开店具体步骤&#xff1a; 大家好&#xff0c;我是网媒智星&#xff0c;今天跟大家分享一下小红书店铺怎样开通的问题&#xff0c;下文总结了详细步骤&#xff0c…

ipad触控笔有必要买吗?ipad可用触控笔推荐

苹果原装的电容笔&#xff0c;和国产的平替容笔最大的区别就在于&#xff0c;平替电容笔在压感功能上只具有倾斜的压感&#xff0c;而并没有跟苹果电容笔同样的重力压感&#xff0c;苹果电容笔同时具有倾斜压感与重力压感。但是&#xff0c;如果你不经常使用电容笔来绘画的话&a…

品牌渠道控价常见问题有哪些

不管是哪个品牌在做控价时&#xff0c;会遇到的问题都是相通的&#xff0c;如果筛选低价、窜货链接&#xff0c;如何去治理这些链接&#xff0c;使其下架&#xff0c;或者是改价。也会有品牌需要针对渠道中的乱价问题进行提前预警或者规避&#xff0c;这些可以通过分析电商数据…

访问学者申请简历写作指南

作为许多追求学术进步的人士所希望的&#xff0c;成为一名访问学者是一个极具吸引力的机会。无论是为了深化学术研究、拓展国际视野&#xff0c;还是与优秀的学者们互动交流&#xff0c;访问学者的身份都能为您带来丰富的经验。而在申请成为一名访问学者时&#xff0c;一份精心…

版本控制工具——git

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理&#xff0c;是软件配置管理的核心思想之一。 版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。每一次文件的改变&#xff0c;文件的…

利用简单的算法解决逻辑推理问题(推测名次/推理谁说谎)

该算法很简单&#xff0c;以至于我们只需要三部分就可以完成。以这一题为例&#xff1a; 我们创建一个数组arr[6] { 1 } arr[1]到arr[5]分别对应A B C E&#xff0c;数组的值对应的是他们的比赛名次。其中arr[0]是用来立个flag的(也就是说用来做标记)。 接下来我们只需要写两…

轻量的工作流引擎:告别低效,创造新高!

伴随着日益激烈的市场竞争&#xff0c;作为新时代的企业&#xff0c;如何在众多同质化竞争中脱颖而出&#xff0c;占有更多的市场份额&#xff0c;实现更大发展&#xff1f;此时此刻就需要拥有不同寻常的头脑&#xff0c;寻找不平常的路径&#xff0c;轻量的工作流引擎是低代码…

cron中文翻译工具类

实现效果 /*** cron转换中文工具类** author lixuan*/ public class CronUtil {private static final Logger LOGGER LoggerFactory.getLogger(CronUtil.class);/*** cron中文表达式*/private static final List<ValueLabelPair> HOUR_LIST generateValueLabelPairs(…

使用 Packet Tracer 查看协议数据单元

练习 2.6.2&#xff1a;使用 Packet Tracer 查看协议数据单元 地址表 本练习不包括地址表。 拓扑图 学习目标 捕获从 PC 命令提示符发出的 ping运行模拟并捕获通信研究捕获的通信从 PC 使用 URL 捕获 Web 请求运行模拟并捕获通信研究捕获的通信 简介&#xff1a; Wiresha…

Dynamics 365 实体配置各属性介绍

在主界面中,我们点击设置图标->高级设置->解决方案,即可跳转到解决方案配置页面。 解决方案的存在有两方面价值,一方面是方便我们对系统进行定制,比如新建实体。另一方面则是为了方便我们在不同的环境之间复制修改的内容,也即发布。 解决方案包配置 在解决方案包…

DERT:End-to-End Object Detection with Transformers

文章目录 摘要1、简介2、相关工作2.1、集合预测2.2、Transformer与并行解码2.3、目标检测 3、DETR模型3.1、目标检测集合预测损失3.2、DETR架构 4、实验4.1、与Faster R-CNN的对比4.2、消融4.3、分析4.4、用于全景分割的DETR 5、结论附录 AA.1、初步:多头注意层A.2、损失A.3、详…

广州华锐互动:电力VR安全体验让学员沉浸式感受安全危害

随着科技的不断发展&#xff0c;虚拟现实(VR)技术在电力安全体验中发挥着越来越重要的作用。VR技术可以提供一种沉浸式的体验&#xff0c;使学员更好地理解和掌握电气安全知识&#xff0c;从而减少意外事故的发生。 首先&#xff0c;VR技术可以模拟各种电气事故场景&#xff0…

最大交换(力扣)枚举 JAVA

给定一个非负整数&#xff0c;你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。 示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。 注意: 给定数字的范围是 [0, 10^8] 解题思路&#xff1a; 1、数最…

Figma高效工作秘笈:10个插件助你提效!

Figma插件本质上是遵循特定接口规范开发的小程序,对设计师来说,合理选择和使用Figma插件,可以极大地优化工作流程。不同的插件具有不同的用途,设计师可以根据实际需求选择适合的插件。市面上存在各种各样的Figma插件,初学者可能会不知所措。本文将推荐10款广受设计师欢迎、功能…

[Mongodb 5.0]单机启动

安装完mongodb后&#xff0c;会自动生成下面两个目录(mongod.conf中设定的)&#xff0c;用来存放日志和数据 /var/lib/mongo (数据目录) /var/log/mongodb (日志目录) 要启动一个单机版的mongodb&#xff0c;一般有两种方式&#xff1a; 第一种启动方式&#xff1a;直接使用…