getRow(); $ursUserId = $row->urs_user_id; // 获取推荐关系树数据 $treeData = $this->getReferralTreeData($ursUserId); // 构建树形结构HTML $treeHtml = $this->buildTreeHtml($treeData); return Modal::make() ->xl() ->title("URS用户 {$ursUserId} 的下级推荐树") ->body($treeHtml) ->button(" {$this->title}"); } /** * 获取推荐关系树数据 * * @param int $ursUserId * @return array */ private function getReferralTreeData(int $ursUserId): array { // 获取直推用户 $directReferrals = UrsUserReferral::where('urs_referrer_id', $ursUserId) ->where('status', UrsUserReferral::STATUS_VALID) ->with(['userMapping.user.info']) ->get(); $tree = [ 'user_id' => $ursUserId, 'direct' => [], 'indirect' => [], 'third' => [] ]; foreach ($directReferrals as $direct) { $directData = [ 'urs_user_id' => $direct->urs_user_id, 'farm_user_id' => $direct->userMapping->user_id ?? null, 'username' => $direct->userMapping->user->username ?? '未进入农场', 'nickname' => $direct->userMapping->user->info->nickname ?? '无昵称', 'referral_time' => $direct->referral_time, 'children' => [] ]; // 获取间推用户(直推用户的下级) $indirectReferrals = UrsUserReferral::where('urs_referrer_id', $direct->urs_user_id) ->where('status', UrsUserReferral::STATUS_VALID) ->with(['userMapping.user.info']) ->get(); foreach ($indirectReferrals as $indirect) { $indirectData = [ 'urs_user_id' => $indirect->urs_user_id, 'farm_user_id' => $indirect->userMapping->user_id ?? null, 'username' => $indirect->userMapping->user->username ?? '未进入农场', 'nickname' => $indirect->userMapping->user->info->nickname ?? '无昵称', 'referral_time' => $indirect->referral_time, 'children' => [] ]; // 获取三推用户(间推用户的下级) $thirdReferrals = UrsUserReferral::where('urs_referrer_id', $indirect->urs_user_id) ->where('status', UrsUserReferral::STATUS_VALID) ->with(['userMapping.user.info']) ->get(); foreach ($thirdReferrals as $third) { $indirectData['children'][] = [ 'urs_user_id' => $third->urs_user_id, 'farm_user_id' => $third->userMapping->user_id ?? null, 'username' => $third->userMapping->user->username ?? '未进入农场', 'nickname' => $third->userMapping->user->info->nickname ?? '无昵称', 'referral_time' => $third->referral_time, ]; } $directData['children'][] = $indirectData; } $tree['direct'][] = $directData; } return $tree; } /** * 构建树形结构HTML * * @param array $treeData * @return string */ private function buildTreeHtml(array $treeData): string { $html = '
'; $html .= ''; $html .= '
根用户: URS-' . $treeData['user_id'] . '
'; if (empty($treeData['direct'])) { $html .= '

暂无下级推荐用户

'; } else { $html .= '
'; foreach ($treeData['direct'] as $direct) { $html .= $this->renderUserNode($direct, 1); } $html .= '
'; } $html .= '
'; return $html; } /** * 渲染用户节点 * * @param array $user * @param int $level * @return string */ private function renderUserNode(array $user, int $level): string { $levelNames = [1 => '直推', 2 => '间推', 3 => '三推']; $levelClass = "tree-level-{$level}"; $badgeClass = "level-{$level}"; $html = "
"; $html .= "{$levelNames[$level]} "; $html .= "URS-{$user['urs_user_id']}"; if ($user['farm_user_id']) { $html .= " → 农场用户ID: {$user['farm_user_id']} | {$user['username']} ({$user['nickname']})"; } else { $html .= " → 未进入农场"; } $html .= "
"; $html .= "推荐时间: {$user['referral_time']}"; $html .= "
"; // 渲染子节点 if (!empty($user['children']) && $level < 3) { foreach ($user['children'] as $child) { $html .= $this->renderUserNode($child, $level + 1); } } $html .= "
"; return $html; } }