From 096f9b03d322b3ef83bb140a7259d051ea693c5a Mon Sep 17 00:00:00 2001 From: Aaron <427787340@qq.com> Date: Fri, 26 Jul 2019 10:49:48 +0800 Subject: [PATCH] 新增Detail组件,修复Scheme组件设置值BUG --- examples/router/routes.js | 6 ++++++ examples/views/docs/detail.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ examples/views/docs/scheme.md | 7 +++++-- packages/detail/index.vue | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ packages/form/index.vue | 52 +++++++++++++++++++++++++++++++--------------------- packages/index.js | 2 ++ packages/scheme/index.vue | 47 +++++++++++++++++++++++++++++------------------ packages/search/index.vue | 21 ++++++++++++++------- packages/table/index.vue | 12 ++++++------ 9 files changed, 309 insertions(+), 54 deletions(-) create mode 100644 examples/views/docs/detail.md create mode 100644 packages/detail/index.vue diff --git a/examples/router/routes.js b/examples/router/routes.js index e9dea98..8a28080 100644 --- a/examples/router/routes.js +++ b/examples/router/routes.js @@ -19,6 +19,12 @@ const _components = [ group: '高级', children: [ { + path: 'detail', + name: 'detail', + meta: { title: 'Detail 详情' }, + component: () => import('@/views/docs/detail.md'), + }, + { path: 'form', name: 'form', meta: { title: 'Form 表单' }, diff --git a/examples/views/docs/detail.md b/examples/views/docs/detail.md new file mode 100644 index 0000000..ce646d5 --- /dev/null +++ b/examples/views/docs/detail.md @@ -0,0 +1,52 @@ +# Detail 详情 + +将Form组件的值展示位详情 + +## 基础用法 + +配置项list将无视配置的type,统一渲染为label + +:::snippet 使用`list`属性设置数据源,列表项中的`type`指定组件类型,每一项都已设置为**el-form-item**的子组件 + +```html + + + +``` + +::: + +## Attribute 属性 + +参数|说明|类型|可选值|默认值 +-|-|-|-|- +value / v-model | 绑定值 | Object | - | - +list | 表单项配置列表 | Array | - | [] + +## List 表单项配置列表 + +参数|说明|类型|可选值|默认值 +-|-|-|-|- +key | 参数名 | String | - | - +label | 参数标签 | String | - | - \ No newline at end of file diff --git a/examples/views/docs/scheme.md b/examples/views/docs/scheme.md index d5b6c62..42c1de6 100644 --- a/examples/views/docs/scheme.md +++ b/examples/views/docs/scheme.md @@ -29,10 +29,13 @@ Scheme是一个数据驱动的解决方案,通过既定的业务配置参数 - @@ -281,6 +290,11 @@ export default { this.dialogTitle = '详情'; this.dialogType = 'dialog-view'; this.tableCurrentRow = row; + this.formModel = {}; + // 设置表单值 + Object.keys(row).forEach(key => { + this.formModel[key] = row[key]; + }); this.showDialog(); }, // 新增按钮 @@ -288,6 +302,7 @@ export default { this.dialogTitle = '新增'; this.dialogType = 'dialog-form'; this.tableCurrentRow = row; + this.formModel = {}; this.showDialog(); }, // 编辑按钮 @@ -295,14 +310,12 @@ export default { this.dialogTitle = '编辑'; this.dialogType = 'dialog-form'; this.tableCurrentRow = row; - this.showDialog(); + this.formModel = {}; // 设置表单值 - this.$nextTick(() => { - Object.keys(row).forEach(key => { - this.formModel[key] = row[key]; - }); - this.formModel.test = 'test' + Object.keys(row).forEach(key => { + this.formModel[key] = row[key]; }); + this.showDialog(); }, // 删除按钮 handleDelete(type, scope) { @@ -343,14 +356,12 @@ export default { // 隐藏弹出框 hideDialog() { this.dialogVisible = false; - this.$nextTick(() => { - this.tableSelection = []; - this.tableLoading = false; - this.tableCurrentRow = null; - this.formModel = {}; - this.dialogTitle = ''; - this.dialogType = ''; - }); + this.tableSelection = []; + this.tableLoading = false; + this.tableCurrentRow = null; + this.formModel = {}; + this.dialogTitle = ''; + this.dialogType = ''; }, // 设置弹出框模式 setDialog({ title, type }) { diff --git a/packages/search/index.vue b/packages/search/index.vue index 34b85e4..13ee4c1 100644 --- a/packages/search/index.vue +++ b/packages/search/index.vue @@ -78,6 +78,13 @@ export default { collapse: false, }; }, + created() { + // 初始化表单模型 + this.initModel(this.list); + }, + mounted() { + this.setModelValue(this.value); + }, computed: { visibleColNum() { return 24 / this.span; @@ -86,9 +93,7 @@ export default { watch: { // 组件外部v-model值更新后同步刷新model value(val) { - Object.keys(this.model).forEach(key => { - this.model[key] = val ? val[key] : undefined; - }); + this.setModelValue(val); }, // 配置列表有改动时初始化表单模型 list(value) { @@ -102,11 +107,13 @@ export default { deep: true } }, - created() { - // 初始化表单模型 - this.initModel(this.list); - }, methods: { + // 设置表单值 + setModelValue(value) { + Object.keys(this.model).forEach(key => { + this.model[key] = value ? value[key] : undefined; + }); + }, // 绑定提示组件参数 bindItemTip(tip) { if (typeof tip === 'string') { diff --git a/packages/table/index.vue b/packages/table/index.vue index 42aa414..f358385 100644 --- a/packages/table/index.vue +++ b/packages/table/index.vue @@ -41,12 +41,6 @@ export default { // 表格事件 tableEvents: Object, }, - watch: { - // 组件外部v-model值更新后同步刷新model - value(val) { - this.tableData = val || []; - }, - }, mounted() { this.tableData = this.value || []; }, @@ -58,6 +52,12 @@ export default { } } }, + watch: { + // 组件外部v-model值更新后同步刷新model + value(val) { + this.tableData = val || []; + }, + }, data() { return { // 表格数据 -- libgit2 0.21.0