Skip to content

useForm 表单

高性能组件,配置配置项生成form表单

注意

暂不支持动态插槽

平台差异说明

App(vue)App(nvue)H5微信小程序

基本使用

  • model 关联内部的model
  • showCollapseButton 是否显示展开收起, collapsedRows 控制显示的是多少行
  • showDefaultActions 是否显示操作按钮, submitButtonOptions 提交按钮的参数, resetButtonOptions 重置按钮的参数, actionButtonsReverse 操作按钮是否反转(提交按钮前置)
  • handleSubmit 表单提交回调
  • handleReset 表单重置回调
  • handleValuesChange 表单值变化回调
  • submitValidate 提交触发校验 默认false
html
<script setup lang="ts">
  import { type SuUseFormSchema } from '@/uni_modules/sun-uni/components/su-use-form'

  const formRef = ref()
  const schemas: SuUseFormSchema[] = [
    {
      field: 'input1',
      component: 'SuInput',
      // 对应组件的参数
      componentProps: {
        placeholder: '请输入'
      },
      dependencies: {
        rules: {
          required: true,
          message: '请输入'
        }
      },
      // 界面显示的label
      label: '字段字段字段'
    },
    {
      field: 'input2',
      component: 'SuInput',
      // 对应组件的参数
      componentProps: {
        placeholder: '请输入'
      },
      dependencies: {
        required: true
      },
      // 界面显示的label
      label: '字段2',
      colProps: {
        span: 6
      }
    },
    {
      field: 'input3',
      component: 'SuInput',
      // 对应组件的参数
      componentProps: {
        placeholder: '请输入'
      },
      dependencies: {
        required: true
      },
      // 界面显示的label
      label: '字段3',
      colProps: {
        span: 6
      }
    },
    {
      field: 'input4',
      component: 'SuInput',
      // 对应组件的参数
      componentProps: {
        placeholder: '请输入'
      },
      dependencies: {
        required: true
      },
      // 界面显示的label
      label: '字段4'
    }
  ]

  function handleSubmit(values: SuUni.Recordable) {
    // const [_, formApi] = injectFormProps()
    console.log(values, 'values')
    console.log(formRef, 'formRef')
    // formApi.validate()
    unref(formRef).validate()
  }

  function handleReset() {
    console.log('handleReset---handleReset')
  }
</script>
<template>
  <view style="padding: 0 12px">
    <su-use-form
      ref="formRef"
      :schemas="schemas"
      :commonConfig="{
        autoSetPlaceHolder: true
      }"
      showDefaultActions
      showCollapseButton
      :collapsedRows="2"
      @submit="handleSubmit"
      @reset="handleReset"
    ></su-use-form>
  </view>
</template>

hooks高级用法

查看基础用法示例
html
<template>
  <view style="padding: 0 12px">
    <su-use-form
      ref="formRef"
      :schemas="schemas"
      :commonConfig="{
        autoSetPlaceHolder: true
      }"
      showDefaultActions
      showCollapseButton
      :collapsedRows="2"
      @submit="handleSubmit"
      @reset="handleReset"
    ></su-use-form>
    <!-- #ifdef H5 -->
    <su-divider text="BaseForm"></su-divider>
    <BaseForm />
    <!-- #endif -->
    <!-- #ifdef MP-WEIXIN -->
    <su-divider text="BaseWeexForm"></su-divider>
    <su-use-form :formApi="baseWeexFormApi" />
    <!-- #endif -->
  </view>
</template>
typescript
<script setup lang="ts">
  import { useSuForm, useSuWeexForm, type SuUseFormSchema } from '@/uni_modules/sun-uni/components/su-use-form'
  import type { SuUni } from '@/uni_modules/sun-uni/types/uni'
  import { ref, unref } from 'vue'

  const formRef = ref()

  const schemas: SuUseFormSchema[] = [
    {
      field: 'input1',
      component: 'SuInput',
      // 对应组件的参数
      componentProps: {
        placeholder: '请输入'
      },
      dependencies: {
        rules: {
          required: true,
          message: '请输入'
        }
      },
      // 界面显示的label
      label: '字段字段字段'
    },
    {
      field: 'input2',
      component: 'SuInput',
      // 对应组件的参数
      componentProps: {
        placeholder: '请输入'
      },
      dependencies: {
        required: true
      },
      // 界面显示的label
      label: '字段2',
      colProps: {
        span: 6
      }
    },
    {
      field: 'input3',
      component: 'SuInput',
      // 对应组件的参数
      componentProps: {
        placeholder: '请输入'
      },
      dependencies: {
        required: true
      },
      // 界面显示的label
      label: '字段3',
      colProps: {
        span: 6
      }
    },
    {
      field: 'input4',
      component: 'SuInput',
      // 对应组件的参数
      componentProps: {
        placeholder: '请输入'
      },
      dependencies: {
        required: true
      },
      // 界面显示的label
      label: '字段4'
    }
  ]

  const [BaseForm, baseFormApi] = useSuForm({
    schemas,
    commonConfig: {
      autoSetPlaceHolder: true
    },
    showDefaultActions: true,
    showCollapseButton: true,
    collapsedRows: 2,
    handleSubmit: () => {
      baseFormApi.validate()
    }
  })

  const baseWeexFormApi = useSuWeexForm({
    schemas,
    commonConfig: {
      autoSetPlaceHolder: true
    },
    showDefaultActions: true,
    showCollapseButton: true,
    collapsedRows: 2,
    handleSubmit: () => {
      baseWeexFormApi.validate()
    }
  })

  function handleSubmit(values: SuUni.Recordable) {
    // const [_, formApi] = injectFormProps()
    console.log(values, 'values')
    console.log(formRef, 'formRef')
    // formApi.validate()
    unref(formRef).validate()
  }

  function handleReset() {
    console.log('handleReset---handleReset')
  }
</script>

useSuForm与useSuWeexForm的区别

由于小程序无法使用动态组件,因此有两个hooks函数,内部都是使用的SuUseFormApi工具类

  • useSuForm使用于APPH5hooks返回组件,不需要引入su-use-form组件
  • useSuWeexForm使用于小程序, 需要引入su-use-form组件, hooks 返回的是formApi

API

Form Props

参数说明类型默认值可选值
model绑定的数据SuUni.Recordable--
actionButtonsReverse操作按钮是否反转(提交按钮前置)booleanfalsetrue
actionWrapperClass表单操作区域classstring--
fieldMappingTime表单时间字段映射SuUseFormFieldMappingTime--
handleReset表单重置回调SuUseFormHandleResetFn--
handleSubmit表单提交回调SuUseFormHandleSubmitFn--
handleValuesChange表单值变化回调(values: Record<string, any>) => void--
resetButtonOptions重置按钮参数SuUseFormActionButtonOptions{content: uni.$u.config.i18n('重置'),show: true}-
submitButtonOptions提交按钮参数SuUseFormActionButtonOptions{content: uni.$u.config.i18n('提交'),show: true, type: 'primary'}-
showDefaultActions是否显示默认操作按钮booleanfalsetrue
submitValidate提交触发校验booleanfalsetrue
messageType消息提示的errorType'message' | 'toast''message''toast'
collapsed是否展开,在showCollapseButton=true下生效boolean--
collapsedRows折叠时保持行数number1-
collapseTriggerResize是否触发resize事件booleanfalsetrue
commonConfig单项通用后备配置,当子项目没配置时使用这里的配置,子项目配置优先级高于此配置SuUseFormCommonConfig--
formform 示例 useForm返回值SuUseFormContext<SuUni.Recordable>--
layout表单项布局SuUseFormLayout--
schemas表单定义项SuUseFormSchema[]--
showCollapseButton是否显示展开/折叠booleanfalsetrue
rowPropssu-row参数Partial<SuRowProps>--
warpperClass最外层warpper classstring--
formClasssu-form classstring--

CommonConfig Props

类型为SuUseFormCommonConfig

参数说明类型默认值可选值
colon在Label后显示一个冒号booleanfalsetrue
componentProps所有表单项的propsSuComponentProps--
formItemProps所有表单项的控件PropsSuFormItemProps--
formItemClass所有表单项的classstring--
hideLabel隐藏所有表单项labelbooleanfalsetrue
hideRequiredMark是否隐藏必填标记booleanfalsetrue
labelClass所有表单项的label样式classstring--
labelWidth所有表单项的label宽度number--
modelPropName所有表单项的model属性名string'modelValue'-
rulesMessageJoinLabelrules message是否拼接labelbooleantruefalse
autoSetPlaceHolder设置placeHolderbooleanfalsetrue

Schemas Props

类型为SuUseFormSchemaSuUseFormCommonConfig类型也可以使用

参数说明类型默认值可选值
component组件SuUseFormComponentType--
componentProps组件参数SuComponentProps--
defaultValue默认值any--
label表单项名称string--
field字段名string--
textField显示文本字段,回显使用,默认值为field值加Textstring--
dependencies依赖SuUseFormItemDependencies--
colProps列属性Partial<SuColProps>--
changeEvent组件change的名称stringupdate:modelValue-
popupProps弹窗组件参数SuUseFormComponentPopupProps--

SuUseFormContext

方法说明类型
submitForm提交事件-
resetForm重置事件-
setFieldValue设置表单项的值-
setFieldsValue设置表单字段的值-
resetFields重置表单字段-
getFieldsValue获取表单字段的值-
clearValidate清除指定字段的验证-
updateSchema更新表单模式-
resetSchema重置表单模式-
removeSchemaByField根据字段名移除表单模式-
appendSchemaByField根据字段名追加表单模式-
validateField验证指定字段-
validate验证整个表单-
getFormSchema获取表单模式-

SuUseFormApi 方法

方法说明类型
formuseForm 返回的函数SuUseFormContext
statesu-use-form PropsSuUseFormProps
formEventform表单函数SuFormEventProvide
removeSchemaByFields根据字段名移除表单项-
resetForm重置表单-
setFieldValue设置单个表单值-
setFieldsValue设置多个表单值-
submitForm提交方法-
updateSchema更新Schema-
validate表单校验-
validateField根据字段表单校验-
appendSchemaByField添加表单项-

Emits

名称说明
submit提交事件
reset重置事件
update:modelmodel改变事件
collapse-change展开收起事件

Released under the MIT License.

Released under the MIT License.