<template> <el-cascader :options="options" :props="{ multiple: true, checkStrictly: true }" clearable v-model="selectedValue" @change="change" ></el-cascader> </template> <script> import _ from "lodash"; export default { data() { return { selectedValue: [], options: [ { value: "zhinan", label: "指南", disabled: false, children: [ { value: "shejiyuanze", label: "设计原则", disabled: false, children: [ { value: "yizhi", label: "一致", disabled: false, }, { value: "fankui", label: "反馈", disabled: false, }, { value: "xiaolv", label: "效率", }, { value: "kekong", label: "可控", disabled: false, }, ], }, { value: "daohang", label: "导航", disabled: false, children: [ { value: "cexiangdaohang", label: "侧向导航", disabled: false, }, { value: "dingbudaohang", label: "顶部导航", disabled: false, }, ], }, ], }, { value: "zujian", label: "组件", disabled: false, children: [ { value: "basic", label: "Basic", disabled: false, children: [ { value: "layout", label: "Layout 布局", disabled: false, }, { value: "color", label: "Color 色彩", disabled: false, }, { value: "typography", label: "Typography 字体", disabled: false, }, { value: "icon", label: "Icon 图标", disabled: false, }, { value: "button", label: "Button 按钮", disabled: false, }, ], }, ], }, ], }; }, computed: { selectedValues() { return this.selectedValue.map((item) => { if (_.isArray(item)) { return _.last(item); } else { return item; } }); }, }, methods: { change(val) { this.options = this.setCanSelect(this.options); }, setCanSelect(items) { items.forEach((item, index) => { const disable = this.selectedValue.length >= 3; items[index].disabled = this.selectedValues.indexOf(item.value) > -1 ? false : disable; if (_.get(item, "children", false)) { this.setCanSelect(item.children); } }); return items; }, }, }; </script>