index.js 3 KB
import Mock from 'mockjs';
import { parse } from './util';
import moduleAPI from '@/api-mock/module';

let MockCache = {};

const MockBot = {
  // 通用模板API
  fastAPI: {
    // 获取数据列表
    page: (base) => config => {
      const list = MockCache[base] || [];
      const param = parse(config.url) || {};
      const { page = 1, size = 10, ...query } = param;
      // 计算有几个搜索条件
      let queryCount = false;
      for (let key in query) {
        if (query[key]) {
          queryCount += 1;
          break;
        }
      }
      // 根据搜索条件过滤结果
      const filteredList = queryCount > 0 ? list.filter(data => {
        let result = false;
        for (let key in query) {
          if (data[key] === query[key]) {
            result = true;
            break;
          }
        }
        return result;
      }) : list;
      // 根据结果处理分页数据
      const _page = Number(page);
      const _limit = Number(size);
      const pageList = filteredList.filter((item, index) => index < _limit * _page && index >= _limit * (_page - 1));
      const response = {
        page: _page,
        size: _limit,
        result: {
          list: pageList,
          total: filteredList.length,
        },
        code: 0,
      };
      return response;
    },
    // 查询数据详情
    get: (base) => config => {
      const list = MockCache[base] || [];
      const arr = config.url.split('/');
      const id = arr[arr.length - 1];
      const result = list.find((item) => item.id == id);
      return {
        result: result,
        code: 0,
      };
    },
    // 新增数据
    add: (base) => config => {
      const param = JSON.parse(config.body);
      MockCache[base].unshift(param);
      return {
        code: 0,
      };
    },
    // 编辑数据
    update: (base) => config => {
      const param = JSON.parse(config.body);
      const index = MockCache[base].findIndex(item => item.id === param.id);
      MockCache[base][index] = param;
      return {
        code: 0,
      };
    },
    // 删除数据
    delete: (base) => config => {
      const ids = JSON.parse(config.body);
      ids.forEach(id => {
        MockCache[base] = MockCache[base].filter(item => item.id !== id);
      });
      return {
        code: 0,
      };
    }
  },
  // 根据通用模板API快速创建模拟接口
  fastMock: (url, list) => {
    MockCache[url] = list;
    Mock.mock(new RegExp(`\/${url}\/page`), 'get', MockBot.fastAPI.page(url));
    Mock.mock(new RegExp(`\/${url}\/get`), 'get', MockBot.fastAPI.get(url));
    Mock.mock(new RegExp(`\/${url}\/get/id`), 'get', MockBot.fastAPI.get(url));
    Mock.mock(new RegExp(`\/${url}\/info/id`), 'get', MockBot.fastAPI.get(url));
    Mock.mock(new RegExp(`\/${url}\/add`), 'post', MockBot.fastAPI.add(url));
    Mock.mock(new RegExp(`\/${url}\/update`), 'post', MockBot.fastAPI.update(url));
    Mock.mock(new RegExp(`\/${url}\/delete`), 'post', MockBot.fastAPI.delete(url));
  },
}

// 产品管理
MockBot.fastMock('product', moduleAPI.product);