| @@ -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> | ||||