You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

133 lines
3.8 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. export default {
  2. reloadAllChildren: function(table,maps, rows,parentIdName,loadChildren,idMaps) {
  3. if(!rows||rows.length==0){
  4. return;
  5. }
  6. if(!maps || maps.length==0){
  7. return;
  8. }
  9. if(!table){
  10. return;
  11. }
  12. var lazyTreeNodeMap=table.store.states.lazyTreeNodeMap
  13. var parentIds=rows.map(i=>i[parentIdName])
  14. if(idMaps==null){
  15. idMaps=new Map();
  16. }
  17. if(parentIds.length==0){
  18. return;
  19. }
  20. parentIds.forEach(k=>{
  21. if(!idMaps.has(k)){
  22. idMaps.set(k,k);
  23. if (maps.get(k)) {
  24. const { tree, treeNode, resolve } = maps.get(k)
  25. lazyTreeNodeMap[k]=[]
  26. if (tree) { // 重新执行父节点加载子级操作
  27. loadChildren(tree, treeNode, resolve)
  28. if(tree[parentIdName]){
  29. this.reloadAllChildren(table,maps, [tree],parentIdName,loadChildren,idMaps)
  30. }
  31. }
  32. }
  33. }
  34. });
  35. },
  36. reloadChildren: function(table,maps, parentId,parentIdName,loadChildren) {
  37. var params={};
  38. params[parentIdName]=parentId;
  39. this.reloadAllChildren(table,maps, [params],parentIdName,loadChildren)
  40. },
  41. reloadChildrenByOpType: function(table,maps, parentId,parentIdName,loadChildren,opType) {
  42. var lazyTreeNodeMap=table.store.states.lazyTreeNodeMap
  43. if (maps.get(parentId)) {
  44. const { tree, treeNode, resolve } = maps.get(parentId)
  45. if (tree) { // 重新执行父节点加载子级操作
  46. var oldDatas=lazyTreeNodeMap[parentId]
  47. loadChildren(tree, treeNode, resolve,oldDatas,opType)
  48. }
  49. }
  50. },
  51. clearOpType: function(table,maps,parentId,parentIdName,loadChildren) {
  52. var lazyTreeNodeMap=table.store.states.lazyTreeNodeMap
  53. if (maps.get(parentId)) {
  54. const { tree, treeNode, resolve } = maps.get(parentId)
  55. if (tree) { // 重新执行父节点加载子级操作
  56. var oldDatas=lazyTreeNodeMap[parentId]
  57. loadChildren(tree, treeNode, resolve,oldDatas,"clearOpType")
  58. }
  59. }
  60. },
  61. /**
  62. * 将类表数据转换为如下树状结构的数据
  63. * {
  64. * xxx:'',
  65. * xxx2:'',
  66. * children:[
  67. * xxx:'',
  68. * xxx2:'',
  69. * ]
  70. * }
  71. * @param {*} data2 将要转换的数据
  72. * @param {*} pidName 上级字段名称 pmenId
  73. * @param {*} idName 本条数据主键字段名称 menuId
  74. * @param {*} rowCallBack(data),如果需要对部分字段进行转换可以传入这个回调函数比如需要将 name:'陈天财' => label:'陈天财'
  75. * @returns
  76. */
  77. translateDataToTree: function(data2,pidName,idName,rowCallBack) {
  78. var data=JSON.parse(JSON.stringify(data2));
  79. let parents = data.filter(value =>{
  80. //如果我的上级为空,则我是最上级
  81. if(value[pidName] == 'undefined' || value[pidName] == null || value[pidName] == ''|| value[pidName] == '0'){
  82. return true;
  83. //如果我的上级不在列表中,我作为最上级
  84. }else if(data.some(i=>value[pidName]==i[idName])){
  85. return false;
  86. }else {
  87. return true
  88. }
  89. })
  90. let children = data.filter(value =>{
  91. if(data.some(i=>value[pidName]==i[idName])){
  92. return true;
  93. }else{
  94. return false;
  95. }
  96. })
  97. let translator = (parents, children) => {
  98. parents.forEach((parent) => {
  99. if(rowCallBack){
  100. rowCallBack(parent)
  101. }
  102. children.forEach((current, index) => {
  103. if (current[pidName] === parent[idName]) {
  104. let temp = JSON.parse(JSON.stringify(children))
  105. temp.splice(index, 1)
  106. translator([current], temp)
  107. typeof parent.children !== 'undefined' && parent.children ? parent.children.push(current) : parent.children = [current]
  108. parent.childrenCnt=parent.children.length
  109. }
  110. }
  111. )
  112. }
  113. )
  114. }
  115. translator(parents, children)
  116. return parents
  117. },
  118. }