From 6346896af071322255e3a497a9f9246251ce63c6 Mon Sep 17 00:00:00 2001 From: Aaron <427787340@qq.com> Date: Tue, 23 Jul 2019 18:30:49 +0800 Subject: [PATCH] 新增scheme组件 --- examples/components/code-snippet.vue | 6 ++++++ examples/views/docs/scheme.md | 19 +++++++++++++++---- packages/confirm/index.vue | 2 +- packages/form/index.vue | 9 +++++++-- packages/scheme/index.vue | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- packages/scheme/parser.js | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ packages/search/index.vue | 2 +- packages/table/index.vue | 1 + 8 files changed, 229 insertions(+), 15 deletions(-) create mode 100644 packages/scheme/parser.js diff --git a/examples/components/code-snippet.vue b/examples/components/code-snippet.vue index 5b74aca..fdf87f6 100644 --- a/examples/components/code-snippet.vue +++ b/examples/components/code-snippet.vue @@ -47,6 +47,12 @@ export default { box-shadow: 0 6px 12px -2px #e6e6e6, 0 0 0 1px #f0f2f7; background-color: #ffffff; text-align: left; + // element-ui样式冲突 + ul > li { + list-style-type: none; + margin: 0px; + padding: 0px; + } } .eagle-code-snippet--demo { box-sizing: border-box; diff --git a/examples/views/docs/scheme.md b/examples/views/docs/scheme.md index 5d9ed53..a58c2b4 100644 --- a/examples/views/docs/scheme.md +++ b/examples/views/docs/scheme.md @@ -10,7 +10,17 @@ Scheme是一个数据驱动的解决方案,通过既定的业务配置参数 ```html \ No newline at end of file + diff --git a/packages/scheme/parser.js b/packages/scheme/parser.js new file mode 100644 index 0000000..9d32465 --- /dev/null +++ b/packages/scheme/parser.js @@ -0,0 +1,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.$search || {}) }); // 配置列表可通过$search单独为search域做配置 + } else if (name === 'form') { + array[name].push({ ...field, ...(field.$form || {}) }); // 配置列表可通过$form单独为form域做配置 + } else if (name === 'table') { + array[name].push({ ...field, ...(field.$table || {}) }); // 配置列表可通过$table单独为table域做配置 + } + }); + }); + return array; +} + +export default { + format, + objExclude, + generateListSpace, +} \ No newline at end of file diff --git a/packages/search/index.vue b/packages/search/index.vue index e2dc1bc..34b85e4 100644 --- a/packages/search/index.vue +++ b/packages/search/index.vue @@ -20,7 +20,7 @@ - + diff --git a/packages/table/index.vue b/packages/table/index.vue index e1700bd..9ae6adf 100644 --- a/packages/table/index.vue +++ b/packages/table/index.vue @@ -13,6 +13,7 @@ + -- libgit2 0.21.0