近段时间博主遇到了很多层级列表的样式,博主这边整理了一下相关思路,提供给大家:
左边是个tab选择框,右边粗体是一级目录,下面非粗体是二级目录,接下来给大家看看实现代码:
<VuePerfectScrollbar :style="{'width':'calc(100% - '+firstListWidth+'px)','height':contentHeight+'px'}" ref="ps" :settings="settings" class="document-last-list">
<div v-if="fileClassifyObjKeys.length > 1">
<div v-for="(item,index) in fileClassifyObjChildrenKeys" :key="index" class="document-list-item">
<div class="document-list-item-title">
{{item}}
</div>
<div @click="selectClassify(chidrenItem)" v-for="(chidrenItem,chidrenIndex) in fileClassifyObj[selectedObjKey][item]" :key="chidrenIndex" :class="{'active': chidrenItem.itemLabel==selectedClassify.itemLabel}" class="document-last-list-item">
<Tooltip max-width="100%" :content="chidrenItem.itemLabel">
<div class="document-last-list-label">
{{chidrenItem.itemLabel}}
</div>
</Tooltip>
</div>
</div>
</div>
<div v-else>
<div @click="selectClassify(item)" v-for="(item,index) in fileClassifyObj[selectedObjKey]" :key="index" :class="{'active': item.itemLabel==selectedClassify.itemLabel}" class="document-last-list-item">
<Tooltip max-width="100%" :content="item.itemLabel">
<div class="document-last-list-label">
{{item.itemLabel}}
</div>
</Tooltip>
</div>
</div>
</VuePerfectScrollbar>
js:
/**
* 切换大类
*/
detectTab(key) {
this.selectedObjKey = key;
if (key) {
this.fileClassifyObjChildrenKeys = Object.keys(this.fileClassifyObj[key]);
let firstChildArr = this.fileClassifyObj[this.selectedObjKey][this.fileClassifyObjChildrenKeys[0]];
this.selectClassify(firstChildArr[0]);
} else {
let fileClassifyArr = this.fileClassifyObj[key]
this.selectClassify(fileClassifyArr[0]);
}
},
/**
* 创建标段循环
*/
makeBD(Obj) {
for (let key in Obj) {
let el = Obj[key];
if (el instanceof Array) {
for (let i = 0; i < el.length; i++) {
if (el[i].itemValue.indexOf("_BD") != -1) {
let tempIndex = i;
let addLabelIndex = el[i].itemLabel.indexOf("标段");
let tempValue = el[i].itemValue;
let tempLabel = el[i].itemLabel
for (let k = 1; k < this.bdCount + 1; k++) {
let objTemp = {
itemValue:tempValue + "_" + k,
itemLabel:tempLabel.slice(0,addLabelIndex)+k+tempLabel.slice(addLabelIndex)
}
el.splice(i+1, 0, objTemp);
i++
}
el.splice(tempIndex, 1);
i--;
}
}
} else {
this.makeBD(el)
}
}
},
仅仅是提供一个思路,具体情况还需要去具体分析!