uniapp+vue2、vue3表单

持续学习vue3
在这里插入图片描述
template

<template>
	<view class="formSub">
		<uni-forms ref="form" :modelValue="formData" :rules="rules" label-position="top">
			<uni-forms-item label="企业名称" name="name">
				<view class="lebelPosition">
					企业名称 <text>*</text>
				</view>
				<uni-easyinput type="text" v-model="formData.name" placeholder="请输入企业名称" />
			</uni-forms-item>
			<uni-forms-item label="联系人" name="linkman">
				<view class="lebelPosition">
					联系人 <text>*</text>
				</view>
				<uni-easyinput type="text" v-model="formData.linkman" placeholder="请输入联系人昵称" />
			</uni-forms-item>
			<uni-forms-item label="联系人电话" name="linktel">
				<view class="lebelPosition">
					联系人电话 <text>*</text>
				</view>
				<uni-easyinput type="text" v-model="formData.linktel" placeholder="请输入联系人电话" />
			</uni-forms-item>


			<view class="" v-if="pageFlag==1">
				<uni-forms-item label="日用电量" name="electricityDay">
					<view class="lebelPosition">
						日用电量 <text>*</text>
					</view>
					<uni-easyinput type="text" v-model="formData.electricityDay" placeholder="请输入日用电量" />
				</uni-forms-item>
				<uni-forms-item label="办公地址" name="businessAddress">
					<view class="lebelPosition">
						办公地址 <text>*</text>
					</view>
					<uni-easyinput type="text" v-model="formData.businessAddress" placeholder="请输入办公地址" />
				</uni-forms-item>
			</view>
			<view class="" v-if="pageFlag==2">
				<uni-forms-item label="当前社保缴纳基数" name="socialBase">
					<view class="lebelPosition">
						当前社保缴纳基数 <text>*</text>
					</view>
					<uni-easyinput type="text" v-model="formData.socialBase" placeholder="请输入当前社保缴纳基数" />
				</uni-forms-item>
				<uni-forms-item label="社保缴纳人数" name="socialPerson">
					<view class="lebelPosition">
						社保缴纳人数 <text>*</text>
					</view>
					<uni-easyinput type="text" v-model="formData.socialPerson" placeholder="请输入社保缴纳人数" />
				</uni-forms-item>
				<uni-forms-item label="办公地址" name="businessAddress">
					<view class="lebelPosition">
						办公地址 <text>*</text>
					</view>
					<uni-easyinput type="text" v-model="formData.businessAddress" placeholder="请输入办公地址" />
				</uni-forms-item>
			</view>
			<view class="" v-if="pageFlag==3">

				<uni-forms-item label="企业地址" name="businessAddress">
					<view class="lebelPosition">
						企业地址 <text>*</text>
					</view>
					<uni-easyinput type="text" v-model="formData.businessAddress" placeholder="请输入办公地址" />
				</uni-forms-item>
			</view>
		</uni-forms>
		<view class="formsubBtn">
			<button @click="submit">确认提交</button>
		</view>
		<uni-popup ref="popup" background-color="#fff" @change="change">
			<view class="popup-content" :class="{ 'popup-height': type === 'left' || type === 'right' }">
				<view class="tanchuceng">
					<view class="from_img">
						<image class="fromimg" src="../../static/from/success.png" mode=""></image>
					</view>

					<view class="from_succ">
						提交成功
					</view>
					<view class="from_text">
						请耐心等待审核...
					</view>
				</view>
			</view>
		</uni-popup>
	</view>
</template>

这是vue2

<script>
	
	export default {
		onLoad(option) {

			this.$refs.form.clearValidate([])
			// detail=1 实惠售电  detail=2 灵活用工  detail=3 贷款申请 
			console.log(option, 'option');
			if (option.detail == 1) {
				this.pageFlag = 1
				this.formData.electricityDay = ""
				this.formData.businessAddress = ""
				this.rules.electricityDay = {
					rules: [{
						required: true,
						errorMessage: '请输入日用电量',
					}]
				}
				this.rules.businessAddress = {
					rules: [{
						required: true,
						errorMessage: '请输入办公地址',
					}]
				}
				uni.setNavigationBarTitle({
					title: '实惠售电'
				})
			} else if (option.detail == 2) {
				this.pageFlag = 2
				this.formData.socialBase = ""
				this.formData.socialPerson = ""
				this.formData.businessAddress = ""
				this.rules.socialBase = {
					rules: [{
						required: true,
						errorMessage: '请输入当前社保缴纳基数',
					}]
				}
				this.rules.socialPerson = {
					rules: [{
						required: true,
						errorMessage: '请输入社保缴纳人数',
					}]
				}
				this.rules.businessAddress = {
					rules: [{
						required: true,
						errorMessage: '请输入办公地址',
					}]
				}
				uni.setNavigationBarTitle({
					title: '灵活用工'
				})
			} else {
				this.pageFlag = 3
				this.formData.businessAddress = ""
				this.rules.businessAddress = {
					rules: [{
						required: true,
						errorMessage: '请输入办公地址',
					}]
				}
				uni.setNavigationBarTitle({
					title: '贷款申请'
				})
			}

		},
		data() {
			return {
				pageFlag: 1,
				// 表单数据
				formData: {
					name: '',
					linkman: '',
					linktel: '',

				},
				rules: {
					// 对name字段进行必填验证
					name: {
						rules: [{
								required: true,
								errorMessage: '请输入企业名称',
							}
						]
					},
					linkman: {
						rules: [{
							required: true,
							errorMessage: '请输入联系人',
						}]
					},
					linktel: {
						rules: [{
							required: true,
							errorMessage: '请输入联系人电话',
						}]
					},

				}
			}
		},
		methods: {

			submit() {
				this.$refs.form.validate().then(res => {
					console.log('表单数据信息:', res);
					this.$refs.popup.open('center')
					if(this.pageFlag==3){

						uni.setStorageSync('daikuan', 1)
					}
					setTimeout(()=>{
						uni.navigateBack({
							delta: 1
						});
					},2000)
					// 清除验证
					// this.$refs.form.clearValidate()
				}).catch(err => {
					console.log('表单错误信息:', err);

				})
			}
		}
	}
</script>

vue3

<script>
	import {
		onLoad
	} from "@dcloudio/uni-app"
	import {
		ref,
		reactive,
		onMounted
	} from 'vue'
	let onloadVal = null
	export default {
		setup() {
			let pageFlag = ref(0)
			const formData = reactive({
				name: '',
				linkman: '',
				linktel: ''
			})
			const rules = reactive({
				// 对name字段进行必填验证
				name: {
					rules: [{
						required: true,
						errorMessage: '请输入企业名称',
					}]
				},
				linkman: {
					rules: [{
						required: true,
						errorMessage: '请输入联系人',
					}]
				},
				linktel: {
					rules: [{
						required: true,
						errorMessage: '请输入联系人电话',
					}]
				},

			})
			const form = ref(null)
			const popup = ref(null)
			onLoad((option) => {

				// form.value.clearValidate([])
				// detail=1 实惠售电  detail=2 灵活用工  detail=3 贷款申请 
				console.log(option, 'option');
				onloadVal = option.detail
				pageFlag.value = onloadVal


			})
			const submit = () => {
				form.value.validate().then(res => {
					console.log('表单数据信息:', res);
					popup.value.open('center')
					if (pageFlag == 3) {

						uni.setStorageSync('daikuan', 1)
					}
					setTimeout(() => {
						uni.navigateBack({
							delta: 1
						});
					}, 2000)
					// 清除验证
					// form.value.clearValidate()
				}).catch(err => {
					console.log('表单错误信息:', err);

				})
			}
			onMounted(() => {
				console.log(pageFlag.value, '---');
				if (pageFlag.value == 1) {


					formData.electricityDay = ""
					formData.businessAddress = ""
					console.log(formData, 'formData===');
					rules.electricityDay = {
						rules: [{
							required: true,
							errorMessage: '请输入日用电量',
						}]
					}
					rules.businessAddress = {
						rules: [{
							required: true,
							errorMessage: '请输入办公地址',
						}]
					}
					uni.setNavigationBarTitle({
						title: '实惠售电'
					})
				} else if (pageFlag.value == 2) {

					formData.socialBase = ""
					formData.socialPerson = ""
					formData.businessAddress = ""
					rules.socialBase = {
						rules: [{
							required: true,
							errorMessage: '请输入当前社保缴纳基数',
						}]
					}
					rules.socialPerson = {
						rules: [{
							required: true,
							errorMessage: '请输入社保缴纳人数',
						}]
					}
					rules.businessAddress = {
						rules: [{
							required: true,
							errorMessage: '请输入办公地址',
						}]
					}
					uni.setNavigationBarTitle({
						title: '灵活用工'
					})
				} else {

					formData.businessAddress = ""
					rules.businessAddress = {
						rules: [{
							required: true,
							errorMessage: '请输入办公地址',
						}]
					}
					uni.setNavigationBarTitle({
						title: '贷款申请'
					})
				}
			})
			return {
				pageFlag,
				formData,
				rules,
				submit,
				form,
				popup
			}
		}
	}
</script>

css

<style lang="scss" scoped>
	.formSub {
		background-color: #F6F6F6;
		height: 100vh;
		padding-top: 20upx;

		.tanchuceng {
			width: 535upx;
			height: 274upx;
			border-radius: 10rpx;
			padding: 41upx 0;
			box-sizing: border-box;

			.from_img {
				width: 100%;
				display: flex;
				align-items: center;
				justify-content: center;

				.fromimg {
					width: 68upx;
					height: 67upx;
				}
			}

			.from_succ {
				margin-top: 16upx;
				text-align: center;
				font-size: 30upx;
				font-family: PingFang SC;
				font-weight: 500;
				color: #080808;
			}

			.from_text {
				margin-top: 12upx;
				text-align: center;
				font-size: 28upx;
				font-family: PingFang SC;
				font-weight: 500;
				color: #999999;
			}
		}

	}
</style>
<style lang="scss">
	.formSub .uni-forms-item.is-direction-top .uni-forms-item__label {
		display: none;
	}

	.formSub .is-input-border {
		border: none;
		border-bottom: 1upx solid #EEEEEE;
		border-radius: 0;
	}

	.formSub .uni-easyinput__content-input {
		text-align: right;
		padding-right: 30upx;
		padding-left: 210upx !important;
	}

	.formSub .uni-forms-item__content {
		position: relative;
		height: 93upx !important;

		.uni-easyinput__content-input {
			height: 93upx !important;
		}

		.lebelPosition {
			position: absolute;
			top: 28upx;
			left: 43upx;
			z-index: 9;

			text {
				color: #D5132B;
			}
		}
	}

	.formSub .uni-forms-item {
		margin-bottom: 0 !important;
	}

	.formSub .uni-forms-item__error {
		z-index: 9;
		// display: none;
	}

	.formsubBtn {
		margin-top: 36upx;

		button {
			width: 696upx;
			height: 85upx;
			background: #01417E;
			border-radius: 4upx;
			font-size: 32upx;
			font-family: PingFang SC;
			font-weight: 500;
			color: #FFFFFF;
		}
	}

	.formSub {
		.uni-popup .uni-popup__wrapper {
			border-radius: 10upx;
		}
	}
</style>
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
uniapp中,可以使用Vue3的Composition API来编写表单。具体步骤如下: 1. 在setup函数中定义表单数据和表单验证规则: ``` import { ref } from 'vue' export default { setup() { const formData = ref({ username: '', password: '' }) const rules = { username: [ { required: true, message: '请输入用户名', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' } ] } return { formData, rules } } } ``` 2. 在模板中使用uni-form组件来渲染表单: ``` <template> <view> <uni-form :model="formData" :rules="rules"> <uni-form-item label="用户名" prop="username"> <uni-input v-model="formData.username" placeholder="请输入用户名"></uni-input> </uni-form-item> <uni-form-item label="密码" prop="password"> <uni-input v-model="formData.password" type="password" placeholder="请输入密码"></uni-input> </uni-form-item> <uni-form-item> <uni-button type="primary" @click="submitForm">提交</uni-button> </uni-form-item> </uni-form> </view> </template> ``` 3. 在methods中定义submitForm方法来提交表单: ``` import { ref } from 'vue' import { useForm } from '@ant-design-vue/use' export default { setup() { const formData = ref({ username: '', password: '' }) const rules = { username: [ { required: true, message: '请输入用户名', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' } ] } const { validate } = useForm(formData, rules) const submitForm = () => { validate().then(() => { // 表单验证通过,可以提交表单 }).catch(() => { // 表单验证不通过,不提交表单 }) } return { formData, rules, submitForm } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值