From f11839c8a480865a66b64812ecb49c6d02023da5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E8=A3=A4=E8=A1=A9?= Date: Sun, 7 Apr 2019 23:10:14 +0800 Subject: [PATCH 01/32] docs: refine i18n (#1848) --- src/lang/en.js | 20 ++++++------- src/lang/es.js | 2 -- src/lang/zh.js | 28 +++++++++---------- src/views/excel/components/FilenameOption.vue | 2 +- src/views/excel/selectExcel.vue | 2 +- .../permission/components/SwitchRoles.vue | 4 +-- src/views/table/dragTable.vue | 4 +-- src/views/zip/index.vue | 2 +- 8 files changed, 29 insertions(+), 35 deletions(-) diff --git a/src/lang/en.js b/src/lang/en.js index ef4548e7..490ac206 100644 --- a/src/lang/en.js +++ b/src/lang/en.js @@ -1,7 +1,6 @@ export default { route: { dashboard: 'Dashboard', - introduction: 'Introduction', documentation: 'Documentation', guide: 'Guide', permission: 'Permission', @@ -10,7 +9,6 @@ export default { directivePermission: 'Directive Permission', icons: 'Icons', components: 'Components', - componentIndex: 'Introduction', tinymce: 'Tinymce', markdown: 'Markdown', jsonEditor: 'JSON Editor', @@ -19,9 +17,9 @@ export default { avatarUpload: 'Avatar Upload', dropzone: 'Dropzone', sticky: 'Sticky', - countTo: 'CountTo', + countTo: 'Count To', componentMixin: 'Mixin', - backToTop: 'BackToTop', + backToTop: 'Back To Top', dragDialog: 'Drag Dialog', dragSelect: 'Drag Select', dragKanban: 'Drag Kanban', @@ -74,7 +72,7 @@ export default { }, login: { title: 'Login Form', - logIn: 'Log in', + logIn: 'Login', username: 'Username', password: 'Password', any: 'any', @@ -87,10 +85,10 @@ export default { }, permission: { addRole: 'New Role', - editPermission: 'Edit Permission', + editPermission: 'Edit', roles: 'Your roles', switchRoles: 'Switch roles', - tips: 'In some cases it is not suitable to use v-permission, such as element Tab component or el-table-column and other asynchronous rendering dom cases which can only be achieved by manually setting the v-if.', + tips: 'In some cases, using v-permission will have no effect. For example: Element-UI el-tab or el-table-column and other scenes that dynamically render dom. You can only do this with v-if.', delete: 'Delete', confirm: 'Confirm', cancel: 'Cancel' @@ -101,7 +99,7 @@ export default { }, components: { documentation: 'Documentation', - tinymceTips: 'Rich text editor is a core part of management system, but at the same time is a place with lots of problems. In the process of selecting rich texts, I also walked a lot of detours. The common rich text editors in the market are basically used, and the finally chose Tinymce. See documentation for more detailed rich text editor comparisons and introductions.', + tinymceTips: 'Rich text is a core feature of the management backend, but at the same time it is a place with lots of pits. In the process of selecting rich texts, I also took a lot of detours. The common rich texts on the market have been basically used, and I finally chose Tinymce. See the more detailed rich text comparison and introduction.', dropzoneTips: 'Because my business has special needs, and has to upload images to qiniu, so instead of a third party, I chose encapsulate it by myself. It is very simple, you can see the detail code in @/components/Dropzone.', stickyTips: 'when the page is scrolled to the preset position will be sticky on the top.', backToTopTips1: 'When the page is scrolled to the specified position, the Back to Top button appears in the lower right corner', @@ -142,14 +140,14 @@ export default { excel: { export: 'Export', selectedExport: 'Export Selected Items', - placeholder: 'Please enter the file name(default excel-list)' + placeholder: 'Please enter the file name (default excel-list)' }, zip: { export: 'Export', - placeholder: 'Please enter the file name(default file)' + placeholder: 'Please enter the file name (default file)' }, pdf: { - tips: 'Here we use window.print() to implement the feature of downloading pdf.' + tips: 'Here we use window.print() to implement the feature of downloading PDF.' }, theme: { change: 'Change Theme', diff --git a/src/lang/es.js b/src/lang/es.js index 89a9e9d3..a8f69831 100755 --- a/src/lang/es.js +++ b/src/lang/es.js @@ -1,7 +1,6 @@ export default { route: { dashboard: 'Panel de control', - introduction: 'Introducción', documentation: 'Documentación', guide: 'Guía', permission: 'Permisos', @@ -10,7 +9,6 @@ export default { directivePermission: 'Permisos de la directiva', icons: 'Iconos', components: 'Componentes', - componentIndex: 'Introducción', tinymce: 'Tinymce', markdown: 'Markdown', jsonEditor: 'Editor JSON', diff --git a/src/lang/zh.js b/src/lang/zh.js index 702725cd..4394cc70 100644 --- a/src/lang/zh.js +++ b/src/lang/zh.js @@ -1,7 +1,6 @@ export default { route: { dashboard: '首页', - introduction: '简述', documentation: '文档', guide: '引导页', permission: '权限测试页', @@ -10,16 +9,15 @@ export default { directivePermission: '指令权限', icons: '图标', components: '组件', - componentIndex: '介绍', tinymce: '富文本编辑器', markdown: 'Markdown', - jsonEditor: 'JSON编辑器', + jsonEditor: 'JSON 编辑器', dndList: '列表拖拽', splitPane: 'Splitpane', avatarUpload: '头像上传', dropzone: 'Dropzone', sticky: 'Sticky', - countTo: 'CountTo', + countTo: 'Count To', componentMixin: '小组件', backToTop: '返回顶部', dragDialog: '拖拽 Dialog', @@ -32,17 +30,17 @@ export default { example: '综合实例', nested: '路由嵌套', menu1: '菜单1', - 'menu1-1': '菜单1-1', - 'menu1-2': '菜单1-2', - 'menu1-2-1': '菜单1-2-1', - 'menu1-2-2': '菜单1-2-2', - 'menu1-3': '菜单1-3', - menu2: '菜单2', + 'menu1-1': '菜单 1-1', + 'menu1-2': '菜单 1-2', + 'menu1-2-1': '菜单 1-2-1', + 'menu1-2-2': '菜单 1-2-2', + 'menu1-3': '菜单 1-3', + menu2: '菜单 2', Table: 'Table', - dynamicTable: '动态Table', - dragTable: '拖拽Table', - inlineEditTable: 'Table内编辑', - complexTable: '综合Table', + dynamicTable: '动态 Table', + dragTable: '拖拽 Table', + inlineEditTable: 'Table 内编辑', + complexTable: '综合 Table', tab: 'Tab', form: '表单', createArticle: '创建文章', @@ -90,7 +88,7 @@ export default { editPermission: '编辑权限', roles: '你的权限', switchRoles: '切换权限', - tips: '在某些情况下,不适合使用 v-permission。例如:Element-UI 的 Tab 组件或 el-table-column 以及其它动态渲染 dom 的场景。你只能通过手动设置 v-if 来实现。', + tips: '在某些情况下,不适合使用 v-permission。例如:Element-UI 的 el-tab 或 el-table-column 以及其它动态渲染 dom 的场景。你只能通过手动设置 v-if 来实现。', delete: '删除', confirm: '确定', cancel: '取消' diff --git a/src/views/excel/components/FilenameOption.vue b/src/views/excel/components/FilenameOption.vue index b578d65c..c8e0530d 100644 --- a/src/views/excel/components/FilenameOption.vue +++ b/src/views/excel/components/FilenameOption.vue @@ -2,7 +2,7 @@
- +
diff --git a/src/views/excel/selectExcel.vue b/src/views/excel/selectExcel.vue index 05c52f5f..09866e13 100644 --- a/src/views/excel/selectExcel.vue +++ b/src/views/excel/selectExcel.vue @@ -1,7 +1,7 @@ diff --git a/src/filters/index.js b/src/filters/index.js index b164513a..86e768d8 100644 --- a/src/filters/index.js +++ b/src/filters/index.js @@ -1,6 +1,12 @@ // set function parseTime,formatTime to filter export { parseTime, formatTime } from '@/utils' +/** + * Show plural label if time is plural number + * @param {number} time + * @param {string} label + * @return {string} + */ function pluralize(time, label) { if (time === 1) { return time + label @@ -8,6 +14,9 @@ function pluralize(time, label) { return time + label + 's' } +/** + * @param {number} time + */ export function timeAgo(time) { const between = Date.now() / 1000 - Number(time) if (between < 3600) { @@ -19,7 +28,12 @@ export function timeAgo(time) { } } -/* 数字 格式化*/ +/** + * Number formatting + * like 10000 => 10k + * @param {number} num + * @param {number} digits + */ export function numberFormatter(num, digits) { const si = [ { value: 1E18, symbol: 'E' }, @@ -37,6 +51,10 @@ export function numberFormatter(num, digits) { return num.toString() } +/** + * 10000 => "10,000" + * @param {number} num + */ export function toThousandFilter(num) { return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ',')) } diff --git a/src/layout/components/index.js b/src/layout/components/index.js index e9f79ddd..104bd3ac 100644 --- a/src/layout/components/index.js +++ b/src/layout/components/index.js @@ -1,5 +1,5 @@ +export { default as AppMain } from './AppMain' export { default as Navbar } from './Navbar' +export { default as Settings } from './Settings' export { default as Sidebar } from './Sidebar/index.vue' export { default as TagsView } from './TagsView/index.vue' -export { default as AppMain } from './AppMain' -export { default as Settings } from './Settings' diff --git a/src/layout/index.vue b/src/layout/index.vue index ec6df90c..965bcd1b 100644 --- a/src/layout/index.vue +++ b/src/layout/index.vue @@ -17,19 +17,19 @@ From a6be6af46db8ae9887c84237d28ec122b6bcf6ca Mon Sep 17 00:00:00 2001 From: Pan Date: Fri, 12 Apr 2019 10:53:12 +0800 Subject: [PATCH 19/32] perf: set private property names for vue https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential --- src/components/Charts/mixins/resize.js | 12 +++++++----- src/layout/mixin/ResizeHandler.js | 14 ++++++++------ 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/components/Charts/mixins/resize.js b/src/components/Charts/mixins/resize.js index c4c432f4..dccaf1a8 100644 --- a/src/components/Charts/mixins/resize.js +++ b/src/components/Charts/mixins/resize.js @@ -3,7 +3,7 @@ import { debounce } from '@/utils' export default { data() { return { - sidebarElm: null + $_sidebarElm: null } }, mounted() { @@ -14,16 +14,18 @@ export default { }, 100) window.addEventListener('resize', this.__resizeHandler) - this.sidebarElm = document.getElementsByClassName('sidebar-container')[0] - this.sidebarElm && this.sidebarElm.addEventListener('transitionend', this.sidebarResizeHandler) + this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0] + this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler) }, beforeDestroy() { window.removeEventListener('resize', this.__resizeHandler) - this.sidebarElm && this.sidebarElm.removeEventListener('transitionend', this.sidebarResizeHandler) + this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler) }, methods: { - sidebarResizeHandler(e) { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_sidebarResizeHandler(e) { if (e.propertyName === 'width') { this.__resizeHandler() } diff --git a/src/layout/mixin/ResizeHandler.js b/src/layout/mixin/ResizeHandler.js index 65879d16..e8d0df8c 100644 --- a/src/layout/mixin/ResizeHandler.js +++ b/src/layout/mixin/ResizeHandler.js @@ -12,26 +12,28 @@ export default { } }, beforeMount() { - window.addEventListener('resize', this.resizeHandler) + window.addEventListener('resize', this.$_resizeHandler) }, beforeDestroy() { - window.removeEventListener('resize', this.resizeHandler) + window.removeEventListener('resize', this.$_resizeHandler) }, mounted() { - const isMobile = this.isMobile() + const isMobile = this.$_isMobile() if (isMobile) { store.dispatch('app/toggleDevice', 'mobile') store.dispatch('app/closeSideBar', { withoutAnimation: true }) } }, methods: { - isMobile() { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_isMobile() { const rect = body.getBoundingClientRect() return rect.width - 1 < WIDTH }, - resizeHandler() { + $_resizeHandler() { if (!document.hidden) { - const isMobile = this.isMobile() + const isMobile = this.$_isMobile() store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') if (isMobile) { From fdea6c684ab438b4505e0b0d68b24d16040667b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E8=A3=A4=E8=A1=A9?= Date: Fri, 12 Apr 2019 17:13:27 +0800 Subject: [PATCH 20/32] refactor: standardized files name (#1884) style-guide: https://panjiachen.github.io/vue-element-admin-site/guide/advanced/style-guide.html#style-guide --- mock/index.js | 2 +- mock/{remoteSearch.js => remote-search.js} | 0 mock/role/routes.js | 40 +++++++++---------- src/api/{remoteSearch.js => remote-search.js} | 0 .../Charts/{keyboard.vue => Keyboard.vue} | 0 .../Charts/{lineMarker.vue => LineMarker.vue} | 0 .../Charts/{mixChart.vue => MixChart.vue} | 0 .../{defaultOptions.js => default-options.js} | 0 src/components/MarkdownEditor/index.vue | 2 +- src/components/Pagination/index.vue | 2 +- .../{dropdownMenu.vue => DropdownMenu.vue} | 0 .../{editorImage.vue => EditorImage.vue} | 0 src/components/Tinymce/index.vue | 2 +- .../{singleImage.vue => SingleImage.vue} | 0 .../{singleImage2.vue => SingleImage2.vue} | 0 .../{singleImage3.vue => SingleImage3.vue} | 0 .../{el-dragDialog => el-drag-dialog}/drag.js | 0 .../index.js | 0 src/main.js | 2 +- src/router/index.js | 20 +++++----- src/router/modules/charts.js | 4 +- src/router/modules/components.js | 20 +++++----- src/router/modules/table.js | 8 ++-- src/utils/{errorLog.js => error-log.js} | 0 src/utils/{openWindow.js => open-window.js} | 0 src/utils/{scrollTo.js => scroll-to.js} | 0 src/views/charts/keyboard.vue | 2 +- src/views/charts/line.vue | 2 +- .../charts/{mixChart.vue => mix-chart.vue} | 2 +- .../{avatarUpload.vue => avatar-upload.vue} | 0 .../{backToTop.vue => back-to-top.vue} | 0 .../{countTo.vue => count-to.vue} | 0 .../{dndList.vue => dnd-list.vue} | 0 .../{dragDialog.vue => drag-dialog.vue} | 2 +- .../{dragKanban.vue => drag-kanban.vue} | 0 .../{dragSelect.vue => drag-select.vue} | 0 .../{jsonEditor.vue => json-editor.vue} | 0 src/views/components-demo/mixin.vue | 2 +- .../{splitpane.vue => split-pane.vue} | 0 .../admin/components/TransactionTable.vue | 2 +- src/views/documentation/index.vue | 2 +- .../components/ErrorTestA.vue} | 0 .../components/ErrorTestB.vue} | 0 src/views/{errorLog => error-log}/index.vue | 10 ++--- src/views/{errorPage => error-page}/401.vue | 0 src/views/{errorPage => error-page}/404.vue | 0 .../example/components/ArticleDetail.vue | 4 +- .../{exportExcel.vue => export-excel.vue} | 0 .../{mergeHeader.vue => merge-header.vue} | 0 .../{selectExcel.vue => select-excel.vue} | 0 .../{uploadExcel.vue => upload-excel.vue} | 0 src/views/guide/index.vue | 5 +-- src/views/guide/{defineSteps.js => steps.js} | 0 .../{authRedirect.vue => auth-redirect.vue} | 0 .../SocialSignin.vue} | 2 +- src/views/login/index.vue | 2 +- src/views/svg-icons/index.vue | 2 +- .../{requireIcons.js => require-icons.js} | 0 .../components/{tabPane.vue => TabPane.vue} | 0 src/views/tab/index.vue | 2 +- .../{complexTable.vue => complex-table.vue} | 0 .../table/{dragTable.vue => drag-table.vue} | 0 .../components/FixedThead.vue} | 0 .../components/UnfixedThead.vue} | 0 .../{dynamicTable => dynamic-table}/index.vue | 6 +-- ...ineEditTable.vue => inline-edit-table.vue} | 0 66 files changed, 74 insertions(+), 75 deletions(-) rename mock/{remoteSearch.js => remote-search.js} (100%) rename src/api/{remoteSearch.js => remote-search.js} (100%) rename src/components/Charts/{keyboard.vue => Keyboard.vue} (100%) rename src/components/Charts/{lineMarker.vue => LineMarker.vue} (100%) rename src/components/Charts/{mixChart.vue => MixChart.vue} (100%) rename src/components/MarkdownEditor/{defaultOptions.js => default-options.js} (100%) rename src/components/Share/{dropdownMenu.vue => DropdownMenu.vue} (100%) rename src/components/Tinymce/components/{editorImage.vue => EditorImage.vue} (100%) rename src/components/Upload/{singleImage.vue => SingleImage.vue} (100%) rename src/components/Upload/{singleImage2.vue => SingleImage2.vue} (100%) rename src/components/Upload/{singleImage3.vue => SingleImage3.vue} (100%) rename src/directive/{el-dragDialog => el-drag-dialog}/drag.js (100%) rename src/directive/{el-dragDialog => el-drag-dialog}/index.js (100%) rename src/utils/{errorLog.js => error-log.js} (100%) rename src/utils/{openWindow.js => open-window.js} (100%) rename src/utils/{scrollTo.js => scroll-to.js} (100%) rename src/views/charts/{mixChart.vue => mix-chart.vue} (86%) rename src/views/components-demo/{avatarUpload.vue => avatar-upload.vue} (100%) rename src/views/components-demo/{backToTop.vue => back-to-top.vue} (100%) rename src/views/components-demo/{countTo.vue => count-to.vue} (100%) rename src/views/components-demo/{dndList.vue => dnd-list.vue} (100%) rename src/views/components-demo/{dragDialog.vue => drag-dialog.vue} (95%) rename src/views/components-demo/{dragKanban.vue => drag-kanban.vue} (100%) rename src/views/components-demo/{dragSelect.vue => drag-select.vue} (100%) rename src/views/components-demo/{jsonEditor.vue => json-editor.vue} (100%) rename src/views/components-demo/{splitpane.vue => split-pane.vue} (100%) rename src/views/{errorLog/errorTestA.vue => error-log/components/ErrorTestA.vue} (100%) rename src/views/{errorLog/errorTestB.vue => error-log/components/ErrorTestB.vue} (100%) rename src/views/{errorLog => error-log}/index.vue (81%) rename src/views/{errorPage => error-page}/401.vue (100%) rename src/views/{errorPage => error-page}/404.vue (100%) rename src/views/excel/{exportExcel.vue => export-excel.vue} (100%) rename src/views/excel/{mergeHeader.vue => merge-header.vue} (100%) rename src/views/excel/{selectExcel.vue => select-excel.vue} (100%) rename src/views/excel/{uploadExcel.vue => upload-excel.vue} (100%) rename src/views/guide/{defineSteps.js => steps.js} (100%) rename src/views/login/{authRedirect.vue => auth-redirect.vue} (100%) rename src/views/login/{socialSignin.vue => components/SocialSignin.vue} (97%) rename src/views/svg-icons/{requireIcons.js => require-icons.js} (100%) rename src/views/tab/components/{tabPane.vue => TabPane.vue} (100%) rename src/views/table/{complexTable.vue => complex-table.vue} (100%) rename src/views/table/{dragTable.vue => drag-table.vue} (100%) rename src/views/table/{dynamicTable/fixedThead.vue => dynamic-table/components/FixedThead.vue} (100%) rename src/views/table/{dynamicTable/unfixedThead.vue => dynamic-table/components/UnfixedThead.vue} (100%) rename src/views/table/{dynamicTable => dynamic-table}/index.vue (70%) rename src/views/table/{inlineEditTable.vue => inline-edit-table.vue} (100%) diff --git a/mock/index.js b/mock/index.js index 08cdc471..6907e861 100644 --- a/mock/index.js +++ b/mock/index.js @@ -4,7 +4,7 @@ import { param2Obj } from '../src/utils' import user from './user' import role from './role' import article from './article' -import search from './remoteSearch' +import search from './remote-search' const mocks = [ ...user, diff --git a/mock/remoteSearch.js b/mock/remote-search.js similarity index 100% rename from mock/remoteSearch.js rename to mock/remote-search.js diff --git a/mock/role/routes.js b/mock/role/routes.js index 14413d48..62a09d01 100644 --- a/mock/role/routes.js +++ b/mock/role/routes.js @@ -19,17 +19,17 @@ export const constantRoutes = [ }, { path: '/auth-redirect', - component: 'views/login/authRedirect', + component: 'views/login/auth-redirect', hidden: true }, { path: '/404', - component: 'views/errorPage/404', + component: 'views/error-page/404', hidden: true }, { path: '/401', - component: 'views/errorPage/401', + component: 'views/error-page/401', hidden: true }, { @@ -150,19 +150,19 @@ export const asyncRoutes = [ }, { path: 'json-editor', - component: 'views/components-demo/jsonEditor', + component: 'views/components-demo/json-editor', name: 'JsonEditorDemo', meta: { title: 'jsonEditor' } }, { - path: 'splitpane', - component: 'views/components-demo/splitpane', + path: 'split-pane', + component: 'views/components-demo/split-pane', name: 'SplitpaneDemo', meta: { title: 'splitPane' } }, { path: 'avatar-upload', - component: 'views/components-demo/avatarUpload', + component: 'views/components-demo/avatar-upload', name: 'AvatarUploadDemo', meta: { title: 'avatarUpload' } }, @@ -180,7 +180,7 @@ export const asyncRoutes = [ }, { path: 'count-to', - component: 'views/components-demo/countTo', + component: 'views/components-demo/count-to', name: 'CountToDemo', meta: { title: 'countTo' } }, @@ -192,31 +192,31 @@ export const asyncRoutes = [ }, { path: 'back-to-top', - component: 'views/components-demo/backToTop', + component: 'views/components-demo/back-to-top', name: 'BackToTopDemo', meta: { title: 'backToTop' } }, { path: 'drag-dialog', - component: 'views/components-demo/dragDialog', + component: 'views/components-demo/drag-dialog', name: 'DragDialogDemo', meta: { title: 'dragDialog' } }, { path: 'drag-select', - component: 'views/components-demo/dragSelect', + component: 'views/components-demo/drag-select', name: 'DragSelectDemo', meta: { title: 'dragSelect' } }, { path: 'dnd-list', - component: 'views/components-demo/dndList', + component: 'views/components-demo/dnd-list', name: 'DndListDemo', meta: { title: 'dndList' } }, { path: 'drag-kanban', - component: 'views/components-demo/dragKanban', + component: 'views/components-demo/drag-kanban', name: 'DragKanbanDemo', meta: { title: 'dragKanban' } } @@ -370,13 +370,13 @@ export const asyncRoutes = [ children: [ { path: '401', - component: 'views/errorPage/401', + component: 'views/error-page/401', name: 'Page401', meta: { title: 'page401', noCache: true } }, { path: '404', - component: 'views/errorPage/404', + component: 'views/error-page/404', name: 'Page404', meta: { title: 'page404', noCache: true } } @@ -390,7 +390,7 @@ export const asyncRoutes = [ children: [ { path: 'log', - component: 'views/errorLog/index', + component: 'views/error-log/index', name: 'ErrorLog', meta: { title: 'errorLog', icon: 'bug' } } @@ -409,25 +409,25 @@ export const asyncRoutes = [ children: [ { path: 'export-excel', - component: 'views/excel/exportExcel', + component: 'views/excel/export-excel', name: 'ExportExcel', meta: { title: 'exportExcel' } }, { path: 'export-selected-excel', - component: 'views/excel/selectExcel', + component: 'views/excel/select-excel', name: 'SelectExcel', meta: { title: 'selectExcel' } }, { path: 'export-merge-header', - component: 'views/excel/mergeHeader', + component: 'views/excel/merge-header', name: 'MergeHeader', meta: { title: 'mergeHeader' } }, { path: 'upload-excel', - component: 'views/excel/uploadExcel', + component: 'views/excel/upload-excel', name: 'UploadExcel', meta: { title: 'uploadExcel' } } diff --git a/src/api/remoteSearch.js b/src/api/remote-search.js similarity index 100% rename from src/api/remoteSearch.js rename to src/api/remote-search.js diff --git a/src/components/Charts/keyboard.vue b/src/components/Charts/Keyboard.vue similarity index 100% rename from src/components/Charts/keyboard.vue rename to src/components/Charts/Keyboard.vue diff --git a/src/components/Charts/lineMarker.vue b/src/components/Charts/LineMarker.vue similarity index 100% rename from src/components/Charts/lineMarker.vue rename to src/components/Charts/LineMarker.vue diff --git a/src/components/Charts/mixChart.vue b/src/components/Charts/MixChart.vue similarity index 100% rename from src/components/Charts/mixChart.vue rename to src/components/Charts/MixChart.vue diff --git a/src/components/MarkdownEditor/defaultOptions.js b/src/components/MarkdownEditor/default-options.js similarity index 100% rename from src/components/MarkdownEditor/defaultOptions.js rename to src/components/MarkdownEditor/default-options.js diff --git a/src/components/MarkdownEditor/index.vue b/src/components/MarkdownEditor/index.vue index 9ed7a584..3d6794b5 100644 --- a/src/components/MarkdownEditor/index.vue +++ b/src/components/MarkdownEditor/index.vue @@ -9,7 +9,7 @@ import 'tui-editor/dist/tui-editor.css' // editor ui import 'tui-editor/dist/tui-editor-contents.css' // editor content import Editor from 'tui-editor' -import defaultOptions from './defaultOptions' +import defaultOptions from './default-options' export default { name: 'MarddownEditor', diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue index a4962964..c815e132 100644 --- a/src/components/Pagination/index.vue +++ b/src/components/Pagination/index.vue @@ -15,7 +15,7 @@ diff --git a/src/views/errorPage/401.vue b/src/views/error-page/401.vue similarity index 100% rename from src/views/errorPage/401.vue rename to src/views/error-page/401.vue diff --git a/src/views/errorPage/404.vue b/src/views/error-page/404.vue similarity index 100% rename from src/views/errorPage/404.vue rename to src/views/error-page/404.vue diff --git a/src/views/example/components/ArticleDetail.vue b/src/views/example/components/ArticleDetail.vue index 2213e927..58574ab0 100644 --- a/src/views/example/components/ArticleDetail.vue +++ b/src/views/example/components/ArticleDetail.vue @@ -76,12 +76,12 @@ diff --git a/src/views/table/inlineEditTable.vue b/src/views/table/inline-edit-table.vue similarity index 100% rename from src/views/table/inlineEditTable.vue rename to src/views/table/inline-edit-table.vue From 14580da5b31384f407f8d7db6f687081816907a1 Mon Sep 17 00:00:00 2001 From: linfei Date: Mon, 15 Apr 2019 10:31:06 +0800 Subject: [PATCH 21/32] perf[Breadcrumb]: revise the breadcrumb navigation of permission and zip (#1908) --- src/router/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/router/index.js b/src/router/index.js index 393e8e88..d04a64be 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -118,8 +118,9 @@ export const asyncRoutes = [ { path: '/permission', component: Layout, - redirect: '/permission/index', + redirect: '/permission/page', alwaysShow: true, // will always show the root menu + name: 'Permission', meta: { title: 'permission', icon: 'lock', @@ -301,6 +302,7 @@ export const asyncRoutes = [ component: Layout, redirect: '/zip/download', alwaysShow: true, + name: 'Zip', meta: { title: 'zip', icon: 'zip' }, children: [ { From 26d0f40df21fa5e5583a20cb3df14ae9d475bb3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E7=A9=BA?= Date: Mon, 15 Apr 2019 11:58:43 +0800 Subject: [PATCH 22/32] feature: change page title when route change (#1910) --- src/components/ThemePicker/index.vue | 14 ++++++++++++-- src/permission.js | 4 ++++ src/settings.js | 6 ++---- src/store/modules/settings.js | 6 ++++-- src/utils/get-page-title.js | 13 +++++++++++++ vue.config.js | 4 ++-- 6 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 src/utils/get-page-title.js diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue index 0a556248..90c03311 100644 --- a/src/components/ThemePicker/index.vue +++ b/src/components/ThemePicker/index.vue @@ -11,16 +11,26 @@ const version = require('element-ui/package.json').version // element-ui version from node_modules const ORIGINAL_THEME = '#409EFF' // default color -import defaultSettings from '@/settings' export default { data() { return { chalk: '', // content of theme-chalk css - theme: defaultSettings.theme + theme: '' + } + }, + computed: { + defaultTheme() { + return this.$store.state.settings.theme } }, watch: { + defaultTheme: { + handler: function(val, oldVal) { + this.theme = val + }, + immediate: true + }, async theme(val) { const oldVal = this.chalk ? this.theme : ORIGINAL_THEME if (typeof val !== 'string') return diff --git a/src/permission.js b/src/permission.js index 7cc2a5cf..750aeab6 100644 --- a/src/permission.js +++ b/src/permission.js @@ -4,6 +4,7 @@ import { Message } from 'element-ui' import NProgress from 'nprogress' // progress bar import 'nprogress/nprogress.css' // progress bar style import { getToken } from '@/utils/auth' // get token from cookie +import getPageTitle from '@/utils/get-page-title' NProgress.configure({ showSpinner: false }) // NProgress Configuration @@ -13,6 +14,9 @@ router.beforeEach(async(to, from, next) => { // start progress bar NProgress.start() + // set page title + document.title = getPageTitle(to.meta.title) + // determine whether the user has logged in const hasToken = getToken() diff --git a/src/settings.js b/src/settings.js index e7ad4e1d..1ebc7f29 100644 --- a/src/settings.js +++ b/src/settings.js @@ -1,7 +1,5 @@ -import variables from '@/styles/element-variables.scss' - -export default { - theme: variables.theme, +module.exports = { + title: 'Vue Element Admin', /** * @type {boolean} true | false diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js index 8522a5aa..e389af79 100644 --- a/src/store/modules/settings.js +++ b/src/store/modules/settings.js @@ -1,8 +1,10 @@ +import variables from '@/styles/element-variables.scss' import defaultSettings from '@/settings' -const { showSettings, tagsView, fixedHeader, sidebarLogo, theme } = defaultSettings + +const { showSettings, tagsView, fixedHeader, sidebarLogo } = defaultSettings const state = { - theme: theme, + theme: variables.theme, showSettings: showSettings, tagsView: tagsView, fixedHeader: fixedHeader, diff --git a/src/utils/get-page-title.js b/src/utils/get-page-title.js new file mode 100644 index 00000000..4b6604cd --- /dev/null +++ b/src/utils/get-page-title.js @@ -0,0 +1,13 @@ +import defaultSettings from '@/settings' +import i18n from '@/lang' + +const title = defaultSettings.title || 'Vue Element Admin' + +export default function getPageTitle(key) { + const hasKey = i18n.te(`route.${key}`) + if (hasKey) { + const pageName = i18n.t(`route.${key}`) + return `${pageName} - ${title}` + } + return `${title}` +} diff --git a/vue.config.js b/vue.config.js index cbd79510..0306b27c 100644 --- a/vue.config.js +++ b/vue.config.js @@ -1,12 +1,12 @@ 'use strict' const path = require('path') -const pkg = require('./package.json') +const defaultSettings = require('./src/settings.js') function resolve(dir) { return path.join(__dirname, dir) } -const name = pkg.name || 'vue-element-admin' // page title +const name = defaultSettings.title || 'vue Element Admin' // page title const port = 9527 // dev port // All configuration item explanations can be find in https://cli.vuejs.org/config/ From be7ec4c0ff8c462ab0e45e1bab640bd2e72767b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E8=A3=A4=E8=A1=A9?= Date: Tue, 16 Apr 2019 11:20:13 +0800 Subject: [PATCH 23/32] docs: improve code comments (#1911) --- mock/article.js | 2 +- src/components/BackToTop/index.vue | 7 +--- src/components/JsonEditor/index.vue | 4 +-- src/components/Kanban/index.vue | 1 + src/components/ThemePicker/index.vue | 1 - .../Tinymce/components/EditorImage.vue | 10 +++--- src/components/Upload/SingleImage.vue | 1 - src/directive/el-table/adaptive.js | 1 - src/directive/el-table/index.js | 1 - src/directive/permission/permission.js | 1 - src/filters/index.js | 2 +- src/lang/en.js | 3 ++ src/lang/es.js | 3 ++ src/lang/zh.js | 3 ++ src/main.js | 18 ++++++---- src/router/modules/components.js | 2 +- src/router/modules/nested.js | 2 +- src/router/modules/table.js | 2 +- src/store/modules/permission.js | 4 +-- src/styles/element-ui.scss | 2 +- src/styles/index.scss | 28 +++++---------- src/styles/sidebar.scss | 6 ++-- src/styles/transition.scss | 8 ++--- src/styles/variables.scss | 4 +-- src/utils/error-log.js | 4 +-- src/utils/request.js | 36 ++++++++++--------- src/views/components-demo/avatar-upload.vue | 4 +-- src/views/components-demo/back-to-top.vue | 8 ++--- src/views/components-demo/count-to.vue | 8 ++--- src/views/components-demo/dnd-list.vue | 4 +-- src/views/components-demo/dropzone.vue | 4 +-- src/views/components-demo/json-editor.vue | 4 +-- src/views/components-demo/markdown.vue | 4 +-- src/views/components-demo/split-pane.vue | 4 +-- src/views/components-demo/sticky.vue | 2 +- src/views/components-demo/tinymce.vue | 4 +-- src/views/error-log/index.vue | 4 +-- .../example/components/ArticleDetail.vue | 20 +++++------ .../example/components/Dropdown/Comment.vue | 6 ++-- .../example/components/Dropdown/Platform.vue | 2 +- .../example/components/Dropdown/SourceUrl.vue | 6 ++-- src/views/example/components/Warning.vue | 9 +++-- src/views/guide/index.vue | 4 +-- src/views/pdf/index.vue | 2 +- src/views/permission/directive.vue | 4 +-- src/views/svg-icons/index.vue | 4 +-- src/views/table/complex-table.vue | 6 ++-- src/views/theme/index.vue | 2 +- vue.config.js | 1 + 49 files changed, 134 insertions(+), 138 deletions(-) diff --git a/mock/article.js b/mock/article.js index 45b75296..bc236eb9 100644 --- a/mock/article.js +++ b/mock/article.js @@ -3,7 +3,7 @@ import Mock from 'mockjs' const List = [] const count = 100 -const baseContent = '

我是测试数据我是测试数据

' +const baseContent = '

I am testing data, I am testing data.

' const image_uri = 'https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3' for (let i = 0; i < count; i++) { diff --git a/src/components/BackToTop/index.vue b/src/components/BackToTop/index.vue index c094037f..36522f4a 100644 --- a/src/components/BackToTop/index.vue +++ b/src/components/BackToTop/index.vue @@ -1,12 +1,7 @@ diff --git a/src/components/JsonEditor/index.vue b/src/components/JsonEditor/index.vue index 81715f5d..07b282e4 100644 --- a/src/components/JsonEditor/index.vue +++ b/src/components/JsonEditor/index.vue @@ -25,8 +25,8 @@ export default { }, watch: { value(value) { - const editor_value = this.jsonEditor.getValue() - if (value !== editor_value) { + const editorValue = this.jsonEditor.getValue() + if (value !== editorValue) { this.jsonEditor.setValue(JSON.stringify(this.value, null, 2)) } } diff --git a/src/components/Kanban/index.vue b/src/components/Kanban/index.vue index c2cb4691..82f7dd7e 100644 --- a/src/components/Kanban/index.vue +++ b/src/components/Kanban/index.vue @@ -15,6 +15,7 @@ +