主要思路:

    • 单模块写Mock函数,模块内函数返回一个Mock配置项 —— url, type, data
    • 通过一个文件,统筹管理所有模块(实现对某模块所有Mock的开关)
      1. const mod = require('./mod')
      2. // 通过一个开关来决定是否执行模块内的代码
      3. function fnCreate(mod, isOpen = true) {
      4. if (isOpen) {
      5. for (let key in mod) {
      6. ;((res => {
      7. if (res.isOpen !== false) {
      8. Mock.mock(res.url, res.type, (res) => {
      9. return res.data
      10. })
      11. }
      12. }))(mod[key]() || {})
      13. }
      14. }
      15. }
    1. import * as sysMenu from './modules/sys-menu'
    2. import * as onlyMenu from './modules/only-menu'
    3. import * as marketDiscount from './modules/market-discount'
    4. // tips
    5. // 1. 开启/关闭[业务模块]拦截, 通过调用fnCreate方法[isOpen参数]设置.
    6. // 2. 开启/关闭[业务模块中某个请求]拦截, 通过函数返回对象中的[isOpen属性]设置.
    7. // 登录、菜单、角色选择相关
    8. fnCreate(sysMenu, false)
    9. fnCreate(onlyMenu, false)
    10. fnCreate(marketDiscount, false)
    11. /**
    12. * 创建mock模拟数据
    13. * @param {*} mod 模块
    14. * @param {*} isOpen 是否开启?
    15. */
    16. function fnCreate(mod, isOpen = true) {
    17. if (isOpen) {
    18. for (let key in mod) {
    19. ;((res) => {
    20. if (res.isOpen !== false) {
    21. Mock.mock(new RegExp(res.url), res.type, (opts) => {
    22. opts['data'] = opts.body
    23. delete opts.body
    24. console.log('\n')
    25. console.log('%cmock拦截, 请求: ', 'color:blue', opts)
    26. console.log('%cmock拦截, 响应: ', 'color:blue', res.data)
    27. return res.data
    28. })
    29. }
    30. })(mod[key]() || {})
    31. }
    32. }
    33. }