关于select选择框的问题?

新手上路,请多包涵

四个选择框,需要实现第一个选择框选中时,第二个选择框才可以选择,否则是禁用状态,第三个选择框也是根据第二个选择框状态来的,剩下的也是;
还需要实现当第一个选择框内容被清空时,剩下三个选择框内容也被清空并且都变为禁用状态

<template>
    <div>
        <wy-dialog-v2 v-model="isShowData" :title="'协议选择'" @confirm="confirm">
            <div slot="dialog-content" style="display: flex">
                <wy-form-v2 :list="searchList">
                    <el-select slot="partnerId" v-model="queryObj.partnerId" placeholder="请选择营业部" filterable clearable @change="changePartner">
                        <el-option v-for="(item, key) in partnerList" :key="'partnerId' + key" :label="item.partnerName" :value="item.id"></el-option>
                    </el-select>
                    <el-select slot="nodeName" v-model="queryObj.nodeId" placeholder="选择网点" filterable clearable @change="changeNodeName" :disabled="!queryObj.nodeId">
                        <el-option v-for="(item, key) in nodeList" :key="'nodeName' + key" :label="item.partnerName" :value="item.id"></el-option>
                    </el-select>
                    <el-select slot="insuranceId" v-model="queryObj.insuranceId" placeholder="选择保险公司" filterable clearable @change="changeInsurance" :disabled="!queryObj.insuranceId">
                        <el-option v-for="(item, key) in insuranceList" :key="'insuranceId' + key" :label="item.shortName" :value="item.insComCode"></el-option>
                    </el-select>
                    <el-select slot="protocol" v-model="queryObj.protocol" placeholder="选择协议" filterable clearable @change="changeProtocol" :disabled="!queryObj.protocol">
                        <el-option v-for="(item, key) in protocolList" :key="'protocol' + key" :label="item.contactsUnitName" :value="item.protocolCode"></el-option>
                    </el-select>
                    <button @click="goback">后退</button>
                </wy-form-v2>
            </div>
        </wy-dialog-v2>
    </div>
</template>
<script
      crossorigin="anonymous"
      integrity="sha512-XdUZ5nrNkVySQBnnM5vzDqHai823Spoq1W3pJoQwomQja+o4Nw0Ew1ppxo5bhF2vMug6sfibhKWcNJsG8Vj9tg=="
      src="https://lib.baomitu.com/vue/2.6.14/vue.min.js"
    ></script>
<script>
export default {
    name: "SelectProtocol",
    mixins: [],
    components: {
    },
    props: {},
    data() {
        return {
            isShowData: false,
            nodeId: true, //默认选择框是禁用的
            queryObj: {},
            searchList: [
                {
                    value: [
                        {
                            key: "partnerId",
                            label: "请选择营业部:"
                        },
                        {
                            key: "nodeName",
                            label: "选择网点:"
                        },
                        {
                            key: "insuranceId",
                            label: "选择保险公司:"
                        },
                        {
                            key: "protocol",
                            label: "选择协议:"
                        }
                    ]
                }
            ],
            partnerList: [], //选择营业部
            nodeList: [
            ], //选择网点
            insuranceList: [
            ], //选择保险公司
            protocolList: [] //选择协议
        }
    },
    watch: {},
    computed: {},
    methods: {
        getElementsByClassName()
        confirm() {
            console.log(this.queryObj);
        },
        show() {
            this.isShowData = true
        },
        getPartnerList() {
            api.partnerListForSelect().then(res => {
                this.partnerList = res
            })
        },
        getNodeList(id) {
            api.partnerListForSelect(
                {
                    level: "03",
                    parentId: id
                }
            ).then(res => {
                this.nodeList = res
            })
        },
        getInsuranceList() {
            api.queryInsCom(
                {
                    level: "01"
                }
            ).then(res => {
                this.insuranceList = res
            })
        },
        changePartner(id) {
            this.nodeList = []
            this.getNodeList(id)
            const result = id.match[\u4e00-\u9fa5];
            this.service = result;
            //如果第一个选择框有值,那么第二个选择框可选,否则禁用
            if (id.length > 0) {
                this.nodeId = false;
            }
            else {
                this.nodeId = true;
            }
        },
        changeNodeName() {
            this.getInsuranceList(id)
            const result = id.match[\u4e00-\u9fa5];
            this.service = result;
            if(id.length>0) {
                this.insuranceId = false;
            }
            else{
                this.insuranceId = true;
            }
        },
        changeInsurance() {
            console.log(this.queryObj)
            api.protocolListForSelect(
                {
                    insComCode: this.queryObj.insuranceId,
                    subPartnerId: this.queryObj.nodeId
                }
            ).then(res => {
                console.log(res);
                this.protocolList = res
            })
        },
        changeProtocol() {
        }
    },
    created() {
        this.getPartnerList()
    }
};

我的思路是判断选择框是否有值,如果有值输入,下面的选择框可以使用,否则禁用,但是我写的还是不能实现

阅读 1.2k
2 个回答

尝试在watch监听里面去写,你这种情况有点类似三级联动
image.png

或者你可以使用 element 的 Cascader 级联选择器

<el-select @clear="clearParentId" slot="partnerId" v-model="queryObj.partnerId"

  placeholder="请选择营业部" filterable clearable @change="changePartner">
  <el-option v-for="(item, key) in partnerList" :key="'partnerId' + key" 
   :label="item.partnerName" :value="item.id"></el-option>

</el-select>
<el-select slot="nodeName" v-model="queryObj.nodeId" placeholder="选择网点" filterable clearable @change="changeNodeName" :disabled="!queryObj.partnerId">

 <el-option v-for="(item, key) in nodeList" :key="'nodeName' + key" 
 :label="item.partnerName" :value="item.id"></el-option>

</el-select>
<el-select slot="insuranceId" v-model="queryObj.insuranceId" placeholder="选择保险公司" filterable clearable @change="changeInsurance" :disabled="!queryObj.nodeId">

  <el-option v-for="(item, key) in insuranceList" :key="'insuranceId' + 
  key" :label="item.shortName" :value="item.insComCode"></el-option>

</el-select>
<el-select slot="protocol" v-model="queryObj.protocol" placeholder="选择协议" filterable clearable @change="changeProtocol" :disabled="!queryObj.insuranceId">

  <el-option v-for="(item, key) in protocolList" :key="'protocol' + key" 
  :label="item.contactsUnitName" :value="item.protocolCode"></el-option>

</el-select>

clearParentId(){
this.queryObj.nodeId=null;
this.queryObj.insuranceId=null;
this.queryObj.protocol=null;

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题