Browse Source

admin登录

luyanan 6 years ago
parent
commit
c7c78517d2

+ 2 - 6
src/api/login.js

@ -1,14 +1,10 @@
1 1
import request from '@/utils/request'
2 2
3
export function login(account, pw, vc) {
3
export function login(params) {
4 4
  return request({
5 5
    url: '/ajax/sys/login',
6 6
    method: 'post',
7
    data: {
8
      account,
9
      pw,
10
      vc
11
    }
7
    params
12 8
  })
13 9
}
14 10

+ 0 - 13
src/directive/permission/index.js

@ -1,13 +0,0 @@
1
import permission from './permission'
2
3
const install = function(Vue) {
4
  Vue.directive('permission', permission)
5
}
6
7
if (window.Vue) {
8
  window['permission'] = permission
9
  Vue.use(install); // eslint-disable-line
10
}
11
12
permission.install = install
13
export default permission

+ 0 - 23
src/directive/permission/permission.js

@ -1,23 +0,0 @@
1
2
import store from '@/store'
3
4
export default{
5
  inserted(el, binding, vnode) {
6
    const { value } = binding
7
    const roles = store.getters && store.getters.roles
8
9
    if (value && value instanceof Array && value.length > 0) {
10
      const permissionRoles = value
11
12
      const hasPermission = roles.some(role => {
13
        return permissionRoles.includes(role)
14
      })
15
16
      if (!hasPermission) {
17
        el.parentNode && el.parentNode.removeChild(el)
18
      }
19
    } else {
20
      throw new Error(`need roles! Like v-permission="['admin','editor']"`)
21
    }
22
  }
23
}

+ 44 - 43
src/permission.js

@ -1,48 +1,49 @@
1
// import router from './router'
2
// import store from './store'
3
// import NProgress from 'nprogress' // Progress 进度条
4
// import 'nprogress/nprogress.css'// Progress 进度条样式
1
import router from './router'
2
import store from './store'
3
import NProgress from 'nprogress' // Progress 进度条
4
import 'nprogress/nprogress.css'// Progress 进度条样式
5 5
// import { Message } from 'element-ui'
6 6
// import { getToken } from '@/utils/auth' // 验权
7 7
8
// NProgress.configure({ showSpinner: false })// NProgress Configuration
8
NProgress.configure({ showSpinner: false })// NProgress Configuration
9 9
10
// const whiteList = ['/login', '/authredirect'] // 不重定向白名单
11
// router.beforeEach((to, from, next) => {
12
//   NProgress.start()
13
//   if (getToken()) {
14
//     if (to.path === '/login') {
15
//       // next({ path: '/' })
16
//       NProgress.done() // if current page is dashboard will not trigger	afterEach hook, so manually handle it
17
//     } else {
18
//       if (store.getters.roles.length === 0) {
19
//         store.dispatch('GetUserInfo').then(res => { // 拉取用户信息
20
//           next()
21
//           // const roles = res.data.roles // note: roles must be a array! such as: ['editor','develop']
22
//           // store.dispatch('GenerateRoutes', { roles }).then(() => { // 根据roles权限生成可访问的路由表
23
//           //   router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
24
//           //   next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
25
//           // })
26
//         }).catch((err) => {
27
//           store.dispatch('FedLogOut').then(() => {
28
//             Message.error(err || 'Verification failed, please login again')
29
//             next({ path: '/' })
30
//           })
31
//         })
32
//       } else {
33
//         next()
34
//       }
35
//     }
36
//   } else {
37
//     if (whiteList.indexOf(to.path) !== -1) {
38
//       next()
39
//     } else {
40
//       // next('/login')
41
//       NProgress.done()
42
//     }
43
//   }
44
// })
10
// const whiteList = ['/login'] // 不重定向白名单
11
router.beforeEach((to, from, next) => {
12
  NProgress.start()
13
  // if (getToken()) {
14
  if (to.path === '/login') {
15
    // next({ path: '/' })
16
    NProgress.done() // if current page is dashboard will not trigger  afterEach hook, so manually handle it
17
  } else {
18
    if (store.getters.roles.length === 0) {
19
      store.dispatch('GetUserInfo').then(res => { // 拉取用户信息
20
        // next()
21
        const roles = '1' // note: roles must be a array! such as: ['editor','develop']
22
        store.dispatch('GenerateRoutes', { roles }).then(() => { // 根据roles权限生成可访问的路由表
23
          router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
24
          next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
25
        })
26
      })
27
      // .catch((err) => {
28
      //   store.dispatch('FedLogOut').then(() => {
29
      //     // Message.error(err || 'Verification failed, please login again')
30
      //     next({ path: '/' })
31
      //   })
32
      // })
33
    } else {
34
      next()
35
    }
36
  }
37
  // } else {
38
  //   if (whiteList.indexOf(to.path) !== -1) {
39
  //     next()
40
  //   } else {
41
  //     // next('/login')
42
  //     NProgress.done()
43
  //   }
44
  // }
45
})
45 46
46
// router.afterEach(() => {
47
//   NProgress.done() // 结束Progress
48
// })
47
router.afterEach(() => {
48
  NProgress.done() // 结束Progress
49
})

+ 7 - 6
src/router/index.js

@ -44,11 +44,12 @@ export const constantRouterMap = [
44 44
    hidden: true,
45 45
    children: [{
46 46
      path: 'dashboard',
47
      component: () => import('@/views/dashboard/index'),
47
      component: () => import('@/views/dashboard'),
48 48
      name: 'dashboard',
49 49
      meta: { title: '主页', noCache: true }
50 50
    }]
51 51
  }
52
52 53
]
53 54
54 55
// 实例化vue的时候只挂载constantRouter
@ -66,12 +67,12 @@ export const asyncRouterMap = [
66 67
  {
67 68
    path: '/peoplesManage',
68 69
    component: Layout,
69
    redirect: '/peoplesManage/infoManage/index',
70
    redirect: '/peoplesManage/infoManage',
70 71
    name: 'peoplesManage',
71 72
    meta: {
72 73
      title: '用户系统管理',
73 74
      icon: 'peoples',
74
      roles: ['admin']
75
      roles: ['1']
75 76
    },
76 77
    alwaysShow: true,
77 78
    children: [
@ -86,12 +87,12 @@ export const asyncRouterMap = [
86 87
  {
87 88
    path: '/baseInfoManage',
88 89
    component: Layout,
89
    redirect: '/baseInfoManage/bridgesInfo/index',
90
    redirect: '/baseInfoManage/bridgesInfo',
90 91
    name: 'BaseInfoManage',
91 92
    meta: {
92 93
      title: '基础信息管理',
93 94
      icon: 'list',
94
      roles: ['admin']
95
      roles: ['1']
95 96
    },
96 97
    children: [
97 98
      {
@ -126,7 +127,7 @@ export const asyncRouterMap = [
126 127
    component: Layout,
127 128
    redirect: '/bridgesConsole/bridgeDetail',
128 129
    meta: {
129
      roles: ['other']
130
      roles: ['0']
130 131
    },
131 132
    children: [
132 133
      {

+ 1 - 5
src/store/getters.js

@ -1,13 +1,9 @@
1 1
const getters = {
2 2
  sidebar: state => state.app.sidebar,
3 3
  device: state => state.app.device,
4
  token: state => state.user.token,
5
  avatar: state => state.user.avatar,
6 4
  name: state => state.user.name,
7
  status: state => state.user.status,
8 5
  roles: state => state.user.roles,
9 6
  permission_routers: state => state.permission.routers,
10
  addRouters: state => state.permission.addRouters,
11
  errorLogs: state => state.errorLog.logs
7
  addRouters: state => state.permission.addRouters
12 8
}
13 9
export default getters

+ 0 - 2
src/store/index.js

@ -1,7 +1,6 @@
1 1
import Vue from 'vue'
2 2
import Vuex from 'vuex'
3 3
import app from './modules/app'
4
import errorLog from './modules/errorLog'
5 4
import permission from './modules/permission'
6 5
import user from './modules/user'
7 6
import getters from './getters'
@ -11,7 +10,6 @@ Vue.use(Vuex)
11 10
const store = new Vuex.Store({
12 11
  modules: {
13 12
    app,
14
    errorLog,
15 13
    permission,
16 14
    user
17 15
  },

+ 0 - 17
src/store/modules/errorLog.js

@ -1,17 +0,0 @@
1
const errorLog = {
2
  state: {
3
    logs: []
4
  },
5
  mutations: {
6
    ADD_ERROR_LOG: (state, log) => {
7
      state.logs.push(log)
8
    }
9
  },
10
  actions: {
11
    addErrorLog({ commit }, log) {
12
      commit('ADD_ERROR_LOG', log)
13
    }
14
  }
15
}
16
17
export default errorLog

+ 1 - 1
src/store/modules/permission.js

@ -47,7 +47,7 @@ const permission = {
47 47
      return new Promise(resolve => {
48 48
        const { roles } = data
49 49
        let accessedRouters
50
        if (roles.indexOf('admin') >= 0) {
50
        if (roles.indexOf('1') >= 0) {
51 51
          accessedRouters = asyncRouterMap
52 52
        } else {
53 53
          accessedRouters = filterAsyncRouter(asyncRouterMap, roles)

+ 38 - 48
src/store/modules/user.js

@ -1,33 +1,16 @@
1
import { login, logout, getInfo } from '@/api/login'
2
import { getToken, setToken, removeToken } from '@/utils/auth'
1
import { login, logout } from '@/api/login'
2
// import { getToken, setToken, removeToken } from '@/utils/auth'
3 3
4 4
const user = {
5 5
  state: {
6
    user: '',
7
    status: '',
8
    code: '',
9
    token: getToken(),
10 6
    name: '',
11
    avatar: '',
12 7
    roles: []
13 8
  },
14 9
15 10
  mutations: {
16
    SET_CODE: (state, code) => {
17
      state.code = code
18
    },
19
    SET_STATUS: (state, status) => {
20
      state.status = status
21
    },
22
    SET_TOKEN: (state, token) => {
23
      state.token = token
24
    },
25 11
    SET_NAME: (state, name) => {
26 12
      state.name = name
27 13
    },
28
    SET_AVATAR: (state, avatar) => {
29
      state.avatar = avatar
30
    },
31 14
    SET_ROLES: (state, roles) => {
32 15
      state.roles = roles
33 16
    }
@ -36,12 +19,22 @@ const user = {
36 19
  actions: {
37 20
    // 用户名登录
38 21
    LoginByUsername({ commit }, userInfo) {
39
      const username = userInfo.username.trim()
22
      console.log(userInfo)
23
      const account = userInfo.username.trim()
24
      const pw = userInfo.password.trim()
25
      const vc = userInfo.imgVerifyCode.trim()
26
      const param = {
27
        account,
28
        pw,
29
        vc
30
      }
40 31
      return new Promise((resolve, reject) => {
41
        login(username, userInfo.password, vc).then(response => {
42
          // const data = response.data
43
          // commit('SET_TOKEN', data.token)
44
          setToken(response.data.token)
32
        login(param).then(response => {
33
          console.log(response)
34
          // if (response.success) {
35
          //   const data = response.data
36
          // }
37
          // setToken(response.data.type)
45 38
          resolve()
46 39
        }).catch(error => {
47 40
          reject(error)
@ -51,34 +44,32 @@ const user = {
51 44
52 45
    // 获取用户信息
53 46
    GetUserInfo({ commit, state }) {
54
      return new Promise((resolve, reject) => {
55
        getInfo().then(response => {
56
          if (response.success) {
57
            console.log(response)
58
          }
59
          // if (!response.data) { // 由于mockjs 不支持自定义状态码只能这样hack
60
          //   reject('error')
61
          // }
62
          // const data = response.data
63
          // if (data.type) { // 验证返回的roles是否是一个非空数组
64
          //   commit('SET_ROLES', data.type)
65
          // }
66
          // commit('SET_NAME', data.name)
67
          // commit('SET_AVATAR', data.avatar)
68
          resolve(response)
69
        }).catch(error => {
70
          reject(error)
71
        })
72
      })
47
      commit('SET_ROLES', '0')
48
      // return new Promise((resolve, reject) => {
49
      //   getInfo().then(response => {
50
      //     if (response.success) {
51
      //       console.log(response)
52
      //     }
53
      //     const data = response.data
54
55
      //     if (data.type) {
56
      //       commit('SET_ROLES', data.type)
57
      //     }
58
      //     // commit('SET_NAME', data.name)
59
      //     // commit('SET_AVATAR', data.avatar)
60
      //     resolve(response)
61
      //   }).catch(error => {
62
      //     reject(error)
63
      //   })
64
      // })
73 65
    },
74 66
75 67
    // 登出
76 68
    LogOut({ commit, state }) {
77 69
      return new Promise((resolve, reject) => {
78 70
        logout(state.token).then(() => {
79
          commit('SET_TOKEN', '')
80
          commit('SET_ROLES', [])
81
          removeToken()
71
          commit('SET_ROLES', '')
72
          // removeToken()
82 73
          resolve()
83 74
        }).catch(error => {
84 75
          reject(error)
@ -89,8 +80,7 @@ const user = {
89 80
    // 前端 登出
90 81
    FedLogOut({ commit }) {
91 82
      return new Promise(resolve => {
92
        commit('SET_TOKEN', '')
93
        removeToken()
83
        // removeToken()
94 84
        resolve()
95 85
      })
96 86
    }

+ 11 - 11
src/utils/auth.js

@ -1,15 +1,15 @@
1
import Cookies from 'js-cookie'
1
// import Cookies from 'js-cookie'
2 2
3
const TokenKey = 'Admin-Token'
3
// const TokenKey = 'Admin-Token'
4 4
5
export function getToken() {
6
  return Cookies.get(TokenKey)
7
}
5
// export function getToken() {
6
//   return Cookies.get(TokenKey)
7
// }
8 8
9
export function setToken(token) {
10
  return Cookies.set(TokenKey, token)
11
}
9
// export function setToken(token) {
10
//   return Cookies.set(TokenKey, token)
11
// }
12 12
13
export function removeToken() {
14
  return Cookies.remove(TokenKey)
15
}
13
// export function removeToken() {
14
//   return Cookies.remove(TokenKey)
15
// }

+ 0 - 26
src/utils/permission.js

@ -1,26 +0,0 @@
1
import store from '@/store'
2
3
/**
4
 * @param {Array} value
5
 * @returns {Boolean}
6
 * @example see @/views/permission/directive.vue
7
 */
8
export default function checkPermission(value) {
9
  if (value && value instanceof Array && value.length > 0) {
10
    const roles = store.getters && store.getters.roles
11
    const permissionRoles = value
12
13
    const hasPermission = roles.some(role => {
14
      return permissionRoles.includes(role)
15
    })
16
17
    if (!hasPermission) {
18
      return false
19
    }
20
    return true
21
  } else {
22
    console.error(`need roles! Like v-permission="['admin','editor']"`)
23
    return false
24
  }
25
}
26

+ 6 - 0
src/views/dashboard/admin/index.vue

@ -53,6 +53,9 @@ export default {
53 53
  components: {
54 54
    LineChart
55 55
  },
56
  created() {
57
    this.toPath()
58
  },
56 59
  data() {
57 60
    return {
58 61
      lineChartData: lineChartData.newVisitis
@ -61,6 +64,9 @@ export default {
61 64
  methods: {
62 65
    handleSetLineChartData(type) {
63 66
      this.lineChartData = lineChartData[type]
67
    },
68
    toPath() {
69
      this.$router.push({ path: '/peoplesManage/infoManage' })
64 70
    }
65 71
  }
66 72
}

+ 3 - 3
src/views/dashboard/index.vue

@ -23,9 +23,9 @@ export default {
23 23
    ])
24 24
  },
25 25
  created() {
26
    // if (this.roles !== 1) {
27
    //   this.currentRole = 'otherDashboard'
28
    // }
26
    if (this.roles.includes('0')) {
27
      this.currentRole = 'otherDashboard'
28
    }
29 29
  }
30 30
}
31 31
</script>

+ 1 - 2
src/views/layout/components/Navbar.vue

@ -17,8 +17,7 @@ export default {
17 17
  },
18 18
  computed: {
19 19
    ...mapGetters([
20
      'sidebar',
21
      'avatar'
20
      'sidebar'
22 21
    ])
23 22
  },
24 23
  methods: {

+ 4 - 7
src/views/layout/components/TopNavbar.vue

@ -5,17 +5,15 @@
5 5
    </div>
6 6
    <el-dropdown class="avatar-container" trigger="click">
7 7
      <div class="avatar-wrapper">
8
        <img class="user-avatar" :src="avatar+'?imageView2/1/w/80/h/80'">
8
      	<div>您好,{ name }</div>
9 9
        <i class="el-icon-caret-bottom"></i>
10 10
      </div>
11 11
      <el-dropdown-menu class="user-dropdown" slot="dropdown">
12 12
        <router-link class="inlineBlock" to="/">
13
          <el-dropdown-item>
14
            Home
15
          </el-dropdown-item>
13
          <el-dropdown-item>主页</el-dropdown-item>
16 14
        </router-link>
17 15
        <el-dropdown-item divided>
18
          <span @click="logout" style="display:block;">LogOut</span>
16
          <span @click="logout" style="display:block;">退出</span>
19 17
        </el-dropdown-item>
20 18
      </el-dropdown-menu>
21 19
    </el-dropdown>
@ -28,8 +26,7 @@ import { mapGetters } from 'vuex'
28 26
export default {
29 27
  computed: {
30 28
    ...mapGetters([
31
      'sidebar',
32
      'avatar'
29
      'name'
33 30
    ])
34 31
  },
35 32
  methods: {

+ 0 - 10
src/views/login/authredirect.vue

@ -1,10 +0,0 @@
1
<script>
2
  export default {
3
    name: 'authredirect',
4
    created() {
5
      const hash = window.location.search.slice(1)
6
      window.opener.location.href = window.location.origin + '/login#' + hash
7
      window.close()
8
    }
9
  }
10
</script>

+ 4 - 2
src/views/login/index.vue

@ -53,11 +53,11 @@ export default {
53 53
      }
54 54
    }
55 55
    return {
56
      imgVerifyCode: '',
57 56
      imgVcUrl: '',
58 57
      loginForm: {
59 58
        username: '',
60
        password: ''
59
        password: '',
60
        imgVerifyCode: ''
61 61
      },
62 62
      loginRules: {
63 63
        username: [{ required: true, trigger: 'blur', validator: validPhone }],
@ -83,10 +83,12 @@ export default {
83 83
      }
84 84
    },
85 85
    handleLogin() {
86
      alert(111)
86 87
      this.$refs.loginForm.validate(valid => {
87 88
        if (valid) {
88 89
          this.loading = true
89 90
          this.$store.dispatch('LoginByUsername', this.loginForm).then(() => {
91
            alert(333)
90 92
            this.loading = false
91 93
            this.$router.push({ path: '/' })
92 94
          }).catch(() => {