Commit 9802b7996dacbabc7a15ac9922fc6610ad6094db

Authored by Aaron
1 parent ddaaa9f3
Exists in master and in 1 other branch legacy

更新Form说明文档

Showing 1 changed file with 134 additions and 26 deletions   Show diff stats
examples/views/docs/component/form.md
1 # Form 表单 1 # Form 表单
2 2
3 -不同于常规Form组件,本组件采用配置列表的方式实现表单快速配置 3 +使用数据配置项列表快速生成一个表单
4 4
5 ## 基础用法 5 ## 基础用法
6 6
7 -配置项list中通过type可以配置任意组件,不受框架限制 7 +配置项list中通过type可以配置任意表单组件,不受框架约定限制
8 8
9 -::: snippet 使用`list`属性设置数据源,列表项中的`type`指定组件类型,每一项都已设置为**el-form-item**的子组件,通过`rules`配置校验规则 9 +::: snippet 使用`list`属性设置数据源,其中的`type`指定组件类型,每一项都已设置为**el-form-item**的子组件,通过`rules`配置校验规则,`props`设置组件参数
10 10
11 ```html 11 ```html
12 <template> 12 <template>
13 - <eagle-form ref="form" :list="formList" @submit="handleSubmit" @cancel="handleCancel" style="width: 500px;" :showButtonGroup="false"></eagle-form> 13 + <eagle-form ref="form" :list="formList" @submit="handleSubmit" @cancel="handleCancel" style="width: 500px;"></eagle-form>
14 </template> 14 </template>
15 15
16 <script> 16 <script>
@@ -18,10 +18,14 @@ export default { @@ -18,10 +18,14 @@ export default {
18 data() { 18 data() {
19 return { 19 return {
20 formList: [ 20 formList: [
21 - { type: 'el-input', key: 'name', label: '名称', rules: [{ required: true, message: '请输入名称' }] },  
22 - { type: 'eagle-select', key: 'address', label: '住址', props: { dataSource: [{ label: '大街上', value: 'S' }, { label: '小区里', value: 'H' }] } },  
23 - { type: 'el-input', key: 'postcode', label: '邮编', span: 12, tip: { content: '邮政编码', placement: "left" } },  
24 - { type: 'el-input', key: 'number', label: '楼栋号', span: 12, visible: (model) => model.address === 'H' }, 21 + { type: 'el-input', key: 'name', label: '姓名',
  22 + rules: [{ required: true, message: '请输入姓名' }],
  23 + props: { placeholder: '姓名' }
  24 + },
  25 + { type: 'el-input-number', key: 'age', label: '年龄', span: 12 },
  26 + { type: 'el-input', key: 'introduce', label: '自我介绍',
  27 + props: { type: 'textarea', min: 3, placeholder: '100字以内' }
  28 + },
25 ] 29 ]
26 } 30 }
27 }, 31 },
@@ -40,11 +44,102 @@ export default { @@ -40,11 +44,102 @@ export default {
40 44
41 ::: 45 :::
42 46
  47 +## 事件监听
  48 +
  49 +通常的业务需求中,常常会对表单项进行事件监听,以满足级联等特殊效果
  50 +
  51 +::: snippet 使用`list`属性设置数据源,其中的`on`配置表单项的事件
  52 +
  53 +```html
  54 +<template>
  55 + <eagle-form ref="form" :list="formList" @submit="handleSubmit" @cancel="handleCancel" style="width: 500px;"></eagle-form>
  56 +</template>
  57 +
  58 +<script>
  59 +export default {
  60 + data() {
  61 + return {
  62 + formList: [
  63 + { type: 'el-input', key: 'name', label: '姓名',
  64 + on: {
  65 + input(value) {
  66 + console.log(value);
  67 + }
  68 + }
  69 + },
  70 + { type: 'el-input-number', key: 'age', label: '年龄', span: 12,
  71 + on(model) {
  72 + return {
  73 + change(value) {
  74 + console.log(value);
  75 + if (value < 10) {
  76 + model.introduce = `${model.name || '那个谁'},小孩子不要闹`
  77 + }
  78 + }
  79 + }
  80 + }
  81 + },
  82 + { type: 'el-input', key: 'introduce', label: '自我介绍',
  83 + props: { placeholder: (model) => `${model.name || '这个人'}的自我介绍` }
  84 + },
  85 + ]
  86 + }
  87 + },
  88 + methods: {
  89 + handleSubmit(value) {
  90 + console.log(value)
  91 + },
  92 + handleCancel() {
  93 + this.$refs.form.reset()
  94 + console.log('cancel!')
  95 + }
  96 + }
  97 +}
  98 +</script>
  99 +```
  100 +
  101 +:::
  102 +
  103 +## 自定义内容
  104 +
  105 +基本的数据展示并不能满足复杂页面展示需求,因此可以通过**表单项具名插槽**的方式替换对应的展示位
  106 +
  107 +::: snippet 在组件内部通过具名插槽的方式,替换对应内容,列表项具名插槽格式为`item-key`,返回值为model及对应配置项所有参数
  108 +
  109 +```html
  110 +<template>
  111 + <eagle-form v-model="form" :list="list" :showButtonGroup="false" style="width: 800px;">
  112 + <template #item-experience="{ model }">
  113 + <el-badge value="提醒"><el-switch v-model="model.experience"></el-switch></el-badge>
  114 + </template>
  115 + <template #item-show="{ key }"><span>form.{{ key }}={{ form }}</span></template>
  116 + </eagle-form>
  117 +</template>
  118 +
  119 +<script>
  120 +export default {
  121 + data() {
  122 + return {
  123 + form: {},
  124 + list: [
  125 + { type: 'el-input', key: 'name', label: '姓名', span: 12 },
  126 + { type: 'el-input', key: 'age', label: '年龄', span: 12 },
  127 + { type: 'el-input', key: 'experience', label: '工作经历' },
  128 + { type: 'el-input', key: 'show', label: '表单值' },
  129 + ],
  130 + }
  131 + },
  132 +}
  133 +</script>
  134 +```
  135 +
  136 +:::
  137 +
43 ## 分组 138 ## 分组
44 139
45 -对配置项进行分组 140 +将表单项分组显示
46 141
47 -::: snippet 在配置项属性中设置`group`参数,没有设置分组的配置项默认归为`基本信息`分组 142 +::: snippet 在配置项属性中设置`group`参数,任意一个数据配置group时开始生效,若没有配置分组则默认归为**基本信息**分组,group可以是一个Object,用于快速配置一些预置的效果
48 143
49 ```html 144 ```html
50 <template> 145 <template>
@@ -60,11 +155,13 @@ export default { @@ -60,11 +155,13 @@ export default {
60 data() { 155 data() {
61 return { 156 return {
62 formList: [ 157 formList: [
63 - { type: 'el-input', key: 'name', label: '名称', rules: [{ required: true, message: '请输入名称' }] },  
64 - { type: 'el-input', key: 'gender', label: '性别', group: { label: '身体状况', icon: 'edit' } },  
65 - { type: 'eagle-select', key: 'address', label: '住址', props: { dataSource: [{ label: '大街上', value: 'S' }, { label: '小区里', value: 'H' }] }, group: '详细地址' },  
66 - { type: 'el-input', key: 'postcode', label: '邮编', tip: { content: '邮政编码', placement: "left" }, group: '详细地址' },  
67 - { type: 'el-input', key: 'number', label: '楼栋号', group: '详细地址' }, 158 + { type: 'el-input', key: 'name', label: '姓名', rules: [{ required: true, message: '请输入名称' }] },
  159 + { type: 'el-input-number', key: 'age', label: '年龄', span: 12, group: '健康信息' },
  160 + { type: 'el-input-number', key: 'weight', label: '体重', span: 12, group: '健康信息' },
  161 + { type: 'el-input', key: 'experience', label: '简历',
  162 + group: { key: 'experience', icon: 'edit-outline', label: '工作经历' },
  163 + props: { type: 'textarea', min: 3 }
  164 + },
68 ] 165 ]
69 } 166 }
70 } 167 }
@@ -76,17 +173,17 @@ export default { @@ -76,17 +173,17 @@ export default {
76 173
77 ## 自定义分组 174 ## 自定义分组
78 175
79 -有些时候默认的分组样式并不能满足项目需求,因此这里支持自定义 176 +有些时候默认的分组样式并不能满足项目需求,因此可以通过**表单项具名插槽**的方式替换对应的分组
80 177
81 -::: snippet 使用`Object`对象的方式配置分组信息,并在组件中使用具名插槽`slot`配置分组标题 178 +::: snippet 在组件内部通过具名插槽的方式,替换对应内容,表头具名插槽格式为`group-key`,返回值包括key及group配置内容
82 179
83 ```html 180 ```html
84 <template> 181 <template>
85 - <eagle-form :list="formList" style="width: 500px;">  
86 - <template #group-not-bad="{ label }">  
87 - <div style="padding: 10px 0px;border-bottom: 1px dashed #aaa;display: flex;justify-content: space-between;">  
88 - <span>哎哟 - {{ label }} - 不错哦</span>  
89 - <el-button size="mini" type="primary">这是一个按钮</el-button> 182 + <eagle-form ref="form" :list="formList" :showButtonGroup="false" style="width: 500px;">
  183 + <template #group-health="{ label }">
  184 + <div style="padding: 15px 5px;border-bottom: 1px dashed #e8e8e8;display: flex;justify-content: space-between;">
  185 + <span>{{ label }}</span>
  186 + <el-button size="mini" plain>体检报告</el-button>
90 </div> 187 </div>
91 </template> 188 </template>
92 </eagle-form> 189 </eagle-form>
@@ -97,11 +194,11 @@ export default { @@ -97,11 +194,11 @@ export default {
97 data() { 194 data() {
98 return { 195 return {
99 formList: [ 196 formList: [
100 - { type: 'el-input', key: 'name', label: '名称', group: { label: '不错哦', key: 'not-bad' }, tip: '周某人说的' },  
101 - { type: 'eagle-select', key: 'address', label: '住址', props: { dataSource: [{ label: '大街上', value: 'S' }, { label: '小区里', value: 'H' }] }, group: '详细地址' }, 197 + { type: 'el-input', key: 'name', label: '姓名', group: { key: 'base', label: '基本信息' } },
  198 + { type: 'el-input-number', key: 'age', label: '年龄', group: { key: 'health', label: '健康信息' } },
102 ] 199 ]
103 } 200 }
104 - } 201 + },
105 } 202 }
106 </script> 203 </script>
107 ``` 204 ```
@@ -116,12 +213,22 @@ export default { @@ -116,12 +213,22 @@ export default {
116 -|-|-|-|- 213 -|-|-|-|-
117 value / v-model | 绑定值 | Object | - | - 214 value / v-model | 绑定值 | Object | - | -
118 list | 表单项配置列表 | Array | - | [] 215 list | 表单项配置列表 | Array | - | []
  216 +formProps | [el-form组件参数](https://element.eleme.cn/#/zh-CN/component/form#form-attributes) | Object | - | {}
  217 +span | 表单项占位 | Number | 0 - 24 | 24
  218 +submitting | 提交按钮加载状态 | Boolean | true/false | false
  219 +submitPure | 纯净提交,设置为true时submit的对象只会包含配置项配置过的字段 | Boolean | true/false | false
  220 +footerStyle | 底部样式 | String, Object | - | -
  221 +params | 用于做动态判断的参数集,用于需要将外部参数应用于具体表单项事件判断的情况 | Object | - | -
  222 +showButtonGroup | 显示按钮组 | Boolean | true/false | false
119 223
120 ## Methods 方法 224 ## Methods 方法
121 225
122 方法名|说明|参数 226 方法名|说明|参数
123 -|-|- 227 -|-|-
124 reset | 重置表单 | - 228 reset | 重置表单 | -
  229 +validate | 校验表单 | -
  230 +getPureModel | 获取以初始list为准的纯净model值 | -
  231 +setModelValue | 设置表单值 | model
125 232
126 ## Events 事件 233 ## Events 事件
127 234
@@ -130,6 +237,7 @@ reset | 重置表单 | - @@ -130,6 +237,7 @@ reset | 重置表单 | -
130 change | 表单model发生变化时触发 | model对象 237 change | 表单model发生变化时触发 | model对象
131 submit | 点击表单提交按钮时触发 | model对象 238 submit | 点击表单提交按钮时触发 | model对象
132 cancel | 点击表单取消按钮时触发 | - 239 cancel | 点击表单取消按钮时触发 | -
  240 +validate | 表单校验成功后触发 | 校验值
133 241
134 ## List 表单项配置列表 242 ## List 表单项配置列表
135 243
@@ -140,7 +248,7 @@ key | 参数名 | String | - | - @@ -140,7 +248,7 @@ key | 参数名 | String | - | -
140 label | 参数标签 | String | - | - 248 label | 参数标签 | String | - | -
141 props | 组件参数 | Object,Function(model: object)) | - | {} 249 props | 组件参数 | Object,Function(model: object)) | - | {}
142 style | 组件样式 | Object | - | { width: "100%" } 250 style | 组件样式 | Object | - | { width: "100%" }
143 -on | 组件事件 | Object,Function(model: object) | - | {} 251 +on | 组件事件,Function时需要返回事件的Object | Object,Function(model: object) | - | {}
144 visible | 组件v-if状态 | Boolean,Function(model: object) | - | true 252 visible | 组件v-if状态 | Boolean,Function(model: object) | - | true
145 show | 组件v-show状态 | Boolean,Function(model: object) | - | true 253 show | 组件v-show状态 | Boolean,Function(model: object) | - | true
146 rules | 组件校验规则 | Object,Array | - | - 254 rules | 组件校验规则 | Object,Array | - | -