// 简单格式化掉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, }