Bladeren bron

feat(user): 更新用户层级树状图功能

- 移除SharedProsperityUserRepository的测试代码
- 添加UserRepository获取用户树的测试逻辑
- 修改getUserForTree方法增加parentId参数支持
- 实现以指定用户为根节点的树状结构返回
- 添加parentId字段到树节点结构中
- 优化树构建逻辑支持从任意节点开始展示子树
shichen 5 maanden geleden
bovenliggende
commit
d426b3b4c0
2 gewijzigde bestanden met toevoegingen van 44 en 11 verwijderingen
  1. 36 3
      app/common/repositories/user/UserRepository.php
  2. 8 8
      app/controller/api/Test.php

+ 36 - 3
app/common/repositories/user/UserRepository.php

@@ -4924,9 +4924,10 @@ class UserRepository extends BaseRepository
4924 4924
     /**
4925 4925
      * 获取用户层级的树状图
4926 4926
      * @param string $field 关系字段名,如 'spread_uid'
4927
-     * @return array 树状结构,格式:[{name: '张三', parent: null, children: [...]}]
4927
+     * @param int $parentId 父ID,默认为0表示根节点
4928
+     * @return array 树状结构,格式:[{name: '张三', parent: null, parentId: null, children: [...]}]
4928 4929
      */
4929
-    public function getUserForTree($field)
4930
+    public function getUserForTree($field,$parentId = 0)
4930 4931
     {
4931 4932
         // 获取所有用户数据
4932 4933
         $users = $this->dao->selectWhere(['is_del'=>0], 'uid,' . $field . ',nickname,account');
@@ -4942,7 +4943,38 @@ class UserRepository extends BaseRepository
4942 4943
         }
4943 4944
         
4944 4945
         // 构建树
4945
-        $tree = $this->buildTree($users, 0, $field, $idToName);
4946
+        $tree = $this->buildTree($users, $parentId, $field, $idToName);
4947
+        
4948
+        // 如果parentId大于0,需要返回以该用户为根节点的树
4949
+        if ($parentId > 0) {
4950
+            // 查找parentId对应的用户
4951
+            $parentUser = null;
4952
+            foreach ($users as $user) {
4953
+                if ($user['uid'] == $parentId) {
4954
+                    $parentUser = $user;
4955
+                    break;
4956
+                }
4957
+            }
4958
+            
4959
+            if ($parentUser) {
4960
+                // 获取该用户的父节点信息
4961
+                $userParentId = $parentUser[$field] ?? 0;
4962
+                $userParentName = $userParentId > 0 ? ($idToName[$userParentId] ?? null) : null;
4963
+                
4964
+                // 构建以该用户为根节点的树
4965
+                $parentNode = [
4966
+                    'name' => $parentUser['nickname']. '(' . $parentUser['account'] .')' ?? ('用户' . $parentUser['uid']),
4967
+                    'parent' => $userParentName,
4968
+                    'parentId' => $userParentId > 0 ? $userParentId : null,
4969
+                    'children' => $tree // 子节点就是之前构建的树
4970
+                ];
4971
+                return [$parentNode];
4972
+            } else {
4973
+                // 如果找不到对应的用户,返回空数组
4974
+                return [];
4975
+            }
4976
+        }
4977
+        
4946 4978
         return $tree;
4947 4979
     }
4948 4980
     
@@ -4963,6 +4995,7 @@ class UserRepository extends BaseRepository
4963 4995
                 $node = [
4964 4996
                     'name' => $user['nickname']. '(' . $user['account'] .')' ?? ('用户' . $user['uid']),
4965 4997
                     'parent' => $parentId == 0 ? null : ($idToName[$parentId] ?? null),
4998
+                    'parentId' => $parentId == 0 ? null : $parentId,
4966 4999
                     'children' => $children
4967 5000
                 ];
4968 5001
                 $branch[] = $node;

+ 8 - 8
app/controller/api/Test.php

@@ -9,15 +9,15 @@ class Test
9 9
 {
10 10
     public function test()
11 11
     {
12
-        /** @var SharedProsperityUserRepository $userRepository */
13
-        $userRepository = app()->make(SharedProsperityUserRepository::class);
14
-        $list = $userRepository->getUserTree(43);
15
-        var_dump(json_encode($list));
16
-        // $field = request()->param('field');
17
-        // /** @var UserRepository $userRepository */
18
-        // $userRepository = app()->make(UserRepository::class);
19
-        // $list = $userRepository->getUserForTree($field);
12
+        // /** @var SharedProsperityUserRepository $userRepository */
13
+        // $userRepository = app()->make(SharedProsperityUserRepository::class);
14
+        // $list = $userRepository->getUserTree(43);
20 15
         // var_dump(json_encode($list));
16
+        $field = request()->param('field');
17
+        /** @var UserRepository $userRepository */
18
+        $userRepository = app()->make(UserRepository::class);
19
+        $list = $userRepository->getUserForTree($field,43);
20
+        var_dump(json_encode($list));
21 21
         // return app('json')->success($list);
22 22
     }
23 23
 }