diff --git a/Cunkebao/app/wechat-accounts/[id]/page.tsx b/Cunkebao/app/wechat-accounts/[id]/page.tsx index 672b0f87..576a38c2 100644 --- a/Cunkebao/app/wechat-accounts/[id]/page.tsx +++ b/Cunkebao/app/wechat-accounts/[id]/page.tsx @@ -134,6 +134,28 @@ export default function WechatAccountDetailPage({ params }: { params: { id: stri const friendsLoadingRef = useRef(null) const friendsContainerRef = useRef(null) + const [initialData, setInitialData] = useState<{ + avatar: string; + nickname: string; + status: "normal" | "abnormal"; + wechatId: string; + deviceName: string; + } | null>(null) + + useEffect(() => { + // 从 URL 参数中获取初始数据 + const searchParams = new URLSearchParams(window.location.search); + const dataParam = searchParams.get('data'); + if (dataParam) { + try { + const decodedData = JSON.parse(decodeURIComponent(dataParam)); + setInitialData(decodedData); + } catch (error) { + console.error('解析初始数据失败:', error); + } + } + }, []); + // 计算好友列表容器高度 const getFriendsContainerHeight = () => { // 最少显示一条记录的高度,最多显示十条记录的高度 @@ -411,6 +433,14 @@ export default function WechatAccountDetailPage({ params }: { params: { id: stri if (response && response.code === 200) { // 转换数据格式 const transformedAccount = transformWechatAccountDetail(response) + // 使用初始数据覆盖API返回的部分字段 + if (initialData) { + transformedAccount.avatar = initialData.avatar; + transformedAccount.nickname = initialData.nickname; + transformedAccount.status = initialData.status; + transformedAccount.wechatId = initialData.wechatId; + transformedAccount.deviceName = initialData.deviceName; + } setAccount(transformedAccount) // 如果有好友总数,更新friendsTotal状态 @@ -425,6 +455,14 @@ export default function WechatAccountDetailPage({ params }: { params: { id: stri }) // 获取失败时使用模拟数据 const mockData = generateMockAccountData(); + // 使用初始数据覆盖模拟数据的部分字段 + if (initialData) { + mockData.avatar = initialData.avatar; + mockData.nickname = initialData.nickname; + mockData.status = initialData.status; + mockData.wechatId = initialData.wechatId; + mockData.deviceName = initialData.deviceName; + } setAccount(mockData); // 更新好友总数 setFriendsTotal(mockData.friendCount); @@ -438,6 +476,14 @@ export default function WechatAccountDetailPage({ params }: { params: { id: stri }) // 请求出错时使用模拟数据 const mockData = generateMockAccountData(); + // 使用初始数据覆盖模拟数据的部分字段 + if (initialData) { + mockData.avatar = initialData.avatar; + mockData.nickname = initialData.nickname; + mockData.status = initialData.status; + mockData.wechatId = initialData.wechatId; + mockData.deviceName = initialData.deviceName; + } setAccount(mockData); // 更新好友总数 setFriendsTotal(mockData.friendCount); @@ -447,7 +493,7 @@ export default function WechatAccountDetailPage({ params }: { params: { id: stri } fetchAccount() - }, [params.id]) + }, [params.id, initialData]) if (!account) { return
加载中...
@@ -534,7 +580,7 @@ export default function WechatAccountDetailPage({ params }: { params: { id: stri {account.nickname[0]} {account.isVerified && ( - + 已认证 )} diff --git a/Cunkebao/app/wechat-accounts/page.tsx b/Cunkebao/app/wechat-accounts/page.tsx index e814b928..d3a995f6 100644 --- a/Cunkebao/app/wechat-accounts/page.tsx +++ b/Cunkebao/app/wechat-accounts/page.tsx @@ -256,7 +256,17 @@ export default function WechatAccountsPage() { router.push(`/wechat-accounts/${account.id}`)} + onClick={() => { + // 将需要的数据编码为 URL 安全的字符串 + const accountData = encodeURIComponent(JSON.stringify({ + avatar: account.avatar, + nickname: account.nickname, + status: account.status, + wechatId: account.wechatId, + deviceName: account.deviceName, + })); + router.push(`/wechat-accounts/${account.id}?data=${accountData}`); + }} >
diff --git a/Server/application/cunkebao/config/route.php b/Server/application/cunkebao/config/route.php index 415e811c..cc4fb315 100644 --- a/Server/application/cunkebao/config/route.php +++ b/Server/application/cunkebao/config/route.php @@ -7,7 +7,6 @@ use think\facade\Route; // 定义RESTful风格的API路由 Route::group('v1/', function () { - // 设备管理相关 Route::group('devices', function () { Route::get('add-results', 'app\cunkebao\controller\device\GetAddResultedV1Controller@index'); // 更新设备任务配置 @@ -24,10 +23,13 @@ Route::group('v1/', function () { // 设备微信相关 Route::group('device/wechats', function () { Route::get('', 'app\cunkebao\controller\wechat\GetWechatsOnDevicesV1Controller@index'); // 获取在线微信账号列表 + Route::get(':id', 'app\cunkebao\controller\wechat\GetWechatOnDeviceSummarizeV1Controller@index'); // 获取微信号详情 + + + Route::get('friends', 'app\cunkebao\controller\DeviceWechat@getFriends'); // 获取微信好友列表 Route::get('count', 'app\cunkebao\controller\DeviceWechat@count'); // 获取在线微信账号数量 Route::get('device-count', 'app\cunkebao\controller\DeviceWechat@deviceCount'); // 获取有登录微信的设备数量 - Route::get(':id', 'app\cunkebao\controller\DeviceWechat@detail'); // 获取微信号详情 Route::put('refresh', 'app\cunkebao\controller\DeviceWechat@refresh'); // 刷新设备微信状态 Route::post('transfer-friends', 'app\cunkebao\controller\DeviceWechat@transferFriends'); // 微信好友转移 }); @@ -78,7 +80,7 @@ Route::group('v1/', function () { Route::group('chatroom', function () { Route::get('', 'app\cunkebao\controller\chatroom\GetChatroomListV1Controller@index'); // 获取群列表 Route::get('getMemberList', 'app\cunkebao\controller\chatroom\GetChatroomListV1Controller@getMemberList'); // 获取群详情 - + }); // 计划任务相关路由 diff --git a/Server/application/cunkebao/controller/wechat/GetWechatOnDeviceSummarizeV1Controller.php b/Server/application/cunkebao/controller/wechat/GetWechatOnDeviceSummarizeV1Controller.php new file mode 100644 index 00000000..e2a5d02c --- /dev/null +++ b/Server/application/cunkebao/controller/wechat/GetWechatOnDeviceSummarizeV1Controller.php @@ -0,0 +1,152 @@ +request->param('id/d')); + + + dd( + + $aa->toArray() + ); + + } + + + + + /** + * 获取微信号详情 + * + * @return \think\response\Json + */ + public function index() + { + try { + + + + $this->getWechatAccount(); + + + + + + + // 获取微信号基本信息 + $wechat = WechatAccountModel::where('id', $id) + ->where('isDeleted', 0) + ->find(); + + if (!$wechat) { + return json([ + 'code' => 404, + 'msg' => '微信号不存在' + ]); + } + + // 计算账号年龄(从创建时间到现在) + $accountAge = 0; + if ($wechat['createTime']) { + $createTime = strtotime($wechat['createTime']); + $now = time(); + $accountAge = floor(($now - $createTime) / (24 * 3600)); + } + + // 计算活跃程度(根据消息数) + $activityLevel = '低'; + if ($wechat['thirtyDayMsgCount'] > 1000) { + $activityLevel = '高'; + } elseif ($wechat['thirtyDayMsgCount'] > 500) { + $activityLevel = '中'; + } + + // 评估账号权重(示例算法) + $weight = 0; + // 基础权重 + $weight += 10; + // 好友数量权重 + $weight += min($wechat['totalFriend'] / 100, 20); + // 活跃度权重 + $weight += min($wechat['thirtyDayMsgCount'] / 100, 20); + // 账号年龄权重 + $weight += min($accountAge / 30, 10); + // 在线状态权重 + if ($wechat['wechatAlive']) { + $weight += 5; + } + + // 获取限制记录(示例数据,实际需要从数据库获取) + $restrictions = [ + [ + 'type' => '添加好友限制', + 'reason' => '频繁添加好友', + 'startTime' => date('Y-m-d H:i:s', strtotime('-1 day')), + 'endTime' => date('Y-m-d H:i:s', strtotime('+1 day')) + ] + ]; + + // 处理返回数据 + $data = [ + 'basicInfo' => [ + 'id' => $wechat['id'], + 'wechatId' => $wechat['wechatId'], + 'nickname' => $wechat['nickname'] ?: $wechat['accountNickname'], + 'avatar' => $wechat['avatar'], + 'status' => $wechat['wechatAlive'] ? '在线' : '离线', + 'deviceStatus' => $wechat['deviceAlive'] ? '在线' : '离线', + 'deviceInfo' => $wechat['imei'] . ($wechat['deviceMemo'] ? " ({$wechat['deviceMemo']})" : ''), + 'gender' => $wechat['gender'], + 'region' => $wechat['region'], + 'signature' => $wechat['signature'] + ], + 'statistics' => [ + 'totalFriend' => $wechat['totalFriend'], + 'maleFriend' => $wechat['maleFriend'], + 'femaleFriend' => $wechat['femaleFriend'], + 'canAddFriendCount' => 30 - (isset($wechat['yesterdayMsgCount']) ? intval($wechat['yesterdayMsgCount']) : 0), + 'yesterdayMsgCount' => $wechat['yesterdayMsgCount'], + 'sevenDayMsgCount' => $wechat['sevenDayMsgCount'], + 'thirtyDayMsgCount' => $wechat['thirtyDayMsgCount'] + ], + 'accountInfo' => [ + 'age' => $accountAge, + 'activityLevel' => $activityLevel, + 'weight' => round($weight, 2), + 'createTime' => $wechat['createTime'], + 'lastUpdateTime' => $wechat['updateTime'] + ], + 'restrictions' => $restrictions, + ]; + + return json([ + 'code' => 200, + 'msg' => '获取成功', + 'data' => $data + ]); + } catch (\Exception $e) { + return json([ + 'code' => 500, + 'msg' => '获取失败:' . $e->getMessage() + ]); + } + } +} \ No newline at end of file