下拉多选框、带搜索、带条件互斥逻辑判断组件
如图效果,多选下拉框,可搜索下拉内容进行选择,一组选择后,其他组再选,之前的选项置灰(也就是说,每个选项只能被选一次。)
上代码:
html:
<el-dialog title="编辑" :visible.sync="dialogVisible" append-to-body width="540px" ref="ruleForm" @open="handleOpen" @close="hanldClose" > <el-form ref="ruleForm"> <el-form-item label="日期" prop="materialWarehouseId"> <el-input v-model="ruleForm.dutyDateStr" disabled>el-input> el-form-item> <el-form-item label="带班领导" prop="shiftLeaderUseridsList"> <el-select placeholder="请选择带班领导" v-model="ruleForm.shiftLeaderUseridsList" collapse-tags :remote="false" :multiple="!single" :filterable="single" clearable @clear="clearHandle" @visible-change="blurHandle('带班领导')" > <div class="inputBox" v-if="!single"> <el-input v-model="filterQuery" @input="filterMethodThrottle($event)" >el-input> div> <template v-for="item in orgPersonList"> <el-option :key="item.id" :label="item.realName + ' ' + item.telPhone" :value="item.id" :disabled="item.disabled" v-show="item.isShow" > el-option> template> el-select> el-form-item> <el-form-item label="值班科长" prop="dutySectionChiefUseridsList"> <el-select placeholder="请选择值班科长" v-model="ruleForm.dutySectionChiefUseridsList" collapse-tags :remote="false" :multiple="!single" :filterable="single" clearable @clear="clearHandle" @visible-change="blurHandle('值班科长')" > <div class="inputBox" v-if="!single"> <el-input v-model="filterQuery" @input="filterMethodThrottle($event)" >el-input> div> <template v-for="item in orgPersonList"> <el-option :key="item.id" :label="item.realName + ' ' + item.telPhone" :value="item.id" :disabled="item.disabled" v-show="item.isShow" > el-option> template> el-select> el-form-item> <el-form-item label="值班人员" prop="personnelOnDutyUseridsList"> <el-select placeholder="请选择值班人员" v-model="ruleForm.personnelOnDutyUseridsList" collapse-tags :remote="false" :multiple="!single" :filterable="single" clearable @clear="clearHandle" @visible-change="blurHandle('值班人员')" > <div class="inputBox" v-if="!single"> <el-input v-model="filterQuery" @input="filterMethodThrottle($event)" >el-input> div> <template v-for="item in orgPersonList"> <el-option :key="item.id" :label="item.realName + ' ' + item.telPhone" :value="item.id" :disabled="item.disabled" v-show="item.isShow" > el-option> template> el-select> el-form-item> el-form> <span slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false" size="small">取消el-button> <el-button @click="submitFn" size="small" type="info">确认el-button> span> el-dialog>
js:
props: { itemId: { require: true, type: Number }, kindId: { require: true, type: String } },
data() { return { dialogVisible: false, ruleForm: { dutyDateStr: null, //日期 shiftLeaderUseridsList: [], //带班领导 dutySectionChiefUseridsList: [], //值班科长 personnelOnDutyUseridsList: [] //值班人员 }, single: false, filterQuery: '', orgPersonList: [] //机构联系人 }; }, methods: { // 获取机构联系人表列表 getorgPersonFn() { let data = { orgId: this.kindId }; getOrgPersonApi(data).then(res => { if (res.data.code === 200) { this.orgPersonList = res.data.data; this.getDetailFn(); } }); }, //下拉关闭 blurHandle(status) { this.filterQuery = ''; if (status == '带班领导') { this.orgPersonList.forEach(val => { this.$set(val, 'disabled', false); this.$set(val, 'isShow', true); this.ruleForm.dutySectionChiefUseridsList.forEach(v => { if (val.id == v) { this.$set(val, 'disabled', true); } }); this.ruleForm.personnelOnDutyUseridsList.forEach(v => { if (val.id == v) { this.$set(val, 'disabled', true); } }); }); } else if (status == '值班科长') { this.orgPersonList.forEach(val => { this.$set(val, 'disabled', false); this.$set(val, 'isShow', true); this.ruleForm.shiftLeaderUseridsList.forEach(v => { if (val.id == v) { this.$set(val, 'disabled', true); } }); this.ruleForm.personnelOnDutyUseridsList.forEach(v => { if (val.id == v) { this.$set(val, 'disabled', true); } }); }); } else if (status == '值班人员') { this.orgPersonList.forEach(val => { this.$set(val, 'disabled', false); //这里使用$set方法 解决无法更新数据问题 this.$set(val, 'isShow', true); this.ruleForm.dutySectionChiefUseridsList.forEach(v => { if (val.id == v) { this.$set(val, 'disabled', true); } }); this.ruleForm.shiftLeaderUseridsList.forEach(v => { if (val.id == v) { this.$set(val, 'disabled', true); } }); }); } }, //获取详情 getDetailFn() { getDetailApi(this.itemId).then(res => { if (res.data.code == 200) { this.ruleForm.dutyDateStr = res.data.data.dutyDateStr; this.ruleForm.dutySectionChiefUseridsList = res.data.data .dutySectionChiefUseridList ? res.data.data.dutySectionChiefUseridList : []; this.ruleForm.shiftLeaderUseridsList = res.data.data .shiftLeaderUseridList ? res.data.data.shiftLeaderUseridList : []; this.ruleForm.personnelOnDutyUseridsList = res.data.data .personnelOnDutyUseridList ? res.data.data.personnelOnDutyUseridList : []; this.orgPersonList.forEach(val => { this.$set(val, 'disabled', false); this.$set(val, 'isShow', true); this.ruleForm.dutySectionChiefUseridsList.forEach(v => { if (val.id == v) { this.$set(val, 'disabled', true); } }); this.ruleForm.shiftLeaderUseridsList.forEach(v => { if (val.id == v) { this.$set(val, 'disabled', true); } }); this.ruleForm.personnelOnDutyUseridsList.forEach(v => { if (val.id == v) { this.$set(val, 'disabled', true); } }); }); } }); }, // 提交 submitFn() { let data = { id: this.itemId, dutySectionChiefUseridsList: this.ruleForm.dutySectionChiefUseridsList, shiftLeaderUseridsList: this.ruleForm.shiftLeaderUseridsList, personnelOnDutyUseridsList: this.ruleForm.personnelOnDutyUseridsList }; console.log(data, 'daraaaaaaaa'); editApi(data).then(res => { if (res.data.code === 200) { if (res.data.data) { this.dialogVisible = false; this.$emit('refresh'); this.$message({ type: 'success', message: '编辑成功' }); } else { this.$message({ message: '请勿重复添加!', type: 'warning' }); } } }); }, //下拉的搜索 filterMethodThrottle(word) { this.orgPersonList.forEach(val => { if (word == '') { val.isShow = true; } else { val.isShow = false; if (val.realName.indexOf(word) != -1) { val.isShow = true; } } }); }, //清除选中的项 clearHandle(item) { console.log(item, '清除的'); }, //打开弹窗 handleOpen() { this.getorgPersonFn(); }, //关闭弹窗 hanldClose() {} }
样式: