pumpkin-ui
指南
组件
指南
组件
  • 基础组件

    • Button 按钮
    • Cell 单元格
    • Icon 图标
    • Popup 弹出层
    • Toast 轻提示
  • 表单组件

    • PickerView 选择器视图
    • Picker 选择器
    • DatePicker 日期时间选择器
    • Switch 开关
    • Field 输入项
    • Form 表单
    • Checkbox 复选框
    • Radio 单选框
    • Search 搜索
  • 反馈组件

    • Overlay 遮罩
    • Loading 加载
    • ActionSheet 动作面板
    • Notify 消息提示
    • Skeleton 骨架屏
    • Dialog 对话框
  • 展示组件

    • Progress 进度条
    • Divider 分割线
    • Badge 徽标
    • Empty 空元素
    • Tag 标签
  • 导航组件

    • Navbar 导航栏
    • Tab 标签页

Form 表单

基本使用

需要与Field等表单组件配合使用。

<pk-form></pk-form>

代码示例

基础用法

创建一个不带任何校验的表单。

template
     <pk-form @on-submit="onSubmit">
        <pk-field label="用户名" name="username" placeholder="请输入用户名"></pk-field>
        <pk-field label="密码" name="password" type="password" placeholder="请输入密码"></pk-field>
        <pk-cell>
            <template #title>
                <pk-button native-type="submit" block>提交</pk-button>
            </template>
        </pk-cell>
    </pk-form>
script
import { PkForm, PkField, PkDivider, PkButton, PkCell, Toast } from '@pumpkin-ui/mobile'

const onSubmit = (data) => {
    Toast.show(JSON.stringify(data))
}
style

表单校验

通过配置每一个表单项的rules实现表单校验。表单校验validator支持异步方法,返回Promise即可。

示例

template
<pk-form @on-submit="onSubmit">
    <pk-field label="用户名" name="username" required placeholder="请输入用户名" :rules="[
        { required: true, message: '用户名不能为空' }
    ]"></pk-field>
    <pk-field label="密码" name="password" required type="password" placeholder="请输入密码" :rules="[
        { validator: passwordValidator }
    ]"></pk-field>
    <pk-cell>
        <template #title>
            <pk-button native-type="submit" block>提交</pk-button>
        </template>
    </pk-cell>
</pk-form>
script
import { PkForm, PkField, PkDivider, PkButton, PkCell, Toast } from '@pumpkin-ui/mobile'

const passwordValidator = (rule, value) => {
    if (value.length < 6) throw new Error('密码不能少于6位')
    return true
}

const onSubmit = (data) => {
    Toast.show(JSON.stringify(data))
}
style

异步示例

template
<pk-form @on-submit="onSubmit" @on-submit-validate="Toast.showLoading('校验中...')"
    @on-submit-validate-complete="Toast.hideLoading()">
    <pk-field label="用户名" name="username" required placeholder="请输入用户名" :rules="[
        { required: true, message: '用户名不能为空' },
        { validator: usernameValidator }
    ]"></pk-field>
    <pk-field label="密码" name="password" required type="password" placeholder="请输入密码" :rules="[
        { validator: passwordValidator }
    ]"></pk-field>
    <pk-cell>
        <template #title>
            <pk-button block native-type="submit"> 提交</pk-button>
        </template>
    </pk-cell>
</pk-form>
script
import { PkForm, PkField, PkDivider, PkButton, PkCell, Toast } from '@pumpkin-ui/mobile'
import { ref } from 'vue'

const usernameValidator = (rule, value) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (value.length < 3) reject(new Error('用户名已经被占用了'))
            resolve(true)
        }, 1000)
    }) as Promise<boolean>
}

const passwordValidator = (rule, value) => {
    if (value.length < 6) throw new Error('密码不能少于6位')
    return true
}

const onSubmit = (data) => {
    Toast.show(JSON.stringify(data))
}

style

API

Props

属性名说明类型默认值可选值
validate-trigger验证的时机(如果表单项的rule没有配置trigger,则默认使用这个值)FieldRuleTrigger[]['onSubmit']
validate-first第一项校验不通过时停止校验booleanfalse
show-error-message表单项校验不通过时在下方显示错误提示booleantrue

FieldRule

属性名说明类型默认值
pattern正则表达式RegExp
trigger触发时机FieldRuleTrigger|FieldRuleTrigger[]
message验证不通过时的提示string
required是否必填boolean
validator自定义验证方法(rule:FieldRule,value:any)=>Promise<boolean>|boolean
formatter验证前的formatter方法(value:any)=>Promise<any>|any

Events

事件名说明回调参数
onSubmit表单提交事件(验证通过)(values: IFormValueItem[])=>void
onSubmitFailed表单提交事件(验证不通过)(values: IFormValidateErrorResult[])=>void
onSubmitValidate表单提交时验证开始事件()=>void
onSubmitValidateComplete表单提交时验证完成事件(errors: IFormValidateErrorResult[])=>void

IFormValueItem

属性名说明类型默认值
name表单项的name属性string
label表单项的label属性string
value表单项的值any

IFormValidateErrorResult

属性名说明类型默认值
name表单项的name属性string
label表单项的label属性string
value表单项的值any
message验证不通过的提示文字string

Slots

插槽名说明
default默认插槽

Exposes

名称说明类型说明
validate表单验证()=>Promise<IFormValidateErrorResult[]>
submit表单提交(会触发表单验证,并在校验通过或者通过后触发onSubmit和onSubmitFailed)()=>void
getValues获取表单中所有表单项的值()=>IFormValueItem[]

样式变量

名称默认值说明
最近更新: 2024/9/24 14:43
Contributors: yranky
Prev
Field 输入项
Next
Checkbox 复选框