主要思路:
- 单模块写Mock函数,模块内函数返回一个Mock配置项 —— url, type, data
- 通过一个文件,统筹管理所有模块(实现对某模块所有Mock的开关)
const mod = require('./mod')
// 通过一个开关来决定是否执行模块内的代码
function fnCreate(mod, isOpen = true) {
if (isOpen) {
for (let key in mod) {
;((res => {
if (res.isOpen !== false) {
Mock.mock(res.url, res.type, (res) => {
return res.data
})
}
}))(mod[key]() || {})
}
}
}
import * as sysMenu from './modules/sys-menu'
import * as onlyMenu from './modules/only-menu'
import * as marketDiscount from './modules/market-discount'
// tips
// 1. 开启/关闭[业务模块]拦截, 通过调用fnCreate方法[isOpen参数]设置.
// 2. 开启/关闭[业务模块中某个请求]拦截, 通过函数返回对象中的[isOpen属性]设置.
// 登录、菜单、角色选择相关
fnCreate(sysMenu, false)
fnCreate(onlyMenu, false)
fnCreate(marketDiscount, false)
/**
* 创建mock模拟数据
* @param {*} mod 模块
* @param {*} isOpen 是否开启?
*/
function fnCreate(mod, isOpen = true) {
if (isOpen) {
for (let key in mod) {
;((res) => {
if (res.isOpen !== false) {
Mock.mock(new RegExp(res.url), res.type, (opts) => {
opts['data'] = opts.body
delete opts.body
console.log('\n')
console.log('%cmock拦截, 请求: ', 'color:blue', opts)
console.log('%cmock拦截, 响应: ', 'color:blue', res.data)
return res.data
})
}
})(mod[key]() || {})
}
}
}