Browse Source

feature:基础模块
1.菜单管理
2.用户管理

ZZH-wl 3 years ago
parent
commit
d89ad4e3af

+ 8 - 80
.env

@@ -1,84 +1,12 @@
-
-  VUE_GITHUB_USER_NAME=test
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 以下内容不建议修改建议将VUE_APP_SECRET_KEY配置到【.env.local】中
+VUE_GITHUB_USER_NAME=test
 VUE_APP_SECRET_KEY=preview
 
 
+# 租户码
+VUE_APP_TENANT=default
+# 登录验证微服务名称
+VUE_APP_AdminPath=dashoo.opms.admin-0.0.1
+VUE_APP_MicroSrvProxy_API=http://127.0.0.1:9981/
 
+SSO_LOGIN=''
+SSO_HREF=''

+ 62 - 0
README.md

@@ -0,0 +1,62 @@
+### 技术栈
+
+1. vue v2.6.14
+2. node v16.5.0
+
+### 目录说明
+
+```lua
+根目录
+├── mock -- Mock服务
+├── public -- 前端控制
+├── src --
+      ├── api --
+      ├── assets --
+      ├── config --
+      ├── i18n --
+      ├── icon --
+      ├── router --
+      ├── store --
+      ├── utils --
+      ├── vab --
+      └── views --
+            ├── index --
+            ├── login --
+            └── system --
+
+├── package.json --
+└── vue.config --
+```
+
+### 命名规范
+
+1. 文件名、文件夹:小驼峰,优先选择单个单词命名(user, userInfo)
+
+2. 组件:大驼峰,优先选择单个单词命名(UserEdit.vue)
+
+3. 图片、HTML:全部采用小写方式,优先选择单个单词命名,下划线分隔(banner_sina.gif)
+
+4. CSS、JS:全部采用小写方式,优先选择单个单词命名,以短横线分隔(date-picker.scss, date-info.js)
+
+5. Router:小驼峰('/userInfo')
+
+### 初始化项目
+
+```
+npm i yarn -g
+yarn/yarn install
+```
+
+### 运行项目
+
+```
+yarn serve
+```
+
+### 打包项目
+
+更改静态文件`public/config.js`中的参数(或者在打包后更改),然后运行
+
+```
+yarn build
+```

+ 63 - 6
mock/controller/router.js

@@ -24,6 +24,27 @@ const List = [
       },
     ],
   },
+  {
+    path: '/test',
+    name: 'Test',
+    component: 'Layout',
+    meta: {
+      title: '测试',
+      icon: 'user-settings-line',
+    },
+    children: [
+      {
+        path: 'testIndex',
+        name: 'TestIndex',
+        // component: '@/views/setting/personalCenter',
+        component: '@/views/test/index',
+        meta: {
+          title: '测试',
+          icon: 'map-pin-user-line',
+        },
+      },
+    ],
+  },
   {
     path: '/setting',
     name: 'PersonnelManagement',
@@ -36,7 +57,8 @@ const List = [
       {
         path: 'personalCenter',
         name: 'PersonalCenter',
-        component: '@/views/setting/personalCenter',
+        // component: '@/views/setting/personalCenter',
+        component: '@/views/system/personal',
         meta: {
           title: '个人中心',
           icon: 'map-pin-user-line',
@@ -45,7 +67,8 @@ const List = [
       {
         path: 'userManagement',
         name: 'UserManagement',
-        component: '@/views/setting/userManagement',
+        // component: '@/views/setting/userManagement',
+        component: '@/views/system/user/index',
         meta: {
           title: '用户管理',
           icon: 'user-3-line',
@@ -54,7 +77,8 @@ const List = [
       {
         path: 'roleManagement',
         name: 'RoleManagement',
-        component: '@/views/setting/roleManagement',
+        // component: '@/views/setting/roleManagement',
+        component: '@/views/system/role/index',
         meta: {
           title: '角色管理',
           icon: 'admin-line',
@@ -63,7 +87,8 @@ const List = [
       {
         path: 'departmentManagement',
         name: 'DepartmentManagement',
-        component: '@/views/setting/departmentManagement',
+        // component: '@/views/setting/departmentManagement',
+        component: '@/views/system/dept/index',
         meta: {
           title: '部门管理',
           icon: 'group-line',
@@ -72,7 +97,8 @@ const List = [
       {
         path: 'menuManagement',
         name: 'MenuManagement',
-        component: '@/views/setting/menuManagement',
+        // component: '@/views/setting/menuManagement',
+        component: '@/views/system/menu/index',
         meta: {
           title: '菜单管理',
           icon: 'menu-2-fill',
@@ -81,7 +107,8 @@ const List = [
       {
         path: 'systemLog',
         name: 'SystemLog',
-        component: '@/views/setting/systemLog',
+        // component: '@/views/setting/systemLog',
+        component: '@/views/system/log',
         meta: {
           title: '系统日志',
           icon: 'file-shield-2-line',
@@ -103,4 +130,34 @@ module.exports = [
       }
     },
   },
+  {
+    url: '/menuManagement/getList',
+    type: 'get',
+    response() {
+      return {
+        code: 200,
+        msg: 'success',
+        data: {
+          list: [
+            {
+              id: 'root',
+              label: '全部角色',
+              children: [
+                {
+                  id: '610000201008234560',
+                  permission: 'admin',
+                  label: 'admin角色',
+                },
+                {
+                  id: '450000200912071734',
+                  permission: 'editor',
+                  label: 'editor角色',
+                },
+              ],
+            },
+          ],
+        },
+      }
+    },
+  },
 ]

+ 22 - 0
mock/controller/user.js

@@ -74,4 +74,26 @@ module.exports = [
       }
     },
   },
+  {
+    url: '/userManagement/getList',
+    type: 'get',
+    response() {
+      return {
+        code: 200,
+        msg: 'success',
+        data: {
+          list: [
+            {
+              id: 1,
+              username: '管理员',
+              email: '123@123.com',
+              roles: ['admin'],
+              datatime: new Date().toLocaleString(),
+            },
+          ],
+          total: 1,
+        },
+      }
+    },
+  },
 ]

+ 1 - 0
package.json

@@ -13,6 +13,7 @@
     "template": "plop"
   },
   "dependencies": {
+    "@riophae/vue-treeselect": "^0.4.0",
     "axios": "^0.24.0",
     "core-js": "^3.19.3",
     "dayjs": "^1.10.7",

+ 1 - 1
prettier.config.js

@@ -8,7 +8,7 @@ module.exports = {
   jsxSingleQuote: false,
   trailingComma: 'es5',
   bracketSpacing: true,
-  bracketSameLine: false,
+  bracketSameLine: true,
   arrowParens: 'always',
   htmlWhitespaceSensitivity: 'ignore',
   vueIndentScriptAndStyle: true,

+ 3 - 4
public/index.html

@@ -6,16 +6,15 @@
     <meta content="webkit" name="renderer" />
     <meta
       content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
-      name="viewport"
-    />
+      name="viewport" />
     <link href="<%= BASE_URL %>favicon.ico" rel="icon" />
     <title><%= VUE_APP_TITLE %></title>
     <meta content="" name="keywords" />
     <meta content="<%= VUE_APP_AUTHOR %>" name="author" />
     <link
       href="<%= BASE_URL %>static/css/loading.css?random=<%= VUE_APP_RANDOM %>"
-      rel="stylesheet"
-    />
+      rel="stylesheet" />
+    <script src="./config.js"></script>
   </head>
   <body>
     <noscript></noscript>

+ 43 - 0
src/api/user.js

@@ -1,3 +1,22 @@
+import micro_request from '@/utils/micro_request'
+
+const basePath = process.env.VUE_APP_AdminPath
+export default {
+  // 获取列表
+  getList(query) {
+    return micro_request.postRequest(basePath, 'User', 'GetList', query)
+  },
+  doAdd(query) {
+    return micro_request.postRequest(basePath, 'User', 'Add', query)
+  },
+  doEdit(query) {
+    return micro_request.postRequest(basePath, 'User', 'UpdateById', query)
+  },
+  doDelete(query) {
+    return micro_request.postRequest(basePath, 'User', 'DeleteUserByIds', query)
+  },
+}
+
 import request from '@/utils/request'
 
 export async function login(data) {
@@ -21,3 +40,27 @@ export function logout() {
     method: 'get',
   })
 }
+
+export function getList(params) {
+  return request({
+    url: '/userManagement/getList',
+    method: 'get',
+    params,
+  })
+}
+
+export function doEdit(data) {
+  return request({
+    url: '/userManagement/doEdit',
+    method: 'post',
+    data,
+  })
+}
+
+export function doDelete(data) {
+  return request({
+    url: '/userManagement/doDelete',
+    method: 'post',
+    data,
+  })
+}

+ 5 - 0
src/main.js

@@ -5,6 +5,11 @@ import store from './store'
 import router from './router'
 import '@/vab'
 
+import { parseTime, translateDataToTree } from '@/utils'
+
+Vue.prototype.parseTime = parseTime
+Vue.prototype.translateDataToTree = translateDataToTree
+
 Vue.config.productionTip = false
 new Vue({
   el: '#app',

+ 3 - 4
src/store/modules/routes.js

@@ -3,7 +3,7 @@
  */
 import Vue from 'vue'
 import { asyncRoutes, constantRoutes, resetRouter } from '@/router'
-import { getList } from '@/api/router'
+import menuApi from '@/api/menu'
 import { convertRouter, filterRoutes } from '@/utils/routes'
 import { authentication, rolesControl } from '@/config'
 import { isArray } from '@/utils/validate'
@@ -64,9 +64,8 @@ const actions = {
     const control = mode === 'visit' ? false : rolesControl
     // 设置后端路由(不需要可以删除)
     if (authentication === 'all') {
-      const {
-        data: { list },
-      } = await getList()
+      const { data: data } = await menuApi.getTree()
+      let list = data
       if (!isArray(list))
         Vue.prototype.$baseMessage(
           '路由格式返回有误!',

+ 11 - 2
src/utils/index.js

@@ -8,6 +8,9 @@ export function parseTime(time, cFormat) {
   if (arguments.length === 0) {
     return null
   }
+  if (time === null || time === undefined || time === '') {
+    return null
+  }
   const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
   let date
   if (typeof time === 'object') {
@@ -114,10 +117,16 @@ export function paramObj(url) {
  */
 export function translateDataToTree(data) {
   const parent = data.filter(
-    (value) => value.parentId === 'undefined' || value.parentId === null
+    (value) =>
+      value.parentId === 'undefined' ||
+      value.parentId === null ||
+      value.parentId === 0
   )
   const children = data.filter(
-    (value) => value.parentId !== 'undefined' && value.parentId !== null
+    (value) =>
+      value.parentId !== 'undefined' &&
+      value.parentId !== null &&
+      value.parentId !== 0
   )
   const translator = (parent, children) => {
     parent.forEach((parent) => {

+ 4 - 2
src/utils/request.js

@@ -1,7 +1,7 @@
 import Vue from 'vue'
 import axios from 'axios'
 import {
-  baseURL,
+  // baseURL,
   contentType,
   debounce,
   messageName,
@@ -94,7 +94,9 @@ const handleData = async ({ data, status = 0, statusText }) => {
  * @description axios初始化
  */
 const instance = axios.create({
-  baseURL,
+  // baseURL,
+  // eslint-disable-next-line no-undef
+  baseURL: $GlobalConfig.baseUrl,
   timeout: requestTimeout,
   headers: {
     'Content-Type': contentType,

+ 1 - 2
src/vab/components/VabAvatar/index.vue

@@ -7,8 +7,7 @@
         <vab-icon
           class="vab-dropdown"
           :class="{ 'vab-dropdown-active': active }"
-          icon="arrow-down-s-line"
-        />
+          icon="arrow-down-s-line" />
       </div>
     </span>
     <template #dropdown>

+ 6 - 12
src/vab/components/VabColumnBar/index.vue

@@ -4,14 +4,12 @@
     :class="{
       'is-collapse': collapse,
       ['vab-column-bar-container-' + theme.columnStyle]: true,
-    }"
-  >
+    }">
     <vab-logo />
     <el-tabs
       v-model="extra.first"
       tab-position="left"
-      @tab-click="handleTabClick"
-    >
+      @tab-click="handleTabClick">
       <template v-for="(route, index) in handleRoutes">
         <el-tab-pane :key="index + route.name" :name="route.name">
           <template slot="label">
@@ -20,14 +18,12 @@
               :class="{
                 ['vab-column-grid-' + theme.columnStyle]: true,
               }"
-              :title="translateTitle(route.meta.title)"
-            >
+              :title="translateTitle(route.meta.title)">
               <div>
                 <vab-icon
                   v-if="route.meta.icon"
                   :icon="route.meta.icon"
-                  :is-custom-svg="route.meta.isCustomSvg"
-                />
+                  :is-custom-svg="route.meta.isCustomSvg" />
                 <span>
                   {{ translateTitle(route.meta.title) }}
                 </span>
@@ -43,8 +39,7 @@
       :default-active="activeMenu"
       :default-openeds="defaultOpeneds"
       mode="vertical"
-      :unique-opened="uniqueOpened"
-    >
+      :unique-opened="uniqueOpened">
       <el-divider>
         {{ translateTitle(handleGroupTitle) }}
       </el-divider>
@@ -52,8 +47,7 @@
         <vab-menu
           v-if="route.meta && !route.meta.hidden"
           :key="route.path"
-          :item="route"
-        />
+          :item="route" />
       </template>
     </el-menu>
   </el-scrollbar>

+ 3 - 6
src/vab/components/VabErrorLog/index.vue

@@ -2,8 +2,7 @@
   <div v-if="errorLogs.length > 0">
     <el-badge
       :value="errorLogs.length"
-      @click.native="dialogTableVisible = true"
-    >
+      @click.native="dialogTableVisible = true">
       <vab-icon icon="bug-line" />
     </el-badge>
 
@@ -11,8 +10,7 @@
       append-to-body
       title="admin-pro(vue-admin-beautiful pro 版本) 异常捕获(温馨提示:错误必须解决)"
       :visible.sync="dialogTableVisible"
-      width="70%"
-    >
+      width="70%">
       <el-table border :data="errorLogs">
         <el-table-column label="报错路由">
           <template #default="{ row }">
@@ -42,8 +40,7 @@
               v-for="(item, index) in searchList"
               :key="index"
               :href="item.url + row.err.message"
-              target="_blank"
-            >
+              target="_blank">
               <el-button type="primary">
                 {{ item.title }}
               </el-button>

+ 1 - 2
src/vab/components/VabFold/index.vue

@@ -2,8 +2,7 @@
   <vab-icon
     class="fold-unfold"
     :icon="collapse ? 'menu-unfold-line' : 'menu-fold-line'"
-    @click="toggleCollapse"
-  />
+    @click="toggleCollapse" />
 </template>
 
 <script>

+ 1 - 2
src/vab/components/VabFullScreen/index.vue

@@ -2,8 +2,7 @@
   <vab-icon
     v-if="theme.showFullScreen"
     :icon="isFullscreen ? 'fullscreen-exit-fill' : 'fullscreen-fill'"
-    @click="click"
-  />
+    @click="click" />
 </template>
 
 <script>

+ 2 - 4
src/vab/components/VabHeader/index.vue

@@ -14,15 +14,13 @@
               :default-active="activeMenu"
               menu-trigger="hover"
               mode="horizontal"
-              :text-color="variables['menu-color']"
-            >
+              :text-color="variables['menu-color']">
               <template v-for="(route, index) in handleRoutes">
                 <vab-menu
                   v-if="route.meta && !route.meta.hidden"
                   :key="index + route.name"
                   :item="route"
-                  :layout="layout"
-                />
+                  :layout="layout" />
               </template>
             </el-menu>
             <vab-error-log />

+ 2 - 4
src/vab/components/VabLogo/index.vue

@@ -3,8 +3,7 @@
     class="logo-container"
     :class="{
       ['logo-container-' + theme.layout]: true,
-    }"
-  >
+    }">
     <router-link to="/">
       <span class="logo">
         <!-- 使用自定义svg示例 -->
@@ -12,8 +11,7 @@
       </span>
       <span
         class="title"
-        :class="{ 'hidden-xs-only': theme.layout === 'horizontal' }"
-      >
+        :class="{ 'hidden-xs-only': theme.layout === 'horizontal' }">
         {{ title }}
       </span>
     </router-link>

+ 3 - 6
src/vab/components/VabMenu/components/VabMenuItem.vue

@@ -4,22 +4,19 @@
       v-if="itemOrMenu.meta && itemOrMenu.meta.icon"
       :icon="itemOrMenu.meta.icon"
       :is-custom-svg="itemOrMenu.meta.isCustomSvg"
-      :title="translateTitle(itemOrMenu.meta.title)"
-    />
+      :title="translateTitle(itemOrMenu.meta.title)" />
     <span :title="translateTitle(itemOrMenu.meta.title)">
       {{ translateTitle(itemOrMenu.meta.title) }}
     </span>
     <el-tag
       v-if="itemOrMenu.meta && itemOrMenu.meta.badge"
       effect="dark"
-      type="danger"
-    >
+      type="danger">
       {{ itemOrMenu.meta.badge }}
     </el-tag>
     <span
       v-if="itemOrMenu.meta && itemOrMenu.meta.dot"
-      class="vab-dot vab-dot-error"
-    >
+      class="vab-dot vab-dot-error">
       <span />
     </span>
   </el-menu-item>

+ 2 - 4
src/vab/components/VabMenu/components/VabSubmenu.vue

@@ -8,15 +8,13 @@
     v-else
     ref="subMenu"
     :index="itemOrMenu.path"
-    :popper-append-to-body="false"
-  >
+    :popper-append-to-body="false">
     <template slot="title">
       <vab-icon
         v-if="itemOrMenu.meta && itemOrMenu.meta.icon"
         :icon="itemOrMenu.meta.icon"
         :is-custom-svg="itemOrMenu.meta.isCustomSvg"
-        :title="translateTitle(itemOrMenu.meta.title)"
-      />
+        :title="translateTitle(itemOrMenu.meta.title)" />
       <span :title="translateTitle(itemOrMenu.meta.title)">
         {{ translateTitle(itemOrMenu.meta.title) }}
       </span>

+ 4 - 8
src/vab/components/VabMenu/index.vue

@@ -2,28 +2,24 @@
   <component
     :is="menuComponent"
     v-if="item.meta && !item.meta.hidden"
-    :item-or-menu="item"
-  >
+    :item-or-menu="item">
     <template v-if="item.children && item.children.length">
       <el-scrollbar
         v-if="
           (layout === 'horizontal' && item.children.length > 18) ||
           (layout !== 'horizontal' && collapse && item.children.length > 18)
         "
-        class="vab-menu-children-height"
-      >
+        class="vab-menu-children-height">
         <vab-menu
           v-for="route in item.children"
           :key="route.path"
-          :item="route"
-        />
+          :item="route" />
       </el-scrollbar>
       <template v-else>
         <vab-menu
           v-for="route in item.children"
           :key="route.path"
-          :item="route"
-        />
+          :item="route" />
       </template>
     </template>
   </component>

+ 2 - 4
src/vab/components/VabNav/index.vue

@@ -8,8 +8,7 @@
             v-if="layout === 'comprehensive'"
             v-model="extra.first"
             tab-position="top"
-            @tab-click="handleTabClick"
-          >
+            @tab-click="handleTabClick">
             <template v-for="(route, index) in handleRoutes">
               <el-tab-pane :key="index + route.name" :name="route.name">
                 <span slot="label">
@@ -17,8 +16,7 @@
                     v-if="route.meta.icon"
                     :icon="route.meta.icon"
                     :is-custom-svg="route.meta.isCustomSvg"
-                    style="min-width: 16px"
-                  />
+                    style="min-width: 16px" />
                   {{ translateTitle(route.meta.title) }}
                 </span>
               </el-tab-pane>

+ 1 - 2
src/vab/components/VabRefresh/index.vue

@@ -2,8 +2,7 @@
   <vab-icon
     v-if="theme.showRefresh"
     icon="refresh-line"
-    @click="refreshRoute"
-  />
+    @click="refreshRoute" />
 </template>
 
 <script>

+ 7 - 8
src/vab/components/VabSideBar/index.vue

@@ -1,15 +1,16 @@
 <template>
   <el-scrollbar
     class="vab-side-bar"
-    :class="{ 'is-collapse': collapse, 'side-bar-common': layout === 'common' }"
-  >
+    :class="{
+      'is-collapse': collapse,
+      'side-bar-common': layout === 'common',
+    }">
     <vab-logo
       v-if="
         layout === 'vertical' ||
         layout === 'comprehensive' ||
         layout === 'float'
-      "
-    />
+      " />
     <el-menu
       :active-text-color="variables['menu-color-active']"
       :background-color="variables['menu-background']"
@@ -20,14 +21,12 @@
       menu-trigger="click"
       mode="vertical"
       :text-color="variables['menu-color']"
-      :unique-opened="uniqueOpened"
-    >
+      :unique-opened="uniqueOpened">
       <template v-for="(route, index) in handleRoutes">
         <vab-menu
           v-if="route.meta && !route.meta.hidden"
           :key="index + route.name"
-          :item="route"
-        />
+          :item="route" />
       </template>
     </el-menu>
   </el-scrollbar>

+ 8 - 16
src/vab/components/VabTabs/index.vue

@@ -9,25 +9,21 @@
       }"
       type="card"
       @tab-click="handleTabClick"
-      @tab-remove="handleTabRemove"
-    >
+      @tab-remove="handleTabRemove">
       <el-tab-pane
         v-for="item in visitedRoutes"
         :key="item.path"
         :closable="!isNoClosable(item)"
-        :name="item.path"
-      >
+        :name="item.path">
         <span
           slot="label"
           style="display: inline-block"
-          @contextmenu.prevent="openMenu($event, item)"
-        >
+          @contextmenu.prevent="openMenu($event, item)">
           <template v-if="theme.showTabsIcon">
             <vab-icon
               v-if="item.meta && item.meta.icon"
               :icon="item.meta.icon"
-              :is-custom-svg="item.meta.isCustomSvg"
-            />
+              :is-custom-svg="item.meta.isCustomSvg" />
             <!--  如果没有图标那么取第二级的图标 -->
             <vab-icon v-else :icon="item.parentIcon" />
           </template>
@@ -75,21 +71,18 @@
     <ul
       v-if="visible"
       class="contextmenu el-dropdown-menu el-dropdown-menu--small"
-      :style="{ left: left + 'px', top: top + 'px' }"
-    >
+      :style="{ left: left + 'px', top: top + 'px' }">
       <li
         class="el-dropdown-menu__item"
         :class="{ 'is-disabled': visitedRoutes.length === 1 }"
-        @click="closeOthersTabs"
-      >
+        @click="closeOthersTabs">
         <vab-icon icon="close-line" />
         <span>{{ translateTitle('关闭其他') }}</span>
       </li>
       <li
         class="el-dropdown-menu__item"
         :class="{ 'is-disabled': !visitedRoutes.indexOf(hoverRoute) }"
-        @click="closeLeftTabs"
-      >
+        @click="closeLeftTabs">
         <vab-icon icon="arrow-left-line" />
         <span>{{ translateTitle('关闭左侧') }}</span>
       </li>
@@ -99,8 +92,7 @@
           'is-disabled':
             visitedRoutes.indexOf(hoverRoute) === visitedRoutes.length - 1,
         }"
-        @click="closeRightTabs"
-      >
+        @click="closeRightTabs">
         <vab-icon icon="arrow-right-line" />
         <span>{{ translateTitle('关闭右侧') }}</span>
       </li>

+ 3 - 6
src/vab/layouts/VabLayoutColumn/index.vue

@@ -5,22 +5,19 @@
     :class="{
       fixed: fixedHeader,
       'no-tabs-bar': !showTabs,
-    }"
-  >
+    }">
     <vab-column-bar />
     <div
       class="vab-main"
       :class="{
         ['vab-main-' + theme.columnStyle]: true,
         'is-collapse-main': collapse,
-      }"
-    >
+      }">
       <div
         class="vab-layout-header"
         :class="{
           'fixed-header': fixedHeader,
-        }"
-      >
+        }">
         <vab-nav />
         <vab-tabs v-show="showTabs" />
       </div>

+ 4 - 8
src/vab/layouts/VabLayoutCommon/index.vue

@@ -5,14 +5,12 @@
     :class="{
       fixed: fixedHeader,
       'no-tabs-bar': !showTabs,
-    }"
-  >
+    }">
     <div
       class="vab-layout-header"
       :class="{
         'fixed-header': fixedHeader,
-      }"
-    >
+      }">
       <vab-header layout="common" />
       <div>
         <vab-side-bar layout="common" />
@@ -21,8 +19,7 @@
           class="vab-main"
           :class="{
             'is-collapse-main': collapse,
-          }"
-        >
+          }">
           <vab-tabs layout="common" />
         </div>
       </div>
@@ -31,8 +28,7 @@
       class="vab-main main-padding"
       :class="{
         'is-collapse-main': collapse,
-      }"
-    >
+      }">
       <vab-app-main />
     </div>
   </div>

+ 3 - 6
src/vab/layouts/VabLayoutComprehensive/index.vue

@@ -5,21 +5,18 @@
     :class="{
       fixed: fixedHeader,
       'no-tabs-bar': !showTabs,
-    }"
-  >
+    }">
     <vab-side-bar layout="comprehensive" />
     <div
       class="vab-main"
       :class="{
         'is-collapse-main': collapse,
-      }"
-    >
+      }">
       <div
         class="vab-layout-header"
         :class="{
           'fixed-header': fixedHeader,
-        }"
-      >
+        }">
         <vab-nav layout="comprehensive" />
         <vab-tabs v-show="showTabs" />
       </div>

+ 2 - 4
src/vab/layouts/VabLayoutFloat/index.vue

@@ -5,16 +5,14 @@
     :class="{
       fixed: fixedHeader,
       'no-tabs-bar': !showTabs,
-    }"
-  >
+    }">
     <vab-side-bar layout="float" />
     <div class="vab-main">
       <div
         class="vab-layout-header"
         :class="{
           'fixed-header': fixedHeader,
-        }"
-      >
+        }">
         <vab-nav layout="float" />
         <vab-tabs v-show="showTabs" />
       </div>

+ 3 - 6
src/vab/layouts/VabLayoutHorizontal/index.vue

@@ -5,21 +5,18 @@
     :class="{
       fixed: fixedHeader,
       'no-tabs-bar': !showTabs,
-    }"
-  >
+    }">
     <div
       class="vab-layout-header"
       :class="{
         'fixed-header': fixedHeader,
-      }"
-    >
+      }">
       <vab-header />
       <div
         v-show="showTabs"
         :class="{
           'vab-tabs-horizontal': showTabs,
-        }"
-      >
+        }">
         <div class="vab-main">
           <vab-tabs />
         </div>

+ 4 - 8
src/vab/layouts/VabLayoutVertical/index.vue

@@ -5,26 +5,22 @@
     :class="{
       fixed: fixedHeader,
       'no-tabs-bar': !showTabs,
-    }"
-  >
+    }">
     <vab-side-bar />
     <div
       v-if="device === 'mobile' && !collapse"
       class="v-modal"
-      @click="handleFoldSideBar"
-    />
+      @click="handleFoldSideBar" />
     <div
       class="vab-main"
       :class="{
         'is-collapse-main': collapse,
-      }"
-    >
+      }">
       <div
         class="vab-layout-header"
         :class="{
           'fixed-header': fixedHeader,
-        }"
-      >
+        }">
         <vab-nav />
         <vab-tabs v-show="showTabs" />
       </div>

+ 1 - 2
src/vab/layouts/index.vue

@@ -5,8 +5,7 @@
       :collapse="collapse"
       :device="device"
       :fixed-header="theme.fixedHeader"
-      :show-tabs="theme.showTabs"
-    />
+      :show-tabs="theme.showTabs" />
     <el-backtop target="#app" />
   </div>
 </template>

+ 2 - 4
src/views/403.vue

@@ -6,12 +6,10 @@
           <div class="pic-error">
             <el-image
               class="pic-error-parent"
-              :src="require('@/assets/error_images/403.png')"
-            />
+              :src="require('@/assets/error_images/403.png')" />
             <el-image
               class="pic-error-child left"
-              :src="require('@/assets/error_images/cloud.png')"
-            />
+              :src="require('@/assets/error_images/cloud.png')" />
           </div>
         </el-col>
 

+ 2 - 4
src/views/404.vue

@@ -6,12 +6,10 @@
           <div class="pic-error">
             <el-image
               class="pic-error-parent"
-              :src="require('@/assets/error_images/404.png')"
-            />
+              :src="require('@/assets/error_images/404.png')" />
             <el-image
               class="pic-error-child left"
-              :src="require('@/assets/error_images/cloud.png')"
-            />
+              :src="require('@/assets/error_images/cloud.png')" />
           </div>
         </el-col>
 

+ 6 - 12
src/views/login/index.vue

@@ -10,8 +10,7 @@
           class="login-form"
           label-position="left"
           :model="form"
-          :rules="rules"
-        >
+          :rules="rules">
           <div class="title">hello !</div>
           <div class="title-tips">
             {{ translateTitle('欢迎来到') }}{{ title }}!
@@ -22,8 +21,7 @@
               v-focus
               :placeholder="translateTitle('请输入用户名')"
               tabindex="1"
-              type="text"
-            >
+              type="text">
               <template #prefix><vab-icon icon="user-line" /></template>
             </el-input>
           </el-form-item>
@@ -35,8 +33,7 @@
               :placeholder="translateTitle('请输入密码')"
               tabindex="2"
               :type="passwordType"
-              @keyup.enter.native="handleLogin"
-            >
+              @keyup.enter.native="handleLogin">
               <template #prefix>
                 <vab-icon icon="lock-line" />
               </template>
@@ -44,15 +41,13 @@
                 <vab-icon
                   class="show-password"
                   icon="eye-off-line"
-                  @click="handlePassword"
-                />
+                  @click="handlePassword" />
               </template>
               <template v-else #suffix>
                 <vab-icon
                   class="show-password"
                   icon="eye-line"
-                  @click="handlePassword"
-                />
+                  @click="handlePassword" />
               </template>
             </el-input>
           </el-form-item>
@@ -60,8 +55,7 @@
             class="login-btn"
             :loading="loading"
             type="primary"
-            @click="handleLogin"
-          >
+            @click="handleLogin">
             {{ translateTitle('登录') }}
           </el-button>
         </el-form>