关于uniapp的高级表单组件mosowe-form

 更新时间:2023年04月23日 10:32:26   作者:Mosowe  
这篇文章主要介绍了关于uniapp的高级表单组件mosowe-form,由于一些表单标签改来改去比较繁琐,重复性很多,且样式布局啥的几乎万变不离其中,为了偷懒,开发了mosowe-form及mosowe-table两款高级组件,需要的朋友可以参考下

演示地址

下载地址

引言

常年做web系统端,对web系统端的功能布局等有很深刻的了解,经常cv一些表单标签改来改去比较繁琐,重复性很多,且样式布局啥的几乎万变不离其中,为了偷懒,开发了mosowe-form及mosowe-table两款高级组件,其思路借鉴了antdesign的高级组件。

这里面依赖的组件基本是uniapp官方的和自己二次封装的:

依赖组件

uni-form
uni-data-picker
uni-datetime-picker
uni-file-picker
uni-easyinput
uni-datetime-picker
uni-data-select
uni-data-picker
uni-data-checkbox
uni-combox
uni-popup
uni-row
uni-col
mosowe-editor

在线演示

props

属性类型默认说明
options{formConfig, list:optionItem[]}-表单配置项
hideButtonbooleanfalse隐藏自带按钮
readOnlybooleanfalse只读
resetInterceptbooleanfalse重置表单前拦截
filterEmptybooleanfalse提交时过滤空值
groupColobject-表单分组布局,这里是统一配置,参考uni-col
itemColobject表单项布局,这里是统一配置,参考uni-col
btnAlignstringleft底部提交按钮位置 可选:left、right、center
submitTextstring提交提交按钮文案
resetTextstring重置重置按钮文案

formConfig

uni-form配置数据

optionItem

属性类型默认说明
subTitlestring-表单分组标题,非必选
colobject-表单分组布局,参考uni-col
itemsobject-下一级为formItem的name(标记itemName),配置为nameConfig

nameConfig

属性类型默认说明
typestring-表单类型,typeString
defaultValueany-默认值
colobject-该项布局,参考uni-col
hidebooleanfalse隐藏该表单,不渲染在html中
visiblebooleantrue显示该表单,display显隐
typePropsobject即表单项类型type的props配置
formItemPropsobjectuni-forms-item的props配置,配置项内的name不会成为uni-forms-item的name,会被itemName覆盖
unionNamestring关联表单类型,editer及upload无效,多个unionName用&分割,注意前后没有空格,即当本itemName值改变时,相关表单的值清空或者赋值,赋值方式:[关联itemName]=defaultValue,defaultValue多个的话使用[]包裹(目前组件中没有多选功能),若defaultValue值为number类型,则在值前添加一个~,例:sex=~1
transformfunction提交时转化,一般来说都是吐给后端的存在数据库里的数据,参数为当前值

typeString

说明
input表单输入框,文本域,注意:uni-easyinput文档中少写了一个prop:primaryColor 设置主题色(默认#2979ff)
select下拉选择,注意:uni-data-select文档中少写了一个prop:disabled 禁用
combox组合框
editor富文本编辑器,内部文件上传功能依赖云存储,需安装wangeditor
radio单选+多选
switch开关选择器
date日期选择器
slider滑动选择器
pickerpicker选择器
cascade级联选择器,仅限本地数据
upload文件上传,会自动上传至当前云服务空间,若未使用unicloud云服务空间,则不使用该组件,非自动上传,点击提交时上传

emits

emits说明
submit表单提交
reset表单重置
change表单项改变,返回表单项name及值

slots

slot说明
[itemName]DefaultformItem的default插槽
[itemName]DefaultBeforeformItem的default插槽内前置插槽
[itemName]DefaultAfterformItem的default插槽内后置插槽
[itemName]LabelformItem的label插槽
[itemName]LabelBeforeformItem的label插槽内前置插槽
[itemName]LabelAfterformItem的label插槽内后置插槽
button提交重置按钮区插槽,作用域参数为:submit,reset
lineAfter最后一个表单项后面的插槽,将会与表单项内联展示,不独立占一行,作用域参数为:submit,reset

示例代码

<template>
  <view class="index-page">
    <mosowe-form
      :options="formOptions"
      ref="mosoweFormRef"
      :groupCol="{
        span: 12
      }"
      @submit="submit"
      @reset="reset"
      @change="change"
    ></mosowe-form>
  </view>
</template>

<script setup lang="ts">
import { ref } from 'vue';


const mosoweFormRef = ref<any>(null)

const submit = (data:any) => {
  console.log('submit',data)
}

const reset = (data:any) => {
  console.log('reset',data)
}
const formOptions = ref({
  formConfig:{
    'label-width': '100px',
    'label-align': 'right'
  },
  list:[
    {
      subTitle: '表单分组一',
      col:{
        span: 24
      },
      items:{
        name:{
          type:'input',
          defaultValue: '测试',
          col:{
            span: 12
          },
          unionName: 'address=哈哈哈&sex=~1',
          typeProps:{
            placeholder:'请输入'
          },
          formItemProps:{
            label:'测试',
            required:true,
            rules:[
              {
                required:true,
                errorMessage: '请填写姓名'
              }
            ]
          }
        },
        address:{
          type:'input',
          col:{
            span: 12
          },
          defaultValue: null,
          typeProps:{
            primaryColor:'#999999',
            autoHeight:true,
            type:'textarea',
            placeholder:"写这里",
            placeholderStyle:"color:#ff0000",
          },
          formItemProps:{
            label:'文本域',
          }
        },
        editor:{
          type:'editor',
          defaultValue: '<p>11112222<strong>22</strong></p>',
          typeProps:{
          },
          formItemProps:{
            label:'编辑器',
          }
        }
      }
    },
    {
      subTitle: '表单分组二',
      items:{
        sex:{
          type:'select',
          defaultValue: '',
          unionName: 'address-哈哈哈,你是谁',
          typeProps:{
            placeholder:'请选择',
            localdata:[
              {
                value:0,
                text:'男'
              },
              {
                value:1,
                text:'女'
              },
              {
                value:2,
                text:'未知',
              },
            ]
          },
          formItemProps:{
            label:'性别',
          }
        },
        city:{
          type: 'combox',
          defaultValue: '',
          unionName: 'address=combox',
          typeProps:{
            candidates:[
              '北京',
              '重庆',
              '上海',
              '南京',
              '天津'
            ]
          },
          formItemProps:{
            label:'城市',
          }
        },
        chooseR:{
          type: 'radio',
          defaultValue: '',
          typeProps:{
            localdata:[
              {"value": 0,"text": "篮球"  },
              {"value": 1,"text": "足球"},
              {"value": 2,"text": "游泳"},
            ]
          },
          formItemProps:{
            label:'单选',
          }
        },
        switchData:{
          type:'switch',
          defaultValue: true,
          formItemProps:{
            label:'开关',
          }
        },
        sliderData:{
          type:'slider',
          defaultValue: 20,
          typeProps:{
            'show-value':true
          },
          formItemProps:{
            label:'滑块',
          }
        },
        date:{
          type:'date',
          defaultValue: '',
          typeProps:{},
          formItemProps:{
            label:'日期',
          }
        },
        daterange:{
          type:'date',
          defaultValue: '',
          typeProps:{
            type:'daterange'
          },
          formItemProps:{
            label:'日期范围',
          }
        },
        datetime:{
          type:'date',
          defaultValue: '',
          typeProps:{
            type:'datetime'
          },
          formItemProps:{
            label:'日期时间',
          }
        },
        datetimerange:{
          type:'date',
          defaultValue: '',
          typeProps:{
            type:'datetimerange'
          },
          formItemProps:{
            label:'日期时间范围',
          }
        },
        time:{
          type:'picker',
          defaultValue: '12:00',
          typeProps:{
            mode: 'time',
            start:'00:00',
            end:'13:59'
          },
          formItemProps:{
            label:'时间',
          }
        },
        pickerdate:{
          type:'picker',
          defaultValue: '2023-03',
          typeProps:{
            mode: 'date',
            fields:'month'
          },
          formItemProps:{
            label:'月份',
          }
        },
        cascade:{
          type:'cascade',
          defaultValue: [],
          typeProps:{
            localdata:[{
              text: "一年级",
              value: "1-0",
              children: [{
                text: "1.1班",
                value: "1-1"
              },
              {
                text: "1.2班",
                value: "1-2"
              }]
            },
            {
              text: "二年级",
              value: "2-0",
              children: [{
                text: "2.1班",
                value: "2-1"
              },
              {
                text: "2.2班",
                value: "2-2"
              }]
            },
            {
              text: "三年级",
              value: "3-0",
              disable: true
            }]
          },
          formItemProps:{
            label:'级联',
          }
        },
        file:{
          type:"upload",
          defaultValue:{
            extname: "png",
            name: "1111111.png",
            url: "https:..." // 改成实际地址
          },
          typeProps:{
            'return-type':'object'
          },
          formItemProps:{
            label: '文件上传'
          }
        },
        fileArr:{
          type:"upload",
          defaultValue:[{
            extname: "png",
            name: "1111111.png",
            url: "https:..." // 改成实际地址
          }],
          typeProps:{},
          formItemProps:{
            label: '文件上传'
          }
        },
        fileArrNo:{
          type:"upload",
          defaultValue:'',
          typeProps:{},
          formItemProps:{
            label: '文件上传'
          }
        },
      }
    }
  ]
})

const change = (name:string,value:any) =>{
  console.log('change',name,value)
  if (name === 'chooseR') {
    formOptions.value.list[1].items.city.typeProps.candidates = [
              '北京',
              '重庆',
              value
            ]
  }
}
</script>

<style lang="scss" scoped></style>

到此这篇关于关于uniapp的高级表单组件mosowe-form的文章就介绍到这了,更多相关uniapp的mosowe-form表单组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue 指令与过滤器案例代码

    vue 指令与过滤器案例代码

    这篇文章主要介绍了vue 指令与过滤器,本文通过案例代码给大家详细讲解,给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • vant中的picker选择器自定义选项内容

    vant中的picker选择器自定义选项内容

    这篇文章主要介绍了vant中的picker选择器自定义选项内容,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • vue原生方法自定义右键菜单

    vue原生方法自定义右键菜单

    这篇文章主要为大家详细介绍了vue原生方法自定义右键菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue的全局变量和全局拦截请求器的示例代码

    vue的全局变量和全局拦截请求器的示例代码

    这篇文章主要介绍了vue的全局变量和全局拦截请求器的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • vue项目开发中setTimeout等定时器的管理问题

    vue项目开发中setTimeout等定时器的管理问题

    这篇文章主要介绍了vue项目开发中setTimeout等定时器的管理问题,需要的朋友可以参考下
    2018-09-09
  • vue单页缓存方案分析及实现

    vue单页缓存方案分析及实现

    这篇文章主要介绍了vue单页缓存方案分析及实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • 如何使用el-table实现纯前端导出(适用于el-table任意表格)

    如何使用el-table实现纯前端导出(适用于el-table任意表格)

    我们日常做项目,特别是后台管理系统,常常需要导出excel文件,这篇文章主要给大家介绍了关于如何使用el-table实现纯前端导出的相关资料,本文适用于el-table任意表格,需要的朋友可以参考下
    2024-03-03
  • Vue3中进行二维码的生成与解码实现详解

    Vue3中进行二维码的生成与解码实现详解

    这篇文章主要为大家介绍了Vue3中进行二维码的生成与解码实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • ElementUI 复杂顶部和左侧导航栏实现示例

    ElementUI 复杂顶部和左侧导航栏实现示例

    本文主要介绍了ElementUI 复杂顶部和左侧导航栏实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 使用Vue开发自己的Chrome扩展程序过程详解

    使用Vue开发自己的Chrome扩展程序过程详解

    这篇文章主要介绍了使用Vue开发自己的Chrome扩展程序过程详解,浏览器扩展程序是可以修改和增强 Web 浏览器功能的小程序。它们可用于各种任务,例如阻止广告,管理密码,组织标签,改变网页的外观和行为等等。,需要的朋友可以参考下
    2019-06-06

最新评论