UNPKG

@58fe/p5

Version:

pc端vue组件

250 lines (226 loc) 6.9 kB
<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 | —— | —— |