Form 表单示例集
这里展示了各种实用的表单场景和最佳实践。
登录表单
经典的登录表单示例。
用户登录
vue
<template>
<ExForm ref="loginFormRef" :model="loginForm" :rules="loginRules">
<ExFormItem prop="username">
<input v-model="loginForm.username" placeholder="用户名" />
</ExFormItem>
<ExFormItem prop="password">
<input v-model="loginForm.password" type="password" placeholder="密码" />
</ExFormItem>
<ExFormItem>
<ExCheckbox v-model="loginForm.remember">记住我</ExCheckbox>
</ExFormItem>
<ExFormItem>
<button @click="handleLogin">登录</button>
</ExFormItem>
</ExForm>
</template>
<script setup>
import { ref, reactive } from 'vue'
const loginFormRef = ref(null)
const loginForm = reactive({
username: '',
password: '',
remember: false
})
const loginRules = {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 6, message: '密码长度不能少于 6 位', trigger: 'blur' }
]
}
const handleLogin = async () => {
const result = await loginFormRef.value?.validate()
if (result.valid) {
console.log('登录', loginForm)
}
}
</script>注册表单
包含多种验证规则的注册表单。
用户注册
vue
<template>
<ExForm ref="registerFormRef" :model="registerForm" :rules="registerRules" label-width="100px">
<ExFormItem label="用户名" prop="username">
<input v-model="registerForm.username" placeholder="请输入用户名" />
</ExFormItem>
<ExFormItem label="邮箱" prop="email">
<input v-model="registerForm.email" type="email" placeholder="请输入邮箱" />
</ExFormItem>
<ExFormItem label="手机号" prop="phone">
<input v-model="registerForm.phone" placeholder="请输入手机号" />
</ExFormItem>
<ExFormItem label="密码" prop="password">
<input v-model="registerForm.password" type="password" placeholder="请输入密码" />
</ExFormItem>
<ExFormItem label="确认密码" prop="confirmPassword">
<input v-model="registerForm.confirmPassword" type="password" placeholder="请再次输入密码" />
</ExFormItem>
<ExFormItem prop="agree">
<ExCheckbox v-model="registerForm.agree">
我已阅读并同意用户协议
</ExCheckbox>
</ExFormItem>
<ExFormItem>
<button @click="handleRegister">注册</button>
</ExFormItem>
</ExForm>
</template>搜索表单
内联布局的搜索表单。
vue
<template>
<ExForm :model="searchForm" layout="inline">
<ExFormItem label="关键词">
<input v-model="searchForm.keyword" placeholder="搜索..." />
</ExFormItem>
<ExFormItem label="分类">
<ExSelect v-model="searchForm.category" placeholder="选择分类">
<option value="">全部</option>
<option value="tech">技术</option>
<option value="design">设计</option>
</ExSelect>
</ExFormItem>
<ExFormItem>
<button @click="handleSearch">搜索</button>
<button @click="handleReset">重置</button>
</ExFormItem>
</ExForm>
</template>设置表单
分组的设置表单。
vue
<template>
<ExForm :model="settingsForm" label-width="120px">
<h4>通知设置</h4>
<ExFormItem label="邮件通知">
<ExSwitch v-model="settingsForm.notifications.email" />
</ExFormItem>
<h4>隐私设置</h4>
<ExFormItem label="公开资料">
<ExSwitch v-model="settingsForm.privacy.profileVisible" />
</ExFormItem>
<h4>偏好设置</h4>
<ExFormItem label="主题">
<ExRadioGroup v-model="settingsForm.theme">
<ExRadio value="light">浅色</ExRadio>
<ExRadio value="dark">深色</ExRadio>
</ExRadioGroup>
</ExFormItem>
<ExFormItem>
<button @click="handleSaveSettings">保存设置</button>
</ExFormItem>
</ExForm>
</template>