Skip to content

Form 表单

由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。

典型表单

包括各种表单项,比如输入框、选择器、开关、单选框、多选框等。

vue
<template>
  <x-form ref="formRef" :model="form" :rules="rules" label-width="80px">
    <x-form-item label="姓名" prop="name">
      <x-input v-model="form.name" placeholder="请输入姓名" />
    </x-form-item>
    <x-form-item label="邮箱" prop="email">
      <x-input v-model="form.email" placeholder="请输入邮箱" />
    </x-form-item>
    <x-form-item>
      <x-button type="primary" @click="handleSubmit">提交</x-button>
      <x-button @click="handleReset">重置</x-button>
    </x-form-item>
  </x-form>
</template>

<script setup>
import { ref, reactive } from 'vue'

const formRef = ref()

const form = reactive({
  name: '',
  email: ''
})

const rules = {
  name: [
    { required: true, message: '请输入姓名', trigger: 'blur' },
    { min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur' }
  ],
  email: [
    { required: true, message: '请输入邮箱', trigger: 'blur' },
    { pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/, message: '请输入正确的邮箱格式', trigger: 'blur' }
  ]
}

const handleSubmit = async () => {
  const valid = await formRef.value?.validate()
  if (valid) {
    console.log('提交表单:', form)
  }
}

const handleReset = () => {
  formRef.value?.resetFields()
}
</script>

行内表单

设置 inline 属性让表单域成为行内的表单域。

vue
<template>
  <x-form :model="form" inline>
    <x-form-item label="姓名">
      <x-input v-model="form.name" placeholder="请输入姓名" />
    </x-form-item>
    <x-form-item label="邮箱">
      <x-input v-model="form.email" placeholder="请输入邮箱" />
    </x-form-item>
    <x-form-item>
      <x-button type="primary">查询</x-button>
    </x-form-item>
  </x-form>
</template>

对齐方式

通过设置 label-position 属性可以改变表单域标签的位置,可选值为 topleftright

vue
<template>
  <x-form :model="form" label-position="top">
    <x-form-item label="姓名">
      <x-input v-model="form.name" placeholder="请输入姓名" />
    </x-form-item>
    <x-form-item label="邮箱">
      <x-input v-model="form.email" placeholder="请输入邮箱" />
    </x-form-item>
  </x-form>
</template>

表单校验

Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则。

vue
<template>
  <x-form :model="form" :rules="rules" label-width="100px">
    <x-form-item label="用户名" prop="name">
      <x-input v-model="form.name" placeholder="请输入用户名" />
    </x-form-item>
    <x-form-item label="密码" prop="password">
      <x-input v-model="form.password" type="password" placeholder="请输入密码" />
    </x-form-item>
  </x-form>
</template>

<script setup>
const rules = {
  name: [
    { required: true, message: '请输入用户名', trigger: 'blur' }
  ],
  password: [
    { required: true, message: '请输入密码', trigger: 'blur' },
    { min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' }
  ]
}
</script>

API

Form Props

属性说明类型默认值
model表单数据对象Record<string, any>{}
rules表单验证规则Record<string, FormRule[]>{}
labelWidth标签宽度string | number'100px'
labelPosition标签位置'left' | 'right' | 'top''right'
inline是否行内表单booleanfalse
disabled是否禁用所有表单项booleanfalse
size组件尺寸'large' | 'default' | 'small''default'

Form Methods

方法名说明参数
validate验证整个表单
validateField验证指定字段(props: string | string[])
resetFields重置表单
clearValidate清除验证结果(props?: string | string[])

Form Events

事件名说明回调参数
validate任意表单项被校验后触发(prop: string, valid: boolean, message: string)

FormItem Props

属性说明类型默认值
prop字段名string
label标签文本string
labelWidth标签宽度string | number
required是否必填booleanfalse
rules验证规则FormRule[]
showMessage是否显示错误信息booleantrue

FormRule 规则

属性说明类型
required是否必填boolean
message错误信息string
trigger触发方式'blur' | 'change'
min最小长度number
max最大长度number
pattern正则表达式RegExp
validator自定义验证函数(rule, value, callback) => void

基于 MIT 许可发布