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 = '<p>我是测试数据我是测试数据</p><p><img src="https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943"></p>'
+const baseContent = '<p>I am testing data, I am testing data.</p><p><img src="https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943"></p>'
 const image_uri = 'https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3'
 
 for (let i = 0; i < count; i++) {
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..2d3613e7 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
   },
   {
@@ -119,7 +119,7 @@ export const asyncRoutes = [
     children: [
       {
         path: 'index',
-        component: 'views/svg-icons/index',
+        component: 'views/icons/index',
         name: 'Icons',
         meta: { title: 'icons', icon: 'icon', noCache: true }
       }
@@ -129,7 +129,7 @@ export const asyncRoutes = [
   {
     path: '/components',
     component: 'layout/Layout',
-    redirect: 'noredirect',
+    redirect: 'noRedirect',
     name: 'ComponentDemo',
     meta: {
       title: 'components',
@@ -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' }
       }
@@ -225,7 +225,7 @@ export const asyncRoutes = [
   {
     path: '/charts',
     component: 'layout/Layout',
-    redirect: 'noredirect',
+    redirect: 'noRedirect',
     name: 'Charts',
     meta: {
       title: 'charts',
@@ -361,7 +361,7 @@ export const asyncRoutes = [
   {
     path: '/error',
     component: 'layout/Layout',
-    redirect: 'noredirect',
+    redirect: 'noRedirect',
     name: 'ErrorPages',
     meta: {
       title: 'errorPages',
@@ -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 }
       }
@@ -386,11 +386,11 @@ export const asyncRoutes = [
   {
     path: '/error-log',
     component: 'layout/Layout',
-    redirect: 'noredirect',
+    redirect: 'noRedirect',
     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' }
       }
@@ -472,7 +472,7 @@ export const asyncRoutes = [
   {
     path: '/theme',
     component: 'layout/Layout',
-    redirect: 'noredirect',
+    redirect: 'noRedirect',
     children: [
       {
         path: 'index',
@@ -486,7 +486,7 @@ export const asyncRoutes = [
   {
     path: '/clipboard',
     component: 'layout/Layout',
-    redirect: 'noredirect',
+    redirect: 'noRedirect',
     children: [
       {
         path: 'index',
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/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 @@
 <template>
   <transition :name="transitionName">
     <div v-show="visible" :style="customStyle" class="back-to-ceiling" @click="backToTop">
-      <svg width="16" height="16" viewBox="0 0 17 17" xmlns="http://www.w3.org/2000/svg" class="Icon Icon--backToTopArrow" aria-hidden="true" style="height: 16px; width: 16px;">
-        <title>回到顶部</title>
-        <g>
-          <path d="M12.036 15.59c0 .55-.453.995-.997.995H5.032c-.55 0-.997-.445-.997-.996V8.584H1.03c-1.1 0-1.36-.633-.578-1.416L7.33.29c.39-.39 1.026-.385 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.004z" fill-rule="evenodd" />
-        </g>
-      </svg>
+      <svg width="16" height="16" viewBox="0 0 17 17" xmlns="http://www.w3.org/2000/svg" class="Icon Icon--backToTopArrow" aria-hidden="true" style="height:16px;width:16px"><path d="M12.036 15.59a1 1 0 0 1-.997.995H5.032a.996.996 0 0 1-.997-.996V8.584H1.03c-1.1 0-1.36-.633-.578-1.416L7.33.29a1.003 1.003 0 0 1 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.004z" /></svg>
     </div>
   </transition>
 </template>
diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue
index ff93ff45..b89d8da6 100644
--- a/src/components/Breadcrumb/index.vue
+++ b/src/components/Breadcrumb/index.vue
@@ -2,7 +2,7 @@
   <el-breadcrumb class="app-breadcrumb" separator="/">
     <transition-group name="breadcrumb">
       <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
-        <span v-if="item.redirect==='noredirect'||index==levelList.length-1" class="no-redirect">{{
+        <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{
           generateTitle(item.meta.title) }}</span>
         <a v-else @click.prevent="handleLink(item)">{{ generateTitle(item.meta.title) }}</a>
       </el-breadcrumb-item>
@@ -31,15 +31,23 @@ export default {
   methods: {
     generateTitle,
     getBreadcrumb() {
-      let matched = this.$route.matched.filter(item => item.name)
-
+      // only show routes with meta.title
+      let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
       const first = matched[0]
-      if (first && first.name.trim().toLocaleLowerCase() !== 'Dashboard'.toLocaleLowerCase()) {
+
+      if (!this.isDashboard(first)) {
         matched = [{ path: '/dashboard', meta: { title: 'dashboard' }}].concat(matched)
       }
 
       this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
     },
+    isDashboard(route) {
+      const name = route && route.name
+      if (!name) {
+        return false
+      }
+      return name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase()
+    },
     pathCompile(path) {
       // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
       const { params } = this.$route
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/HeaderSearch/index.vue b/src/components/HeaderSearch/index.vue
index 6668ad5c..90eea067 100644
--- a/src/components/HeaderSearch/index.vue
+++ b/src/components/HeaderSearch/index.vue
@@ -121,7 +121,7 @@ export default {
 
           data.title = [...data.title, i18ntitle]
 
-          if (router.redirect !== 'noredirect') {
+          if (router.redirect !== 'noRedirect') {
             // only push the routes with title
             // special case: need to exclude parent router without redirect
             res.push(data)
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 @@
     </draggable>
   </div>
 </template>
+
 <script>
 import draggable from 'vuedraggable'
 
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 @@
 </template>
 
 <script>
-import { scrollTo } from '@/utils/scrollTo'
+import { scrollTo } from '@/utils/scroll-to'
 
 export default {
   name: 'Pagination',
diff --git a/src/components/Share/dropdownMenu.vue b/src/components/Share/DropdownMenu.vue
similarity index 100%
rename from src/components/Share/dropdownMenu.vue
rename to src/components/Share/DropdownMenu.vue
diff --git a/src/components/ThemePicker/index.vue b/src/components/ThemePicker/index.vue
index 0a556248..3879c5ad 100644
--- a/src/components/ThemePicker/index.vue
+++ b/src/components/ThemePicker/index.vue
@@ -8,19 +8,28 @@
 </template>
 
 <script>
-
 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/components/Tinymce/components/editorImage.vue b/src/components/Tinymce/components/EditorImage.vue
similarity index 92%
rename from src/components/Tinymce/components/editorImage.vue
rename to src/components/Tinymce/components/EditorImage.vue
index b3a4a2be..d4a98e84 100644
--- a/src/components/Tinymce/components/editorImage.vue
+++ b/src/components/Tinymce/components/EditorImage.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="upload-container">
     <el-button :style="{background:color,borderColor:color}" icon="el-icon-upload" size="mini" type="primary" @click=" dialogVisible=true">
-      上传图片
+      upload
     </el-button>
     <el-dialog :visible.sync="dialogVisible">
       <el-upload
@@ -16,14 +16,14 @@
         list-type="picture-card"
       >
         <el-button size="small" type="primary">
-          点击上传
+          Click upload
         </el-button>
       </el-upload>
       <el-button @click="dialogVisible = false">
-        取 消
+        Cancel
       </el-button>
       <el-button type="primary" @click="handleSubmit">
-        确 定
+        Confirm
       </el-button>
     </el-dialog>
   </div>
@@ -54,7 +54,7 @@ export default {
     handleSubmit() {
       const arr = Object.keys(this.listObj).map(v => this.listObj[v])
       if (!this.checkAllSuccess()) {
-        this.$message('请等待所有图片上传成功 或 出现了网络问题,请刷新页面重新上传!')
+        this.$message('Please wait for all images to be uploaded successfully. If there is a network problem, please refresh the page and upload again!')
         return
       }
       this.$emit('successCBK', arr)
diff --git a/src/components/Tinymce/index.vue b/src/components/Tinymce/index.vue
index 3d6dba2b..a05c3b9c 100644
--- a/src/components/Tinymce/index.vue
+++ b/src/components/Tinymce/index.vue
@@ -8,7 +8,7 @@
 </template>
 
 <script>
-import editorImage from './components/editorImage'
+import editorImage from './components/EditorImage'
 import plugins from './plugins'
 import toolbar from './toolbar'
 
diff --git a/src/components/Upload/singleImage.vue b/src/components/Upload/SingleImage.vue
similarity index 99%
rename from src/components/Upload/singleImage.vue
rename to src/components/Upload/SingleImage.vue
index ecec20a9..d16bbf37 100644
--- a/src/components/Upload/singleImage.vue
+++ b/src/components/Upload/SingleImage.vue
@@ -26,7 +26,6 @@
 </template>
 
 <script>
-// 预览效果见付费文章
 import { getToken } from '@/api/qiniu'
 
 export default {
diff --git a/src/components/Upload/singleImage2.vue b/src/components/Upload/SingleImage2.vue
similarity index 100%
rename from src/components/Upload/singleImage2.vue
rename to src/components/Upload/SingleImage2.vue
diff --git a/src/components/Upload/singleImage3.vue b/src/components/Upload/SingleImage3.vue
similarity index 100%
rename from src/components/Upload/singleImage3.vue
rename to src/components/Upload/SingleImage3.vue
diff --git a/src/directive/el-dragDialog/drag.js b/src/directive/el-drag-dialog/drag.js
similarity index 100%
rename from src/directive/el-dragDialog/drag.js
rename to src/directive/el-drag-dialog/drag.js
diff --git a/src/directive/el-dragDialog/index.js b/src/directive/el-drag-dialog/index.js
similarity index 100%
rename from src/directive/el-dragDialog/index.js
rename to src/directive/el-drag-dialog/index.js
diff --git a/src/directive/el-table/adaptive.js b/src/directive/el-table/adaptive.js
index 3fa29c91..d229e9fd 100644
--- a/src/directive/el-table/adaptive.js
+++ b/src/directive/el-table/adaptive.js
@@ -1,11 +1,10 @@
-
 import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event'
 
 /**
  * How to use
  * <el-table height="100px" v-el-height-adaptive-table="{bottomOffset: 30}">...</el-table>
  * el-table height is must be set
- *  bottomOffset: 30(default)   // The height of the table from the bottom of the page.
+ * bottomOffset: 30(default)   // The height of the table from the bottom of the page.
  */
 
 const doResize = (el, binding, vnode) => {
@@ -30,13 +29,13 @@ export default {
     el.resizeListener = () => {
       doResize(el, binding, vnode)
     }
-
-    addResizeListener(el, el.resizeListener)
+    // parameter 1 is must be "Element" type
+    addResizeListener(window.document.body, el.resizeListener)
   },
   inserted(el, binding, vnode) {
     doResize(el, binding, vnode)
   },
   unbind(el) {
-    removeResizeListener(el, el.resizeListener)
+    removeResizeListener(window.document.body, el.resizeListener)
   }
 }
diff --git a/src/directive/el-table/index.js b/src/directive/el-table/index.js
index d4cf406d..d3d45150 100644
--- a/src/directive/el-table/index.js
+++ b/src/directive/el-table/index.js
@@ -1,4 +1,3 @@
-
 import adaptive from './adaptive'
 
 const install = function(Vue) {
diff --git a/src/directive/permission/permission.js b/src/directive/permission/permission.js
index 1fc8f136..b27f24da 100644
--- a/src/directive/permission/permission.js
+++ b/src/directive/permission/permission.js
@@ -1,4 +1,3 @@
-
 import store from '@/store'
 
 export default {
diff --git a/src/filters/index.js b/src/filters/index.js
index 86e768d8..051000c1 100644
--- a/src/filters/index.js
+++ b/src/filters/index.js
@@ -1,4 +1,4 @@
-// set function parseTime,formatTime to filter
+// import parseTime, formatTime and set to filter
 export { parseTime, formatTime } from '@/utils'
 
 /**
diff --git a/src/lang/en.js b/src/lang/en.js
index 490ac206..426d3d26 100644
--- a/src/lang/en.js
+++ b/src/lang/en.js
@@ -132,6 +132,9 @@ export default {
     cancel: 'Cancel',
     confirm: 'Confirm'
   },
+  example: {
+    warning: 'Creating and editing pages cannot be cached by keep-alive because keep-alive include does not currently support caching based on routes, so it is currently cached based on component name. If you want to achieve a similar caching effect, you can use a browser caching scheme such as localStorage. Or do not use keep-alive include to cache all pages directly. See details'
+  },
   errorLog: {
     tips: 'Please click the bug icon in the upper right corner',
     description: 'Now the management system are basically the form of the spa, it enhances the user experience, but it also increases the possibility of page problems, a small negligence may lead to the entire page deadlock. Fortunately Vue provides a way to catch handling exceptions, where you can handle errors or report exceptions.',
diff --git a/src/lang/es.js b/src/lang/es.js
index a8f69831..50b96037 100755
--- a/src/lang/es.js
+++ b/src/lang/es.js
@@ -132,6 +132,9 @@ export default {
     cancel: 'Cancelar',
     confirm: 'Confirmar'
   },
+  example: {
+    warning: 'Creating and editing pages cannot be cached by keep-alive because keep-alive include does not currently support caching based on routes, so it is currently cached based on component name. If you want to achieve a similar caching effect, you can use a browser caching scheme such as localStorage. Or do not use keep-alive include to cache all pages directly. See details'
+  },
   errorLog: {
     tips: 'Please click the bug icon in the upper right corner',
     description: 'Now the management system are basically the form of the spa, it enhances the user experience, but it also increases the possibility of page problems, a small negligence may lead to the entire page deadlock. Fortunately Vue provides a way to catch handling exceptions, where you can handle errors or report exceptions.',
diff --git a/src/lang/zh.js b/src/lang/zh.js
index 4394cc70..2055c5ab 100644
--- a/src/lang/zh.js
+++ b/src/lang/zh.js
@@ -132,6 +132,9 @@ export default {
     cancel: '取 消',
     confirm: '确 定'
   },
+  example: {
+    warning: '创建和编辑页面是不能被 keep-alive 缓存的,因为keep-alive 的 include 目前不支持根据路由来缓存,所以目前都是基于 component name 来进行缓存的。如果你想类似的实现缓存效果,可以使用 localStorage 等浏览器缓存方案。或者不要使用 keep-alive 的 include,直接缓存所有页面。详情见'
+  },
   errorLog: {
     tips: '请点击右上角bug小图标',
     description: '现在的管理后台基本都是spa的形式了,它增强了用户体验,但同时也会增加页面出问题的可能性,可能一个小小的疏忽就导致整个页面的死锁。好在 Vue 官网提供了一个方法来捕获处理异常,你可以在其中进行错误处理或者异常上报。',
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
index 773cd5c8..fb014a23 100644
--- a/src/layout/components/Sidebar/index.vue
+++ b/src/layout/components/Sidebar/index.vue
@@ -7,6 +7,7 @@
         :collapse="isCollapse"
         :background-color="variables.menuBg"
         :text-color="variables.menuText"
+        :unique-opened="false"
         :active-text-color="variables.menuActiveText"
         :collapse-transition="false"
         mode="vertical"
diff --git a/src/main.js b/src/main.js
index 375a6b6e..41298d0c 100644
--- a/src/main.js
+++ b/src/main.js
@@ -2,7 +2,7 @@ import Vue from 'vue'
 
 import Cookies from 'js-cookie'
 
-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 './styles/element-variables.scss'
@@ -13,24 +13,28 @@ import App from './App'
 import store from './store'
 import router from './router'
 
-import i18n from './lang' // Internationalization
+import i18n from './lang' // internationalization
 import './icons' // icon
 import './permission' // permission control
-import './utils/errorLog' // error log
+import './utils/error-log' // error log
 
 import * as filters from './filters' // global filters
 
-import { mockXHR } from '../mock' // simulation data
-
-// mock api in github pages site build
-if (process.env.NODE_ENV === 'production') { mockXHR() }
+/**
+ * If you don't want to use mock-server
+ * you want to use mockjs for request interception
+ * you can execute:
+ *
+ * import { mockXHR } from '../mock'
+ * mockXHR()
+ */
 
 Vue.use(Element, {
   size: Cookies.get('size') || 'medium', // set element-ui default size
   i18n: (key, value) => i18n.t(key, value)
 })
 
-// register global utility filters.
+// register global utility filters
 Object.keys(filters).forEach(key => {
   Vue.filter(key, filters[key])
 })
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/router/index.js b/src/router/index.js
index c9117e5b..34afd5c5 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -20,7 +20,7 @@ import nestedRouter from './modules/nested'
  * alwaysShow: true               if set true, will always show the root menu
  *                                if not set alwaysShow, when item has more than one children route,
  *                                it will becomes nested mode, otherwise not show the root menu
- * redirect: noredirect           if `redirect:noredirect` will no redirect in the breadcrumb
+ * redirect: noRedirect           if set noRedirect will no redirect in the breadcrumb
  * name:'router-name'             the name is used by <keep-alive> (must set!!!)
  * meta : {
     roles: ['admin','editor']    control the page roles (you can set multiple roles)
@@ -57,17 +57,17 @@ export const constantRoutes = [
   },
   {
     path: '/auth-redirect',
-    component: () => import('@/views/login/authRedirect'),
+    component: () => import('@/views/login/auth-redirect'),
     hidden: true
   },
   {
     path: '/404',
-    component: () => import('@/views/errorPage/404'),
+    component: () => import('@/views/error-page/404'),
     hidden: true
   },
   {
     path: '/401',
-    component: () => import('@/views/errorPage/401'),
+    component: () => import('@/views/error-page/401'),
     hidden: true
   },
   {
@@ -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',
@@ -162,7 +163,7 @@ export const asyncRoutes = [
     children: [
       {
         path: 'index',
-        component: () => import('@/views/svg-icons/index'),
+        component: () => import('@/views/icons/index'),
         name: 'Icons',
         meta: { title: 'icons', icon: 'icon', noCache: true }
       }
@@ -223,7 +224,7 @@ export const asyncRoutes = [
   {
     path: '/error',
     component: Layout,
-    redirect: 'noredirect',
+    redirect: 'noRedirect',
     name: 'ErrorPages',
     meta: {
       title: 'errorPages',
@@ -232,13 +233,13 @@ export const asyncRoutes = [
     children: [
       {
         path: '401',
-        component: () => import('@/views/errorPage/401'),
+        component: () => import('@/views/error-page/401'),
         name: 'Page401',
         meta: { title: 'page401', noCache: true }
       },
       {
         path: '404',
-        component: () => import('@/views/errorPage/404'),
+        component: () => import('@/views/error-page/404'),
         name: 'Page404',
         meta: { title: 'page404', noCache: true }
       }
@@ -248,11 +249,10 @@ export const asyncRoutes = [
   {
     path: '/error-log',
     component: Layout,
-    redirect: 'noredirect',
     children: [
       {
         path: 'log',
-        component: () => import('@/views/errorLog/index'),
+        component: () => import('@/views/error-log/index'),
         name: 'ErrorLog',
         meta: { title: 'errorLog', icon: 'bug' }
       }
@@ -271,25 +271,25 @@ export const asyncRoutes = [
     children: [
       {
         path: 'export-excel',
-        component: () => import('@/views/excel/exportExcel'),
+        component: () => import('@/views/excel/export-excel'),
         name: 'ExportExcel',
         meta: { title: 'exportExcel' }
       },
       {
         path: 'export-selected-excel',
-        component: () => import('@/views/excel/selectExcel'),
+        component: () => import('@/views/excel/select-excel'),
         name: 'SelectExcel',
         meta: { title: 'selectExcel' }
       },
       {
         path: 'export-merge-header',
-        component: () => import('@/views/excel/mergeHeader'),
+        component: () => import('@/views/excel/merge-header'),
         name: 'MergeHeader',
         meta: { title: 'mergeHeader' }
       },
       {
         path: 'upload-excel',
-        component: () => import('@/views/excel/uploadExcel'),
+        component: () => import('@/views/excel/upload-excel'),
         name: 'UploadExcel',
         meta: { title: 'uploadExcel' }
       }
@@ -301,6 +301,7 @@ export const asyncRoutes = [
     component: Layout,
     redirect: '/zip/download',
     alwaysShow: true,
+    name: 'Zip',
     meta: { title: 'zip', icon: 'zip' },
     children: [
       {
@@ -334,7 +335,6 @@ export const asyncRoutes = [
   {
     path: '/theme',
     component: Layout,
-    redirect: 'noredirect',
     children: [
       {
         path: 'index',
@@ -348,7 +348,6 @@ export const asyncRoutes = [
   {
     path: '/clipboard',
     component: Layout,
-    redirect: 'noredirect',
     children: [
       {
         path: 'index',
diff --git a/src/router/modules/charts.js b/src/router/modules/charts.js
index 7293490e..59ebf188 100644
--- a/src/router/modules/charts.js
+++ b/src/router/modules/charts.js
@@ -5,7 +5,7 @@ import Layout from '@/layout'
 const chartsRouter = {
   path: '/charts',
   component: Layout,
-  redirect: 'noredirect',
+  redirect: 'noRedirect',
   name: 'Charts',
   meta: {
     title: 'charts',
@@ -25,8 +25,8 @@ const chartsRouter = {
       meta: { title: 'lineChart', noCache: true }
     },
     {
-      path: 'mixchart',
-      component: () => import('@/views/charts/mixChart'),
+      path: 'mix-chart',
+      component: () => import('@/views/charts/mix-chart'),
       name: 'MixChart',
       meta: { title: 'mixChart', noCache: true }
     }
diff --git a/src/router/modules/components.js b/src/router/modules/components.js
index 889c371d..b7407e25 100644
--- a/src/router/modules/components.js
+++ b/src/router/modules/components.js
@@ -1,11 +1,11 @@
-/** When your routing table is too long, you can split it into small modules**/
+/** When your routing table is too long, you can split it into small modules **/
 
 import Layout from '@/layout'
 
 const componentsRouter = {
   path: '/components',
   component: Layout,
-  redirect: 'noredirect',
+  redirect: 'noRedirect',
   name: 'ComponentDemo',
   meta: {
     title: 'components',
@@ -26,19 +26,19 @@ const componentsRouter = {
     },
     {
       path: 'json-editor',
-      component: () => import('@/views/components-demo/jsonEditor'),
+      component: () => import('@/views/components-demo/json-editor'),
       name: 'JsonEditorDemo',
       meta: { title: 'jsonEditor' }
     },
     {
-      path: 'splitpane',
-      component: () => import('@/views/components-demo/splitpane'),
+      path: 'split-pane',
+      component: () => import('@/views/components-demo/split-pane'),
       name: 'SplitpaneDemo',
       meta: { title: 'splitPane' }
     },
     {
       path: 'avatar-upload',
-      component: () => import('@/views/components-demo/avatarUpload'),
+      component: () => import('@/views/components-demo/avatar-upload'),
       name: 'AvatarUploadDemo',
       meta: { title: 'avatarUpload' }
     },
@@ -56,7 +56,7 @@ const componentsRouter = {
     },
     {
       path: 'count-to',
-      component: () => import('@/views/components-demo/countTo'),
+      component: () => import('@/views/components-demo/count-to'),
       name: 'CountToDemo',
       meta: { title: 'countTo' }
     },
@@ -68,31 +68,31 @@ const componentsRouter = {
     },
     {
       path: 'back-to-top',
-      component: () => import('@/views/components-demo/backToTop'),
+      component: () => import('@/views/components-demo/back-to-top'),
       name: 'BackToTopDemo',
       meta: { title: 'backToTop' }
     },
     {
       path: 'drag-dialog',
-      component: () => import('@/views/components-demo/dragDialog'),
+      component: () => import('@/views/components-demo/drag-dialog'),
       name: 'DragDialogDemo',
       meta: { title: 'dragDialog' }
     },
     {
       path: 'drag-select',
-      component: () => import('@/views/components-demo/dragSelect'),
+      component: () => import('@/views/components-demo/drag-select'),
       name: 'DragSelectDemo',
       meta: { title: 'dragSelect' }
     },
     {
       path: 'dnd-list',
-      component: () => import('@/views/components-demo/dndList'),
+      component: () => import('@/views/components-demo/dnd-list'),
       name: 'DndListDemo',
       meta: { title: 'dndList' }
     },
     {
       path: 'drag-kanban',
-      component: () => import('@/views/components-demo/dragKanban'),
+      component: () => import('@/views/components-demo/drag-kanban'),
       name: 'DragKanbanDemo',
       meta: { title: 'dragKanban' }
     }
diff --git a/src/router/modules/nested.js b/src/router/modules/nested.js
index ee165c8c..c52664c9 100644
--- a/src/router/modules/nested.js
+++ b/src/router/modules/nested.js
@@ -1,4 +1,4 @@
-/** When your routing table is too long, you can split it into small modules**/
+/** When your routing table is too long, you can split it into small modules **/
 
 import Layout from '@/layout'
 
diff --git a/src/router/modules/table.js b/src/router/modules/table.js
index b54fb42d..d8e50302 100644
--- a/src/router/modules/table.js
+++ b/src/router/modules/table.js
@@ -1,4 +1,4 @@
-/** When your routing table is too long, you can split it into small modules**/
+/** When your routing table is too long, you can split it into small modules **/
 
 import Layout from '@/layout'
 
@@ -14,25 +14,25 @@ const tableRouter = {
   children: [
     {
       path: 'dynamic-table',
-      component: () => import('@/views/table/dynamicTable/index'),
+      component: () => import('@/views/table/dynamic-table/index'),
       name: 'DynamicTable',
       meta: { title: 'dynamicTable' }
     },
     {
       path: 'drag-table',
-      component: () => import('@/views/table/dragTable'),
+      component: () => import('@/views/table/drag-table'),
       name: 'DragTable',
       meta: { title: 'dragTable' }
     },
     {
       path: 'inline-edit-table',
-      component: () => import('@/views/table/inlineEditTable'),
+      component: () => import('@/views/table/inline-edit-table'),
       name: 'InlineEditTable',
       meta: { title: 'inlineEditTable' }
     },
     {
       path: 'complex-table',
-      component: () => import('@/views/table/complexTable'),
+      component: () => import('@/views/table/complex-table'),
       name: 'ComplexTable',
       meta: { title: 'complexTable' }
     }
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/permission.js b/src/store/modules/permission.js
index 820ca46b..bd35252c 100644
--- a/src/store/modules/permission.js
+++ b/src/store/modules/permission.js
@@ -1,7 +1,7 @@
 import { asyncRoutes, constantRoutes } from '@/router'
 
 /**
- * 通过meta.role判断是否与当前用户权限匹配
+ * Use meta.role to determine if the current user has permission
  * @param roles
  * @param route
  */
@@ -14,7 +14,7 @@ function hasPermission(roles, route) {
 }
 
 /**
- * 递归过滤异步路由表,返回符合用户角色权限的路由表
+ * Filter asynchronous routing tables by recursion
  * @param routes asyncRoutes
  * @param roles
  */
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/styles/element-ui.scss b/src/styles/element-ui.scss
index 494dcfa4..9581d56a 100644
--- a/src/styles/element-ui.scss
+++ b/src/styles/element-ui.scss
@@ -1,4 +1,4 @@
-//覆盖一些element-ui样式
+// cover some element-ui styles
 
 .el-breadcrumb__inner,
 .el-breadcrumb__inner a {
@@ -46,7 +46,7 @@
   }
 }
 
-//暂时性解决dialog 问题 https://github.com/ElemeFE/element/issues/2461
+// to fixed https://github.com/ElemeFE/element/issues/2461
 .el-dialog {
   transform: none;
   left: 0;
@@ -54,18 +54,7 @@
   margin: 0 auto;
 }
 
-//文章页textarea修改样式
-.article-textarea {
-  textarea {
-    padding-right: 40px;
-    resize: none;
-    border: none;
-    border-radius: 0px;
-    border-bottom: 1px solid #bfcbd9;
-  }
-}
-
-//element ui upload
+// refine element ui upload
 .upload-container {
   .el-upload {
     width: 100%;
@@ -77,9 +66,14 @@
   }
 }
 
-//dropdown
+// dropdown
 .el-dropdown-menu {
   a {
     display: block
   }
 }
+
+// fix date-picker ui bug in filter-item
+.el-range-editor.el-input__inner {
+  display: inline-flex !important;
+}
diff --git a/src/styles/index.scss b/src/styles/index.scss
index 93f2157e..96095ef6 100644
--- a/src/styles/index.scss
+++ b/src/styles/index.scss
@@ -96,14 +96,18 @@ div:focus {
   }
 }
 
-code {
+aside {
   background: #eef1f6;
-  padding: 15px 16px;
+  padding: 8px 24px;
   margin-bottom: 20px;
+  border-radius: 2px;
   display: block;
-  line-height: 36px;
-  font-size: 15px;
-  font-family: "Source Sans Pro", "Helvetica Neue", Arial, sans-serif;
+  line-height: 32px;
+  font-size: 16px;
+  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+  color: #2c3e50;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
 
   a {
     color: #337ab7;
@@ -115,20 +119,6 @@ code {
   }
 }
 
-.warn-content {
-  background: rgba(66, 185, 131, .1);
-  border-radius: 2px;
-  padding: 16px;
-  padding: 1rem;
-  line-height: 1.6rem;
-  word-spacing: .05rem;
-
-  a {
-    color: #42b983;
-    font-weight: 600;
-  }
-}
-
 //main-container全局样式
 .app-container {
   padding: 20px;
diff --git a/src/styles/sidebar.scss b/src/styles/sidebar.scss
index 525a65b9..e55f8656 100644
--- a/src/styles/sidebar.scss
+++ b/src/styles/sidebar.scss
@@ -1,6 +1,5 @@
 #app {
 
-  // 主体区域 Main container
   .main-container {
     min-height: 100%;
     transition: margin-left .28s;
@@ -8,7 +7,6 @@
     position: relative;
   }
 
-  // 侧边栏 Sidebar container
   .sidebar-container {
     transition: width 0.28s;
     width: $sideBarWidth !important;
@@ -22,7 +20,7 @@
     z-index: 1001;
     overflow: hidden;
 
-    //reset element-ui css
+    // reset element-ui css
     .horizontal-collapse-transition {
       transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
     }
@@ -149,7 +147,7 @@
     min-width: $sideBarWidth !important;
   }
 
-  // 适配移动端, Mobile responsive
+  // mobile responsive
   .mobile {
     .main-container {
       margin-left: 0px;
diff --git a/src/styles/transition.scss b/src/styles/transition.scss
index 7b5e4bfd..4cb27cc8 100644
--- a/src/styles/transition.scss
+++ b/src/styles/transition.scss
@@ -1,6 +1,6 @@
-//global transition css
+// global transition css
 
-/*fade*/
+/* fade */
 .fade-enter-active,
 .fade-leave-active {
   transition: opacity 0.28s;
@@ -11,7 +11,7 @@
   opacity: 0;
 }
 
-/*fade-transform*/
+/* fade-transform */
 .fade-transform-leave-active,
 .fade-transform-enter-active {
   transition: all .5s;
@@ -27,7 +27,7 @@
   transform: translateX(30px);
 }
 
-/*breadcrumb transition*/
+/* breadcrumb transition */
 .breadcrumb-enter-active,
 .breadcrumb-leave-active {
   transition: all .5s;
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index 98d7b672..a19c27c1 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -8,10 +8,10 @@ $tiffany: #4AB7BD;
 $yellow:#FEC171;
 $panGreen: #30B08F;
 
-//sidebar
+// sidebar
 $menuText:#bfcbd9;
 $menuActiveText:#409EFF;
-$subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951
+$subMenuActiveText:#f4f4f5; // https://github.com/ElemeFE/element/issues/12951
 
 $menuBg:#304156;
 $menuHover:#263445;
diff --git a/src/utils/errorLog.js b/src/utils/error-log.js
similarity index 91%
rename from src/utils/errorLog.js
rename to src/utils/error-log.js
index c508c789..a7f5b55f 100644
--- a/src/utils/errorLog.js
+++ b/src/utils/error-log.js
@@ -4,10 +4,10 @@ import { isString, isArray } from '@/utils/validate'
 import settings from '@/settings'
 
 // you can set in settings.js
-// errorLog:'production' | ['production','development']
+// errorLog:'production' | ['production', 'development']
 const { errorLog: needErrorLog } = settings
 
-function checkNeed(arg) {
+function checkNeed() {
   const env = process.env.NODE_ENV
   if (isString(needErrorLog)) {
     return env === needErrorLog
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/src/utils/openWindow.js b/src/utils/open-window.js
similarity index 100%
rename from src/utils/openWindow.js
rename to src/utils/open-window.js
diff --git a/src/utils/request.js b/src/utils/request.js
index d2422c46..d3c25c00 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -5,23 +5,25 @@ import { getToken } from '@/utils/auth'
 
 // create an axios instance
 const service = axios.create({
-  baseURL: process.env.VUE_APP_BASE_API, // api 的 base_url
-  withCredentials: true, // 跨域请求时发送 cookies
+  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
+  withCredentials: true, // send cookies when cross-domain requests
   timeout: 5000 // request timeout
 })
 
 // request interceptor
 service.interceptors.request.use(
   config => {
-    // Do something before request is sent
+    // do something before request is sent
+
     if (store.getters.token) {
-      // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
+      // let each request carry token --['X-Token'] as a custom key.
+      // please modify it according to the actual situation.
       config.headers['X-Token'] = getToken()
     }
     return config
   },
   error => {
-    // Do something with request error
+    // do something with request error
     console.log(error) // for debug
     return Promise.reject(error)
   }
@@ -33,31 +35,33 @@ service.interceptors.response.use(
    * If you want to get information such as headers or status
    * Please return  response => response
   */
+
   /**
-   * 下面的注释为通过在response里,自定义code来标示请求状态
-   * 当code返回如下情况则说明权限有问题,登出并返回到登录页
-   * 如想通过 XMLHttpRequest 来状态码标识 逻辑可写在下面error中
-   * 以下代码均为样例,请结合自生需求加以修改,若不需要,则可删除
+   * Determine the request status by custom code
+   * Here is just an example
+   * You can also judge the status by HTTP Status Code.
    */
   response => {
     const res = response.data
+
+    // if the custom code is not 20000, it is judged as an error.
     if (res.code !== 20000) {
       Message({
         message: res.message || 'error',
         type: 'error',
         duration: 5 * 1000
       })
-      // 50008:非法的token; 50012:其他客户端登录了;  50014:Token 过期了;
+
+      // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
       if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
-        // 请自行在引入 MessageBox
-        // import { Message, MessageBox } from 'element-ui'
-        MessageBox.confirm('你已被登出,可以取消继续留在该页面,或者重新登录', '确定登出', {
-          confirmButtonText: '重新登录',
-          cancelButtonText: '取消',
+        // to re-login
+        MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
+          confirmButtonText: 'Re-Login',
+          cancelButtonText: 'Cancel',
           type: 'warning'
         }).then(() => {
           store.dispatch('user/resetToken').then(() => {
-            location.reload() // 为了重新实例化vue-router对象 避免bug
+            location.reload()
           })
         })
       }
diff --git a/src/utils/scrollTo.js b/src/utils/scroll-to.js
similarity index 100%
rename from src/utils/scrollTo.js
rename to src/utils/scroll-to.js
diff --git a/src/views/charts/keyboard.vue b/src/views/charts/keyboard.vue
index 3c158fcc..917f8eeb 100644
--- a/src/views/charts/keyboard.vue
+++ b/src/views/charts/keyboard.vue
@@ -5,7 +5,7 @@
 </template>
 
 <script>
-import Chart from '@/components/Charts/keyboard'
+import Chart from '@/components/Charts/Keyboard'
 
 export default {
   name: 'KeyboardChart',
diff --git a/src/views/charts/line.vue b/src/views/charts/line.vue
index daa181fa..fea1497e 100644
--- a/src/views/charts/line.vue
+++ b/src/views/charts/line.vue
@@ -5,7 +5,7 @@
 </template>
 
 <script>
-import Chart from '@/components/Charts/lineMarker'
+import Chart from '@/components/Charts/LineMarker'
 
 export default {
   name: 'LineChart',
diff --git a/src/views/charts/mixChart.vue b/src/views/charts/mix-chart.vue
similarity index 86%
rename from src/views/charts/mixChart.vue
rename to src/views/charts/mix-chart.vue
index d41e655b..c57db75a 100644
--- a/src/views/charts/mixChart.vue
+++ b/src/views/charts/mix-chart.vue
@@ -5,7 +5,7 @@
 </template>
 
 <script>
-import Chart from '@/components/Charts/mixChart'
+import Chart from '@/components/Charts/MixChart'
 
 export default {
   name: 'MixChart',
diff --git a/src/views/components-demo/avatarUpload.vue b/src/views/components-demo/avatar-upload.vue
similarity index 97%
rename from src/views/components-demo/avatarUpload.vue
rename to src/views/components-demo/avatar-upload.vue
index c40ef4a4..fae36ad8 100644
--- a/src/views/components-demo/avatarUpload.vue
+++ b/src/views/components-demo/avatar-upload.vue
@@ -1,9 +1,9 @@
 <template>
   <div class="components-container">
-    <code>This is based on
+    <aside>This is based on
       <a class="link-type" href="//github.com/dai-siki/vue-image-crop-upload"> vue-image-crop-upload</a>.
       {{ $t('components.imageUploadTips') }}
-    </code>
+    </aside>
 
     <pan-thumb :image="image" />
 
diff --git a/src/views/components-demo/backToTop.vue b/src/views/components-demo/back-to-top.vue
similarity index 93%
rename from src/views/components-demo/backToTop.vue
rename to src/views/components-demo/back-to-top.vue
index 1404f574..58d9d75c 100644
--- a/src/views/components-demo/backToTop.vue
+++ b/src/views/components-demo/back-to-top.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="components-container">
-    <code>{{ $t('components.backToTopTips1') }}</code>
-    <code>{{ $t('components.backToTopTips2') }}</code>
+    <aside>{{ $t('components.backToTopTips1') }}</aside>
+    <aside>{{ $t('components.backToTopTips2') }}</aside>
     <div class="placeholder-container">
       <div>placeholder</div>
       <div>placeholder</div>
@@ -113,8 +113,7 @@
       <div>placeholder</div>
       <div>placeholder</div>
     </div>
-    <!--可自定义按钮的样式、show/hide临界点、返回的位置  -->
-    <!--如需文字提示,可在外部添加element的<el-tooltip></el-tooltip>元素  -->
+    <!-- you can add element-ui's tooltip -->
     <el-tooltip placement="top" content="tooltip">
       <back-to-top :custom-style="myBackToTopStyle" :visibility-height="300" :back-position="50" transition-name="fade" />
     </el-tooltip>
@@ -129,6 +128,7 @@ export default {
   components: { BackToTop },
   data() {
     return {
+      // customizable button style, show/hide critical point, return position
       myBackToTopStyle: {
         right: '50px',
         bottom: '50px',
diff --git a/src/views/components-demo/countTo.vue b/src/views/components-demo/count-to.vue
similarity index 95%
rename from src/views/components-demo/countTo.vue
rename to src/views/components-demo/count-to.vue
index 9fae2694..70681df6 100644
--- a/src/views/components-demo/countTo.vue
+++ b/src/views/components-demo/count-to.vue
@@ -1,8 +1,8 @@
 <template>
   <div class="components-container">
-    <p class="warn-content">
+    <aside>
       <a href="https://github.com/PanJiaChen/vue-countTo" target="_blank">countTo-component</a>
-    </p>
+    </aside>
     <count-to
       ref="example"
       :start-val="_startVal"
@@ -45,9 +45,9 @@
         <input v-model="setSuffix" name="suffixInput">
       </label>
     </div>
-    <code>&lt;count-to :start-val=&#x27;{{ _startVal }}&#x27; :end-val=&#x27;{{ _endVal }}&#x27; :duration=&#x27;{{ _duration }}&#x27;
+    <aside>&lt;count-to :start-val=&#x27;{{ _startVal }}&#x27; :end-val=&#x27;{{ _endVal }}&#x27; :duration=&#x27;{{ _duration }}&#x27;
       :decimals=&#x27;{{ _decimals }}&#x27; :separator=&#x27;{{ _separator }}&#x27; :prefix=&#x27;{{ _prefix }}&#x27; :suffix=&#x27;{{ _suffix }}&#x27;
-      :autoplay=false&gt;</code>
+      :autoplay=false&gt;</aside>
   </div>
 </template>
 
diff --git a/src/views/components-demo/dndList.vue b/src/views/components-demo/dnd-list.vue
similarity index 94%
rename from src/views/components-demo/dndList.vue
rename to src/views/components-demo/dnd-list.vue
index 0e4c215a..e299fa68 100644
--- a/src/views/components-demo/dndList.vue
+++ b/src/views/components-demo/dnd-list.vue
@@ -1,8 +1,8 @@
 <template>
   <div class="components-container">
-    <code>drag-list base on
+    <aside>drag-list base on
       <a href="https://github.com/SortableJS/Vue.Draggable" target="_blank">Vue.Draggable</a>
-    </code>
+    </aside>
     <div class="editor-container">
       <dnd-list :list1="list1" :list2="list2" list1-title="List" list2-title="Article pool" />
     </div>
diff --git a/src/views/components-demo/dragDialog.vue b/src/views/components-demo/drag-dialog.vue
similarity index 95%
rename from src/views/components-demo/dragDialog.vue
rename to src/views/components-demo/drag-dialog.vue
index 3c985552..c815b282 100644
--- a/src/views/components-demo/dragDialog.vue
+++ b/src/views/components-demo/drag-dialog.vue
@@ -17,7 +17,7 @@
 </template>
 
 <script>
-import elDragDialog from '@/directive/el-dragDialog' // base on element-ui
+import elDragDialog from '@/directive/el-drag-dialog' // base on element-ui
 
 export default {
   name: 'DragDialogDemo',
diff --git a/src/views/components-demo/dragKanban.vue b/src/views/components-demo/drag-kanban.vue
similarity index 100%
rename from src/views/components-demo/dragKanban.vue
rename to src/views/components-demo/drag-kanban.vue
diff --git a/src/views/components-demo/dragSelect.vue b/src/views/components-demo/drag-select.vue
similarity index 100%
rename from src/views/components-demo/dragSelect.vue
rename to src/views/components-demo/drag-select.vue
diff --git a/src/views/components-demo/dropzone.vue b/src/views/components-demo/dropzone.vue
index 62e9fdad..cdfc71b1 100644
--- a/src/views/components-demo/dropzone.vue
+++ b/src/views/components-demo/dropzone.vue
@@ -1,9 +1,9 @@
 <template>
   <div class="components-container">
-    <code>
+    <aside>
       Based on <a class="link-type" href="https://github.com/rowanwins/vue-dropzone"> dropzone </a>.
       {{ $t('components.dropzoneTips') }}
-    </code>
+    </aside>
     <div class="editor-container">
       <dropzone id="myVueDropzone" url="https://httpbin.org/post" @dropzone-removedFile="dropzoneR" @dropzone-success="dropzoneS" />
     </div>
diff --git a/src/views/components-demo/jsonEditor.vue b/src/views/components-demo/json-editor.vue
similarity index 89%
rename from src/views/components-demo/jsonEditor.vue
rename to src/views/components-demo/json-editor.vue
index 01fed710..85bf3834 100644
--- a/src/views/components-demo/jsonEditor.vue
+++ b/src/views/components-demo/json-editor.vue
@@ -1,10 +1,10 @@
 <template>
   <div class="components-container">
-    <code>Json-Editor is base on <a href="https://github.com/codemirror/CodeMirror" target="_blank">CodeMirrorr</a>. Lint
+    <aside>Json-Editor is base on <a href="https://github.com/codemirror/CodeMirror" target="_blank">CodeMirrorr</a>. Lint
       base on <a
         href="https://github.com/codemirror/CodeMirror/blob/master/addon/lint/json-lint.js"
         target="_blank"
-      >json-lint</a>.</code>
+      >json-lint</a>.</aside>
     <div class="editor-container">
       <json-editor ref="jsonEditor" v-model="value" />
     </div>
diff --git a/src/views/components-demo/markdown.vue b/src/views/components-demo/markdown.vue
index 8483a470..876db002 100644
--- a/src/views/components-demo/markdown.vue
+++ b/src/views/components-demo/markdown.vue
@@ -1,13 +1,13 @@
 <template>
   <div class="components-container">
-    <code>Markdown is based on
+    <aside>Markdown is based on
       <a href="https://github.com/nhnent/tui.editor" target="_blank">tui.editor</a> ,simply wrapped with Vue.
       <a
         target="_blank"
         href="https://panjiachen.github.io/vue-element-admin-site/feature/component/markdown-editor.html"
       >
         Documentation </a>
-    </code>
+    </aside>
 
     <div class="editor-container">
       <el-tag class="tag-title">
diff --git a/src/views/components-demo/mixin.vue b/src/views/components-demo/mixin.vue
index 18e9ef88..19b7a543 100644
--- a/src/views/components-demo/mixin.vue
+++ b/src/views/components-demo/mixin.vue
@@ -115,7 +115,7 @@
 import PanThumb from '@/components/PanThumb'
 import MdInput from '@/components/MDinput'
 import Mallki from '@/components/TextHoverEffect/Mallki'
-import DropdownMenu from '@/components/Share/dropdownMenu'
+import DropdownMenu from '@/components/Share/DropdownMenu'
 import waves from '@/directive/waves/index.js' // 水波纹指令
 
 export default {
diff --git a/src/views/components-demo/splitpane.vue b/src/views/components-demo/split-pane.vue
similarity index 95%
rename from src/views/components-demo/splitpane.vue
rename to src/views/components-demo/split-pane.vue
index 4259abea..7dba353f 100644
--- a/src/views/components-demo/splitpane.vue
+++ b/src/views/components-demo/split-pane.vue
@@ -1,10 +1,10 @@
 <template>
   <div class="components-container">
-    <code><strong>SplitPane</strong> If you've used
+    <aside><strong>SplitPane</strong> If you've used
       <a href="https://codepen.io/" target="_blank"> codepen</a>,
       <a href="https://jsfiddle.net/" target="_blank"> jsfiddle </a>will not be unfamiliar.
       <a href="https://github.com/PanJiaChen/vue-split-pane" target="_blank"> Github repository</a>
-    </code>
+    </aside>
     <split-pane split="vertical" @resize="resize">
       <template slot="paneL">
         <div class="left-container" />
diff --git a/src/views/components-demo/sticky.vue b/src/views/components-demo/sticky.vue
index db86cb2d..de86e1a1 100644
--- a/src/views/components-demo/sticky.vue
+++ b/src/views/components-demo/sticky.vue
@@ -37,7 +37,7 @@
     </sticky>
 
     <div class="components-container">
-      <code>Sticky header, {{ $t('components.stickyTips') }}</code>
+      <aside>Sticky header, {{ $t('components.stickyTips') }}</aside>
       <div>placeholder</div>
       <div>placeholder</div>
       <div>placeholder</div>
diff --git a/src/views/components-demo/tinymce.vue b/src/views/components-demo/tinymce.vue
index e1d72d1f..7900a294 100644
--- a/src/views/components-demo/tinymce.vue
+++ b/src/views/components-demo/tinymce.vue
@@ -1,9 +1,9 @@
 <template>
   <div class="components-container">
-    <code>
+    <aside>
       {{ $t('components.tinymceTips') }}
       <a target="_blank" class="link-type" href="https://panjiachen.github.io/vue-element-admin-site/component/rich-editor.html"> {{ $t('components.documentation') }}</a>
-    </code>
+    </aside>
     <div>
       <tinymce v-model="content" :height="300" />
     </div>
diff --git a/src/views/dashboard/admin/components/TransactionTable.vue b/src/views/dashboard/admin/components/TransactionTable.vue
index 68ab4792..d07b0edf 100644
--- a/src/views/dashboard/admin/components/TransactionTable.vue
+++ b/src/views/dashboard/admin/components/TransactionTable.vue
@@ -21,7 +21,7 @@
 </template>
 
 <script>
-import { transactionList } from '@/api/remoteSearch'
+import { transactionList } from '@/api/remote-search'
 
 export default {
   filters: {
diff --git a/src/views/documentation/index.vue b/src/views/documentation/index.vue
index 2fed7398..4e05d03f 100644
--- a/src/views/documentation/index.vue
+++ b/src/views/documentation/index.vue
@@ -7,7 +7,7 @@
   </div>
 </template>
 <script>
-import DropdownMenu from '@/components/Share/dropdownMenu'
+import DropdownMenu from '@/components/Share/DropdownMenu'
 
 export default {
   name: 'Documentation',
diff --git a/src/views/errorLog/errorTestA.vue b/src/views/error-log/components/ErrorTestA.vue
similarity index 100%
rename from src/views/errorLog/errorTestA.vue
rename to src/views/error-log/components/ErrorTestA.vue
diff --git a/src/views/errorLog/errorTestB.vue b/src/views/error-log/components/ErrorTestB.vue
similarity index 100%
rename from src/views/errorLog/errorTestB.vue
rename to src/views/error-log/components/ErrorTestB.vue
diff --git a/src/views/errorLog/index.vue b/src/views/error-log/index.vue
similarity index 78%
rename from src/views/errorLog/index.vue
rename to src/views/error-log/index.vue
index 8cbe18e2..102b2e5b 100644
--- a/src/views/errorLog/index.vue
+++ b/src/views/error-log/index.vue
@@ -1,15 +1,15 @@
 <template>
   <div class="errPage-container">
-    <errorA />
-    <errorB />
+    <ErrorA />
+    <ErrorB />
     <!-- $t is vue-i18n global function to translate lang -->
     <h3>{{ $t('errorLog.tips') }}</h3>
-    <code>
+    <aside>
       {{ $t('errorLog.description') }}
       <a target="_blank" class="link-type" href="https://panjiachen.github.io/vue-element-admin-site/guide/advanced/error.html">
         {{ $t('errorLog.documentation') }}
       </a>
-    </code>
+    </aside>
     <a href="#">
       <img src="https://wpimg.wallstcn.com/360e4842-4db5-42d0-b078-f9a84a825546.gif">
     </a>
@@ -17,12 +17,12 @@
 </template>
 
 <script>
-import errorA from './errorTestA'
-import errorB from './errorTestB'
+import ErrorA from './components/ErrorTestA'
+import ErrorB from './components/ErrorTestB'
 
 export default {
   name: 'ErrorLog',
-  components: { errorA, errorB }
+  components: { ErrorA, ErrorB }
 }
 </script>
 
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..55d2972a 100644
--- a/src/views/example/components/ArticleDetail.vue
+++ b/src/views/example/components/ArticleDetail.vue
@@ -6,10 +6,10 @@
         <PlatformDropdown v-model="postForm.platforms" />
         <SourceUrlDropdown v-model="postForm.source_uri" />
         <el-button v-loading="loading" style="margin-left: 10px;" type="success" @click="submitForm">
-          发布
+          Publush
         </el-button>
         <el-button v-loading="loading" type="warning" @click="draftForm">
-          草稿
+          Draft
         </el-button>
       </sticky>
 
@@ -20,28 +20,28 @@
           <el-col :span="24">
             <el-form-item style="margin-bottom: 40px;" prop="title">
               <MDinput v-model="postForm.title" :maxlength="100" name="name" required>
-                标题
+                Title
               </MDinput>
             </el-form-item>
 
             <div class="postInfo-container">
               <el-row>
                 <el-col :span="8">
-                  <el-form-item label-width="45px" label="作者:" class="postInfo-container-item">
-                    <el-select v-model="postForm.author" :remote-method="getRemoteUserList" filterable default-first-option remote placeholder="搜索用户">
+                  <el-form-item label-width="60px" label="Author:" class="postInfo-container-item">
+                    <el-select v-model="postForm.author" :remote-method="getRemoteUserList" filterable default-first-option remote placeholder="Search user">
                       <el-option v-for="(item,index) in userListOptions" :key="item+index" :label="item" :value="item" />
                     </el-select>
                   </el-form-item>
                 </el-col>
 
                 <el-col :span="10">
-                  <el-form-item label-width="80px" label="发布时间:" class="postInfo-container-item">
-                    <el-date-picker v-model="postForm.display_time" type="datetime" format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期时间" />
+                  <el-form-item label-width="120px" label="Publush Time:" class="postInfo-container-item">
+                    <el-date-picker v-model="postForm.display_time" type="datetime" format="yyyy-MM-dd HH:mm:ss" placeholder="Select date and time" />
                   </el-form-item>
                 </el-col>
 
                 <el-col :span="6">
-                  <el-form-item label-width="60px" label="重要性:" class="postInfo-container-item">
+                  <el-form-item label-width="90px" label="Importance:" class="postInfo-container-item">
                     <el-rate
                       v-model="postForm.importance"
                       :max="3"
@@ -57,9 +57,9 @@
           </el-col>
         </el-row>
 
-        <el-form-item style="margin-bottom: 40px;" label-width="45px" label="摘要:">
-          <el-input v-model="postForm.content_short" :rows="1" type="textarea" class="article-textarea" autosize placeholder="请输入内容" />
-          <span v-show="contentShortLength" class="word-counter">{{ contentShortLength }}字</span>
+        <el-form-item style="margin-bottom: 40px;" label-width="70px" label="Summary:">
+          <el-input v-model="postForm.content_short" :rows="1" type="textarea" class="article-textarea" autosize placeholder="Please enter the content" />
+          <span v-show="contentShortLength" class="word-counter">{{ contentShortLength }}words</span>
         </el-form-item>
 
         <el-form-item prop="content" style="margin-bottom: 30px;">
@@ -76,12 +76,12 @@
 
 <script>
 import Tinymce from '@/components/Tinymce'
-import Upload from '@/components/Upload/singleImage3'
+import Upload from '@/components/Upload/SingleImage3'
 import MDinput from '@/components/MDinput'
 import Sticky from '@/components/Sticky' // 粘性header组件
 import { validURL } from '@/utils/validate'
 import { fetchArticle } from '@/api/article'
-import { searchUser } from '@/api/remoteSearch'
+import { searchUser } from '@/api/remote-search'
 import Warning from './Warning'
 import { CommentDropdown, PlatformDropdown, SourceUrlDropdown } from './Dropdown'
 
@@ -236,24 +236,39 @@ export default {
 
 <style lang="scss" scoped>
 @import "~@/styles/mixin.scss";
+
 .createPost-container {
   position: relative;
+
   .createPost-main-container {
     padding: 40px 45px 20px 50px;
+
     .postInfo-container {
       position: relative;
       @include clearfix;
       margin-bottom: 10px;
+
       .postInfo-container-item {
         float: left;
       }
     }
   }
+
   .word-counter {
     width: 40px;
     position: absolute;
-    right: -10px;
+    right: 10px;
     top: 0px;
   }
 }
+
+.article-textarea /deep/ {
+  textarea {
+    padding-right: 40px;
+    resize: none;
+    border: none;
+    border-radius: 0px;
+    border-bottom: 1px solid #bfcbd9;
+  }
+}
 </style>
diff --git a/src/views/example/components/Dropdown/Comment.vue b/src/views/example/components/Dropdown/Comment.vue
index 26509611..d34b2b90 100644
--- a/src/views/example/components/Dropdown/Comment.vue
+++ b/src/views/example/components/Dropdown/Comment.vue
@@ -1,17 +1,17 @@
 <template>
   <el-dropdown :show-timeout="100" trigger="click">
     <el-button plain>
-      {{ !comment_disabled?'评论已打开':'评论已关闭' }}
+      {{ !comment_disabled?'Comment: opened':'Comment: closed' }}
       <i class="el-icon-caret-bottom el-icon--right" />
     </el-button>
     <el-dropdown-menu slot="dropdown" class="no-padding">
       <el-dropdown-item>
         <el-radio-group v-model="comment_disabled" style="padding: 10px;">
           <el-radio :label="true">
-            关闭评论
+            Close comment
           </el-radio>
           <el-radio :label="false">
-            打开评论
+            Open comment
           </el-radio>
         </el-radio-group>
       </el-dropdown-item>
diff --git a/src/views/example/components/Dropdown/Platform.vue b/src/views/example/components/Dropdown/Platform.vue
index 98fcaf28..0a527264 100644
--- a/src/views/example/components/Dropdown/Platform.vue
+++ b/src/views/example/components/Dropdown/Platform.vue
@@ -1,7 +1,7 @@
 <template>
   <el-dropdown :hide-on-click="false" :show-timeout="100" trigger="click">
     <el-button plain>
-      平台({{ platforms.length }})
+      Platfroms({{ platforms.length }})
       <i class="el-icon-caret-bottom el-icon--right" />
     </el-button>
     <el-dropdown-menu slot="dropdown" class="no-border">
diff --git a/src/views/example/components/Dropdown/SourceUrl.vue b/src/views/example/components/Dropdown/SourceUrl.vue
index 21a58907..8f47485a 100644
--- a/src/views/example/components/Dropdown/SourceUrl.vue
+++ b/src/views/example/components/Dropdown/SourceUrl.vue
@@ -1,14 +1,14 @@
 <template>
   <el-dropdown :show-timeout="100" trigger="click">
     <el-button plain>
-      外链
+      Link
       <i class="el-icon-caret-bottom el-icon--right" />
     </el-button>
     <el-dropdown-menu slot="dropdown" class="no-padding no-border" style="width:400px">
       <el-form-item label-width="0px" style="margin-bottom: 0px" prop="source_uri">
-        <el-input v-model="source_uri" placeholder="请输入内容">
+        <el-input v-model="source_uri" placeholder="Please enter the content">
           <template slot="prepend">
-            填写url
+            URL
           </template>
         </el-input>
       </el-form-item>
diff --git a/src/views/example/components/Warning.vue b/src/views/example/components/Warning.vue
index bee172d4..d24fe291 100644
--- a/src/views/example/components/Warning.vue
+++ b/src/views/example/components/Warning.vue
@@ -1,11 +1,10 @@
 <template>
-  <p class="warn-content">
-    创建和编辑页面是不能被keep-alive 缓存的,因为keep-alive 的include 目前不支持根据路由来缓存,所以目前都是基于component name 来缓存的,如果你想要实现缓存的效果,可以使用localstorage 等浏览器缓存方案。或者不要使用keep-alive
-    的include,直接缓存所有页面。详情见
+  <aside>
+    {{ $t('example.warning') }}
     <a
       href="https://panjiachen.github.io/vue-element-admin-site/guide/essentials/tags-view.html"
       target="_blank"
-    >文档</a>
-  </p>
+    >Document</a>
+  </aside>
 </template>
 
diff --git a/src/views/excel/exportExcel.vue b/src/views/excel/export-excel.vue
similarity index 100%
rename from src/views/excel/exportExcel.vue
rename to src/views/excel/export-excel.vue
diff --git a/src/views/excel/mergeHeader.vue b/src/views/excel/merge-header.vue
similarity index 100%
rename from src/views/excel/mergeHeader.vue
rename to src/views/excel/merge-header.vue
diff --git a/src/views/excel/selectExcel.vue b/src/views/excel/select-excel.vue
similarity index 100%
rename from src/views/excel/selectExcel.vue
rename to src/views/excel/select-excel.vue
diff --git a/src/views/excel/uploadExcel.vue b/src/views/excel/upload-excel.vue
similarity index 100%
rename from src/views/excel/uploadExcel.vue
rename to src/views/excel/upload-excel.vue
diff --git a/src/views/guide/index.vue b/src/views/guide/index.vue
index 31ca3177..636ca275 100644
--- a/src/views/guide/index.vue
+++ b/src/views/guide/index.vue
@@ -1,10 +1,9 @@
 <template>
   <div class="app-container">
-    <p class="warn-content">
+    <aside>
       {{ $t('guide.description') }}
-      <a href="https://github.com/kamranahmedse/driver.js" target="_blank">driver.js.
-      </a>
-    </p>
+      <a href="https://github.com/kamranahmedse/driver.js" target="_blank">driver.js.</a>
+    </aside>
     <el-button icon="el-icon-question" type="primary" @click.prevent.stop="guide">
       {{ $t('guide.button') }}
     </el-button>
@@ -14,7 +13,7 @@
 <script>
 import Driver from 'driver.js' // import driver.js
 import 'driver.js/dist/driver.min.css' // import driver.js css
-import steps from './defineSteps'
+import steps from './steps'
 
 export default {
   name: 'Guide',
diff --git a/src/views/guide/defineSteps.js b/src/views/guide/steps.js
similarity index 100%
rename from src/views/guide/defineSteps.js
rename to src/views/guide/steps.js
diff --git a/src/views/icons/element-icons.js b/src/views/icons/element-icons.js
new file mode 100644
index 00000000..df722010
--- /dev/null
+++ b/src/views/icons/element-icons.js
@@ -0,0 +1,74 @@
+const elementIcons = [
+  'info',
+  'error',
+  'success',
+  'warning',
+  'question',
+  'back',
+  'arrow-left',
+  'arrow-down',
+  'arrow-right',
+  'arrow-up',
+  'caret-left',
+  'caret-bottom',
+  'caret-top',
+  'caret-right',
+  'd-arrow-left',
+  'd-arrow-right',
+  'minus',
+  'plus',
+  'remove',
+  'circle-plus',
+  'remove-outline',
+  'circle-plus-outline',
+  'close',
+  'check',
+  'circle-close',
+  'circle-check',
+  'circle-close-outline',
+  'circle-check-outline',
+  'zoom-out',
+  'zoom-in',
+  'd-caret',
+  'sort',
+  'sort-down',
+  'sort-up',
+  'tickets',
+  'document',
+  'goods',
+  'sold-out',
+  'news',
+  'message',
+  'date',
+  'printer',
+  'time',
+  'bell',
+  'mobile-phone',
+  'service',
+  'view',
+  'menu',
+  'more',
+  'more-outline',
+  'star-on',
+  'star-off',
+  'location',
+  'location-outline',
+  'phone',
+  'phone-outline',
+  'picture',
+  'picture-outline',
+  'delete',
+  'search',
+  'edit',
+  'edit-outline',
+  'rank',
+  'refresh',
+  'share',
+  'setting',
+  'upload',
+  'upload2',
+  'download',
+  'loading'
+]
+
+export default elementIcons
diff --git a/src/views/svg-icons/index.vue b/src/views/icons/index.vue
similarity index 89%
rename from src/views/svg-icons/index.vue
rename to src/views/icons/index.vue
index 665b1d03..3677afd6 100644
--- a/src/views/svg-icons/index.vue
+++ b/src/views/icons/index.vue
@@ -1,12 +1,12 @@
 <template>
   <div class="icons-container">
-    <p class="warn-content">
+    <aside>
       <a href="https://panjiachen.github.io/vue-element-admin-site/guide/advanced/icon.html" target="_blank">Add and use
       </a>
-    </p>
+    </aside>
     <el-tabs type="border-card">
       <el-tab-pane label="Icons">
-        <div v-for="item of iconsMap" :key="item" @click="handleClipboard(generateIconCode(item),$event)">
+        <div v-for="item of svgIcons" :key="item" @click="handleClipboard(generateIconCode(item),$event)">
           <el-tooltip placement="top">
             <div slot="content">
               {{ generateIconCode(item) }}
@@ -37,15 +37,15 @@
 
 <script>
 import clipboard from '@/utils/clipboard'
-import icons from './requireIcons'
-import elementIcons from './element-icon.json'
+import svgIcons from './svg-icons'
+import elementIcons from './element-icons'
 
 export default {
   name: 'Icons',
   data() {
     return {
-      iconsMap: icons,
-      elementIcons: elementIcons
+      svgIcons,
+      elementIcons
     }
   },
   methods: {
diff --git a/src/views/svg-icons/requireIcons.js b/src/views/icons/svg-icons.js
similarity index 72%
rename from src/views/svg-icons/requireIcons.js
rename to src/views/icons/svg-icons.js
index 56edb9f1..1e3c66d2 100644
--- a/src/views/svg-icons/requireIcons.js
+++ b/src/views/icons/svg-icons.js
@@ -3,8 +3,8 @@ const requireAll = requireContext => requireContext.keys()
 
 const re = /\.\/(.*)\.svg/
 
-const icons = requireAll(req).map(i => {
+const svgIcons = requireAll(req).map(i => {
   return i.match(re)[1]
 })
 
-export default icons
+export default svgIcons
diff --git a/src/views/login/authRedirect.vue b/src/views/login/auth-redirect.vue
similarity index 100%
rename from src/views/login/authRedirect.vue
rename to src/views/login/auth-redirect.vue
diff --git a/src/views/login/socialSignin.vue b/src/views/login/components/SocialSignin.vue
similarity index 97%
rename from src/views/login/socialSignin.vue
rename to src/views/login/components/SocialSignin.vue
index d047b068..cbfb15d2 100644
--- a/src/views/login/socialSignin.vue
+++ b/src/views/login/components/SocialSignin.vue
@@ -10,7 +10,7 @@
 </template>
 
 <script>
-// import openWindow from '@/utils/openWindow'
+// import openWindow from '@/utils/open-window'
 
 export default {
   name: 'SocialSignin',
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index b9cba35f..9bff21a3 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -81,7 +81,7 @@
 <script>
 import { validUsername } from '@/utils/validate'
 import LangSelect from '@/components/LangSelect'
-import SocialSign from './socialSignin'
+import SocialSign from './components/SocialSignin'
 
 export default {
   name: 'Login',
diff --git a/src/views/pdf/index.vue b/src/views/pdf/index.vue
index 238d4958..b875295f 100644
--- a/src/views/pdf/index.vue
+++ b/src/views/pdf/index.vue
@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <code style="margin-top:15px;">{{ $t('pdf.tips') }}</code>
+    <aside style="margin-top:15px;">{{ $t('pdf.tips') }}</aside>
     <router-link target="_blank" to="/pdf/download">
       <el-button type="primary">
         Click to download PDF
diff --git a/src/views/permission/directive.vue b/src/views/permission/directive.vue
index 013c97a3..b3ef8c37 100644
--- a/src/views/permission/directive.vue
+++ b/src/views/permission/directive.vue
@@ -35,10 +35,10 @@
     </div>
 
     <div :key="'checkPermission'+key" style="margin-top:60px;">
-      <code>
+      <aside>
         {{ $t('permission.tips') }}
         <br> e.g.
-      </code>
+      </aside>
 
       <el-tabs type="border-card" style="width:550px;">
         <el-tab-pane v-if="checkPermission(['admin'])" label="Admin">
diff --git a/src/views/svg-icons/element-icon.json b/src/views/svg-icons/element-icon.json
deleted file mode 100644
index 15072a4c..00000000
--- a/src/views/svg-icons/element-icon.json
+++ /dev/null
@@ -1 +0,0 @@
-["info","error","success","warning","question","back","arrow-left","arrow-down","arrow-right","arrow-up","caret-left","caret-bottom","caret-top","caret-right","d-arrow-left","d-arrow-right","minus","plus","remove","circle-plus","remove-outline","circle-plus-outline","close","check","circle-close","circle-check","circle-close-outline","circle-check-outline","zoom-out","zoom-in","d-caret","sort","sort-down","sort-up","tickets","document","goods","sold-out","news","message","date","printer","time","bell","mobile-phone","service","view","menu","more","more-outline","star-on","star-off","location","location-outline","phone","phone-outline","picture","picture-outline","delete","search","edit","edit-outline","rank","refresh","share","setting","upload","upload2","download","loading"]
diff --git a/src/views/tab/components/tabPane.vue b/src/views/tab/components/TabPane.vue
similarity index 100%
rename from src/views/tab/components/tabPane.vue
rename to src/views/tab/components/TabPane.vue
diff --git a/src/views/tab/index.vue b/src/views/tab/index.vue
index 85a96347..e5746580 100644
--- a/src/views/tab/index.vue
+++ b/src/views/tab/index.vue
@@ -13,7 +13,7 @@
 </template>
 
 <script>
-import tabPane from './components/tabPane'
+import tabPane from './components/TabPane'
 
 export default {
   name: 'Tab',
diff --git a/src/views/table/complexTable.vue b/src/views/table/complex-table.vue
similarity index 98%
rename from src/views/table/complexTable.vue
rename to src/views/table/complex-table.vue
index bfe577b1..43b00e80 100644
--- a/src/views/table/complexTable.vue
+++ b/src/views/table/complex-table.vue
@@ -148,9 +148,9 @@
 
 <script>
 import { fetchList, fetchPv, createArticle, updateArticle } from '@/api/article'
-import waves from '@/directive/waves' // Waves directive
+import waves from '@/directive/waves' // waves directive
 import { parseTime } from '@/utils'
-import Pagination from '@/components/Pagination' // Secondary package based on el-pagination
+import Pagination from '@/components/Pagination' // secondary package based on el-pagination
 
 const calendarTypeOptions = [
   { key: 'CN', display_name: 'China' },
@@ -159,7 +159,7 @@ const calendarTypeOptions = [
   { key: 'EU', display_name: 'Eurozone' }
 ]
 
-// arr to obj ,such as { CN : "China", US : "USA" }
+// arr to obj, such as { CN : "China", US : "USA" }
 const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => {
   acc[cur.key] = cur.display_name
   return acc
diff --git a/src/views/table/dragTable.vue b/src/views/table/drag-table.vue
similarity index 100%
rename from src/views/table/dragTable.vue
rename to src/views/table/drag-table.vue
diff --git a/src/views/table/dynamicTable/fixedThead.vue b/src/views/table/dynamic-table/components/FixedThead.vue
similarity index 100%
rename from src/views/table/dynamicTable/fixedThead.vue
rename to src/views/table/dynamic-table/components/FixedThead.vue
diff --git a/src/views/table/dynamicTable/unfixedThead.vue b/src/views/table/dynamic-table/components/UnfixedThead.vue
similarity index 100%
rename from src/views/table/dynamicTable/unfixedThead.vue
rename to src/views/table/dynamic-table/components/UnfixedThead.vue
diff --git a/src/views/table/dynamicTable/index.vue b/src/views/table/dynamic-table/index.vue
similarity index 70%
rename from src/views/table/dynamicTable/index.vue
rename to src/views/table/dynamic-table/index.vue
index 4947b4b9..b1a6a6d5 100644
--- a/src/views/table/dynamicTable/index.vue
+++ b/src/views/table/dynamic-table/index.vue
@@ -13,12 +13,12 @@
 </template>
 
 <script>
-import fixedThead from './fixedThead'
-import unfixedThead from './unfixedThead'
+import FixedThead from './components/FixedThead'
+import UnfixedThead from './components/UnfixedThead'
 
 export default {
   name: 'DynamicTable',
-  components: { fixedThead, unfixedThead }
+  components: { FixedThead, UnfixedThead }
 }
 </script>
 
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
diff --git a/src/views/theme/index.vue b/src/views/theme/index.vue
index b67c2c67..bfa5953b 100644
--- a/src/views/theme/index.vue
+++ b/src/views/theme/index.vue
@@ -9,7 +9,7 @@
       <div class="box-item">
         <span class="field-label">{{ $t('theme.change') }} : </span>
         <el-switch v-model="theme" />
-        <code style="margin-top:15px;">{{ $t('theme.tips') }}</code>
+        <aside style="margin-top:15px;">{{ $t('theme.tips') }}</aside>
       </div>
     </el-card>
 
diff --git a/vue.config.js b/vue.config.js
index cbd79510..bae56d78 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/
@@ -86,6 +86,7 @@ module.exports = {
       .end()
 
     config
+     // https://webpack.js.org/configuration/devtool/#development
       .when(process.env.NODE_ENV === 'development',
         config => config.devtool('cheap-source-map')
       )