vue3-实战-03-管理后台路由分析搭建和登录模块开发

news2025/7/19 2:37:37

1-路由的搭建

       先分析模块,搭建一些基础的路由信息,我们分析需要登录页面路由,登录成功后展示数据路由,404页面路由,以及我们输入错误的路径的我们需要重定向到404路由。配置好相关路由之后,我们需要在入口文件man.ts中进行引入和注册。

我们需要先在src\views新建路由的页面组件,

       然后我们需要创建路由配置文件index.ts,在src\router目录下创建路由配置文件index.ts;我们将常量路由抽取出单独的文件配置,然后在index.ts中引入

 router.ts文件内容如下:

//对外暴露配置路由
export const constantRoute=[
    {
        //登录路由
        path: '/login',
        component: ()=>import('@/views/login/index.vue'),
        name: 'login' //命名路由
    }
    ,
    {
        //登录成功后展示数据路由
        path: '/',
        component: ()=>import('@/views/home/index.vue'),
        name: 'layout' //命名路由
    }
    ,
    {
        //404路由
        path: '/404',
        component: ()=>import('@/views/404/index.vue'),
        name: '404' //命名路由
    }
    ,
    {
        //任意路由,上面都没有匹配,重定向到404页面
        path: '/:pathMatch(.*)*',
        redirect: '/404',
        name: 'Any' //命名路由
    }

]

 

 2-登录模块静态路由搭建

2.1-静态页面搭建

我们需要对登录页面进行分析,搭建出静态的页面。


通过基础layout布局,element-plus默认是 24 分栏,我们看页面,我们大概分一行两格,每格12。


1-初始情况分为一行两列,均分,每格span,=12,使用xs 这个属性,当<768px 响应式栅格数或者栅格属性对象,让左侧变为0,后侧占满全部24。

2-右侧的是一个表单,使用el-form,上面有两个标题,下面是两个input输入框,还需要使用el-input的prefix-icon(自定义前缀图标)和show-password来控制密码的显示和隐藏;需要导入
import {User,Lock} from '@element-plus/icons-vue'

3-需要收集表单数据:使用代理对象 import {reactive} from 'vue'

<template>
  <div class="login_container">
    <el-row>
      <el-col :span="12" :xs="0"></el-col>
      <el-col :span="12" :xs="24">
        <el-form class="login_form">
          <h1>Hello</h1>
          <h2>欢迎羊叔管理平台</h2>
          <el-form-item>
            <el-input placeholder="登录账号" :prefix-icon="User" v-model="loginForm.username"></el-input>
          </el-form-item>
          <el-form-item>
            <el-input placeholder="登录密码" type="password" :prefix-icon="Lock"  v-model="loginForm.password" show-password></el-input>
          </el-form-item>
          <el-form-item>
            <el-button class="login_btn" type="primary" size="default">登录</el-button>
          </el-form-item>
        </el-form>

      </el-col>
    </el-row>
    
  </div>
</template>

<script setup lang="ts">
import {User,Lock} from '@element-plus/icons-vue'
//收集表单数据-使用代理对象
import {reactive} from 'vue'
let loginForm=reactive({
  username: 'admin',
  password: '111111'
})

</script>


<style scoped lang="scss">
.login_container{
  widows: 100%;//宽度跟浏览器一样宽
  height: 100vh;//1vh 屏幕可见高度的1%
  background: url('@/assets/images/background.jpg') no-repeat;
  background-size: cover;
  .login_form{
    position: relative;
    width: 80%;
    top: 30vh;
    background: url('@/assets/images/login_form.png') no-repeat;
    background-size: cover;
    padding: 40px;
    h1{
      color: white;
      font-size: 40px;
    }
    h2{
      color: white;
      font-size: 20px;
      margin: 20px 0px;
    }
    .login_btn{
      width: 100%;
    }

  }

}
</style>

2.2-API统一接口管理

       我们将用户模块需要用的到接口统一管理起来,在src\api\user目录下管理用户模块相关接口【这里主要以登录和获取用户信息详情讲解】,

 注意:
export const reqLogin = (data: loginForm) => request.post<any, loginRespData>(API.LOGIN_URL, data)
或者
export const reqLogin = (data: loginForm) => {return request.post<any, loginRespData>(API.LOGIN_URL, data) }

如果在箭头右侧使用了{},必须使用return 关键字返回,否则会导致async 和await 失效

 src\api\user\type.ts文件中定义接口请求和返回的数据类型,内容如下:

//定义数据类型
//定义登录接口请求的数据类型
export interface loginForm {
  username: string
  password: string
}

interface dataType {
  token: string
}
//定义登录接口返回的数据类型
export interface loginRespData {
  code: number
  data: dataType
}

interface userInfo1 {
  userId: number
  avatar: string
  username: string
  password: string
  desc: string
  roles: string[]
  buttons: string[]
  routes: string[]
  token: string
}

interface userInfo {
  checkUser: userInfo1
}
//定义用户信息接口返回的数据类型
export interface userInfoData {
  code: number
  data: userInfo
}


2.3-pinia仓库存数据

      在vue2中我们使用vuex进行数据仓库存数据,在vue3中我们使用pinia(官网:Pinia 中文文档)来实现数据存储。

在src\store目录下,我们先创建大仓库,需要注册在入口文件main.ts中。

 

 

然后针对每个模块,建立自己的小仓库,例如用户小仓库:src\store\modules\user.ts

 

 

2.4-登录组件发送action

我们需要在登录组件中发送登录请求,点击登录组件按钮发送请求,核心代码截图出来;

 

2.5-登录接口相关后续逻辑

       当我们发送登录请求后,如果登录成功,我们需要存储登录接口返回的token信息,如果失败,需要弹框提示用户。
1-首先我们的仓库action必须返回一个promise对象,不管成功还是失败,这样在登录组件中我们才能知道接口成功还是失败;
2-登录成功之后,我们需要将登录接口返回的token持久化存储localStorage,后续我们调用其他接口需要token的时候直接从localStorage中获取就行,我们可以将获取和设置token方法封装到一个文件中;
3-登录不管成功还是失败,我们需要弹框提示用户,需要用到ElNotification组件;
4-当我们点击登录,需要实现加载的效果;


src\utils\token.ts:封装token相关方法

 

src\store\modules\user.ts:设置token和获取token,已经返回promise对象(不管成功还是失败,都需要返回Promise对象

 

src\views\login\index.vue:登录组件需要实现加载loading的效果,以及登录成功失败弹出消息提示框。loading默认为false,当点击按钮后,需要设置为true;不管登录成功还是失败,最后都要设置为false。

 

这里login函数,不管成功还是失败,使用了try-catch,当然也可以使用then来实现。

 

用户数据类型完善:

1-比如登录接口,有可能失败,失败返回的数据类型和成功不一样,我们需要完善;
2-用户模块小仓库的store对象中state,我们也可以定义数据类型,目前需要就是一个token

 src\store\modules\types\type.ts

 

 

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

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

相关文章

基于 ESP32-H2 构建高性价比的安全物联网设备

如今&#xff0c;人们对网联设备安全性的认识和关注不断增加。在欧盟《网络弹性法案》也即将生效的&#xff0c;为网联设备增加硬件层面的安全功能非常重要。 乐鑫 ESP32-H2 致力于为所有开发者提供高性价比的安全解决方案&#xff0c;这款芯片经过专门设计以集成多种安全功能…

【java】java访问https并验证账号密码

java访问https&#xff0c;获取页面或者数据时&#xff0c;需要证书和账号密码的验证。 一 获取CRT证书 获取网站的证书&#xff0c;拿到证书后可能是crt格式&#xff0c;可以使用下面的命令转为p12格式 openssl pkcs12 -export -in Mycert.crt -inkey Mykey.key -out Mycer…

0基础学习VR全景平台篇第35篇:场景功能-细节

本期为大家带来蛙色VR平台&#xff0c;场景管理—细节功能操作。 功能位置示意 一、本功能将用在哪里&#xff1f; 细节功能&#xff0c;用于展示VR漫游作、大像素、高清矩阵作品中细微不容易发现&#xff0c;但却又比较有亮点或者能起到关键作用的画面。 通过在全景图中添加…

javaWeb ssh课程资源网站myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh课程资源网站系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

字节的测试面试题,你觉得很难吗?不是有手就行....

年前的时候&#xff0c;我的一个粉丝跟我说&#xff0c;他在面试美团的自动化测试岗的时候&#xff0c;不幸挂掉了。 越想越可惜&#xff0c;回想面试经过&#xff0c;好好总结了几个点&#xff0c;发现面试没过的主要原因是在几个关键的问题没有给到面试官想要的答案 字节的…

6-HEX, SE,引物荧光标记试剂,胺反应性琥珀酰亚胺酯,广泛用于nucleic acid测序和相关研究

6-HEX, SE | 6-HEX,SE [6-羧基-2&#xff0c;4,4&#xff0c;5&#xff0c;7,7-六氯荧光素&#xff0c;琥珀酰亚胺酯] |CAS&#xff1a;N/A | 纯度&#xff1a;95% &#xff08;文章资料汇总来源于&#xff1a;陕西新研博美生物科技有限公司小编MISSwu&#xff09;​ 结构…

Android Cannot resolve symbol 找不到资源解决方案

一、介绍 在android开发中&#xff0c;我们经常会发现依赖了系统提供的库&#xff0c;但是无法引用&#xff0c;或者找不到&#xff0c; Cannot resolve symbol style/Theme.AppCompat.NoActionBar &#xff0c;报红。这些最经典的无法加载。 出现这个原因并不是你项目的原因&…

手把手教你如何正确永久使用Microsoft Office365?

office2019和office 365有什么区别的呢&#xff1f;为什么越来越多的人更加钟爱office365。简单来说office 2019的零售版本属于一次售出永久使用&#xff0c;价格上比较贵&#xff0c;而且功能上也不会再有更新。而office 365是一种基于云的订阅服务&#xff0c;我们花钱买的是…

Datax同步MySQL到ES

Datax同步MySQL到ES 1、在MySQL中建表2、在ES建立索引3、构建从MySQL到ES的Datax的Json任务4、运行mysql2es.json脚本以下是工作中做过的ETL&#xff0c;如有需要&#xff0c;可以私信沟通交流&#xff0c;互相学习&#xff0c;一起进步 1、在MySQL中建表 建表语句 CREATE TABL…

如何在Flutter 中启用空安全

目录 Step 1: 开启空安全设置 Step 2:检查可升级的三方库 Step 3:升级三方库 Step 4:代码适配支持空安全 Step 1: 开启空安全设置 Flutter 2默认启用了空安全&#xff0c;所以通过Flutter 2创建的项目是已经开启了空安全的检查的&#xff0c;不知道自己是什么版本的可以通…

【MCS-51单片机汇编语言】期末复习总结①——常见指令汇总(题型一)

文章目录 七大寻址方式重要指令转移堆栈加减乘除位操作跳转条件转移子程序常考题型 七大寻址方式 立即寻址&#xff1a;通过一个立即数来指定存储单元的地址&#xff0c;例如#41H&#xff1b;寄存器寻址&#xff1a;Rn&#xff08;n0~7)&#xff0c;A&#xff0c;B&#xff0c…

自学软件测试,一般人我劝你还是算了吧

软件测试自学是完全可以的&#xff0c;但是这句话并不代表人人都可以自学。 想转行软件测试&#xff0c;纯自学会遇到以下8个问题&#xff1a; 1、自学需要很高的自律性&#xff0c;你能做到吗&#xff1f; 2、自学在学习过程中会碰到很多困难&#xff0c;你都能解决吗&#xf…

直播入门手册

直播除了带货&#xff0c;现在越来越成了分享知识&#xff0c;增近主播和粉近距离互动的平台。最近看到抖音上越来越多的主播进行编程经验的分享&#xff0c;这是一个很好的传播知识的方式&#xff0c;以前我们学习编程技术一般看视频&#xff0c;其实视频的互动性没有直播那么…

智能家居数据分析:语音交互为用户偏好模式,使用最高达72%

哈喽大家好&#xff0c;近些年来&#xff0c;智能家居行业的发展无比迅速&#xff0c;同时&#xff0c;最近两年来人工智能技术的不断突破&#xff0c;对智能家居有着无与伦比的推动力。本期将为大家介绍下智能家居的行业形势。 通过数据可视化平台把报表数据处理后展示出来的…

(4)NUC980 RootFs

Buildroot是一个开源的嵌入式Linux系统构建工具&#xff0c;它可以帮助用户自动化构建Linux系统的各个部分&#xff0c;包括Linux内核、库、文件系统、应用程序等。通过Buildroot&#xff0c;用户可以根据需要选择和配置所需的软件包&#xff0c;从而构建一个定制化的Linux系统…

Nginx网站服务——编译安装及系统服务添加

Nginx网站服务——编译安装及系统服务添加 一、Nginx的相关知识1.Nginx的简介2. Apache与Nginx的区别3.Apache的优势4.Nginx的优势 二、Nginx编译安装1.关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下2.安装相关的依赖包3.创建运行用户、组4.编译安装Nginx5.检查、…

【Rust学习】web框架 Axum,提供REST API

cargo-watch:有修改就重启服务器&#xff0c;类似java web的热部署 安装&#xff1a;cargo install cargo-watch 使用&#xff1a;cargo watch -x run 这样每次有修改就会自动重启web服务 vscode插件Thunder Client(类似postman) hello,world 建议用cargo add的方式添加 […

视频压缩存储解决方案

一、背景介绍 随着视频技术的不断发展&#xff0c;人们对视频质量和存储需求的要求也越来越高。而视频文件的大小往往会给存储和传输带来诸多困扰。因此&#xff0c;如何有效地压缩视频文件成为了一个非常重要的问题。 二、压缩算法简介 有损压缩&#xff1a;通过去除视频中的…

SpringBoot3整合SpringSecurity,实现自定义接口权限过滤

接口权限过滤是指对于某些接口或功能&#xff0c;系统通过设定一定的权限规则&#xff0c;只允许经过身份认证且拥有相应权限的用户或应用程序进行访问和操作。这种技术可以有效地保护系统资源和数据安全&#xff0c;防止未授权的用户或程序进行恶意操作或非法访问。通常情况下…

广州华锐互动:智能虚拟人运用到短视频行业能带来哪些价值?

随着科学技术的不断发展&#xff0c;虚拟数字人呈现飞跃式发展&#xff0c;各式各样的虚拟数字人进入到我们的视野&#xff0c;而同样作为新风口的短视频行业&#xff0c;也成为了人们日常生活中不可或缺的一部分。那么&#xff0c;将这两者结合起来会带来哪些变化呢&#xff1…