uniapp的高级表单组件mosowe-form怎么使用

发布时间:2023-04-24 16:50:03 作者:iii
来源:亿速云 阅读:149

本文小编为大家详细介绍“uniapp的高级表单组件mosowe-form怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“uniapp的高级表单组件mosowe-form怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

引言

常年做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配置
formItemPropsobject
uni-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怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. 使用uniapp实现可以左右滑动的导航栏
  2. 使用uniapp微信小程序实现一个页面多个倒计时

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

uniapp

上一篇:有哪些好用的Javascript技巧

下一篇:Vue3怎么将组件手动渲染到指定元素中

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》