vue3+elementPlus之后台管理系统(从0到1)(day2)

登录页面

静态页面搭建

<template><div class="login-container"><div class="form-wrap"><h2 class="header">后台管理系统</h2><el-input v-model="adminName" placeholder="请输入管理员账号" /><el-input class="psw" v-model="password" placeholder="请输入密码" /><el-button type="success">登录</el-button></div></div>
</template><script>
export default{name:'LoginView',//data是函数,每个组件有自身独立的数据data(){return{adminName:'',password:''}}
}
</script>
<style lang="scss" scoped>
.login-container{height: 100%;background-color: rgb(249, 217, 202);
}.form-wrap{position: absolute;width: 360px;left:50%;top:50%;transform: translate(-50%,-50%);background-color: beige;border-radius: 15px;padding: 32px 32px 20px;.header{text-align: center;margin-bottom: 32px;}.psw{margin-top: 10px;}.el-button{width: 100%;margin-top: 20px;}
}
</style>

表单验证

安装插件 铁皮饭盒 any-role 正则表达式,在搜索框直接输入>+验证名,如>密码

if(this.adminName.length<5){ElMessage.error("账号长度要大于5")//让代码不再执行return}if(/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]/.test(this.password)){ElMessage.error("密码需要包含大写、小写字母和数字")}

md5加密

md5 - npm

安装md5

npm install md5

导入包使用

import md5 from 'md5';
md5(this.password)

发送网络请求

起步 | Axios中文文档 | Axios中文网

安装axios

npm install axios

导入axios使用

import axios from 'axios';
axios.get('http://121.89.205.189:3000/api/pro/list').then(res=>{console.log(res)}).catch(err=>console.log(err))

封装axios

1、配置baseURL

2、请求拦截器,就是请求之前还需要做什么配置

3、响应拦截器,就是服务器给出响应后,返回到前端前需要做什么操作,reponse.data

4、封装各种请求方法,如get,post,put等

import axios from "axios";//封装baseURL//开发环境   生产环境   测试环境
//获取当前环境是否为开发环境,
const isDev = process.env.NODE_ENV=='development'const request = axios.create({//baseURL:isDev?开发环境:生产环境baseURL:isDev?'http://121.89.205.189:3000/admin':'http://121.89.205.189:3000/admin',timeout:60000    //1分钟})// 添加请求拦截器
request.interceptors.request.use(function (config) {// 在发送请求之前做些什么,比如可以在这里配置对应的tokenreturn config;}, function (error) {// 对请求错误做些什么return Promise.reject(error);});// 添加响应拦截器
request.interceptors.response.use(function (response) {// 2xx 范围内的状态码都会触发该函数。// 对响应数据做点什么//判断用户的登录状态//因为服务器响应的时候有两个data,所以返回reponse.datareturn response.data;}, function (error) {// 超出 2xx 范围的状态码都会触发该函数。// 对响应错误做点什么return Promise.reject(error);});//自定义各种数据请求的axiosexport default function ajax(config){//数据请求的时候需要什么参数//1、获取请求的一些必要参数const {url='',method='',data={},headers={}} = config;//2、判断请求的类型switch(method.toUpperCase()){case 'GET':return request.get(url,{params:data})case 'POST'://表单数据提交if(headers['content-type']=='application/x-www-form-url-encoded'){//转换参数类型,格式化数据const obj = new URLSearchParams();for(const key in data){if(Object.hasOwnProperty.call(Object,key)){obj.append(key,Object[key])}}return request.post(url,obj,{headers});}//文件数据提交if(headers['content-type']=='multipart/form-data'){//处理文件的对象const obj = new FormData;for(const key in data){obj.append(key,Object[key])}return request.post(url,obj,{headers});}//json数据提交return request.post(url,data);case 'PUT'://修改或更新数据return request.put(url,data);case 'DELETE':return request.put(url,{data});case 'PATCH'://更新局部资源return request.patch(url,data);default:return request.request(config);}}

登录功能的实现

创建一个api/user.js

封装请求接口loginFn

//导入封装的axios
import ajax from "@/utils/axios";//管理系统登录接口的封装
export function loginFn(params){return ajax({method:'POST',url:'/admin/login',data:params})
}

在login页面中导入api/user.js,然后发送数据

loginFn({adminname:this.adminname,password:this.password}).then(res=>{if(res.code==='10005'){//未注册ElMessage.error(res.message)return}else if(res.code==='10003'){//密码错误ElMessage.error(res.message)return}else{//this.$router路由对象,.push() 需要进入的路由this.$router.push("/")}})

vuex 状态管理模式

Vuex 是什么? | Vuex

  • 状态,驱动应用的数据源;

  • 视图,以声明方式将状态映射到视图;

  • 操作,响应在视图上的用户输入导致的状态变化。

安装vuex

npm install vuex@next --save

在src中创建store/index.js

import { createStore } from 'vuex'// 创建全局状态 store 实例
const store = createStore({//全局状态state () {return {//存放用户信息的对象userInfo:{}}},//唯一修改数据的方法mutations: {//保存用户登录数据updateUserInfo(state, value){state.userInfo=value}},//异步修改数据的方法actions:{},//vuex中的计算属性getters:{},//状态模块modules:{}
})//导出实例
export default store

在main.js中挂载store实例

import store from '@/store';
//将全局状态store挂载到实例中
app.use(store)

在组件中使用

1、在模板中直接$store.state.属性即可

{{ $store.state.userInfo.adminname }}

2、通过映射 mapState

import { mapState, mapMutations } from 'vuex';computed:{...mapState(['userInfo'])},//组件中使用{{userInfo}}

组件中修改全局状态

1、在全局状态中定义方法

mutations:vuex中唯一修改状态的地方

actions:异步操作的地方

1、通过this.$store.commit('') 触发mutations;  通过this.$store.dispatch('') 触发actions
2、通过mapMutations映射import { mapState, mapMutations } from 'vuex';
methods:{...mapMutations(['updateUserInfo'])}//第一种修改数据的方法
this.$store.commit('updateUserInfo',res.data)
//第二种修改数据的方法
this.updateUserInfo(res.data)

登录成功后

1、在全局状态定义一个用户信息和修改用户信息的方法

2、在登录成功后将数据更新到全局状态即可

vuex中的数据持久化

解决vuex中状态刷新页面后会恢复初始值

1、通过自己手动存储需要持久化的数据

//将token存储到本地
localStorage.setItem('token',res.data.token)

2、通过插件来进行自动持久化

安装插件

npm install --save vuex-plugin-persistedstate

在store/index.js中使用

import createPersistedState from "vuex-plugin-persistedstate";// 创建全局状态 store 实例
const store = createStore({...//vuex的配置插件plugins:[//创建持久化对象createPersistedState({//配置需要持久化的数据reducer: state=>{return {userInfo: state.userInfo}}})]
})

在首页验证用户是否登录

由于添加了持久化插件,刷新页面后数据依然存在

mounted(){if(!this.$store.state.userInfo.adminname){//用户没有登录this.$router.push('/login')}},

退出登录

添加退出登录按钮

<button @click="logout">退出</button>

 退出登录方法

methods:{logout(){localStorage.clear();this.$store.commit('updateUserInfo',{})this.$router.push('/login')}}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

svn tag

一般发布版本前&#xff0c;需要在svn上打个tag。步骤如下&#xff1a; 1、空白处右击&#xff0c;选择TortoiseSVN->Branch/tag; 2、填写To path&#xff0c;即tag的路基以及tag命名&#xff08;一般用版本号来命名&#xff09;&#xff1b;填写tag信息&#xff1b;勾选cr…

通信协议之数据帧常用校验方法(奇偶校验、CRC校验)

前言 学习永无止境&#xff01;本篇是通信协议之数据帧校验方法&#xff0c;包括奇偶校验、CRC等校验原理及实现。 注&#xff1a;本文章为学习笔记&#xff0c;部分图片与文字来源于网络/应用手册&#xff0c;如侵权请联系&#xff01;谢谢&#xff01; 一、奇偶校验 1.1 奇偶…

[EAI-018] π0: A Vision-Language-Action Flow Model for General Robot Control

Paper Card 论文标题&#xff1a;π0: A Vision-Language-Action Flow Model for General Robot Control 论文作者&#xff1a;Kevin Black, Noah Brown, Danny Driess, Adnan Esmail, Michael Equi, Chelsea Finn, Niccolo Fusai, Lachy Groom, Karol Hausman, Brian Ichter, …

医院挂号就诊系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装医院挂号就诊系统软件来发挥其高效地信息处理的作用&#…

解锁辅助驾驶新境界:基于昇腾 AI 异构计算架构 CANN 的应用探秘

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《AI大模型》 期待您的关注 目录 一、引言 二、CANN 是什么 1. 异构计算与人工智能的关系 2. CANN 的定义和作用 3. CANN 的技…

【前端】CSS学习笔记

目录 CSS的简介CSS的概念语法 CSS的引入方式内联样式&#xff08;行内样式&#xff09;内部样式外部样式&#xff08;推荐&#xff09; 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…

深度学习 DAY1:RNN 神经网络及其变体网络(LSTM、GRU)

实验介绍 RNN 网络是一种基础的多层反馈神经网络&#xff0c;该神经网络的节点定向连接成环&#xff0c;其内部状态可以展示动态时序行为。相比于前馈神经网络&#xff0c;该网络内部具有很强的记忆性&#xff0c;它可以利用它内部的记忆来处理任意时序的输入序列&#xff0c;…

[STM32 HAL库]串口空闲中断+DMA接收不定长数据

一、空闲中断 STM32的串口具有空闲中断&#xff0c;什么叫做空闲呢&#xff1f;如何触发空闲中断呢&#xff1f; 空闲&#xff1a;串口发送的两个字符之间间隔非常短&#xff0c;所以在两个字符之间不叫空闲。空闲的定义是总线上在一个字节的时间内没有再接收到数据。触发条件…

计算机网络 (49)网络安全问题概述

前言 计算机网络安全问题是一个复杂且多维的领域&#xff0c;它涉及到网络系统的硬件、软件以及数据的安全保护&#xff0c;确保这些元素不因偶然的或恶意的原因而遭到破坏、更改或泄露。 一、计算机网络安全的定义 计算机网络安全是指利用网络管理控制和技术措施&#xff0c;保…

机器学习中的方差与偏差

文章目录 方差与偏差1.1 数据1.1.1 数据的分布1.1.2 拟合 1.2 方差与偏差1.2.1 泛化误差的拆分1.2.2 理解方差偏差 1.3 方差-偏差trade-off1.3.1 方差-偏差trade-off1.3.2 方差与偏差诊断 1.4 降低策略1.4.1 噪声1.4.2 高偏差1.4.3 高方差 方差与偏差 1.1 数据 1.1.1 数据的分…

力扣 有效的括号

括号匹配问题&#xff0c;找到符合的进行抵消。 题目 从题可以看出是嵌套的括号先匹配先做抵消&#xff0c;类似就近原则&#xff0c;这也是栈的典型例题。可以通过枚举多种不同的情况慢慢用if与else做返回。 时间复杂度&#xff1a;O(n)&#xff0c;其中 n 是字符串的长度。…

js: 区分后端返回数字是否为null、‘-’ 或正常number类型数字。

问&#xff1a; 这是我的代码<CountTo v-if!isNaN(Number(item.num))> <span v-else>{{item.num}}</span> 我希望不是null的时候走countTo&#xff0c;是null的时候直接<span>{{item.num}}</span>显示 回答&#xff1a; 最终结果&#xff1a; …

Chapter5.4 Loading and saving model weights in PyTorch

5 Pretraining on Unlabeled Data 5.4 Loading and saving model weights in PyTorch 训练LLM的计算成本很高&#xff0c;因此能够保存和加载LLM的权重至关重要。 ​ 在PyTorch中&#xff0c;推荐的方式是通过将torch.save函数应用于.state_dict()方法来保存模型权重&#x…

运动相机拍视频过程中摔了,导致录视频打不开怎么办

3-11 在使用运动相机拍摄激烈运动的时候&#xff0c;极大的震动会有一定概率使得保存在存储卡中的视频出现打不开的情况&#xff0c;原因是存储卡和相机在极端情况下&#xff0c;可能会出现接触不良的问题&#xff0c;如果遇到这种问题&#xff0c;就不得不进行视频修复了。 本…

Python制作简易PDF查看工具PDFViewerV1.0

PDFViewer PDF浏览工具&#xff0c;Python自制PDF查看工具&#xff0c;可实现基本翻页浏览功能&#xff0c;其它功能在进一步开发完善当中&#xff0c;如果有想一起开发的朋友&#xff0c;可以留言。本软件完全免费&#xff0c;自由使用。 软件界面简洁&#xff0c;有菜单栏、…

SpringBoot实现定时任务,使用自带的定时任务以及调度框架quartz的配置使用

SpringBoot实现定时任务&#xff0c;使用自带的定时任务以及调度框架quartz的配置使用 文章目录 SpringBoot实现定时任务&#xff0c;使用自带的定时任务以及调度框架quartz的配置使用一. 使用SpringBoot自带的定时任务&#xff08;适用于小型应用&#xff09;二. 使用调度框架…

Output

AUTOSAR OS模块详解(三) Alarm 本文主要介绍AUTOSAR OS的Alarm&#xff0c;并对基于英飞凌Aurix TC3XX系列芯片的Vector Microsar代码和配置进行部分讲解。 文章目录 AUTOSAR OS模块详解(三) Alarm1 简介2 功能介绍2.1 触发原理2.2 工作类型2.3 Alarm启动方式2.4 Alarm配置2.5…

openharmony应用开发快速入门

开发准备 本文档适用于OpenHarmony应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用&#xff08;如下图所示&#xff09;&#xff0c;快速了解工程目录的主要文件&#xff0c;熟悉OpenHarmony应用开发流程。 在开始之前&#xff0c;您需要了解有关OpenHarmon…

使用傅里叶变换进行图像边缘检测

使用傅里叶变换进行图像边缘检测 今天我们介绍通过傅里叶变换求得图像的边缘 什么是傅立叶变换&#xff1f; 简单来说&#xff0c;傅里叶变换是将输入的信号分解成指定样式的构造块。例如&#xff0c;首先通过叠加具有不同频率的两个或更多个正弦函数而生成信号f&#xff08;x…

用户中心项目教程(四)---Vue脚手架完成前端初始化

目录 1.项目的创建 2.使用开发工具打开 3.项目运行方法 4.使用按钮组件 5.全局注册 6.如何进行组件的测试 7.使用组件的效果展示 8.关于这个vue项目内容的说明 1.项目的创建 这个前提你是你完成了我的教程&#xff08;三&#xff09;里面的相关配置&#xff0c;不然你可…