学习vue后台管理框架2(登陆界面)

基于Vue的电商后台管理系统 前端项目是基于Vue的SPA项目,前端技术栈采用Vue+VueRouter+Element-UI+Axios+Echarts。目前完成进度:登陆界面、登录和退出功能、导航守卫功能 阅读详情

作者文章:https://segmentfault.com/a/1190000009506097

学习的框架:https://github.com/PanJiaChen/vue-element-admin

膜拜下大神

登陆页面 src/views/login/index.js

element-ui表单,验证:http://element.eleme.io/#/zh-CN/component/form
vuex:https://vuex.vuejs.org/zh-cn/modules.html

##是否展示密码

showPwd() { //展示密码
      if (this.passwordType === 'password') {
        this.passwordType = ''
      } else {
        this.passwordType = 'password'
      }
    }

##点击登陆按钮
this.$router.push() 路由跳转:https://router.vuejs.org/zh-cn/essentials/navigation.html

 handleLogin() {
      this.$refs.loginForm.validate(valid => {
        if (valid) { //验证通过
          this.loading = true  //按钮加载中
          this.$store.dispatch('LoginByUsername', this.loginForm).then(() => {
            // store/user.js/LoginByUsername  //成功的情况
            this.loading = false
            this.$router.push({ path: '/' })
          }).catch(() => {
            this.loading = false
          })
        } else {
          console.log('error submit!!')
          return false
        }
      })
    }

如果验证通过,那么就对用户名和密码进行检测
this.$store.dispatch: https://vuex.vuejs.org/zh-cn/actions.html (要学习action,mutations)
new Promise():https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014345008539155e93fc16046d4bb7854943814c4f9dc2000

store/user.js/LoginByUsername

import { loginByUsername, logout, getUserInfo } from ‘@/api/login’
import { getToken, setToken, removeToken } from ‘@/utils/auth’

‘@/utils/auth’ //@指的是src

//通过Cookie.set设置
export function setToken(token) {
  return Cookies.set(TokenKey, token)
}
//请求数据
export function loginByUsername(username, password) {
    const data = {
        username,
        password
    }
    return request({ //向后台进行请求 类似于axios.post 详见下axios
            url: '/login/login',
            method: 'post',
            data
        })
        /**
         *  发送一个 POST 请求
          axios({
            method: 'post',
            url: '/user/12345',
            data: {
              firstName: 'Fred',
              lastName: 'Flintstone'
            }
          });
        */
}


  // 用户名登录
        LoginByUsername({ commit }, userInfo) {
            const username = userInfo.username.trim() //处理传递过来的数据
            //下面loginByUsername向后台发送username,userInfo.password获得登陆成功或失败的数据
            //成功则设置SET_TOKEN
            return new Promise((resolve, reject) => { //返回一个Promise对象
                loginByUsername(username, userInfo.password).then(response => {
                    const data = response.data
                    commit('SET_TOKEN', data.token)  //改变SET_TOKEN的值
                    setToken(data.token) // 通过 Cookies.set(TokenKey, token)
                    resolve()
                }).catch(error => {
                    reject(error)
                })
            })
        },

上面的作用:登陆的时候 在vuex中保存用户信息token,在cookie中保存用户信息token(权限)

这里写图片描述

##axios
地址:https://www.kancloud.cn/yunye/axios/234845

import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
/*
export function getToken() {
  return Cookies.get(TokenKey)
}
*/

// create an axios instance
//https://www.cnblogs.com/zhouyangla/p/6753673.html
//创建一个axios实例
const service = axios.create({  //自定义实例默认值
    baseURL: process.env.BASE_API, // api的base_url
    timeout: 5000 // request timeout
})

// request interceptor 添加请求拦截器
service.interceptors.request.use(config => {
    // Do something before request is sent
    if (store.getters.token) {
        config.headers['X-Token'] = getToken() // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
    }
    return config
}, error => {
    // Do something with request error
    console.log(error) // for debug
    Promise.reject(error)
})

// respone interceptor 添加响应拦截器
service.interceptors.response.use(
    response => response, //成功
    /**
     * 下面的注释为通过response自定义code来标示请求状态,当code返回如下情况为权限有问题,登出并返回到登录页
     * 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中
     */
    //  const res = response.data;
    //     if (res.code !== 20000) {
    //       Message({
    //         message: res.message,
    //         type: 'error',
    //         duration: 5 * 1000
    //       });
    //       // 50008:非法的token; 50012:其他客户端登录了;  50014:Token 过期了;
    //       if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
    //         MessageBox.confirm('你已被登出,可以取消继续留在该页面,或者重新登录', '确定登出', {
    //           confirmButtonText: '重新登录',
    //           cancelButtonText: '取消',
    //           type: 'warning'
    //         }).then(() => {
    //           store.dispatch('FedLogOut').then(() => {
    //             location.reload();// 为了重新实例化vue-router对象 避免bug
    //           });
    //         })
    //       }
    //       return Promise.reject('error');
    //     } else {
    //       return response.data;
    //     }
    error => { //失败
        console.log('err' + error) // for debug
        Message({
            message: error.message,
            type: 'error',
            duration: 5 * 1000
        })
        return Promise.reject(error)
    })

export default service //导出 import request from '@/utils/request' 被命名为request

##中英文切换
学习:https://www.cnblogs.com/rogerwu/p/7744476.html
弹出框,确认框:http://element.eleme.io/#/zh-CN/component/message-box

 mutations: {
        TOGGLE_SIDEBAR: state => {
            if (state.sidebar.opened) {
                Cookies.set('sidebarStatus', 1)
            } else {
                Cookies.set('sidebarStatus', 0)
            }
            state.sidebar.opened = !state.sidebar.opened
        },
        SET_LANGUAGE: (state, language) => { //通过mutations来改变中英文状态
            state.language = language
            Cookies.set('language', language)
        }
    },
    actions: {
        toggleSideBar({ commit }) {
            commit('TOGGLE_SIDEBAR')
        },
        setLanguage({ commit }, language) {
            // 通过actions来改变中英文状态 (还是通过commit,调用mutations中的方法)
            // 只是在这个方法中可以异步来改变
            commit('SET_LANGUAGE', language)
        }
    }
export default {
  computed: {
    language() {
      return this.$store.getters.language; //得到的语言
      //getters是 state对象中的
    }
  },
  methods: {
    handleSetLanguage(lang) {
      // this.$i18n.locale = lang  //改变i18n语言种类
      // this.$store.dispatch('setLanguage', lang)
      // this.$message({
      //   message: 'switch language success',
      //   type: 'success'
      // }) 这是添加了一个确认按钮,也要在语言/lang/en.js/cn.js添上对应的语言
      this.$confirm(this.$t('confirm.tips'), this.$t('confirm.tips'), {
        confirmButtonText: this.$t('confirm.sure'),
        cancelButtonText: this.$t('confirm.no'),
        type: 'warning'
      })
        .then(() => {
          //  let locale = this.$i18n.locale
          //  locale === 'zh' ? this.$i18n.locale = 'en' : this.$i18n.locale = 'zh'
          this.$i18n.locale = lang; //改变i18n语言种类
          this.$store.dispatch('setLanguage', lang);//dispatch 来触发action中
          this.$message({
            message: 'switch language success',
            type: 'success'
          });
        })
        .catch(() => {
          this.$message({
              message: 'switch language fail',
            type: 'info'
          });
        });
    }
  }
};

###第三方登陆
el-dialog:http://element.eleme.io/#/zh-CN/component/dialog

import openWindow from '@/utils/openWindow'

export default {
  name: 'social-signin',
  methods: {
    wechatHandleClick(thirdpart) {
      this.$store.commit('SET_AUTH_TYPE', thirdpart) //作者未写此mutations
      const appid = 'xxxxx'
      const redirect_uri = encodeURIComponent('xxx/redirect?redirect=' + window.location.origin + '/authredirect')
      const url = 'https://open.weixin.qq.com/connect/qrconnect?appid=' + appid + '&redirect_uri=' + redirect_uri + '&response_type=code&scope=snsapi_login#wechat_redirect'
      openWindow(url, thirdpart, 540, 540)
    },
    tencentHandleClick(thirdpart) {
      this.$store.commit('SET_AUTH_TYPE', thirdpart)
      const client_id = 'xxxxx'
      const redirect_uri = encodeURIComponent('xxx/redirect?redirect=' + window.location.origin + '/authredirect')
      const url = 'https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=' + client_id + '&redirect_uri=' + redirect_uri
      openWindow(url, thirdpart, 540, 540) //打开一个浏览器窗口
    }
  }
}

例如点击微信图标


Vue2 公司后台管理系统(仅前端) vue2 公司后台管理系统 (仅前端) 阅读详情

相关推荐

Vue电商后台管理系统功能展示

项目技术:html、css、javascript、node.js、vue、mysql 项目描述:电商后台管理系统,主要功能包括:用户账号管理、商品分类、商品信息、订单、数据统计等业务功能。采用前后端分离的开发模式,其中前端项目是基于Vue技术栈的SPA项目,通过API接口连接服务器,访问mysql数据库。 成品效果展示: 一、登陆界面 二、登陆校验规则 三、登陆成功后,保存Token 四、用户管理页面 五、添加用户功能(采用正则表达式进行校验) 六、添加用户成功,弹出消息框 .

weixin_45065754的博客 6333

vue项目 登录方法记录

vue项目 登录方法记录 handleLogin() { this.$refs.loginForm.validate((valid) => { if (valid) { this.loading = true; if (this.loginForm.rememberMe) { Cookies.set("username", this.loginForm.username, { expires: 30 }.

weixin_46337813的博客 578

10款精选的后台管理系统

此项目是 vue + element-ui 构建的后台管理系统,是后台项目node-elm 的管理系统,所有的数据都是从服务器实时获取的真实数据,具有真实的注册、登陆、管理数据、权限验证等功能。

m0_63026408的博客 2万+

vue+element ui+腾讯云开发打造会员管理系统之实战教程(三)系统登录

本教程为会员管理系统实战教程的第三篇,系统登录,讲解了利用云开发的后端技术如何快速的实现登录和注册功能

低代码布道师的博客 1万+

Vue之ElementUI实现登陆及注册

ElementUI 是一个基于Vue.js的前端 UI 框架。它提供了丰富的可复用组件,使开发者可以快速构建现代化的 Web 应用程序界面。ElementUI 的组件库包括按钮、输入框、表格、弹窗、导航菜单等常用组件,同时还提供了一些高级组件如日期选择器、时间选择器、下拉框等。ElementUI 具有高度的定制性和扩展性,开发者可以根据自己的需求进行定制和拓展。它的简洁美观的设计风格得到了广大开发者的喜爱,广泛应用于各种 Web 项目中。

weixin_74352229的博客 8624

国宇测试盒GH7009 SPI读操作全解析:从接线到代码实现的避坑指南

本文详细解析了国宇GH7009测试盒进行SPI读操作的完整流程与避坑要点。重点阐述了硬件连接中IO2时序控制引脚的关键作用,提供了从接线方案、电源处理到上位机代码实现的实战指南,并针对常见的数据不稳定、特定寄存器读取失败等问题给出了具体解决方案。

dapp9builder的博客 223

用户登录(中)

登录组件分析 src/views/login/index.vue 登录组件布局要点如下: el-form 容器,包含 username 和 password 两个 el-form-item,el-form 主要属性: ref :用来获取 el-form 表单实例 在表单提交时,通过该实例调用 validate 方法 model :对应 data 中的 loginForm rules :表单的验证项,验证规则主要才是用 async-validator 详细用法可以查看我这篇文章中的 async

雪急飞绪博客 3102

Python爬虫案例:从39问医生网爬取口腔科的在线问答记录(单轮问答)

本次实验爬取39问医生网中口腔科分类下的所有在线单轮问答记录,每页32条,共100页,总数据量为3200条,最终结果以excel格式保存。

JieBao11的博客 1640

探索一键登录新境界:Vue-Facebook-SignIn-Button

探索一键登录新境界:Vue-Facebook-SignIn-Button 在当今这个快速发展的Web应用世界里,用户体验至上,便捷的登录方式更是不可或缺的一环。今天,我们要向大家隆重介绍一个专为Vue.js爱好者量身打造的神器——Vue-Facebook-SignIn-Button。这不仅是一个插件,它是简化社交登录流程的艺术品,让你的应用瞬间提升到新的层次。 项目介绍 Vue-Facebook-...

gitblog_00048的博客 669

openai联合创始人用1000行纯C语言手搓的GPT-2训练代码

不久之前,特斯拉前 AI 总监、OpenAI 联合创始人 Andrej Karpathy 在社交媒体平台 X 上高调宣布,他友好地从 OpenAI 离职,未来将专注于“个人项目”,而后又口口声声说要尝试性地戒掉上网两周,去了 Bhutan(不丹王国)休假。然后就手搓如下代码,我们一起来欣赏.这段代码是一个GPT-2模型的训练实现,包括前向传播、后向传播、参数更新等过程。代码中包含了注释,解释了每个函数和代码块的作用。此外,还有一些辅助函数和结构体,用于数据加载、随机数生成和模型的初始化与释放。这个训练循环还

zhangzhechun的专栏 1211

8.2-12.4GHz喇叭天线设计

使用后处理模板的优化算法,对a1、h_horn、b1进行优化,各参数的优化区间即为之前计算得到的参数范围。由于矩形喇叭的辐射特型基本上是E面和H面扇形喇叭的结合,当波导中只是单模传播(只有TE波)时,矩形喇叭的口径可以通过远场公式推理出来。表示矩形喇叭的口径效率,进行最佳增益设计时,一般取值为0.5。从表中可以看出,该结构在8.58GHz的增益误差为2.68%>2.5%,需要对结构进行优化。建模完成,之后就是在矩形波导尾部添加波导端口激励,以及对应频率的远场监视器。,在这里,将频率定为区间的中心频率。

qq_48897427的博客 6655

新增路由 vue html,vue-element-admin登录逻辑,以及动态添加路由,显示侧边栏

这段时间在研究element-admin,感觉这个库有许多值得学习的地方,我学习这个库的方法是,先看它的路由,顺着路由,摸清它的逻辑,有点像顺藤摸瓜。这个库分的模块非常清晰,适合多人合作开发项目,但是如果一个人去用这个库开发后台,步骤显的有点繁琐,特别是调用后端接口,之前一个方法就调用到了,但是用这个库,需要先后分几步调用。比如说调用一个登陆接口:点击登陆按钮----》调用store中的方法---...

weixin_33341108的博客 615

风控IV、AUC、KS python计算代码

df_temp:数据集,Y:是否逾期标签,feas_list:需要计算IV的 变量。2、 按月和不同Y 下的 IV计算。

暮雨听轩的专栏 1618

VUE 通用后台管理系统

用VUE框架搭建一个通用后台管理系统,组件化、模块化实现用户登陆、后台管理、页面显示和跳转等功能。

weixin_53094939的博客 1万+

Android投屏开发实战:手把手教你用Miracast实现Sink端功能(附完整代码)

本文是一份Android投屏Sink端开发的实战指南,详细讲解了如何利用Miracast协议和Wi-Fi P2P技术,从零构建一个功能完整的屏幕接收器。内容涵盖环境搭建、通过反射启用WFD Sink模式、RTSP协议协商、RTP流接收与解析,以及最终使用IjkPlayer进行音视频解码播放的全过程,并附有核心代码示例。

cherry的博客 878

Cadence OrCAD Capture软件启动过程卡死且无法恢复的解决方法

如下图所示Cadence OrCAD Capture软件在启动后出现卡死的现象,且等待后无法自动恢复,需要强行关闭,再次启动依然卡死。

fydar的博客 4042

一步步带你做vue后台管理框架(三)——登录功能 系列教程《一步步带你做vue后台管理框架》第三课

github地址:vue-framework-wz线上体验地址:立即体验 《一步步带你做vue后台管理框架》第一课:介绍框架《一步步带你做vue后台管理框架》第二课:上手使用《一步步带你做vue后台管理框架》第三课:登录功能    认证又称“验证”、“鉴权”,是指通过一定的手段,完成对用户身份的确认。身份验证的方法有很多,基本上可分为:基于共享密钥的身份验证、基于生物学特征的身份验证和基于公开密钥...

圆静居士的专栏 1986

uniapp [全端兼容] - 实现接入使用天地图及卫星视图切换功能,在国家天地图上自由切换地图显示类型(卫星视图/地形视图/卫星混合/地形混合/普通视图)天地图切换视图显示改成卫星风格,切换地图图层

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,天地图,视图,卫星,地图类型切换,uniAPP天地图,改成卫星视角,在线地图切换,来回切换卫星图,天地图如何实现来回切换卫星图,地形图,卫星视图,VUE3引入天地图卫星版,详细教程示例源码代码,天地图切换卫星用什么api,卫星视角API方法,vue3卫星天地图,能改地图的显示方式,vue3中使用天地图自定义样式切换地图图层,切换报错,加载出错,卫星图太卡,地图图层更换,vue3安装集成天地图详细示例源

🏆 前端领域优质创作者 1万+

10款精选的后台管理系统,收藏吧!

1.vue2-manage 此项目是 vue + element-ui 构建的后台管理系统,是后台项目node-elm的管理系统,所有的数据都是从服务器实时获取的真实数据,具有真实的注册、登陆、管理数据、权限验证等功能。 项目地址:https://github.com/bailicangdu/vue2-manage 2.Cloud-Admin Cloud-Admin(开源项目) ...

不安分的猿人的专栏 16万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Vue2+elementUi后台管理项目总结

前言 该项目是一款对公司员工及商品管理的后台系统,主要实现功能:公司角色的增删改查,和商品的增删改查,项目的主要模块有,登录,主页,员工管理,权限管理,商品管理,该项目的亮点是权限管理,不同角色登录进入首页,看到的菜单和可操作的按钮是不一样的,如系统管理员可查看和操作所有模块。 1.初始化项目 涉及的前端技术栈: Vue Vue是一个用于创建用户界面的开源JavaScript框架 Vue-router vue-router是Vue官方推出的路由管理器 elementUi element是基于VUE的一套U

优快云_shipingan的博客 3493

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

vue后台管理之动态加载路由

在这里我们将会实现一个vue动态路由的案列,当用户登陆成功后,根据用户的角色,拿到他对应的菜单信息,并将它动态的载入到我们的路由中。 我们的通用的后台管理系统中,我们会根据权限的粗细不同,会对每个角色每个权限每个资源进行控制。同样的我们也需要实现一个这样的功能。 这篇文章我将主要讲vue端的实现,关于后台接口我就不会涉及,当我接触的时候我们的后台接口是springcloud实现。 ...

余空啊的博客 4万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

vue2.x+elementui2.x构建后台管理系统-登陆界面的实现

一、登陆界面 登陆界面使用elementui加vue实现

qq_42369064的博客 1187

Springboot+vue后台管理系统-登陆注册功能的实现

首先说一下怎样写登陆注册功能: 我们之前是直接在Home.vue里面直接写主题代码,在APP.vue里面直接引入全部主题,但是显然这样是不符合实际情况的!所以我们需要写新的路由: 我们新的APP.vue: <template> <div > <router-view /> </div> </template> <script> export default { name:"Layout", } <

justleavel的博客 6201

【前端】Vue+Element UI案例:通用后台管理系统-项目总结

Vue+Element UI案例:通用后台管理系统-项目总结

karshey的博客 3万+

视频教程-WebApi Vuejs 2020 网站后台管理系统接口开发实战视频教程-C#

WebApi Vuejs 2020 网站后台管理系统接口开发实战视频教程 2...

weixin_34708579的博客 627

视频教程-Vue.js Element UI Mock.js 2020 电子商城后台管理项目实战视频-Vue

Vue.js Element UI Mock.js 2020 电子商城后台管理项目实战视频 ...

weixin_34657112的博客 759
上一篇: 学习vue后台管理框架1(main.js)
下一篇: 学习vue后台管理框架3(权限控制)
han_hanker
博客等级 码龄13年 35粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值