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
|