parser.js 2.36 KB
// 简单格式化掉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,
}