import { useEffect, useState } from 'react'; import { getWechatAgentRouteStatus, getWechatBindingStatus, resetWechatAgentRoute, type WechatAgentRouteStatus, } from '../api/client'; import { buildWechatAuthorizeUrl } from '../utils/wechat'; function formatRouteTime(timestamp: number | null) { if (!timestamp) return '暂无'; const date = new Date(timestamp); if (Number.isNaN(date.getTime())) return '暂无'; const pad = (value: number) => String(value).padStart(2, '0'); return `${date.getMonth() + 1}-${date.getDate()} ${pad(date.getHours())}:${pad(date.getMinutes())}`; } export function WechatAccountButton({ returnTo, onBeforeAction, }: { returnTo?: string; onBeforeAction?: () => void; }) { const [bound, setBound] = useState(null); const [nickname, setNickname] = useState(null); const [debugOpen, setDebugOpen] = useState(false); const [route, setRoute] = useState(null); const [routeLoading, setRouteLoading] = useState(false); const [routeError, setRouteError] = useState(null); const [resetting, setResetting] = useState(false); useEffect(() => { void getWechatBindingStatus().then((status) => { if (!status.enabled) { setBound(null); return; } setBound(status.bound); setNickname(status.nickname ?? null); }); }, []); useEffect(() => { if (!debugOpen) return; let cancelled = false; setRouteLoading(true); setRouteError(null); void getWechatAgentRouteStatus() .then((status) => { if (cancelled) return; setRoute(status); }) .catch((err) => { if (cancelled) return; setRouteError(err instanceof Error ? err.message : '获取公众号 Agent 状态失败'); }) .finally(() => { if (!cancelled) setRouteLoading(false); }); return () => { cancelled = true; }; }, [debugOpen]); if (bound === null) return null; if (bound) { return ( <> {debugOpen && (
setDebugOpen(false)}>
event.stopPropagation()} aria-modal="true" role="dialog" aria-label="公众号 Agent 调试" >

Wechat Agent

公众号调试

微信绑定 {nickname ? `已绑定 · ${nickname}` : '已绑定'}
公众号通道 {route?.enabled ? '已启用' : routeLoading ? '读取中…' : '未启用'}
OpenID {route?.openid ?? '暂无'}
Agent Session {route?.agentSessionId ?? '暂无'}
路由状态 {route?.routeStatus ?? '暂无'}
最近刷新 {formatRouteTime(route?.updatedAt ?? null)}
{routeLoading &&

正在读取公众号 Agent 路由状态…

} {routeError &&

{routeError}

} {!routeLoading && !routeError && route && !route.enabled && (

当前环境未启用公众号消息转发,所以不会影响现有 H5 聊天。

)}
)} ); } return ( ); }