本文小编为大家详细介绍“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
在线演示
属性 | 类型 | 默认 | 说明 |
options | {formConfig , list:optionItem[] } | - | 表单配置项 |
hideButton | boolean | false | 隐藏自带按钮 |
readOnly | boolean | false | 只读 |
resetIntercept | boolean | false | 重置表单前拦截 |
filterEmpty | boolean | false | 提交时过滤空值 |
groupCol | object | - | 表单分组布局,这里是统一配置,参考uni-col |
itemCol | object | 表单项布局,这里是统一配置,参考uni-col | |
btnAlign | string | left | 底部提交按钮位置 可选:left、right、center |
submitText | string | 提交 | 提交按钮文案 |
resetText | string | 重置 | 重置按钮文案 |
optionItem
属性 | 类型 | 默认 | 说明 |
subTitle | string | - | 表单分组标题,非必选 |
col | object | - | 表单分组布局,参考uni-col |
items | object | - | 下一级为formItem的name(标记itemName),配置为nameConfig |
nameConfig
属性 | 类型 | 默认 | 说明 |
type | string | - | 表单类型,typeString |
defaultValue | any | - | 默认值 |
col | object | - | 该项布局,参考uni-col |
hide | boolean | false | 隐藏该表单,不渲染在html中 |
visible | boolean | true | 显示该表单,display显隐 |
typeProps | object | 即表单项类型type的props配置 | |
formItemProps | object | uni-forms-item的props配置,配置项内的name不会成为uni-forms-item的name,会被itemName覆盖 | |
unionName | string | 关联表单类型,editer及upload无效,多个unionName用& 分割,注意前后没有空格,即当本itemName值改变时,相关表单的值清空或者赋值,赋值方式:[关联itemName]=defaultValue,defaultValue多个的话使用[]包裹(目前组件中没有多选功能),若defaultValue值为number类型,则在值前添加一个~ ,例:sex=~1 | |
transform | function | 提交时转化,一般来说都是吐给后端的存在数据库里的数据,参数为当前值 |
typeString
值 | 说明 |
input | 表单输入框,文本域,注意:uni-easyinput文档中少写了一个prop:primaryColor 设置主题色(默认#2979ff) |
select | 下拉选择,注意:uni-data-select文档中少写了一个prop:disabled 禁用 |
combox | 组合框 |
editor | 富文本编辑器,内部文件上传功能依赖云存储,需安装wangeditor |
radio | 单选+多选 |
switch | 开关选择器 |
date | 日期选择器 |
slider | 滑动选择器 |
picker | picker选择器 |
cascade | 级联选择器,仅限本地数据 |
upload | 文件上传,会自动上传至当前云服务空间,若未使用unicloud云服务空间,则不使用该组件,非自动上传,点击提交时上传 |
emits
emits | 说明 |
submit | 表单提交 |
reset | 表单重置 |
change | 表单项改变,返回表单项name及值 |
slot | 说明 |
[itemName]Default | formItem的default插槽 |
[itemName]DefaultBefore | formItem的default插槽内前置插槽 |
[itemName]DefaultAfter | formItem的default插槽内后置插槽 |
[itemName]Label | formItem的label插槽 |
[itemName]LabelBefore | formItem的label插槽内前置插槽 |
[itemName]LabelAfter | formItem的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怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。