# 克隆项目
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的。
# 动态选择组件 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>
cheap-source-map调试模式没有完全编译展示我们的源代码
我们改成source-map调试模式,这时候再来看Sources的App.vue文件,已经和源代码显示的一样,在这样的环境下调试我们会更加方便
但是source-map有一个缺点,每当我们程序有改动时,也需要同步生成source-map文件,这样会使我们构建变慢,在实际开发过程中推荐使用eval,以增加构建速度 在需要调试的时候使用source-map
删除scr/views下的源码, 保留:
dashboard:首页
error-page:异常页面
login:登录
redirect:重定向
对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
进入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/