import mockjs from 'mockjs'; import { format, delay } from 'roadhog-api-doc'; import { campusList } from './mock/campus'; import { terminalList } from './mock/terminal'; import { merchantList } from './mock/merchant'; import { resourceList } from './mock/resource'; import { signature } from './mock/signature'; import { groupList } from './mock/group'; import { tagList } from './mock/tag'; import * as api from './src/utils/api'; // mock数据持久化 global.campusList = campusList; global.terminalList = terminalList; global.merchantList = merchantList; global.resourceList = resourceList; global.groupList = groupList; global.tagList = tagList; global.signature = signature; // 操作成功响应内容 const SUCCESS = { code: 200, success: true, message: null }; // 资源未找到响应内容 const NOTFOUND = { code: 404, message: 'Not Found!' }; // 查询 const query = (dataset, params) => { const pageSize = parseInt(params.pageSize) || 10; const pageNo = parseInt(params.pageNo) || 1; delete params['pageSize']; delete params['pageNo']; const queryKeys = Object.keys(params); const newDataset = dataset.filter(item => { let flag = true; for (let key of queryKeys) { if (item[key] !== params[key]) { flag = false; break; } } return flag; }); const totalSize = newDataset.length || 0; const list = newDataset.slice(pageSize * (pageNo - 1), pageSize * pageNo); return { ...SUCCESS, data: { pageSize, pageNo, totalSize: newDataset.length, list } }; } // 添加 const create = (dataset, params) => { const last = dataset[dataset.length - 1]; const data = { ...params, id: last.id + 1 }; dataset.push(data); return { ...SUCCESS, data, }; } // 更新 const update = (dataset, params) => { for (let index in dataset) { if (dataset[index].id === params.id) { dataset[index] = { ...dataset[index], ...params }; } } return { ...SUCCESS, } } const queryArray = (array, key, keyAlias = 'key') => { if (!(array instanceof Array)) { return null } let data for (let item of array) { if (item[keyAlias] === key) { data = item break } } if (data) { return data } return null } // 查询一条 const queryOne = (dataset, id, res) => { const target = queryArray(dataset, id, 'id'); if (target) { res.send({ ...SUCCESS, data: { ...target } }); } else { res.send({ ...NOTFOUND, data: {} }); } } // 删除 const remove = (dataset, id, res) => { const data = queryArray(dataset, id, 'id'); if (data) { dataset.map(item => { item.id === data.id ? item.status = 'DEL' : null }); res.send(SUCCESS); } else { res.send(NOTFOUND); } } // mock数据 const proxy = { // 资源 [`POST ${api.resource.replace('/:id', '')}`]: (req, res) => { res.send(create(global.resourceList, req.body)); }, [`DELETE ${api.resource}`]: (req, res) => { const { id } = req.params; remove(global.resourceList, id, res); }, [`PUT ${api.resource.replace('/:id', '')}`]: (req, res) => { res.send(update(global.resourceList, req.body)); }, [`GET ${api.resources}`]: (req, res) => { res.send(query(global.resourceList, req.query)); }, [`GET ${api.signature}`]: (req, res) => { res.send({ ...SUCCESS, data: global.signature }); }, // 校区 [`GET ${api.campuses}`]: (req, res) => { res.send(query(global.campusList, req.query)); }, [`POST ${api.campus.replace('/:id', '')}`]: (req, res) => { res.send(create(global.campusList, req.body)); }, [`PUT ${api.campus.replace('/:id', '')}`]: (req, res) => { res.send(update(global.campusList, req.body)); }, // 终端 [`GET ${api.terminals}`]: (req, res) => { res.send(query(global.terminalList, req.query)); }, [`POST ${api.terminal.replace('/:id', '')}`]: (req, res) => { res.send(create(global.terminalList, req.body)); }, [`PUT ${api.terminal.replace('/:id', '')}`]: (req, res) => { res.send(update(global.terminalList, req.body)); }, [`DELETE ${api.terminal}`]: (req, res) => { const { id } = req.params; remove(global.terminalList, id, res); }, // 厂商 [`POST ${api.merchant.replace('/:id', '')}`]: (req, res) => { res.send(create(global.merchantList, req.body)); }, [`DELETE ${api.merchant}`]: (req, res) => { const { id } = req.params; remove(global.merchantList, id, res); }, [`PUT ${api.merchant.replace('/:id', '')}`]: (req, res) => { res.send(update(global.merchantList, req.body)); }, [`GET ${api.merchants}`]: (req, res) => { res.send(query(global.merchantList, req.query)); }, [`GET ${api.merchant}`]: (req, res) => { const { id } = req.params; queryOne(global.merchantList, id, res); }, // 标签组 [`POST ${api.group.replace('/:id', '')}`]: (req, res) => { res.send(create(global.groupList, req.body)); }, [`DELETE ${api.group}`]: (req, res) => { const { id } = req.params; remove(global.groupList, id, res); }, [`PUT ${api.group.replace('/:id', '')}`]: (req, res) => { res.send(update(global.groupList, req.body)); }, [`GET ${api.groups}`]: (req, res) => { console.log(`[${api.groups}]`, req.query); res.send(query(global.groupList, req.query)); }, [`GET ${api.group}`]: (req, res) => { const { id } = req.params; queryOne(global.groupList, id, res); }, // 标签 [`POST ${api.tag.replace('/:id', '')}`]: (req, res) => { res.send(create(global.tagList, req.body)); }, [`DELETE ${api.tag}`]: (req, res) => { const { id } = req.params; remove(global.tagList, id, res); }, [`PUT ${api.tag.replace('/:id', '')}`]: (req, res) => { res.send(update(global.tagList, req.body)); }, [`GET ${api.tags}`]: (req, res) => { console.log(`[${api.tags}]`, req.query); res.send(query(global.tagList, req.query)); }, [`GET ${api.tag}`]: (req, res) => { console.log(`[${api.tag}]`, req.params); const { id } = req.params; queryOne(global.tagList, id, res); }, }; // 是否禁用代理 const noProxy = process.env.NO_PROXY === 'true'; // 根据是否禁用代理来选择是mock数据还是真实接口 export default noProxy ? {} : delay(proxy, 500); // export default noProxy ? {} : proxy;