# 快速构建
# 全局安装脚本
npm install -g vue-easy-admin
# 快速构建项目
easy-admin create projectName
# 下载依赖
npm install
# 运行
npm run serve
# 打包
npm run build
# 发布
npm run deploy
# 目录结构
通过手脚架已经为你生成了一个完整的开发框架,下面是整个项目的目录结构。
├── dist # 打包后资源
├── public # 静态资源
│ │── favicon.ico # favicon图标
│ │── 其他文件 # 将会拷贝到dist/public
│ └── index.html # html模板
├── src # 源代码
│ ├── components # 全局公用组件,自动注入
│ ├── pages # 页面
│ │ ├── full # 不包含菜单、头部布局的页面,如登录页面
│ │ └── local # 包含菜单、头部布局的页面
│ │ └─── pageName # 页面名称,路由自动以名字构建
│ │ ├── api.js # API封装,在此处处理后端数据与前端数据格式,目的解耦前后端数据,避免污染逻辑层
│ │ ├── config.json # 页面级别的服务配置文件
│ │ ├── const.js # 页面使用到的常量
│ │ ├── index.vue # 界面展示文件
│ │ ├── lang.json # 多语言配置文件
│ │ └── mock.js # API数据模拟
│ ├── svg # 图片文件目录,自动加载打包为精灵图
│ └── theme # 主题文件
├── .eslintrc.js # eslint 配置项
├── .gitignore # git提交忽略配置
├── .babel.config.js # babel配置
├── config.js # 全局服务配置文件
├── container.js # webpack配置
├── deploy.sh # 发布脚本
├── globLang # 全局多语言
├── mock.js # 全局API数据模拟
├── permission.json # 生成的权限文件,提供给后端数据库的
└── package.json # package.json
# 新增菜单页
# 新增菜单页脚本
easy-admin add local pageName
# 新增菜全屏页脚本
easy-admin add full pageName
# 页面级别服务配置-config.js
{
"nav": {
"title": "页面1", // 页面标题
"icon": "dashboard", // 菜单页图标,svg文件夹下svg文件名
"parents": [ // 父菜单名称
"菜单1",
{ // 多语言配置
"en": "nav1-1",
"zh-CN": "菜单1-1"
}
],
"noCache": true, // 打开多标签时,是否缓存该页面,默认缓存
"isWhite": true, // 将页面添加到白名单,无需权限,即可访问
"noCache": true, // 打开多标签时,是否缓存该页面,默认缓存
"priority": 1, // 页面优先级,用于菜单排序
},
"iframe": {
"src": "https://www.baidu.com" // 菜单页以iframe形式内嵌的第三方应用
},
"link": "https://github.com/fastCreator/vue-easy-admin" // 点击菜单直接打开第三方页面
"permission": { // 权限配置
"apis": [ // 页面基础API权限
"get:/v1/apis/testData/{id}"
],
"goPages": [ // 需要跳转的公共页配置
"local/page2"
],
"function": [ // 功能按钮配置
{
"code": "add", // 功能标识
"title": "新增", // 功能名
"apis": [ // 功能需要的API权限配置
"post:/platform/v1/add"
],
"goPages": [
"local/page2" // 功能需要跳转的公共页配置
]
}
]
}
}
# 数据转换-api.js
api.js 存在为了转化后端数据,使之与前端所需数据格式一致;不写在页面中,为了解除后端数据格式与前端业务之间的耦合
api 中的 this 指向该页面实例,为了解决特殊情况,原则上,只允许调用 this.$net,进行网络请求,转换前后端数据格式
export default {
getTestData() {
this.$net('get:/v1/apis/testData/{id}', { params: { id: 1 } })
}
}
# 多语言配置-lang.json
在页面中直接使用 this.$lang.langKey 即可直接使用
{
"langKey": {
"zh-CN": "登录表单",
"en": "login from"
}
}
# 常量定义-const.js
// 可以引用多语言
export default function({ $lang, $globLang }) {
return {
sex: [
{ label: $globLang.man, value: 0 },
{ label: $globLang.woman, value: 1 }
]
}
}
# 数据模拟-mock.js
- 数据模拟复用的 webpack 中的 express 服务
- 随着文件更改而更新服务
- 可以在浏览器中看到 http 请求,方便调试
- delay(毫秒),便于模拟接口响应速度
- 额外:在全局配置文件中配置 request.mock=true 开启的是浏览器请求拦截,无法发送 http 请求
module.exports = {
async 'post:/v1/apis/login' (req,delay) {
delay(1000)
return { code: 200, data: { token: 'token1' } }
}
}
# 全局配置
# webpack 配置-container.js
module.exports = {
// webpack链式修改
// https://github.com/Yatoo2018/webpack-chain/tree/zh-cmn-Hans
chainWebpack (config) {
...
},
// webpack merge混入
configureWebpack: {
...
}
}
# 全局服务配置-config.js
// 配套组件库
import vueEasyAdminComponents from 'vue-easy-admin-components'
export default {
init (service) { // vueRender前,用户初始化代码
...
},
iass: { // 基础服务代码
...
},
sass: { // 交互服务代码
...
}
}