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

news/2024/11/18 3:34:41/

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: stringpassword: string
}interface dataType {token: string
}
//定义登录接口返回的数据类型
export interface loginRespData {code: numberdata: dataType
}interface userInfo1 {userId: numberavatar: stringusername: stringpassword: stringdesc: stringroles: string[]buttons: string[]routes: string[]token: string
}interface userInfo {checkUser: userInfo1
}
//定义用户信息接口返回的数据类型
export interface userInfoData {code: numberdata: 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.ppmy.cn/news/167085.html

相关文章

USB-C手机声卡方案,支持手机一边听歌一边充电功能

USB-C手机声卡方案&#xff0c;Type-c音频转接器方案&#xff0c;让type-c手机支持一边听歌一边充电功能 USB-C手机声卡方案&#xff0c;支持华为三星小米手机边听边充 实现边听边充主要由一颗PD协议芯片&#xff0c;用来让充电器给手机充电的同时手机可以通过耳机实现音频功能…

从5W慢充到100W快充,进步神速的手机快充是如何做到的?

origin: https://www.sohu.com/a/304439665_350653 2019-03-28 18:02 1 3月25日&#xff0c;小米联合创始人林斌在微博上公布了一段视频&#xff0c;视频显示&#xff0c;一部4000mAh的小米手机&#xff0c;仅需17分钟便可完全充满&#xff01;而这项新技术的功率高达100W…

简单解析手机充电器的工作原理

刚好前段时间拆了两个充电器&#xff0c;看下里面的电路就明白了。鉴于网络上不明真相出来误导人的特别多&#xff0c;很多网站竟然还有文章说手机充电器里没有变压器隔离的。因此简单说下手机充电器的工作原理。 图1&#xff1a; 开关式手机充电器拆机图 上面是我手头一个山寨…

5V手机充电器原理

一、5V锂电池-手机充电器 传统大个头的变压器&#xff0c;通过变压器原副边线圈绕组的匝数比来实现交流电压的变换&#xff0c;然后通过桥式整流、稳压滤波&#xff0c;甚至通过稳压芯片来实现恒定的电压输出。 传统的充电器很大的一个问题是&#xff0c;变压器必须做的很大&a…

2022谈谈手机充电头/快充头/电源适配器

1.各大品牌厂商的手机充电头能不能混用&#xff1f; 一般是可以的&#xff0c;但只支持基本的5V正常充电。 2.为什么混用手机充电头&#xff0c;不能快充&#xff08;带小数点的那种&#xff09; 各手机厂商一般都有适合自家不同手机的定制快充协议。 混用手机充电头&#…

如何查看自己的手机是否支持无线充电功能?最新无线充电手机大全

如何查看自己的手机是否支持无线充电功能&#xff1f;无线充电是时下手机行业的热门话题&#xff0c;最新发布的苹果华为小米旗舰机都搭载了无线充电功能&#xff0c;所以经常就听到有朋友问哪些手机支持无线充电功能&#xff1f;而又如何查看自己的手机是否支持无线充电功能呢…

手机快充技术——快充技术硬件详解

快充技术的四大家族 高通的QuickCharge版&#xff08;如QC2.0、QC3.0、QC4.0&#xff09; 联发科版&#xff08;Pump Express和Pump Express plus&#xff09; OPPO 的VOOC技术&#xff08;SuperVOOC和VOOC&#xff09; 兼容QuickCharge协议和海思快充协议华为快充技术 后…

DB207S-ASEMI手机快充适配器标配整流桥

编辑&#xff1a;ll DB207S-ASEMI手机快充适配器标配整流桥 型号&#xff1a;DB207S 品牌&#xff1a;ASEMI 封装&#xff1a;DBS-4 电性参数&#xff1a;2A 1000V 正向电流&#xff1a;2A 反向耐压&#xff1a;1000V 引脚数量&#xff1a;4 芯片个数&#xff1a;4 芯…