getRow(); $ursUserId = $row->urs_user_id; // 获取推荐上级链数据 $chainData = $this->getReferralChainData($ursUserId); // 构建链路HTML $chainHtml = $this->buildChainHtml($chainData); return Modal::make() ->xl() ->title("URS用户 {$ursUserId} 的推荐上级链") ->body($chainHtml) ->button(" {$this->title}"); } /** * 获取推荐上级链数据 * * @param int $ursUserId * @return array */ private function getReferralChainData(int $ursUserId): array { $chain = []; $currentUserId = $ursUserId; $level = 0; $maxLevels = 30; // 防止无限循环,最多查询10级 // 从当前用户开始,向上查找推荐人 while ($currentUserId && $level < $maxLevels) { // 查找当前用户的推荐关系 $referral = UrsUserReferral::where('urs_user_id', $currentUserId) ->where('status', UrsUserReferral::STATUS_VALID) ->first(); // 获取用户的农场信息 $userMapping = UrsUserMapping::where('urs_user_id', $currentUserId) ->where('status', UrsUserMapping::STATUS_VALID) ->with(['user.info']) ->first(); $userInfo = [ 'urs_user_id' => $currentUserId, 'farm_user_id' => $userMapping->user_id ?? null, 'username' => $userMapping->user->username ?? '未进入农场', 'nickname' => $userMapping->user->info->nickname ?? '无昵称', 'level' => $level, 'is_root' => false, ]; if ($referral) { $userInfo['referrer_id'] = $referral->urs_referrer_id; $userInfo['referral_time'] = $referral->referral_time; $currentUserId = $referral->urs_referrer_id; } else { // 没有推荐人,说明是根用户 $userInfo['is_root'] = true; $currentUserId = null; } $chain[] = $userInfo; $level++; } return array_reverse($chain); // 反转数组,从根用户开始显示 } /** * 构建上级链HTML * * @param array $chainData * @return string */ private function buildChainHtml(array $chainData): string { $html = '
'; // 添加样式 $html .= ''; if (empty($chainData)) { $html .= '

无法获取推荐链信息

'; } else { $totalLevels = count($chainData); $targetUserId = $chainData[count($chainData) - 1]['urs_user_id']; $html .= "
推荐链路径 (共{$totalLevels}级)
"; foreach ($chainData as $index => $user) { $isRoot = $user['is_root']; $isCurrent = ($user['urs_user_id'] == $targetUserId); $level = $totalLevels - $user['level'] - 1; // 重新计算显示级别 $nodeClass = 'chain-node'; if ($isRoot) { $nodeClass .= ' root'; $levelName = '根用户'; $badgeClass = 'level-root'; } elseif ($isCurrent) { $nodeClass .= ' current'; $levelName = '当前用户'; $badgeClass = 'level-' . min($level, 5); } else { $levelName = "第{$level}级推荐人"; $badgeClass = 'level-' . min($level, 5); } $html .= "
"; $html .= "{$levelName}"; $html .= ""; if ($user['farm_user_id']) { $html .= " → 农场用户ID: {$user['farm_user_id']} | {$user['username']} ({$user['nickname']})"; } else { $html .= " → 未进入农场"; } $html .= "
"; if (isset($user['referral_time'])) { $html .= "推荐时间: {$user['referral_time']}"; } if ($isRoot) { $html .= "推荐链的起始用户"; } elseif ($isCurrent) { $html .= "目标用户"; } $html .= "
"; $html .= "
"; // 添加箭头(除了最后一个) if ($index < count($chainData) - 1) { $html .= '
↓ 推荐
'; } } } $html .= '
'; return $html; } }