Procházet zdrojové kódy

feat(user): 添加用户层级树状图功能和测试接口

- 在路由文件中新增 /test 测试接口
- 在 UserRepository 中添加 getUserForTree 方法用于获取用户层级树状图
- 实现 buildTree 递归方法构建树形结构
- 支持通过关系字段构建用户层级关系
- 返回包含用户昵称、账号和层级关系的树状结构数据
shichen před 5 měsíci
rodič
revize
61029b77b5

+ 50 - 0
app/common/repositories/user/UserRepository.php

@@ -4920,4 +4920,54 @@ class UserRepository extends BaseRepository
4920 4920
     {
4921 4921
         return $this->dao->saveAll($dataList);
4922 4922
     }
4923
+
4924
+    /**
4925
+     * 获取用户层级的树状图
4926
+     * @param string $field 关系字段名,如 'spread_uid'
4927
+     * @return array 树状结构,格式:[{name: '张三', parent: null, children: [...]}]
4928
+     */
4929
+    public function getUserForTree($field)
4930
+    {
4931
+        // 获取所有用户数据
4932
+        $users = $this->dao->selectWhere([], 'uid,' . $field . ',nickname,account');
4933
+        if (empty($users)) {
4934
+            return [];
4935
+        }
4936
+        $users = $users->toArray();
4937
+        
4938
+        // 创建uid到昵称的映射
4939
+        $idToName = [];
4940
+        foreach ($users as $user) {
4941
+            $idToName[$user['uid']] = $user['nickname'] . '(' . $user['account'] .')' ?? ('用户' . $user['uid']);
4942
+        }
4943
+        
4944
+        // 构建树
4945
+        $tree = $this->buildTree($users, 0, $field, $idToName);
4946
+        return $tree;
4947
+    }
4948
+    
4949
+    /**
4950
+     * 递归构建树
4951
+     * @param array $users 所有用户数组
4952
+     * @param int $parentId 父ID
4953
+     * @param string $field 关系字段名
4954
+     * @param array $idToName uid到昵称的映射
4955
+     * @return array
4956
+     */
4957
+    private function buildTree($users, $parentId, $field, $idToName)
4958
+    {
4959
+        $branch = [];
4960
+        foreach ($users as $user) {
4961
+            if ($user[$field] == $parentId) {
4962
+                $children = $this->buildTree($users, $user['uid'], $field, $idToName);
4963
+                $node = [
4964
+                    'name' => $user['nickname']. '(' . $user['account'] .')' ?? ('用户' . $user['uid']),
4965
+                    'parent' => $parentId == 0 ? null : ($idToName[$parentId] ?? null),
4966
+                    'children' => $children
4967
+                ];
4968
+                $branch[] = $node;
4969
+            }
4970
+        }
4971
+        return $branch;
4972
+    }
4923 4973
 }

+ 18 - 0
app/controller/api/Test.php

@@ -0,0 +1,18 @@
1
+<?php
2
+
3
+namespace app\controller\api;
4
+use app\common\repositories\user\UserRepository;
5
+use app\traits\GzcApiRequest;
6
+
7
+class Test
8
+{
9
+    public function test()
10
+    {
11
+        $field = request()->param('field');
12
+        /** @var UserRepository $userRepository */
13
+        $userRepository = app()->make(UserRepository::class);
14
+        $list = $userRepository->getUserForTree($field);
15
+        // var_dump(json_encode($list));
16
+        return app('json')->success($list);
17
+    }
18
+}

+ 3 - 0
route/api.php

@@ -1383,3 +1383,6 @@ Route::group('/pages', function () {
1383 1383
 Route::get('share_prosperity_partner', 'api.shareProsperity.Task/partnerProfits');
1384 1384
 // 共富感恩奖
1385 1385
 Route::get('share_prosperity_thank', 'api.shareProsperity.Task/thankProfits');
1386
+
1387
+// 测试接口
1388
+Route::get('/test', 'api.Test/test');