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