2020-08-27 17:18:57 +08:00

679 lines
28 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="form-page article">
<h1>Form 表单</h1>
<h2>概述</h2>
<p>具有数据收集校验和提交功能的表单包含复选框单选框输入框下拉选择框等元素</p>
<h2>代码示例</h2>
<Row class="panel">
<Cell class="son-panel" span="12">
<div class="panel-case">
<Wb-form @submit="submit">
<Form-item label="输入框">
<wb-input placeholder="请输入" />
</Form-item>
<Form-item label="密码输入框">
<wb-input placeholder="请输入" type="password" />
</Form-item>
<Form-item label="数字输入框">
<wb-input placeholder="请输入" type="number" />
</Form-item>
<Form-item label="下拉框">
<wb-select>
<wb-option :value="1">
北京市
</wb-option>
<wb-option :value="2">
上海市
</wb-option>
<wb-option :value="3">
深圳市
</wb-option>
<wb-option :value="4">
杭州市
</wb-option>
<wb-option :value="5">
南京市
</wb-option>
<wb-option :value="6">
重庆市
</wb-option>
</wb-select>
</Form-item>
<Form-item label="单选框">
<Radio-group>
<Radio value="1">
</Radio>
<Radio value="2">
</Radio>
</Radio-group>
</Form-item>
<Form-item label="多选框">
<Checkbox-group>
<Checkbox value="1">
吃饭
</Checkbox>
<Checkbox value="2">
睡觉
</Checkbox>
<Checkbox value="3">
跑步
</Checkbox>
</Checkbox-group>
</Form-item>
<Form-item label="开关">
<Wb-switch>
<span slot="close"></span>
<span slot="open"></span>
</Wb-switch>
</Form-item>
<Form-item label="文本域">
<wb-input :autosize="true" type="textarea" placeholder="请输入" />
</Form-item>
<Form-item>
<Wb-button button-type="submit" type="primary">
提交
</Wb-button>
<Wb-button type="ghost" style="margin-left: 8px">
取消
</Wb-button>
</Form-item>
</Wb-form>
</div>
<div class="panel-header">
<span>表单控件</span>
</div>
<div class="panel-desc">
<p> Wb-form 每个表单域由 Form-item 组成可包含的控件有InputRadioCheckboxSwitchSelectDatePickerUpload</p>
<p> Form-item 设置属性 label 可以显示表单域的标签</p>
</div>
</Cell>
<div class="panel-split" />
<Cell class="son-panel" span="12">
<div class="code">
<markdown1 />
</div>
</Cell>
</Row>
<Row class="panel">
<Cell class="son-panel" span="12">
<div class="panel-case">
<Wb-form type="query">
<Row>
<Cell span="12">
<Form-item label="输入框">
<wb-input placeholder="请输入" />
</Form-item>
</Cell>
<Cell span="12">
<Form-item label="密码输入框">
<wb-input placeholder="请输入" type="password" />
</Form-item>
</Cell>
</Row>
<Row>
<Cell span="12">
<Form-item label="下拉框">
<wb-select>
<wb-option :value="1">
北京市
</wb-option>
<wb-option :value="2">
上海市
</wb-option>
<wb-option :value="3">
深圳市
</wb-option>
<wb-option :value="4">
杭州市
</wb-option>
<wb-option :value="5">
南京市
</wb-option>
<wb-option :value="6">
重庆市
</wb-option>
</wb-select>
</Form-item>
</Cell>
<Cell span="12">
<Form-item label="下拉框">
<wb-select>
<wb-option :value="1">
北京市
</wb-option>
<wb-option :value="2">
上海市
</wb-option>
<wb-option :value="3">
深圳市
</wb-option>
<wb-option :value="4">
杭州市
</wb-option>
<wb-option :value="5">
南京市
</wb-option>
<wb-option :value="6">
重庆市
</wb-option>
</wb-select>
</Form-item>
</Cell>
</Row>
</Wb-form>
</div>
<div class="panel-header">
<span>查询表单</span>
</div>
<div class="panel-desc">
<p>query模式下FromItem上下间隔会缩小而且不提示校验错误信息需要自行处理</p>
</div>
</Cell>
<div class="panel-split" />
<Cell class="son-panel" span="12">
<div class="code">
<markdown2 />
</div>
</Cell>
</Row>
<Row class="panel">
<Cell class="son-panel" span="12">
<div class="panel-case">
<Wb-form :label-width="100" label-position="left">
<Form-item label="输入框">
<wb-input placeholder="请输入" />
</Form-item>
<Form-item label="密码输入框">
<wb-input placeholder="请输入" type="password" />
</Form-item>
<Form-item label="数字输入框">
<wb-input placeholder="请输入" type="number" />
</Form-item>
<Form-item :label-width="150" label="数字输入框">
<wb-input placeholder="请输入" type="number" />
</Form-item>
</Wb-form>
<Wb-form :label-width="100" label-position="right">
<Form-item label="输入框">
<wb-input placeholder="请输入" />
</Form-item>
<Form-item label="密码输入框">
<wb-input placeholder="请输入" type="password" />
</Form-item>
<Form-item label="数字输入框">
<wb-input placeholder="请输入" type="number" />
</Form-item>
</Wb-form>
<Wb-form label-position="top">
<Form-item label="输入框">
<wb-input placeholder="请输入" />
</Form-item>
<Form-item label="密码输入框">
<wb-input placeholder="请输入" type="password" />
</Form-item>
<Form-item label="数字输入框">
<wb-input placeholder="请输入" type="number" />
</Form-item>
</Wb-form>
</div>
<div class="panel-header">
<span>对齐方式 </span>
</div>
<div class="panel-desc">
<p>设置属性 label-position可以改变表单域标签的位置left 为左对齐right 为右对齐top 会置于表单域顶部</p>
</div>
</Cell>
<div class="panel-split" />
<Cell class="son-panel" span="12">
<div class="code">
<markdown3 />
</div>
</Cell>
</Row>
<Row class="panel">
<Cell class="son-panel" span="12">
<div class="panel-case">
<Wb-form ref="formValidate" :rule="ruleValidate" :label-width="100" @on-validate="onvalidate" @submit="submit">
<Form-item :rule="[{required: radio=='1', message: '不能为空'}]" label="输入框" prop="text1">
<wb-input v-model="text1" placeholder="请输入" />
</Form-item>
<Form-item :rule="[{required: true, message: '不能为空'}]" label="输入框" prop="text1">
<time-picker v-model="time" />
</Form-item>
<Form-item :rule="[{required: true, message: '不能为空'}]" label="日期选择" prop="text1">
<Wb-input-date-picker v-model="date" />
</Form-item>
<Form-item label="密码输入框" prop="text2">
<wb-input v-model="text2" placeholder="请输入" type="password" />
</Form-item>
<Form-item label="数字输入框" prop="text3">
<wb-input v-model="text3" placeholder="请输入" type="number" />
</Form-item>
<Form-item label="下拉框" prop="select">
<wb-select v-model="select">
<wb-option :value="1">
北京市
</wb-option>
<wb-option :value="2">
上海市
</wb-option>
<wb-option :value="3">
深圳市
</wb-option>
<wb-option :value="4">
杭州市
</wb-option>
<wb-option :value="5">
南京市
</wb-option>
<wb-option :value="6">
重庆市
</wb-option>
</wb-select>
</Form-item>
<Form-item label="单选框" prop="radio">
<Radio-group v-model="radio">
<Radio value="1">
</Radio>
<Radio value="2">
</Radio>
</Radio-group>
</Form-item>
<Form-item label="多选框" prop="checkbox">
<Checkbox-group v-model="checkbox">
<Checkbox value="1">
吃饭
</Checkbox>
<Checkbox value="2">
睡觉
</Checkbox>
<Checkbox value="3">
跑步
</Checkbox>
</Checkbox-group>
</Form-item>
<Form-item label="开关">
<wb-switch v-model="on">
<span slot="close"></span>
<span slot="open"></span>
</wb-switch>
</Form-item>
<Form-item label="文本域" prop="textarea">
<wb-input v-model="textarea" :autosize="true" type="textarea" placeholder="请输入" />
</Form-item>
<Form-item>
<Wb-button button-type="submit" type="primary">
提交
</Wb-button>
<Wb-button type="ghost" style="margin-left: 8px">
重置
</Wb-button>
</Form-item>
</Wb-form>
</div>
<div class="panel-header">
<span>表单校验</span>
</div>
<div class="panel-desc">
<p>Form 组件基于 async-validator 实现的数据验证 Form 设置属性 rules同时给需要验证的 Form-item 设置属性 prop 指向对于字段即可</p>
</div>
</Cell>
<div class="panel-split" />
<Cell class="son-panel" span="12">
<div class="code">
<markdown4 />
</div>
</Cell>
</Row>
<Row class="panel">
<Cell class="son-panel" span="12">
<div class="panel-case">
<Wb-form ref="formValidate1" :label-width="100">
<Form-item v-for="(item, index) in textList" :key="index" :prop="item.text" :rule="[{required: true, message: '项目' + (item.text) +'不能为空'}]"
label="输入框">
<wb-input v-model="item.value" placeholder="请输入" />
</Form-item>
<Form-item>
<Wb-button type="primary" @click="click1">
提交
</Wb-button>
<Wb-button type="ghost" style="margin-left: 8px" @click="reset1">
重置
</Wb-button>
<Wb-button type="primary" style="margin-left: 8px" @click="add">
增加
</Wb-button>
<Wb-button type="primary" style="margin-left: 8px" @click="remove">
减少
</Wb-button>
</Form-item>
</Wb-form>
</div>
<div class="panel-header">
<span>动态增减表单项</span>
</div>
<div class="panel-desc">
<p>当需要动态维护 Form-item 也可以直接给 Form-item 设置属性 rule 来单独为该域做验证</p>
</div>
</Cell>
<div class="panel-split" />
<Cell class="son-panel" span="12">
<div class="code">
<markdown4 />
</div>
</Cell>
</Row>
<h2>API</h2>
<h3>Form props</h3>
<section>
<table>
<thead>
<tr>
<th style="text-align:left">
属性
</th>
<th style="text-align:left">
说明
</th>
<th style="text-align:left">
类型
</th>
<th style="text-align:left">
默认值
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">
rules
</td>
<td style="text-align:left">
表单验证规则具体配置查看 <a href="https://github.com/yiminghe/async-validator">async-validator</a>
</td>
<td style="text-align:left">
Array
</td>
<td style="text-align:left">
[]
</td>
</tr>
<tr>
<td style="text-align:left">
labelPosition
</td>
<td style="text-align:left">
表单域标签的位置可选值为 leftrighttop
</td>
<td style="text-align:left">
String
</td>
<td style="text-align:left">
right
</td>
</tr>
<tr>
<td style="text-align:left">
labelWidth
</td>
<td style="text-align:left">
表单域标签的宽度所有的 Form-item 都会继承 Form 组件的 label-width 的值
</td>
<td style="text-align:left">
Number
</td>
<td style="text-align:left">
80
</td>
</tr>
<tr>
<td style="text-align:left">
type
</td>
<td style="text-align:left">
表单类型可选值有normal和query
</td>
<td style="text-align:left">
String
</td>
<td style="text-align:left">
normal
</td>
</tr>
</tbody>
</table>
</section>
<h3>Form methods</h3>
<section>
<table>
<thead>
<tr>
<th style="text-align:left">
属性
</th>
<th style="text-align:left">
说明
</th>
<th style="text-align:left">
参数
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">
validate
</td>
<td style="text-align:left">
校验整个表单
</td>
<td style="text-align:left">
callback
</td>
</tr>
<tr>
<td style="text-align:left">
validate
</td>
<td style="text-align:left">
对部分表单字段进行校验的方法参数1为需校验的 prop参数2为检验完回调同上
</td>
<td style="text-align:left">
field, callback
</td>
</tr>
<tr>
<td style="text-align:left">
resetFields
</td>
<td style="text-align:left">
重置校验结果, 如果传了filed则只重置这个如果没有则重置所有
</td>
<td style="text-align:left">
[field,] callback
</td>
</tr>
</tbody>
</table>
</section>
<h3>FormItem props</h3>
<section>
<table>
<thead>
<tr>
<th style="text-align:left">
属性
</th>
<th style="text-align:left">
说明
</th>
<th style="text-align:left">
类型
</th>
<th style="text-align:left">
默认值
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">
prop
</td>
<td style="text-align:left">
对应 表单域 value 里的字段
</td>
<td style="text-align:left">
String
</td>
<td style="text-align:left">
null
</td>
</tr>
<tr>
<td style="text-align:left">
label
</td>
<td style="text-align:left">
标签文本
</td>
<td style="text-align:left">
String
</td>
<td style="text-align:left">
null
</td>
</tr>
<tr>
<td style="text-align:left">
labelWidth
</td>
<td style="text-align:left">
标签的宽度
</td>
<td style="text-align:left">
Number
</td>
<td style="text-align:left">
null
</td>
</tr>
<tr>
<td style="text-align:left">
showMessage
</td>
<td style="text-align:left">
是否显示校验错误信息
</td>
<td style="text-align:left">
Boolean
</td>
<td style="text-align:left">
true
</td>
</tr>
</tbody>
</table>
</section>
</div>
</template>
<script>
import markdown1 from './md/form1.md'
import markdown2 from './md/form2.md'
import markdown3 from './md/form3.md'
import markdown4 from './md/form4.md'
export default {
components: {
markdown1, markdown2, markdown3, markdown4
},
data: function () {
return {
text1: '',
text2: '',
text3: '',
select: '',
radio: '',
time: '',
date: null,
checkbox: [],
on: true,
textarea: '',
ruleValidate: {
text1: [
{ type: 'money', afterPoint: 4, trigger: 'blur'}
],
text2: [
{ required: true, message: '不能为空' }
],
text3: [
{ required: true, message: '不能为空' }
],
select: [
{ required: true, message: '不能为空' }
],
radio: [
{ required: true, message: '不能为空' }
],
checkbox: [
{ required: true, message: '不能为空', type: 'array', min: 1 }
],
textarea: [
{ required: true, message: '不能为空' }
]
},
textList: [{
text: 'text0',
value: ''
}]
}
},
methods: {
add: function () {
this.textList.push({
text: 'text' + this.textList.length,
value: ''
})
},
remove: function () {
this.textList.splice(this.textList.length - 1, 1)
},
click() {
this.$refs.formValidate.validate((valid, error) => {
console.log(valid, error)
})
},
reset() {
this.$refs.formValidate.resetFields()
},
click1() {
this.$refs.formValidate1.validate(valid => {
console.log(valid)
})
},
reset1() {
this.$refs.formValidate1.resetFields()
},
onvalidate() {
console.log(arguments)
},
submit() {
console.log('submit')
console.log(arguments)
}
}
}
</script>