From a9dd3498697e947f9eff7c50f7cc4464be5118fc Mon Sep 17 00:00:00 2001 From: Maxim Filippov Date: Sun, 24 Feb 2019 00:40:26 +0300 Subject: [PATCH] Fetch users from API --- src/api/users.js | 10 ++ src/router/index.js | 289 +------------------------------------ src/store/getters.js | 3 +- src/store/index.js | 4 +- src/store/modules/user.js | 13 +- src/store/modules/users.js | 21 +++ src/views/login/index.vue | 2 +- src/views/users/index.vue | 5 + 8 files changed, 49 insertions(+), 298 deletions(-) create mode 100644 src/api/users.js create mode 100644 src/store/modules/users.js diff --git a/src/api/users.js b/src/api/users.js new file mode 100644 index 00000000..167c3303 --- /dev/null +++ b/src/api/users.js @@ -0,0 +1,10 @@ +import request from '@/utils/request' + +export async function fetchUsers() { + return await request({ + url: '/api/pleroma/admin/users', + method: 'get' + }) +} + +export default { fetchUsers } diff --git a/src/router/index.js b/src/router/index.js index 26243be7..26877477 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -6,32 +6,6 @@ Vue.use(Router) /* Layout */ import Layout from '@/views/layout/Layout' -/* Router Modules */ -import componentsRouter from './modules/components' -import chartsRouter from './modules/charts' -import tableRouter from './modules/table' -import nestedRouter from './modules/nested' - -/** note: sub-menu only appear when children.length>=1 - * detail see https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html - **/ - -/** -* hidden: true if `hidden:true` will not show in the sidebar(default is false) -* alwaysShow: true if set true, will always show the root menu, whatever its child routes length -* if not set alwaysShow, only more than one route under the children -* it will becomes nested mode, otherwise not show the root menu -* redirect: noredirect if `redirect:noredirect` will no redirect in the breadcrumb -* name:'router-name' the name is used by (must set!!!) -* meta : { - roles: ['admin','editor'] will control the page roles (you can set multiple roles) - title: 'title' the name show in sub-menu and breadcrumb (recommend set) - icon: 'svg-name' the icon show in the sidebar - noCache: true if true, the page will no be cached(default is false) - breadcrumb: false if false, the item will hidden in breadcrumb(default is true) - affix: true if true, the tag will affix in the tags-view - } -**/ export const constantRouterMap = [ { path: '/redirect', @@ -67,15 +41,7 @@ export const constantRouterMap = [ { path: '', component: Layout, - redirect: 'dashboard', - children: [ - { - path: 'dashboard', - component: () => import('@/views/dashboard/index'), - name: 'Dashboard', - meta: { title: 'dashboard', icon: 'dashboard', noCache: true, affix: true } - } - ] + redirect: '/users/index' } ] @@ -98,258 +64,5 @@ export const asyncRouterMap = [ } ] }, - { - path: '/permission', - component: Layout, - redirect: '/permission/index', - alwaysShow: true, // will always show the root menu - meta: { - title: 'permission', - icon: 'lock', - roles: ['admin', 'editor'] // you can set roles in root nav - }, - children: [ - { - path: 'page', - component: () => import('@/views/permission/page'), - name: 'PagePermission', - meta: { - title: 'pagePermission', - roles: ['admin'] // or you can only set roles in sub nav - } - }, - { - path: 'directive', - component: () => import('@/views/permission/directive'), - name: 'DirectivePermission', - meta: { - title: 'directivePermission' - // if do not set roles, means: this page does not require permission - } - } - ] - }, - - { - path: '/icon', - component: Layout, - children: [ - { - path: 'index', - component: () => import('@/views/svg-icons/index'), - name: 'Icons', - meta: { title: 'icons', icon: 'icon', noCache: true } - } - ] - }, - - /** When your routing table is too long, you can split it into small modules**/ - componentsRouter, - chartsRouter, - nestedRouter, - tableRouter, - - { - path: '/example', - component: Layout, - redirect: '/example/list', - name: 'Example', - meta: { - title: 'example', - icon: 'example' - }, - children: [ - { - path: 'create', - component: () => import('@/views/example/create'), - name: 'CreateArticle', - meta: { title: 'createArticle', icon: 'edit' } - }, - { - path: 'edit/:id(\\d+)', - component: () => import('@/views/example/edit'), - name: 'EditArticle', - meta: { title: 'editArticle', noCache: true }, - hidden: true - }, - { - path: 'list', - component: () => import('@/views/example/list'), - name: 'ArticleList', - meta: { title: 'articleList', icon: 'list' } - } - ] - }, - - { - path: '/tab', - component: Layout, - children: [ - { - path: 'index', - component: () => import('@/views/tab/index'), - name: 'Tab', - meta: { title: 'tab', icon: 'tab' } - } - ] - }, - - { - path: '/error', - component: Layout, - redirect: 'noredirect', - name: 'ErrorPages', - meta: { - title: 'errorPages', - icon: '404' - }, - children: [ - { - path: '401', - component: () => import('@/views/errorPage/401'), - name: 'Page401', - meta: { title: 'page401', noCache: true } - }, - { - path: '404', - component: () => import('@/views/errorPage/404'), - name: 'Page404', - meta: { title: 'page404', noCache: true } - } - ] - }, - - { - path: '/error-log', - component: Layout, - redirect: 'noredirect', - children: [ - { - path: 'log', - component: () => import('@/views/errorLog/index'), - name: 'ErrorLog', - meta: { title: 'errorLog', icon: 'bug' } - } - ] - }, - - { - path: '/excel', - component: Layout, - redirect: '/excel/export-excel', - name: 'Excel', - meta: { - title: 'excel', - icon: 'excel' - }, - children: [ - { - path: 'export-excel', - component: () => import('@/views/excel/exportExcel'), - name: 'ExportExcel', - meta: { title: 'exportExcel' } - }, - { - path: 'export-selected-excel', - component: () => import('@/views/excel/selectExcel'), - name: 'SelectExcel', - meta: { title: 'selectExcel' } - }, - { - path: 'upload-excel', - component: () => import('@/views/excel/uploadExcel'), - name: 'UploadExcel', - meta: { title: 'uploadExcel' } - } - ] - }, - - { - path: '/zip', - component: Layout, - redirect: '/zip/download', - alwaysShow: true, - meta: { title: 'zip', icon: 'zip' }, - children: [ - { - path: 'download', - component: () => import('@/views/zip/index'), - name: 'ExportZip', - meta: { title: 'exportZip' } - } - ] - }, - - { - path: '/pdf', - component: Layout, - redirect: '/pdf/index', - children: [ - { - path: 'index', - component: () => import('@/views/pdf/index'), - name: 'PDF', - meta: { title: 'pdf', icon: 'pdf' } - } - ] - }, - { - path: '/pdf/download', - component: () => import('@/views/pdf/download'), - hidden: true - }, - - { - path: '/theme', - component: Layout, - redirect: 'noredirect', - children: [ - { - path: 'index', - component: () => import('@/views/theme/index'), - name: 'Theme', - meta: { title: 'theme', icon: 'theme' } - } - ] - }, - - { - path: '/clipboard', - component: Layout, - redirect: 'noredirect', - children: [ - { - path: 'index', - component: () => import('@/views/clipboard/index'), - name: 'ClipboardDemo', - meta: { title: 'clipboardDemo', icon: 'clipboard' } - } - ] - }, - - { - path: '/i18n', - component: Layout, - children: [ - { - path: 'index', - component: () => import('@/views/i18n-demo/index'), - name: 'I18n', - meta: { title: 'i18n', icon: 'international' } - } - ] - }, - - { - path: 'external-link', - component: Layout, - children: [ - { - path: 'https://github.com/PanJiaChen/vue-element-admin', - meta: { title: 'externalLink', icon: 'link' } - } - ] - }, - { path: '*', redirect: '/404', hidden: true } ] diff --git a/src/store/getters.js b/src/store/getters.js index cf314f5c..b20f2a1c 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -14,6 +14,7 @@ const getters = { setting: state => state.user.setting, permission_routers: state => state.permission.routers, addRouters: state => state.permission.addRouters, - errorLogs: state => state.errorLog.logs + errorLogs: state => state.errorLog.logs, + users: state => state.users.fetchedUsers } export default getters diff --git a/src/store/index.js b/src/store/index.js index 24778fad..24dd7d66 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -5,6 +5,7 @@ import errorLog from './modules/errorLog' import permission from './modules/permission' import tagsView from './modules/tagsView' import user from './modules/user' +import users from './modules/users' import getters from './getters' Vue.use(Vuex) @@ -15,7 +16,8 @@ const store = new Vuex.Store({ errorLog, permission, tagsView, - user + user, + users }, getters }) diff --git a/src/store/modules/user.js b/src/store/modules/user.js index bee8dbbc..01dfb497 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -61,15 +61,14 @@ const user = { GetUserInfo({ commit, state }) { return new Promise((resolve, reject) => { getUserInfo(state.token).then(response => { - if (!response.data) { - reject('Verification failed, please login again.') - } const data = response.data - if (data.rights) { - if (data.rights.admin) { - commit('SET_ROLES', ['admin']) - } + if (!data) { + reject('Verification failed, please login again.') + } + + if (data.rights && data.rights.admin) { + commit('SET_ROLES', ['admin']) } else { reject('getInfo: roles must be a non-null array!') } diff --git a/src/store/modules/users.js b/src/store/modules/users.js new file mode 100644 index 00000000..c3603077 --- /dev/null +++ b/src/store/modules/users.js @@ -0,0 +1,21 @@ +import { fetchUsers } from '@/api/users' + +const user = { + state: { + fetchedUsers: [] + }, + mutations: { + SET_USERS: (state, users) => { + state.fetchedUsers = users + } + }, + actions: { + async FetchUsers({ commit }) { + const response = await fetchUsers() + + commit('SET_USERS', response.data) + } + } +} + +export default user diff --git a/src/views/login/index.vue b/src/views/login/index.vue index 78eae31d..c2a5d202 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -79,7 +79,7 @@ export default { this.loading = true this.$store.dispatch('LoginByUsername', this.loginForm).then(() => { this.loading = false - this.$router.push({ path: this.redirect || '/' }) + this.$router.push({ path: this.redirect || '/users/index' }) }).catch(() => { this.loading = false }) diff --git a/src/views/users/index.vue b/src/views/users/index.vue index dce75925..93190a68 100644 --- a/src/views/users/index.vue +++ b/src/views/users/index.vue @@ -5,13 +5,18 @@