82 lines
1.5 KiB
JavaScript
82 lines
1.5 KiB
JavaScript
class CategoryUtil {
|
|
#tree = []
|
|
constructor (tree) {
|
|
this.#tree = tree
|
|
this.#fillParent(this.#tree)
|
|
}
|
|
|
|
/**
|
|
* 获取面包屑
|
|
*
|
|
* @param uid
|
|
* @returns {*[]}
|
|
*/
|
|
getBreadcrumb (uid) {
|
|
let target = this.#getNode(this.#tree, uid)
|
|
if (target == null) {
|
|
return []
|
|
}
|
|
const nodes = []
|
|
while (target != null) {
|
|
nodes.push(target)
|
|
target = target.parent
|
|
}
|
|
return nodes.map(node => {
|
|
return {
|
|
uid: node.uid,
|
|
title: node.title,
|
|
uri: node.uri
|
|
}
|
|
}).reverse()
|
|
}
|
|
|
|
/**
|
|
* 获取栏目
|
|
*
|
|
* @param uid
|
|
* @returns {*|null}
|
|
*/
|
|
getCategory (uid) {
|
|
return this.#getNode(this.#tree, uid)
|
|
}
|
|
|
|
/**
|
|
* 获取目标节点
|
|
*
|
|
* @param categoryList 栏目列表
|
|
* @param uid 栏目唯一标识
|
|
* @returns {*|null}
|
|
*/
|
|
#getNode (categoryList, uid) {
|
|
for (const node of categoryList) {
|
|
if (node.uid === uid) {
|
|
return node
|
|
}
|
|
if (node.children != null && node.children.length > 0) {
|
|
const result = this.#getNode(node.children, uid)
|
|
if (result != null) {
|
|
return result
|
|
}
|
|
}
|
|
}
|
|
return null
|
|
}
|
|
|
|
/**
|
|
* 填充父节点
|
|
*
|
|
* @param categoryList 栏目列表
|
|
* @param parent 父节点
|
|
*/
|
|
#fillParent (categoryList, parent) {
|
|
for (const node of categoryList) {
|
|
node.parent = parent
|
|
if (node.children != null && node.children.length > 0) {
|
|
this.#fillParent(node.children, node)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export default CategoryUtil
|