diff --git a/config/index.js b/config/index.js index d8b17921..3033f9be 100644 --- a/config/index.js +++ b/config/index.js @@ -6,7 +6,6 @@ const path = require('path') module.exports = { dev: { - // Paths assetsSubDirectory: 'static', assetsPublicPath: '/', @@ -43,7 +42,7 @@ module.exports = { // (https://github.com/webpack/css-loader#sourcemaps) // In our experience, they generally work as expected, // just be aware of this issue when enabling this option. - cssSourceMap: false, + cssSourceMap: false }, build: { @@ -83,7 +82,7 @@ module.exports = { // Set to `true` or `false` to always turn it on or off bundleAnalyzerReport: process.env.npm_config_report || false, - // `npm run build:prod --generate_report` + // `npm run build:prod --generate_report` generateAnalyzerReport: process.env.npm_config_generate_report || false } } diff --git a/src/main.js b/src/main.js index ac246444..1dc4af9e 100644 --- a/src/main.js +++ b/src/main.js @@ -1,6 +1,6 @@ import Vue from 'vue' -import 'normalize.css/normalize.css'// A modern alternative to CSS resets +import 'normalize.css/normalize.css' // A modern alternative to CSS resets import Element from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' @@ -13,7 +13,7 @@ import store from './store' import i18n from './lang' // Internationalization import './icons' // icon -import './errorLog'// error log +import './errorLog' // error log import './permission' // permission control import './mock' // simulation data diff --git a/src/permission.js b/src/permission.js index 6fe91b48..22522832 100644 --- a/src/permission.js +++ b/src/permission.js @@ -40,7 +40,7 @@ router.beforeEach((to, from, next) => { } else { // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓ if (hasPermission(store.getters.roles, to.meta.roles)) { - next()// + next() } else { next({ path: '/401', replace: true, query: { noGoBack: true }}) } diff --git a/src/router/index.js b/src/router/index.js index 8df2b8bf..0492a28f 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -6,9 +6,15 @@ 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: submenu only apppear when children.length>=1 -* detail see https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html -**/ + * 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) @@ -25,42 +31,64 @@ import Layout from '@/views/layout/Layout' } **/ export const constantRouterMap = [ - { path: '/login', component: () => import('@/views/login/index'), hidden: true }, - { path: '/authredirect', component: () => import('@/views/login/authredirect'), hidden: true }, - { path: '/404', component: () => import('@/views/errorPage/404'), hidden: true }, - { path: '/401', component: () => import('@/views/errorPage/401'), hidden: true }, + { + path: '/login', + component: () => import('@/views/login/index'), + hidden: true + }, + { + path: '/authredirect', + component: () => import('@/views/login/authredirect'), + hidden: true + }, + { + path: '/404', + component: () => import('@/views/errorPage/404'), + hidden: true + }, + { + path: '/401', + component: () => import('@/views/errorPage/401'), + hidden: true + }, { path: '', component: Layout, redirect: 'dashboard', - children: [{ - path: 'dashboard', - component: () => import('@/views/dashboard/index'), - name: 'dashboard', - meta: { title: 'dashboard', icon: 'dashboard', noCache: true } - }] + children: [ + { + path: 'dashboard', + component: () => import('@/views/dashboard/index'), + name: 'dashboard', + meta: { title: 'dashboard', icon: 'dashboard', noCache: true } + } + ] }, { path: '/documentation', component: Layout, redirect: '/documentation/index', - children: [{ - path: 'index', - component: () => import('@/views/documentation/index'), - name: 'documentation', - meta: { title: 'documentation', icon: 'documentation', noCache: true } - }] + children: [ + { + path: 'index', + component: () => import('@/views/documentation/index'), + name: 'documentation', + meta: { title: 'documentation', icon: 'documentation', noCache: true } + } + ] }, { path: '/guide', component: Layout, redirect: '/guide/index', - children: [{ - path: 'index', - component: () => import('@/views/guide/index'), - name: 'guide', - meta: { title: 'guide', icon: 'guide', noCache: true } - }] + children: [ + { + path: 'index', + component: () => import('@/views/guide/index'), + name: 'guide', + meta: { title: 'guide', icon: 'guide', noCache: true } + } + ] } ] @@ -81,107 +109,46 @@ export const asyncRouterMap = [ 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 + 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: '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 } - }] - }, - - { - path: '/components', - component: Layout, - redirect: 'noredirect', - name: 'component-demo', - meta: { - title: 'components', - icon: 'component' - }, children: [ - { path: 'tinymce', component: () => import('@/views/components-demo/tinymce'), name: 'tinymce-demo', meta: { title: 'tinymce' }}, - { path: 'markdown', component: () => import('@/views/components-demo/markdown'), name: 'markdown-demo', meta: { title: 'markdown' }}, - { path: 'json-editor', component: () => import('@/views/components-demo/jsonEditor'), name: 'jsonEditor-demo', meta: { title: 'jsonEditor' }}, - { path: 'splitpane', component: () => import('@/views/components-demo/splitpane'), name: 'splitpane-demo', meta: { title: 'splitPane' }}, - { path: 'avatar-upload', component: () => import('@/views/components-demo/avatarUpload'), name: 'avatarUpload-demo', meta: { title: 'avatarUpload' }}, - { path: 'dropzone', component: () => import('@/views/components-demo/dropzone'), name: 'dropzone-demo', meta: { title: 'dropzone' }}, - { path: 'sticky', component: () => import('@/views/components-demo/sticky'), name: 'sticky-demo', meta: { title: 'sticky' }}, - { path: 'count-to', component: () => import('@/views/components-demo/countTo'), name: 'countTo-demo', meta: { title: 'countTo' }}, - { path: 'mixin', component: () => import('@/views/components-demo/mixin'), name: 'componentMixin-demo', meta: { title: 'componentMixin' }}, - { path: 'back-to-top', component: () => import('@/views/components-demo/backToTop'), name: 'backToTop-demo', meta: { title: 'backToTop' }}, - { path: 'drag-dialog', component: () => import('@/views/components-demo/dragDialog'), name: 'dragDialog-demo', meta: { title: 'dragDialog' }}, - { path: 'dnd-list', component: () => import('@/views/components-demo/dndList'), name: 'dndList-demo', meta: { title: 'dndList' }}, - { path: 'drag-kanban', component: () => import('@/views/components-demo/dragKanban'), name: 'dragKanban-demo', meta: { title: 'dragKanban' }} + { + path: 'index', + component: () => import('@/views/svg-icons/index'), + name: 'icons', + meta: { title: 'icons', icon: 'icon', noCache: true } + } ] }, - { - path: '/charts', - component: Layout, - redirect: 'noredirect', - name: 'charts', - meta: { - title: 'charts', - icon: 'chart' - }, - children: [ - { path: 'keyboard', component: () => import('@/views/charts/keyboard'), name: 'keyboardChart', meta: { title: 'keyboardChart', noCache: true }}, - { path: 'line', component: () => import('@/views/charts/line'), name: 'lineChart', meta: { title: 'lineChart', noCache: true }}, - { path: 'mixchart', component: () => import('@/views/charts/mixChart'), name: 'mixChart', meta: { title: 'mixChart', noCache: true }} - ] - }, - - { - path: '/tab', - component: Layout, - children: [{ - path: 'index', - component: () => import('@/views/tab/index'), - name: 'tab', - meta: { title: 'tab', icon: 'tab' } - }] - }, - - { - path: '/table', - component: Layout, - redirect: '/table/complex-table', - name: 'table', - meta: { - title: 'Table', - icon: 'table' - }, - children: [ - { path: 'dynamic-table', component: () => import('@/views/table/dynamicTable/index'), name: 'dynamicTable', meta: { title: 'dynamicTable' }}, - { path: 'drag-table', component: () => import('@/views/table/dragTable'), name: 'dragTable', meta: { title: 'dragTable' }}, - { path: 'inline-edit-table', component: () => import('@/views/table/inlineEditTable'), name: 'inlineEditTable', meta: { title: 'inlineEditTable' }}, - { path: 'tree-table', component: () => import('@/views/table/treeTable/treeTable'), name: 'treeTableDemo', meta: { title: 'treeTable' }}, - { path: 'custom-tree-table', component: () => import('@/views/table/treeTable/customTreeTable'), name: 'customTreeTableDemo', meta: { title: 'customTreeTable' }}, - { path: 'complex-table', component: () => import('@/views/table/complexTable'), name: 'complexTable', meta: { title: 'complexTable' }} - ] - }, + /** When your routing table is too long, you can split it into small modules**/ + componentsRouter, + chartsRouter, + nestedRouter, + tableRouter, { path: '/example', @@ -193,69 +160,37 @@ export const asyncRouterMap = [ 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: '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: '/nested', + path: '/tab', component: Layout, - redirect: '/nested/menu1/menu1-1', - name: 'nested', - meta: { - title: 'nested', - icon: 'nested' - }, children: [ { - path: 'menu1', - component: () => import('@/views/nested/menu1/index'), // Parent router-view - name: 'menu1', - meta: { title: 'menu1' }, - redirect: '/nested/menu1/menu1-1', - children: [ - { - path: 'menu1-1', - component: () => import('@/views/nested/menu1/menu1-1'), - name: 'menu1-1', - meta: { title: 'menu1-1' } - }, - { - path: 'menu1-2', - component: () => import('@/views/nested/menu1/menu1-2'), - name: 'menu1-2', - redirect: '/nested/menu1/menu1-2/menu1-2-1', - meta: { title: 'menu1-2' }, - children: [ - { - path: 'menu1-2-1', - component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'), - name: 'menu1-2-1', - meta: { title: 'menu1-2-1' } - }, - { - path: 'menu1-2-2', - component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'), - name: 'menu1-2-2', - meta: { title: 'menu1-2-2' } - } - ] - }, - { - path: 'menu1-3', - component: () => import('@/views/nested/menu1/menu1-3'), - name: 'menu1-3', - meta: { title: 'menu1-3' } - } - ] - }, - { - path: 'menu2', - name: 'menu2', - component: () => import('@/views/nested/menu2/index'), - meta: { title: 'menu2' } + path: 'index', + component: () => import('@/views/tab/index'), + name: 'tab', + meta: { title: 'tab', icon: 'tab' } } ] }, @@ -270,8 +205,18 @@ export const asyncRouterMap = [ 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: '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 } + } ] }, @@ -279,7 +224,14 @@ export const asyncRouterMap = [ path: '/error-log', component: Layout, redirect: 'noredirect', - children: [{ path: 'log', component: () => import('@/views/errorLog/index'), name: 'errorLog', meta: { title: 'errorLog', icon: 'bug' }}] + children: [ + { + path: 'log', + component: () => import('@/views/errorLog/index'), + name: 'errorLog', + meta: { title: 'errorLog', icon: 'bug' } + } + ] }, { @@ -292,9 +244,24 @@ export const asyncRouterMap = [ 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: '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' } + } ] }, @@ -304,27 +271,55 @@ export const asyncRouterMap = [ redirect: '/zip/download', alwaysShow: true, meta: { title: 'zip', icon: 'zip' }, - children: [{ path: 'download', component: () => import('@/views/zip/index'), name: 'exportZip', meta: { title: 'exportZip' }}] + children: [ + { + path: 'download', + component: () => import('@/views/zip/index'), + name: 'exportZip', + meta: { title: 'exportZip' } + } + ] }, { path: '/theme', component: Layout, redirect: 'noredirect', - children: [{ path: 'index', component: () => import('@/views/theme/index'), name: 'theme', meta: { title: 'theme', icon: 'theme' }}] + 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' }}] + 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' }}] + children: [ + { + path: 'index', + component: () => import('@/views/i18n-demo/index'), + name: 'i18n', + meta: { title: 'i18n', icon: 'international' } + } + ] }, { path: '*', redirect: '/404', hidden: true } diff --git a/src/router/modules/charts.js b/src/router/modules/charts.js new file mode 100644 index 00000000..8bdff406 --- /dev/null +++ b/src/router/modules/charts.js @@ -0,0 +1,36 @@ +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from '@/views/layout/Layout' + +const chartsRouter = { + path: '/charts', + component: Layout, + redirect: 'noredirect', + name: 'charts', + meta: { + title: 'charts', + icon: 'chart' + }, + children: [ + { + path: 'keyboard', + component: () => import('@/views/charts/keyboard'), + name: 'keyboardChart', + meta: { title: 'keyboardChart', noCache: true } + }, + { + path: 'line', + component: () => import('@/views/charts/line'), + name: 'lineChart', + meta: { title: 'lineChart', noCache: true } + }, + { + path: 'mixchart', + component: () => import('@/views/charts/mixChart'), + name: 'mixChart', + meta: { title: 'mixChart', noCache: true } + } + ] +} + +export default chartsRouter diff --git a/src/router/modules/components.js b/src/router/modules/components.js new file mode 100644 index 00000000..62d4520d --- /dev/null +++ b/src/router/modules/components.js @@ -0,0 +1,96 @@ +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from '@/views/layout/Layout' + +const componentsRouter = { + path: '/components', + component: Layout, + redirect: 'noredirect', + name: 'component-demo', + meta: { + title: 'components', + icon: 'component' + }, + children: [ + { + path: 'tinymce', + component: () => import('@/views/components-demo/tinymce'), + name: 'tinymce-demo', + meta: { title: 'tinymce' } + }, + { + path: 'markdown', + component: () => import('@/views/components-demo/markdown'), + name: 'markdown-demo', + meta: { title: 'markdown' } + }, + { + path: 'json-editor', + component: () => import('@/views/components-demo/jsonEditor'), + name: 'jsonEditor-demo', + meta: { title: 'jsonEditor' } + }, + { + path: 'splitpane', + component: () => import('@/views/components-demo/splitpane'), + name: 'splitpane-demo', + meta: { title: 'splitPane' } + }, + { + path: 'avatar-upload', + component: () => import('@/views/components-demo/avatarUpload'), + name: 'avatarUpload-demo', + meta: { title: 'avatarUpload' } + }, + { + path: 'dropzone', + component: () => import('@/views/components-demo/dropzone'), + name: 'dropzone-demo', + meta: { title: 'dropzone' } + }, + { + path: 'sticky', + component: () => import('@/views/components-demo/sticky'), + name: 'sticky-demo', + meta: { title: 'sticky' } + }, + { + path: 'count-to', + component: () => import('@/views/components-demo/countTo'), + name: 'countTo-demo', + meta: { title: 'countTo' } + }, + { + path: 'mixin', + component: () => import('@/views/components-demo/mixin'), + name: 'componentMixin-demo', + meta: { title: 'componentMixin' } + }, + { + path: 'back-to-top', + component: () => import('@/views/components-demo/backToTop'), + name: 'backToTop-demo', + meta: { title: 'backToTop' } + }, + { + path: 'drag-dialog', + component: () => import('@/views/components-demo/dragDialog'), + name: 'dragDialog-demo', + meta: { title: 'dragDialog' } + }, + { + path: 'dnd-list', + component: () => import('@/views/components-demo/dndList'), + name: 'dndList-demo', + meta: { title: 'dndList' } + }, + { + path: 'drag-kanban', + component: () => import('@/views/components-demo/dragKanban'), + name: 'dragKanban-demo', + meta: { title: 'dragKanban' } + } + ] +} + +export default componentsRouter diff --git a/src/router/modules/nested.js b/src/router/modules/nested.js new file mode 100644 index 00000000..0cbd9272 --- /dev/null +++ b/src/router/modules/nested.js @@ -0,0 +1,66 @@ +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from '@/views/layout/Layout' + +const nestedRouter = { + path: '/nested', + component: Layout, + redirect: '/nested/menu1/menu1-1', + name: 'nested', + meta: { + title: 'nested', + icon: 'nested' + }, + children: [ + { + path: 'menu1', + component: () => import('@/views/nested/menu1/index'), // Parent router-view + name: 'menu1', + meta: { title: 'menu1' }, + redirect: '/nested/menu1/menu1-1', + children: [ + { + path: 'menu1-1', + component: () => import('@/views/nested/menu1/menu1-1'), + name: 'menu1-1', + meta: { title: 'menu1-1' } + }, + { + path: 'menu1-2', + component: () => import('@/views/nested/menu1/menu1-2'), + name: 'menu1-2', + redirect: '/nested/menu1/menu1-2/menu1-2-1', + meta: { title: 'menu1-2' }, + children: [ + { + path: 'menu1-2-1', + component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'), + name: 'menu1-2-1', + meta: { title: 'menu1-2-1' } + }, + { + path: 'menu1-2-2', + component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'), + name: 'menu1-2-2', + meta: { title: 'menu1-2-2' } + } + ] + }, + { + path: 'menu1-3', + component: () => import('@/views/nested/menu1/menu1-3'), + name: 'menu1-3', + meta: { title: 'menu1-3' } + } + ] + }, + { + path: 'menu2', + name: 'menu2', + component: () => import('@/views/nested/menu2/index'), + meta: { title: 'menu2' } + } + ] +} + +export default nestedRouter diff --git a/src/router/modules/table.js b/src/router/modules/table.js new file mode 100644 index 00000000..fde5a41f --- /dev/null +++ b/src/router/modules/table.js @@ -0,0 +1,53 @@ +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from '@/views/layout/Layout' + +const tableRouter = { + path: '/table', + component: Layout, + redirect: '/table/complex-table', + name: 'table', + meta: { + title: 'Table', + icon: 'table' + }, + children: [ + { + path: 'dynamic-table', + component: () => import('@/views/table/dynamicTable/index'), + name: 'dynamicTable', + meta: { title: 'dynamicTable' } + }, + { + path: 'drag-table', + component: () => import('@/views/table/dragTable'), + name: 'dragTable', + meta: { title: 'dragTable' } + }, + { + path: 'inline-edit-table', + component: () => import('@/views/table/inlineEditTable'), + name: 'inlineEditTable', + meta: { title: 'inlineEditTable' } + }, + { + path: 'tree-table', + component: () => import('@/views/table/treeTable/treeTable'), + name: 'treeTableDemo', + meta: { title: 'treeTable' } + }, + { + path: 'custom-tree-table', + component: () => import('@/views/table/treeTable/customTreeTable'), + name: 'customTreeTableDemo', + meta: { title: 'customTreeTable' } + }, + { + path: 'complex-table', + component: () => import('@/views/table/complexTable'), + name: 'complexTable', + meta: { title: 'complexTable' } + } + ] +} +export default tableRouter diff --git a/src/store/modules/tagsView.js b/src/store/modules/tagsView.js index 25d513cd..bb126492 100644 --- a/src/store/modules/tagsView.js +++ b/src/store/modules/tagsView.js @@ -6,9 +6,11 @@ const tagsView = { mutations: { ADD_VISITED_VIEWS: (state, view) => { if (state.visitedViews.some(v => v.path === view.path)) return - state.visitedViews.push(Object.assign({}, view, { - title: view.meta.title || 'no-name' - })) + state.visitedViews.push( + Object.assign({}, view, { + title: view.meta.title || 'no-name' + }) + ) if (!view.meta.noCache) { state.cachedViews.push(view.name) } @@ -43,7 +45,7 @@ const tagsView = { } } }, - DEL_ALL_VIEWS: (state) => { + DEL_ALL_VIEWS: state => { state.visitedViews = [] state.cachedViews = [] } @@ -53,19 +55,19 @@ const tagsView = { commit('ADD_VISITED_VIEWS', view) }, delVisitedViews({ commit, state }, view) { - return new Promise((resolve) => { + return new Promise(resolve => { commit('DEL_VISITED_VIEWS', view) resolve([...state.visitedViews]) }) }, delOthersViews({ commit, state }, view) { - return new Promise((resolve) => { + return new Promise(resolve => { commit('DEL_OTHERS_VIEWS', view) resolve([...state.visitedViews]) }) }, delAllViews({ commit, state }) { - return new Promise((resolve) => { + return new Promise(resolve => { commit('DEL_ALL_VIEWS') resolve([...state.visitedViews]) }) diff --git a/src/utils/index.js b/src/utils/index.js index 31295122..3e540802 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -25,7 +25,7 @@ export function parseTime(time, cFormat) { } const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { let value = formatObj[key] - if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1] + if (key === 'a') { return ['一', '二', '三', '四', '五', '六', '日'][value - 1] } if (result.length > 0 && value < 10) { value = '0' + value } @@ -43,7 +43,8 @@ export function formatTime(time, option) { if (diff < 30) { return '刚刚' - } else if (diff < 3600) { // less 1 hour + } else if (diff < 3600) { + // less 1 hour return Math.ceil(diff / 60) + '分钟前' } else if (diff < 3600 * 24) { return Math.ceil(diff / 3600) + '小时前' @@ -53,7 +54,17 @@ export function formatTime(time, option) { if (option) { return parseTime(time, option) } else { - return d.getMonth() + 1 + '月' + d.getDate() + '日' + d.getHours() + '时' + d.getMinutes() + '分' + return ( + d.getMonth() + + 1 + + '月' + + d.getDate() + + '日' + + d.getHours() + + '时' + + d.getMinutes() + + '分' + ) } } @@ -81,9 +92,11 @@ export function getQueryObject(url) { export function getByteLen(val) { let len = 0 for (let i = 0; i < val.length; i++) { - if (val[i].match(/[^\x00-\xff]/ig) != null) { + if (val[i].match(/[^\x00-\xff]/gi) != null) { len += 1 - } else { len += 0.5 } + } else { + len += 0.5 + } } return Math.floor(len) } @@ -100,11 +113,12 @@ export function cleanArray(actual) { export function param(json) { if (!json) return '' - return cleanArray(Object.keys(json).map(key => { - if (json[key] === undefined) return '' - return encodeURIComponent(key) + '=' + - encodeURIComponent(json[key]) - })).join('&') + return cleanArray( + Object.keys(json).map(key => { + if (json[key] === undefined) return '' + return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) + }) + ).join('&') } export function param2Obj(url) { @@ -112,7 +126,14 @@ export function param2Obj(url) { if (!search) { return {} } - return JSON.parse('{"' + decodeURIComponent(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}') + return JSON.parse( + '{"' + + decodeURIComponent(search) + .replace(/"/g, '\\"') + .replace(/&/g, '","') + .replace(/=/g, '":"') + + '"}' + ) } export function html2Text(val) { @@ -131,7 +152,7 @@ export function objectMerge(target, source) { if (Array.isArray(source)) { return source.slice() } - Object.keys(source).forEach((property) => { + Object.keys(source).forEach(property => { const sourceProperty = source[property] if (typeof sourceProperty === 'object') { target[property] = objectMerge(target[property], sourceProperty) @@ -145,7 +166,7 @@ export function objectMerge(target, source) { export function scrollTo(element, to, duration) { if (duration <= 0) return const difference = to - element.scrollTop - const perTick = difference / duration * 10 + const perTick = (difference / duration) * 10 setTimeout(() => { console.log(new Date()) element.scrollTop = element.scrollTop + perTick @@ -163,7 +184,9 @@ export function toggleClass(element, className) { if (nameIndex === -1) { classString += '' + className } else { - classString = classString.substr(0, nameIndex) + classString.substr(nameIndex + className.length) + classString = + classString.substr(0, nameIndex) + + classString.substr(nameIndex + className.length) } element.className = classString } @@ -177,7 +200,8 @@ export const pickerOptions = [ end.setTime(start.getTime()) picker.$emit('pick', [start, end]) } - }, { + }, + { text: '最近一周', onClick(picker) { const end = new Date(new Date().toDateString()) @@ -185,7 +209,8 @@ export const pickerOptions = [ start.setTime(end.getTime() - 3600 * 1000 * 24 * 7) picker.$emit('pick', [start, end]) } - }, { + }, + { text: '最近一个月', onClick(picker) { const end = new Date(new Date().toDateString()) @@ -193,7 +218,8 @@ export const pickerOptions = [ start.setTime(start.getTime() - 3600 * 1000 * 24 * 30) picker.$emit('pick', [start, end]) } - }, { + }, + { text: '最近三个月', onClick(picker) { const end = new Date(new Date().toDateString()) @@ -201,7 +227,8 @@ export const pickerOptions = [ start.setTime(start.getTime() - 3600 * 1000 * 24 * 90) picker.$emit('pick', [start, end]) } - }] + } +] export function getTime(type) { if (type === 'start') { @@ -256,7 +283,7 @@ export function deepClone(source) { throw new Error('error arguments', 'shallowClone') } const targetObj = source.constructor === Array ? [] : {} - Object.keys(source).forEach((keys) => { + Object.keys(source).forEach(keys => { if (source[keys] && typeof source[keys] === 'object') { targetObj[keys] = deepClone(source[keys]) } else { diff --git a/src/utils/permission.js b/src/utils/permission.js index 7bd22e01..221d3842 100644 --- a/src/utils/permission.js +++ b/src/utils/permission.js @@ -23,4 +23,3 @@ export default function checkPermission(value) { return false } } - diff --git a/src/utils/request.js b/src/utils/request.js index 0bcb1833..5ce53933 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -10,18 +10,21 @@ const service = axios.create({ }) // request interceptor -service.interceptors.request.use(config => { - // Do something before request is sent - if (store.getters.token) { - // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改 - config.headers['X-Token'] = getToken() +service.interceptors.request.use( + config => { + // Do something before request is sent + if (store.getters.token) { + // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改 + config.headers['X-Token'] = getToken() + } + return config + }, + error => { + // Do something with request error + console.log(error) // for debug + Promise.reject(error) } - return config -}, error => { - // Do something with request error - console.log(error) // for debug - Promise.reject(error) -}) +) // respone interceptor service.interceptors.response.use( @@ -67,6 +70,7 @@ service.interceptors.response.use( duration: 5 * 1000 }) return Promise.reject(error) - }) + } +) export default service diff --git a/src/utils/validate.js b/src/utils/validate.js index 10579fd3..ada0e7e2 100644 --- a/src/utils/validate.js +++ b/src/utils/validate.js @@ -40,4 +40,3 @@ export function validateEmail(email) { const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ return re.test(email) } -