npm i @craco/craco -D
module.exports = {
babel: { // 自定babel配置
presets: [],
plugins: [],
loaderOptions: {
}
},
webpack: { // 定义webpack别名 添加插件
alias: {},
plugins: {
add: [], /* An array of plugins */
}
},
devServer: { // 自定义服务器
}
};
"scripts": {
"start": "craco start",
"build": "craco build",
"test": "craco test",
"eject": "react-scripts eject"
}
注意:修改完配置 要重启
/admin admin 二级路由 仪表盘 商品管理 增加商品 更新商品 消息中心 设置 登录页 404页
意义:前端分离开发,前后端 是同时进行的,前端开发时 后端接口还没好,可以自己模拟接口(正常发送ajax,注意 返回的模拟接口字段 一定要和真实字段保持一致)
原理:生成随机数,拦截ajax请求
npm i mockjs -D
const Mock = require('mockjs');
// 模拟接口 两个参数 1 接口地址 2 返回的数据
Mock.mock('/api/itemLists', {
code: 200,
msg: 'success',
"data|20": [
]
})
// 修饰长度 (写在字段名中) 数组 number(大小) 字符串 id(+1)
{
"data|10": [] // 数组长度是10
}
{
"data|10-20": [] // 数组长度是10到20之间
}
{
"num|10-100": 10 // 产生10-100的随机数字
}
{
"str|5-10": "☆" // 产生5-10 ☆ 也可以固定长度
}
{
"id|+1":1 // 一般写在数组 自增1 初始值1 从1 开始
}
// 占位符 定义在 值中 写在引号中
{
"data|10-20": [
{
"id|+1": 1,
itemName: '@ctitle', //产生随机中文标题
desc: '@cparagraph',
color: '@color',
thumb:"image('100x100', '@color', '小甜甜')"
}
]
}
类型 方法 Basic boolean, natural, integer, float, character, string, range, date, time, datetime, now Image image, dataImage Color color Text paragraph, sentence, word, title, cparagraph, csentence, cword, ctitle Name first, last, name, cfirst, clast, cname Web url, domain, email, ip, tld Address area, region Helper capitalize, upper, lower, pick, shuffle
占位符有:
类型 | 方法 |
---|---|
Basic | boolean, natural, integer, float, character, string, range, date, time, datetime, now |
Image | image, dataImage |
Color | color |
Text | paragraph, sentence, word, title, cparagraph, csentence, cword, ctitle |
Name | first, last, name, cfirst, clast, cname |
Web | url, domain, email, ip, tld |
Address | area, region |
Helper | capitalize, upper, lower, pick, shuffle |
Miscellaneous | guid, id |
可以真实发送请求,利用mockjs产生这个接口返回数据随机值
静态 角色基本固定(不会随时改变) 实现思路: 所有权限路由在前端定义好,每个路由规则中定义一个 roles字段,代表该路由可以访问的所有的角色的数组 鉴权: 1 定义一个没有权限路由(页面),在路由拦截中判断登录时缓存的role是否在当前路由的 roles字段中,包含可以访问当前路由 放行 否则 重定向到 没有权限这个页面 ```js router.beforeEach(() => {
})
```
2 直接挂载routes之前 对于 routes做 filter过滤,将当前用户角色无法访问路由直接 过滤掉
let routes = []
routes = routes.filter()
const router = new VueRouter({
routes
})
优点: 实现思路简单,不需要后端怎么配合 缺点: 用户角色包括路由是在前端定死的,如果后续想要新增 角色,需要 重新 修改开发环境代码,再重新部署到服务器上 适用于: 角色比较固定的 后台管理项目
动态 在前端,只定义 基础路由,角色权限路由 存储在数据库中,用户在登录时,拿到token,再发请求传token,得到当前角色 所有的路由表,缓存起来,vue,路由的前置守卫中,取缓存 通过 router.addRoutes 动态添加 (router.addRoute) 优点: 动态路由,可以随时增加新的角色 只需要修改数据库即可,不需要重新部署项目 缺点: 代码有点复杂
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。