import Mock from 'mockjs' import qs from 'qs' import withCredentials from './patch/withCredentials' /* 补丁 */ withCredentials(Mock) /* Mock 默认配置 */ Mock.setup({ timeout: '200-300' }) /* 扩展 [生成器] */ const Generator = (prop, template) => { const obj = {} obj[prop] = [template] return Mock.mock(obj) } /* 扩展 [循环] */ const Repeat = (num, itemTemplate) => Generator(`data|${num}`, itemTemplate).data const CustomExtends = { Generator, Repeat, Mock, Random: Mock.Random } const extend = (prop, value) => { CustomExtends[prop] = value } /* 装配配置组 */ const wired = ({ url, type, body }) => ({ method: type, params: qs.parse(url.split('?').length > 1 ? url.split('?')[1] : ''), body: JSON.parse(body), url: qs.parse(url.split('?')[0]), ...CustomExtends }) const setup = (path, method, handle) => { Mock.mock( RegExp(path), method, typeof handle === 'function' ? o => handle(wired(o)) : handle ) } const load = (collection) => { collection.map(({ path, method, handle }) => { if (method === '*') { method = [ 'get', 'head', 'post', 'put', 'delete', 'connect', 'options', 'trace', 'patch' ] } if (typeof method === 'string' && method.indexOf('|') > -1) method = method.split('|') if (method instanceof Array) { method.map(item => setup(path, item, handle)) } else { setup(path, method, handle) } }) } export default { setup, load, extend }