From 4876fbcba29d439f5ee56b921293d391c012ad48 Mon Sep 17 00:00:00 2001 From: Billy <641833868@qq.com> Date: Fri, 7 Nov 2025 14:03:57 +0800 Subject: [PATCH] =?UTF-8?q?=E9=82=80=E8=AF=B7=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/shopro/library/InviteHelper.php | 52 ++++++++++++++++---------- frontend/pages/order/confirm.vue | 25 ++++++------- 2 files changed, 44 insertions(+), 33 deletions(-) diff --git a/addons/shopro/library/InviteHelper.php b/addons/shopro/library/InviteHelper.php index b233d3b..519b28c 100644 --- a/addons/shopro/library/InviteHelper.php +++ b/addons/shopro/library/InviteHelper.php @@ -53,30 +53,42 @@ class InviteHelper } /** - * 验证邀请码 - * @param string $inviteCode 邀请码 + * 验证邀请码或手机号 + * @param string $inviteCode 邀请码或手机号 * @return array */ public static function validate($inviteCode) { - $inviteCode = strtoupper(trim($inviteCode)); + $input = trim($inviteCode); - if (strlen($inviteCode) !== 6) { - return ['code' => 0, 'msg' => '邀请码格式错误']; + // 判断输入类型:11位纯数字识别为手机号,否则识别为邀请码 + if (preg_match('/^\d{11}$/', $input)) { + // 手机号模式 + $inviter = UserModel::where('mobile', $input) + ->where('status', 'normal') + ->field(['id', 'nickname', 'avatar', 'invite_code', 'mobile']) + ->find(); + } else { + // 邀请码模式 + $input = strtoupper($input); + + if (strlen($input) !== 6) { + return ['code' => 0, 'msg' => '邀请信息格式错误']; + } + + $inviter = UserModel::where('invite_code', $input) + ->where('status', 'normal') + ->field(['id', 'nickname', 'avatar', 'invite_code', 'mobile']) + ->find(); } - $inviter = UserModel::where('invite_code', $inviteCode) - ->where('status', 'normal') - ->field(['id', 'nickname', 'avatar', 'invite_code']) - ->find(); - if (!$inviter) { - return ['code' => 0, 'msg' => '邀请码不存在']; + return ['code' => 0, 'msg' => '邀请信息无效']; } return [ 'code' => 1, - 'msg' => '邀请码有效', + 'msg' => '邀请信息有效', 'data' => [ 'user_id' => $inviter->id, 'invite_code' => $inviter->invite_code, @@ -91,13 +103,13 @@ class InviteHelper /** * 绑定上下级关系 - * @param string $inviteCode 邀请码 + * @param string $inviteCode 邀请码或手机号 * @param int $userId 被邀请人ID * @return array */ public static function bind($inviteCode, $userId) { - $inviteCode = strtoupper(trim($inviteCode)); + $input = trim($inviteCode); $user = UserModel::find($userId); if (!$user) { @@ -109,8 +121,8 @@ class InviteHelper return ['code' => 0, 'msg' => '您已有推荐人,无法修改']; } - // 验证邀请码 - $validateResult = self::validate($inviteCode); + // 验证邀请码或手机号 + $validateResult = self::validate($input); if ($validateResult['code'] != 1) { return $validateResult; } @@ -119,15 +131,17 @@ class InviteHelper // 不能邀请自己 if ($inviterUserId == $userId) { - return ['code' => 0, 'msg' => '不能使用自己的邀请码']; + return ['code' => 0, 'msg' => '不能使用自己的邀请信息']; } // 绑定 $user->parent_user_id = $inviterUserId; - $user->invite_code_used = $inviteCode; + $user->invite_code_used = $validateResult['data']['invite_code']; // 统一使用邀请码保存 $user->save(); - \think\Log::info("邀请码绑定: 邀请人[{$inviterUserId}] -> 被邀请人[{$userId}] 邀请码[{$inviteCode}]"); + // 判断是手机号还是邀请码用于日志 + $inputType = preg_match('/^\d{11}$/', $input) ? '手机号' : '邀请码'; + \think\Log::info("邀请绑定: 邀请人[{$inviterUserId}] -> 被邀请人[{$userId}] {$inputType}[{$input}]"); // 触发分销业绩统计 $agent = new \addons\shopro\service\commission\Agent($userId); diff --git a/frontend/pages/order/confirm.vue b/frontend/pages/order/confirm.vue index b868aa7..3d22846 100644 --- a/frontend/pages/order/confirm.vue +++ b/frontend/pages/order/confirm.vue @@ -48,11 +48,11 @@ v-if="!userInfo.parent_user_id" class="order-item ss-flex ss-col-center ss-row-between ss-p-x-20 bg-white ss-r-b-20" > - 邀请码 + 邀请信息