From 5d4f990368937fe4c786e570051432305b6ca69f Mon Sep 17 00:00:00 2001 From: zhengjie Date: Thu, 28 Feb 2019 16:27:08 +0800 Subject: [PATCH] =?UTF-8?q?v1.6=20=E7=89=88=E6=9C=AC=E5=8F=91=E5=B8=83=20?= =?UTF-8?q?=EF=BC=8C=E8=AF=A6=E6=83=85=E6=9F=A5=E7=9C=8B=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/check-versions.js | 2 - package.json | 6 +- src/api/role.js | 23 ++ src/permission.js | 29 ++- src/router/index.js | 1 + src/store/getters.js | 1 + src/store/modules/user.js | 35 ++- src/styles/description.scss | 5 +- src/utils/index.js | 2 +- src/utils/request.js | 2 +- src/views/layout/components/TagsView.vue | 11 - src/views/login/index.vue | 2 +- src/views/monitor/log/msg.vue | 28 ++- src/views/system/menu/index.vue | 14 +- src/views/system/menu/module/edit.vue | 10 +- src/views/system/menu/module/form.vue | 16 +- src/views/system/menu/module/header.vue | 7 +- src/views/system/permission/index.vue | 2 +- src/views/system/permission/module/edit.vue | 2 +- src/views/system/permission/module/header.vue | 1 - src/views/system/role/index.vue | 220 +++++++++++++++--- src/views/system/role/module/edit.vue | 12 +- src/views/system/role/module/form.vue | 19 +- src/views/system/role/module/header.vue | 6 +- src/views/system/timing/module/log.vue | 11 +- src/views/system/user/index.vue | 2 +- src/views/system/user/module/edit.vue | 2 +- 27 files changed, 319 insertions(+), 152 deletions(-) diff --git a/build/check-versions.js b/build/check-versions.js index c5c29e9..c29c7e7 100644 --- a/build/check-versions.js +++ b/build/check-versions.js @@ -51,14 +51,12 @@ module.exports = function() { 'To use this template, you must update following to modules:' ) ) - console.log() for (let i = 0; i < warnings.length; i++) { const warning = warnings[i] console.log(' ' + warning) } - console.log() process.exit(1) } } diff --git a/package.json b/package.json index de73107..86a661f 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "eladmin-qt", - "version": "1.2.0", + "version": "1.6.0", "license": "Apache License 2.0", "description": "eladmin 前端代码", - "author": "jie ", + "author": "jie ", "scripts": { "dev": "cross-env BABEL_ENV=development webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "build": "cross-env NODE_ENV=production env_config=prod node build/build.js", @@ -32,7 +32,7 @@ "vuex": "3.0.1", "xlsx": "^0.11.16", "jszip": "3.1.5", - "@riophae/vue-treeselect": "0.0.37", + "@riophae/vue-treeselect": "0.0.38", "file-saver": "1.3.8", "sockjs-client": "1.3.0", "stompjs": "2.3.3", diff --git a/src/api/role.js b/src/api/role.js index 69c8810..243b31c 100644 --- a/src/api/role.js +++ b/src/api/role.js @@ -16,6 +16,13 @@ export function add(data) { }) } +export function get(id) { + return request({ + url: 'api/roles/' + id, + method: 'get' + }) +} + export function del(id) { return request({ url: 'api/roles/' + id, @@ -30,3 +37,19 @@ export function edit(data) { data }) } + +export function editPermission(data) { + return request({ + url: 'api/roles/permission', + method: 'put', + data + }) +} + +export function editMenu(data) { + return request({ + url: 'api/roles/menu', + method: 'put', + data + }) +} diff --git a/src/permission.js b/src/permission.js index a977ea5..0fa8166 100644 --- a/src/permission.js +++ b/src/permission.js @@ -11,6 +11,9 @@ NProgress.configure({ showSpinner: false })// NProgress Configuration const whiteList = ['/login']// no redirect whitelist router.beforeEach((to, from, next) => { + if (to.meta.title) { + document.title = to.meta.title + ' - eladmin' + } NProgress.start() // start progress bar if (getToken()) { // 已登录且要跳转的页面是登录页 @@ -20,20 +23,19 @@ router.beforeEach((to, from, next) => { } else { if (store.getters.roles.length === 0) { // 判断当前用户是否已拉取完user_info信息 store.dispatch('GetInfo').then(res => { // 拉取user_info - buildMenus().then(res => { - const asyncRouter = filterAsyncRouter(res) - asyncRouter.push({ path: '*', redirect: '/404', hidden: true }) - store.dispatch('GenerateRoutes', asyncRouter).then(() => { // 存储路由 - router.addRoutes(asyncRouter) // 动态添加可访问路由表 - next({ ...to, replace: true })// hack方法 确保addRoutes已完成 - }) - }) + // 动态路由,拉取菜单 + loadMenus(next, to) }).catch((err) => { console.log(err) store.dispatch('LogOut').then(() => { location.reload() // 为了重新实例化vue-router对象 避免bug }) }) + // 登录时未拉取 菜单,在此处拉取 + } else if (store.getters.loadMenus) { + // 修改成false,防止死循环 + store.dispatch('updateLoadMenus').then(res => {}) + loadMenus(next, to) } else { next() } @@ -49,6 +51,17 @@ router.beforeEach((to, from, next) => { } }) +export const loadMenus = (next, to) => { + buildMenus().then(res => { + const asyncRouter = filterAsyncRouter(res) + asyncRouter.push({ path: '*', redirect: '/404', hidden: true }) + store.dispatch('GenerateRoutes', asyncRouter).then(() => { // 存储路由 + router.addRoutes(asyncRouter) // 动态添加可访问路由表 + next({ ...to, replace: true })// hack方法 确保addRoutes已完成 + }) + }) +} + router.afterEach(() => { NProgress.done() // finish progress bar }) diff --git a/src/router/index.js b/src/router/index.js index 1061ed6..bf52996 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -21,6 +21,7 @@ import Layout from '../views/layout/Layout' export const constantRouterMap = [ { path: '/login', + meta: { title: '登录', noCache: true }, component: () => import('@/views/login/index'), hidden: true }, diff --git a/src/store/getters.js b/src/store/getters.js index 42ed41b..e73ce4e 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -9,6 +9,7 @@ const getters = { createTime: state => state.user.createTime, email: state => state.user.email, roles: state => state.user.roles, + loadMenus: state => state.user.loadMenus, permission_routers: state => state.permission.routers, addRouters: state => state.permission.addRouters, socketApi: state => state.api.socketApi, diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 1d16960..bb17e44 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -9,7 +9,9 @@ const user = { email: '', avatar: '', createTime: '', - roles: [] + roles: [], + // 第一次加载菜单时用到 + loadMenus: false }, mutations: { @@ -30,6 +32,9 @@ const user = { }, SET_EMAIL: (state, email) => { state.email = email + }, + SET_LOAD_MENUS: (state, loadMenus) => { + state.loadMenus = loadMenus } }, @@ -43,6 +48,9 @@ const user = { login(username, password).then(res => { setToken(res.token, rememberMe) commit('SET_TOKEN', res.token) + setUserInfo(res.user, commit) + // 第一次加载菜单时用到, 具体见 src 目录下的 permission.js + commit('SET_LOAD_MENUS', true) resolve() }).catch(error => { reject(error) @@ -54,11 +62,7 @@ const user = { GetInfo({ commit }) { return new Promise((resolve, reject) => { getInfo().then(res => { - commit('SET_ROLES', res.roles) - commit('SET_NAME', res.username) - commit('SET_AVATAR', res.avatar) - commit('SET_EMAIL', res.email) - commit('SET_CREATE_TIME', parseTime(res.createTime)) + setUserInfo(res, commit) resolve(res) }).catch(error => { reject(error) @@ -74,8 +78,27 @@ const user = { removeToken() resolve() }) + }, + + updateLoadMenus({ commit }) { + return new Promise((resolve, reject) => { + commit('SET_LOAD_MENUS', false) + }) } } } +export const setUserInfo = (res, commit) => { + // 如果没有任何权限,则赋予一个默认的权限,避免请求死循环 + if (res.roles.length === 0) { + commit('SET_ROLES', ['ROLE_SYSTEM_DEFAULT']) + } else { + commit('SET_ROLES', res.roles) + } + commit('SET_NAME', res.username) + commit('SET_AVATAR', res.avatar) + commit('SET_EMAIL', res.email) + commit('SET_CREATE_TIME', parseTime(res.createTime)) +} + export default user diff --git a/src/styles/description.scss b/src/styles/description.scss index 9e78cbf..76b0992 100644 --- a/src/styles/description.scss +++ b/src/styles/description.scss @@ -2,7 +2,7 @@ margin: 0px 0px 10px; padding: 15px; line-height: 22px; - border-left: 5px solid #409EFF;; + border-left: 5px solid #00437B; border-radius: 0 2px 2px 0; background-color: #f2f2f2; } @@ -10,8 +10,7 @@ position: relative; padding: 15px; line-height: 20px; - border: 1px solid #ddd; - border-left-width: 6px; + border-left: 5px solid #ddd; color: #333; font-family: Courier New; font-size: 12px diff --git a/src/utils/index.js b/src/utils/index.js index a8f8124..79031e1 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -15,7 +15,7 @@ export function parseTime(time) { var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds() // 拼接 - return year + '年' + month + '月' + day + '日 ' + hours + ':' + minutes + ':' + seconds + return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds } else { return '' } diff --git a/src/utils/request.js b/src/utils/request.js index 6011f4d..81ac065 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -54,7 +54,7 @@ service.interceptors.response.use( } if (code === 401) { MessageBox.confirm( - '登录状态过期了哦,您可以继续留在该页面,或者重新登录', + '登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', diff --git a/src/views/layout/components/TagsView.vue b/src/views/layout/components/TagsView.vue index 3c102e7..beb40bd 100644 --- a/src/views/layout/components/TagsView.vue +++ b/src/views/layout/components/TagsView.vue @@ -16,7 +16,6 @@
    -
  • 刷新
  • 关闭
  • 关闭其他
  • 关闭所有
  • @@ -86,16 +85,6 @@ export default { } }) }, - refreshSelectedTag(view) { - this.$store.dispatch('delCachedView', view).then(() => { - const { fullPath } = view - this.$nextTick(() => { - this.$router.replace({ - path: '/redirect' + fullPath - }) - }) - }) - }, closeSelectedTag(view) { this.$store.dispatch('delView', view).then(({ visitedViews }) => { if (this.isActive(view)) { diff --git a/src/views/login/index.vue b/src/views/login/index.vue index 26aa618..fa30959 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -8,7 +8,7 @@ - + diff --git a/src/views/monitor/log/msg.vue b/src/views/monitor/log/msg.vue index 1af1880..74997ff 100644 --- a/src/views/monitor/log/msg.vue +++ b/src/views/monitor/log/msg.vue @@ -30,7 +30,7 @@ export default { ico: 'unlock', unlock: true, content: '锁定滚动条', height: document.documentElement.clientHeight - 94.5 + 'px;', width: document.documentElement.clientWidth - 185 + 'px;', - data: [{ name: 'elAdmin-', timestamp: new Date(), threadName: 'system-prompt-message', level: 'INFO', className: 'me.zhengjie.AppRun' + ' :', body: 'Welcome, no log output~' }], + data: [{ name: 'elAdmin-', timestamp: new Date(), threadName: 'system-prompt-message', level: 'INFO', className: 'me.zhengjie.AppRun' + ' :', body: 'Welcome, no log output' }], // level INFO: '#0000ff', WARN: '#FFFF00', ERROR: '#FF0000', DEBUG: '#DEA000' } @@ -129,5 +129,29 @@ export default { diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue index 2a5dc0c..3c80371 100644 --- a/src/views/system/menu/index.vue +++ b/src/views/system/menu/index.vue @@ -1,6 +1,6 @@