wangrong
2026-08-30 4c949c0dc9bcae785c281c9d8125295f09810b15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import { BusiTreeNode } from '@/models/tree/TreeNode'
import _ from 'lodash'
 
export function treeParentWeight(tree: BusiTreeNode[], pWeight) {
  const pWeightResult = {}
  weightCheckCircle(tree, pWeightResult, pWeight)
  return pWeightResult
}
 
export function weightCheckCircle(tree: BusiTreeNode[], pWeightResult, pWeight) {
  _.forEach(tree, node => {
    pWeightResult[node.id] = pWeight
    if (node.children && node.children.length > 0) {
      weightCheckCircle(node.children, pWeightResult, node.weight)
    }
  })
}
 
export default function treeSort(tree: BusiTreeNode[], sortType: string) {
  const result = _.cloneDeep(tree)
  sortCircle(result, sortType)
  return result
}
 
export function sortCircle(tree: BusiTreeNode[], sortType: string) {
  sortPer(tree, sortType)
  _.forEach(tree, node => {
    if (node.children && node.children.length > 0) {
      sortCircle(node.children, sortType)
    }
  })
}
 
export const sortPer = (subTree: BusiTreeNode[], sortType: string) => {
  if (sortType === 'name_desc') {
    subTree.sort((a, b) => b.name.localeCompare(a.name, 'zh-Hans-CN', { sensitivity: 'accent' }))
  } else if (sortType === 'name_asc') {
    subTree.sort((a, b) => a.name.localeCompare(b.name, 'zh-Hans-CN', { sensitivity: 'accent' }))
  } else if (sortType === 'time_asc') {
    subTree.reverse()
  }
}