mp-crm-product-category-tree.ts 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. export type CategoryTreeNodeLike = {
  2. id: string
  3. children?: CategoryTreeNodeLike[]
  4. }
  5. export function categoryChildCount(node: CategoryTreeNodeLike | null | undefined): number {
  6. const children = Array.isArray(node?.children) ? node!.children! : []
  7. return children.length
  8. }
  9. export function categoryChildMetaLabel(node: CategoryTreeNodeLike | null | undefined): string {
  10. const n = categoryChildCount(node)
  11. return n > 0 ? `${n} 个子类` : '末级'
  12. }
  13. export function collectExpandIds(
  14. nodes: CategoryTreeNodeLike[],
  15. acc: Record<string, boolean> = {}
  16. ): Record<string, boolean> {
  17. for (const node of nodes) {
  18. if (categoryChildCount(node) > 0) {
  19. acc[node.id] = true
  20. collectExpandIds(node.children || [], acc)
  21. }
  22. }
  23. return acc
  24. }
  25. export function areAllExpandableExpanded(
  26. nodes: CategoryTreeNodeLike[],
  27. expandedIds: Record<string, boolean>
  28. ): boolean {
  29. const required = collectExpandIds(nodes, {})
  30. const ids = Object.keys(required)
  31. if (!ids.length) return true
  32. return ids.every((id) => !!expandedIds[id])
  33. }