FormGroup 表单组件
此组件一般用于快速搭建表单场景,可以配置Input输入框,Select弹出框,进行表单验证等。
📌平台差异说明
| APP(vue) | H5 | 微信小程序 | 支付宝小程序 |
|---|---|---|---|
| ✔ | ✔ | ✔ | ✔ |
🏯基本使用示例
html
<!-- 全局使用 -->
<hy-form-group :columns="columns" :formData="formData"></hy-form-group>ts
import { reactive, ref } from 'vue';
import { HyWarn, FormTypeEnum } from 'hy-app';
import type { FormColumnsType } from 'hy-app';
const formData: AnyObject = reactive({
custom: '自定义值',
isShow: true,
sex: '1',
});
const formRef = ref<InstanceType<typeof HyForm>>(null);
const columns: FormColumnsType[] = reactive([
{
field: 'name',
label: '名字',
type: FormTypeEnum.TEXT,
rules: {
required: true,
message: '没有填内容',
trigger: ['blur'],
},
},
{
field: 'sex',
label: '性别',
type: FormTypeEnum.RADIO,
actions: [
{ label: '女', value: '0' },
{ label: '男', value: '1' },
],
rules: {
required: true,
message: '没有填内容',
trigger: ['blur', 'change'],
},
},
{
field: 'phone',
label: '手机号',
type: FormTypeEnum.TEXT,
rules: [
{
required: true,
message: '请输入您的手机号',
trigger: ['blur', 'change'],
},
{
type: 'phone',
trigger: ['blur', 'change'],
},
],
},
{
field: 'password',
label: '密码',
type: FormTypeEnum.PASSWORD,
rules: {
type: 'password',
trigger: ['blur', 'change'],
},
},
{
field: 'isShow',
label: '是否禁用',
type: FormTypeEnum.SWITCH,
},
{
field: 'time',
label: '日期',
type: FormTypeEnum.DATE,
border: 'bottom',
rules: {
required: true,
message: '请输入您的日期',
trigger: ['blur', 'change'],
},
},
{
field: 'address',
label: '地址',
type: FormTypeEnum.ADDRESS,
rules: {
required: true,
message: '请输入您的地址',
trigger: ['blur', 'change'],
},
},
{
field: 'select',
label: '选择学历',
type: FormTypeEnum.SELECT,
select: [
[
{ text: '小学', id: '1' },
{ text: '初中', id: '2' },
{ text: '高中', id: '3' },
{ text: '大学', id: '4' },
],
],
rules: {
required: true,
message: '请输入您的学历',
trigger: ['blur', 'change'],
},
},
{
field: 'age',
label: '年龄',
type: FormTypeEnum.NUMBER,
rules: [
{
required: true,
message: '请输入您的年龄',
trigger: ['blur', 'change'],
},
{
required: true,
message: '不能小于最小值',
min: 10,
trigger: ['blur', 'change'],
},
{
message: '不能大于最大值',
max: 20,
trigger: ['change'],
},
],
},
{
field: 'remark',
label: '备注',
type: FormTypeEnum.TEXTAREA,
rules: {
required: true,
message: '请输入您的地址',
trigger: ['blur', 'change'],
},
},
]);
const handleSubmit = () => {
formRef.value.submit().then((res) => {
console.log(res);
});
};自定义插槽
说明
微信小程序差异微信小程序不能动态设置插槽,所以不支持自定义插槽,后续有其他方法会更新文档
vue
<template>
<hy-form ref="formRef" :columns="columns" :form-data="formData" labelWidth="90">
<template #custom="{ record, errorStyle }">
<hy-input v-model="formData[record.field]" :custom-style="errorStyle"></hy-input>
</template>
</hy-form>
</template>ts
import { reactive } from 'vue';
import { FormTypeEnum, HyForm, HyInput } from 'hy-app';
import type { FormColumnsType } from 'hy-app';
const columns: FormColumnsType[] = reactive([
{
field: 'custom',
label: '自定义内容',
type: FormTypeEnum.CUSTOM,
rules: {
required: true,
message: '请输入您的自定义内容',
trigger: ['blur', 'change'],
},
},
]);API
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| columns | 表单字段配置 | array | - |
| formData | 表单值 | object | - |
| labelPosition | 表单label的位置 | left|top | left |
| labelWidth | label 宽度 | string|number | auto |
| right | 输入值是否右对齐 | boolean | false |
| labelAlign | label 字体的对齐方式 | left|center|right | left |
| border | 显示表单单行底部下划线 | boolean | false |
| disabled | 禁用表单[1] | boolean | false |
| input | 输入框属性api集合 | HyInputProps | - |
| textarea | 文本域属性api集合 | HyTextareaProps | - |
| picker | 选择器属性api集合 | HyPickerProps | - |
| switchItem | 开关属性api集合 | HySwitchProps | - |
| radio | 单选属性api集合 | HyRadioProps | - |
| checkButton | 选择按钮属性api集合 | HyCheckButtonProps | - |
columns
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| label | 文字描述 | string | - |
| field | 字段名 | string | - |
| right | 内容右固定 | boolean | - |
| type | 表单类型(见下面枚举出来字段)。 | enum | - |
| maxCount | 文件上传最大数(type 为 upload 时候) | number | - |
| select | 选择器配置数据集合[2] | string[][]|{text:string;id:string}[][] | - |
| actions | 单选框配置数据集合[3] | string | - |
| mode | 日期展示的格式(type 等于 date 选填) | enum | - |
| rules | 校验规则 | object|array | - |
| input | 输入框属性api集合 | HyInputProps | - |
| textarea | 文本域属性api集合 | HyTextareaProps | - |
| picker | 选择器属性api集合 | HyPickerProps | - |
| switchItem | 开关属性api集合 | HySwitchProps | - |
| radio | 单选属性api集合 | HyRadioProps | - |
| checkButton | 选择按钮属性api集合 | HyCheckButtonProps | - |
actions
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| label | 显示文本内容 | string | - |
| value | 获取的值 | string|number | - |
| checked | 是否选中 | boolean | - |
| disabled | 是否禁用 | boolean | - |
rules
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| required | 是否必填 | boolean | - |
| message | 校验不通过时的提示信息 | string | - |
| trigger | 表单事件校验 | (blur|change)[] | - |
| min | 最小输入内容个数 | number | - |
| max | 最大输入内容个数 | number | - |
| type | 手机号校验、邮箱校验、复杂密码校验 | phone|email|password | - |
| validator | 自定义校验规则 | Function | - |
type 类型
UPLOAD上传文件TEXT普通输入框NUMBER数字输入框PASSWORD密码输入框ID_CARD身份证 id 输入框RADIO单选DATE时间选择器SELECT选择器ADDRESS地址选择器SWITCH开关DETAIL详情TEXTAREA文本域CUSTOM自定义插槽
mode 类型
DATETIMEyyyy-MM-dd HH:mm:SSDATEyyyy-MM-ddTIMEhh:MM:ssYEAR_MONTHyyyy-MMMONTH_DAYMM-ddHOUR_MINUTEHH:mmMINUTE_SECONDmm:SS
Methods
| 方法名 | 说明 | 参数 |
|---|---|---|
| validate | 验证表单 | - |
| resetFields | 重置表单 | - |
| clearValidate | 清除验证 | (fields?: string[]) |
| submit | 提交表单 | - |

