diff --git a/soul-admin/src/components/modules/user/UserDetailModal.tsx b/soul-admin/src/components/modules/user/UserDetailModal.tsx index 59f54252..7394709e 100644 --- a/soul-admin/src/components/modules/user/UserDetailModal.tsx +++ b/soul-admin/src/components/modules/user/UserDetailModal.tsx @@ -228,10 +228,10 @@ export function UserDetailModal({ const removeTag = (tag: string) => setEditTags(editTags.filter((t) => t !== tag)) - // 神射手查询 + // 用户资料完善查询(支持多维度) async function handleSSSQuery() { - if (!sssQueryPhone && !user?.openId) { - setSssError('请输入手机号或确保用户已绑定 openId') + if (!sssQueryPhone && !sssQueryOpenId && !sssQueryWechatId) { + setSssError('请至少输入手机号、微信号或 OpenID 中的一项') return } setSssLoading(true) @@ -240,12 +240,17 @@ export function UserDetailModal({ try { const params = new URLSearchParams() if (sssQueryPhone) params.set('phone', sssQueryPhone) - if (user?.openId) params.set('openId', user.openId) + if (sssQueryOpenId) params.set('openId', sssQueryOpenId) + if (sssQueryWechatId) params.set('wechatId', sssQueryWechatId) const data = await get<{ success?: boolean; data?: ShensheShouData; error?: string }>( `/api/admin/shensheshou/query?${params}`, ) - if (data?.success && data.data) setSssData(data.data) - else setSssError(data?.error || '未查询到数据,可能该用户未在神射手中收录') + if (data?.success && data.data) { + setSssData(data.data) + // 自动回填到用户信息 + if (user) await handleSSSEnrich(data.data) + } + else setSssError(data?.error || '未查询到数据,该用户可能未在神射手收录') } catch (e) { console.error('SSS query error:', e) setSssError('请求失败,请检查神射手接口配置') @@ -254,6 +259,22 @@ export function UserDetailModal({ } } + // 查询后自动回填用户基础信息 + async function handleSSSEnrich(sssResult: ShensheShouData) { + if (!user) return + try { + await post('/api/admin/shensheshou/enrich', { + userId: user.id, + phone: sssQueryPhone || user.phone || '', + openId: sssQueryOpenId || user.openId || '', + wechatId: sssQueryWechatId || user.wechatId || '', + }) + loadUserDetail() + } catch (e) { + console.error('SSS enrich error:', e) + } + } + // 神射手 - 将当前用户信息推送/同步到神射手 async function handleSSSIngest() { if (!user) return