parser.js
2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// 简单格式化掉Vue监听器存于Object中的属性
export function format(obj) {
return JSON.parse(JSON.stringify(obj));
}
// 去除Object中不需要包含的属性
export function objExclude(obj = {}, exclude = []) {
const result = {};
Object.keys(obj).forEach((key) => {
if (exclude.indexOf(key) < 0) {
result[key] = obj[key];
}
});
return result;
}
// 默认作用域
const LIST_SPACE = ['search', 'form', 'table'];
// 根据配置列表拆分作用域
export function generateListSpace(fields = []) {
const array = {
search: [], // 搜索表单
form: [], // 表单
table: [], // 表格
};
fields.forEach((field) => {
// 可以在列表中通过include或exclude设置当前配置的作用域
const { include = LIST_SPACE, exclude = [] } = field;
// 判断include
let _inclue = [];
if (include instanceof String || typeof include === 'string') {
_inclue = [include];
} else if (include instanceof Array && typeof include === 'object') {
_inclue = include;
}
// 判断exclude转换为include的情况
let _exclude_include = [];
if (exclude instanceof String || typeof exclude === 'string') {
_exclude_include = LIST_SPACE.filter(item => item !== exclude);
} else if (exclude instanceof Array && typeof exclude === 'object') {
_exclude_include = LIST_SPACE.filter(item => exclude.indexOf(item) < 0 );
}
// 作用域交集
const _intersection = _inclue.filter((v) => { return _exclude_include.indexOf(v) !== -1; });
// 返回改配置项的作用域
const _list_space = [...new Set(_intersection)];
// 将配置项按需分配至各作用域下
_list_space.forEach((name) => {
if (name === 'search') {
const filterField = objExclude(field, ['rules']); // 默认搜索表单去除校验规则
array[name].push({ ...filterField, ...(field.searchScheme || {}) }); // 配置列表可通过$search单独为search域做配置
} else if (name === 'form') {
array[name].push({ ...field, ...(field.formScheme || {}) }); // 配置列表可通过$form单独为form域做配置
} else if (name === 'table') {
array[name].push({ ...field, ...(field.tableScheme || {}) }); // 配置列表可通过$table单独为table域做配置
}
});
});
return array;
}
export default {
format,
objExclude,
generateListSpace,
}