<script>
	module.exports = {
		data() {
			var validatePass = (rule, value, callback) => {
				if (value === '') {
					callback(new Error('请输入密码'));
				} else {
					if (this.form3.checkPass !== '') {
						this.$refs.form3.validateField('checkPass');
					}
					callback();
				}
			};
			var validatePass2 = (rule, value, callback) => {
				if (value === '') {
					callback(new Error('请再次输入密码'));
				} else if (value !== this.form3.pass) {
					callback(new Error('两次输入密码不一致!'));
				} else {
					callback();
				}
			};
			return {
				switch1: true,
				labelPosition: 'right',
				form1: {
					name: '配置名称',
					isEmail: false,
					way: ['iblog', 'italk'],
					desc: '这是大一段描述'
				},
				form: {
					name: '配置名称',
					isEmail: false,
					way: ['iblog', 'italk'],
					desc: '这是大一段描述'
				},
				rules: {
					name: [
						{ required: true, message: '请输入活动名称', trigger: 'blur'},
            			{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
					],
					isEmail: [{required: true, type: 'boolean', message: '请至少选择一种方式', trigger: 'change'}],
					way: [
						{required: true, type: 'array', message: '请至少选择一种方式', trigger: 'change'}
					],
					desc: [
						{required: true, message: '请填写活动形式', trigger: 'blur'},
						{min: 3, message: '不能少于3字', trigger: 'blur'}
					]
				},
				form3: {
					pass: '',
					checkPass: ''
				},
				rules3: {
          			pass: [
						{ validator: validatePass, trigger: 'blur' }
					],
					checkPass: [
						{ validator: validatePass2, trigger: 'blur' }
					]
				},
				form4: {
				},
				rules4: {
          			age: [
						{ required: true, message: '年龄不能为空'},
						// {type: 'number', message: '年龄必须为数字值', trigger: 'change'}
						// { required: true, message: '年龄不能为空'},
      					{ type: 'number', message: '年龄必须为数字值'}
					]
				}
			};
		},
		methods: {
			submitForm(formName) {
				this.$refs[formName].validate((valid) => {
					if (valid) {
						console.log('submit: sucee');
					} else {
						console.log('校验未通过');
					}
				});
			},
			resetForm(formName) {
				this.$refs['ruleForm'].resetFields();
			}
		}
	}
</script>
<style lang="scss">
.p5-demo-example {
	.p5-form{
		width: 460px;
	}
}
</style>
## Form 表单

### 引入
```javascript
import { form, fromItem } from '@58fe/p5'
```
引用的组件使用过程中，可以加前缀`p5-`进行使用，`p5-form`、`p5-form-item`。

### 基本用法

:::demo 
```html
<p5-form label-width=80 v-model="form1">
	<p5-form-item label="活动名称">
		<p5-input v-model="form1.name"></p5-input>
	</p5-form-item>
	<p5-form-item label="活动开启">
		<pswitch v-model="form1.isEmail"></pswitch>
	</p5-form-item>
	<p5-form-item label="活动人员">
		<checkbox-group v-model="form1.way">
			<checkbox  label="iblog"></checkbox>
			<checkbox  label="italk"></checkbox>
			<checkbox  label="李四"></checkbox>
			<checkbox :disabled=true label="小淘气"></checkbox>
		</checkbox-group>
	</p5-form-item>
	<p5-form-item label="活动内容">
		<p5-input type="textarea" v-model="form1.desc"></p5-input>
	</p5-form-item>
	<p5-form-item>
		<btn type="primary">立即创建</btn>
		<btn>取消</btn>
	</p5-form-item>
</p5-form>
```

:::

### 对齐方式

:::demo 
```html
<btn type="primary" @click="labelPosition='left'">左对齐</btn>
<btn type="primary" @click="labelPosition='right'">右对齐</btn>
<btn type="primary" @click="labelPosition='top'">顶部</btn>
<br/><br/>
<p5-form label-width=110 :label-position="labelPosition">
	<p5-form-item label="名称">
		<p5-input></p5-input>
	</p5-form-item>
	<p5-form-item label="描述">
		<p5-input></p5-input>
	</p5-form-item>
	<p5-form-item label="活动具体内容">
		<p5-input></p5-input>
	</p5-form-item>
</p5-form>
```

:::

### 表单校验

:::demo 
```html
<p5-form label-width=80 v-model="form" :rules="rules" ref="ruleForm">
	<p5-form-item label="配置名称" prop="name">
		<p5-input v-model="form.name"></p5-input>
	</p5-form-item>
	<p5-form-item label="发送邮件" prop="isEmail">
		<pswitch v-model="form.isEmail"></pswitch>
	</p5-form-item>
	<p5-form-item label="适用平台" prop="way">
		<checkbox-group v-model="form.way">
			<checkbox  label="iblog"></checkbox>
			<checkbox  label="italk"></checkbox>
			<checkbox  label="李四"></checkbox>
			<checkbox :disabled=true label="小淘气"></checkbox>
		</checkbox-group>
	</p5-form-item>
	<p5-form-item label="内容描述" prop="desc">
		<p5-input type="textarea" v-model="form.desc"></p5-input>
	</p5-form-item>
	<p5-form-item>
		<btn type="primary" @click="submitForm('ruleForm')">立即创建</btn>
		<btn @click="resetForm('ruleForm')">重置</btn>
	</p5-form-item>
</p5-form>
```

:::


### 自定义校验规则

:::demo 
```html
<p5-form label-width=80 v-model="form3" :rules="rules3" ref="form3">
	<p5-form-item label="密码" prop="pass">
		<p5-input v-model="form3.pass"></p5-input>
	</p5-form-item>
	<p5-form-item label="确认密码" prop="checkPass">
		<p5-input v-model="form3.checkPass"></p5-input>
	</p5-form-item>
	<p5-form-item>
		<btn type="primary" @click="submitForm('form3')">立即创建</btn>
		<btn>取消</btn>
	</p5-form-item>
</p5-form>
```

:::

### 校验数字类型
数字类型的需要在`v-model`处加`.number`修饰符，源于Vue会将绑定值转化为string类型。
:::demo 
```html
<p5-form label-width=80 v-model="form4" :rules="rules4" ref="form4">
	<p5-form-item label="年龄" prop="age">
		<p5-input v-model.number="form4.age"></p5-input>
	</p5-form-item>
	<p5-form-item>
		<btn type="primary" @click="submitForm('form4')">立即创建</btn>
		<btn>取消</btn>
	</p5-form-item>
</p5-form>
```

:::



### 参数

#### Form

| 参数         | 说明           | 类型                | 可选值       | 默认值  |
| ------------ | -------------- | ------------------- | ------------ | ------- |
| value         | v-model方式 表单数据对象       | Object | ——           | ——     |
| labelWidth | 描述文案宽度       |    Number|String           | ——           | —— |
| labelPosition | 描述文案位置       |    String           | left、right、top           | left |
| rules | 表单校验规则,具体规则可查看[async-validator](https://www.npmjs.com/package/async-validator)      |    Object         | ——           | {} |

<br/>

#### FormItem
| 参数         | 说明           | 类型                | 可选值       | 默认值  |
| ------------ | -------------- | ------------------- | ------------ | ------- |
| label         | 描述文案       | String | ——           |  ——     |
| prop | 校验属性名称       | String              | ——           |  ——  |
