<template>
<div class="select">
<el-form :model="validateForm" :rules="validateRules" :show-message="false" ref="validateForm" label-width="100px"
hide-required-asterisk>
<el-form-item prop="email" label="邮箱">
<el-input v-model="validateForm.email"></el-input>
</el-form-item>
<el-form-item :prop="'arr.' + i" :rules="validateRules.select" :key="i" v-for="(item, i) in validateForm.arr"
label="选择">
<el-select @visible-change="getOption($event, i)" v-model="validateForm.arr[i]" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
:disabled="item.disabled">
</el-option>
</el-select>
<span @click="i===0?addClick():delClick(i)" :class="i===0?'blue':'red'"
class="cursor-font margin-left">{{i===0?'添加':'删除'}}</span>
</el-form-item>
</el-form>
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="cancelForm">取消</el-button>
</div>
</template>
<script>
export default {
name: 'Select',
data() {
return {
options: [],
validateForm: {
email: '',
arr: ['']
},
validateRules: {
email: [
{required: true, message: '请输入邮箱地址', trigger: 'blur'},
{type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change']}
],
select: [
{required: true, message: '请选择', trigger: 'change'}
]
}
}
},
methods: {
getOption(state, i) {
if (!state) {
return
}
let arr = this.validateForm.arr
let result = [
{
value: '选项1',
label: '黄金糕'
}, {
value: '选项2',
label: '双皮奶'
}, {
value: '选项3',
label: '蚵仔煎'
}, {
value: '选项4',
label: '龙须面'
}, {
value: '选项5',
label: '北京烤鸭'
}
]
result.forEach((item, index) => {
let isDisable = arr.includes(item.value) && arr[i] != item.value
result[index].disabled = isDisable
})
this.options = result
},
addClick() {
this.validateForm.arr.push('')
},
delClick(i) {
this.validateForm.arr.splice(i, 1)
},
submitForm() {
this.$refs.validateForm.validate((valid) => {
if (valid) {
this.$message.success('提交成功:' + this.validateForm)
} else {
this.$message.error('请填写完整')
return false;
}
});
},
cancelForm() {
// 对整个表单进行重置,将所有字段值重置为初始值并移除校验结果
this.$refs.validateForm.resetFields()
}
}
}
</script>
<style scoped>
.select {
width: 400px;
}
.margin-left {
margin-left: 44px;
}
.cursor-font {
cursor: pointer;
}
.blue {
color: blue;
}
.red {
color: red;
}
</style>
来源:CSDN
作者:熙冰
链接:https://blog.csdn.net/melodystars/article/details/103961927