uniapp根据后端返回,生成动态表单

在这里插入图片描述

<template>
	<view>
		<view>
			<uni-forms ref="dynamicForm" :rules="dynamicRules" :modelValue="dynamicFormData">
				<uni-forms-item label-position="top" label-width="375" v-for="(item, index) in dynamicLists"
					:key="item.id" :label="index + 1 + '.' + item.label" required :rules="item.rules"
					:name="'domains[' + item.id + ']'">
					<uni-easyinput class="easyinput" trim="all" :autoHeight="true" maxlength="500" type="textarea"
						v-model="item.value" placeholder="请输入内容" />
				</uni-forms-item>
			</uni-forms>
		</view>
		<view class="subbtn">
			<button class="box_null_footer_btn" @click="submit">
				去上传
			</button>
		</view>
	</view>

</template>

<script>

data() {
	return {
		detail: {},//后端返回数据
		// 自定义表单校验规则
		dynamicRules: {
			// 这里随便写一个,不然会报错
			name: {
				rules: [{
					required: true,
					errorMessage: '姓名不能为空'
				}]
			},
		},
		dynamicFormData: {},
		dynamicLists: []
	}
},
onLoad(e) {

	this.getForm()

},
// 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
onReady() {
	this.$refs.dynamicForm.setRules(this.dynamicRules)
},

methods: {
	// 获取表单
	async getForm() {
		const res = await getCaseForm()
		console.log(res, "表单");
		if (res.status == 0) {
			this.detail = res.data

			for (var i = 0; i < this.detail.questions.length; i++) {
				this.dynamicLists.push({
					label: this.detail.questions[i].problem,
					value: "",
					rules: [{
						'required': true,
						errorMessage: "请输入" + this.detail.questions[i].problem
					}],
					id: this.detail.questions[i].id
				})
			}
			console.log(this.dynamicLists, "处理数据");
		} else {
			this.$u.toast(res.msg)
		}
	},
	async submit() {
		console.log(this.form, "提交数据");
		this.$refs.dynamicForm.validate(valid => {
			if (!valid) {
				console.log('验证通过', this.dynamicLists);
				// const res = await subCaseForm()
				// console.log(res, '表单提交');
			} else {
				console.log('验证失败', this.dynamicLists);
			}
		});
	},
}

</script>

<style lang="scss" scoped>
.subbtn {
	margin-top: 40rpx;
	padding-bottom: 40rpx;
	.box_null_footer_btn {
		width: 100%;
		height: 100rpx;
		background: linear-gradient(125deg, #EFD8BD 0%, #E2C3A3 100%);
		box-shadow: 0px 4px 10px 0px #E5E5E5;
		border-radius: 50rpx;
		display: flex;
		justify-content: center;
		align-items: center;
		font-size: 32rpx;
		font-family: PingFang SC-Regular, PingFang SC;
		font-weight: 400;
		color: #794F35;
	}
}
</style>


		

结果

在这里插入图片描述

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值