vue多层遍历增删和表单校验dome

80 阅读1分钟

vue多层遍历增删和表单校验dome,需求中可能会遇到,使用场景:遍历之后child还需要遍历可以使用一下代码块,再此记录下

<template>
	<div>
		<el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
			<el-button @click="handleAdd">
				添加收货人
			</el-button>
			<el-form-item label="货物名称" prop="type">
				<el-input v-model="form.type" />
			</el-form-item>
			<div v-for="(item, index) in form.goodsDetail" :key="index">
				<el-form-item label="收货人" :prop="`goodsDetail.` + index + `.name`" :rules="rules.name">
					<el-input v-model="item.name" placeholder="请输入收货人" />
				</el-form-item>
				<div v-for="(item, index1) in form.goodsDetail[index].phoneList" :key="index1">
					<el-form ref="formRefs" :model="form.goodsDetail[index]" label-width="100px">
						<el-form-item :prop="`phoneList.${index1}.phoneName`"  label="手机号" :rules="rules.phoneName">
							<el-input v-model="item.phoneName"></el-input>
						</el-form-item>
						<el-form-item :prop="'phoneList.' + index1 + '.phoneName1'" label="手机号1" :rules="rules.phoneName1">
							<el-input v-model="item.phoneName1"></el-input>
						</el-form-item>
					</el-form>
				</div>
				<el-button @click="onADD(index)">添加手机号</el-button>
			</div>
		</el-form>
		<el-button type="primary" @click="submit">保存</el-button>
	</div>
</template>
	
<script>
export default {
	data() {
		return {
			rules: {
				type: [
					{ required: true, message: '请输入货物名称', trigger: 'blur' },
				],
				name: [
					{ required: true, message: '请输入收货人', trigger: 'blur' },
				],
				phoneName: [
					{ required: true, message: '请输入电话', trigger: 'blur' }
				],
				phoneName1: [
					{ required: true, message: '请输入电话1', trigger: 'blur' }
				],
			},
			form: {
				type: '',
				goodsDetail: [
					{
						name: "",
						phoneList: [
							{
								phoneName: "",
								phoneName1: ""
							}
						],

					}
				]
			}
		}
	},
	methods: {
		//添加收件地址
		handleAdd() {
			let data = {
				phoneList: [
					{
						phoneName: ""
					}
				],
				site: ""
			}
			this.form.goodsDetail.push(data)
		},
		onADD(index) {
			this.form.goodsDetail[index].phoneList.push(
				{
					phoneName: ""
				}
			)
		},
		// 手机号验证
		vali1() {
			let ref = this.$refs.formRefs;
			return new Promise((resolve, reject) => {
				let arr=[]
				ref.map((row) => {
					row.validate(async (valid) => {
						arr.push(valid)
					})
				})
				setTimeout(() => {
					arr.includes(false)?reject(false):resolve(true)
				});
				
			})
		},
		// 其他验证
		vali2() {
			let ref = this.$refs.formRef;
			return new Promise((resolve, reject) => {
				ref.validate(async (valid) => {
					if (valid) resolve(true)
					else reject(false)
				})
			})
		},
		// 手机号验证
		submit() {

			Promise.all([this.vali1(), this.vali2()]).then(res => {
				console.log(res,222222)
				if (!res.includes(false)) {
					console.log('表单验证成功----请输入')
				}
			}).catch(res => {
				console.log('表单验证失败----请输入')
			})
		}
	}
}

</script>