修改element-ui-template 登录接口 api login

折腾了好几天值得记录一下,用的是花裤衩的element-ui-template模板,后台接口是公司写好的。

难点主要在登录和获取用户信息,和模板上的有出入,公司的登录api请求后直接返回token、用户分组、用户头像,不用再次请求用户信息。

退出时,公司的后端没有token销毁接口,由浏览器直接销毁。

1.修改登录接口

在api/user中找到login函数

import request from '@/utils/request'

export function login(data) {

  return request({
    url: '/v1/business/login', //改成你的接口
    method: 'post',
    data,

  })
}

修改.env.development文件中BASE_API为空

# just a flag
ENV = 'development'

# base api
VUE_APP_BASE_API = '' //这里改为空

修改utils/request.js中BASE_URL和状态码

// create an axios instance
const service = axios.create({
  baseURL: 'http://47.105.172.000/serverPensionAdmin/api', // 改成你自己的 
  //url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

改状态码
在这里插入图片描述

response => {
    const res = response.data

    // if the custom code is not 20000, it is judged as an error.
    if (res.httpCode !== 200) {
      Message({
        message: res.message || 'Error',
        type: 'error',
        duration: 5 * 1000
      })

      // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
      if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
        // to re-login
        MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
          confirmButtonText: 'Re-Login',
          cancelButtonText: 'Cancel',
          type: 'warning'
        }).then(() => {
          store.dispatch('user/resetToken').then(() => {
            location.reload()
          })
        })
      }
      return Promise.reject(new Error(res.message || 'Error'))
    } else {
      return res
    }
  },

在utils/validate中修改允许登录的用户名

export function validUsername(str) {
  const valid_map = ['admin', 'editor', 'yufeng'] //原来只允许两个,yufeng是我加上去的,根据实际情况修改
  return valid_map.indexOf(str.trim()) >= 0
}

修改登录字段,如果你的登录字段为username和password就不用修改,恰好我的登录字段为account,因此需要修改下,store/modules/user

 // user login
  login({ commit }, userInfo) {
    const { username, password } = userInfo
    console.log('打印response 前');
    return new Promise((resolve, reject) => {
      login({ account: username.trim(), password: password }).then(response => {
        console.log('打印response',response);
        this.dd = response
        const  {result}  = response

2.注释掉getInfo和logout引用

注释掉getInfo,改用自建函数给头像和用户分组赋值
src根目录下permission

if (hasToken) {
    if (to.path === '/login') {
      // if is logged in, redirect to the home page
      next({ path: '/' })
      NProgress.done()
    } else {
      const hasGetUserInfo = store.getters.name
      console.log('print hasGetUserInfo------->', hasGetUserInfo);
      if (hasGetUserInfo) {
        next()
      } else {
        try {
          // get user info
          console.log('permission userinfo');
          // await store.dispatch('user/getInfo')   //去掉这一行之后竟然可以登陆了
          await store.dispatch('user/login2') //这是自建函数,给头像和用户分组赋值


          console.log('permission userinfo222222222222');

自建函数, 给头像和用户分组赋值 store/modules/user.js


  // test
  login2() {
    console.log('this is a test ----------------->', this.dd);
    //设置头像和用户权限
    const name = this.dd.result.bname
    const avatar = this.dd.result.headUrl
    //
    state.name = name
    state.avatar = avatar
  },

因为不用请求退出api,所以在layout/components/Navbar.vue中,注释掉logout函数,直接用本地清除token的方式,

methods: {
    toggleSideBar() {
      this.$store.dispatch('app/toggleSideBar')
    },
    async logout() {
      // await this.$store.dispatch('user/logout') 请求登出api,因为后台pc端暂时不用请求退出api,直接清掉token即可退出
      await this.$store.dispatch('user/resetToken')
      this.$router.push(`/login?redirect=${this.$route.fullPath}`)
    }
  }
}

至此,登陆问题解决,上图
在这里插入图片描述
[在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA3UzhaSWxseTFnaGJkb3JobzFvajMwc3kwdGN3bmguanBn?x-oss-process=image/format,png =200x200)

参考文章
vue-element-admin-master修改为自己的登录接口

Promise resolve()的用法

【vue】前端必须掌握的登陆 token 处理( Vue 登陆处理 token 的补充)

在Vuex使用 以及 dispatch和commit来调用mutations的区别

store/module/user.js

有需要的同学可以参考下

import { login, logout, getInfo } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'

const getDefaultState = () => {
  return {
    token: getToken(),
    name: '',
    avatar: ''
  }
}

const state = getDefaultState()

const dd = {}


const mutations = {
  RESET_STATE: (state) => {
    Object.assign(state, getDefaultState())
  },
  SET_TOKEN: (state, token) => {
    state.token = token
  },
  SET_NAME: (state, name) => {
    state.name = name
  },
  SET_AVATAR: (state, avatar) => {
    state.avatar = avatar
  }
}

const actions = {





  // user login
  login({ commit }, userInfo) {
    const { username, password } = userInfo
    console.log('打印response 前');
    return new Promise((resolve, reject) => {
      login({ account: username.trim(), password: password }).then(response => {
        console.log('打印response',response);
        this.dd = response
        const  {result}  = response

        console.log('print data',result);
        commit('SET_TOKEN', result.token)
        setToken(result.token)
        console.log('token------------------');

        //设置头像和用户权限
        const name = response.result.bname
        const avatar = response.result.headUrl
        //
        this.state.name = name
        state.avatar = avatar

        console.log('记录state.name',this.state.name,state.avatar, name, avatar, response);


        resolve()
      }).catch(error => {
        'print catch error'.log
        reject(error)
      })
    })
  },


  // test
  login2() {
    console.log('this is a test ----------------->', this.dd);
    //设置头像和用户权限
    const name = this.dd.result.bname
    const avatar = this.dd.result.headUrl
    //
    state.name = name
    state.avatar = avatar
  },



  // get user info
  getInfo({ commit, state }) {
    console.log('is reached here');
    return new Promise((resolve, reject) => {
      getInfo(this.dd).then(response => {
        console.log('print getinfo response');
        // const { data } = response

        // if (!data) {
        //   return reject('Verification failed, please Login again.')
        // }
        //
        console.log('bname');
        const name = response.bname
        const avatar = response.headUrl
        //
        // commit('SET_NAME', name)
        // commit('SET_AVATAR', avatar)
        // console.log('have set avtar');
        // resolve(data) 注释后不往外传数据
      }).catch(error => {
        console.log('get info have error');
        reject(error)
      })
    })
  },

  // user logout
  logout({ commit, state }) {
    return new Promise((resolve, reject) => {
      logout(state.token).then(() => {
        removeToken() // must remove  token  first
        resetRouter()
        commit('RESET_STATE')
        resolve()
      }).catch(error => {
        reject(error)
      })
    })
  },



  // remove token
  resetToken({ commit }) {
    return new Promise(resolve => {
      removeToken() // must remove  token  first
      commit('RESET_STATE')
      resolve()
    })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Vue 2.0中使用Element UI进行登录样式的话,你可以按照以下步骤进行: 1. 首先,在你的Vue项目中安装Element UI,你可以使用npm或者yarn命令进行安装: ``` npm install element-ui --save # 或者 yarn add element-ui ``` 2. 在你的Vue项目中导入Element UI组件库。你可以在main.js或者其他需要使用Element UI的地方进行导入: ``` import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); ``` 3. 在你的登录组件中使用Element UI提供的组件,例如el-form、el-input、el-button等,来完成登录表单的设计: ```html <template> <el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-width="80px"> <el-form-item label="用户名" prop="username"> <el-input v-model="loginForm.username"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input type="password" v-model="loginForm.password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="handleSubmit">登录</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { loginForm: { username: '', password: '' }, loginRules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' } ] } }; }, methods: { handleSubmit() { // 处理登录逻辑 } } }; </script> ``` 这样就可以在你的Vue项目中使用Element UI来设计登录样式了。需要注意的是,以上代码只是一个示例,实际上还需要根据你的实际需求进行相应的调整。 ### 回答2: Vue2.0中使用Element UI实现登录样式可以通过以下步骤进行: 1. 引入Element UI组件库:首先在项目中安装Element UI依赖包,通过npm或yarn安装,然后在项目的入口文件(main.js或App.vue)中引入Element UI的主题样式和组件。 例如,可以使用以下命令安装Element UI: ```shell npm install element-ui --save ``` 然后在main.js文件中引入Element UI: ```javascript import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); ``` 2. 创建登录页面:在项目的某个组件中,可以是单独的登录组件或者将登录作为页面的一部分,编写登录表单和相关样式。 例如,可以创建一个Login.vue文件,在其中定义登录表单: ```html <template> <div class="login-container"> <el-form :model="loginForm" ref="loginForm" class="login-form"> <el-form-item> <el-input placeholder="请输入用户名" v-model="loginForm.username"></el-input> </el-form-item> <el-form-item> <el-input type="password" placeholder="请输入密码" v-model="loginForm.password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="login">登录</el-button> </el-form-item> </el-form> </div> </template> <script> export default { data() { return { loginForm: { username: '', password: '' } } }, methods: { login() { // 处理登录逻辑 } } } </script> <style scoped> .login-container { display: flex; justify-content: center; align-items: center; height: 100vh; } .login-form { width: 300px; padding: 20px; } </style> ``` 3. 编写相关逻辑:在Login.vue组件中,根据业务需求,编写登录逻辑。 例如,可以在`login`方法中发送登录请求,处理登录逻辑: ```javascript methods: { login() { // 使用axios或其他方式发送登录请求 axios.post('/login', this.loginForm) .then(response => { // 登录成功,处理相关逻辑 }) .catch(error => { // 登录失败,处理错误信息 }); } } ``` 以上便是使用Vue2.0和Element UI实现登录样式的简单示例。在实际开发中,可以根据需求对登录页面和相关逻辑进行更加详尽的处理。 ### 回答3: Vue2.0 Element-UI登录样式可以通过使用Element-UI提供的组件和样式来创建。 首先,我们需要在项目中安装Element-UI并引入其样式。可以通过npm安装Element-UI,并在项目的main.js文件中引入Element-UI的样式文件。 在登录页面中,可以使用Element-UI提供的`el-form`组件来创建表单,并使用`el-input`组件来输入用户名和密码。 然后,可以使用`el-button`组件创建登录按钮。可以设置按钮的类型为`primary`来突出显示登录操作。 可以利用Element-UI提供的样式类来进行布局和调整样式。例如,可以使用`el-form`组件的`label-position`属性来设置标签的位置,使用`el-form`组件的`size`属性来设置表单元素的尺寸,并使用`el-button`组件的`class`属性来设置按钮的样式类。 此外,还可以自定义样式来适应项目的需求。可以通过在Vue组件中定义`style`部分来编写自定义的CSS样式代码,并将其应用到相应的元素上。 总之,Vue2.0 Element-UI登录样式的实现方式有很多,可以通过使用Element-UI提供的组件、样式和类,以及自定义的CSS样式来创建具有吸引力且符合项目需求的登录页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值