|
|
@@ -41,13 +41,13 @@ class ViewReferralChainAction extends RowAction
|
|
|
{
|
|
|
$row = $this->getRow();
|
|
|
$ursUserId = $row->urs_user_id;
|
|
|
-
|
|
|
+
|
|
|
// 获取推荐上级链数据
|
|
|
$chainData = $this->getReferralChainData($ursUserId);
|
|
|
-
|
|
|
+
|
|
|
// 构建链路HTML
|
|
|
$chainHtml = $this->buildChainHtml($chainData);
|
|
|
-
|
|
|
+
|
|
|
return Modal::make()
|
|
|
->xl()
|
|
|
->title("URS用户 {$ursUserId} 的推荐上级链")
|
|
|
@@ -66,21 +66,21 @@ class ViewReferralChainAction extends RowAction
|
|
|
$chain = [];
|
|
|
$currentUserId = $ursUserId;
|
|
|
$level = 0;
|
|
|
- $maxLevels = 10; // 防止无限循环,最多查询10级
|
|
|
-
|
|
|
+ $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,
|
|
|
@@ -89,7 +89,7 @@ class ViewReferralChainAction extends RowAction
|
|
|
'level' => $level,
|
|
|
'is_root' => false,
|
|
|
];
|
|
|
-
|
|
|
+
|
|
|
if ($referral) {
|
|
|
$userInfo['referrer_id'] = $referral->urs_referrer_id;
|
|
|
$userInfo['referral_time'] = $referral->referral_time;
|
|
|
@@ -99,11 +99,11 @@ class ViewReferralChainAction extends RowAction
|
|
|
$userInfo['is_root'] = true;
|
|
|
$currentUserId = null;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
$chain[] = $userInfo;
|
|
|
$level++;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return array_reverse($chain); // 反转数组,从根用户开始显示
|
|
|
}
|
|
|
|
|
|
@@ -116,7 +116,7 @@ class ViewReferralChainAction extends RowAction
|
|
|
private function buildChainHtml(array $chainData): string
|
|
|
{
|
|
|
$html = '<div class="referral-chain-container">';
|
|
|
-
|
|
|
+
|
|
|
// 添加样式
|
|
|
$html .= '<style>
|
|
|
.referral-chain-container {
|
|
|
@@ -176,14 +176,14 @@ class ViewReferralChainAction extends RowAction
|
|
|
} else {
|
|
|
$totalLevels = count($chainData);
|
|
|
$targetUserId = $chainData[count($chainData) - 1]['urs_user_id'];
|
|
|
-
|
|
|
+
|
|
|
$html .= "<h5><i class=\"fa fa-link\"></i> 推荐链路径 (共{$totalLevels}级)</h5>";
|
|
|
-
|
|
|
+
|
|
|
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';
|
|
|
@@ -197,17 +197,17 @@ class ViewReferralChainAction extends RowAction
|
|
|
$levelName = "第{$level}级推荐人";
|
|
|
$badgeClass = 'level-' . min($level, 5);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
$html .= "<div class='{$nodeClass}'>";
|
|
|
$html .= "<span class='level-badge {$badgeClass}'>{$levelName}</span>";
|
|
|
$html .= "<span class='user-info'>URS-{$user['urs_user_id']}</span>";
|
|
|
-
|
|
|
+
|
|
|
if ($user['farm_user_id']) {
|
|
|
$html .= " → 农场用户: {$user['username']} ({$user['nickname']})";
|
|
|
} else {
|
|
|
$html .= " → <span class='text-warning'>未进入农场</span>";
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
$html .= "<div class='user-meta'>";
|
|
|
if (isset($user['referral_time'])) {
|
|
|
$html .= "推荐时间: {$user['referral_time']}";
|
|
|
@@ -219,7 +219,7 @@ class ViewReferralChainAction extends RowAction
|
|
|
}
|
|
|
$html .= "</div>";
|
|
|
$html .= "</div>";
|
|
|
-
|
|
|
+
|
|
|
// 添加箭头(除了最后一个)
|
|
|
if ($index < count($chainData) - 1) {
|
|
|
$html .= '<div class="chain-arrow">↓ 推荐</div>';
|