完成后台首页,导航,菜单,退出登录功能
This commit is contained in:
parent
ce3fb856c4
commit
a7ba60d95e
|
@ -4,5 +4,5 @@ const prodEnv = require('./prod.env')
|
|||
|
||||
module.exports = merge(prodEnv, {
|
||||
NODE_ENV: '"development"',
|
||||
BASE_API: '"http://user.api.it120.cc"',
|
||||
BASE_API: '"http://127.0.0.1:8082"',
|
||||
})
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
export function info() {
|
||||
return request({
|
||||
url: '/user/info',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
|
@ -64,6 +64,14 @@ export function resetpwd(mobile, pwd, smsCode) {
|
|||
})
|
||||
}
|
||||
|
||||
export function checkToken() {
|
||||
return request({
|
||||
url: '/user/checkToken',
|
||||
method: 'get',
|
||||
params: { }
|
||||
})
|
||||
}
|
||||
|
||||
export function getInfo(token) {
|
||||
return request({
|
||||
url: '/user/info',
|
||||
|
@ -74,7 +82,7 @@ export function getInfo(token) {
|
|||
|
||||
export function logout() {
|
||||
return request({
|
||||
url: '/user/logout',
|
||||
method: 'post'
|
||||
url: '/login/exit',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ export default {
|
|||
let matched = this.$route.matched.filter(item => item.name)
|
||||
const first = matched[0]
|
||||
if (first && first.name !== 'dashboard') {
|
||||
matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(matched)
|
||||
matched = [{ path: '/dashboard', meta: { title: '首页' }}].concat(matched)
|
||||
}
|
||||
this.levelList = matched
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1526477165024" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1911" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M841.142857 566.857143l0 274.285714q0 14.857143-10.857143 25.714286t-25.714286 10.857143l-219.428571 0 0-219.428571-146.285714 0 0 219.428571-219.428571 0q-14.857143 0-25.714286-10.857143t-10.857143-25.714286l0-274.285714q0-0.571429 2.857143-1.714286t2.857143-1.714286l328.571429-270.857143 328.571429 270.857143q0.571429 1.142857 0.571429 3.428571zm127.428571-39.428571l-35.428571 42.285714q-4.571429 5.142857-12 6.285714l-1.714286 0q-7.428571 0-12-4l-395.428571-329.714286-395.428571 329.714286q-6.857143 4.571429-13.714286 4-7.428571-1.142857-12-6.285714l-35.428571-42.285714q-4.571429-5.714286-4-13.428571t6.285714-12.285714l410.857143-342.285714q18.285714-14.857143 43.428571-14.857143t43.428571 14.857143l139.428571 116.571429 0-111.428571q0-8 5.142857-13.142857t13.142857-5.142857l109.714286 0q8 0 13.142857 5.142857t5.142857 13.142857l0 233.142857 125.142857 104q5.714286 4.571429 6.285714 12.285714t-4 13.428571z" p-id="1912"></path></svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1526477741362" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1074" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M882.527918 434.149934c-2.234901-5.303796-7.311523-8.853645-13.059434-9.138124l-61.390185-3.009544c-6.635117-20.973684-15.521508-41.175795-26.513864-60.282968l42.051745-47.743374c4.308119-4.889357 4.955872-12.004405 1.602498-17.59268-46.384423-77.30362-103.969956-101.422947-106.400309-102.410438-5.332449-2.170432-11.432377-1.090844-15.693424 2.77009L654.674467 240.664222c-17.004279-8.654101-35.092239-15.756869-53.995775-21.210068l-3.26537-66.490344c-0.280386-5.747911-3.833305-10.824533-9.134031-13.059434-1.683339-0.709151-30.193673-12.391215-76.866668-12.051477-46.672996-0.339738-75.18333 11.342326-76.866668 12.051477-5.300726 2.234901-8.853645 7.311523-9.134031 13.059434l-3.26537 66.490344c-18.903535 5.453199-36.991496 12.555967-53.995775 21.210068l-48.450479-43.922349c-4.261047-3.860934-10.360975-4.940522-15.693424-2.77009-2.430352 0.98749-60.015885 25.106818-106.400309 102.410438-3.353374 5.588275-2.705622 12.703323 1.602498 17.59268l42.051745 47.743374c-10.992355 19.107173-19.878746 39.309284-26.513864 60.282968l-61.390185 3.009544c-5.747911 0.284479-10.824533 3.834328-13.059434 9.138124-1.01512 2.415003-24.687262 60.190871-2.822278 147.651828 1.583055 6.324032 7.072069 10.893094 13.57518 11.308557 5.892197 0.37146 11.751648 0.523933 17.419741 0.667196 14.498202 0.372483 28.193109 0.723477 40.908712 4.63353 4.212952 1.294482 6.435573 8.270361 9.349949 18.763342 1.287319 4.640694 2.617617 9.43693 4.484128 14.010085 1.794879 4.393054 3.75758 8.570189 5.66093 12.607132 1.302669 2.765997 2.529613 5.380544 3.689019 8.018627 2.986007 6.803963 2.682086 9.773598 2.578732 10.349719-3.061732 3.672646-6.391571 7.238868-9.91379 11.015891-1.810229 1.943258-3.680832 3.949962-5.523807 5.980201l-22.560832 24.8909c-3.865028 4.261047-4.940522 10.365068-2.774183 15.693424 0.991584 2.426259 25.102724 60.011792 102.414531 106.400309 5.588275 3.353374 12.703323 2.701528 17.591657-1.603521l23.476691-20.682042c2.346441-2.061962 4.64888-4.336772 6.875594-6.534833 9.05319-8.93858 14.018272-12.95608 17.73185-11.576663 3.305279 1.222851 6.907317 3.166109 10.720156 5.228071 3.325745 1.794879 6.764054 3.650133 10.465352 5.288446 6.016017 2.662643 12.120039 4.688789 18.019399 6.65149 6.827499 2.266623 13.279445 4.409426 18.819624 7.275707 1.518586 0.782829 1.926886 0.994654 2.358721 7.830339 0.726547 11.496845 1.25048 23.276123 1.753947 34.672684 0.264013 5.900384 0.528026 11.803837 0.815575 17.700127 0.284479 5.743818 3.833305 10.82044 9.138124 13.05534 1.654686 0.698918 29.371958 12.063757 74.869175 12.063757 0.328481 0 3.65832 0 3.986801 0 45.497217 0 73.214489-11.364839 74.869175-12.063757 5.304819-2.234901 8.853645-7.311523 9.138124-13.05534 0.287549-5.89629 0.551562-11.799744 0.815575-17.700127 0.503467-11.396561 1.027399-23.175839 1.753947-34.672684 0.431835-6.835685 0.840134-7.04751 2.358721-7.830339 5.54018-2.866281 11.992125-5.009084 18.819624-7.275707 5.89936-1.962701 12.003382-3.988848 18.019399-6.65149 3.701299-1.638313 7.139607-3.493567 10.465352-5.288446 3.812839-2.061962 7.414877-4.00522 10.720156-5.228071 3.713578-1.379417 8.67866 2.638083 17.73185 11.576663 2.226714 2.198062 4.529153 4.472871 6.875594 6.534833l23.476691 20.682042c4.888334 4.305049 12.003382 4.956895 17.591657 1.603521 77.311807-46.388517 101.422947-103.97405 102.414531-106.400309 2.166339-5.328355 1.090844-11.432377-2.774183-15.693424l-22.560832-24.8909c-1.842974-2.030239-3.713578-4.036943-5.523807-5.980201-3.52222-3.777023-6.852058-7.343245-9.91379-11.015891-0.103354-0.576121-0.407276-3.545756 2.578732-10.349719 1.159406-2.638083 2.38635-5.252631 3.689019-8.018627 1.90335-4.036943 3.866051-8.214079 5.66093-12.607132 1.866511-4.573155 3.196809-9.369392 4.484128-14.010085 2.914376-10.492982 5.136997-17.46886 9.349949-18.763342 12.715603-3.910053 26.41051-4.261047 40.908712-4.63353 5.668093-0.143263 11.527544-0.295735 17.419741-0.667196 6.503111-0.415462 11.992125-4.984524 13.57518-11.308557C907.21518 494.340805 883.543038 436.564937 882.527918 434.149934zM643.49894 643.761929c-35.280528 35.280528-82.191954 54.711066-132.086317 54.711066s-96.806813-19.430538-132.086317-54.711066c-35.280528-35.279504-54.711066-82.191954-54.711066-132.086317 0-49.894364 19.430538-96.80272 54.711066-132.082224 35.283598-35.284621 82.191954-54.711066 132.086317-54.711066s96.80579 19.426445 132.086317 54.711066c35.279504 35.279504 54.711066 82.187861 54.711066 132.082224C698.210006 561.569976 678.782537 608.482425 643.49894 643.761929z" p-id="1075"></path></svg>
|
After Width: | Height: | Size: 4.8 KiB |
|
@ -1,11 +1,11 @@
|
|||
import router from './router'
|
||||
import store from './store'
|
||||
import { checkToken, logout } from '@/api/login'
|
||||
import NProgress from 'nprogress' // Progress 进度条
|
||||
import 'nprogress/nprogress.css'// Progress 进度条样式
|
||||
import { Message } from 'element-ui'
|
||||
import { getToken } from '@/utils/auth' // 验权
|
||||
import { getToken, removeToken } from '@/utils/auth' // 验权
|
||||
|
||||
const whiteList = ['/login', '/register', '/resetpwd'] // 不重定向白名单
|
||||
const whiteList = ['/login', '/register', '/resetpwd'] // 不判断权限白名单
|
||||
router.beforeEach((to, from, next) => {
|
||||
NProgress.start()
|
||||
if (getToken()) {
|
||||
|
@ -13,18 +13,15 @@ router.beforeEach((to, from, next) => {
|
|||
next({ path: '/' })
|
||||
NProgress.done() // if current page is dashboard will not trigger afterEach hook, so manually handle it
|
||||
} else {
|
||||
if (store.getters.roles.length === 0) {
|
||||
store.dispatch('GetInfo').then(res => { // 拉取用户信息
|
||||
next()
|
||||
}).catch((err) => {
|
||||
store.dispatch('FedLogOut').then(() => {
|
||||
Message.error(err || 'Verification failed, please login again')
|
||||
next({ path: '/' })
|
||||
})
|
||||
})
|
||||
} else {
|
||||
checkToken().then(res => { // 判断token有效性
|
||||
next()
|
||||
}
|
||||
}).catch((err) => {
|
||||
logout().then(() => {
|
||||
Message.error(err || '已成功退出')
|
||||
removeToken()
|
||||
next({ path: '/' })
|
||||
})
|
||||
})
|
||||
}
|
||||
} else {
|
||||
if (whiteList.indexOf(to.path) !== -1) {
|
||||
|
|
|
@ -28,14 +28,29 @@ export const constantRouterMap = [
|
|||
{ path: '/404', component: () => import('@/views/404'), hidden: true },
|
||||
|
||||
{
|
||||
path: '/',
|
||||
path: '',
|
||||
component: Layout,
|
||||
redirect: '/dashboard',
|
||||
name: 'Dashboard',
|
||||
hidden: true,
|
||||
children: [{
|
||||
path: 'dashboard',
|
||||
component: () => import('@/views/dashboard/index')
|
||||
component: () => import('@/views/dashboard/index'),
|
||||
meta: { title: '首页', icon: 'home' }
|
||||
}]
|
||||
},
|
||||
|
||||
{
|
||||
path: '',
|
||||
component: Layout,
|
||||
meta: { title: '工厂设置', icon: 'setting' },
|
||||
children: [{
|
||||
path: 'dashboard2',
|
||||
component: () => import('@/views/dashboard/index'),
|
||||
meta: { title: '我的资源包', icon: 'setting' }
|
||||
},
|
||||
{
|
||||
path: 'dashboard3',
|
||||
component: () => import('@/views/dashboard/index'),
|
||||
meta: { title: '我的资源包', icon: 'setting' }
|
||||
}]
|
||||
},
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import Cookies from 'js-cookie'
|
||||
|
||||
const TokenKey = 'Admin-Token'
|
||||
const TokenKey = 'apifactory-token'
|
||||
|
||||
export function getToken() {
|
||||
return Cookies.get(TokenKey)
|
||||
|
|
|
@ -4,17 +4,17 @@
|
|||
<breadcrumb></breadcrumb>
|
||||
<el-dropdown class="avatar-container" trigger="click">
|
||||
<div class="avatar-wrapper">
|
||||
<img class="user-avatar" :src="avatar+'?imageView2/1/w/80/h/80'">
|
||||
<span style="display:block;">当前登录: {{centeruserinfo.realName}} ( {{centeruserinfo.mobile}} )</span>
|
||||
<i class="el-icon-caret-bottom"></i>
|
||||
</div>
|
||||
<el-dropdown-menu class="user-dropdown" slot="dropdown">
|
||||
<router-link class="inlineBlock" to="/">
|
||||
<el-dropdown-item>
|
||||
Home
|
||||
首页
|
||||
</el-dropdown-item>
|
||||
</router-link>
|
||||
<el-dropdown-item divided>
|
||||
<span @click="logout" style="display:block;">LogOut</span>
|
||||
<span @click="logout" style="display:block;">退出</span>
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
|
@ -25,6 +25,10 @@
|
|||
import { mapGetters } from 'vuex'
|
||||
import Breadcrumb from '@/components/Breadcrumb'
|
||||
import Hamburger from '@/components/Hamburger'
|
||||
import { logout } from '@/api/login'
|
||||
import { info } from '@/api/centeruser'
|
||||
import { removeToken } from '@/utils/auth'
|
||||
import { Message } from 'element-ui'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
@ -37,13 +41,25 @@ export default {
|
|||
'avatar'
|
||||
])
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
centeruserinfo:{}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
info().then(res => {
|
||||
this.centeruserinfo = res.data;
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
toggleSideBar() {
|
||||
this.$store.dispatch('ToggleSideBar')
|
||||
},
|
||||
logout() {
|
||||
this.$store.dispatch('LogOut').then(() => {
|
||||
location.reload() // 为了重新实例化vue-router对象 避免bug
|
||||
logout().then(() => {
|
||||
Message.error('已成功退出')
|
||||
removeToken()
|
||||
location.reload();
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -147,7 +147,7 @@ export default {
|
|||
duration: 1 * 1000,
|
||||
onClose: () => {
|
||||
setToken(res.data);
|
||||
this.$router.push({ path: '/' })
|
||||
this.$router.push({ path: '/' })
|
||||
}
|
||||
})
|
||||
}).catch((err) => {
|
||||
|
@ -162,6 +162,7 @@ export default {
|
|||
},
|
||||
changeRandom() {
|
||||
this.loginForm.picKey = Math.random();
|
||||
// (document.getElementsByClassName('random'))[0].setAttribute('src', 'http://127.0.0.1:8082/code?k=' + this.loginForm.picKey)
|
||||
(document.getElementsByClassName('random'))[0].setAttribute('src', 'http://user.api.it120.cc/code?k=' + this.loginForm.picKey)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue