12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import { get } from 'lodash';
- const signMappings = {
- [`^[%](.*(?=))[%]$`]: { pos: 1, deal: val => new RegExp(val) },
- [`^[@]([^=].*)`]: { pos: 1, deal: val => ({ $gt: val }) },
- [`^([@][=])(.*)`]: { pos: 1, deal: val => ({ $gte: val }) },
- [`(.*[=])[@]$`]: { pos: 1, deal: val => ({ $lt: val }) },
- [`(.*)([=][@])$`]: { pos: 2, deal: val => ({ $gte: val }) },
- };
- /**
- * 整理参数为查询可用
- * 标识符号:
- * ${column}: 全等查询 eq =
- * %${column}%: 模糊查询 like 只有全模糊,开头/结尾自己写
- * @${column}: 大于查询
- * @=${column}: 大于等于
- * ${column}@: 小于查询
- * ${column}=@: 小于等于
- * 如果涉及字段映射,函数内自己处理
- * @param filter 前端传来的参数
- */
- export const QueryReset = (filter: object) => {
- const regList = Object.keys(signMappings);
- const nq = {};
- for (const key in filter) {
- const val = filter[key];
- let mappingOver = false;
- for (const regStr of regList) {
- const reg = new RegExp(regStr);
- const r = reg.test(key);
- if (!r) continue;
- const config = signMappings[regStr];
- const er = reg.exec(key);
- const pos = get(config, 'pos');
- const deal = get(config, 'deal');
- const propKey = get(er, pos);
- const propValue = deal(val);
- nq[propKey] = propValue;
- mappingOver = true;
- break;
- }
- if (!mappingOver) {
- nq[key] = val;
- }
- }
- return nq;
- };
- /**
- * 将查询的key根据映射换值
- * @param filter 查询数据对象
- * @param mapping 映射对象
- */
- export const QueryMapping = (filter: object, mapping: object = {}) => {
- const newFilter = {};
- for (const key in filter) {
- const mkey = get(mapping, key);
- const val = get(filter, key);
- if (!mkey) {
- newFilter[key] = val;
- continue;
- }
- newFilter[mkey] = val;
- }
- return newFilter;
- };
|