Vue 联动菜单依次点击展开、类似淘宝菜单层级展开

html

                  <div class="catalog">
                                    <div  :class="'catalog-item catalog-'+ menusIndex"  v-for="(menusItem, menusIndex) in menus">
                                        <div v-if="menusItem && menusItem.length" class="catalog-item-title">
                                            <h2>{{convertToChinese(menusIndex + 1)}}级目录:</h2>
                                        </div>
                                            <ul class="catalog-item-ul" >
                                                <template v-for="(subItem,subIndex) in menusItem">
                                                    <div class="catalog-item-left">
                                                        <#--&& subItem.active !== 'false'-->
                                                        <li :key="subItem.value"
                                                            :class="{activeLi:activeCatalog[menusIndex]===subIndex ,hiddenLi:subIndex>=8}"
                                                            @click="handleClick($event,menusItem,subIndex,menusIndex,menusIndex+1,subItem, subItem.children)" >
                                                            <el-tooltip class="item" effect="dark" :content="subItem.label" placement="top">
                                                                <span>{{subItem.label}}</span>
                                                            </el-tooltip>
                                                            <i v-show="subItem.children" class="demo-icon uex-icon-arrow-down"></i>
                                                        </li>
                                                    </div>
                                                    <div v-if="subIndex === menusItem.length-1" class="catalog-item-right">
                                                        <div class="catalog-item-right-box" :ref="'more'+menusIndex+subIndex"  v-for="fold in subItem.isfoldData"  @click="handelMore(fold,subItem,subIndex,menusItem, menusIndex)" >
                                                            <div v-show="fold.show">
                                                                <span>展开</span>
                                                                <i class="demo-icon uex-icon-arrow-down fold-icon" ></i>
                                                            </div>
                                                            <div v-show="!fold.show">
                                                                <span>折叠</span>
                                                                <i class="demo-icon uex-icon-arrow-up fold-icon"></i>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </template>
                                            </ul>
                                </div>
                                <div class="catalog-item select-item" v-show="breadcrumb.length>0">
                                    <div class="catalog-item-title">
                                        <h2>选中目录:</h2>
                                    </div>
                                    <ul class="catalog-item-ul breadcrumb-ul">
                                        <#--@click="handelBreadcrumb(type,index)"-->
                                        <li v-for="(type,index) in breadcrumb" @click="handelBreadcrumb(type,index)">
                                            <span :class="{lastSpan:index === breadcrumb.length-1}">{{type.label}}</span>
                                            <i class="demo-icon uex-icon-arrow-left breadcrumb-left" v-show="index!==breadcrumb.length-1"></i>
                                        </li>
                                    </ul>
                                </div>
                            </div>

css,我这里的css上了全部的,根据需要自己删除多余的样式


.elx-content .content-header .content-add-button{
    display: none;
}

.data-dictionary-new-page .dic-head-form .el-date-editor.is-have-trigger, .el-date-editor__editor, .el-form--inline .el-form-item__content{
     auto;
    line-height: 26px;
}
.data-dictionary-new-page  .dic-head-form input.el-input__inner, .el-table input.el-input__inner{
    border-radius: 5px;
    height: 26px;
}
.data-dictionary-new-page  .dic-head-form .seach-key {
    display: flex;
    justify-content: space-around;
    align-items: center;
}
.data-dictionary-new-page  .dic-head-form .seach-key .seach-select{
     120px;
}
.data-dictionary-new-page  .dic-head-form .seach-key .seach-select .el-input__inner {
    border-radius: 5px 0px 0px 5px;
}

.data-dictionary-new-page  .dic-head-form .seach-key .seach-select .input__inner{
    background: none;
    height: 24px;
    line-height: 24px;
    padding: 0px;
    border-right- 0px;

}
.data-dictionary-new-page .dic-head-form .seach-key .seach-input{
     140px;
}
.data-dictionary-new-page .dic-head-form .seach-key .seach-input .el-input__inner{
    /*border-radius: 0px 4px 5px 0px;*/
    /*border-left: 0px;*/
}

.data-dictionary-new-page .dic-inline-btn  .el-button{
     26px;
    height: 26px;
    border-radius: 4px;
    padding: 0px;
    color: #fff;
    background-color: #47B2FB;
    border: 1px solid #47B2FB;
}
.data-dictionary-new-page .dic-inline-btn  .el-button .search-i{
    color: #fff;

}
.data-dictionary-new-page .dic-table .el-table__expanded-cell{
    padding: 10px 50px;
}
.data-dictionary-new-page .dic-table .dic-table-column p{
    padding: 5px 0px;
}
.data-dictionary-new-page .operation .querySample,.viewDetail{
    height: 15px !important;
    border-radius: 0px;
}
.data-dictionary-new-page .operation .querySample{
    border-right: 1px solid #ebebeb;
    border-radius: 0px;
}

.data-dictionary-new-page .elx-footer{
    text-align: center;
    z-index: 10000;
}
.elx-pagination-table .el-table__header-wrapper {
    overflow: hidden;
}
.elx-pagination-table .el-table th>.cell {
    white-space: nowrap;
    /*overflow: initial;*/
    overflow: hidden;
}
.elx-scroll-content.elx-row>div{
    margin-bottom: 0px;
}
.data-dictionary-new-page .performance-index{
    /*margin-top: 5px;*/
}
.data-dictionary-new-page .search{
    background: white;
    height: 30px;
    line-height: 30px;
     100%;
    display: flex;
    /*margin-bottom: 0px;*/
    justify-content:center;
}
.data-dictionary-new-page .search-head {
     400px;
    line-height: 30px;
}
.data-dictionary-new-page .inputItm {
    height: 30px;
    border-radius: 0px 5px 5px 0px;
}
.data-dictionary-new-page .inputItm input{
    border-radius: 5px 0px 0px 5px;
}
.data-dictionary-new-page .inputItm .el-input-group__append {
    border-radius: 0px 5px 5px 0px;
}
.data-dictionary-new-page .inputItm-btn{
    height: 30px;
    background: #147BD1;
    border-radius: 0px 5px 5px 0px;
}
.data-dictionary-new-page .catalog{
    clear: both;
    background: white;
    padding: 5px 10px;
}
.data-dictionary-new-page .catalog-item{
    display: flex;
    justify-content: start;
    padding: 5px 10px;
    border-bottom: 1px dashed #eef1f6;
}
.data-dictionary-new-page .catalog-item-title{
     7%;
    margin-top: 8px;
}
.data-dictionary-new-page .catalog-item-ul{
     88%;
    position: relative;
}
.data-dictionary-new-page .catalog-more span {
    color:#20A0FF;

}
.data-dictionary-new-page .catalog-more i{
    color: #20A0FF;
}
.data-dictionary-new-page .catalog-item h2{
    padding: 0px;
    margin: 0px;
     115px;
    font-size: 12px;
    font-weight: normal;
    padding-right: 20px;
}
.data-dictionary-new-page .catalog-item ul li .uex-icon-arrow-down{
    /*color: white;*/
}
.data-dictionary-new-page .catalog-item ul li{
    float: left;
    cursor: pointer;
     calc(100% /10);
    overflow: hidden;
    /* 80px;*/
    margin-top: 5px;
    padding: 0px 10px;
    height: 25px;
    margin-right: 20px;
    border-radius: 4px;
    line-height: 25px;
    text-align: left;
    font-size: 12px;
}
.data-dictionary-new-page .catalog-item ul li span{
    font-size: 12px;
}
.data-dictionary-new-page .select-item{
    border-bottom:none;
    align-items: center;
}
.data-dictionary-new-page .select-item .catalog-item-title {
    margin: 0px;
}

.data-dictionary-new-page .select-item .catalog-item-ul li {
    margin: 0px;
     auto;
    overflow: visible;
}
.data-dictionary-new-page .select-item .breadcrumb-ul li{
    cursor: auto !important;
}
.data-dictionary-new-page .elx-placeholder{
    border: none;

}
.data-dictionary-new-page .select-item .catalog-item-ul li .breadcrumb-left{
    padding-left: 10px;
}
.data-dictionary-new-page .select-item .catalog-item-ul li .lastSpan {
    font-weight: bold;
}

.data-dictionary-new-page .catalog-item-rz{
    border-bottom: none;
    /*margin-top: 5px;*/
    padding-left: 20px;
    align-items: center;
}
.data-dictionary-new-page .catalog-item-rz .catalog-item-title{
   margin-top: 5px;
}
.data-dictionary-new-page .activeLi{
    background:#20a0ff;
    color: white;
    text-align: center !important;
}
.data-dictionary-new-page .hiddenLi{
    display: none;
}
.data-dictionary-new-page .showLi{
    display: block;
}
.data-dictionary-new-page .activeLi .uex-icon-arrow-down{
    color: white;
}
.data-dictionary-new-page .performance-example-index{
    background: white;
    margin-top: 10px;
    padding: 0px 10px 0px 10px;
}
.data-dictionary-new-page .example-tab .exampsearch-headle-box{
    padding: 0px 10px 10px 10px;
}
.data-dictionary-new-page .example-box{
    background: white;
    /* 800px;*/
}
.data-dictionary-new-page .index-tab .table-expand .el-table__expanded-cell{
    padding: 10px 50px;
}
.data-dictionary-new-page .index-tab .table-expand .expand-storage{
 padding-top: 5px;
}

.data-dictionary-new-page .example-item{
    cursor: pointer;
    background: white;
    padding: 10px 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    border-bottom: 1px solid #eef1f6;
}
.data-dictionary-new-page .example-item .example-item-right{
    display: none;

}
.data-dictionary-new-page .example-item:hover .example-item-right{
    display: block;
}
.data-dictionary-new-page .example-item-right .view{
    margin-right: 5px;
}
.data-dictionary-new-page .example-item-right-btn{
    display: flex;
    align-items: center;
    justify-content: center;
}
.data-dictionary-new-page .share-btn{
     30px;
    margin-right: 5px;
    height: 30px;
    text-align: center;
    line-height: 30px;
    color: #f5f5f5;
    border: 1px solid #eef1f6;
    border-radius: 3px;
}
.data-dictionary-new-page .share-btn i{
    color: #babfcd;
}
.data-dictionary-new-page .more{
     30px;
    background: #f5f5f5;
    border-radius: 3px;
}
.data-dictionary-new-page .example-item-title{
    padding: 0px;
    margin: 0px;
    font-size: 12px;
}
.data-dictionary-new-page .example-item-title h2{
    margin: 0px;
    padding-bottom: 10px;
    padding-top: 10px;
    font-size: 12px;
}
.data-dictionary-new-page .edition{
    height: 20px;
    background: #f5f5f5;
     70px;
    color: #202D40;
    border: 1px solid #DADFE6;
}
.data-dictionary-new-page .state{
    background: rgba(24,144,255,0.10);
    border: 1px solid rgba(24,144,255,0.45);
    border-radius: 4px;
    height: 20px;
    color: #2D84FB;
     70px;
}
.data-dictionary-new-page .example-attribute{
    padding-top: 10px;
}
.data-dictionary-new-page .example-attribute ul li{
    float: left;
     auto;
    margin-right: 20px;
    font-size: 12px;
    color: #989A9C;
}
.data-dictionary-new-page .example-attribute ul li span{
    font-size: 12px;
    color: rgba(0,0,0,0.80);
}
.data-dictionary-new-page .example-describe span{
    font-size: 12px;
    color: rgba(0,0,0,0.80);
}
.data-dictionary-new-page .example-describe {
    color: #989A9C;
    padding-top: 10px;
    clear: both;
}
.data-dictionary-new-page .catalog-header{
    background: white;
}
.data-dictionary-new-page .catalog-item-rz ul li{
    /* 120px;*/
}
.data-dictionary-new-page .res-header {
    display: flex;
     100%;
    background: white;
}
.data-dictionary-new-page .type-list {
    display: flex;
     100%;
}
.data-dictionary-new-page .type-list ul li{
     74px;
    font-size: 14px;
    margin-left: 20px;
    text-align: center;
    line-height: 25px;
    padding-bottom: 5px;
    float: left;
    cursor: pointer;
}
.data-dictionary-new-page .type-list .activeLihead{
    border-bottom: 2px solid #20a0ff;
    color: #20a0ff;
}
.data-dictionary-new-page .part-content{
    background: white;
    padding: 0px 10px 10px 10px;
    margin-top: 10px;
}

.data-dictionary-new-page .part-content-title{
    display: flex;
    align-items: center;
    justify-content: space-between;
    border-bottom: 1px solid #d1dbe5;
    padding: 0px 10px;
}
.data-dictionary-new-page .part-content-title h2{
    margin: 0px;
    padding: 10px 0px;
    color:#475669;
    font-size: 12px;
}
.data-dictionary-new-page .part-content-title  span{
    color: #475669;
    font-size: 12px;
}
.data-dictionary-new-page .part-content-title  span i{
    font-style: normal;
    font-weight: bold;
}
.data-dictionary-new-page .index-tab .part-content{
    margin: 0px;
}
.data-dictionary-new-page .index-tab .part-content .elx-pagination-table{
    padding-top: 0px;
}
.data-dictionary-new-page .elx-pagination-table{
    padding-top: 20px;
}
.data-dictionary-new-page .performance-example-index .search-result{
    float: right;
    padding-right: 5px;
    line-height: 41px;
}
.data-dictionary-new-page .performance-example-index .search-result span{
    font-size: 12px;
    color: #475669;
}
.data-dictionary-new-page .performance-example-index .search-result span i{
    font-style: normal;
    font-weight: bold;
}
.data-dictionary-new-page .performance-example-index .el-tabs__header{
    margin: 0px;
}
.data-dictionary-new-page .performance-example-index .el-tabs__item{
    /* 100px;*/
    /*text-align: center;*/
}
.data-dictionary-new-page .performance-example-index .el-tabs__content {
    overflow: auto;
     100%;

}
.data-dictionary-new-page .catalog-item .catalog-item-ul .catalog-item-right{
    cursor: pointer;
    right: -60px;
    position: absolute;
    top: 10px;
}
.data-dictionary-new-page .catalog-item .catalog-item-ul .catalog-item-right .catalog-item-right-box span{
    color: #20a0ff;

}
.data-dictionary-new-page .catalog-item .catalog-item-ul .catalog-item-right .catalog-item-right-box .fold-icon {
    color: #20a0ff;
}
.catalog-item-right{
    cursor: pointer;
}
.catalog-item-right .catalog-item-right-box span{
    color: #20a0ff;

}
.catalog-item-right .catalog-item-right-box .fold-icon {
    color: #20a0ff;
}
.catalog-item-right{
    cursor: pointer;
}

js --元数据,一个典型的树形数据

 data: [
                    {
                        "value":"zhinan",
                        "label":"指南",
                        id:'13',
                        "children":[
                            {
                                "value":"shejiyuanze",
                                "label":"设计原则",
                                id:'15',
                                "children":[
                                    {
                                        "value":"yizhi",
                                        "label":"一致",
                                        id:'1',
                                    },
                                    {
                                        "value":"fankui",
                                        "label":"反馈",
                                        id:'14',
                                    },
                                    {
                                        "value":"xiaolv",
                                        "label":"效率",
                                        id:'15',
                                    },
                                    {
                                        "value":"kekong",
                                        "label":"可控",
                                        id:'16',
                                    }
                                ]
                            },
                            {
                                "value":"daohang",
                                "label":"导航",
                                id:'daohang',
                                "children":[
                                    {
                                        "value":"cexiangdaohang",
                                        "label":"侧向导航",
                                        id:'cexiangdaohang',
                                    },
                                    {
                                        "value":"dingbudaohang",
                                        "label":"顶部导航",
                                        id:'dingbudaohang',
                                    }
                                ]
                            }
                        ]
                    },
                    {
                        "value":"zujian",
                        "label":"组件",
                        id:'zujian',
                        "children":[
                            {
                                "value":"basic",
                                "label":"Basic",
                                id:'basic',
                                "children":[
                                    {
                                        "value":"layout",
                                        "label":"Layout 布局",
                                        id:'layout',
                                    },
                                    {
                                        "value":"color",
                                        "label":"Color 色彩",
                                        id:'color',
                                    },
                                    {
                                        "value":"typography",
                                        "label":"Typography 字体",
                                        id:'typography',
                                    },
                                    {
                                        "value":"icon",
                                        "label":"Icon 图标",
                                        id:'icon',
                                    },
                                    {
                                        "value":"button",
                                        "label":"Button 按钮",
                                        id:'button',
                                    }
                                ]
                            },
                            {
                                "value":"form",
                                "label":"Form",
                                id:'form',
                                "children":[
                                    {
                                        "value":"radio",
                                        "label":"Radio 单选框",
                                        id:'radio',
                                    },
                                    {
                                        "value":"checkbox",
                                        "label":"Checkbox 多选框",
                                        id:'checkbox',
                                    },
                                    {
                                        "value":"input",
                                        "label":"Input 输入框",
                                        id:'input',
                                    },
                                    {
                                        "value":"input-number",
                                        "label":"InputNumber 计数器",
                                        id:'input-number',
                                    },
                                    {
                                        "value":"select",
                                        "label":"Select 选择器",
                                        id:'select',
                                    },
                                    {
                                        "value":"cascader",
                                        "label":"Cascader 级联选择器",
                                        id:'cascader',
                                    },
                                    {
                                        "value":"switch",
                                        "label":"Switch 开关",
                                        id:'switch',
                                    },
                                    {
                                        "value":"slider",
                                        "label":"Slider 滑块",
                                        id:'slider',
                                    },
                                    {
                                        "value":"time-picker",
                                        "label":"TimePicker 时间选择器",
                                        id:'time-picker',
                                    },
                                    {
                                        "value":"date-picker",
                                        "label":"DatePicker 日期选择器",
                                        id:'date-picker',
                                    },
                                    {
                                        "value":"datetime-picker",
                                        "label":"DateTimePicker 日期时间选择器",
                                        id:'datetime-picker',
                                    },
                                    {
                                        "value":"upload",
                                        "label":"Upload 上传",
                                        id:'upload',
                                    },
                                    {
                                        "value":"rate",
                                        "label":"Rate 评分",
                                        id:'rate',
                                    },
                                    {
                                        "value":"form",
                                        "label":"Form 表单",
                                        id:'form',
                                    }
                                ]
                            },
                            {
                                "value":"data",
                                "label":"Data",
                                id:'Data',
                                "children":[
                                    {
                                        "value":"table",
                                        "label":"Table 表格",
                                        id:'table',
                                    },
                                    {
                                        "value":"tag",
                                        "label":"Tag 标签",
                                        id:'tag',
                                    },
                                    {
                                        "value":"progress",
                                        "label":"Progress 进度条",
                                        id:'progress',
                                    },
                                    {
                                        "value":"tree",
                                        "label":"Tree 树形控件",
                                        id:'tree',
                                    },
                                    {
                                        "value":"pagination",
                                        "label":"Pagination 分页",
                                        id:'pagination',
                                    },
                                    {
                                        "value":"badge",
                                        "label":"Badge 标记",
                                        id:'badge',
                                    }
                                ]
                            },
                            {
                                "value":"notice",
                                "label":"Notice",
                                id:'notice',
                                "children":[
                                    {
                                        "value":"alert",
                                        "label":"Alert 警告",
                                        id:'alert',
                                    },
                                    {
                                        "value":"loading",
                                        "label":"Loading 加载",
                                        id:'loading',
                                    },
                                    {
                                        "value":"message",
                                        "label":"Message 消息提示",
                                        id:'message',
                                    },
                                    {
                                        "value":"message-box",
                                        "label":"MessageBox 弹框",
                                        id:'MessageBox',
                                    },
                                    {
                                        "value":"notification",
                                        "label":"Notification 通知",
                                        id:'notification',
                                    }
                                ]
                            },
                            {
                                "value":"navigation",
                                "label":"Navigation",
                                "children":[
                                    {
                                        "value":"menu",
                                        "label":"NavMenu 导航菜单"
                                    },
                                    {
                                        "value":"tabs",
                                        "label":"Tabs 标签页"
                                    },
                                    {
                                        "value":"breadcrumb",
                                        "label":"Breadcrumb 面包屑"
                                    },
                                    {
                                        "value":"dropdown",
                                        "label":"Dropdown 下拉菜单"
                                    },
                                    {
                                        "value":"steps",
                                        "label":"Steps 步骤条"
                                    }
                                ]
                            },
                            {
                                "value":"others",
                                "label":"Others",
                                "children":[
                                    {
                                        "value":"dialog",
                                        "label":"Dialog 对话框"
                                    },
                                    {
                                        "value":"tooltip",
                                        "label":"Tooltip 文字提示"
                                    },
                                    {
                                        "value":"popover",
                                        "label":"Popover 弹出框"
                                    },
                                    {
                                        "value":"card",
                                        "label":"Card 卡片"
                                    },
                                    {
                                        "value":"carousel",
                                        "label":"Carousel 走马灯"
                                    },
                                    {
                                        "value":"collapse",
                                        "label":"Collapse 折叠面板"
                                    }
                                ]
                            }
                        ]
                    },
                    {
                        "value":"ziyuan",
                        "label":"资源",
                        "children":[
                            {
                                "value":"axure",
                                "label":"Axure Components"
                            },
                            {
                                "value":"sketch",
                                "label":"Sketch Templates"
                            },
                            {
                                "value":"jiaohu",
                                "label":"组件交互文档"
                            }
                        ]
                    }
                ],

js 点击事件,点击过滤数据,将数据处理成二维数组[[{'一级数据'},{},{}],[{'二级数据'},{},{}],[{'三级数据'},{},{}],]

           var list=self.data;

                            var breadcrumbList=[];
                            //递归循环
                            var mapListLen = function(data, path) {
                                if (!path) path = [];
                                var parentArr=[];
                                for (var i = 0, n = data.length; i < n; i++) {
                                    // 判断是否存在 path
                                    if (!data[i].path) data[i].path = path.concat([{ id: data[i].id,nodeId:data[i].id, label: data[i].label ,parentArr:parentArr.concat(data[i])}]);
                                    // 判断是否存在子级
                                    if (data[i].children && data[i].children.length) {
                                        // data[i].label=data[i].label+"("+data[i].children.length+")";
                                        // data[i].isfold=false;
                                        mapListLen(data[i].children, data[i].path)
                                    }
                                    else {
                                        // data[i].label = data[i].label+"("+data[i].sortNum+")";
                                        // data[i].isfold=false;
                                    }
                                }
                            };
                            mapListLen(list);
                            self.activeCatalog=new Array(list.length).fill(0);
                            // var menusList=self.getCusIndex(list,0);
                            self.getMenus(0,list,self.menus);//过滤初始默认第一个的所有children
                            //初始默认ID
                            self.modelId =menusList[menusList.length-1][0].dirNodeId;
                                // self.modelId=defaultItem.id||'';//页面默认请求接口的ID第一个
                                _.map(menusList,function (menusItem,menusIndex) {
                                    // 默认加折叠,展开按钮,ID一定不要重复
                                    var isfoldData=[
                                        {
                                            more: true,
                                            show: true,
                                            id:self.genID(2)+menusIndex
                                        }
                                    ];
                                    //默认导航页
                                    breadcrumbList.push({
                                        id:self.genID(2)+menusIndex,
                                        nodeId:menusItem[0].id,
                                        label:menusItem[0].label,
                                        parentArr:menusItem[0].path[menusIndex].parentArr
                                    });
                                    //去重复-数组中的最后一个
                                    var isShow=!(menusItem[menusItem.length-1].isfoldData);//true,没有,false 有
                                    if(menusItem.length>8 && isShow){
                                        menusItem.push({isfoldData:isfoldData})
                                    }
                                    // console.log(' menusList.length-1', menusList.length-1)
                                    // if(menusIndex== menusList.length-1){
                                    //     console.log('menusItem',menusItem)
                                    //     menusItem[0].active='false';//初次默认加载的时候,将第一条数据的children的第一个数据,默认不选中
                                    // }
                                });
                                self.menus = menusList;
                                console.log('breadcrumbList',breadcrumbList)
                                self.breadcrumb=breadcrumbList;
                              //点击事件过滤数据
                               handleClick($event,menusItem,subIndex,menusIndex,index, subItem,children){
                var self=this;
                console.log('children',children)
                //[1,0,2] menusIndex 代表下标 subIndex为值
                _.map(self.activeCatalog,function (catalogItem,catalogIndex) {
                    //menusIndex是0,点击的0 [1,2,2]  1--2
                    if(catalogIndex == menusIndex){//只改变数组中等于menusIndex的值
                        self.activeCatalog[menusIndex]=subIndex;
                    }
                    else if(menusIndex < catalogIndex && catalogIndex !== menusIndex){// 否则其他的数组的后面项都设置为0
                        self.activeCatalog[catalogIndex]=0;
                    }
                });
                self.$forceUpdate();
                console.log('subItem',subItem)
                console.log('subItem.children',subItem.children)
                self.breadcrumb =subItem.children === null || subItem.children === undefined ? subItem.path:[];
                self.modelId =subItem.children === null ? subItem.dirNodeId:'';
                if(children) {
                    var menus = [...this.menus];
                    // var menus = JSON.parse(JSON.stringify(this.menus));
                    //去重复-数组中的最后一个
                   var isfoldData=[
                        {
                            more: true,
                            show: true,
                            id:guid()+subIndex
                        }
                    ];
                   var isShow=!(children[children.length-1].isfoldData);//true,没有,false 有
                    if(children.length>8 && isShow){ //大于7显示展开/折叠
                        children.push({isfoldData:isfoldData});
                    }
                    if(subItem.path){//绝对是第一级,删除其他多余的数据,
                        menus= self.menus.slice(0, index+1);
                    }
                    self.getMenus(index, children, menus);
                    // 点击顶级获取路径
                    var menusLastItem=menus[menus.length-1];
                    self.breadcrumb=menusLastItem[0].path;
                    //点击获取ID
                    self.modelId =menusLastItem[0].dirNodeId;
                    self.menus= menus;
                }
                else {
                    self.menus= self.menus.slice(0, index);
                }
                if(self.exampleIndex === 'example'){
                    self.getEampleData();//请求实例数据
                }else{
                    self.getIndexData()//请求指标数据
                }

            },
            getMenus:function(index, children, menus) {
                var self=this;
                if (children) {
                    menus[index] = children;
                    // 默认选中第一个, 开始查找下一级的数据
                    var firstChild = children[0];
                    if (firstChild.children && firstChild.children.length) { // 下一级数据不为空
                        this.getMenus(index + 1, firstChild.children, menus);
                    } else { // 下一级数据为空, 清除更下级的数据
                        menus.slice(0, index + 1);
                    }
                }
            },
  //菜单展开、折叠
            handelMore:function(fold,subItem,subIndex,menusItem, menusIndex){
                var self=this;
                this.menus.forEach(function(item,index){
                    if(index===menusIndex){
                        _.map(item,function (itemTwo,itemIndex) {
                            if(itemIndex === subIndex){
                                _.map(itemTwo.isfoldData,function (foldItem,foldIndex) {
                                    if(foldItem.id === fold.id){
                                        if(foldItem.show){
                                            self.$nextTick(function () {
                                                var menusIndexEl=$('.catalog-'+menusIndex);
                                                $(menusIndexEl).find('.catalog-item-ul .hiddenLi').css({
                                                    display:'block'
                                                });
                                            });
                                            foldItem.show=false;
                                            self.$forceUpdate();
                                        }else{
                                            self.$nextTick(function () {
                                                var menusIndexEl=$('.catalog-'+menusIndex);
                                                $(menusIndexEl).find('.catalog-item-ul .hiddenLi').css({
                                                    display:'none'
                                                });
                                            });
                                            foldItem.show=true;
                                            self.$forceUpdate();
                                        }
                                    }

                                })
                            }

                        })
                    }
                })
            },
      //过滤数字
       convertToChinese:function(num){
                var self=this;
                var str = num.toString();
                var len = num.toString().length;
                var C_Num = [];
                for(var i = 0; i < len; i++){
                    C_Num.push(self.numberType[str.charAt(i)]);
                }
                return C_Num.join('');
            },


           

原文地址:https://www.cnblogs.com/wangliko/p/13815908.html