vue-element-admin框架二次开发学习内容整理

vue-element-admin框架二次开发学习内容整理

  • 安装
  • 发布
  • 了解项目结构
  • 关于代理
  • 关于跨域
  • 知识点
  • 项目BUG
  • 项目精简
  • 项目配置
  • 资料来源

安装

# 克隆项目
git clone https://github.com/PanJiaChen/vue-element-admin.git

# 进入项目目录
cd vue-element-admin

# 在项目根目录下添加一个.npmrc文件,内容如下。
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
registry=https://registry.npm.taobao.org

# 安装依赖,建议不要用 cnpm 安装 会有各种诡异的bug 可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npm.taobao.org

# 本地开发 启动项目
npm run dev

发布

# 构建测试环境
npm run build:stage

# 构建生产环境
npm run build:prod

# 预览发布环境效果
npm run preview

# 预览发布环境效果 + 静态资源分析
npm run preview -- --report

# 代码格式检查
npm run lint

# 代码格式检查并自动修复
npm run lint -- --fix

了解项目结构

src/components 目录下有多个页面,页面包括(echart、Excel、图片上传等)
src/api 请求接口访问,vue-axios
src/assets 静态资源文件
src/mock  模拟数据
src/router 路由

direcetive :自定义指令
filters :过滤器
icons :图标
App.vue :父组件,其他的组件都是嵌套在App.vue里
main.js :全局入口文件,将App.vue设置为全局父组件进行渲染
permissions.js :登录的校验和登录之后的路由跳转
setting.js :配置文件

views里是视图上直接出现的组件
store对应着vuex
layout是每个页面都存在的一些东西,比如侧边栏导航栏之类的
permission.js做的权限路由,里面主要是两个导航守卫
style存全局css样式的地方。
utils里是一些自己可能复用到的方法。用于其他地方调用,如:
	auth.js 读写删token的地方,需要自己改
	request.js, 这个其实是对axios请求的封装,配置一些相同的东西,比如
		baseURL: '/api',
		headers: {
		    'Content-Type': 'application/json'
		}
vue-config.js 配置代理
	proxy: {
      '/api': {
        target: 'http://localhost:8080', # target是服务器的地址
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }

关于代理

前端不能直接去对其他ip发起请求,但是如果你先发给本机的服务器(代理),再由本机的服务器去向后端请求,那就不存在跨域问题了。
经过我对开发者工具中network的查看,请求的ip依旧是本机的ip,这就代表这个代理,对于浏览器来说,其实是不可见的过程。

关于跨域

axios请求不携带cookie

this.axios.defaults.withCredentials = true;// 跨域携带cookie

在跨域的情况下不仅前端要设置withCredentials,后端也是要设置Access-Control-Allow-Credentials的。

知识点

  • 在element的很多地方都可以用插槽slot,比如把原本只能是文字的地方加个图片啥的(这个好像是vue的东西)
# 动态选择组件  is确定组件名

<el-form :model="form">
        <el-table border fit :data="form.info">
          <el-table-column label="职位" align="center">
            <template slot-scope="scope">
              <el-form-item class="form-item" style="margin-bottom:0;">
                <span>{{ scope.row.post }}</span>
              </el-form-item>
            </template>
		  </el-table-column>
  • 打开vue.config.js文件,找到如下图的位置
    vue-element-admin框架二次开发学习内容整理_第1张图片

cheap-source-map调试模式没有完全编译展示我们的源代码
我们改成source-map调试模式,这时候再来看Sources的App.vue文件,已经和源代码显示的一样,在这样的环境下调试我们会更加方便
但是source-map有一个缺点,每当我们程序有改动时,也需要同步生成source-map文件,这样会使我们构建变慢,在实际开发过程中推荐使用eval,以增加构建速度 在需要调试的时候使用source-map

项目BUG

  • style中要改一个element的table的bug,也就是windows上表头对不齐

项目精简

  1. 删除scr/views下的源码, 保留:

     dashboard:首页
     error-page:异常页面
     login:登录
     redirect:重定向
    
  2. 对src/router/index 进行相应修改

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

/* Layout */
import Layout from '@/layout'

/**
 * Note: sub-menu only appear when route children.length >= 1
 * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
 *
 * hidden: true                   if set true, item will not show in the sidebar(default is false)
 * 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 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)
    title: 'title'               the name show in sidebar and breadcrumb (recommend set)
    icon: 'svg-name'             the icon show in the sidebar
    noCache: true                if set true, the page will no be cached(default is false)
    affix: true                  if set true, the tag will affix in the tags-view
    breadcrumb: false            if set false, the item will hidden in breadcrumb(default is true)
    activeMenu: '/example/list'  if set path, the sidebar will highlight the path you set
  }
 */

/**
 * constantRoutes
 * a base page that does not have permission requirements
 * all roles can be accessed
 */
export const constantRoutes = [
  {
    path: '/redirect',
    component: Layout,
    hidden: true,
    children: [
      {
        path: '/redirect/:path(.*)',
        component: () => import('@/views/redirect/index')
      }
    ]
  },
  {
    path: '/login',
    component: () => import('@/views/login/index'),
    hidden: true
  },
  {
    path: '/auth-redirect',
    component: () => import('@/views/login/auth-redirect'),
    hidden: true
  },
  {
    path: '/404',
    component: () => import('@/views/error-page/404'),
    hidden: true
  },
  {
    path: '/401',
    component: () => import('@/views/error-page/401'),
    hidden: true
  },
  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    children: [
      {
        path: 'dashboard',
        component: () => import('@/views/dashboard/index'),
        name: 'Dashboard',
        meta: { title: 'Dashboard', icon: 'dashboard', affix: true }
      }
    ]
  }
]

/**
 * asyncRoutes
 * the routes that need to be dynamically loaded based on user roles
 */
export const asyncRoutes = [
  // 404 page must be placed at the end !!!
  { path: '*', redirect: '/404', hidden: true }
]

const createRouter = () => new Router({
  // mode: 'history', // require service support
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})

const router = createRouter()

// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher // reset router
}

export default router


  1. 删除 src/router/modules 文件夹
  2. 删除 src/vendor文件夹

项目配置

进入src目录下的settings.js配置文件

module.exports = {
  title: 'Project Title', # 项目标题
  showSettings: true, # 设置是否显示控制面板,设置为false则不显示
  tagsView: true, # 是我们打开某个页面是否有页面标签
  fixedHeader: false, # 内容页面向下滑动时头部是否固定,false是不固定, true是固定
  sidebarLogo: false, # 控制菜单栏上方是否显示图标
  errorLog: 'production'
}

资料来源

https://panjiachen.github.io/vue-element-admin-site/zh/guide
https://www.cnblogs.com/angelasp/p/12159902.html
https://blog.csdn.net/sky1679/article/details/90905198
https://www.freesion.com/article/8200377688/

你可能感兴趣的:(前端)