@@ -1,13 +1,22 @@ | |||||
{ | { | ||||
"presets": [ | "presets": [ | ||||
["env", { | |||||
"modules": false, | |||||
"targets": { | |||||
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"] | |||||
[ | |||||
"env", | |||||
{ | |||||
"modules": false, | |||||
"targets": { | |||||
"browsers": [ | |||||
"> 1%", | |||||
"last 2 versions", | |||||
"not ie <= 8" | |||||
] | |||||
} | |||||
} | } | ||||
}], | |||||
], | |||||
"stage-2" | "stage-2" | ||||
], | ], | ||||
"plugins": ["transform-vue-jsx", "transform-runtime"] | |||||
} | |||||
"plugins": [ | |||||
"transform-vue-jsx", | |||||
"transform-runtime" | |||||
] | |||||
} |
@@ -23,8 +23,6 @@ | |||||
"vuex": "^3.6.2" | "vuex": "^3.6.2" | ||||
}, | }, | ||||
"devDependencies": { | "devDependencies": { | ||||
"has-bigints": "^1.0.0", | |||||
"webpack-dev-server": "^2.9.1", | |||||
"amfe-flexible": "^2.2.1", | "amfe-flexible": "^2.2.1", | ||||
"autoprefixer": "^7.1.2", | "autoprefixer": "^7.1.2", | ||||
"babel-core": "^6.22.1", | "babel-core": "^6.22.1", | ||||
@@ -42,6 +40,7 @@ | |||||
"fastclick": "^1.0.6", | "fastclick": "^1.0.6", | ||||
"file-loader": "^1.1.4", | "file-loader": "^1.1.4", | ||||
"friendly-errors-webpack-plugin": "^1.6.1", | "friendly-errors-webpack-plugin": "^1.6.1", | ||||
"has-bigints": "^1.0.0", | |||||
"html-webpack-plugin": "^2.30.1", | "html-webpack-plugin": "^2.30.1", | ||||
"node-notifier": "^5.1.2", | "node-notifier": "^5.1.2", | ||||
"optimize-css-assets-webpack-plugin": "^3.2.0", | "optimize-css-assets-webpack-plugin": "^3.2.0", | ||||
@@ -62,6 +61,7 @@ | |||||
"vue-template-compiler": "^2.5.2", | "vue-template-compiler": "^2.5.2", | ||||
"webpack": "^3.6.0", | "webpack": "^3.6.0", | ||||
"webpack-bundle-analyzer": "^2.9.0", | "webpack-bundle-analyzer": "^2.9.0", | ||||
"webpack-dev-server": "^2.9.1", | |||||
"webpack-merge": "^4.1.0" | "webpack-merge": "^4.1.0" | ||||
}, | }, | ||||
"engines": { | "engines": { | ||||
@@ -73,4 +73,4 @@ | |||||
"last 2 versions", | "last 2 versions", | ||||
"not ie <= 8" | "not ie <= 8" | ||||
] | ] | ||||
} | |||||
} |
@@ -18,8 +18,8 @@ Vue.use(Vant) | |||||
/*解决手动点击与真正触发click事件会存在300ms的延迟*/ | /*解决手动点击与真正触发click事件会存在300ms的延迟*/ | ||||
if ('addEventListener' in document) { | if ('addEventListener' in document) { | ||||
document.addEventListener('DOMContentLoaded', function() { | |||||
FastClick.attach(document.body); | |||||
document.addEventListener('DOMContentLoaded', function () { | |||||
FastClick.attach(document.body); | |||||
}, false); | }, false); | ||||
} | } | ||||
@@ -1,6 +1,5 @@ | |||||
import router from './router' | import router from './router' | ||||
import store from './store' | import store from './store' | ||||
// import { Message } from 'element-ui' | |||||
import NProgress from 'nprogress' | import NProgress from 'nprogress' | ||||
import 'nprogress/nprogress.css' | import 'nprogress/nprogress.css' | ||||
import { getToken } from '@/utils/auth' | import { getToken } from '@/utils/auth' | ||||
@@ -18,21 +17,23 @@ router.beforeEach((to, from, next) => { | |||||
NProgress.done() | NProgress.done() | ||||
} else { | } else { | ||||
if (store.getters.roles.length === 0) { | if (store.getters.roles.length === 0) { | ||||
next() | |||||
// 判断当前用户是否已拉取完user_info信息 | // 判断当前用户是否已拉取完user_info信息 | ||||
store.dispatch('GetInfo').then(res => { | store.dispatch('GetInfo').then(res => { | ||||
// 拉取user_info | // 拉取user_info | ||||
const roles = res.roles | const roles = res.roles | ||||
store.dispatch('GenerateRoutes', { roles }).then(accessRoutes => { | |||||
// 根据roles权限生成可访问的路由表 | |||||
router.addRoutes(accessRoutes) // 动态添加可访问路由表 | |||||
next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 | |||||
}) | |||||
// store.dispatch('GenerateRoutes', { roles }).then(accessRoutes => { | |||||
// // 根据roles权限生成可访问的路由表 | |||||
// router.addRoutes(accessRoutes) // 动态添加可访问路由表 | |||||
// next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 | |||||
// }) | |||||
next() | |||||
}).catch(err => { | }).catch(err => { | ||||
store.dispatch('LogOut').then(() => { | |||||
// Message.error(err) | |||||
next({ path: '/' }) | |||||
}) | |||||
store.dispatch('LogOut').then(() => { | |||||
// Message.error(err) | |||||
next({ path: '/' }) | |||||
}) | }) | ||||
}) | |||||
} else { | } else { | ||||
next() | next() | ||||
} | } | ||||
@@ -1,11 +1,10 @@ | |||||
const getters = { | const getters = { | ||||
token: state => state.user.token, | |||||
avatar: state => state.user.avatar, | |||||
name: state => state.user.name, | |||||
introduction: state => state.user.introduction, | |||||
roles: state => state.user.roles, | |||||
permissions: state => state.user.permissions, | |||||
bookName: state => state.user.bookName, | |||||
} | |||||
token: state => state.user.token, | |||||
avatar: state => state.user.avatar, | |||||
name: state => state.user.name, | |||||
introduction: state => state.user.introduction, | |||||
roles: state => state.user.roles, | |||||
permissions: state => state.user.permissions, | |||||
bookName: state => state.user.bookName, | |||||
} | |||||
export default getters | export default getters | ||||
@@ -1,13 +1,13 @@ | |||||
import Vue from 'vue' | import Vue from 'vue' | ||||
import Vuex from 'vuex' | import Vuex from 'vuex' | ||||
import app from './modules/user' | |||||
import user from './modules/user' | |||||
import getters from './getters' | import getters from './getters' | ||||
Vue.use(Vuex) | Vue.use(Vuex) | ||||
const store = new Vuex.Store({ | const store = new Vuex.Store({ | ||||
modules: { | modules: { | ||||
app, | |||||
user, | |||||
}, | }, | ||||
getters | getters | ||||
}) | }) | ||||
@@ -81,8 +81,8 @@ const user = { | |||||
return new Promise((resolve, reject) => { | return new Promise((resolve, reject) => { | ||||
getInfo(state.token).then(res => { | getInfo(state.token).then(res => { | ||||
const user = res.user | const user = res.user | ||||
// const avatar = user.avatar == "" ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; | |||||
const avatar = ""; | |||||
// const avatar = user.avatar == "" ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; | |||||
const avatar = ""; | |||||
if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 | if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 | ||||
commit('SET_ROLES', res.roles) | commit('SET_ROLES', res.roles) | ||||
commit('SET_PERMISSIONS', res.permissions) | commit('SET_PERMISSIONS', res.permissions) | ||||
@@ -1,17 +1,15 @@ | |||||
<template> | <template> | ||||
<div class="hello">适配移动端</div> | |||||
<div class="hello">适配移动端</div> | |||||
</template> | </template> | ||||
<script> | <script> | ||||
export default { | export default { | ||||
name: '主页', | |||||
data () { | |||||
return { | |||||
} | |||||
} | |||||
} | |||||
name: "index", | |||||
data() { | |||||
return {}; | |||||
}, | |||||
}; | |||||
</script> | </script> | ||||
<style scoped lang="scss"> | <style scoped lang="scss"> | ||||
</style> | </style> |